Adium

Archive for March, 2007

Wow

Friday, March 9th, 2007

I have to say, I was not expecting the kind of response we got to Chris’s request for help.

Thank you all for your enthusiasm and offers of help 🙂

We’ve attempted to respond to each email and IM we’ve received, but if we missed seeing your offer, here’s some information to help people get started contributing code.

Getting the code
Check out http://trac.adiumx.com/wiki/GettingAdiumSource for our documentation on getting the code and making sure your coding environment is set up and up to date

Finding things to work on
http://trac.adiumx.com/roadmap is a great place to start looking, but possibly even better is to look into issues that you’ve run into yourself; personal motivation is always a great way to stay interested.

Asking questions
I’ve put up a page on the wiki at http://trac.adiumx.com/wiki/DevelopmentTipsAndTricks with some tips and tricks (most of them useful to other cocoa coding as well, actually), and many of the developers hang out on irc and can answer questions. Colin and I (at least, possibly others) are willing to answer questions on IM as well.

We need help

Wednesday, March 7th, 2007

Hey folks,

So it’s been a long road to 1.0. We’re still recovering. Some things however have always been the same for the project. One of those is the following

We need help

We need help in a couple of forms which I will explain below. Basically we’re at a point where we are getting a lot of new users, so we need some additional resources in a couple of areas.

Help with users

For starters, let’s take a look at the “Needs Feedback” milestone on Trac. There are, at the moment of this writing, 242 open tickets in this milestone. It should be much lower. Our general policy is to leave a ticket open for 2 weeks once placed into this milestone, and then to close the ticket as “WorksForMe” until we get feedback on it.

In general we try to get back to users as soon as we can, but it’s hard to do on a project like Adium. Ticket triaging is down to myself and Eric. The first week that Eric started helping with tickets, he processed about a thousand untouched tickets, which is why he leads the TicketTaskForce. If you would like to help with the TicketTaskForce, please contact him.

Developers

We are in dire need of more developers. We have some really great developers already, but they can’t do it all alone. This is the reason we haven’t done things like Voice and Video, because we just don’t have enough hands to tackle something like that.

If you would like to help with development, please contact either David or myself

Summer of Code

Last, but not least. We’ve been invited to Summer of Code again. If you are interested in that, please see our summer of code page on trac.

Of message history, and the thing that powers it

Sunday, March 4th, 2007

Adium has a feature called “message history”. When you open a new chat with a person, message history shows you the last n messages from your previous chat with that person, to remind you of the discussion from last time. This feature underwent some major changes in Adium 1.0.


Storage

Before Adium 1.0, Adium wrote those last n messages to a plist file when the chat closed. The problem with that was that when Adium crashed, the plist file would not be written out. This meant that when the user reopened the chat, the user would often be alarmed to find that the chat he had just been in (when he crashed) was not reflected in the message history, and would then conclude that the log of that chat had been lost.

This was never the case—we’ve always updated the log as messages are received and sent, never deferring writing to the end of the chat. But the confusion is understandable.

In Adium 1.0, we did away with the separate plist storage; we now use the logs (now called transcripts) for message history. This prevents the “where’d my history go?” problem, and ends the redundancy of writing out messages once to the logs and again to the plist.

Format

Before Adium 1.0, Adium stored its logs in a faux-HTML format. It was sufficient for display, and moderately parseable, but it was not very extensible, and not a true log format unto itself. (This is the format that Chat Transcript Manager understands.)

In Adium 1.0, we switched to a new real transcript format, which we call Unified Logging Format, and which is based on XML.


The problem now was how to quickly retrieve the last n messages from an XML transcript for the purpose of displaying the message history.

We had two options:

  1. Solution A: Use an existing XML parser to read the entire transcript, ignoring all messages except the last n.

    This solution doesn’t scale. A large transcript would cause a noticeable delay in opening a chat. This would be especially bad for chats opened from the remote side, since the user would not expect the beachball that would appear while Adium loads all those messages, discarding most of them on its way to the last n.

  2. Solution B: Write a new parser that parses the XML data in reverse.

Solution B is what I did.

I named the new parser “LMX” because it parses XML backwards (get it?). This allows Adium to read the last n without reading any of the messages before them.