Sunday, November 23, 2008


Sorry friends, I can't afford to run the service anymore and I don't have time to maintain it.

If you would like to host the service and take full charge of it, please let me know. The traffic these days is pretty light.

Tuesday, August 26, 2008

Ehanced freedom through GitHub

I finally feel like Git is available enough to move the main Soashable repo to it. GitHub provides excellent service and has become very easy for n00bs to use--hell, I figured it out :)

I don't feel like spewing off all the Git rhetoric, but it surely does make the healthy action of forking a million times more accessible and I hope to see Soashable and xmpp4js get contributions through forks.

Here are the links:

Best wishes,


Wednesday, August 20, 2008

Scaling Back

I will be scaling back the network for Soashable to one small VPS. Development has basically halted as I've achieved most of what I wanted to accomplish with the service, and I only expect it to slow more during the new school year.

As an alternative, you may set up your own installation or use an alternative messenger such as meebo.

Monday, August 4, 2008


Okay, I fixed an apparently log standing, killer bug that was present in IE6 and some new ones that popped up in all IE versions recently. Please do not hesitate to report these things. While I know I should have a quality assurance process in place, this is an Open Source project and I struggle to stay on top of everything as it is; after all, contribution is what Open Source is about.

I know many of you are not technical and have no idea what Open Source is or means; it means that anyone can contribute, be it through code or bug reports. In Soashable's case, it also means that there is no money funding the project what-so-ever. I pay for the hosting with my own money and do all the work in my spare time without being paid.

All I ask is that you help me out when things are broken. I've added a live support button that you can use to reach me at any time.

Monday, July 21, 2008

Contributor Wishlist

Being that Soashable is an Open Source project, there is limited money and manpower to make things happen. If I had contributors to Soashable, I would wish for:

A Logo
Probably the most hated part of Soashable is the logo. I'm not one for graphic or UI design, and am not capable of doing anything myself to improve the situation.

Tutorials and High Level Documentation
I've not done a lot to communicate what Soashable actually is because I've been busy trying to make a solid piece of software. I'm trying to put emphasis there now.

Facebook Chat-like Interface
I've been calling on people I know to implement this since Facebook Chat was announced and sneek-previewed on YouTube. Meebo now has a spitting image of what I hoped to deliver with Soashable.

It would be nice to not have to pay for Soashable's infrastructure and maintain it myself. I'd rather just code and try out new ideas.

Xmmp4Js with Chaining API
This is a fun research item, but this weekend I had the idea of meshing jQuery-like function chaining with an API for XMPP. The result would look something like this:
$xmpp.connect("").login({node: "harlan", password: "zzzzz", method: "sasl-md5"});
$xmpp.createMessage({to: "".asJid(), body: "Sup player"}).addExtension({xtype:"xhtml",body: "Sup <b>player</b>"}).send();
$xmpp.createMessage({to: "".asJid()}).addExtension({xtype:"buddystates",state: "typing"}).send();
I'd love to make this wrap and maybe replace the existing inheritance based API. Read this article.

Thursday, July 17, 2008

New SSL Certificate

I got a signed SSL certificate from the Jabber Foundation / XMPP Federation. It works in most browsers except Opera, IE, and Safari on Windows for the time being. Apparently there are political issues surrounding getting the CA cert into the Windows trust store, but it should be supported in the near future. Here is an official but partial list of supported browsers; one not on the list is Safari for Windows.

For those who are affected by this, here is how to add the root CA to your trust store and make secure connections work: PDF.

Big thanks to the Jabber Foundation for the the help!

Tuesday, July 15, 2008


Just a shout out to Userplane; they have been getting a lot of good press lately. I finally took the time to check out their site in depth. They are offering some nice products similar to the direction I am working toward with Soashable. Their offerings are closed source, which is of course their right. Soashable will always be Open Source and I imagine playing catch-up with offerings from other companies unless more people get involved with the project.

Here are a few of their interesting products (headers are links):

Web Chat

This is a simple, free embedded chat room similar to the old idea of tagboards. In some ways it is also like a light version of the MeeboMe widget.

Web Messenger

This is the product that has been getting the great reviews lately. It is similar to the MeeboMe widget crossed with Facebook chat. It is free with ad support, and reasonably priced otherwise.


This is an interesting idea and actually one of the next ideas I was going to suggest with the recently added support for x-domain connections to Xmpp4Js. There is no free version of this product.

Sunday, July 13, 2008

Robot Olympics: Anti-Spim Device for Soashable

Soashable has been attacked by spimmers (IM spammers) twice now. The first time I was short on time, and a quick fix was to close down regular XMPP ports. Now that Soashable is essentially my full time unjob, I have some time to tinker.

I implemented a bare bones anti-spim device. It is loosely based on XEP-0158. Each time you start a new conversation with somebody you must complete a text-based challenge provided by

I plan to fully support legacy and non-legacy qa and possibly hashcash mechanisms. I will thus improve the GUI around completing challenges, so it is its own dialog or panel in the IM window. It would be possible to implement image captcha (ocr), but it doesn't seem worth while right now. I will also take ideas from XEP-0159 to more intelligently run tests (eg. no tests if you are in the remote person's roster, etc).

Source code for the Openfire plugin is available in SVN here (browse), and I will wrap it up for a stand alone release at some point.

Monday, July 7, 2008

Removed ExtJS Dependency

Due to licensing issues, I have been meaning to get away from using ExtJS for a while. The GPL which ExtJS is licensed under is not compatible with LGPL and Apache, which Xmpp4Js is licensed under. I finally managed it today, as of revision 734. Much of the code was pulled from YUI, which is under the BSD license.

Something that I plan to do sometime is create a changeable adapter layer for Xmpp4Js.

The Soashable application will continue using ExtJS for the foreseeable future, being that it is itself licensed under the GPL.

Saturday, July 5, 2008

Cross-Domain Xmpp4Js

I started implementing cross-domain functionality for xmpp4js. This will remove the requirement of running your own BOSH Servlet/proxy on the same domain as a Soashable installation. Instead, clients can now connect directly to the BOSH implementation of Openfire or ejabberd with no special proxy or Servlet.

This is accomplished by implementing the Alternative Script Syntax section of XEP-0124, which I did not know existed before =). The changes are in trunk, but in the spirit of Agile they are implemented in a way that works but is not elegant; I'll be working on that soon. It works in all major browers (though it limps in Opera for some reason).

There is an online demo here.

The biggest problem I've had is with "invalid" or "self-signed" SSL certificate warnings, which do not pop-up a warning in Safari or FF3 like they do in FF2. I am working on getting a real certificate.

Another interesting problem I faced was connections closing when I expanded the DOM element for the inserted <script> tag in Firebug's Inspector view. It seems that this prematurely closed the HTTP polling connection and interrupted the entire session.

It's become apparent that I need to work on protocol error handling.

Saturday, May 17, 2008

Continuous Integration

I put up a Continuous Integration server:

There are currently some shortcomings, biggest thing being that JsUnit tests have to be disabled. Does anyone have experience setting that up headless?

New Feature: Outside Port Opening via UPnp

I was out of town this week and I was thinking it would be nice to have the ability to very easily open outside ports for people who don't know that NAT is not some kind of bug. Mostly I just wanted to play with Universal Plug-n-Play (UPnp), since I knew nothing about it.

I found a UPnp library for Java called, surprise, upnplib, and integrated it into a Servlet Context Listener. It takes 2 options in the web.xml file, upnp.enabled and upnp.port. The port should be auto discovered, but currently is not. One thing at a time. In the mean time, set it to 8080 or 8084 if you're using NetBeans, and the port will be open to the public when the application starts and closed when it exits.

Friday, May 16, 2008

MinneBar, ExtJs

It's been a busy week, but there were some interesting developments:

I gave what amounted to a QA session about XMPP and COMET technologies at MinneBar last Saturday. A fellow I know named Chris Barber pointed out a fundamental flaw in Soashable's design (zomg); and that is that the browser limit of 2 connections to a given host is effective across multiple tabs.

The issue can be addressed within BOSH by ghetto rigging some inter-frame communication and using BOSH's ability to open multiple streams from within one connection. But do I want to do that? Hell no.

Another way it could possibly be addressed is by using a random subdomain for each Soashable client. That is, redirects or has an iframe to www[random]

Another recent development is clarification on people's warnings to not use EXTjs, here. It's time to port away from it and toward Dojo. That will provide a very tedious task, but will allow me to go back and architect (not re... that would imply it was done the first time ;) Soashable in a nice way, now that I understand the problem space better.

An alternative would be to use a RIA technology. Oh, my!

Tuesday, May 6, 2008

Added new message notifications

I added new message notifications. It will "flash" the title bar with the number of new messages, and reset when you've sent a message.

Monday, May 5, 2008

Removed debug output from chat

I made a bit of time to remove the annoying debug output in chat windows (the biggest complaint I've heard by far), and upgraded the server software to boot.

I am listening! But with only one busy developer doing this as a side project it's hard to keep up.

Thanks for your patience! I promise it will pay off very soon :)

Thursday, May 1, 2008

More Server

We just trippled Soashable's server capacity, so hopefully things speed up a bit.


Friday, March 21, 2008


Thanks to everyone for all the positive feedback over the past few days. I'm happy to see that Soashable articles have been translated to at least 5 different languages, and many of the comments contain smiley faces and exclamation points :)

I'm extremely busy with non-Soashable related work right now and am not able to do much with it, but a good friend of mine, Matt, has stepped up to the plate and is helping with the scalability issue and giving some good nuggets for developer documentation. Soashable totally wasn't ready for this kind of exposure yet, but it rocks to get it, thanks.

I've received a lot of e-mail from a lot of people, and I'm doing my best to respond to it all in a timely fashion. No details yet, but it sounds like some interesting uses of Soashable, and possibly partnerships, could come about. I'm always happy to start a dialog with anyone, so feel free to say hello.

Monday, February 18, 2008


I cranked out some buddylist code that works as expected and wrapped some tests around it all. It's live on

The next priority as far as development effort goes, is IE compatibility. Then Soashable will be ready for a limited beta and some exposure :)

Saturday, February 16, 2008

Weekend Skipped

I don't think I'll have time to make progress this weekend :(

Over the course of the week, I've put a good amount of thought into how to restructure the roster code; that will definitely be the next step, whenever I have time.


Sunday, February 10, 2008

Always One Step Away

It feels like this project is always one step away from the magical Beta. It's not quite there yet, but I removed the Extreme Alpha warning, anyway. I didn't get to everything I wanted to do this weekend, but I did manage to get some documentation together, set up an SSL certificate, get popout functionality semi-working, and fix an issue where idle connections die after a certain amount of time. All of this is live on

I think the next high priority item is to get the roster up to snuff: show presence and status message, and separate offline buddies. And of course, continued work on documentation.

Work might slow down in the coming weeks, because I got a second job and I need to search for an apartment.


Saturday, February 9, 2008


I started putting together some developer documentation, as well as general info on the project:

Friday, February 8, 2008

Weekend Objectives

Now that school is started, I have to keep my weekend ambition small. Here are a few things I plan to do for Soashable this weekend:

  1. Create an informational page, including a "Getting Started Guide"
  2. Polish UI functionality around Buddylist and IMs
  3. Set up SSL
  4. Add chat state notifications (typing, signed off/on, went idle)
  5. Possibly rewrite or tweak RosterItemManager and PresenceManager code

Friday, February 1, 2008

Soashable Blog

Blogging is cool.

Sometimes I write long blogs.

Sometimes I write tall blogs, too!