Hillel Wayne
-
Gamer Games for Non-Gamers
It’s April Cools! It’s like April Fools, except instead of cringe comedy you make genuine content that’s different from what you usually do. For example, last year I talked about the 3400-year history of the name “Daniel”. This year I wrote about one of my hobbies in hopes it would take less time. It…
Published
-
A Perplexing Javascript Parsing Puzzle
What does this print? x = 1 x --> 0 Think it through, then try it in a browser console! Answer and explanation in the dropdown. Show answer It prints 1. wait wtf At the beginning of a line (and only at the beginning of a line), --> starts a comment. The JavaScript is parsed as x = 1; x; // 0 The browser…
Published
-
The Hierarchy of Controls (or how to stop devs from dropping prod)
The other day a mechanical engineer introduced me to the Hierarchy of Controls (HoC), an important concept in workplace safety. 1 (source) To protect people from hazards, system designers should seek to use the most effective controls available. This means elimination over substitution, substitution…
Published
-
Hiatus
All of my budgeted blogwriting time is going to Logic for Programmers. Should be back early 2025. (I’m still writing the weekly newsletter.)
Published
-
Toolbox languages
A toolbox language is a programming language that’s good at solving problems without requiring third party packages. My default toolbox languages are Python and shell scripts, which you probably already know about. Here are some of my more obscure ones. AutoHotKey Had to show up! Autohotkey is basically…
Published
-
Composing TLA+ Specifications with State Machines
Last year a client asked me to solve a problem: they wanted to be able to compose two large TLA+ specs as part of a larger system. Normally you’re not supposed to do this and instead write one large spec with both systems hardcoded in, but these specs were enormous and had many internal invariants of…
Published
-
What We Know We Don't Know: Empirical Software Engineering
This version of the talk was given at DDD Europe, 2024. Technology is a multitrillion dollar industry, but we know almost nothing about how it’s best practiced. Empirical Software Engineering, or ESE, is the study of what works in software and why. Instead of trusting our instincts we collect data, run…
Published
-
Comment Section: Software Friction
These are some of the responses to Software Friction. Blogs on a similar topic Laurie Tratt wrote What Factors Explain the Nature of Software? which touches on the topic of friction, too. Emails and Comments I’m an Infantry Officer in the US Marine Corps, we talk quite a bit about friction. One book…
Published
-
Software Friction
In his book On War, Clausewitz defines friction as the difference between military theory and reality: Thus, then, in strategy everything is very simple, but not on that account very easy. Everything is very simple in war, but the simplest thing is difficult. These difficulties accumulate and produce…
Published
-
Don't let Alloy facts make your specs a fiction
I’ve recently done a lot of work in Alloy and it’s got me thinking about a common specification pitfall. Everything in the main post applies to all formal specifications, everything in dropdowns is for experienced Alloy users. Consider a simple model of a dependency tree. We have a set of top-level dependencies…
Published
-
The Tale of Daniel
It’s April Cools! It’s like April Fools, except instead of cringe comedy you make genuine content that’s different what you usually do. For example, last year I talked about the strangest markets on the internet. This year I went down a different rabbit hole. Daniel has been a top 5 baby name twice since…
Published
-
Comment Section: The Hunt For The Missing Data Type
I got a lot of responses to The Hunt For the Missing Data Type. I’ve included some of the most interesting ones below. Response Blogs The “missing” graph datatype already exists. It was invented in the ‘70s, about datalog. Emails and Comments Everything in quotes is verbatim. GraphBLAS My name is Michel…
Published
-
The Hunt for the Missing Data Type
A (directed) graph is a set of nodes, connected by arrows (edges). The nodes and edges may contain data. Here are some graphs: All graphs made with graphviz (source) Graphs are ubiquitous in software engineering: Package dependencies form directed graphs, as do module imports. The internet is a graph…
Published
-
Planner programming blows my mind
Picat is a research language intended to combine logic programming, imperative programming, and constraint solving. I originally learned it to help with vacation scheduling but soon discovered its planner module, which is one of the most fascinating programming models I’ve ever seen. First, a brief explanation…
Published
-
An RNG that runs in your brain
Humans are notoriously bad at coming up with random numbers. I wanted to be able to quickly generate “random enough” numbers. I’m not looking for anything that great, I just want to be able to come up with the random digits in half a minute. Some looking around brought me to an old usenet post by George…
Published
-
The World and the Machine
This is just a way of thinking about formal specification that I find really useful. The terms originally come from Michael Jackson’s Software Requirements and Specifications. In specification, the machine is the part of the system you have direct control over and the world is all the parts that you…
Published
-
Notes on Every Strangeloop 2023 Talk I Attended
This is my writeup of all the talks I saw at Strangeloop, written on the train ride back, while the talks were still fresh in my mind. Now that all the talks are online I can share it. This should have gone up like a month ago but I was busy and then sick. Enjoy! How to build a meaningful career Topic…
Published
-
A better explanation of the Liskov Substitution Principle
Short version: If X inherits from Y, then X should pass all of Y’s black box tests. I first encountered this idea at SPLASH 2021. The longer explanation A bit of background In A Behavioral Notion of Subtyping Liskov originally defined subtyping in inherited objects as follows: Subtype Requirement: Let…
Published
-
Learn AutoHotKey by stealing my scripts
tl;dr annotated AHK scripts here. Anybody who’s spent time with me knows how much I love AutoHotKey, the flat-out best Windows automation tool in the world. Anybody’s who’s tried to use AutoHotKey knows how intimidating it can be. So to help with that, I’m sharing (almost) all of my scripts along with…
Published