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
"nscp" will help you narrow your search.
I was interviewed about screen savers for
Rafaël Rozendaal's exhibit at Rotterdam's Het Nieuwe Instituut.
"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.
For important retrocomputing reasons, I resurrected a 1982
Ann Arbor Ambassador 60 terminal into a functional, modern-ish
computer. Termcaps! Flow control!
Wherein I draw a line through 1930s agitprop, Ronald Reagan, methane-breathing zombie space aliens, the Mozilla logo, Barack Obama and the International Communist Conspiracy.
I don't often write about the process that goes into writing
screen savers, but this time I did.
For important retrocomputing reasons, I turned a payphone into
a Linux computer.
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.
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.
I have one now. It was a hassle to set up, but I like it.
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.
I've written tools that allow you to archive your SMS,
Facebook Messenger and Twitter direct messages. This is
an overview of them.
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.
Remember in the 90s when web sites would pop up little
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.
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.
When I ported XScreenSaver
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.
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.
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.
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.
I visited the Internet Archive and took some photos.
Anonymity is important. Pseudonyms are important.
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?
At great personal irritation, I've learned some things about
printer margins, Illustrator and Safari.
I offer some very basic advice for taking (and publishing)
photos in dark, candid environs, with an emphasis on
nightclubs and SLR cameras.
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.
Somehow I had never noticed that. When I posted about it,
Brendan and I got into an interesting conversation about
In the course of porting Dali Clock to the iPhone,
I felt the need to rant about API design and gratuitously
How to use Facebook with a feed reader, since they make it
hard to figure that out.
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.
Joel Spolsky wrote an article about me calling me a
"Duct Tape programmer". This is my respopnse.
This is my down-to-earth advice for beginning (or prospective)
urban commuter-bicyclists. Also known as, "jwz farts in
In honor of the ten year anniversary of the Mozilla project,
I got home.mcom.com
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.
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
RSS, content aggregation, and publishers who don't understand them.
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.
Lucid Emacs versus FSF Emacs: step right this way and kick the
dead horse once more!
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.
A family tree of GNU Emacs and major related projects, 1976-present.
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.
Why all cool programs have easter eggs, Netscape Navigator
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.
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.
An argument for why kitchen-sink user interfaces (such as
web browsers, and emacs) are a good idea.
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."
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.)
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.)
How cutting and pasting really works in X Windows,
what Selections and Cut Buffers are, and how Emacs fits into
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.
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.
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.
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.
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