This might become a new major section in Things Every Hacker Once Knew, but before I merge it I’m putting it out for comment and criticism.
Category: Software
A teaching story
The craft of programming is not a thing easily taught. It’s not so much that the low level details like language syntaxes are difficult to convey, it’s more that (as I’ve written before) “the way of the hacker is a posture of mind”. The posture of mind is more essential than the details. I only… Continue reading A teaching story
Fuzzbombing: abort() calls for great justice!
The Colossal Cave Adventure restoration is pretty much done now. One thing we’re still working on is getting test coverage of the last few corners in the code. Because when you’re up to 99.7% the temptation to push for that last 0.3% is really strong even if the attempt is objectively fairly pointless. What’s more… Continue reading Fuzzbombing: abort() calls for great justice!
Open Adventure 1.1, and some thoughts on software preservation
Open Adventure 1.1 has shipped. There are a lot more changes under the hood than are readily apparent. In fact there have been no changes in gameplay at all, and only minor changes to the UI (reversible with the -o oldstyle switch). We (Jason Ninneman, Per Vorpaev, Aaron Traas, Peje Nilsson and I) could have… Continue reading Open Adventure 1.1, and some thoughts on software preservation
The Adventure begins again
Colossal Cave Adventure was the origin of many things; the text adventure game, the dungeon-crawling D&D (computer) game, the MOO, the roguelike genre. Computer gaming as we know it would not exist without ADVENT (as it was known in its original PDP-10 incarnation).
The advent of ADVENT
A marvellous thing has just occurred. Colossal Cave Adventure, the original progenitor of the D&D-like dungeon-crawling game genre from 1977 and fondly remembered as ADVENT by those of us who played it on PDP-10s, is one of the major artifacts of hacker history. The earliest version by Crowther and Woods (sometimes known as 350-point Adenture)… Continue reading The advent of ADVENT
src 1.13 is released
My exercise in how small you can make a version-control system and still have it be useful, src, does seem to have a significant if quiet fanbase out there. I can tell because patches land in my mailbox at a slow but steady rate. As the blurb says: Simple Revision Control is RCS/SCCS reloaded with… Continue reading src 1.13 is released
cvs-fast-export 1.43 is released
Maintaining cvs-fast-export is, frankly, a pain in the ass. Parts of the code I inherited are head-achingly opaque. CVS repositories are chronically prone to malformations that look like bugs in the tool and/or can’t be adapted to in any safe way. Its actual bugs are obscure and often difficult to fix – the experience is… Continue reading cvs-fast-export 1.43 is released
An apologia for terminal games
Yes, to a certain segment of the population I suppose I define myself as a relic of ancient times when I insist that one can write good and absorbing computer games that don’t have a GUI – that throw down old-school in a terminal emulator. Today I’m shipping a new release of the game greed… Continue reading An apologia for terminal games
Semantic locality and the Way of Unix
An important part of the Way of Unix is to try to tackle large problems with small, composable tools. This goes with a tradition of using line-oriented textual streams to represent data. But…you can’t always do either. Some kinds of data don’t serialize to text streams well (example: databases). Some problems are only tractable to… Continue reading Semantic locality and the Way of Unix
Ones-complement arithmetic: it lives!
Most hackers know how the twos-complement representation of binary numbers works, and are at least aware that there was an older representation called “ones-complement” in which you negated a binary number by inverting each bit. This came up on the NTPsec development list recently, with a question about whether we might ever have to port… Continue reading Ones-complement arithmetic: it lives!
Reposturgeon recruits the CryptBitKeeper!
I haven’t announced a reposurgeon release on the blog in some time because recent releases have mostly been routine stuff and bugfixes. But today we have a feature that many will find interesting: reposurgeon can now read BitKeeper repositories. This is its first new version-control system since Monotone was added in mid-2015.
The simplest possible method syntax in C
I’ve been thinking a lot about language design lately. Part of this comes from my quite successful acquisition of Go and my mostly failed attempt to learn Rust. These languages make me question premises I’ve held for a long time, and that questioning has borne some fruit. In the remainder of this posting I will… Continue reading The simplest possible method syntax in C
loccount: A faster SLOC utility
Here’s my first new project in a while – loccount, inspired by David A. Wheeler’s sloccount tool but much faster and with broader language coverage. I actually wrote this as a learning exercise in the Go language. You can find more details in my NTPsec blog post on Grappling With Go. If you like it,… Continue reading loccount: A faster SLOC utility
Rust and the limits of swarm design
In my last blog post I expressed my severe disappointment with the gap between the Rust language in theory (as I had read about it) and the Rust language in practice, as I encountered it when I actually tried to write something in it. Part of what I hoped for was a constructive response from… Continue reading Rust and the limits of swarm design
Rust severely disappoints me
I wanted to like Rust. I really did. I’ve been investigating it for months, from the outside, as a C replacement with stronger correctness guarantees that we could use for NTPsec. I finally cleared my queue enough that I could spend a week learning Rust. I was evaluating it in contrast with Go, which I… Continue reading Rust severely disappoints me
Twenty years after
I just shipped what was probably the silliest and most pointless software release of my career. But hey, it’s the reference implementation of a language and I’m funny that way. Because I write compilers for fun, I have a standing offer out to reimplement any weird old language for which I am sent a sufficiently… Continue reading Twenty years after
Thinking like a master programmer, redux
Yes, there was a bug in my vint64 encapsulation commit. I will neither confirm nor deny any conjecture that I left it in there deliberately to see who would be sharp enough to spot it. I will however note that it is a perfect tutorial example for how you should spot bugs, and why revisions… Continue reading Thinking like a master programmer, redux
Thinking like a master programmer
To do large code changes correctly, factor them into a series of smaller steps such that each revision has a well-defined and provable relationship to the last. (This is the closest I’ve ever come to a 1-sentence answer to the question “How the fsck do you manage to code with such ridiculously high speed and… Continue reading Thinking like a master programmer
Some aphorisms on software development methodology
The net benefit of having anything that can be called a software development methodology is in inverse proportion to the quality of your developers – and possibly inverse-squared. Any software-development methodology works well on sufficiently small projects, but all scale very badly to large ones. The good ones scale slightly less badly. One thing all… Continue reading Some aphorisms on software development methodology