Unix things I always forget

| 1 min read | Unix things I always forget 1/7

A short intro on my second series: Unix things I always forget!

An attempt to document the Unix commands I know and care about. Consider this series a living document that will grow organically; I won’t be updating or adding new posts on a set schedule.

Read more

Composer, semver, and underlying dependency changes

| 2 min read

Every now and then I need to bump a dependency in a package, or require a higher PHP version.

      "name": "my/package",
      "require": {
-         "php": ">=7.2.0",
+         "php": ">=7.4.0",
-         "league/commonmark": "^0.19",
+         "league/commonmark": "^1.0",

When updating an underlying dependency, I don’t always tag a new major version. Some people consider this to be a breaking change, but it isn’t. Here’s how to deal with dependency and language updates from a package maintainer’s perspective.

Read more

Privacy and having nothing to hide

| on pjrvs.com

I’ve always had a hard time finding a proper response to the classic “privacy isn’t important because I have nothing to hide” argument.

Paul Jarvis, cofounder of the privacy-first analytics tool Fathom Analytics, makes some strong points in But I have nothing to hide.

Whether it’s on reality TV or even just social media, we act and speak differently because we know we are being watched. We lose our ability to be authentic or explore our own identity and views because we’re stuck trying to put forward our “best selves” and ensure everyone else that we’re here “for the right reasons”.

Read the full article on pjrvs.com.

Setting up a global .gitignore file

| 1 min read

Reviewing pull requests, I often see contributors sneakily adding editor configuration to the repository’s .gitignore file.

+ .vscode

If everyone would commit their environment-specific .gitignore rules, we’d have a long list to maintain! My repository doesn’t care about your editor configuration.

There’s a better solution to this: a personal, global .gitignore file for all your repositories. Here’s how you can set one up.

Read more

Upgrading Node.js on a Laravel Forge Provisioned Server

| 1 min read

I just upgraded Node.js on a Laravel Forge provisioned Ubuntu server for the umptieth time. I can never remember how to upgrade to a higher major Node.js version, so I’m documenting the process for future me.

Read more


| 3 min read | JavaScript Framework Diet 6/10

On to our first component: a dropdown list. I’m going to walk through the implementation I landed on in a recent project. There are many ways to build dropdowns, and you might want to shape the API your way, so use this post as a source of inspiration.

Read more

Give it five minutes

| on signalvnoise.com

I came across this post by Jason Fried (from Basecamp) about giving ideas a few minutes before shooting them down.

I’ve caught myself blurting out unnecessary negative opinions when presented with an idea. More often than not, I have more empathy towards the idea a few minutes later, and feel bad about my initial reaction.

Next time you hear something, or someone, talk about an idea, pitch an idea, or suggest an idea, give it five minutes. Think about it a little bit before pushing back, before saying it’s too hard or it’s too much work. Those things may be true, but there may be another truth in there too: It may be worth it.

Read Give it five minutes on signalvnoise.com.

File structure

| 1 min read | JavaScript Framework Diet 5/10

In the previous posts, we’ve gone through our first few utility functions. We now have enough in our toolbox to move on to our first component. However, where do all these functions belong?

Read more

Event delegation

| 2 min read | JavaScript Framework Diet 4/10

After learning how to select elements in the DOM, it’s time to zoom into events. This is the third post in the JavaScript Framework Diet series.

Read more

Selecting elements (part 2)

| 1 min read | JavaScript Framework Diet 3/10

In Selecting elements (part 1) we learned how to select elements from the DOM, and how to find elements inside other elements, both with our own $ and $$ helpers.

In part 2, we’re going to review two DOM element instance methods: closest and matches.

Read more