Trillian/ICQ/MSN Instant Messaging Log Merger by zAlbee

Project Status

June 17, 2010

This week, I took a vacation for the first time in 6 months, and coincidentally this will also be my first blog post about IMmerge in 6 months. During some downtime on the plane, I decided to whip out my laptop and figure out what is needed to get IMmerge finished. There’s nothing quite like breaking your daily routine to get you kickstarted on some new (or old) projects!

Interesting stats:

Last sync to IMmerge source code repository: Sun Mar 21 16:30:26 CST 2010
Last IMmerge-related blog post: January 11, 2010

So here is the current status. IMmerge 1.0 uses a new merge engine, so much of the code had to be rewritten; I am satisfied that all old features in 0.66 are working in the new 1.0 engine. Next, I will release a public beta of IMmerge 1.0, which will include the GUI, and Trillian LOG-XML interconversion, but no other new features. Before I release this, the following issues must be fixed:

  • TrLogReader: multiple blank lines are collapsed into one
  • TrLogReader: fails to parse message timestamp containing seconds

The following feature needs to be implemented:

  • TrLogReader: does not distinguish between incoming/outgoing messages yet

The first 2 issues can be fixed quickly, while the 3rd (feature) will take some time. Note that all the issues deal with TrLogReader parsing, which is only used when a session in Trillian .LOG needs to be converted into some other format (currently only XML possible)

Question: Would you rather wait until the incoming/outgoing feature is finished, or is it acceptable to skip it for the first beta?

Filed under: IMmerge v1 | No Tag
No Tag
June 17th, 2010 23:08:55

Solving Continuity Levels with Dijkstra’s Shortest Path

April 16, 2010

This post is probably off-topic for this blog, but it is the only blog I use, so enjoy. (By the way, WordPress editor still greatly annoys me and so does this theme’s style. I’m going to have to fix the CSS eventually).

Continuity is a new Flash game that I was playing recently. It combines platforming and puzzle in a novel way – your character must jump from platform to platform collecting keys to open a door, but must do so inside mini-levels (squares). The macro-game is essentially an 8-puzzle (8 pieces in a 3×3 square grid), where you shift the puzzle pieces using the one empty space, such that your character can succeed in the mini-levels.

This game is perfectly solvable through logic and working backwards, though for some of the harder levels you need to keep a long memory of steps. In short, I became bored and impatient of solving the puzzles in my head, and decided after ~30 levels, it’d be more interesting to automate it by writing a solver.

I also took this opportunity to get familiar with Python, a language well known for its fast prototyping and easy learning curve. I have only worked in Python once, during a 4-month internship 4 years ago, but otherwise, my main skills are in C and Java. However the syntax required to write good algorithms and data structures in these “classic” languages can get quite long and annoying. So I coded up a Python script to solve the final two levels.

The rest of this post details how to develop the solution. The solution is relatively simple because we can just treat each exit in a square as a point in a directed graph, where each edge in the graph A->B specifies that point B is reachable from point A, and then apply a search algorithm through the graph. I chose Dijkstra’s shortest path algorithm, which runs fast and finds the best (shortest) solution. However, my program did require a lot of manual data entering to specify the paths/exits in each puzzle piece, so it wasn’t fully automatic. Perhaps Python has some magic that could automate this :). Lastly, I skipped solving the 8-puzzle, since it’s not necessary.


Filed under: Algorithms,Games,Puzzles | No Tag
No Tag
April 16th, 2010 11:46:32

New Features in IMmerge 1.0

January 11, 2010

Here is a summary of new features to expect in the next major version of IMmerge, 1.0.

Graphical User Interface

The most obvious change from the user’s perspective is the introduction of a GUI at last! No more having to move and rename your log folders, as you can now select folders with your mouse. This is written in Java Swing and will use native look-and-feel of your OS where available. (I suggest you keep Java up-to-date. Many GUI improvements were made in Java 6.) It is also threaded properly so that if the merge operation errors or hangs (*knocks on wood*), it won’t take down the entire program. A log of IMmerge’s actions will be available like before.

Image of main windowImage of log windowImage of options window

New Command-Line Interfaces


Filed under: IMmerge v1 | No Tag
No Tag
January 11th, 2010 12:11:25

$15 off Trillian Astra 4.x Pro

December 4, 2009

Trillian, the multi-protocol instant messenger client that IMmerge was originally written for, is currently selling its 4.0 Pro version for $10 instead of the regular $25. That’s a pretty good deal. For paying, you get new theme colours, a very nice history viewer (from 3.0), access to the Flash-based web client, and other goodies. I can attest that this is a good program, as it has been my main IM client on Windows since 0.74 and I have personally reported >25 bugs (at least 20 fixed) into Astra’s bug tracker :).

$10 for a limited time only!


Filed under: Uncategorized | No Tag
No Tag
December 04th, 2009 19:25:51

Teaser for IMmerge 1.0

November 1, 2009

Now for the real reason to start a blog… Here is a taste of things to come!

To answer some quick questions: It will still be in Java and hence still be cross-platform, but with native look-and-feel (pictured on Vista). Also, this is a working version, not a mock-up.


Filed under: IMmerge v1 | No Tag
No Tag
November 01st, 2009 02:45:40

Welcome to the blog!

October 31, 2009

IMmerge is a program that I wrote in my spare time — a small command-line utility for merging IM logs (mainly Trillian). This could have easily been a throw-away program to forget about (the source code for the currently released version is shamefully unmodular!), but over the years I have maintained, supported, and added features to it. Unfortunately, I had left the website in this simplistic state.

It is time to update the website, which has been decidedly Web 1.0 for too long now. I still believe that having static webpages is the best way to provide information to new users, and I will continue to support this. However, the user input available through blogs and forums is too valuable to continue missing out on. So here we go — a blog to provide news and updates on ongoing development, and hopefully gain some user insight.


–Albert Choi (zAlbee)
Program Author

Filed under: IMmerge,Site | No Tag
No Tag
October 31st, 2009 03:46:11