So it’s been a long time since I worked on Collaborate (second semester of freshman year, making it three years ago). However in all that time, nobody has come up with a compelling solution for real time text editing.
Therefore earlier this past semester I got bored on an airplane flight and decided to the start over again from scratch and build test cases as I went. I was going to write it the right way this time and I was going to finish. Well that flight of hacking was over far too soon to finish but I did have most of the core algorithm written and test cases to exercise it. The weekend after that I began investigating the plugin architecture of gedit and found exactly what I was looking for. I could leverage the polish of gedit and simply add the networking features I was looking for without reinventing the wheel.
So I began to hack on the plugin integration only to find out that I couldn’t really integrate the networking communications inside the plugin as it would take too much time away from the gtk mainloop. Therefore I needed to separate the communications layer into a separate process. So I began writing my own jabber daemon. Around this time I saw on Planet Gnome that a project called Telepathy was getting underway and it provided a system wide jabber connection through D-Bus. Sweet, exactly what I was looking for again. Unfortunately I was so busy with finishing stuff up at the end of school that I wasn’t able to take advantage of it.
So I had been itching to work on this from sometime in mid April but never found the time to get around to it. Finally about two days ago I finished up my ridiculously long list of tasks and had free time again. So I took the plunge and redid the networking code to utilize Telepathy. I also slapped to together a quick project page and published a darcs respository.
So in conclusion, Collaborate lives again. It’s still very rough around the edges but it actually works. None of the complex merging algorithm has been employed yet as I wanted to focus on getting the interaction and integration right before proceeding with the complex technical parts.
Bonus Sidestory: So I was at the Bank of America ATM two days ago to make a deposit. Normally I put it in an envelope first but when I reached for one I got a piece of paper that says that the ATM doesn’t need envelopes anymore. OK. So I enter my information and get to the deposit screen and the ATM immediately asks for my checks. I stop, wait and wonder why it hasn’t asked for the amount I am depositing. Oh great a broken ATM machine. Well with nothing better to do, I put my check into the machine (probably not the wisest idea). However what happens next totally stuns me. There is a picture of the check on the screen and it asks me to verify that the amount that it read off the check is correct. Amazingly enough it was. It then hits me that the ATM just read the hand written number off of my check. AWESOME. For all my hate of Diebold this is an actual true innovation. It’s a truly cool, useful application of image recognition technology and the interaction flow even makes sense once you know that ATMs can read checks. I have never had a more satisfying ATM experience.
Now off to Europe for 3 weeks.