software

Open source software I've [written](#projects) and
[contributed to](#patches). Unless otherwise noted, everything
is [GPL](http://www.gnu.org/licenses/gpl.html)ed.
Also see [other lists](/space/lists).
### Projects [](#projects)
* [backup_google.sh](/space/backup_google) is a shell script
that backs up data from Google
[Contacts](http://www.google.com/contacts),
[Calendar](http://calendar.google.com/),
[Reader](http://www.google.com/reader/), and
[Tasks](https://mail.google.com/tasks/canvas).
* [google\_talk_sms.pl](/space/google_talk_sms+pidgin+plugin),
a [Pidgin](http://pidgin.im/) plugin that enables
[Google Talk](http://talk.google.com/)'s
[SMS text messaging](http://gmailblog.blogspot.com/2008/12/really-new-in-labs-this-time-sms-text.html)
feature.
* [shell](http://shell.appspot.com/),
[openid-provider](http://openid-provider.appspot.com/), and
[openid-consumer](http://openid-consumer.appspot.com/), three
[Google App Engine](http://code.google.com/appengine/)
[sample apps](http://code.google.com/p/google-app-engine-samples/). See
[my announcement](/space/2008-04-07_google_app_engine_launched) for details.
* [openid-test](http://code.google.com/p/openid-test/) is an
interoperability test suite for [OpenID](http://openid.net/).
* [download\_picasa_album.sh](/space/download_picasa_album) downloads entire
[Picasa Web](http://picasaweb.google.com/) photo albums.
* [PyBlosxom](http://pyblosxom.sourceforge.net/) is a lightweight weblog
platform, based on [Blosxom](http://blosxom.com/) and written in Python.
* [simonitor](/space/simonitor) screen scrapes [simon.com](http://simon.com/)
to fetch the available balance on one or more Simon gift cards.
* An [OpenID comments plugin for PyBlosxom](/space/pyblosxom+openid+comments).
* An [OpenID server plugin for PyBlosxom](/space/pyblosxom+openid+server).
* [AJAX site search with the Google AJAX Search API](/space/site+search+with+the+Google+AJAX+Search+API).
* [index](/space/pyblosxom+index) is a [PyBlosxom](http://pyblosxom.sf.net/)
plugin that displays an alphabetical index of all entries.
* [snipsnap2svn](/space/snipsnap2svn) is an
[XSLT](http://www.w3.org/TR/xslt) script that converts
[SnipSnap](http://snipsnap.org/) XML database exports into
[Subversion dumpfiles](http://svn.collab.net/viewvc/*checkout*/svn/trunk/notes/fs_dumprestore.txt).
* [history](/space/pyblosxom+history) is a [PyBlosxom](http://pyblosxom.sf.net/)
plugin that displays change history for entries.
* [photogallery](/space/photogallery) is a [PyBlosxom](http://pyblosxom.sf.net/)
plugin that displays photo galleries.
* [hardcodedates](/space/hardcodedates) is a [PyBlosxom](http://pyblosxom.sf.net/)
plugin that stores mtimes in a file.
* An [RDF flavour](/space/pyblosxom+rdf+flavour) for Pyblosxom.
* [Filekicker](/space/filekicker) is a [PyBlosxom](http://pyblosxom.sf.net/)
plugin that serves static files.
* [Fillcode](/space/fillcode) is an [Emacs](http://gnu.org/software/emacs/)
minor mode that fills, or wraps, some parts of source code.
* [Ditrit](/space/ditrit) is a programmable application launcher that tries to
"do the right thing" for any input it's given.
* [BigBrother](/space/bigbrother) generates statistics and graphs from your
away message history. See my [personal
example](/ryan.barrett.name/bigbrother/).
* [P4](/space/p4) is a compact, lightweight overlay network library, similar
to [Gnutella](http://rfc-gnutella.sourceforge.net/) and
[Chord](http://www.pdos.lcs.mit.edu/chord/).
* [libmsntp](/space/libmsntp) is a compact, portable [SNTP
library](/space/libmsntp). It provides both client and server functionality.
* [Snipsnap macros](/space/snipsnap macros) is a collection of macros for
[SnipSnap](http://snipsnap.org), the web server that runs this site.
* [Tictactoe](/space/tictactoe) is an OpenGL engine that provides realistic
procedural modelling and rendering of water.
* [Voxel](/space/voxel) is a high-resolution voxel terrain rendering engine.
* [Palo Alto Library](/space/palo+alto+library+amazon+greasemonkey) is a
[Greasemonkey](http://greasemonkey.mozdev.org) script that shows whether a book
on Amazon is available in any of the [Palo Alto
Libraries](http://cityofpaloalto.org/library/).
* [MAlbum](/space/MAlbum) is a quick and easy graphical interface for creating
a web album. (Maulik has a [sample
album](http://maulik.freeshell.net/software/malbum-release/malbumSample).)
* [snipscrape](/space/snipscrape) transforms SnipSnap-generated HTML into XML
that can be imported back into SnipSnap.
* [cdname.py](/space/cdname.py) names MP3 files according to
[CDDB](http://cddb.com/)/[freedb](http://freedb.org/) INF files.
* [Nullprpl](/space/nullprpl: pidgin null protocol plugin) is a mock
protocol plugin that lets you use [Pidgin](http://pidgin.sf.net/) without
connecting to a server.
([Added to Pidgin](http://developer.pidgin.im/viewmtn/revision/info/17c1e71f633d40fd14e46c08a17a500605d793c8)
on 5/30/2007.)
* [Remote](/space/remote) is a client for
[httpQ](http://httpq.sourceforge.net/), a network server plugin for
[Winamp](http://winamp.com).
* [Scavenger](/space/scavenger) extracts
[RFC2822](http://zvon.org/tmRFC/RFC2822/Output/index.html) email addresses from
text and binary files.
* [Folderstat](/space/folderstat) retrieves the size of the folders in an IMAP
email account.
### Patches [](#patches)
* Two minor patches
([one](http://pythonpaste.org/archives/message/20080210.035948.3e0d6399.en.html),
[two](http://pythonpaste.org/archives/message/20080210.185854.234c983e.en.html)) to
[paste.webob](http://pythonpaste.org/webob/)
that fix character set handling bugs.
([Both](http://trac.pythonpaste.org/pythonpaste/changeset/7234)
[applied](http://trac.pythonpaste.org/pythonpaste/changeset/7235)
on 2/17/2008).
* A [patch](/space/opml2markdown_linkify.patch) for
[opml2markdown.xslt](http://fletcher.freeshell.org/wiki/Markdown_and_XML) that
adds links to each item's web site and feed.
* A [patch](/space/comments_openid.patch) that updates the
[PyBlosxom OpenID comments plugin](http://www.openidenabled.com/software/pyblosxom/release-announcement)
to work with versions 1.x of the
[Python OpenID libraries](http://www.openidenabled.com/openid/libraries/python).
([Applied](/space/pyblosxom+openid+comments) on 9/6/2007.)
* A [minor bugfix for cryptutil.py](/space/cryptutil_ioerror.patch) in the
[Python OpenID libraries](http://www.openidenabled.com/openid/libraries/python).
The patch is against version 2.0.0-rc3b.
* A [tkdiff patch that quotes filenames](/space/tkdiff_quote_filenames_svn.patch)
([tracker](http://sourceforge.net/tracker/index.php?func=detail&aid=1672284&group_id=64960&atid=509274))
for files in Subversion repositories.
* [AJAX commenting](/space/pyblosxom+ajax+comments) in Pyblosxom.
([Applied](http://pyblosxom.svn.sourceforge.net/viewvc/pyblosxom?view=rev&revision=973)
on 1/24/2007.)
* A [tcsh highlighting patch](/space/tcsh highlighting patch) that highlights
the match during incremental search, and in emacs mode, the region between the
mark and cursor.
([Applied](http://mx.gw.com/pipermail/tcsh/2006-August/003724.html) on 8/23/2006.)
* A patch to [remove tcsh globbing in history search](/space/remove tcsh globbing in history search).
([Applied](http://mx.gw.com/pipermail/tcsh/2006-August/003726.html) on 8/23/2006.)
* A [fix for a tcsh bug that moves the mark after deletions](/space/tcsh delete moves mark bug fix). (Applied on 8/23/2006.)
* An [acoc rule for coloring context diffs](/space/acoc.conf for context diffs).
* A [fix for an Emacs bug in minibuffer code](/space/emacs minibuffer-complete-and-exit bug fix), specifically in
_minibuffer-complete-and-exit_. (Fixed in Emacs 22.)
* [port\_pine\_patch](/space/port_pine_patch) is a shell script that automates
porting Pine patches between versions.
* [Pine reply-all patch](/space/pine reply-all patch) adds a reply-all command
to the [Pine](http://www.washington.edu/pine) email client.
* [Pine flowed-text patch](/space/pine flowed-text patch) adds an option to
[Pine](http://www.washington.edu/pine) to turn off displaying flowed text.
* [Pine remove trailing quote patch](/space/pine remove trailing quote patch)
adds an option to automatically remove trailing quotes from outgoing emails.
* [Pine delete attachments on save patch](/space/pine delete attachments on save patch) adds an option to delete attachments from messages when you save
them.
* [Gaim chat\_invite patch](/space/gaim_2_chat_invite_reverse_params.patch)
fixes a
[parameter ordering bug](https://sourceforge.net/tracker/index.php?func=detail&aid=1595828&group_id=235&atid=100235)
in [Gaim 2.x](http://gaim.sf.net/)'s
[GaimPluginProtocolInfo::chat_invite](http://gaim.sourceforge.net/api/struct__GaimPluginProtocolInfo.html#a3ea6e94a223c32ba8814aec326f02a5)
callback member.
([Applied](https://sourceforge.net/tracker/index.php?func=detail&aid=1595831&group_id=235&atid=300235)
on 11/15/2006.)
* [Gaim accelerators in away menus patch](/space/gaim_1_away_menu_accelerators.patch)
([tracker](http://sourceforge.net/tracker/index.php?func=detail&aid=1031098&group_id=235&atid=300235))
fixes [Gaim 1.x](http://gaim.sf.net/)'s GTK menu code to allow accelerators in
dynamically created menus, such as away message menus.
* Similarly, [Gaim accelerators in accounts submenus patch](/space/gaim_2_accounts_menu_accels.patch)
fixes [Gaim 2.x](http://gaim.sf.net/)'s GTK menu code to allow accelerators in
the dynamically created submenus of the Accounts menu.
([Applied](https://sourceforge.net/tracker/index.php?func=detail&aid=1597271&group_id=235&atid=300235)
on 11/19/2006.)
* [SnipSnap comment without login patch](/space/snipsnap comment without login patch) allows visitors to post comments without logging in.
* [SnipSnap recent-changes snip name patch](/space/snipsnap recent-changes snip name patch) fixes a [bug](http://bugs.snipsnap.org/browse/SNIPSNAP-392) in
SnipSnap that causes recent-changes to show blog posts incorrectly.
* [SnipSnap 1.0b1 virtual hostname patch](/space/snipsnap 1.0b1 virtual hostname patch) fixes a [bug](http://bugs.snipsnap.org/browse/SNIPSNAP-387) in
SnipSnap that prevents [virtual host redirection](/space/virtual host redirection).
* [Autocutsel clipboard and primary patch](/space/autocutsel+clipboard+and+primary+patch)
extends [autocutsel](http://www.nongnu.org/autocutsel/) to
synchronize both the clipboard and the primary selection in X Windows.
* [Libwebserver shutdown patch](/space/libwebserver shutdown patch)
([tracker](http://sourceforge.net/tracker/index.php?func=detail&aid=1146074&group_id=50164&atid=458797))
adds a call to [libwebserver](http://libwebserver.sourceforge.net/) to stop a
running server and close its socket(s).
* [Webalizer nofollow patch](/space/webalizer nofollow patch) adds
[nofollow](http://www.google.com/googleblog/2005/01/preventing-comment-spam.html)
support to the popular web server log analyzer
[Webalizer](http://webalizer.com/).