Category Archives: Software

Drupal Doesn’t Stop Spam

I run Drupal for this site, as well as some others hosted here. My complaint about it is that the spam solutions in Drupal are ineffective and poorly-designed. The situation seems to have actually gotten a bit worse in the most recent versions of Drupal. Here are my complaints:

  • No working support for captchas. (I had lots of problems with captcha.module)
  • Spam filter is not very effective, despite being properly trained on huge volumes of spam. I get dozens, if not hundreds, of uncaught spam comments per day.
  • The “mark as spam” button has no effect on some very large spams.
  • There is no feedback to users whose comments have been marked as spam, indicating to them that the comment will be manually approved.
  • There is no auto-expiry of spam comments; they sit in the database forever unless manual action is taken.
  • Deleting spam comments — which seems to be the way that people are encouraged to use the spam module — requires: checking one checkbox per message, then selecting “delete”, and repeating this for each page of the spam comment listings (it only puts a few dozen per page; I get about 15 pages worth in a slow day.) Even with some Mozilla toolbar help, this is a slow and cumbersome process.
  • No “auto-delete” feature for spams referencing certain URLs.
  • Poor recognition of &-sequences in HTML
  • Nobody really maintains the spam filter
  • Does nothing at all to stop trackback spam

So, my question is: what blogging software has good anti-spam capabilities?

Back when I used WordPress, I used the Captcha module for it, which worked well. (Its normal anti-spam capabilities didn’t.) Drupal doesn’t have a working Captcha module, and everything else is hugely labor-intensive.

Is there something better out there for Drupal anywhere?

I often get the impression that the authors of the spam module in Drupal get less than a dozen spams per day on their blogs. It simply doesn’t scale to places that get hundreds of spams per day.

(Update: Drupal also isn’t very responsive at addressing bugs…)

Linux, Bluetooth and Mobile Phones

I got my first Bluetooth-enabled mobile phone this week, a Motorola v551. I’ve been playing with the Linux utilities for working with mobile phones and have assembled some links. Most of the pages out there seem focused on SMS features of a mobile, or using a mobile phone for Internet access for a Linux box. I’m interested in neither, and care more about phone book syncing and transferring files back and forth between the phone itself and a PC.

There seems to be quite a community built around hacking Motorola phones as well. The Hofo Guide is the authoritative resource.

HowardForums.Com is also a great site.

Why I Love Haskell In One Simple Example

I recently implemented some new Haskell numeric types that, instead of performing calculations, can generate a rendering of the requested calculation or store units with it.

Here you see a transcript of my session with a Haskell interpreter. The mathematical statements I am entering after the “>” are standard Haskell expressions, and, as I demonstrate, normally evaluate to a single result.

Once I get a more powerful simplifier, I will probably write a LaTeX exporting function as well.

The entire implementation of this, BTW, is less than 200 lines.

NumTest> 5 + 1 * 3
8
NumTest> prettyShow $ 5 + 1 * 3
"5+(1*3)"
NumTest> rpnShow $ 5 + 1 * 3
"5 1 3 * +"
NumTest> prettyShow $ 5 + 1 * 3
"5+(1*3)"
NumTest> prettyShow $ simplify $ 5 + 1 * 3
"5+3"
NumTest> prettyShow $ 5 * (Symbol "x") + 3
"(5*x)+3"
NumTest> 5 / 2
2.5
NumTest> (units 5 "m") / (units 2 "s")
2.5_m/s
NumTest> (units 5 "m") / 2
2.5_m
NumTest> 10 * (units 5 "m") / (units 2 "s")
25.0_m/s
NumTest> sin (pi/2)
1.0
NumTest> sin (units (pi/2) "rad")
1.0_1.0
NumTest> sin (units 90 "deg")
1.0_1.0
NumTest> (units 50 "m") * sin (units 90 "deg")
50.0_m
NumTest> ((units 50 "m") * sin (units 90 "deg")) :: Units (SymbolicManip Double)
50.0*sin(((2.0*pi)*90.0)/360.0)_m
NumTest> rpnShow $ dropUnits $ ((units 50 "m") * sin (units 90 "deg"))
"50.0 2.0 pi * 90.0 * 360.0 / sin *"
NumTest> (units (Symbol "x") "m") * sin (units 90 "deg")
x*sin(((2.0*pi)*90.0)/360.0)_m

Also, I defined this in my source file:

test :: forall a. (Num a) => a
test = 2 * 5 + 3

Now, it can be used:

NumTest> test
13
NumTest> rpnShow test
"2 5 * 3 +"
NumTest> prettyShow test
"(2*5)+3"
NumTest> test + 5
18
NumTest> prettyShow (test + 5)
"((2*5)+3)+5"
NumTest> rpnShow $ test + 5
"2 5 * 3 + 5 +"

You can grab the very early experimental code with darcs get http://darcs.complete.org/num.

Haskell has no built-in support for numeric types with units, arbitrary symbols carried through computations, etc. But it was trivial to add it. This kind of extensibility is a key part of why Haskell is so amazing.

Reiser4 Experiences

I’ve been a long-time user of JFS, but have grown unhappy with it for various reasons. So, I decided to try out XFS. It proved no better than JFS or ReiserFS 3 with data integrity during a crash.

Next step: Reiser4. I’ve been using Reiser4 for the past month or so on three different machines. I must say that I’m quite impressed with it. It is a stellar performer and it also recovers well from crashes. I mount all my filesystems with the nopseudo option, which essentially makes Reiser4 have standard Unix filesystem semantics in every way. I’m very pleased with it so far.

Thank you, darcs

Here’s a use case for Darcs.

All the blogs hosted here run Drupal. I have a whole slew of add-on modules, themese, and a few patches. It’s a pain to manage them all, so after moving to Drupal 4.6.0, I decided to store my Drupal tree in Darcs.

Drupal 4.6.1 just came out. I used darcs_load_dirs to load it into my upstream repository, then darcs pull to pull it into my main tree.

It worked perfectly, first time. Very, very nice.

Now maybe in this particular case, Arch could have done as well, but I sure was impressed at how easy darcs made it all.