John Cowan

The ultimate minimalist home page. Best in any browser, no matter how ancient.

Recycled Knowledge

My blog, which tells you about things I've learned.


Not This John Cowan

Links to other John Cowans around the Web.

Essentialist Explanations

Various languages and what they essentially are.... (sample: Finnish is essentially Estonian spoken in the genitive case).

Open Source License Wizard

A wizard to help developers figure out which Open Source licenses to use according to their preferences. It carries no authority but my own.

All My Signatures

A file containing all the .sigs I use in email.

The Ghyll Encyclopedia

A Wikipedia-style encyclopedia about a fictional universe, to which I was a contributor.

The Itsy Bitsy Teeny Weeny Simple Hypertext DTD

A schema meant to be incorporated into other XML DTDs in order to provide a little bit of rich text/hypertext for use in documentation and other human-readable elements. It is a tiny but useful subset of HTML 4.0 and XHTML Basic. Formats: compact RELAX NG, XML-format RELAX NG, DTD, W3C XML Schema.

An earlier version not compatible with XHTML Basic is also available.

The Retrocomputing Museum

Sundry implementations of ancient programming languages and emulators for antique hardware architectures. Some by me, and I am one of the curators. This is now located solely at Eric Raymond's site, but I maintain this link for backward compatibility.

The ConScript Unicode Registry

A place for people who have invented writing systems for conlangs (constructed languages) to register the characters used in those writing systems. This is now hosted solely on Michael Everson's site, but I maintain this link for backward compatibility.


RESTful Web Services

A slide presentation on Web Services without tears, using the REST architectural framework. Formats: abstract OpenDocument PowerPoint PDF.

Describing Document Types: The Schema Languages of XML

A two-part tutorial teaching the basics of several XML schema languages: DTDs, RELAX NG, Schematron (in Part 1), and W3C XML Schema (in Part 2). The first part is mostly self-contained, but the second part depends on the first. Part 1 formats: abstract OpenDocument PowerPoint PDF. Part 2 formats: abstract OpenDocument PowerPoint PDF.

The Datatypes of XML Schema: A Practical Introduction

An extract from Part 2 of Describing Document Types focusing on XML Schema datatypes.

Infinite Diversity in Infinite Combinations: Why One Schema Language is Not Enough

A polemic against the dominance of W3C XML Schema and in favor of RELAX NG. Formats: OpenDocument PowerPoint PDF.

Unicode Ate My Brain

A slide presentation on Unicode. Formats: abstract OpenDocument PowerPoint PDF.
Here's the original UAMB article by Smarasderagd, with light edits by me.

Moving Toward XHTML 2.0

A slide presentation on the evolving XHTML 2.0 recommendation. Formats: abstract OpenDocument PowerPoint PDF.

Introduction to XML

A 1998 presentation on basic XML, still useful even if woefully out of date. Formats: PowerPoint 95 PDF.


Moby Latin Keyboard

The U.S. Moby Latin keyboard for Windows allows you to type more than 900 different Unicode characters, without interfering substantially with the regular use of it as a U.S. keyboard. The way in which the additional non-ASCII characters are reached is by using the AltGr key. Not too many keyboards actually have this key, but its equivalent is the right-hand Alt key, or on keyboards without a right-hand Alt key, using the Ctrl and Alt keys at the same time. The keyboard is designed for people who use the regular U.S. keyboard heavily, but occasionally need to type other Latin letters (especially accented ones), symbols, and punctuation. In particular, the keyboard supports most of the Windows-1252 (U.S. and Western Europe) repertoire as well as almost every Latin letter in Unicode.

The Whacking Latin keyboard family provides the same thing for UK/Irish keyboards. There are four flavors: Whacking John for English, Whacking Sandy for English and Scottish Gaelic, Whacking Mick for English and Irish, and Whacking Taffy for English and Welsh.


A SAX-compliant parser written in Java that, instead of parsing well-formed or valid XML, parses HTML as it is found in the wild: poor, nasty and brutish, though quite often far from short. TagSoup is designed for people who have to process this stuff using some semblance of a rational application design. By providing a SAX interface, it allows standard XML tools to be applied to even the worst HTML. TagSoup also includes a command-line processor that reads HTML files and can generate either clean HTML or well-formed XML that is a close approximation to XHTML.


Crunches an XML DTD into the minimal information required by a non-validating parser. Entity declarations are preserved; attribute declarations are preserved unless they are of type CDATA and have no default value; element declarations are preserved only if the element has element-only content, and then in the trivial form <!ELEMENT foo (foo)>. There is one declaration per output line.


A converter written by Kilian Stilhard and Erik Wilde between XML Schema and XSCS, their non-standard but extremely useful compact syntax for it that I use in my presentation.

Joy in Scheme

A preliminary and incomplete implementation of the Joy programming language in Chicken Scheme.

Queue language

A small programming language related to Joy, but based on queues rather than a stack. The implementation is also in Chicken Scheme.


A non-anonymous read-only FTP server for publishing files to individuals.

SCSU encoder

Source code by Kevin Bracey of a Unicode SCSU encoder. SCSU is a standard way of compressing Unicode text.


This is the GNU "units" program compiled for DOS and Windows systems. It lets you do conversions between miles and kilometers, between U.S. gallons and Imperial gallons, and so on. It handles practically every unit ever used anywhere, and it's easy to add your own.


A program for making large letters out of ordinary text.

 _ _ _          _   _     _     
| (_) | _____  | |_| |__ (_)___ 
| | | |/ / _ \ | __| '_ \| / __|
| | |   <  __/ | |_| | | | \__ \
|_|_|_|\_\___|  \__|_| |_|_|___/

The last release of FIGlet I did was version 2.2, which supports compressed fonts and internationalization.

Lojban software

Lojban is a constructed language (for human beings, not computers) based on predicate logic. I host the LogFlash for Linux software, a crude Perl script for scoring proposed gismu, and the official parser.

The Loki Project: Beta to Java

An effort to specify a translator from the Beta language to Java. On hold.



H. Beam Piper's classic 1956 tale of linguistic archaeology on Mars, newly revised and updated by me (the original is in the public domain).

The Elements of Style Revised

An updated version of William Strunk's 1918 classic, the predecessor of Strunk & White. A diff file between the original and the revision is also available.

Cobol Horrors

The log of an IRC conversation between me and a friend (here identified only as "victim") on the horrors of Cobol. It's interesting to watch "victim" disintegrate as the eldritch nature of the language is sloooowly borne in upon him.

Unicode and Fonts

A brief writeup on Unicode and fonts.

The Anti-Linuxarian Manifesto

Eric and I don't agree on everything.

He and She: The Dirty Bits

What the American public has been waiting for, condensed and rendered as narrative. Public domain.

Blake's Jesus

A bit from Northrop Frye's Fearful Symmetry. Pretty close to my view of Jesus (I'm an agnostic, which means I don't know if there is a God or not and I don't believe you do either.)


A story I wrote and published in rec.arts.erotica. Erotica, obviously. Science fiction, too.
if (age < 18 || illegal()) dont_click;


Alice's Internet Flame

"Alice's Restaurant" for the Internet Age, an updating of the old MIT parody. An earlier version of mine was formerly, but is no longer, hosted on Arlo's official site.

A Sonnet on Sonnets

My loose translation of Lope de Vega's Soneto de Repente. I bootstrapped this from a Babelfish literal rendering. (Disclaimer: I am not recommending Babelfish for any particular purpose, just reporting that I did in fact use it.)


As Irving Berlin didn't quite say:

Spoils of Annwn

A translation of a mediaeval Welsh poem. The literal translation and notes by Sarah Higley was the basis for this.

The Rhyme of the Nancy Bell

W. S. Gilbert's classic humorous ballad of shipwreck and unfortunate eating habits, as learned by me at my father's knee.

Dao De Ching Chapter 33

24 ways of looking at one chapter from the Dao De Jing.

Unix Power Classic

A hacker-oriented translation of the Dao De Ching, in progress.

J.R.R. Tolkien's poem Mythopoeia.

Good stuff, especially these lines and these.


Sessiwn Kemres

The mailing-list archives of a long-defunct Brithenig mailing list. Brithenig is a conlang which attempts to reconstruct the language that would have descended from the dialect of Latin spoken in Britain if it had developed into a separate Romance language. We also discussed the resulting history and culture.

Nowadays the public Conculture discussion group is used instead.

Stuart II

A now-defunct BBS, one of the first to make use of tree-structuring to organize its messages, lovingly preserved on the WWW. Now triumphantly in its new home (hosted by Look Out) at


John Cowan as a topic map

Provides some subject indicator URIs for me.

Diacritic folding

Some useful files for removing diacritics from Unicode characters: DiacriticFolding.txt, DiacriticFoldingExceptions.txt, DiacriticDecomposition.txt.

Library of Congress Diacriticized Character Data

Data about characters with diacritic marks on them from the Library of Congress.


A table of the most frequent trigrams (three-letter sequences counting space as a letter) in English text.

Hearing the Great Vowel Shift

A bit of dialogue spoken in the English of various centuries. Sound files from (and hosted by) Melinda Menzer at Furman University.


Ava Cowan Foxy

This website in condensed form (found in Google's cache).