Older blog entries for titus (starting at number 55)


Dude. It is possible to get some [sic] laid by creating a really really really really really really useful software product. Take single sign-on for example.

Being married, this is less of an incentive for me, but I can see how it could work. ;)

That jwz article is full of good quotes. I also like:


Then the next thing you want is an invitation manager like Evite but that doesn't suck. Evite sucks because they're spammers, and because it's more important to them to put advertising in front of your eyeballs than to be useful, so the mail they send out doesn't actually include any information, in a lame-assed attempt to drive hits to their web site. So what you want next is a free replacement for Evite -- but more to the point, one that doesn't require any kind of server running anywhere.

I'm not smart enough to figure out how to do this, but it does nicely sum up my feelings about Evite.

Reputation systems, certs, etc.

A few days ago I begged for links and comments on certification and reputation systems. I only got one reply, from Steven Rainwater. He mentioned robots.net as a more up-to-date site running mod_virgule. He also said that he thought the user interface for cert systems that he's seen is a large part of the problem, and that users frequently don't seem to understand what the certs are or what they mean.

Here's a handy link to his Web page on mod_virgule.

I also found this O'Reilly Network article called "Annotating Everything", which reports on Marc Smith's work on Aura.

Finally, on the subject of annotating everything -- CleverCS had a cute article on acquiring linguistic/world knowledge from volunteers. Looks interesting, although clearly I'm not smart enuff to understand their prototype app. But maybe you are...

Again, if you have links to effective annotation/reputation/certification/contribution systems, please send them to me! Thanks!

Shotgun Golf

In response to no hockey season, HST introduces Shotgun Golf:


The game consists of one golfer, one shooter and a field judge. The purpose of the game is to shoot your opponent's high-flying golf ball out of the air with a finely-tuned 12-gauge shotgun, thus preventing him (your opponent) from lofting a 9-iron approach shot onto a distant "green" and making a "hole in one." Points are scored by blasting your opponent's shiny new Titleist out of the air and causing his shot to fail miserably. That earns you two points.



17 Feb 2005 (updated 17 Feb 2005 at 22:52 UTC) »

[ sorry, dup entry ]

16 Feb 2005 (updated 16 Feb 2005 at 23:02 UTC) »
Google knows Everything

My wife found this RISKS digest with a post from me in 1995. Well, I still agree with the old me that having a command-line interface is a good thing ;).


Grig is organizing a Southern California Python Interest Group, and, as usual, I'm sticking my nose into it. We've set up a mailman list.

Artificial Life

The Discover article I mentioned is online at the author's Web site. (It was also on /.) I do believe that they're working on a scripting interface for Python, partly due to my proselytizing, but I can't find any mention of it on the Web sites; I'll ask.

Interview with Hunter

This one is from before Fear & Loathing in Las Vegas came out.

Beta, beta, beta

zdnet has an article about how beta software "releases" are becoming increasingly prevalent. Google, of course, would be the case in point. Of course, this is part of google's release strategy: "underpromise and overdeliver". Web apps really can get away with this, because it requires no user installation to upgrade to the latest version.


Implemented wsgiMemcached and wsgiPullAdvogato. So, you can now do this:

app = wsgiPullAdvogato.wsgiPullAdvogato()
app = wsgiMemcached.wsgiMemcached(app)

and you'll have a Web app that pulls down posts from Advogato via XML-RPC and caches the results via memcached.

The advogato pull is simple and error-prone, but functions; the memcache middleware works fine, but I'm unhappy with its implementation as middleware. As is, it requires that downstream apps be able to report if a given URL is stale; otherwise the caching system doesn't know when to recache an entry. While I don't think there's any way around changing the app to support caching, right now the system breaks if the downstream app doesn't have this function. After sleeping on it, I think I'll try implementing it as a service passed in via the environ dictionary. Maybe that will be cleaner...

Hmm, then I can write another piece of middleware that looks at the If-Modified-Since headers, groks the cache, and decides whether or not to send. Hmm. (Here is a simple article on HTTP Conditional Get.)

This pipelining ability of WSGI is really nice; I'm constantly thinking of new uses for it. The ability to deploy a Web app in multiple environments by changing only a few lines of code is also very nice -- I did some benchmarking last night, and I switched between CGI and SCGI serving in about 30 seconds.


Reputation and certification systems

I'm on the hunt for reputation/certification systems, a la advogato/mod_virgule, slashdot, and kuro5hin. I found a simple alternet story, too. And someone somewhere mentioned Aura, which I have yet to read about.

I'm particularly interested in hearing about persistent rep/cert systems that (in your opinion) tend to accurately reflect people's rep. In other words I'd like to find out about ones you find effective ;). I'm most interested in hearing about communities with a small core, not too much turnover in that core, but a lot of "fringe participators".

E-mail me, please! I'll summarise and acknowledge, yada yada. TIA!

PostgreSQL and IBM's patent application for ARC

Haven't seen this show up anywhere else yet; it's a GeneralBits discussion of the patent issues surrounding the "Adaptive Replacement Cache". The ARC algorithm is in PostgreSQL 8.0, but IBM has applied for a patent. What to do? Read on...


Three HST items: writing a Taschen book, surprised he's still alive, and Breakfast with Hunter. The movie looks fantastic...

Old Software

dominion. Didn't know this was still lying around! That's my first collaborative code project... And hey, here's my first publicly posted software project, 'ring'. Sheesh, June 1991...



In an almost completely off-topic response to Graham Fawcett on the quixote-users mailing list, I suggested using memcached to store per-session information in memory. Then I got curious, and wrote a quicky example of using this as a persistence store for Quixote user/session information. The result is under my projects page as qx-memcache-example. Kinda neat -- sessions are "persistent" as long as memcached is running ;).

I heard about memcached, incidentally, through reading advogato. I think one of the maintainers is on here. Can't find it, though, because my google-fu has failed me.

On Ayn Rand

Via Educated Guesswork, Nora Ephron on Ayn Rand:

Like most of my contemporaries, I first read The Fountainhead when I was 18 years old. I loved it. I too missed the point. I thought it was a book about a strong-willed architect...and his love life.I deliberately skipped over all the passages about egoism and altruism. And I spent the next year hoping I would meet a gaunt, orange-haired architect who would rape me. Or failing that, an architect who would rape me. Or failing that, an architect. I am certain that The Fountainhead did a great deal more for architects than Architectural Forum ever dreamed. Nora Ephron, The New York Times Book Review (1968)


8 Feb 2005 (updated 8 Feb 2005 at 20:22 UTC) »
On multiple projects

I have a serious projects problem. Not only do I have my academic "bread & butter" projects (FamilyRelations/Cartwheel, paircomp, and motility), but my academic side projects ("bogs", a rewrite & extension of the binding site software we published earlier), my old academic projects (at this point limited to semi-supporting old script hacking I did over the last few years so that we can publish the work), some consulting work (collar), my simple OR mapping software (cucumber), a bunch of Python bug/patch fixups, the various random WSGI stuff I've been talking about here, and the support code for various projects (things like PBP hacking & code coverage analysis tools), but I've got a few other things planned, too. Like khmer, a genome-scale k-mer analysis toolkit, and a project I plan to call "annotated python" that I hope will help me explore some ideas about certification & distributed annotation that I plan to apply to genome annotation some day soon.

This may be the real reason why many OSS projects never reach 1.0, Ned... too many projects per person!

Some of these projects are essentially my version of thinking out loud. But all too many of them are being used by other people and need to be supported; all of them (with the exclusion of my old academic scripts and some of the WSGI stuff) are being actively used by me in my research. Waste not, want not...

It's extraordinarily advantageous (for me) to be able to take a break from one project and attack a different set of problems every so often. Moreover, often I can get a good angle of attack on one problem by solving another one. For example, my need to write a flexible conference submission system (collar) lead to the design/implementation of my OR mapping (cucumber) which in turn solved some of the problems I was having with my bioinformatics system (Cartwheel). Another example is paircomp & motility: I needed a C++ library to load/manipulate comparative sequence analyses, and a C++ library to search for flexibly-defined sequence motifs. Initially they were used in FamilyRelationsII, my FLTK-based visualization GUI, but they then became very handy for some as-yet unpublished work in comparative sequence analysis & the motif analysis that's part of bogs.

My belatedly defined New Year's goal is to bring paircomp and motility up to 1.0 this year. Both of them are C++/Python toolkits being actively used by at least one group external to my lab, and I'm pretty happy with the APIs. Just gotta get some serious testing into motility.

Oh, and I want to graduate. Soon. No snarky comments about time allocation, please -- it's too easy to make fun of me ;).


Daily Python-URL no longer feeding to PlanetPython?

This no longer shows up on planetpython, it seems. Intentional?

MythTV, Freevo, and Python

Mentions of free/OSS PVRs showed up in two high-profile places recently. First there was a NY Times article on MythTV, and then a linuxdevcenter article on Freevo showed up on slashdot.

We've been using MythTV for about a year now; it took me a long time to set up, but once I figured out how to configure the Linux kernel appropriately and then found Debian packages for the rest, it was pretty easy. It's completely changed our TV watching habits (albeit not necessarily for the better...) and I use its jukebox & DVD ripping interfaces a fair bit as well. It is truly a fantastic program.

Freevo, however, is less good -- and (from what I can tell) for only one reason: lack of integrated live TV watching/recording. MythTV has a recording daemon that streams live TV from the tuner card directly to a client via UDP. This is both flexible -- it underlies the entire system for TV watching, because you can do the same thing with recorded shows as well -- and nicely client-server. (My iBook has a Myth client on it, so I can watch live or recorded TV via 802.11g.) If Freevo had this feature, I'd switch in a heartbeat. They seem to be aware of this lack, to their credit, but it's probably a reasonably-sized job to implement it.

The Freevo team had some nice things to say about Python:

The language is one of the best collaborative languages I have ever used. I wonder if we could have reached the point we have without the short learning curve and power of Python and its related libraries."

...but also talked a bit about speed considerations:

"Sometimes Python is too slow for the needed task. Most of the time we can avoid such problems by rethinking the design," says Dirk Meyer, the Freevo project's 28-year-old lead developer from Bremen, Germany.

I'd be interested in hearing more about this, because my usual solution is to recode in C ;).

A friend and I have been batting around the idea of coding up a Web services API for some of the Myth functionality. GUIs can only take you so far... We'll see. It's not like I haven't got enough on my plate.



Mark Rees posts about an IIS server interface for WSGI. I can't test this, because I don't run IIS at all, but it would be interesting to see if my simple Quixote-WSGI adapter works under it. I don't even know how people run Quixote on Windows, to be honest; I guess SCGI should work with Apache on Windows, right?

So, I asked Mark to try it out, and it turns out that the QWIP adapter successfully runs Quixote under a slightly modified version of his ISAPI. Very cool. I hadn't thought about IIS integration being a real raison d'etre for WSGI, but there it is...

Mark also politely informed me that my wsgiServeFiles class didn't return proper status codes; I was returning int(200) rather than "200 OK". I just fixed that; the fix is available via Darcs or in a nice tarball on my Darcs page.

Python urllib2 buggishness

So John Lee ran across my old post asking about new (RFC 2965) style cookies, and answered thusly: mailman correctly uses RFC 2965 cookies, but does so unnecessarily because no one is really paying any attention to them. However, he did say that it's a bug for urllib2 to not correctly handle things that the browsers handle. The fix is to change urllib2 to handle RFC 2965 cookies by default, I guess. I sent him a concise program that demonstrated the issue.

Political diversions

Sometimes I come across things that make me really proud to be an American. Then there's the other stuff we do.


Darc thoughts

Continued playing around with my Darcs repository. Now it's automatically producing nightly tarballs via the 'darcs dist' command.

I'm still having trouble planning out my actual Darcs repository usage. Since each Darcs working copy is a full repository in its own right, it seems like overkill to do what I do with CVS -- run various versions out of their own working directories, with tags for set of configuration files. Still, this is what I'm planning (suitably translated into Darcs reality).

Right now I'm envisioning a layout where the depository dependencies look something like this:

                                 ----> installed site1
master (stable) --> working branch --> installed site2
              ----> devel branch   --> devel site
                                 ----> demo/test site

It's pretty easy to scale this to multiple developers (although at the moment that's not necessary for any of my actual big projects). You can just branch more repositories off of the 'devel'/'working' branches.

The cool bit is that I can do things like patch bugs that are in common between my working & devel branches, and then 'push' and 'pull' them up and down the tree above. It seems much easier to do this in Darcs than it has been in CVS. I hope reality matches perception!

The only snafu so far has been that Darcs is a major pain in the butt to install on non-package-managed machines. I got it running on Debian and FreeBSD with no problems, but my old Redhat machine (where I do all my development) and my iBook (which I live on) are proving more problematic. Maybe I'll write more about what !#%!#@$! annoying piece of software the Glasgow Haskell Compiler ('ghc') is later...

Quixote licensing

David Binger sez:

I'm pleased to announce that Quixote 2.0 will be released with a 
GPL-compatible license.

That's a Good Thing in my book.


It's official: Basecamp is extraordinarily cool. You may recall that Basecamp is written in Ruby using Ruby on Rails. Well, if Kevin Kelly's Cool Tools says it's fantastic, then dangitall it is. (Cool Tools is my go-to place for gifts of all kinds for all ages. Fantastic site.)

My sis-in-law is looking into Basecamp for use in her company. I'll be interested to see how it works out for her.


46 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!