interthingy.net / ray / projects

I've worked on countless small software projects and tools over the years. This page describes a few of the projects that I'm presently working on:
argent

Argent is an RSS feed reader that can search feeds for specified patterns and send the results via email. The name derives from the phrase "RSS Agent". Argent is a Python script which uses a SQLite backend to track which feed items have been seen so that duplicates aren't sent. The input is an XML file that describes the options and feeds to be processed. Argent is designed to be used on a server and driven by cron.

I am presently using Argent to scan craigslist musicians feeds and it is working quite nicely. The benefits of this approach is that I receive notifications of new posts almost immediately (dependent mainly on the frequency that Argent is invoked via cron) and I am guaranteed not to miss posts if I forget or am unable to check the feed manually. Of course, immediate notification also depends on your access to email; but at least you won't miss any. Having a smartphone helps considerably.

Argent's filtering capability also means that I only get notified about items that meet my search criteria. This, of course, works only as well as your search criteria: you will very likely get false positives and you could miss some items that your filters didn't capture. You will likely end-up needing to make a compromise to find the right balance (but at least you won't get inundated with junk you're not interested in).

A good example of this is something I encountered with craigslist feeds. I wanted to exclude "services" ads so I added "services" as an exclusion term. Turns out, however, that this excluded ALL feed items because craigslist inserts a boilerplate footer in many items that says: it's NOT ok to contact this poster with services or other commercial interests. Oops.

I do not expect to be able to test Argent myself on a wide variety of feeds and so I will be very interested in beta testers to help with this. If you think you may be interested please drop me a line (codemonkey AT interthingy DOT net).

The Argent project is hosted on Google.


rex

Rex is a fairly simple utility to process text using regular expressions. It was originally a proof of concept for some goo runtime library elements and I decided to make it into a formal project. It provides two basic useful functions:

The rex project is hosted on Google.


tagtools

Tagtools is a set of Python scripts for managing tags (meta data) on audio files. Some devices (like my droid2) prefer to manage a music collection using the meta data, or 'tags', and if the tags are not correct and consistent the result is a big mess. (Prior to my droid2 I used various music players running the Rockbox open source firmware, which manages music based on the directory structure, which I prefer. Nevertheless, it is a good idea to keep the tags in reasonably good shape.) When I moved to my droid2 I already had a large music collection and fixing the files manually is beyond tedious. So I've written a number of scripts over the years to process the music files. I'm currently working on a Python script called taglint which will detect many different kinds of errors and I decided to package it along with a few other useful tools. taglint will have the ability to fix some errors (but probably not all) and I'm considering a GUI to allow interactive repairs.

I've so far selected one other tool for inclusion in this package. It is a command line-based tool called tagcp which copies tags from one file to another (including across file types). This can be a real time saver when transcoding files and I was quite surprised to find that virtually no other tool did this. tagcp currently supports OGG and MP3 formats.

I expect to release tagtools under the GPLv3+ in the near future.


goo

Goo is a scripting langauge written in C++ and designed to be easily embedded in C++ applications. It started out as a scripting language in my riff game engine and I decided to externalize it so it can be used elsewhere. The original design goal was to make a language that would be friendly to non-programmers and part of that was to minimize the syntax requirements. The result appeared to have little structure (at least to someone used to programming in structured languages!) and that was the origin of the name 'goo' (as in a gooey substance lacking structure). It has evolved somewhat since that time but I think it is still easy to use and read and the syntax requirements are still very minimal. The biggest change is that it now requires curly brackets for code blocks (which I felt was a beneficial trade-off). Most of the basic language features are implemented and working well. I'm presently finishing some runtime library elements and I'm considering adding user-defined classes and modules. I am also experimenting with an extensible parser system that would allow host applications to extend the language for their own purposes.

I plan to release goo under the GPLv3+ when it becomes somewhat stable and a bit more useful as a stand-alone scripting langauge (it is actually already useful for some things).


heat

Heat is a somewhat ambitious project to design and implement a new software build tool. It came about because of my frustration with existing build systems. Much of the design is complete and, I think, very promising.

The project, however, has been on hold since I decided to base it on my goo scripting language. I want to get goo into a reasonably stable and complete state before I begin implementing heat, which will embed and extend goo (and effectively act as a test case for doing so).

I plan to release heat under the GPLv3+ when it becomes somewhat stable and useful.


riff

Riff is an interactive fiction game engine using XML-based input files. IF (aka text adventure games) is something I've been interested in for years; in fact, they were instrumental in my becoming a software developer. Over the years I haven't had the time to remain involved in IF (or even play the games much) but my interest in developing the software for IF games has remained a constant, but not well-fed, hunger. I have started work on various engines and tools many times in the past but never brought anything to fruition nor public view. I came the closest around 2001 when, while temporarily unemployed, I decided to teach myself Java and chose to develop an IF library for writing games using Java. That project reached a point of relative completion but then I started a new job and my work on it fell off again. Some years later (and after becoming thoroughly turned-off to Java) I decided to re-write it in C++ and also include an engine that could play games from XML files. That effort is now largely complete but not enough so that I feel ready to release it.

This project led me to begin work on goo, and that, unfortunately, has forced me to put riff on hold. Eventually, riff will be ready for prime time with the goo language embedded in it, allowing game authors to employ a full-featured scripting language capability.

I plan to release riff under the GPLv3+ once it is reasonably stable and useful.