Slanted Background Stripes

Why Eat Your Coffee? page
Sample effect

While working on a recent project, I needed to use angled background stripes on a number of pages.

Here are a couple of requirements that limited my options:

  • Angled stripes with text content and a background color and/or image
  • Angled stripes stacked on top of each other

Continue reading “Slanted Background Stripes”

WooCommerce Downloadable Products: Granting Permissions to Previous Customers

If you’re using WooCommerce to provide downloadable products and add a new download, previous customers do not automatically get access to it as of v3.x.

Here are a couple of options: Continue reading “WooCommerce Downloadable Products: Granting Permissions to Previous Customers”

John Adams by David McCullough

John Adams by David McCulloughFinally…back to the actual presidents. John Adams by David MucCullough was my pick for our second president, partly because we owned a copy of the book already, and partly because it’s one of the most-acclaimed biographies of this lesser-known founding father.

I took almost a year to finish this 752-page book. At times it seemed a bit slow, but I did keep getting sidetracked with other unrelated books, so it’s not this volume’s fault.

Overall, it was a good biography; I didn’t feel like McCullough tried to gloss over Adams’ foibles and character deficiencies. It seemed an accurate portrayal of an intelligent, sometimes-cranky politician who was self-aware enough to know that he was too ambitious.

Buy the book on Amazon

Post Type Search Form

Adds a shortcode you can use to show a post type-specific search form.

To use, add [post_type_search_form post_type="post_type_here"] where you want the search form to display.

Get the code at the GitHub repository. Continue reading “Post Type Search Form”

How to Use Backblaze B2 with Sermon Manager for WordPress

If you’re hosting a church website on shared webhosting, chances are they limit how much space and bandwidth you can use each month. Uploading sermons each week can eat into those limits very quickly.

Enter Backblaze B2, a cloud storage option costs less than a quarter of what Amazon S3 would cost for the same amount of storage. Backblaze has been around for years as a computer backup solution and has made their name by providing reliable storage at low cost.

In fact, the first 10GB of storage is free, so you might even be able to host your sermons at no cost at all. Continue reading “How to Use Backblaze B2 with Sermon Manager for WordPress”

WPForms: Force Async Scripts

This little plugin has one job: make WPForms’ Google Recaptcha script load asynchronously.

Get the plugin on GitHub.

Installation Instructions

  1. Copy the wpforms-recaptcha-async.php file to your wp-content/plugins/ directory (or compress to a zip file and upload in the WordPress backend “Plugins > Add New”
  2. Activate
  3. That’s it. All the merged scripts will be loaded with the async and defer attributes.

Merge + Minify + Refresh: Force Async Scripts

This little plugin has one job: make all merged scripts produced by the Merge + Minify + Refresh plugin load asynchronously.

Get the plugin on GitHub.

Installation Instructions

  1. Copy the merge-minify-refresh-async.php file to your wp-content/plugins/ directory (or compress to a zip file and upload in the WordPress backend “Plugins > Add New”
  2. Activate
  3. That’s it. All the merged scripts will be loaded with the async attribute.

Potential Issues

Note that if you have plugins or other code that adds inline Javascript, it probably will break if it’s depending on jQuery (for example) to be loaded and active already.

One workaround is to exclude /wp-includes/js/jquery/jquery.js from the Merge + Minify + Refresh cache, but you may have to exclude other scripts as well.

Infusionsoft to Shopify Customer History Migration

A helper utility to copy Infusionsoft contacts and their order history to Shopify, ignoring Infusionsoft contacts who do not have orders associated with their contact ID.

It also optionally pulls info from a WooCommerce installation.

Get the code from the GitHub repository. Continue reading “Infusionsoft to Shopify Customer History Migration”

The Second Machine Age by Erik Brynjolfsson and Andrew McAfee

I recently finished reading The Second Machine Age: Work, Progress, and Prosperity in a Time of Brilliant Technologies by Erik Brynjolfsson and Andrew McAfee and it left me with quite a bit to think about.

The premise of the book is that while the first machine age used the “forces of energy trapped in chemical bonds” to release us from the limits of muscle power, the technologies we have as part of the second machine age are doing the same for mental power.

Comparison between the Machine Ages

The first machine age was all about mechanization: discovering how to use (primarily) chemical reactions to produce mechanical power, freeing us from the limits imposed by muscle power (both human and animal). This greatly expanded our boundaries of time and space, allowing us to travel much further and faster that was previously possible, as well as increasing our production capability.

The second machine age is about knowledge and information: using electronic methods to extend our communication and mental capabilities. Computers with their essentially-infinite storage capacity and near-instantaneous communication speeds allow us to “remember” anything at any time without actually storing it in our brains, and we can easily communicate with other people at different geographic or temporal locations.

Dangers of the Digital Age

While modern technology absolutely brings benefits, we should beware of its dangers as well. The authors noted “The Industrial Revolution was accompanied by soot-filled London skies and horrific exploitation of child labor. What will be their modern equivalent? Rapid and accelerating digitization is likely to bring economic rather than environmental disruption. … Technological progress is going to leave behind some people, perhaps even a lot of people, as it races ahead. … Over time, the people of England and other countries concluded that some aspects of the Industrial Revolution were unacceptable and took steps to end them (democratic government and technological progress both helped with this).” (pages 10–11).

Characteristics of the Digital Age

A few key characteristics of technological progress include these:


Moore’s Law and similar software improvement capabilities illustrate how the speed of change is accelerating.


Digital information is “non-rival” (not “used up” when accessed) and has a near-zero cost of reproduction (it’s extremely cheap to make another copy).


General-purpose technologies (like a typical computer, general command-line utilities, etc.) have become pervasive and enable a huge number of new inventions when combined in new and interesting ways.

Wealth and Production

The authors note that in the first machine age, the wealthiest individuals were those who owned and controlled tangible assets—such as factories and means of production—while the less-skilled workers (those who actually did the work) did not fare as well.

They believe that production in the second machine age depends on these four intangible assets:

  • Intellectual property (patents, copyrights, research and development, etc.)
  • Organization capital (business practices, business models, etc.)
  • User-generated content (Facebook posts, etc.)
  • Human capital (skilled employees, etc.)

They draw the conclusion that as in the first machine age, those who control the capital will become increasingly more wealthy and powerful.


The authors discuss the trend of first-to-market and/or top-quality sellers capturing a huge share of the market (a much larger market share than is typical in physical product markets), mostly due to the non-rival and marginal reproductive cost characteristics of digital products. A power law distribution graph (long tail) illustrates this, compared to a normal distribution (bell curve) that previously was typical in markets—both goods markets and labor markets.

Power Law distribution
Power Law (long tail) distribution
Normal distribution
Normal (bell curve) distribution

They believe the characteristics of the digital age will tend to hollow out the middle class for these reasons:

  • There is no large bump in the middle of a power distribution graph; power and wealth is highly concentrated at one end.
  • There is no “average” or “typical” in a power distribution graph.

Where to Go from Here

The authors conclude by examining how humans and computers are likely to interact with each other in the future (spoiler alert: computers and humans are most effective when computers complement or augment humans, rather than replacing them).

They offer several recommendations for individuals:

  • “Improve the skills of ideation/creativity, large-frame pattern recognition, and complex communication” (page 197)
  • “Take advantage of self-organizing learning environments” (page 197)

They also offer a number of policy and long-term recommendations, but you’ll have to read the book for those.


I would definitely recommend anyone in the technical industry especially to read this book, as well as anyone in the position to influence public and education policy.

Buy the book on Amazon

It’s Even Worse Than It Looks: How the American Constitutional System Collided With the Politics of Extremism by Thomas E. Mann and Norman J. Ornstein

It’s Even Worse than It LooksThis 240-page volume by Thomas E. Mann and Norman J. Ornstein seeks to examine the causes for hyper-partisanship, deadlocked Congress, and refusal of the major parties to compromise to accomplish anything significant.

Honestly, this book sounded like it had been written during the 2016 election season rather than in 2012. They did release a second edition in 2016 with some updated information.


Adversarial Mindset

First, the authors point out that the Republican and Democrat parties have increasingly pointed at each other as adversaries, acting as if it’s “better to have an issue than a bill, to shape the party’s brand name and highlight party differences.” (p51). While undoubtedly this tactic does help win elections, it also limits the ability to accomplish anything.

“The single-minded focus on scoring political points over solving problems, escalating over the last several decades, has reached a level of such intensity and bitterness that the government seems incapable of taking and sustaining public decisions responsive to the existential challenges facing the country.”

Asymmetric Polarization

The authors coined this term to describe their conclusion that though politics are more polarized than in recent decades, they have not both moved the same distance from center. They argue that the Republican party has moved further to the right and become “more idealogically extreme;… scornful of compromise…; and dismissive of the legitimacy of its political opposition, all but declaring war on the government.” (p102). They don’t hold the Democratic party up as a “paragon of civic virtue” either, but contend that it is more “idealogically centered and diverse,… open to incremental changes in policy fashioned through bargaining with the Republicans, and less disposed to or adept at take-no-prisoners conflict between the parties.” (p102).


To address the hyper-polarized state of current politics, the authors seek parties that are “less idealogically polarized, more accepting of each other’s legitimacy, and more open to genuine deliberation and bargaining on issues of fundamental importance to the future of the country.” (p132, emphasis mine).

Expand the Electorate

Higher voter turnout would bring more moderate voters to the polls, reducing the extreme partisanship shown especially in primary elections.

Reduce Presumed Bias Against Moderates

Reducing gerrymandering, making primaries open or semi-closed instead of completely closed, and instant-runoff voting (ranking candidates in order of preference, rather than picking just one) may help reduce polarization.

Change Campaign Funding and Spending Rules and Practices

Requiring the disclosure of donors and prohibiting contributions from lobbyists and others receiving government money would help make candidates more transparent.


They include several chapters with more suggestions for reducing hyper-polarization and improving honest deliberation and debate, both among citizens and government officials.


No matter your political leanings, you will find something here you do not like, probably because the authors managed to put a finger on something you do not like to acknowledge.

These authors were remarkably prescient; writing in 2012, they made some predictions of what would happen if a Republican government was elected in 2012. In 2017, nearly all of these have taken place already, with more on the horizon:

  • Dismantling health reform
  • Gutting financial regulation
  • Cutting taxes even more
  • Making deep cuts in domestic spending
  • Strong temptation on Mitch McConnell’s part to act unilaterally to erase the filibuster to take advantage of this rare chance to achieve revolutionary change
  • Steep reductions in Medicaid through block grants to the states
  • Partial privatization of Social Security
  • Massive deregulation in finance and environmental policy
  • More than half of the citizens would likely strongly oppose these moves and be jolted by their implementation

(pages 199–200)

I wholeheartedly recommend reading this book and considering what you can do to improve genuine deliberation and debate rather than name-calling, adversarial positions, and blind partisanship.

Buy the book on Amazon