September 2020 newsletter

Published: 2020-09-30
Word count: ~2406

Introduction

Welcome to the first timtimestim newsletter. An idea taken shamelessly from gwern.net's newsletter, with a couple changes.

All the links here are susceptible to link rot. If you find a bad link, than try to go to archive.org. If you can't find it there, than contact me and we'll work something out. If something if worth putting on here, it's worth archiving for my own personal use, if you catch my Tokyo drift.

If it's impossible (or impractical) to archive a page (like archiving archive.org, or archiving a dynamic page) than we're just shit out of luck when the service dies. If I think that's possible I'll try to describe the service in a bit more detail than usual, maybe even giving some screen shots.

There will also be updates about the timtimestim website itself. Stuff like the wiki don't get their updates announced on the atom feed, so this will be the place to see what I've been up to there.

In the end, I hope this newsletter will be a time capsule of things that I found important or interesting. It would be nice to look back on this in a few years and think, "Oh! That's what I was quietly obsessed about!"

Without further ado, let's go.

timtimestim

The wiki got a few updates:

Honestly, it's hard to do an update on "what's new" since there's no previous newsletters to work off of. So I'm kind of freaking out right now. Help.

Tom Swiftly

I found this really funny and clever word play thing called a Tom Swiftly. Basically it's like saying something like:

"But I'm tired!" Tim squealed.

Basically, it's a pun format. You can see in the above example that I related the word "tired" to a "tire", and then made Tim squeal about it, which tires are known to do.

I really really like this word play, and I can't believe I didn't think of it myself considering my affection for puns. You can expect more Tom Swiftly's in my writing from now on.

CSV files

I've been working with CSV files recently, and so I decided to look at the "official standard", RFC 4180.

There's some oddities in there, like having a header. But for the most part it makes sense. It's short enough to understand in a few minutes, so if you want to learn how to read standards than this might be a good place to start.

Handmade Hero

There's a really cool video/livestream series going on since Nov 2014 called Handmade Hero. Basically it's a professional video game programmer making a video game from total scratch.

Not in the "In order to bake an apple pie" kind of scratch, but the "Not using any libraries except the bare minimum" kind of scratch. Which basically means that he's writing his own interfaces to all the operating systems he targets, does his own rendering, and shit like that.

I think this video series is really really really cool. Sadly it's mostly done on Windows, and I don't use windows, but the things taught in it are pretty universal (after he gets done with the Window's API wrapper).

Honestly, if you want the most bang for your buck without watching 600+ videos of a guy slowly programming a game and explaining every little detail, than just watch the "Into to C on Windows" parts at the beginning. Since it's kind of impractical for me to back up the entire playlist, I've at least backed these up.

How it feels to learn javascript in 2016

Here's a funny blog post about learning javascript in 2016 (WARNING: Medium.com, get your ad blocker on).

It's about 4 years old, but it perfectly describes my abject "WTF" when I made an aborted attempt to learn "web programming" earlier this year. It's absurd how horrible the web is. Absolutely absurd.

LITCAVE and building your own castle

This one's a little backwoods, even for me. Still, I've found myself fascinated with this website for the last week or so.

If you go there, you'll see a bare-minimum website with just a list of updates to programs that almost always start with the word "neat".

"What the hell is this shit?" You ask, ANSI C spewing out of your hands and into the very fabric of your compiler, "Why should I care?"

I'll tell you why! Because this guy (gal? misc? Statistically speaking he's probably a guy...), this guy, is the true embodiment of what I love about programming: Building your own castle.

You could buy a castle, or rent someone else's, but if you've built your own castle, than you can look at every brick and crack and say, "This is mine". You know every corner of your castle front and back, and you've made it to your own exacting expectations.

That's what this guy is doing with his own computer experience. He's building his own castle.

First off, we have neatcc, a C compiler built to target x86 and ARM. Apparently (and I haven't verified this myself, just from the README), it implements most of ANSI C with the notable exclusion of floating point numbers. Also check out his neatlibc to see how he bootstraps his compiler.

From what I've seen, everything he builds can compile on this really small compiler/libc. It's like the foundation of a castle. It's beautiful.

Next off, we have neatvi. This is a vi implementation that he's made to work specifically with strange non ASCII text like Farsi. It doesn't even use curses(1)! It's missing a few features in comparison to nvi for me to want to use it, but I'm happy to say that compiling and running it was joyfully easy.

We also have neatroff (see the naming convention yet?). This one is a bit strange, but that just makes me more fascinated. Using the typesetting... language? Implementation? Idea? Whatever. Using the typesetting language roff is a weird choice in the world of LaTeX, but making your own personal implementation of roff is even more amazing.

If you're unfamiliar, typesetting languages are stuff like TeX, LaTeX, Roff, and so on. They help you semantically describe the information, and then a postprocessor/renderer take that semantically defined document and puts the right pieces in the right places in something like a PDF or Man Page or whatever.

Interestingly enough, roff is the language used for man pages. Although it can be used for pdf's and stuff too.

I can't even imagine what kind of reason this guy has to put so much effort into making his own roff, but I deeply respect it. My guess is that he doesn't like any of the current implementations and wanted his own that works the way he expects roff to work; if that's the case than I understand completely.

And then we have other smaller projects in the page. For some reason he doesn't like using an X11 server, so he does a ton of things with framebuffers instead (!?). He's got his own markup language similar to Markdown for writing his website called ctxt. A bunch of other things like an email client. The list keeps going on and on.

I'm no expert when it comes to judging code quality, but the projects I've listed have a calming uniformity that I find way more appealing than is probably healthy. Each project has a brutally simple and consistent Makefile, functions shared between .c source files are all in a single simple header file, and everything is in a flat directory with minimalist file names. It's shockingly consistent.

Hell, the idea to have a simple header file for shared things instead of having a header for every .c source file was so brilliant that I stole it for my own use. Sure it might slow down compilation, but when you're making tools that small it doesn't matter in the slightest.

There's just so much to like about everything here. The brutal minimalism, the calming uniformity, the smell of someone who knows what they want and has the willpower to get it. He's building his own castle.

This has been one of those "quiet obsessions" I talked about in the intro. I feel like the aesthetic choices of this random unknown programmer on the internet is such a hyper specific thing to care about. Part of the reason I started this newsletter was that I wanted to write about it while the iron was still hot, but I didn't want to make a full blown blog post about it. So here we are.

Jesus. I sound like a creepy stalker.

Anyways. If the time comes when nvi stops working I'll probably switch over to neatvi as my vi implementation of choice. I'd probably fork it and add my own features as needed, like tab completion for filenames when using :e. Of course, I don't expect nvi to stop working for quite some time, even though its build system is horrifying in comparison to neatvi's. But that's a rant for another time in the distant future when I'll have already switched to the more minimal text editor of manually flipping bits on my hard drive.

Keep trucking on, you mad castle builder.

Man pages

The aforementioned neatroff thing put me into mind about man paged, since man pages are also written in roff typesetting. So I went around trying to find a good guide on how to write man pages without wanting to feed myself piece by piece to a snail, and I found this free online book.

I've only read a bit of it, since it's not something super interesting to me, but what I saw was explained at least slightly well. I'm going to need to write man pages soon, and this might be a good reference.

.plan

I read this blog post about John Carmack (!) and how he kept the public updated on the progress of Quake. Apparently he had a ".plan file" that he updated regularly with the small minutia of things he finished in a given day.

This was a really cool snippet of programming history. There's even an archive of his .plan updates for you to waste away your life reading. I did a grep for the word "fuck" and there's a lot.

Nelson's Last Tape - 1989

Now for a depressing turn. Check out Nelson's Last Tape if you want to feel...

I guess it's "melancholic". That might be the right word. It's a sad thing, this video. Not because of anything that happens during it, but because of what happens after it. If anything, it's a good example of how you can't totally separate the surrounding context from art.

Nelson Sullivan was a vlogger (Video Logger). And by "vlogger" I mean he was the first one to ever do it, way back in 1989. Well before I was even born, or the internet took over. He walked around 1989 New York and recorded things and his thoughts about things using a camera.

The above video was aptly named. It's Nylon's last tape, because a few hours after recording it he died.

Watching this video is... He never got to see the 1989 fireworks.

I don't have good thoughts about death. I always hated the thought of dying. Seeing something like this, where someone went from walking around a city talking to friends and living his life to being dead a few hours later... It's all very painful thoughts for me.

:(

UTF-8 Everywhere

On a bit of a brighter note, standardization!

I'm kind of fascinated with how UTF-8 works. It's a way to encode text that's backwards (and sometimes forward) compatible with plain ol' ASCII.

It's brilliant how it works. There were so many restrictions to making a good Unicode encoding, and somehow they still came out with UTF-8. And because of it you don't have to worry about text encoding, even when programming in ANSI C. (You have to worry in some cases, but a lot of the time you can simply treat a UTF-8 multi-byte character as 2+ single byte ASCII characters without any pain).

Thanks for existing and being nearly universal, UTF-8.

Motho ke motho ka botho

There's something weird around abandoned websites. Like a time capsule of history.

In a world where we are force fed a constant stream of new information, it's strange to step into a world frozen in time, a message left on the front page saying "There's nothing left".

The blog Motho ke motho ka botho is one of those websites.

This one, unlike some other abandoned projects, actually has a farewell post written for it. The last post on the site since 2015. Near the end it reads:

And if this is your first visit to this site or its sister … you missed a great party!

I'm sure I did.

I'll never see this site unfold. Never watch this writer grow. All I can do is look back at the archives.

Take a look at its software page. This is the software this person cared about in 2015, before being deliberately frozen in time. There's some interesting recommendations in there, and some interesting commentary. It's a very long page, with a lot of obvious effort put into it.

And in the end it's just another blog in the tide of content. Like, as the title of the farewell post says, tears in the rain.