ideas

A list of ideas – mostly old and bad – for software projects I’d like to work on. Also see the projects I’ve actually worked on.

…long period of disuse here…

  • Learn Erlang. Write something distributed in it.

  • Port Tic Tac Toe to the XBox 360, using XNA Studio Express, and distribute it on XBox Live Community Games.

  • Build network bridges between game consoles, handhelds, mobile OSes, and PCs to make it easer to develop cross-platform multiplayer games. Proprietary commercial libraries for this exist, but handheld support is limited. GameSpy‘s Game Open looks promising, though.

  • Write a PAM module that acts as an OpenID consumer and authenticates againsts remote accounts. See Gracie, which is a PAM OpenID provider, the Inline Auth Extension (thread), which provides for OpenID authentication outside of a browser, and Scott’s blog post.

  • wash, the Web (Again) Shell: a command line for the web. Example use cases include checking your bank account balance, adding a movie to your Netflix queue, and listening to your Vonage voicemail, all from the command line. (From TV Raman.)

  • Write a Steam IM protocol plugin for Pidgin. I haven’t found much information about the protocol, except that despite a misleading wiki page, it’s not based on MSN. We had a small thread on the Pidgin mailing list, but nothing beyond that.

  • There’s a Python client for GData, but no server. Write one! Even better, now that the Atom Publishing Protocol‘s IETF draft is solidifying, hopefully implementations will start appearing. GData is just a few extensions beyond that!

  • Write a session management plugin for Pidgin (formerly Gaim). Done! See Mattperry’s SessionSave plugin.

  • Improve tcsh‘s dabbrev-expand and bash/readline‘s menu-complete commands to include the entire contents of the app or shell window’s output in their index, not just the history of typed commands. This would make them similar to dabbrev-expand in Emacs.

  • Write gateways between identity platforms like OpenID, Google Accounts, Yahoo BBAuth, Microsoft CardSpace (see OSIS), Higgins, and others, so they can interoperate. Simon Willison’s idproxy.net is a first step toward this. Sweet!

  • Mock out the Google Ajax Search API for offline development and testing. Use failure injection, etc. to determine behavior.

  • Pidgin (formerly Gaim)’s TOC prpl hasn’t been updated for 2.0.0. It doesn’t build in any of the beta releases. It should be either brought up to date or officially deprecated and removed.

  • Fix a bug in wget that prevents --html-extension and --convert-links from playing nicely together.

  • Write an OpenID plugin for PyBlosxom. Done! See OpenID server plugin for PyBlosxom.

  • Write a Google Ajax Search API plugin for PyBlosxom. Done! See site search with the Google AJAX Search API.

  • Add support for comments to the photogallery plugin for PyBlosxom.

  • Phone transcripts! Record all of your phone conversations, then transcribe them with speech recognition. Bonus points: index the transcripts and allow keyword search over them. Search results would link to both the transcript and the recording. Starting with VoIP would skip the telecom adoption hurdle, and the privacy issues aren’t insurmountable. Unfortunately, speaker-independent speech rec just isn’t good enough yet. Sigh.

  • Write a single-sign-on server (as described here) for the Open Source Metaverse Project. It’d probably be based on Kerberos.

  • SnipSnap requires visitors to register and log in before they can comment. Alas, this discourages commenting. Add support for one-time comments a la WordPress and Blogger. Done! See snipsnap comment without login patch.

  • Work on Beagle (formerly Dashboard), which is wicked cool, or Tenor, which may someday be even cooler.

  • Write an overlay network that does multicast cleanly and efficiently. Similar to IP multicast, but above the transport layer. Among other things, this would require…

  • …a good API for Vivaldi, or another network distance algorithm. Write a portable implementation and package it as an easy-to-use library for app developers. P2P overlay networks might be a good initial target audience.

  • Write elisp for filling code in Emacs. This is my single biggest wished-for Emacs feature. Done! See fillcode.

  • Emacs’ refill-mode and filladapt don’t play well together. Make them! Never mind, refill-mode isn’t all that anyway.

  • Add an undo command to tcsh. Bash has one, courtesy of Readline, so I have shell envy. Done! Emacs shell-mode does this.

  • Add color to tcsh and GNU Readline with ANSI color codes. For example, highlight the current region (when one exists), highlight the search string in incremental search, etc. Done! See tcsh highlighting patch.

  • Add delete-selection-mode to tcsh and GNU Readline. Done! Emacs shell-mode does this.

  • Referrer spam is evil. Extend Tony Buser‘s derefspam script to use DNSBLs and RBLs like Spamhaus, BSB, Blitzed, and SURBL.

  • Implement JWZ‘s Intertwingle idea as a GreaseMonkey user script for Gmail. (I’d love to do it for Pine, but it’s way too ambitious.)

  • Write a pine patch to undo top-posting. It would parse an incoming email based on quoting levels, remove duplicate quotes, and display the unique quotes in the order they were written. Thanks to Matt Ackeret and this pine-info thread for the original idea.

  • Add sieve support to Gmail.

  • Build a simple webapp with Django. Is it really as good as Rails, Struts, and Zope? Done, at work. Django templates rock!

  • Revive jxtapy, which was founded to provide Python bindings for JXTA, but never got off the ground. Use Jython to get a running start.

  • Add support for multiple-month events to remind, my calendar of choice. For more info, see this email thread.

  • Why do modern web sites devote so much space to big, useless images and so little space to links and fields you actually use? This is awful usability, mostly due to Fitts’ law (more). A Firefox plugin that makes links and input fields “sticky” would go a long way toward fixing this problem.

  • Tuplespaces have a powerful and elegant API, but they’re centralized, so they’re poor distributed data structures. DHTs are great building blocks for distributed systems, but their APIs are weak. Most only provide the functionality of a hashtable – gets and puts of key/value pairs. Write a tuplespace implementation that uses a DHT as its backing store – the best of both worlds! Done! Amazon SimpleDB beat me to it.

  • Write pine patches to make saving messages smarter. When saving, pine should remove trailing quotes, remove the HTML parts of MIME multipart messages, render HTML-only messages as text and save the text instead, offer to delete attachments, and save the attachment filename in the deletion note. Details in this email thread. Done! See pine delete attachments on save patch and pine remove trailing quote patch.

  • I use GeoBytes to do geocoding on my voyeurism page. It’s great, except that it occasionally shows popup ads. So, I’d like to find a geocoding service that’s ad-free and switch to it.

  • Google Keys provides keyboard shortcuts for Google search, which is quite cool…but it’s not supported any more. Write a GreaseMonkey script that does the same thing. Done! See Google Search Keys.

  • Contribute to acoc, which I love. First, add specs for more tools like pgrep, identify, tar, jar, etc. Then, extend acoc to detect columnar text output and color accordingly, especially columns that are enums. Finally, maybe extend it to recognize common data types like dates, and color accordingly. Done! Partially. See acoc.conf for context diffs.

  • Write GreaseMonkey scripts for GMail to address the reasons I haven’t switched from Pine. Specifically, add more keyboard shortcuts, cursor management, and trailing quotes. (Inspired by Humane Gmail autosave and Mihai Parparita’s skinning, persistent searches, and extra keyboard shortcuts.) Somewhat done…see these GMail GreaseMonkey scripts.

  • Implement tuplespaces in Python. Done! See PyLinda.

  • Add SSL and GSSAPI authentication to Python’s imaplib.

  • Use the newly GSSAPI-capable imaplib to rewrite folderstat so it can talk to my mail server.

  • Work on synchronizing mp3 playback. We took a stab at this a while ago, and it was technically sound, but it wasn’t very usable. I’m currently working on simplifying it and making it work with more MP3 players on different platforms. Bonus points: support Bonjour (aka ZeroConf). Done…as much as it can be. See p4sync.

  • Add internet multiplayer to Baku Baku, one of the best games ever written. This might require a complete rewrite…maybe with PyGame?

  • It’s widely acknowledged that bandwidth is increasing faster than latency. David Patterson at Berkeley has a writeup (html) on this – he’s determined that, in general, bandwith increases with the square of latency! The standard techniques for masking latency are prefetching, caching, and prediction. Implement these in common applications. More ambitious: write a general-purpose platform that does caching/prefetching, using plugins that provide app- or protocol-specific heuristics.

  • Add an xfn: operator to Google for searching XFN links, similar to the way the site: operator searches specific sites. Done! See RubHub and XhtmlFriends. They’re not Google, but they’re good enough.

  • Build a “reverse” dashboard. It would take a piece of unstructured information (URL, email address, aim screen name, ICQ UIN, code snippet) and “do the right thing” with it (open a browser, compose an email, send an IM, compile, etc.). Done! The Google Toolbar does this. Most snippets of interest come from email or web pages, and since most people use web-based email, it covers the common case.

  • Self-healing systems have gotten a lot of buzz recently, but fairly little real progress. Investigate what has been done (e.g. Solaris’s fault manager and IBM’s autonomic computing). Separate the content from the hype, and see if similar improvements could be made to Linux.

  • Infer historical events based on AIM users’ away messages. Build a server that (anonymously!) records lots of people’s away messages, then process them offline and look for large-scale patterns at certain times – concerts, holidays, elections, TV shows, etc.

  • Build a Pidgin (formerly Gaim) “secretary.” If you go idle, but you didn’t leave an away message, it guesses an appropriate one based on your previous away messages at that time of day, day of the week, etc.

  • Pidgin (formerly Gaim) plugins can provide their own preferences panes, but only if they’re written in C. Hack on Pidgin to allow this for Perl plugins too. See this email thread.

  • Contribute to SIP/SIMPLE, the IETF instant messaging/presence standard. Check on the status of Pidgin’s SIP/SIMPLE protocol plugin?

  • Do stateful packet inspection, at the host level, to monitor the services that are running. Build in a little domain-specific knowledge, and lots of heuristics, to monitor the health of those services. Also record statistics over time so usage patterns are more visible.

  • Polish bigbrother, add new features, etc.

  • Write a socket layer that resumes TCP connections if the network layer disappears temporarily, or if your IP changes. The killer app for this would be, if you hop from one WAP to another, your SSH sessions, IMAP mailboxes, IM conversations, etc. would stay open. I think either IEEE or IETF is already looking into this, but I can’t find the working group.

  • Work on GNUnet, a strikingly practical, general-purpose overlay network with some really smart people behind it. (It’s discussed relatively often on p2p-hackers.)

  • Build a solid, open SNTP library. Implementations exist, both servers and clients, but they’re either not embeddable (ie Java, C#, VB) or closed source (lots and lots of these). A couple open source command-line utilities could be good starting points: DJB‘s prickly, client-only clockspeed and Cambridge‘s much more hacker-friendly msntp. Done! See libmsntp.

  • Work on PicoContainer and NanoContainer, tools for loosely coupled software engineering. (Technically, they’re implementations of the “inversion of control” and “dependency injection” patterns.) As a start, add Python support.

2 thoughts on “ideas

Leave a Reply

Your email address will not be published. Required fields are marked *