send IM to AaarmBot
add AlarmBot to buddy list

DESCRIPTION:  I created an AIM bot with which I could set alarms (naturally, its screen name is AlarmBot).  For example, when I come in from putting my laundry in the washer, I send an IM command to AlarmBot:  "set 20".  After 20 minutes, I receive an IM from AlarmBot reminding me to move my clothes into the dryer.  Click on the thumbnail below for a screenshot.  Use the AIM Remote on the right to IM AlarmBot or add it to your buddy list.

CODE:  I coded AlarmBot in Python, using Jamie Turner's Py-TOC module to connect to the AIM servers.  Here's the source, with a caveat:  I have this working on a Solaris box with Python 2.1.1 and on a Linux box with Python 2.2.1, and have done no testing on any other configurations.  Email me (email address below) if you need setting up your own personal AlarmBot, but I can't guarantee anything.

FEATURES:  I tried to make AlarmBot as robust as possible.  I used locks to immunize AlarmBot to synchronization issues, even digging out my OS textbook to review how to avoid deadlocks.  I also added a simple defense mechanism:  if you warn AlarmBot, it'll warn you back, and then block you permanently.  AlarmBot also writes output to a log so I can check up on it without having to log into OCF.

UPDATE (2003-06-14):  The last fix I tried (see 2003-06-03 update) didn't work because it assumed that the AlarmBot process had been killed, whereas in fact, the AlarmBot process was sometimes still running even though AlarmBot had been logged off.  This has been fixed.  I've also implemented a recovery mechanism so that if AlarmBot goes down, it'll remember previously set alarms when it comes back up.

UPDATE (2003-06-03):  I set up a cron job at WebCron.org (there is an English version) that runs a script every hour that reruns AlarmBot if it has crashed.  So you should be seeing AlarmBot up most of the time.  Of course, if WebCron dies or the server on which Alarmbot is run dies, there's nothing my system can do.  Also, please note that when AlarmBot goes down, all alarms that were set go down with it.