Steve Grunwell

Open-source contributor, speaker, and coffee snob

A series of pipes and gauges along a wall

Travis CI for WordPress Plugins

If you’ve spent much time on GitHub, you’ve probably come across repositories with green badges that look like this: Build: Passing

A lot of repositories will have these badges/shields, as they indicate that the last run of the Continuous Integration (CI) pipeline for this repository “passed” (e.g. everything is working as expected).

Now, Continuous Integration can mean a lot of things: maybe the project has a wealth of well-written tests that are all passing, or the simply that coding standards are all up-to-par. No matter the coverage level, this green badge indicates to potential users of your code that it satisfies the quality checks you’ve put in place.

Better yet, once we have a Continuous Integration pipeline in place, we can make it a prerequisite for pull requests to be merged. If you’re tired of PRs that don’t respect your project’s coding standards, ignore PHP compatibility rules, or otherwise produce lots of overhead, automating the high-level testing can save you lots of time.

Continue reading→

Someone writing a to-do list in a notebook

Steal This Idea: Extract TODOs from a Codebase

As a software developer, it’s incredibly common to browse a codebase and find that the functionality that was advertised doesn’t really exist.

Maybe the function or class method is there, but where there should be some brilliant logic, instead there’s a comment to the effect of “TODO: actually implement this.”

It’s frustrating, especially if you know that the developer who wrote that comment is long-gone, but what can you do? The nature of the industry is that we’re hopping between projects (or jobs) almost constantly; how can anyone remember all of the “when I get time, I need to get back to that” demands on them?

Continue reading→

A close-up on a stack of US currency

Steal This Idea: Campaign Contribution Visualizer

In the same vein as my idea for a Social Media Analyzer tool, my interest in politics also brought up another question: why isn’t there an easy way to see who — at a local level — is supporting different candidates?

Legally, political campaigns have to disclose who their donors are. After all, money often buys influence, and an elected officials’ constituents have the right to know for whom their representative might be working.

Naturally, there are all kinds of sneaky ways to get around these rules (search “dark money” for more on that topic), but at the local-level it’s good to know who has the ear of your local representative.

In the state of Ohio, we have a rather simple system where raw campaign contribution data is available for downloading and searching, but there isn’t an easy way to see (for instance) what counties are supporting which candidates.

Continue reading→

An aisle overflowing with books

Steal This Idea: Social Media Analyzer

After the 2018 mid-term elections proved to be rather disappointing for the state of Ohio, I toyed with the idea of running for public office. It’s still not something I’ve ruled out, but the emotions it all stirred up got me thinking about campaign-oriented technology.

I started thinking about what tools might benefit a younger, progressive candidate and I realized that social media can be a tremendous asset or a tremendous liability.

People my age (early 30s) are the first ones to really enter adulthood in the age of social media; I joined Facebook when it was first rolling out to select Universities, and had been blogging and on MySpace throughout high school.

Unfortunately, when you put yourself into the public eye, you must expect some level of scrutiny. Old Tweets posts will be dug up, tagged photos will be scrutinized, and Facebook posts from your 21st birthday will be surfaced. If you’re not doing this research ahead of time, you can be damn sure your opposition will.

Continue reading→

A drawing of a lightbulb pinned to a corkboard

Please Steal These Ideas

A few years ago, I wrote a blog post with an idea for a “Be Your Own Barista” bar at coffee shops and hotels. I don’t know whether or not anyone picked it up and ran with it or not (if so, please let me know!), but thought process behind that post was essentially “hey, I have an idea but no means/interest in taking it to fruition.”

Today, I have a personal Trello board filled with ideas. A lot of them are potential software libraries or products, but I occasionally dip outside of the realm of programming.

The problem is that I don’t have time to do them all.

Continue reading→

A yellow bird perched on a Sakura tree

Quick Tip: Monitor Multiple Twitter Hashtags at Once

Of the major social networks, Twitter is about the only place I regularly participate. It’s far from perfect (and I’ve become quite skilled at the ol’ report-and-block maneuver), but for me, Twitter is that right combination of breaking news, tech discussions, and comedy (safe to say we could all do without the white supremacists and bots on the service, of course).

My employer, Liquid Web, is a Platinum Sponsor of WordCamp US this weekend, and we’ll have a few different hashtags we’ll be promoting. While I’m not directly in sales/marketing, I still wanted to find a way to stay on top of both WordCamp US and Liquid Web-related posts.

There are certainly tools out there for monitoring multiple hashtags, but I was hoping to find a native way within either Tweetbot or (shudder) the official Twitter app. Unfortunately, neither seem to [directly] offer this feature natively.

Continue reading→

Assorted patterned tiles

Demystifying Regular Expressions

Early in my career, I stumbled upon this regular expressions cheat sheet by Dave Child in one of those “10 cheat sheets every developer should have”-type round-up articles.

I had been using regular expressions for several years before I first noticed that other developers were struggling. Patterns that seemed natural to me were complex ciphers to my peers, and an audible groan would echo through the office whenever a solution that leveraged regular expressions was proposed.

Here’s the rub: regular expressions don’t have to be that hard. They certainly require a bit of getting used to and some practice, but regex patterns are tremendously useful when validating data, searching files, or even filtering tweets.

Continue reading→

A close up of a pair of stainless steel knife blades

Writing Custom Laravel Blade Directives

Though it’s far from the top of the list of most celebrated features, Laravel’s Blade templating engine makes it really nice to work with data on the front-end of our applications. With built-in helpers for handling loops, conditionals, and sub-views, Blade gives us a nice way to write dynamic templates that don’t feel like a bunch of PHP mixed in with HTML.

Were you aware you can author your own Laravel Blade directives? The syntax is probably a little under-documented, but it can be an incredibly useful tool if you find yourself applying the same patterns over and over. In this post, I want to show you a Blade directive I find myself using in pretty much every application I build: @activeIfInRouteGroup.

Continue reading→

Stacks of vintage, sepia-toned photographs

Paid Support for Legacy Libraries

A few weeks ago, I was talking to my good friend Eric Mann about an open-source package he maintains. This particular package has quite a number of downloads and active users, despite Eric trying to abandon it a few years ago. He’s since restarted development on it, but now he faces a problem: people are upset that he’s dropped legacy PHP version support.

This particular package is popular within the WordPress ecosystem, which is big on backwards compatibility. Despite the fact that both PHP 5.6 and 7.0 stopped receiving even security updates at the end of 2018, there are still plenty of users out there running their applications in old, insecure versions of PHP. As a result, some people were rather upset when Eric stated “I’m not going to spend my [limited] time supporting EOL’d versions of PHP.”

Some commenters were quick to jump in with remarks ranging from “well, it doesn’t take that much time to support older versions of PHP…” to “WordPress supports older versions of PHP, so should you!”, but Eric remained firm: if you want support for older versions of PHP, you can either pay me for my time or contribute the code yourself.

It may sound a little harsh, but I’m 100% with Eric on this one: he doesn’t owe anybody his time and effort. That’s time he could be spending with his family, out hiking, or working on projects that he enjoys. Heck, knowing what Eric can do, back-porting support for old versions of PHP should be way down on his list of priorities.

Continue reading→

Page 1 of 13

Be excellent to each other.