Home Directory Sync
Ok, now I’m feeling a bit obsessed with this idea. It would make my life tremendously easier if I didn’t have to think about managing my different files. I just want them to always be available on all of my mahcines, but without having to change the way I work at all.
Last night, I touched on how to make Windows a little less ugly such that it will work well with the standard *nix directory layout. I also mentioned some resources that go in to detail about how they manage their CVS/SVN syncing issues. But then I started to realize those solutions have one fatal flaw – they still require you to “just cvs up at the end of the day.” I don’t even want to have to worry about that, because I won’t remember to do it.
Now I feel compelled to lay out my requirements for what would be the perfect home directory solution. Maybe I’ll call it “Distributed Home Dir” or something more creative, but along those lines:
- Synchronization of most files should happen automatically, unless there is a conflict
- Certain “large” files (usually binary) should not be automatically sync’ed
- Somewhat intelligent defaults should exist to determine which files need to be synched up and which ones don’t
- Options should exist for whether or not to have “full synching” ( constanly tracking changes a la Google Docs and keeping a record of the history), “just copy” (no history), “manual history” (manually choose to ‘commit’ changes), “ignore,” and probably others.
- Bad practices should cause warnings along the lines of: “Saving history for these large binary files will take up lots of space, maybe you should just save the latest copy “
- Files that are not automatically sync’ed should be able to be obtained on demand (assuming connection is available)
- Most syncing occurs in the background at very frequent intervals (on par with gMail or Google Docs)
- Each sync’ing node should be able to be a source as well
- Each sync’ing source should be able to proxy another node as well
- Multiple available nodes might afford a bump in bandwidth a la BitTorrent
- “Installing” should be drop-dead simple, and maybe even pre-configured if you are able to access the install from one of your existing nodes
- “Thin” nodes such as a flash drive or PDA should integrate well
- Alerts might occur when you are starting to cause a conflict, at which time you can choose to branch (layman’s terms: “work on a second copy and merge later or keep a separate copy for this environment”)
- Some “branches” will have to be intentional however, so as not to overwrite intentionally different types of files. For example, the %HOME%/Documents/My\ Google\ Gadgets folder you find in Windows.
- “System tray” capabilities would be nice
- Integration with other “file systems” (see the MacFuse Google Tech Talk for more info)
- Solving the “Shared” problem would be nice (i.e. when we download pics from our family camera, they go in a shared home dir . . how do we get access to those resources on another machine)
- Backed by established version control systems, most likely a distributed one like mercurial.
- Encryption should be mandatory
That is probably more than enough to get things running. Hopefully I won’t have to write much code (otherwise this may never happen).