Wednesday, January 13, 2010

Dropbox: File Synchronization

Ever since we got our second computer (back in 1998, I believe), I have been dealing with the problem of how to keep my files in sync between multiple computers.  Initially, I simply didn't, or I used floppy disks to move files back and forth.  Then I bought an Ethernet hub, and used windows shares to pass the data back and forth.  When I bought a CD burner, I would periodically create snapshots of the family's files.

Over the years, I have had many hard drives crash, and many more clean installs.  Solving the file sync problem is often best accomplished in conjunction with backing up those files.

Until recently, I still basically used the LAN solution:  Keep two copies of my files on different computers, and periodically (or sporadically) copy one set of files over the other.  Of course, if you do it this way, you can never change your directory structure, or you have duplicates, and when you try to clean up the duplicates, you lose files.

I also back up important files weekly to an external drive, and I keep four weekly backups, plus six monthly backups.  This process is automated thanks to a customized version of a backup script and some cron jobs on my Linux box.  This part hasn't changed.

Recently, however, I discovered a handy little service called Dropbox.  Dropbox will back up your files, keep them in sync on all of your computers (2 GB for free, pay for more), and enable you to share them with other users if you choose.  I've tried Windows Live Mesh, and I still might use that for remote login, but Dropbox gives you more free storage space, and it is able to sync files from one computer to another over a local LAN (which saves ISP bandwidth).  Also, Dropbox supports Linux, which is a must for me.

[Note: if you want to sign up, use my Dropbox referral link an we'll both get an extra 250MB of free space.]

Dropbox enables some pretty cool syncing tricks if you're willing to roll up your sleeves at the command line.  Here are a few things I'm doing:
  • The Linux client for Dropbox treats symlinks to folders as if they were just folders.  Initially, I didn't like this, because it meant I couldn't just plop my existing file structure in place (because it contained symlinks to large data sets in other locations).  Also, I didn't want certain directories synced.  My solution was to simply link to the things I want to sync from my Dropbox folder.  That way, I can structure my directories any way I want, and cherry-pick the things I want to sync from that structure.


  • I use the Pidgin client for all my Instant Messaging accounts on Windows and Linux.  Pidgin logs all of my conversations, and saves them to a local folder.  Whenever someone IMs me or I open a chat window to IM someone else, the chat window is automatically populated with the latest conversation with that person from the chat log history.  In order to synchronize these logs between computers I created a symlink in the Dropbox folder to the logs folder on my Linux box.  In order to get my Windows pidgin accounts to use this folder, I created a folder "Junction" within the Pidgin AppData folder (.purple) using the command: "mklink /J".


  • I use DVRMSToolbox along with ShowAnalyzer to automatically find and skip commercials in Windows Media Center.  ShowAnalyzer is run on our living room media PC, and that is where the files are stored that tell the DTBAddin component where the commercials are within a given recorded TV file.  (If you're interested in setting this up yourself, see this guide.)  Normally, I would have to periodically copy new files in the CommercialsXml folder from C:\Public\Users\DvrmsToolbox on the media PC to my laptop in order for my laptop to know when to skip a commercial.  Now, the files are synced automatically, and I don't have to think about them.  I just open my laptop, fire up Media Center, and select the show I want to watch.  It's a pretty sweet setup.



Monday, November 23, 2009

Google Wave - Keyboard Shortcuts


This post isn't going to be any kind of an exhaustive list.  Others have done that.  A friend and I recently tried to figure out how to do basic chatting without using the mouse.  Here you go:

To open an in-line reply to where you currently are in a blip (either to the selected text, or the cursor position):
  • Ctrl+Enter
To finish editing a blip (equivalent to clicking "Done"):
  • Shift+Enter
To edit the current blip:
  • Ctrl+E
Everyone should know these next two, but I'll put them here anyway.

To jump between blips that have been edited that you haven't "seen" yet/since:
  • Space bar
To move up or down one blip:
  • Up/Down arrow
There you have it.  Wave on, mouse-haters!

Saturday, November 21, 2009

Google Wave and Privacy

To Do List

My list of things to do. Entries will be deleted once they are complete. 

Write a blog post about security/privacy on Google Wave.

Mention both current implementation, Google's plans, and how this all works with federation.

Go over things I've used it for, including this to-do list and passing links from work to home.

The important thing to consider when you're thinking about privacy on Google Wave is that it's not fundamentally any different from e-mail, Facebook, or a wiki.  When you send someone an e-mail, they can choose to forward it along to whomever they want.  When you post on Facebook, your friends can see it and comment (or pass it along, if they copy and paste it).  When you post on a wiki, someone can come along and change it.  Wave doesn't change any of that, it just automates the process of sharing and changing and brings it all together.

Google isn't developing Wave as an internal proprietary system that they maintain control over (like Facebook).  They're making it like e-mail, which means that anyone can set up a Wave server, and it should work the same, and inter-operate seamlessly with Google, and everyone else out there with a server and a peering relationship.  This in itself dictates that users will have limited control over who sees what information, and how they can control it.

In a closed system, it can be possible to un-send a message, or to prevent someone from easily passing along what you send to them (at least, in the same form).  Wave is not a closed system.  Once your information hits a foreign server, you can have no control over it, and so in order to create a consistent system, once your information is sent to any other user, you can't take it back.

What kinds of controls are possible?

If you have any kind of information, you can send it to certain people, and not to others.  You cannot prevent them from sharing that information, but you can refuse to accept their changes to the canonical version of the information (at least, canonical according to you).  So it is theoretically possible to divide people into three categories with respect to information:
  1. Those with no access.  These people don't know about the information at all.
  2. Those with limited access, who can read, but not change the canonical information.
  3. Those with full access, who can both read and write changes back to the canonical information.
With wave, at least as the Google Wave preview is currently set up, there are only two categories: 1 and 3.  If you add someone to a wave, they can change it, and they can add more people (and robots) who can read and write back to the wave.

So using Wave means that you must trust those who you share with, not because Wave makes it possible for information to be passed along to more and more people (or to everyone), but because it makes doing so very easy.

One thing that is not currently in the preview, but will be in the final product (nay, protocol) is federation.  Federation basically means that Wave will eventually be like e-mail, because Google will agree to exchange Wave information with Yahoo, and Microsoft, and Apple, and even Bob's computer in his parents' basement.  Everyone except, hopefully, spammers, but I'm sure they'll find some way in.  Joe@googlewave.com will be able to add suzie@acme.com and frank@microsoft.com to the same wave, and it will not be any different from adding bob@bobsparentsbasement.com.

I'm not certain what Google's plans are for the 2nd category.  Personally, I would find it quite useful to allow only certain people to edit, but a larger set of people to view (and possibly comment on), but not edit a blip.  This would be perfectly doable in terms of federation, except that a foreign server can perform any action that its users have a right to do, so granting write access to suzie@acemwave.com might give craig@acmewave.com write access too, depending on how the acmewave.com server is coded.

Actually, I've been thinking a lot about writing a robot that would allow me to expose the content of a wave to the public through a website (e.g., a blog), and allowing the users of that website (optionally including anonymous users) to interact with the wave using the website and the robot as their proxy.

Basically, it would be a lot like Bloggy, but without needing to make the wave public, and with finer-grained control over user actions. The first step would be to make a robot that simply reads the wave contents, and posts them on the web, updating the website whenever the wave is updated.

Friday, November 13, 2009

Google Wave (Preview)

I just got in on the Google Wave preview.

I immediately had 8 invites, of which I have used 4, so far.  The first one went to my wife, of course.

I like it.  I think it has awesome potential.

It's a "preview" (a.k.a. "beta"--or, since we're talking Google's definition of "beta", it's an "alpha"), so there are lots of rough edges.

Right off the bat, here's what bugs me.  Hopefully the bugs will get fixed.

First of all, here's Google Wave:


So here's the first thing I don't like.  Say I want to narrow down my contacts, to find the one I'm looking for.  I go to the Contacts widget, and type some text:
Okay, so now I want to see the rest of my contacts, in the default view.  What do I press?  There's no little [X] button.  I have to select the text in the box and hit Delete or Backspace.  That is just bad UI design.  There needs to be an [X] right next to the magnifying glass that clears the field.  Google, please fix that.  (Yes, I've already submitted feedback about this.)

This next one is probably just something I'll have to get used to.  When you go to create a new wave, or add someone to the wave, be careful when you click!  Creating a wave or adding someone to it is irrevocable, and the UI doesn't ask you for confirmation, it just shows up in their inbox, and there's nothing you can do about it.

I accidentally added my friend Victor to my first wave, because I clicked his name:

I was expecting there to be a confirmation dialogue, in stead, he was added.  I hope he enjoys my work.

Applications are not easy to find.  There's a link to an Extensions Gallery wave in the introductory "Welcome to Google \/\/ave" wave that starts in your inbox, but all it has is Sodoku and half a dozen other apps.  I'm not knocking the apps.  They're good, but there are a whole bunch more out there that were shown off in the video.

After some poking around, I found this list (and this list) of Bots, Apps and Gadgets.  The one I was most interested in, Bloggy, doesn't seem like it's working.  I added it to a wave, but it didn't do anything.  It's supposed to make the wave public and post it to your blog so that everyone (even those not logged in to Wave) can see it, and interact with it if you allow public editing.  Hopefully they brought it offline so that they could fix it, and that it will be fixed soon. 

One last thing, and then I need to go to bed.  There's an "Options..." menu item that doesn't do anything for me.  I've only tried it in Firefox (and I'm using 3.6b2), but clicking on it doesn't do anything at all.


Just so no one thinks I'm being negative, let me state this plainly:   I'm VERY excited about Google Wave.  I know it's a pre-released product, and I don't expect perfection by any means.  I'm documenting these things here because I want to share my experience, and I would like to see the shortcomings addressed so that the final product will be awesome.

Yay for Google Wave!

Thursday, July 23, 2009

Google Wave

Google Wave looks amazing! (For those with 10-minute attention spans, here's the abridged version. The longer version is worth the watch if you have the time.) It's a new Internet communication protocol/framework being developed by Google. It's not a walled garden: anyone can make their own implementation (or even base it on Google's code), and it will be interoperable with everyone else, just like e-mail. But this isn't your grandfather's e-mail. Wave is basically a conversation/collaboration tree, with full version control, history, and really cool tools for mashups, transformations, translations, and anything else anyone on earth can think of and write a plugin for. This is really that revolutionary. Imagine if every e-mail, chat, wiki, invitation, blog post, tweet, photo album, forum, and whatever else on the Internet was as simple to interact with as an item on Facebook or a wiki, only with way more powerful tools, and it wasn't confined to anyone's walled garden. Tomorrow's kids will laugh at us for using Facebook for the same reason that today's kids laugh at their elders for using Juno. I don't expect all of those other technologies to disappear, but to some extent they will be eclipsed, and they will have to keep up or be left behind.