Today marks the fifth release of aretext, the minimalist text editor with vim-compatible key bindings! This post describes the highlights.
(Wait, what’s that? You say you want to install it right now? Well, then just go straight to the installation docs!)
Faster fuzzy menu search Aretext uses a trie-based fuzzy find algorithm for selecting files in a menu. This worked well for most projects… until I ran it after building Kubernetes.
This is the second post of a two-part series on Starcraft and late-90s networking. Part 1 describes Starcraft’s many connection options.
Configuring Starcraft networking in 1998 was an adventure. There were four different connection options (plus AppleTalk on Macintosh computers), each of which required specific software and hardware to function. How did anyone figure this stuff out?
It turns out that the Starcraft CD included detailed support documentation. Today, this provides a glimpse of computing history circa 1998.
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.