I’ve been working on this project I call ‘WebSync’ (a very unclever name). The goal of it is to have all my machines, regardless of location be in sync. A quick count of how many computers I use on a regular basis is something like: work desktop, work laptop, home laptop, home desktop, home server, so 5. It’s becoming a nightmare for me to keep all of these in sync with each other and I can’t use something like Windows Offline Folders since my machines are in different networks and I don’t like the copy of having a ‘master’ copy of my data. I’d like to be able to roam as much as possible.

Thus, WebSync. WebSync is made up of a client side app and a web service. The web service gets over the fact that my machines are in different networks but they all can speak HTTP to a central box. A WebSync client runs on each of the boxes that I want to have a copy of the data on, and they speak with the web service in order to get up to date information on the status of the data store. The clients have a file watcher that monitors changes in the local store. When one is detected, it puts it in a queue and lazily dequeues the changes up to the web service. During this lazy dequeue, all the clients are also asking for updates. Thus, when one client updates the queue, all the other clients then pull down the changes as well. I haven’t quite figured out exactly how to communicate the changes to the clients. I first tried doing a version number on the store and having the clients pull down everything from their current version to the most recent version, but that method was taking to long. I think for now, I’m going to reimplement it so each client sends up its list of files and the server checks what in that list has changed, then send those changes back down.

In any case, the project is almost done. I need to figure out the version notification stuff more, but the client which watches the files and performs updates is pretty much done. It even knows how to deal with the wierd way Office documents do incremental saves (a pain, I’ll describe some other day)! Once this is all polished and ready, I’ll make it available to friends & family so they can also use it if they have the same issues with multi machine sync that I do.