Friday, April 30, 2010

How Kittyfetch Was Named

In our regular team meeting on Friday April 30, we began discussing the etymology of "kittyfetch", one of our device backup tools. The tool's earlier incarnation was called RANCID (in our wiki it's almost always CAPITALIZED) but we weren't clear how kittyfetch became "kittyfetch."


I searched through my chat logs and found that the name dated from November 1, 2007. The transcript follows (emoticons removed):


vaughan: What do we call the new rancid thingy?

jtate: anything but rancid, please

hsherman: squirrel.

or maybe magpie

nick?

wells: ooo, squirrel is a great name!

hsherman: "animals who hoard"

vaughan: What are those birds that plunder campsites Clarence wonders?

Anyone?

benroy: camp robbers?

pack rats

hsherman: raccoons, except for the not being birds thing

jtate: type squirrel ten times in a row and then tell me it's a great name

vultures

amcharg: i would not like it if raccoons could fly

jtate: they do: pigeons

hsherman: it never needs typing

amcharg: true and i dislike pigeons

hsherman: just a cute picture.

this will actually have the side effect of limiting requests for enhancements to the system.

wells: squirrelsquirrelsquirrelsquirrelsquirrelsquirrelsquirrelsquirrelsquirrelsquirrel

are you kinding? It just *rolls* off the finger tips

nickchen

why do we need a new name?

config-backup is good for me

or coba

cobac

jtate: copacobana

vaughan: squirrels

yeah, that does type nice.

gincoba biloba

ok, config-backup it is.

wells: LOL

nickchen: maybe something like, a cat or something

kitty

kitty go get my backup

jtate: puma, meerkat, i see a trend

cat's don't follow commands well

cats

nickchen: kitty failed to backup

hsherman: meerkats aren't cats.

nickchen: http://upload.wikimedia.org/wikipedia/commons/3/3f/Toilet_Trained_Cat_22_Aug_2005.jpg

hsherman: maybe we could continue the non-cat cat theme with "catfish".

vaughan: LOL re: "kitty go get my backup"

[ vaughan is still laughing in his office box. ]

benroy: I think Mr. Bo Jangles is a cat.

wells: $ hai kitty does gets backup star-k12

- kitty can haz backup star-k12

- oh noez, kitty does haz not backup star-k12, sez: "port connection failed"

- kthnxbye

nickchen: lol

amcharg: lulz

nickchen: i shall change all the log messages to lolcats

wells: we should totally make the "hai kitty" command ...

amcharg: s/backup/cheezburger/

wells: haha


And so the transcript ends. Somehow, and the history books are unclear, from that day forward the tool was known as kittyfetch.


To an outsider, the above may not be funny. For us, it's hilarious--and here's why. At a basic level, you need to know about lolcats. Lolcats are an internet meme that may never die. They and their idiolect sneak into our team's everyday communication. How lolcats speak is, well, funny. Very funny. The fact lolcat-speak (translators exist) enters our work at all is evidence of our team's cohesion: we have in-jokes. To put it a basic way, lolcats aside: we laugh together.


Laughing together and working together can seem to some like two mutually exclusive things, but they're not. Chris Roberts and Wan Yan at the University of Missouri-Columbia found that, "humor among colleagues ... enhances creativity, department cohesiveness and overall performance." Laughter, or humor, in the workplace is a good thing. Our team collaborates well and humor emerges from that collaboration and energizes it.


Yet, it's become an adage: you can't make fun mandatory. And our fun isn't. So, how did our team come together in such a way that we find kittyfetch a hilarious name? No one knows for sure. But we're glad it happened.


For more, you can read Roberts and Yan's study: http://www.sciencedaily.com/releases/2007/10/071031130917.htm

Monday, April 19, 2010

Avaya PBX admin web service

At the UW we've been heavily invested in Avaya telecommunications products for nearly two decades. In particular, we've been invested in the DEFINITY platform, now called Communications Manager (CM). We started using CM when it was owned by AT&T. It was later acquired by Lucent and then separated to become Avaya.

CM is the cadillac of enterprise phone systems (PBX) with almost every feature imaginable. Like many enterprise vendors, they provide GUI applications written for Windows and they work fine--if they have the features that you want to use. Once you want to start integrating with other enterprise systems and automating tasks, you run into situations where the provided tools hinder work more than they help.

The primary interface to these PBX systems is with a terminal. Originally it was a serial terminal but now telnet and ssh are available. When you log in you select a "terminal type." Most people use the screen-based VT220 interface where you type commands and use tab and return to move around the screen to make changes. It's not fun to use those screens for scripting, but there's another undocumented terminal type called "OSSI" that's designed for scripting and is used by Avaya's own GUI tools.

In this post I'll describe the web service system I've built around the OSSI terminal connection. The end result is contained within a Perl module that comprises the heart of this system.

The system breaks down into three parts:
1. DEFINITY_ossi.pm
2. A separate PBXD server instance for each PBX.
3. A single web CGI interface that passes XML requests between the client applications and the correct PBXD instance.

DEFINITY_ossi.pm is the Perl module that knows how to connect to all of our PBX systems, process commands, and return data either formatted like the output of the VT220 screen or as a set of OSSI fields.

PBXD is a server based on the Net::Server::PreFork CPAN module that manages a pool of connections to a single PBX and provides an XML interface to DEFINITY_ossi.pm. There is 1 instance of PBXD running for each of our 3 PBX systems. Each PBXD instance has its own config file.

Finally the web interface is a Perl CGI script that knows about each PBXD instance and proxies the XML requests from clients to the specific PBXD instance for each PBX.

Here's a visual description of the system


Once it's setup and deployed you have a scalable platform for rapid development of web applications to manage all of your PBX systems. We've moved both batch and interactive application to the new system and it's been working well. I hope you've found this post interesting and that it will give you some ideas and code that can help manage you own PBX systems.