Wednesday, April 23, 2008

The development process of Plaxo sync client

I have been thinking of sync functions for long time, almost since the day 1 of Open Contacts project. I even contacted an European company which is specialized in developing sync programs for mobile devices.

Though I know it is not realistic for an one-man band to develop a decent quality sync solution, Open Contacts maintained timestamps for contact records since early version. Thus, the foundation of generating change log info was there.

Around half year, I found Plaxo had upgraded the service quite a lot, less disturbing, more powerful and convenient functions. In particular, the documentation for 3rd party developers is quite good. So I decided to give it a go to develop a sync client for Plaxo.

First, I upgraded Open Contacts to make it support timestamps for every data fields. This was found not necessary, as current sync solutions like Plaxo and SyncML would expected timestamps at record level, not field elvel. I would like to list some reverted attempts:
  1. Used Delphi develop sync client. However, Delphi is short of Web functions and regular expression. Later I used C#.
  2. The mapping for sync client used static Outlook fields to static Plaxo fields, and Open Contacts mapped static Outlook fields with dynamic fields. Later I used mapping between dynamic fields and static Plaxo fields, and Change Log XML used such format as well.
In last November, I released the first beta of OCPlaxoSync. The internal test results looked positive, and I am waiting for public response.

I am satisfied by the progress. I had thought developing sync solution is difficult, even if for developing the sync client only. I worked one to two hours a day on this project for around 40 days, building components one by one.

I used the following approach:
1. Build classes to represent Plaxo commands first, and use regular expression to parse command texts.
2. Build functions to convert XML to plaxo command objects.
3. Build web connections and Facade class, and test commands one by one online.

Such approach gave me self-testing framework, and I could understand and analyze Plaxo protocols gradually, while the progress of development could be made at the same time.

No comments: