Same Application, Multiple Locations: How I want to work

Friday, September 11, 2009

I work on 3 computers: work, home, and laptop. At home, I have VMs set up for tinkering in different operating systems. Naturally, though I do different kinds of work on each machine, there are commonalities. I use Eclipse extensively on all 3 and in the VMs. I have various app servers set up. I use Live Writer for blogging on all 3 machines. Then there’s firefox, chrome, tweetdeck. Then there’s little stuff like Notepad2 and hippoedit.

It was brought home to me recently, when I reformatted my laptop, that maintaining these apps across multiple computers is a real hassle. But it’s not just initial download and install. It’s those times where you fire up your editor, go to do something, and realize, “Oh, crap, that plugin isn’t on this machine…” Or “Wait… I thought I installed the Eclipse SWT examples. Where the hell are they? Oh, that’s right, that was at home”. Or I alt-space for Launchy, type “delicious <tab> [some search term]” and it doesn’t search my delicious bookmarks. Or I open firebug, go for the google page speed tab, and it’s not there. Or I go to Facebook and I see those damned app posts and I swear I have a greasemonkey script installed that hides those retched beasts, but there they are! Or you right click on some file in Eclipse, select “compare with local history”, and you don’t have any local history because you forgot to set the local history setting to a year instead of the default 7 days.

And databases. Don’t even get me started on databases.

It’s these little things. These things that break my flow, that break my concentration, that cost me time.

Time is money.


Time is more important than that.

At work, in an office with precious little continuous chunks of uninterrupted time to get into flow and get things done, Time is momentum.  The beancounters and bosses call it “productivity”, but they don’t really understand this anyway because they schedule daily meetings at developer-energy-happy-hour so their label for it is meaningless to me. At home, time is peace. It’s freedom. It’s when I learn. And these are what I lose when the Monkey Work slows me down.

This makes me wonder: Why does it have to be this way? Wouldn’t it be lovely to have all of these applications work like a AAA card, where the benefits follow me, not the hardware?


You fire up Eclipse, and it’s the same install that you have at work. It has the same plugins. It has the same configuration. Maybe it even has the same projects.

You fire up firefox, and it has the same extensions, themes, and greasemonkey scripts.

You alt-space, hit “sql server start”, and the damn server starts instead of being met with Launchy’s [I don’t know what you want to do so I guess you wanna search Google] because the server isn’t installed.

You create a new project on github one night after your wife goes to bed, you install the Eclipse git plugin to give it a whirl, you finally (finally!) get the damn thing configured right, you go to bed at 1:00 AM after wrestling with that alligator, and you get to work the next day, log in to Eclipse, and there it all is, waiting for you, for free (NOT money free… time free). Magic.

You go to write a new blog post inspired about being pissed off because you have to install the damn Live Writer templates plugin and recreate all your “templates” that you have at home, and… they’re already there, waiting for you. For free.

This is how I want to work.

I’m tired of maintaining installations. Images and Ghosts and VMs you carry with you do not get you this. They get you part way, but they’re “heavy” and incomplete and slow. I want it lighter, and faster, and frictionless.

I want my apps when I want them.

There are partial workarounds, but none of them get you this kind of magic.

Let’s break it down:

I reckon we are contending with at least 4 different Quantities here:

  1. The application itself
  2. The application’s “extensions”
  3. The application’s configuration (settings)
  4. The data for which the application was born to manipulate (in the case of your IDE, this would be your projects)

Sharing the application among multiple installs is generally the most difficult. Some thoughts on current solutions:

  • Keeping them on USB sticks and carrying them with you wherever you go. This is a start, but it’s far from ideal, largely because it relies on the most unreliable component in the entire equation: You.
  • For large apps like appservers and database servers, I do not know if there are any “good” solutions.
  • I could completely imagine, however, keeping Railo -- which I do not use at work but which I have to use for testing MXUnit -- in Dropbox.

Sharing extensions is easier, but still problematic. Current solutions vary based on the app (obviously), but these come to mind:

  • For Eclipse, you can export your update sites to a file, send that file to yourself (or whatever means you have of moving a file from one machine to another, like Dropbox), and then import the file. From there, you follow the normal Eclipse update process, which simply drops files into a known location on the target machine.
  • There’s also Pulse and Yoxos for Eclipse. I tried Pulse and hated it because of the stranglehold it puts on extensions. I have not tried Yoxos, though it’s possible that it's hosted service comes close to what I’m looking for.
  • For Firefox, there’s the excellent FEBE extension which will export your extensions, themes, and other stuff. From there, you follow roughly the same model as I described above for Eclipse.
  • For LiveWriter, there’s... Nothing (that I know of)
  • For Launchy, I don’t know of anything.

Sharing configuration is the easiest because so many applications at least have some facility for export.

  • You can export your bookmarks in Firefox.
  • You can export your settings for Eclipse.
  • With something like PasswordSafe, you can save your password database file anywhere and share that file.
  • For your PHP install you can share php.ini in whatever way you transport them from one machine to the next.
  • Go look in your favorite apps and see if there’s an import/export facility. Hopefully there is.

Sharing data is a quagmire. Current solutions might include:

  • For mysql, you can share the database file directories
  • For projects, at least for personal projects you might want to have installed on multiple machines, you can use svn or git hosting and get them on each machine with ease. The hurdle here is with work projects, where you don’t want to share the source code on your other machines. But you *do* want to share them across teams. Again, SCM solutions are critical here. Pulse can support this, too, though as I said I’m not a fan.
  • For SQL Server and other “enterprise-y” databases, you’re limited to .bak file export and import. For schema changes, you could use SCM or manually create transformation scripts.

So options do exist for mitigating the pain, to some extent.

There’s still pain

Still… even for apps that do provide import/export, you have to take action. You have to push (export –> transport), and you have to pull (import). You have to carve a chunk of time from the “Things I love to Do” part of your discretionary hours and sacrifice them to the Monkey Work part. And this tradeoff is where people like me bristle.

It’s not all bleak

Transport pain can, to some extent, be further reduced via Dropbox. For me, the most seamless experience I’ve had is with PasswordSafe. I had to install it on all 3 machines, but I keep my password database in my dropbox folder and so the friction is Zero. I’m considering keeping my Eclipse install in there, too, which would largely alleviate Quantities 1 and 2 (app and extensions) but not configuration. But even there, I can export the settings file to dropbox and save myself a little hassle.

I’m going to stay on the lookout for other ways I can use dropbox to share apps, extensions, and settings.

Who gets it right?

The granddaddy (to me, anyway) of data sharing is Delicious bookmarks. No, it’s not an app. But it’s still extremely useful to how I work. If applications worked like Delicious, I’d be happy.

Tweetdeck gets it right with the ability to share columns, provided you sign up for an account. Mix that with the very low friction way in which Adobe AIR handles application updates, and you’ve got a satisfactory solution. It’s a one-time install, but from there, you don’t think about it again. You don’t think about updates, and you don’t think about configuration. I like that. gets it right. But wait… they’re a website. Of course they get it right… it’s a damn website! Hear me out. I was a longtime MS Money user, and I couldn’t imagine an application that could replace what I got from Money. Then MS went and completely hosed Money with the 2008 release, which sent me looking for replacements, namely, Quicken. But Quicken couldn’t import all my data. So you know what I did… I punted. I said “I don’t care about the historical data, because I’m going to have to start from scratch anyway if I drop MS Money”. I tried out Mint, and lo and behold, it’s better than Money ever was in terms of helping me keep track of where the money goes. It’s Better! It’s faster! What?! Yes, I know, it makes no sense. But it’s superior, and I hold it up as a model of how a web app can transcend a native app. gets it right, as does Google docs, for sharing documents. This is not merely document management. These are applications that span document creation and sharing. With these apps, you do not need word processing or spreadsheet software anymore.

iTunes gets it right. I plop my iPhone in the dock and I get podcasts on my computer and phone.  Oh, wait. I can’t do that on more than one machine. Scratch that. FU, iTunes. You were so close. But you failed.

The problem with Cloud-based apps

The obvious problem with “not firing up Eclipse, but logging in to Eclipse”, is performance. Imagine if Eclipse were now a JavaFX app that, when I launched it, from any computer, would contain all my plugins, all my preferences, and potentially (ideally, configurable) my projects. Or, better yet, I login and and say “give me [my  home project set]”.  How can an app like this possibly perform as well as a native app? I do not know. I hope they figure this out.

The other clear problem is security. Do I really want my source code out there in space? OK, fine. So maybe projects themselves are optionally shareable.

Functionality is another. Sure, I can write docs with Buzzword. But can I [insert thing I can’t do here]? Nope… I can’t do mail merge. I can’t hook it into an LDAP server. I can’t do that “Track Changes” stuff with the 4 point red font in the right margin thing (or can I… it just looks different?). Perhaps functionality is one of those areas where we’re so afraid of losing a feature we think we need but when, on inspection, we really don’t, that’s keeping us from embracing this kind of technology. Perhaps the little sticky note tabs on indicating the changes from one version to the next are, in fact, good enough.

And certainly the infrastructure cost associated with this model is a huge barrier. It quite likely won’t come without a price. But it’s a different cost. It’s money. And I’d pay money to get back my Time.

Where do we go from here?

I’d like to hear from you: how do you contend with this issue? How do you maintain applications across computers? How do you protect the stuff you want to protect and share the stuff you feel isn’t a threat to your livelihood if you lost it? And do you know of other applications that get it right? What’s out there in this amazing world that I and others don’t know about but which helps reduce the maintenance of applications across multiple machines, and even across multiple operating systems?

Considering application, extension, and configuration, how do you save Time?


Aaron Longnion said...

Interesting thoughts, problems, and solutions.

I'm hoping the Google Chrome-based OS and Google Wave go a long ways towards solving these problems, by putting more and more commonly used apps on the web/cloud.

I would challenge the supposition that just because an app runs locally that it's necessary faster. Just compare GMail web interface to Outlook when you've got more than a few hundred mails. Gmail web is snappier, faster to search, and has virtually infinite scalability. I don't have to worry about deleting old email. Why is it faster? clever ajax and cuz all the heavy lifting is done by enormous Google server farms.

Anyways, here's to the super-computer-fast-access-anywhere apps of the future!

Marc Esher said...

Good point about Gmail, Aaron. I was thinking about my old job, and we used to be able to access our Outlook email via the OWA web interface. At the time, this was cutting edge and I believe it was one of the drivers for XMLHttpRequest. Anyways, they essentially tried to mimic outlook. And right there is where they failed. They tried to emulate a desktop app instead of thinking "on the web, how should email work?". And that's where Google got it right with Gmail.

Rob Wilkerson said...

It's hardly a perfect solution, but I use Dropbox + symlinks extensively. I use it to maintain the settings for my text editor/IDE of choice, to maintain a single bash profile that each machine links to and to sync the Firefox preferences I care about.

I also use it to house development code across machines so that I don't have to commit if I'm not really read to commit. There's more, but you get the idea.

Like I said, it's not perfect, but it does help.

Marc Esher said...

Rob, that's a good idea. I wonder how one would get all that working with two vista machines and an xp machine. I've never used Junction, but I understand it's the XP-way for doing symlinks.

How exactly, in your case, do you set it up to share your IDE settings?

Jamie Krug said...

Oh man, when I saw the title of this post, I thought you'd already solved everything for the rest of us ;-) LOL! Lots of great points, ideas and questions.

Unfortunately, I have no magical solutions to any of the real problem spots you've outlined. I do things very similar to where you're at. I am trying to leverage cloud-based apps (like Google Docs, etc.) whenever possible, to limit the Eclipse-like apps that I need to manage.

Maybe straight-up file sync would help a bit more? Have you checked out SyncBack?

Regarding Junction on Windows, I never got deep into it, but I think there's a major difference between it and *nix symlinks -- when you delete a symlink in Linux, the target remains; I believe both the target and junction link are deleted on Win. So be careful!

Jamie Krug said...

One other thought... have you read about plans for the Google Chrome OS?

This sounds like it could be a good start to really heading in the right direction for many of the thought-provoking questions you've raised here. Much like Google got it right with GMail while MS failed with the desktop-emulation-attempt for Outlook via the OWA Web interface, maybe Google is starting right simply by not trying to cram these "new tech world" needs into an existing framework (current-day OSes).

Matt Woodward said...

For about a year I just did *everything* on a VM. It worked fantastically well. I ran the VM in the office, and if I needed to do work from home that night, I'd copy the VM to a portable hard drive and work from home. Take it back to the office and copy it over the next day, or even just run from the portable hard drive. Performance was good enough in either case that I didn't even notice a difference.

Now since I work from home full-time I just do everything on a single laptop, but I really did like the VM solution. At that point the OS is kind of irrelevant--so long as it can run VMWare or VirtualBox or whatever your VM software choice is, you're good.

Mike said...

Marc, so what you would really like is eclipse written in as part of google docs ;).

Or an editor written in Flex and hosted.

Sun has been so close to this for 15 years, but never crossed the chasm technologically with their SunRay line.

Marc Esher said...

Eclipse will get there... whenever e4 is finally released. At least the Eclipse foundation is moving in the right direction. It's these other simple apps that drive me just as nuts.

Emergence said...

For managing Firefox better you might want to check into the add on called weave, a lot of stuff gets synced on their servers, and I know they have been working on getting the themes to sync up also, but thats down the line for the features. I need it all the time, nothing like finding a good website reference in a search box at work and not bookmarking, weave copies history, bookmarks, form fields, and a few other things I don't remember.

Henry Ho said...

Remote Desktop to one computer (e.g. work)? :)

Rob Wilkerson said...

@Marc -

Using Windows 7, I tapped into my Dropbox directory using mklink, I think (it's been a while). That should work for Vista, too.

My editor of choice is KomodoEdit which stores its config files in a my home directory. I just moved that config directory to my Dropbox directory and created a symlink in my home. For Eclipse, take a look at Pulse ( if you haven't already. It's a pretty nice way of storing a config "in the cloud" and downloading it to each machine pretty easily.

Hope this helps.

Marc Esher said...

Henry, that is certainly an approach one could take. For me, my biggest problem with that is that I need to work on two monitors, and if I'm RDP'd into work, I am only effectively using one of them. That's a deal breaker for me.

Rob, I think i'm going to give the mklink approach a try. Two of my 3 machines are vista, so at least i'd be able to keep a few of these apps in synch between my laptop and home PC. As for pulse, as I said in my original post, I do not like it at all.

Rob Wilkerson said...

Sorry, guess I missed that in your post. I didn't like Pulse either, but it's an option and from a pure sync'ing standpoint, it did okay for me. My biggest problem with Pulse, I think, was that it requires Eclipse and I found Eclipse to be a complete PITA to maintain.

Do some reading on mklink. I remember there being some discussion on whether mklink or Junction was the right way, but I think I ended up with mklink and it worked well for me.

Timothy Leach said...

Have you looked into syncback?
( )

I would think the free edition would work, you could (for example) use DropBox are a repository of data/extensions, and syncback to move them back and forth to the various programs to keep them in sync.

Though for launchy, I think I'd just install a portable version in dropbox (maybe do the same for firefox).

I'd be curious to work through this with you though, because I'm looking for the same thing.

Part of how I get around things like SQL server though, is just a dedicated server, I access over the network.

Which reminds me, one thing I had tried before was setting up a master box that had everything configured perfectly. and remote controlling it via VNC or RDC, but that wasn't quite ideal.

Marc Esher said...

All, I saw this today:

It's a web-based IDE for building Palm apps.

We're getting there! Someday, the dream of logging in to our IDE, rather than starting it up, shall be realized...

Marc Esher said...

Wow. Now you actually can Log In to your IDE: