tech docs.

A collection of my writing on technical topics, as collected over the years. If what you're looking for isn't here, it's probably on my blog. Chances are one of the tags like "computers" or "nscp" will help you narrow your search.

Sleep Mode: The Art of the Screensaver
I was interviewed about screen savers for Rafaƫl Rozendaal's exhibit at Rotterdam's Het Nieuwe Instituut.
export TERM=aaa60
For important retrocomputing reasons, I resurrected a 1982 Ann Arbor Ambassador 60 terminal into a functional, modern-ish computer. Termcaps! Flow control!
"They Live" and the Mozilla logo
Wherein I draw a line through 1930s agitprop, Ronald Reagan, methane-breathing zombie space aliens, the Mozilla logo, Barack Obama and the International Commiunist Conspiracy.
About some screen savers
I don't often write about the process that goes into writing screen savers, but this time I did.
DNA Lounge's Payphone
For important retrocomputing reasons, I turned a payphone into a Linux computer.
Javascript, locking and sound
The Javascript party line is that you don't need locking, because no threads, no safety, no problem. Except then they added localStorage. Oh, what's this? Is it shared memory that can be accessed asynchronously by multiple contexts? Why yes it is! So now you really do need locking, and it's terrible.
Youtube's joke
of a fair-use
appeal process

I posted a video, composed of pieces of other videos. The Content Mafia said it was a copyright violation, though it was clearly fair use. Youtube's robots disagreed. Their whole dispute-resolution process is corrupt, vile, and egregiously tilted in favor of corporations.
Standing Desk
I have one now. It was a hassle to set up, but I like it.
security bugs

The Linux distro peanut gallery introduced yet another set of bugs that allow anyone to unlock your screen just by mashing the keyboard. You're using gnome-screensaver? Do you want ants? Because that's how you get ants.
Messaging Backup
I've written tools that allow you to archive your SMS, Facebook Messenger and Twitter direct messages. This is an overview of them.
iTunes Highly
Rated Songs

iTunes 11 removed the "play higher rated songs more often" option. I've mostly figured out how to reproduce it using a set of nested smart playlists. These are the (pretty complicated) instructions.
Web Design

Remember in the 90s when web sites would pop up little Javascript dialogs trying to better "engage" you, and it was about as pleasant as having a little hammer pop up and whack you in the face every time you clicked their link? It's back.
iTunes and
streaming audio

I had to reverse-engineer some stuff to figure out how iTunes 10 copes with streaming audio, Icecast-style inline metadata, HTTP byte-ranges and seeking. It's complicated.
OpenGL vs. OpenGL ES
When I ported XScreenSaver to iOS, I did it by writing an implementation of the OpenGL 1.3 API in terms of the OpenGL ES 1.1 API. I had some unkind things to say about the OpenGL standardization process as a result of this.
Why I use Safari instead of Firefox
Based on my background, people think it's weird that I don't use Firefox. I have reasons, and these are them, as of 2012.
Dali Clock Y2K
In 1998, I did a... thing. Because I am a bad person.
I built an Arduino-based controller so that I can open and close my apartment's curtains from the command line. This is the source code and a description of the hardware.
The secret history of the about:jwz URL, and the Netscape Throbbers.
VC Con
A Vulture Capitalist wrote an article claiming that the only path to success in the software industry is to work insane hours, sleep under your desk and give up your one and only youth, and he used my words to try and back that up. This is my rebuttal.
HTML Email
2011, 1994
"HTML email, was that your fault?" Maybe. Probably. I don't quite remember, but I did some research and I can't find any evidence that I'm not. So here's a brief history of the display of rich-text in mail readers.
Computer History Museum
I appear in a few video installations in the Computer History Museum's 2011 exhibit, Revolution: The First 2000 Years of Computing. These are my photos of the exhibit.
Internet Archive
I visited the Internet Archive and took some photos.
Nym Wars
Anonymity is important. Pseudonyms are important.
Dali Clock and
Apple's Store

It turns out that if you publish free software in Apple's App Store, they delete your software if you don't continue paying them $100 per year. Isn't that swell?
Printing Margins
At great personal irritation, I've learned some things about printer margins, Illustrator and Safari.
Nightclub Photography
I offer some very basic advice for taking (and publishing) photos in dark, candid environs, with an emphasis on nightclubs and SLR cameras.
QR Codes
I have come to the conclusion that it's impossible to construct a QR code that serves the function of a business card if you have more than one phone number.
In 2010, I migraded from LiveJournal to WordPress. This is what I learned in the process.
Old Browsers
Did you know that JavaScript doesn't have integers? Somehow I had never noticed that. When I posted about it, Brendan and I got into an interesting conversation about the history.
MacOS vs. iOS
In the course of porting Dali Clock to the iPhone, I felt the need to rant about API design and gratuitously incompatible changes.
Facebook Feeds
How to use Facebook with a feed reader, since they make it hard to figure that out.
Palm Pre part 1,
part 2, part 3, part 4.

When the Palm Pre smartphone was first released, I wrote a couple of programs for it. Palm's process for submitting software to their app catalog was a Kafka-esque nightmare. This is the tale.
Duct Tape
Joel Spolsky wrote an article about me calling me a "Duct Tape programmer". This is my respopnse.
Bicycle Wisdom
This is my down-to-earth advice for beginning (or prospective) urban commuter-bicyclists. Also known as, "jwz farts in bike-church".
Old Browsers
In honor of the ten year anniversary of the Mozilla project, I got back online, and also an archive of ancient web browsers and instructions on how to run them on modern computers.
A story about Lisp Machines and infinite-range integers, and pushing things beyond their limits.
I found a kernel bug. MacOS 10.5 broke ptys, and I am sad. I don't think they'll ever fix it.
Backups and how to do them.
Calendars, Hula, and asking the important questions like "how will this software I'm writing get my users laid?"
Do you know what it means when someone types ^H^H^H^H^H? Do you know why? I thought some people might not.
In 2005, I gave up on Linux on the desktop forever, and switched to MacOS. Many people found this scandalous. These are my blog posts about the process.
The database used in early versions of Firefox is the single most braindamaged file format that I have seen in my entire career. I wrote some things about it.
The bastards made us take out the dirty words.
A case study in idiocy: what happens when a five minute hack becomes a de facto standard because nobody had the foresight to strangle it in the crib.
Markup versus

Did you notice that some time around the turn of the century, the W3C peanut gallery started advocating exactly the opposite approach to web site design as what they used to advocate?
People who use the phrase "information wants to be free" usually don't understand it.
The "Cascade of Attention-Deficit Teenagers" model of software development.
RSS Damage
RSS, content aggregation, and publishers who don't understand them.
Linux Video
Another rant about the pathetic state of Linux usability, 2002.

Mailman used to be a very popular mailing list manager software. It's a pain in the ass to use, and has a braindead security model. Here's a rant about it from 2002.
The Emacs Schism
Lucid Emacs versus FSF Emacs: step right this way and kick the dead horse once more!
Tabs versus Spaces
An attempt to introduce some facts and practicality into one of those arguments that just never goes away.
The condensed and expurgated history of the about:authors URL.
Emacs Timeline
A family tree of GNU Emacs and major related projects, 1976-present.
Garbage Collection
Garbage collection has a bad rap. I argue that using a good garbage collector will result in more efficient and less buggy software than doing malloc/free by hand, and further, that using a bad garbage collector will still get a better product out the door faster. (Fun historical note: in 1998 this was a controversial opinion. My team won. Ha ha.)
A mini-rant about the state of Linux usability, circa 1998.
Easter Eggs
Why all cool programs have easter eggs, Netscape Navigator in particular.

An expired Internet Draft I wrote in 1998 with recommendations on how mail and news clients can easily generate good, correct, and globally unique Message-IDs for their messages.
HTML Message

The interface for composition of HTML mail and news messages in Netscape always sucked. Here's my rant/blueprint on the subject from 1998. (They never fixed it, and now I guess it doesn't matter.)
A project proposal I made in 1998 for a program to make it easier to deal with vast quantities of email. Nothing ever became of this.
Unity of Interface
An argument for why kitchen-sink user interfaces (such as web browsers, and emacs) are a good idea.
Mail Summary Files
How mail summary files worked in Netscape Mail 2.0, 3.0, and Grendel, and where 4.0 went horribly wrong and left me hopping up and down and shouting "I told you so."
Message Threading
A description of an algorithm for threading messages together (presenting the parent/child relationship of trees of messages and replies.) This is the algorithm used by Netscape Mail and News 2.0, 3.0, and Grendel, but was not what 4.0 used (see "I told you so," above.)
The Posted-and-
Mailed Header

An expired Internet Draft I wrote in 1997 with a proposal on how combined mail/news clients should identify the messages they generate, to make it possible for the recipients to tell what's going on. (This used to matter, back when USENET still existed.)
X Cut and Paste
How cutting and pasting really works in X Windows, what Selections and Cut Buffers are, and how Emacs fits into the picture.
Character Sets
All about Latin1, Windows CP-1252, and MacRoman, and why there are lots of web pages out there that use characters you can't see. (It was the 90s, Unicode didn't really exist yet.)
I like Java, but I hate Java too. Here are the things about it that bug me. Written in 1997, but it's all still true today.
XEmacs Wishlist
In 1997, I composed a wishlist of the ten most important things that I thought XEmacs needed. Sadly, the XEmacs maintainers still don't seem to agree, so these wishes are still valid.
Considered Harmful

A description of the format of traditional BSD `mbox' mail files (the file format used by Netscape, Eudora, and most other pre-Millennial mail readers), why ">From mangling" happens, and why the Content-Length header is a hazard.
Netscape Mail
on Unix

An explanation of how the various mail-download methods worked in the Unix versions of Netscape in the mid 1990s, how to configure sendmail compatibly, and why you can't use "procmail". Irrelevant today, but a hilarious snapshot of the indignities we had to deal with back then.
Worse is Better
I didn't write this one, Richard Gabriel did, but it's been on my page forever, and you should read it. It explains why mediocrity has better survival characteristics than perfection, using Unix's triumph over the Lisp Machines as an illustration.

© 1994-2017 Jamie Zawinski <>