RSSAmplifier

Blog

Jonathan McPherson

Recent content on Jonathan McPherson

jmcphers.github.ioRSS feed ↗18 posts

Latest posts

If AI Is So Good, Why Are We Working Harder Than Ever?

AI can accomplish engineering tasks in hours that used to take weeks. And yet, every engineer I know who works with AI, myself included, is actually working harder and longer than ever before. How can we explain this? Is it growing pains, or is it the new normal? One source of this effect is that AI doesn’t just do work, it also creates work: code that has to be reviewed, emails you have to…

4 Reasons AI Won't Take Developer Jobs

As I write this, there is hand-wringing all over the Internet due to the advent of code-writing AI tools like Github Copilot and ChatGPT. Developers everywhere are, understandably, somewhat concerned. These tools can take requests (“prompts”) in plain English and produce shockingly accurate computer code, in almost any language you’d like, that fulfills the request. If you squint…

Kobo and the Kinmates T01

As a Christmas gift a few days ago, I received a Kinmates T01 Bluetooth page-turner, branded in the typical logorrheic Amazon fashion as Tiktok Scrolling Ring, Page Turner for Kindle App, Remote Control for TIK Tok and Kindle App, Bluetooth Connected, for iPhone Series, iPad, Android Phone, and More. The intent was to to use it with my e-reader, a Kobo Clara BW. These devices do not work together…

A Tribute to Cynthia the Civic

Today, I said goodbye to Cynthia, my faithful 1997 Honda Civic. I purchased her in 2001 on a sunny day at a used-car lot in eastern Washington. The car salesman was almost a caricature of his profession, with greased-back hair, a dingy office, and a clammy handshake, but I liked the car so much I bought it anyway. She was perfect: a gently used, reliable little 2-door coupe with a peppy 5-speed…

Auto-Downscaling Retina Images with Hugo

Retina Images Many modern screens are capable of displaying images with so many dots per inch (DPI) that they meet or exceed the resolving power of the human eye. In other words, they produce detail that’s so fine that you couldn’t see any more even if it were present. Apple calls these retina displays, and the name often gets used for other high DPI displays. A “retina…

Favorite Dev Tools, 2022

There’s an overarching theme here, and it’s this: don’t settle. If you are a software engineer, you’re using a lot of tools in your terminal that mostly haven’t been updated since the 80s. Modernized alternatives to many of these tools exist; with very little effort, you can remove a great deal of the typing and friction from everyday tasks. Terminal Tools z z makes…

(untitled)

About the Site This site is lovingly handcrafted from organic bytes, and is made possible in part by readers like you, and the following technologies: Static site hosted on Github Pages Site generation by Hugo Some figures generated by GoAT CSS includes numerous contributions from tufte-css, including the et-book font What’s That Weird Logo, Though? Oh, this? It’s an r-pentamino.

The Case of R's Stack Overflow

The Problem So, there I was, working on a project that embeds R in a Rust program using extendr, and everything was going great, until I tried to run the program in an aarch64 Linux environment. R emitted a whole bunch of these errors and wouldn’t start up. Error: C stack usage 1474053204 is too close to the limit Error: C stack usage 1474052564 is too close to the limit Fatal error: unable…

Copying and Pasting Binaries with OpenSSL

Sometimes You Can’t scp We’ve all been there: you have terminals open on two different remote hosts, and need to copy a file between them. Unfortunately, despite the fact that they are LITERALLY NEXT TO EACH OTHER on your screen, they just can’t see each other, because they’re each behind so many layers of VPNs and bastion hosts and NATs and different accounts and time…

Is Biking Better for the Environment?

I’ve biked to work almost every day for years, and during most of that time I figured I was doing the climate a big favor by not commuting by car. Recently, though, I had a worrisome thought. I’m not losing any weight, which means that the calories which power my bike are coming entirely from the food I eat. Now, it’s true that it takes less energy to power a bicycle than it does…

Deploying Hugo with Travis CI

As an occasional web developer, I used to build sites with Wordpress, but have recently become enamored with static site generators. There’s just something ineffably elegant about having the site pre-built. There’s no code on the web server to break, or patch, or hack. There’s no server configuration to screw up. Static sites just Exist, in pristine immutability. Even better, a…

Lessons from 20 Years of Development

I’ve been writing software professionally for most of the last two decades. In this time I’ve worked just about everywhere: on government contracts, at healthcare companies, in universities, at very big companies (more than 100K employees) and very small ones (fewer than 10 employees). I’ve written clients, servers, web applications, utilities, plugins, and frameworks. Here are…

Password Management

Introduction Everyone has their own way of managing the dozens of passwords they need to sign on to online services. Some people use the same password everywhere. Others use sticky notes or a notepad shoved into a desk drawer. If you’re technically inclined, you might use a password manager. I’ve been using the same password management system for almost half a decade now, and…

Finding Circular Primes in Go

Recently a friend of mine posted the following programming challenge, which he’d received as an interview question. A number is called a circular prime if it is prime and all of its rotations are primes. For example the number 197 has two rotations: 971, and 719. Both of them are prime. There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, and 97.

Android and Captive Portals

Our family stayed at a hotel that offered free AT&T WiFi with an access code was distributed at the lobby. “Just connect to the network attwifi and enter the code,” the brochure said. The network had a captive portal, a page you had to open to enter your code before your device would be allowed to use the Internet. Ordinarily, my Android phone (running Lollipop) detects this and shows…

Obfuscating IDs

Auto-incrementing IDs are great. When you’re picking a method for generating unique IDs in a system, auto-incrementing IDs (1, 2, 3, …) are often a good choice. These have a number of advantages over more complicated techniques: They are very fast to generate and require no random number generation or seeding. Their representation is short and simple compared to e.g. GUIDs. There is…

JavaScript: When an Array isn't an Array

Recently, I was investigating a JavaScript bug in which an array serialized differently when it was created in another window. Let’s say foo is an array created in this window, and bar is an array created in another window. > var foo = ["a", "b", "c"] > var bar = window.opener.foo; Now, let’s try to serialize them. (serialize is not a real method, but it illustrates the problem.) > foo…

Efficient Editing with Vim

“To me, vi is Zen. To use vi is to practice zen. Every command is a koan. Profound to the user, unintelligible to the uninitiated. You discover truth every time you use it.” –reddy@lion.austin.com This tutorial assumes a basic knowledge of vim – insert mode, command mode, loading and saving files, etc. It is intended to help vi novices develop their skills so that they can…