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…

  • 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.