Blog Posts
Advent 2023: Shellcheck
As you may have noted from previous posts in this Advent 2023 series, I find myself using Bash more and more often. This has certainly been a surprise for a career PHP developer, but it is what it is.
With PHP, there are a wealth of QA tools, from unit testing, to enforcing coding standards, to static analysis. What about with Bash? Well, the tools exist, and there's one I literally cannot write Bash without: Shellcheck.
Advent 2023: A deploy script
For the fourth day of 2023 advent blogging, I'm sharing a tool I've used to simplify deployment.
Advent 2023: Bashly
For the third day of my 2023 advent blogging, I'm covering a tool I've really leaned hard on the last few years: Bashly.
Advent 2023: NTP on AWS
Continuing my 2023 advent blogging, today is a tip on getting NTP to work on Amazon AWS EC2 instances.
Advent 2023: Logseq
In years past, folks across a variety of programming languages have organized Advent events in December, to highlight different tools, different frameworks, different programming practices, and more, often inviting guests to author each post.
I thought I'd try an experiment: I've had a ton of ideas for blog posts, many of them short, and just... never write them. What if I were to do a personal advent, and write these up?
Let's see how far I get.
Today's topic: Logseq.
3 Months, 3 Weeks, and 3 Days
I started this post early, finished it late, but the sentiment remains the same.
3 months, 3 weeks, and 3 days ago, I dislocated my shoulder, and turned my world upside down.
Trigger warning
I discuss a traumatic injury in this post.
Zentangle Back to Basics, 2022 Retrospective
Goodbye Twitter
This is a long, personal post.
tl;dr: I'm leaving Twitter. You can find me in the Fediverse as @matthew@mwop.net.
TailwindCSS Tips
I've been dabbling in CSS my entire career. In the early days, it was relatively simple, as our browsers were fairly limited. But over the years, CSS has become more and more capable, allowing styles to target only tags with specific tag attributes, only apply at specific screen sizes, and even perform complex layouts using things like flexbox and grid. I take a bit of time every now and then to understand these things... but since I don't use CSS a ton, it's hard to keep up.
As such, over the past decade, I've tended to use CSS frameworks, and generally Bootstrap. Every couple years, a new major version is dropped, and I have to learn new structures and components, and struggle to get things to look the way I want. Worse, when I use these frameworks, injecting custom CSS often means understanding how the framework is already styling components so I can ensure things don't conflict.
The last couple years, I've been keeping an eye on TailwindCSS. I've been a bit skeptical, as its declarative, utility-first approach looks a lot like doing CSS inside your HTML, which, honestly, feels off. I've typically subscribed to the idea of semantic HTML, which advocates separating style from markup. Having styles directly that mimic CSS directives associated with every tag feels like an unholy mix, and a far cry from semantic HTML.
And then there's the hype. The original author and project lead of Tailwind is a huge hype man, and hype tends to turn me off. That's on me, not them, but having been in the business for over two decades, I'm finding I'm more and more likely to discount hyped products and projects, because I've seen them come and go so frequently; there's often an indirect relationship between the amount of hype and the long-term viability of a project. I've also often observed that hype serves as a way for users to deflect reasonable critique, and the more vehement the user base, the less interested I am in engaging with them because of this. Clearly, YMMV, but it was definitely something keeping me from really investigating Tailwind.
However, recently, in helping out the PHP Foundation, I volunteered to setup their static website, and the team requested using TailwindCSS, so I dove in.
And I discovered... I kind of love it.
This is one of those "I'll be googling this in the future" posts.
Getting OpenSwoole and the AWS SDK to Play Nice
I have some content that I store in S3-compatible object storage, and wanted to be able to (a) push to that storage, and (b) serve items from that storage.
Easey-peasey: use the Flysystem AWS S3 adapter, point it to my storage, and be done!
Except for one monkey wrench: I'm using OpenSwoole.