Server-Side Spambayes

25 01 2009

With most spam filtering systems,  I always have to check for (or at least worry about) ham that’s been misclassified as spam, and I sometimes have to look at spam messages in my inbox.  Life’s too short.

For years now I’ve been using SpamBayes instead.  I just love it.  Because it has a separate “unsure” folder that receives the few messages it can’t classify with confidence (these are almost always spam), it is able to provide an extremely low rate of false negatives and effectively zero false positives.  And that tells me exactly which messages I need to train on.

Well, I’ve finally gotten around to documenting and publishing my approach.  I’ve posted an article and the code at GitHub.  I hope this helps somebody else as much as it helps me.


Git Along, Lil’ Dogie

21 01 2009

In a recent post I mentioned that I was going to stop resisting a 100% commitment to Emacs. While I was working on the first step of reorganizing my .emacs stuffs, I also gave up resisting git. I’m now working on that project on github.

I managed to get myself into an awful lot of trouble with the old version of git that Ubuntu ships and a “helpful” emacs package called egg, but the git community members on #git ( were extraordinarily patient and kind, and helped me recover.

Resistance is indeed futile.

I found the following resources invaluable for setting up remote Git repos on my FreeBSD server with lighttpd:

Gitosis helps set up a Git server

Running gitweb on Lighttpd

Also, this article explains how to set up digest authentication to protect gitweb from unwanted observers.

Resistance Is Futile

11 01 2009

This blog started out with the tagline “Computers? No damn good,” but the theme has been fast evolving away from what lazy good-for-nothings programmers can be and towards documenting my process of learning to find the path of least resistance. Somehow, for me, that doesn’t seem to mean being lazy or careless. Instead it means learning the things I had put off so that I am informed enough to make good technical decisions. It means buckling down and developing the infrastructure I need in order to be productive, even if that means fixing other peoples’ bugs and design mistakes. It means a commitment to playing the game, rather than a fear of getting involved.

Gnu Fry

5 01 2009

All weekend and into today I’ve been hacking my .emacs setup to make it fast, beautiful, and functional, and along the way I’m learning a bit of Git. I’ve always been a little jaded about FSF absolutism when it comes to the meaning of “Free,” but when I ran across Stephen Fry honoring Gnu on its birthday today, I must say, I looked back on my past few days of work and learning, and felt inspired.

Emacs? Damn Good.

3 01 2009

Okay, computers are no damn good, and leave bugs, undocumented features, and Things That Just Don’t WorkTM all over the place.  But I have resolved something: Emacs Is The AnswerTM to all my computer usability problems.  I know Emacs ain’t for everyone, but I fell back into it ten years ago after having used it in college; it was like falling out of bed; just so natural and productive.  So I am going to stop resisting and commit.  That means I’m going to:

  1. finally learn elisp well enough to be more than a fairly competent hooker-and-extender.  I don’t love Lisp (too syntactically uniform—give me Python please), but again, time to stop resisting.  I’m going through the info pages one by one.
  2. also go through the general Emacs info pages to discover the productivity gains I’ve missed.  I just discovered there’s a mode for interacting with LDAP servers, and Gnus has a special mail searching tool that even works on IMAP.
  3. stop hoping that Thunderbird or some other mail client will finally solve my biggest email usability challenge.  With all its quirks and impenetrability, Gnus is still the best tool out there for me, and its integration with other parts of emacs (planner, org, remember, etc.) can’t be beat.  Whether or not I can learn enough make it perfect remains to be seen, but no more complaining.
  4. finish organizing my .emacs with lots of autoloads so I can start it up in under a second.  I start emacs about ten times a day and that will make a big difference.
  5. get my GTD system set up using planner and/or org mode.  I’ve taken a shot at that in the past but have never got comfortable enough with any of it to remember the keybindings and feel like it was useful.  But I know it can be.  There are even hooks for Google Calendar (more on this later).