Tom

There are several blogs on the internet but you're looking at this one. See the about page for more.

Why don't we have an "UnreachableCodeException"?

Continuing my, apparently, semi-regular series of gripes about missing features in programming languages: Modern languages support many exception types. For example, here is a partial list of all the exception types natively available in C#. Many of these types are useful! And of course we can always user-define our own exception types if necessary. But once again, there's something I'd rather not have to user-define, because it would be cool if the language natively supported it. Here's a co...
Read post

Why don't we have a "Repeat" loop?

Computer programming has many different kinds of loops. We have the while loop: while(condition) { //do action } We have the for loop: for(var i = 0; i < n; i++) { //do action } We have the do-while loop, a variant of the while loop that checks the conditions at the end of execution: do { //action } while(condition); We have the foreach loop, a distant relative of the for loop: foreach(var item in collection) { //do action, presumably to item } But there's a very common loop...
Read post

Website Building on the Cheap and Easy

I threw together a website recently for the band I'm playing in. Much like a boat, a website is the sort of thing that you can spend as much as you want on, in terms of time and effort (and, obviously, money). But what if you'd rather do it quick and (almost) free? There's a lot of ways to do that, turns out, but I found a pretty good one. There are only a few guaranteed requirements when putting a site together, and all of them are negotiable costs if you know what you're doing: Domain Names ...
Read post

The only thing worse than code that's too simple

...is code that's too clever. That's it, that's all I had. ...
Read post

Certainties for 2024

It's kind of a tradition in the blogger/pundit world to come out at the start of a new year and make a bunch of pompous predictions about what will happen in the upcoming year. I don't know why any of these people bother to do this, because they're always wrong, so the only value these predictions provide is the minor entertainment of being able to dig through their archives and see what they were specifically, embarrassingly wrong about. Here at Biological Speculation, we believe there is a be...
Read post

LF, CRLF, and Why They Are The Way That They Are

Long ago, in a time that exists only in the faintest wisps of memory1, computers frequently printed (literally) output to teletype machines (sometimes abbreviated as TTYs, an acronym which has long outlived its original meaning). These machines would output text by mechanically printing it on a piece of paper, one character at a time. They would be sent a stream of data to print in a format like ASCII2, which would mix literal characters (such as 'A' or ';') with "Control Characters" - instructi...
Read post

The Crisis of the 21st Century

America's government needs to make some tough decisions fast. We're trying to prop up multiple proxy states against increasingly physical (and increasingly effective) attacks from emboldened regional rivals. We literally cannot afford to supply them all with the military aid they need to hold out effectively, but if we cut any of them loose and leave them to fend for themselves, they won't last long. And then we'll look like the sort of country that abandons our "allies" in a time of crisis, wh...
Read post

The Principles of Backwoods Political Science

I've got no education whatsoever in polisci or history, so take all this as the word of an unqualified amateur. But being an unqualified amateur has never stopped me before and I don't see any reason why it should now. So I've decided to compile some timeless laws of human political behavior. Source on all of them is "I read a lot of history". The law of conservation of sovereignty: sovereignty can be transferred, but never created or destroyed. That which is not sovereign does not govern; tha...
Read post

From the Department of "Whomst Could Have Expected This"

This just came out recently: The reasons why the AI business is struggling are diverse but one is quite well known: AI platforms are notoriously expensive to operate. Platforms like ChatGPT and DALL-E burn through an enormous amount of computing power and companies are struggling to figure out how to reduce that footprint. At the same time, the infrastructure to run AI systems—like powerful, high-priced AI computer chips—can be quite expensive. The cloud capacity necessary to train algorithms ...
Read post

Elegant Languages and Useful Languages

or, here's why some real living humans enjoy PHP I've been writing a fair amount of Bash lately, mostly to automate some repetitive manual processes at my day job, and it's got me thinking. Bash is not a pretty language. In fact, as far as languages go, at least those which are actively used for real work today, it's got to be one of the ugliest. If you don't believe me, here's what a case statement looks like: case EXPRESSION in PATTERN_1) STATEMENTS ;; PATTERN_2) STATEMENTS ...
Read post

Some "Learn To Code" Advice

Author's Note: this is an abridged and somewhat edited version of an email I originally sent to a friend, a couple years ago, who had asked for advice on getting into the programming career field. He was already working in some sort of physical engineering role and had some basic programming experience from his college work so it seemed like a plausible lateral path for him, but before he could pursue it he found a better physical engineering job that he actually liked and last I've heard he's s...
Read post

Waiting for the Fourth Computer Revolution

The first computer revolution was world-shattering. Within a decade and a half, computers went from expensive monstrosities commonly found deep in the bowels of large organizations to household appliances, as commonplace as refrigerators or televisions. Fortunes were made and lost. Multiple different companies started in nerds' garages and ended up multinational behemoths, still lumbering along today. The big winners were hardware companies making the computers, and software companies selling o...
Read post

Technical Exodontia

One idiom in the programming/technical world that really should exist is a snappy term for "the act of painfully extracting information from someone who is insistent they have a problem with your system, but refuses to give you anything useful or diagnosable about said problem". For example, here is a conversation I have had, in some form or another, with probably a dozen QA analysts over the last few years, including at a famous, multinational tech corporation: QA: Your code isn't working! I...
Read post

History Isn't Boring

Author's note: this is some deep post necromancy here. I originally wrote this back in 2014, when I held a low-level position at a long-defunct nonprofit called the World Future Society, which billed itself as the premiere professional organization for "futurists", the 21st Century English term for "soothsayers". Unfortunately, the images are long lost to link rot, so you'll have to imagine them from the descriptions I include, which are of course based on my unreliable memories. That said, I do...
Read post

Social Hacks to Selfishly Up Your Work Game

If you, like me, work in a technical position, you probably think of social skills as a waste of brainpower. And one of the greatest advantages of having a technical position is that most of the time, social skills are optional for your job progression! But what I've discovered over the last few years is that if you develop social skills in particular ways, it can actually be a worthwhile investment, because they can make your job easier while making you look more valuable to your management. Th...
Read post

Complication, Complexity, and Chaos part 3: The "AI Sweet Spot"

Previously: Part 1 and Part 2 Now that we've established a basic understanding of some systems context, we can use it to draw useful conclusions. Let's start by establishing a coherent and somewhat meaningful definition of "AI": statistical and computational techniques that allow humans to "train" and "generate" algorithms to work in problem spaces where we cannot directly write useful algorithms, and the vast, inscrutable algorithms which are generated by these techniques. Though the specifi...
Read post

Complication, Complexity, and Chaos part 2: Life is Chaotic

(Part 1 here) Imagine yourself as a single-celled organism living in a puddle. You have exactly one top-level priority: propagate so that your descendants are more numerous than you. In service of this goal, you have exactly two primary objectives: 1) don't die, and 2) acquire resources. In service of these objectives, you have a solid handful of secondary objectives; for example moving toward potential food, moving away from potential predators, responding to nonliving hazards like contaminant...
Read post

Complication, Complexity, and Chaos

There are three separate dimensions to any dynamic environment: complication, complexity, and chaos1. I'm going to explain what these dimensions mean, and why it's so important to keep track of them, in this post, and if you're willing to read on and bear with me, I'm eventually going to apply them to make some statements about "AI" and the limitations of the future impact of algorithms and binary computing in general. Complication is when a system follows a large number of specific rules. Com...
Read post

How to explain a software system

Has THIS ever happened to YOU? You're in a meeting with a bunch of other developers. The presenter, who is one of the smartest people you will ever meet, starts off by saying "I know you mostly aren't familiar with the FroznakDecombobulationService, so I'm going to give everyone a high-level overview. As you will see from the boxes and arrows on this slide, ..." Fifty minutes later, your coffee cup is empty, your bladder is full, your notepad is full of explanation on all the different framewo...
Read post

Git learnt

(ya know, if you want) Git is a powerful tool, and by far the most effective way to unlock its potential is to use it on the command line. There's just one issue with that, which is that the syntax for Git commands is unintuitive, often overly verbose, and written at a very low level, so doing many operations you care about (like, say, "put me on the latest version of this specific branch from the remote") tend to involve several commands. And since the commands are often context-dependent, com...
Read post

"AI Alignment" is impossible, but that's OK because it's also a silly thing to worry about

Fine, I'll elaborate. The version of "AI Alignment" I'm talking about here is the kind that a bunch of big-shot internet celebrities and "research foundations" and such are "trying" to "solve", where we build an AI with arbitrary capabilities far greater than human, and then try to make it do what we want. Here's why it's stupid: For any galaxy-brained constraint that we could place on an arbitrarily powerful AI, there exists an even more powerful AI which could develop an even more galaxy-bra...
Read post

Now featuring sweet aesthetics

I wrote a custom theme for this blog based on dark mode for hack.css. I had to copypaste it all into a single file and change a bunch of selectors which were targeting class names to just directly target the HTML elements, because Listed doesn't give the customizability to change any of the selectors on your HTML itself. I then went out and found the hex color code for old-school terminal style bright green text, which turns out to be #4AF626 (roughly speaking). I changed the primary colors to ...
Read post

A past post on Azure databases

While I polish up some of the drafts, I'd like to collect some of my other writing online too. So here is a post I did a few years back for my work's dev blog, about how to tune your Azure Cloud SQL database to make it go extra fast. ...
Read post

A Taxonomy of Software Failures

(Somewhat inspired by this classic article about categorizing exceptions, which anyone who writes software should read.) There are an infinite number of specific ways that a production software system can fail, and in my career I've encountered a vast array of them (of course, some percentage of them were my fault in the first place). But I've noticed that production failures tend to fall into a few broad categories, so my hope is that by sorting the categories out, it can be easier to anticipa...
Read post

First Poast

Testing this thing out -- there's a bunch of stuff I kind of want to write up, polish up, and broadcast to the general public. But since social media is demonic for numerous and well-documented reasons, I'd rather do it on a place like here; also because I'm hoping this will force me to be more proactive and coherent than I otherwise would. Current agenda is to get the general layout and metadata and CSS looking nice and fancy while I also polish up the posts I have in the drafts, and hopefully...
Read post