|Think about Loose Coupling|
So you've been through all the PM chat clients, and you don't like Java, or you don't want to use a browser, or you can't install a CGI application on your machine. Twitching Monks Software is proud to announce Robomonk, a perlmonks.org to IRC bridging system. It slices, it dices, it Julie-Anns... Mmmm... Julie-Ann...
OK, enough with all the fanfare, what the heck can it do?
Well, for only $19.95 a month... But seriously, folks. Robomonk connects the chatterbox to an IRC channel. From within the IRC channel, as chatterbox messages post, they display in the IRC window. Advantage? Multiple people connecting to that IRC channel reduce the PM server load, since a single fetch serves everyone. You can also kibitz about what other people say in the chatterbox behind their backs, providing hours of entertainment.
That's all it does? You must be kidding...
Heck no! You can also post messages into the chatterbox, manage your private messages, be notified of XP and reputation changes, notified when new nodes or users appear, see what users are in the 'Other Users' box, be alerted when a user in your user watch list starts accessing the monastery, check the home node info of a user, and several other functions.
With optional modules installed, there is a full function RPN integer calculator, notification of new SlashDot headline, notification when new mail appears in your mailbox (*nix only, requires client), check the weather on my boat, or anything else you want to write a module to do. The possibilities are limited only by your coding abilities.
Geez, how's it do all that?
Software, son, software, I say! </Foghorn Leghorn> Actually, Net::IRC, and a helluva lot of Perl code. I started this over a year ago, and got enough working so that I lost interest. Every so often, I would poke at it, and add a little something. About 2 months ago, I went on a coding spree, and added a lot of additional (and questionably useful) functionality, put it all in CVS, started regular change logs, and was getting it ready to release, er, unleash on helpless netizens.
Can I see it work?
Sure! Point your IRC client at irc.slashnet.org, and join the #robomonkdemo channel. Assuming that nothing has gone horribly, horribly wrong, you should see the current chatterbox content as new messages come in. You won't be able to post to the chatterbox until you log in, however. To do that, you open a /query window to 'RoboMonkDemo', and 'login <pm_username> <pm_password>'. Commands in the #robomonkdemo channel require prefixing them with the 'bots name, i.e. 'robomonkdemo ?'. In the /query window the prefix is optional. There is a (mostly accurate) help page here. The current change log is here.
Eeek! Login? Is my password safe?
I'll run anything! What's it take to do that?
Basically, any network connected box. Robomonk acts as a IRC client. It periodically retrieves various XML pages from http://perlmonks.org, makes some decisions, and sends data as a /msg to where ever is appropriate. There's nothing particularly rocket-sciency about it. Having a reliable network connection is the major reprequisite, especially if you have other users you want to share with.
I wanna add XYZ functionality. I assume I can do that?
Sure. I've tried to write the core code with hook points. Folks can add code as modules, that register themselves with various hook points. For example, if a new chatterbox message comes in, and you have a handler registered with that hook point, you can scan the text for your name, and send a pager message to yourself that someone may be talking about you. The basic idea is that functionality that other operators may not want can be added or deleted without affecting the core code. It also allows me to make changes without (generally) worrying if the impact will affect the existing modules.
I wanna look at the code!
Cool! The latest release will be located at http://www.tinymicros.com/robomonk/robomonk.tar.gz. I may even figure out how to make it available under anonymous CVS access one day.
I looked at your code, I nearly barfed.
Hey, no one is making you run this. Yea, it's not OO. There's plenty of code that could be reduced to common subroutines. Knock yourself out! This program was never 'designed', per se. It evolved from a need of getting annoyed between hanging out in IRC and switching to a browser periodically to see if there were new chatterbox messages. Being of bored mind and a caffeine laden body, I decided to solve it my way. As I thought of things, I added them. The biggest problem with subs when designing like that is you change something here to support this function, you break it for everything else. I figure I can always go back later if it really matters. As it is, I can make changes very quickly and test ideas without breaking code that's tried and true.
You wrote all this crap youself?
Well, ar0n wrote 2 lines, I think. Actually, he did a lot more. He wrote the code to use a XML based configuration file, and added the user filters. His code was little prettier, but I re-munged it to match the rest of the code style. Although it's a well known fact that everything is ar0ns fault, this really isn't. Don't hurt him.
Gah! Your documentation sucks!
Hrmph. Does it do anything else that might be mis-construed as 'neat'?
I think so! One of the modules allows me to check the weather on the boat without actually leaning over and looking at the weather station. Another modules checks for the donations to kudras WDF. Another module let's me know that mail has arrived. And a module that I'm working on (if "real work" would quit interfering) is a cron-based reminder system, that will post reminders into the /query window. Mostly so Masem won't have to remind me that Samurai Jack is on in 10 minutes.
Surely this code has problems...
It's not perfect, but most of what it's lacking is features I would like to add. The README and TODO files contain some notes about things I would like to do, and problems that I'm aware of. As of this moment, one instance of Robomonk has been running for 10 days, 4 hours, 23 minutes and 17 seconds. Even when SlashNet charfs a hairball and chanserv goes nuts punting people, it reconnects. No, it's not perfect, and there are a few known cases where Bad Things(tm) happen, but hey, that's what /etc/inittab is for, right?
Is there anything else I should know?
Never stick your finger into an electrical outlet. Avoid staring at the sun. Never peruse the alt.hamster.hamster.hamster.ducttape newsgroup. Oh! You mean about Robomonk. Well, probably. And as I think of them, I'll put them in the files in the tarball. But basically I've mentioned everything I consider of interest.
You're nothing but a shameless XP whore, and I bet that's only reason you wrote this!
And your point would be exactly what?