Bruce's Blog Just another in the neverending world of blogs

23Dec/091

Sending messages to Growl on a remote Mac (for Irssi integration)

Growl, IRC, and Irssi

Growl, for those who don't know, is a handy utility for Mac OS-X that lets applications unobtrusively display notifications on the screen.  Many applications have buil-in support for popping messages up via Growl.  One handy use is when an IRC or IM application receives a message for you but the application is minimized.  You wouldn't see the message if the app is minimized, but with Growl the application can pop up a message on the screen.

Irssi is a highly customizable IRC client - it calls itself "the client of the future".  One of the many features of Irssi is that you can customize it with perl scripts, and you can find literally hundreds of perl scripts for Irssi with very little effort.

As a professional systems administrator I need to have remote access to the systems I manage, as well as the ability to communicate with my fellow admins.  We run an IRC server that lets us chat with each other whether in the office or remotely.  I could run an IRC client on my Mac at work but the problem with that is accessing it remotely.  Interacting with the desktop remotely is painfully slow, and a text-based IRC client like Irssi in conjunction with a utility like screen lets me keep my client logged into IRC and allows me to access it from virtually anywhere at any time.  Most of us also opt to run our IRC clients on a shell server rather than our own desktop systems since the servers are more easily accessible, and less likely to go down due to hardware problems, power failures, etc.

So on my Mac at work I run Irssi in a screen session on a linux server.  The problem is that I can miss important messages if I don't keep an eye on the Irssi session, and as any sysadmin will tell you it's very easy to get distracted.

I have found a few solutions that hook a remote Irssi session into Growl on your Mac desktop, but none of them had quite the features that I wanted.  So I ended up writing my own, in part to learn a little about Growl & Irssi, and in part to give me those features I desired.  Everything I've written can be downloaded from the link below, and it's all covered by the GPL so feel free to use and modify it as long as you adhere to the GPL.

Features

There were three primary features I was interested in.  The first was that the client and server communicate via TCP so that I could use port forwarding in SSH to ensure a secure connection between Irssi and Growl.  The second was that if I didn't want to rely on an SSH tunnel that the datastream could be optionally encrypted to ensure a secure connection.   Encryption is performed using  Blowfish, and to enable it you just specify an encryption key in the configuration file. If you don't want to use encryption just comment out the encryption key.

The third feature is that the Irssi integration allow me to specify arbitrary text that would trigger Growl popups.  I want Growl to notify me if somebody mentions certain key words or phrases in IRC.  My Growl module allows you to easily add and remove arbitrary strings that will trigger Growl popups so that I can add and change them as desired.

Another feature not related to Irssi that I decided would be handy was to extend it so that I could easily add it to any other environments where I might want remote Growl messages.  To that extent I wrote a command line utility that also lets you send Growl messages, and it supports the same features as the Irssi module.

The scripts should be extremely easy for anybody with minimal perl experience to install.  They do require a number of perl modules, such as the Mac::Growl module that interfaces with Growl, as well as Crypt::CBCeasy for Blowfish encryption and a few others.  See the README file for a complete list of all the modules.

Usage

The README file has complete instructions, but in a nutshell:

  1. Install the appropriate perl modules on both the client and the server
  2. Create the file ~/.growl-server on your Mac with the desired options (see the comments in the included sample)
  3. Run growl-server.pl on your Mac
  4. Place growl.pl in your ~/.irssi/scripts directory on the system where you run Irssi
  5. Edit growl.pl and modify any of the documented options to match those in ~/.growl-server
  6. Load the growl script into Irssi

Optionally, or if you just want to use the command line utility to send Growl messages:

  1. Create the file ~/.send-growl on the system that will be sending Growl messages
  2. Copy send-growl.pl to the system
  3. Run send-growl.pl (use -? or --help to see command line options)

Download remote-growl-0.01.tar.gz here.

1Oct/090

NavRules 3.0

NavRules has been my pet project since around 1990.  It's shareware for learning the navigation rules all boaters need to know.  (I grew up around boats and was in the US Coast Guard Auxiliary for 10 years)  After a long hiatus I finally released version 3.0 of the program, and as before a free version is available to members of the US Coast Guard and similar organizations around the world.

9Jan/040

A Dynamically Colored Map

This is a very simple program that I wrote that lets you dynamically modify the colors of images. I wrote it mainly for fun to provide a neat mapping feature to the website Where's George? that lets users track where dollar bills travel around the US and other countries. Since I've heard from a number of people asking for details as to how I did this I decided to make the code available for free under the GNU GPL, so here it is...

What this code lets you do is create a map of the US like the one below in which the color of each state can be changed dynamically. If you look at the source of this HTML page you'll see that this isn't just a static JPEG but instead is made by a call to a CGI script that defines the colors for each state (with gray being the default):

The URL for the above image is :

http://bruce.pennypacker.org/cgi-bin/map.pl?CA=1&NY=2&FL=3&TX=4&NE=5&ND=6&IN=1&WA=2&VA=3&SC=4&AK=5

Feel free to cut & paste the URL into your browser and change the values. You can set any state using the abbreviations in the map to any value between 1 and 6. The program lets you set colors to any RGB value but for simplicity and security the CGI script only defines six colors.

Source code for the program can be downloaded here.