Monthly Archives: December 2006

SamePlace Suite 0.5.0rc1 available

The first release candidate of the SamePlace Suite, version 0.5.0, is available.

If you are running Firefox 2.0, grab the all-in-one package:

If you are running Firefox 1.5 or Flock, please install the individual packages:

Changes on this version focus primarily on usability and stability. Please try it and send us any feedback you have!

From the Help-Wanted department

We are looking for testers, especially on Mac and Windows platforms (see http://dev.hyperstruct.net/xmpp4moz/wiki/DocUsingTestingBranch for how to track the testing packages), and for HTML/CSS/graphic artists, to provide a user-oriented site along with the current developer-oriented one. Drop us a mail if you or anyone you know would like to help!

What’s new in this version for users

  • SamePlace: Support for XHTML-IM. Images and styled text can also be dragged from web pages into conversation.
  • SamePlace: Added wizard to configure an account on first run.
  • SamePlace: Flashing taskbar on incoming messages.
  • JabBar: Added “Send link to…” menu to quickly send the URL of the current page to a contact.
  • JabBar: Added the “boss key” to toggle the toolbar quickly (Shift+F12).
  • xmpp4moz: Better support for UTF-8.
  • Hybrid web/IM applications: A preview of Tratto, a collaborative SVG editor, is online: http://apps.sameplace.cc/unstable/tratto/tratto.xul

What’s new in this version for developers

  • SamePlace: Split the chat application into several reusable modules.
  • SamePlace: Refactored contact list into reusable component.
  • xmpp4moz: Abstracted TCP socket transport to pave the way for other kinds of transport (e.g. HTTP).
  • xmpp4moz: Channels report events about the status of underlying transport.
  • xmpp4moz: Added component for data forms (XEP-0004).

You know you’ve been courting functional programming too long…

…when even your JavaScript code starts looking like this:


function applyTextProcessors(xmlFragment, textProcessors) {
    return textProcessors.length == 0 ?
        xmlFragment :
        applyTextProcessors(
            xml.mapTextNodes(
                xmlFragment, function(textNode) {
                    return text.mapMatch(textNode.toString(),
                                         textProcessors[0].regexp,
                                         textProcessors[0].action);
                }),
            textProcessors.slice(1));
}