Steve Grunwell

Open-source contributor, speaker, and electronics tinkerer

Taco, a black cat, peeking out of a white drawer

The Beauty of PHP Value Objects

At last year’s php[tek], one of my biggest “holy cow, why haven’t I been doing this?!” moments came from my friend Andrew Cassell when he explained PHP Value Objects in the context of Domain-Driven Design.

Put simply, a Value Object is an immutable object that encapsulates some data and will always be in a valid state.

Continue reading→

A silhouette of a security camera

Why I’m Dropping Google Analytics

I’ve had Google Analytics running on SteveGrunwell.com to some degree since its earliest iterations over ten years ago. Over time, I’ve been lowering the amount of data collected because, to be honest, I wasn’t doing anything with it.

As a result, I’m proud to announce that I’ve removed Google Analytics tracking from SteveGrunwell.com effective immediately.

Continue reading→

A retro condenser microphone on a nice, purple background

Steve of the Union ’22

Well now, it’s been a minute!

I haven’t published anything on here in over a year, and anything personal in far longer than that. Considering I just linked to my site from a pinned tweet, I should probably have some sort of “proof of life”.

As such, here’s a quick run-down of what’s been new in my life since…well, honestly, since the pandemic started.

Continue reading→

Two coffees from Fire Department Coffee surrounding a coffee mug with a dripper

Reviewed: Spirit-Infused Coffees from Fire Department Coffee

A couple weeks ago, Madeline Hayes, the Community Manager for Rockford, IL-based Fire Department Coffee, reached out after stumbling upon my post on roasting bourbon-infused coffee.

As it turns out, Fire Department Coffee has a whole line of spirit-infused coffees, and she was gracious enough to send me a sample. Never one to say no to free coffee, I quickly replied and mere days later a package was on my doorstep containing two bags of Fire Department Coffee’s spirit-infused roasts.

Continue reading→

A wall full of different keys

Handling Credentials in Laravel

I was recently asked to code review a friend’s first Laravel app, and when I cloned the repository from GitHub I immediately noticed a few big, red flags. Many of these were common mistakes, so I thought I’d take a moment to discuss how we can safely handle credentials and/or sensitive information in our Laravel applications.

Continue reading→

A mail slot, just below a bold sign reading "Private"

Building a Quick, Private Family Blog with WordPress

At times, it’s helpful to be able to create a secure, private family blog for sharing updates with close friends and family without posting to more public social media channels.

There are any number of reasons you might do this: sharing updates about a new child, a new city, or — in our family’s case — a new adventure.

Continue reading→

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→

Page 1 of 14

Be excellent to each other.