Outdated

This article was written a long time ago!
Be aware that parts, or all of it may be outdated!

Sparkplug Day

Feb 7, 2006
by Matt Tucker

Once per quarter, the Jive Software engineering team spends a full day on a special project. A few weeks ago, we held Sparkplug Day to build out plugins for our Spark instant messaging client. The goals for Sparkplug Day were to:

  • Provide feedback on the Sparkplug API before it's launched with Spark 1.1.
  • Build sample plugins for end users and other developers.
  • Have some fun.

What Are Sparkplugs?

Sparkplugs dynamically extend the functionality of the Spark instant messaging client. They can be used to expose a search repository, tie into an organization's inventory system, provide queuing and routing functionality for chats (such as our Live Assistant product), or even to let people play games against each other. By itself, IM is a powerful communication medium; but it can become a much more powerful tool when it's tailored to specific business purposes.

Sparkplugs are easy enough for virtually any organization with Java experience to create.

Start of the Day

We gathered at 8:30 AM with bagels to brainstorm plugin ideas and plan out the day (Bruce and Gato attending by phone). The rules for Sparkplug day were fairly simple:

  • The development sprint ends at 5:00 PM sharp (beers following), so each plugin has to be limited in scope.
  • Development teams of one to two on each plugin, with Derek (the lead Spark engineer) assisting everyone as needed.
  • Plugins that demonstrate or test the API extensively especially encouraged.

After the planning session, each person/team was ready to begin coding.

The Output

By the end of the day, we assembled a ton of feedback on the Sparkplug API and a pretty cool assortment of plugins. Some of the most interesting ones are detailed below (click on the thumbnails of each plugin for a full image):

Transfer Guard

Transfer Guard

Pete worked on Transfer Guard, a plugin which provides security control for file transfers. It lets users choose which file extensions they'd like to accept, automatically blocks file transfer requests from certain senders, and has a configurable max file size.

The plugin uses the preferences API to make the plugin configurable. It uses the file transfer API to intercept requests based on those configuration settings.

Reversi

Reversi

Reversi (also known as Othello) is a two-player game where each player tries to capture as many stones as possible by flipping the other player's stones. See the Wikipedia entry for a complete explanation.

Bill and I worked on this plugin, which allows a user to invite a buddy to start a game. Once the opponent accepts, the game board appears and players take turns making moves. The game ends when no more moves are possible. The plugin has extensive custom graphics and uses many parts of the chat room API.

Mac Integration

Mac Integration

Earlier versions of Spark had good support for the Mac, but AJ's work on the "internal plugin" for Mac integration make Spark feel even more like a native application. One area of integration is the Spark dock icon, which bounces when it needs to alert the user (much as iChat does). A new feature is an icon in the status item area, which allows quick access to changing your presence or starting chats with other online users.

Translator

Translator

Nick's translator plugin is a fun demo of dynamically customizing chat messages. It allows the user to select a language to translate the messages they're sending into. For example, the user can type a message in English but have it sent as Spanish. The plugin is implemented by calling the Google translation web service. It's not meant to be a full translation feature, but could evolve into that over time.

Wrapping Up

The API and sample plugins will be released with Spark 1.1. Overall we were very happy with Sparkplug Day's output and can't wait to see what the Spark developer community does with the API!