Writing about multiplayer Starcraft reminded me how strange networking was in 1998. I remember connecting a computer to a modem, which was connected to a phone line (many homes had a second phone number specifically for this purpose). The modem would dial a number and “talk” to a modem on the other end.1
Networking two computers over a phone line seems bizarre to me now. You could connect without an IP address, packet switching, routers, network address translation, or firewalls – all the things we take for granted today.
I wanted to run the original Starcraft, released in 1998, on my Linux desktop using QEMU. Thus began my six hour rediscovery of computing in the 90s, an era when installing working software required wizardry, persistence, and luck.
Windows 98 First, I installed Windows 98 in QEMU using an ISO that I found online. Pentium 2 processor, 128 MiB of RAM, and 1GiB disk should be more than enough to handle Windows 98!
Starcraft was the first game I played online. My friend and I would dial each other over a 56K modem. I remember wondering why he kept ending his chat messages with “:” and “)”.
We liked to mine minerals and build armies, but I don’t remember attacking, winning, or losing. The network connection never lasted long enough.
One day I wandered into a battle.net lobby. Everyone was typing furiously into chat before the game started.
On Sunday, I presented a lightning talk at the FOSDEM 2022 conference. Usually, FOSDEM takes place in Brussels, but recently it’s moved online. That was fortunate for me, because otherwise I probably would never have submitted a talk proposal!
The talk was about aretext, the vim clone I’ve been working on for the last couple years:
Pre-recorded talk: it’s just under 12 minutes long, and it doesn’t include the live Q&A session.
No one types perfectly. To compensate, many programs use “fuzzy find” algorithms to retrieve records close to what a user typed. Accidentally typed “quck” or “quack” when you meant “quick”? No worries! Fuzzy find will retrieve what you meant anyway.
This post explains the fuzzy find algorithm used in aretext, the terminal-based text editor I’ve been working on.
Design Goals In a typical editing session, the user will search for commands to execute or files to open.
I tend to rewrite code. A lot. The terminal-based text editor I’ve been building, aretext, started as a Rust project, but after a month I rewrote it in Go. At one point, the editor embedded a Python REPL, which I later ripped out and replaced with a searchable menu. I completely rewrote the input interpreter, syntax highlighting parser, word movement calculations, and fuzzy find algorithm – multiple times!
Last night, it occurred to me that I might have rewritten all the code in aretext at least once by now.
Over twenty years ago, I wrote my first networked program, a multiplayer card game. My original plan was to position two iMacs directly facing each other, six inches apart, and use the built-in infrared port to transmit data. Then my dad bought me an Ethernet cable – this proved a much better solution. For LAN networking, the program used the AppleTalk protocol, sending the entire game state (several KB!) between clients on every frame.
A while back, I described an idea for a CLI tool to find definitions in Go projects, and now I’ve built it! I also gave it a shorter name: “gospelunk”, as in “spelunk through some Go code.” It’s similar in spirit to ctags, except that gospelunk understands Go dependencies and can re-index a large project in seconds instead of minutes.
The project is open-source under the MIT license and available on GitHub.
Starting a two week vacation today, so I’ve planned a small project: a Go-specific version of ctags. I’ve used ctags in the past to navigate a medium-sized Go monorepo, but there were some pain points. Re-indexing usually took about a minute, and, at least by default, ctags doesn’t search the standard library or Go module dependencies. I’m imagining a tool that’s easy to use from the CLI as well as from within an editor like vim or aretext.
I created an account on GitHub in December of 2012, which is almost exactly nine years ago. The chart below shows the number of public contributions (mostly code changes) I made each year:
From 2013-2015 I worked full-time on open source at edX. I’m still not quite sure how I got so lucky. My daughter was born in 2018! When she was three months old, I took a sabbatical to write a lot of Rust code for my master’s thesis at Harvard Extension School.