##### Map configuration
name:Software Calculated to Drive You Mad

<p>We at Leonard Labs want to help the developer community. Why? So
that we can gain their trust and then trick them into using our
proprietary technology.</p>

<p>Just kidding. The programs here are all licensed under either an
OSI-approved license or the generic 'look at the code and let me know
if you want to use it for something' license. Enjoy!</p>

##### Software package groups

### Greatest hits
group:greatestHits
title:Greatest hits
These are my most monumental, most widely acclaimed, or simply my coolest programming projects.

### Web software
group:web
title:Web software
description:Software designed to be run through a web server.

### Standalone software
group:standalone
title:Standalone software
Software designed to be run on your computer (assuming your computer
runs some UNIX variant)

### Libraries
group:libraries
title:Libraries
description:Reusable libraries, generally for use in web applications.

### IF
group:if
title:Interactive Fiction
homepage:/software/if/
Original works of interactive fiction.

### Bagatelles
group:bagatelles
title:Bagatelles
Simple pieces of software, usually web-based. Not cross-categorized to
avoid cluttering up the other categories.

### Incomplete code
group:incomplete
title:Incomplete or archaic code
Incomplete but interesting software, and software that I consider too
old to use. Such software may just need a little sprucing up, or it
may be beyond hope. Not cross-categorized.

##### Software packages

#### Standalone software

### KatzDot
package:KatzDot
groups:standalone
date:1999
license:GPL
language:Dada Engine
homepage:http://www.torsion.org/witten/katzdot/

An automatic Jon Katz headline generator, written for the Dada Engine
by my onetime roomate <a href="http://www.torsion.org/witten/">Dan
Helfman</a>, but with many textual contributions from myself.

### ksethdavidschoen
package:ksethdavidschoen
groups:standalone
date:Released September 27, 2002
license:Public Domain
language:AMOR plugin
homepage:/software/ksethdavidschoen/

A little theme for <a
href="http://homepage.powerup.com.au/~mjones/amor/">AMOR</a> which
brings the floating head of world-famous hacker Seth David Schoen to
your desktop. Written for Seth's 23rd birthday.

### robotfindskitten
package:robotfindskitten
groups:standalone,greatestHits
date:1997-1999
license:GPL
language:C
homepage:http://www.robotfindskitten.org

The most popular piece of free software I've ever written, and the
only one ever to have spawned a developer community that didn't need
me as a linchpin. An ncurses Zen simulation which has been ported to
the Palm Pilot, the Dreamcast, the Game Boy Advance, and other
unlikely places.  It's also been included on the <a
href="http://lnx-bbc.org/">Linux Bootable Business Card</a> and in <a
href="http://packages.debian.org/stable/games/robotfindskitten.html">Debian</a>. I've
handed robotfindskitten development over to the robotfindskitten
consortium, of which I am a (mainly honorary) member.

### The Pocket Wisherman
package:The Pocket Wisherman
groups:standalone
date:2005
license:Python
language:Python
homepage:/software/PocketWisherman

The Pocket Wisherman slices and dices Amazon wish lists. It can group
lists of books and music by author and genre and output HTML lists or
densely formatted PDF 3x5 cards.

### Sales Rank Monitor
package: Sales Rank Monitor
groups:standalone
date:July 26, 2006
license: Public domain
language:Ruby
homepage/software/SalesRank/SalesRank.rb

The Sales Rank Monitor tracks the sales rank of books and other items
on Amazon, and makes graphs and sparklines out of the sales rank
history. For obsessive-compulsive authors.

### The Power of Greypoint
package:The Power Of Greypoint
groups:standalone
date:March 23, 2003
license:Public domain
language:Python
homepage:/source/software/download/ThePowerOfGreypoint.py

The Power Of Greypoint is a super-cheap presentation program. It's a
Python script that turns a file full of <a
href="http://docutils.sourceforge.net/rst.html">ReST</a> markup into a
bunch of HTML presentation slides with invisible navigation. It
requires <a href="http://docutils.sourceforge.net/">docutils</a>. I
used it to make <a href="/software/PyCon2003/slides/">this
presentation</a> for PyCon 2003.

### What Fools These Mortals
package:What Fools These Mortals
groups:standalone
date:May 18, 2003
license:NetHack General Public License
language:Python
homepage:/software/WhatFools/

What Fools These Mortals is a takeoff on NetHack in which you play a
NetHack deity trying to keep your champion alive.

#### Web software

### The Bayes Motel
package:The Bayes Motel
groups:web
date:June 12, 2005
language:Python
license:Python
homepage:http://www.crummy.com/software/BayesMotel/

The Bayes Motel is a framework that makes it easy to test out ideas of
the form "could I program a Bayesian corpus to distinguish x-type text
from y-type text?" To use it, you write a class that puts items of
text into a classification queue, then use the provided CGI script to
classify the items.

### Bloop
package:Bloop
groups:web
date:2003-2004
license:GPL
language:Perl
homepage:/software/Bloop/

Bloop is a version of Scoop that was heavily hacked to focus around
weblogs rather than news-site submissions. I wrote it for the <a
href="http://www.clark04.com/">Clark Campaign</a> and it's still in
use at <a href="http://www.forclark.com/">forclark.com</a>.

### Downhill
package:Downhill
groups:web
date:2003
license:Python
language:Python
homepage:/software/downhill/

Downhill finds connections between weblogs using the <a
href="http://www.myelin.co.nz/ecosystem/">blogging ecosystem</a>
data. Usable as a command-line program or as a CGI.

### Madman
package:Madman
groups:web
date:1999
language:Perl
license:Probably owned by UCLA

Madman is a simple hypertext annotation framework which I wrote
for UCLA professor Peter Hodgson. Only one text has so far been annotated 
using Madman: Gogol's "Diary of a Madman".

### Me Software Map
package:The Me Software Map
groups:web
date:2002
license:BSD-style
language:Python
homepage:/software/msm/

You're using it right now. A labor-saving device making it easy for
busy hackers to keep a page containing information about all their
projects.

### NewsBruiser
package:NewsBruiser
groups:web,greatestHits
date:1998-present
license:BSD-style
language:Python
homepage:http://newsbruiser.tigris.org/

A simple, powerful, easy-to-{install,use,administer}, self-contained
weblog system.  Builds on years of experience with writing for the
web. Check out the <a
href="http://newsbruiser.tigris.org/features.html">feature
tour</a>. This is my coolest piece of free software.

### Noodle
package:Noodle
groups:web
date:2002
license:BSD-style (tigris.org)
language:Java
homepage:http://noodle.tigris.org/

Noodle is a set of Java classes for transparently making arbitrary
changes to an HTTP request and response, according to logic contained
in Java 'filters' that you write. You can use Noodle to remove
personal identification information from an HTTP request, to wrap an
HTTP response in new branding, or for any number of other purposes.

The original Noodle was written by Jon Stevens (jon at tigris dot
org). As part of my former job at <a
href="http://www.collab.net/">CollabNet</a> I rewrote it to be more
flexible and much more efficient.

### Ultra Gleeper
package:The Ultra Gleeper
groups:web
date:2004-2005
license:BSD-style
language:Python
homepage:http://www.crummy.com/software/UltraGleeper/

The Ultra Gleeper is a recommendation engine for web pages, suitable
for personal use. It solves or avoids most of the problems that make
recommendation engines frustrating to use.

### The Eater of Meaning
package:The Eater of Meaning
groups:web
date:2003
license:GPL
language:Python
homepage:http://www.crummy.com/software/eater/

The Eater of Meaning makes nonsense out of content, without affecting
form. Usable in standalone or web proxy mode.

#### Libraries

### ASCII, Dammit
package:ASCII, Dammit
groups:libraries
date:2004
language:Python
license:Public domain
homepage:http://newsbruiser.tigris.org/source/browse/~checkout~/newsbruiser/nb/lib/AsciiDammit.py

A tool similar to <a
href="http://www.fourmilab.ch/webtools/demoroniser/">The
Demoroniser</a>, but written as a Python library and capable of
ASCIIfying not only MS smart quotes but (with varying degrees of
accuracy) most of ISO-Latin-1. For use in fits of parochialism when
you want something in ASCII, dammit. Can also convert such characters
to HTML. See also the Unicode, Dammit library that comes with
<msm>Beautiful Soup</msm>

### Ass-Kicking Laser Algorithm
package:Ass-Kicking Laser Algorithm
groups:libraries
date:2004
language:Python
license:Python
homepage:/source/software/lib/akla.py

This misleadingly-named library fetches and parses the XML file
containing the most recent weblogs to have pinged weblogs.com. Its
name derives from a joke about things that have cool names but are
actually quite dull.

### Beautiful Soup
package:Beautiful Soup
groups:libraries,greatestHits
date:2004-2006
language:Python
license:Python
homepage:http://www.crummy.com/software/BeautifulSoup/

Beautiful Soup is an HTML/XML parser with no external dependencies and
no soul. It doesn't care if you give it bad markup; you just get back
a data structure that's bad in a corresponding way. It's designed for
screen-scraping applications when you only care about part of the
markup you're processing. It also uses any means neccessary to convert
incoming documents to Unicode, using an <msm>ASCII, Dammit</msm>-like
library called Unicode, Dammit.

### Internet Topic Exchange Client
package:Internet Topic Exchange Client
groups:libraries
date:2003
language:Python
license:Public domain
homepage:http://newsbruiser.tigris.org/unbranded-source/browse/*checkout*/newsbruiser/nb/lib/InternetTopicExchange.py?rev=HEAD&content-type=text/plain

This rather unimaginatively titled library provides Python bindings to
the HTTP POST and XML-RPC API for the <a
href="http://topicexchange.com">Internet Topic
Exchange</a>. Originally developed for use in <MSM>NewsBruiser</MSM>.

### I Want Options
package:I Want Options
groups:libraries,greatestHits
date:2002-present
language:Python
license:Python
homepage:http://newsbruiser.tigris.org/unbranded-source/browse/*checkout*/newsbruiser/nb/lib/IWantOptions.py?rev=HEAD&content-type=text/plain

I Want Options is a reusable configuration framework. It can be used
to move a web applications' configuration data online with the rest of
the data, to do user preferences, or anything else your twisted mind
can think of. Originally developed for use in <MSM>NewsBruiser</MSM>.

### LOMP
package:Leonard's Obsequious Markup Producer
groups:libraries
date:1999-present
language:Python
license:Python
homepage:http://newsbruiser.tigris.org/source/browse/~checkout~/newsbruiser/nb/lib/LOMP.py

LOMP is a very simple library for generating HTML text with CSS
styling (CSS styling not included) and HTML forms. Originally
developed for use in <MSM>NewsBruiser</MSM>.

### Rubyful Soup
package:Rubyful Soup
groups:libraries
date:2005
language:Ruby
license:Ruby
homepage:http://www.crummy.com/software/RubyfulSoup/

Rubyful Soup is a Ruby port of <msm>Beautiful Soup</msm>.

### Scrape 'N' Feed
package:Scrape 'N' Feed
groups:libraries
date:2005
language:Python
license:Python
homepage:http://www.crummy.com/software/ScrapeNFeed/

Scrape 'N' Feed contains almost all the code you need to scrape a web
page and turn it into an RSS feed. Combine with 
<msm>Beautiful Soup</msm> for a tasty treat anytime.

###Template! The Musical
package:Template! The Musical
groups:libraries
date:2002-present
language:Python
license:Python
homepage:http://newsbruiser.tigris.org/source/browse/~checkout~/newsbruiser/nb/lib/TTM.py

T!TM is a library for doing template interpolation. It's fast and easy
to use. Originally developed for use in <MSM>NewsBruiser</MSM>.

### Transfusion
package:Transfusion
groups:libraries
date:2004
language:Python
license:Python
homepage:http://newsbruiser.tigris.org/source/browse/~checkout~/newsbruiser/nb/lib/transfusion.py

Transfusion is a simple parser for the <a
href="http://www.movabletype.org/docs/mtimport.html">Moveable Type
input format</a>. Originally developed for use in
<MSM>NewsBruiser</MSM>.

#### Interactive fiction

### Degeneracy
package:Degeneracy
groups:if
license:Ask me
homepage:/software/if/degeneracy/
date:Released March 30, 2001
language:Inform

'Sloppy medieval' game with a twist. No other piece of software like
it. Critically acclaimed.

### Guess The Verb!
package:Guess The Verb!
groups:if,greatestHits
license:Ask me
date:2000
language:Inform
homepage:/software/if/gtv/

Scenario-based adventure satirizing various IF genres. Very silly,
lots of detail. Finished 11th in the 2000 IF Competition.

### The Knapsack Problem
package:The Knapsack Problem
groups:if
language:Inform, Python
license:Public Domain
date:Released May 6, 2001
homepage:/software/if/knapsack/

Computer science optimization problem presented in a cute way. Fun for
a while, but not earthshaking. Finished dead last in LOTECHCOMP 2001.

#### Bagatelles

### BBS2ANSI
package:bbs2ansi
name:BBS2ANSI
groups:bagatelles
date:June 20, 1999
license:GPL
language:Perl
homepage:/source/software/download/bbs2ansi.pl

BBS2ANSI is a Perl script which correctly converts Wildcat!-style BBS
color codes to standard ANSI color codes. It lets you specify strings
to substitute in for the BBS/caller information codes. If you don't
know what I'm talking about, you don't need it. But I needed it, and
it took me a while to find all the information I needed to write it,
so if you do need it, I've already done the work for you.

<p>By the way, Wildcat! is no longer owned by Mustang; they sold it to a
company called <a
href="http://www.santronics.com/">Santronics</a>. Another piece of
information it took me a long time to find. They don't recognize the
fact that I was a paying customer of Mustang, though, so I couldn't
get any technical information from them.

### Dada Pokey 
package:Dada Pokey
groups:bagatelles
homepage:/features/pokey/
license:BSD-style
language:Perl

A suite of programs for randomly shuffling and generally having fun
with <a href="http://www.yellow5.com/pokey/">Pokey The Penguin</a> comic strips.

### Dog Bites Dog
package:Dog Bites Dog
groups:bagatelles
homepage:/features/DogBitesDog/
license:BSD-style
language:Python

Scrapes 'offbeat' news headlines and recombines them to make them even
more 'offbeat'. Two command-line scripts, one of which generates HTML.

### Document tree printer
package:Document tree printer
groups:bagatelles
homepage:/cgi-bin/source.cgi?cgi-bin/print_tree.cgi
language:Perl
date:1999
license:GPL

Takes a URL and turns it into a list of links to the various
components of the URL. Useful for automatically inserting navigation
links in your web pages.

### Mail viewer
package:Mail viewer
groups:bagatelles
date:1998-2002
license:BSD-style
language:Python
homepage:/source/mail/mail.cgi

A simple, spamproofed web-based frontend to viewing email messages
(specific, preselected email messages, not whatever ones are in, eg,
an IMAP account).

###Source viewer

###Tonight's String
package:Tonight's String
groups:bagatelles
date:2002
language: Python
license: Murder Public License
homepage:/source/software/TonightsString.py.

A tiny publisher for updated-daily content, useful when the content is
a short string (such as a quote of the day). Choose each day's content
randomly or following an order you specify. Includes an archive viewer
and an RSS feed.  Used to power <a
href="/articles/Tonight's%20Episode.html">Tonight's Episode</a>.

### Fast Jack's Floating Hall Of Craps
package:Fast Jack's Floating Hall Of Craps
groups:bagatelles
date:1996-2000
language:Python
license:BSD-style
homepage:/features/hall/craps/

Second in the series of "x's House of y" simulations, FJFHoC is a
Python simulation that gives odds on craps. Originally a C++ program
which has been lost in the mists of time.

### The McSweenifier
package:The McSweenifier
groups:bagatelles
date:Released March 17, 2001
homepage:/features/mcsweenifier/
language:Python
license:BSD-style

Formats your pathetic attempts at <a
href="http://www.mcsweeneys.net">McSweeney's</a> stories as though
they had actually been approved and published. Shameless as only
software can be, it will dutifully format as McSweeney's stories
things which don't look like McSweeney's stories at all.

<p>The (rather tepid) irony is that the McSweeney's folks could actually
get some good use out of this program, since it looks like they do all 
their HTML by hand.

### Monty Hall's Hall Of Doors
package:Monty Hall's Hall Of Doors
groups:bagatelles
homepage:/articles/monty/
language:Perl
license:GPL

A CGI simulation of the Monty Hall Paradox. Nifty features galore. If
this doesn't convince you, you can't be convinced.

#### Incomplete or archaic software

#### TATC
package:The Arbitrary Text Code
groups:incomplete
date:1999
license:In limbo
language:Perl
homepage:/software/tatc/

There was a book a while back called 'The Bible Code' which purported to
find hidden messages in the Old Testament. The Arbitrary Text Code brings
the excitement of The Bible Code to whatever large chunk of text you happen
to have lying around. This works, but not very well, and it's slow.

### robotfindskitten 2
package:robotfindskitten2
groups:incomplete
name:robotfindskitten 2: This Time It's Personal!
license:Ask me
language:C
homepage:/software/robotfindskitten/#rfk2

If you found robotfindskitten just a little too relaxing, if you crave
a revival of the glory days of ANSI blood-and-guts, then have I got a
deal for you! At great expense, I have written the definitive sequel
to robotfindskitten, taking out all the funny messages and bizarre
objects and replacing all that hoity-toity kitten-finding nonsense
with a simple goal: kill or be killed!

<p>robotfindskitten 2 is built on a bare-bones framework for writing an
action game with ncurses, which you might find interesting. You're
free to use the framework with or without attribution, or just rip off
the doubly-linked-list implementation

### Tigris
package:Tigris
groups:incomplete
license:BSD-style (tigris.org)
language:Java
date:2000-2001
homepage:/software/tigris/

Tigris is a suite of scripts and Java servlets which works with tools
such as CVS to provide an easy-to-use software development
environment. I worked on Tigris as part of my former job at <a
href="http://www.collab.net/">CollabNet</a>. The core component of
Tigris is called Helm, and most of the Helm code was written by either
Daniel Rall (dlr at finemaltcoding dot com) or myself.

<p>In August 2001, the source to the Tigris suite was closed (but
development continues as CollabNet). The download link will
give you tarballs of the CVS repositories just before they were
closed.

<p>The Tigris version of Helm contains project, user, and group
administration; a fast, ultra-flexible fine-grained access control
system; a task runner; a distributed caching and cache invalidation
system, and a lot of other stuff. There are also other components,
which I did some work on: Picayune (a tool for project news), Nidaba
(project documents), etc. The code is old, but it's good.

### eBlock Captains
package:eBlock Captains
groups:incomplete
license:BSD-style
language:Perl
date:2004
homepage:/software/eblocks/

A program I wrote for the 2004 Wesley Clark presidential campaign. It
was later adapted (not by me) for the Kerry campaign. It distributes
a phone banking task among a large number of volunteers.
