I think that most developers have small projects, be they pet projects, or just ones made to test a specific programming language / framework, to get to know it more in depth by using it more practically, making the experiences that are often needed to make decisions, and avoid common pitfalls when working on larger, possibly commercial projects.
Personally I’m all for source control, but there are cases where my goals are not so much to keep a strict versioning information about the files, but rather just to make sure I have the source backed up, and I’m able to work on it from both my desktop workstation, and my laptop, without a lot of hassle, and while I normally prefer Subversion for my versioning needs, I find that it’s like shooting birds with a cannon when it comes to small projects.. It works, but it’s a lot of unnecessary work, especially since I’m the only one working on the project, I don’t need to do extensive testing of it before I commit the source. It also happens sometimes, that I forget to commit the changes when moving from one computer to the other, meaning I’ll either have to resolve conflicting commits later, or find another way to get it done..
Subversion can support WebDAV, which would of course help alleviate the problems with remembering to commit, but it’s still a bit overkill for my tastes. However I didn’t really look for another solution, instead it sorta dropped into my lap, and even though it took me a while to realize I could use this for my personal projects (where the safety of the code isn’t the primary concern, since with a service like this you can’t be 100% certain no-one will be able to read your files), I was incredibly happy when I did.
It’s called Dropbox, and is basically just an online file storage (and sharing, if you wish) solution, giving you 2 GB for free, with the ability to get more for referring friends (assuming they sign up), or by paying for it. They currently only offer a 50 GB package at $9.99 per month (or $99 per year), but will be offering other paid solutions in the future, which is nice.
So what’s so great about it? Well, other than it being 2 GB free (which isn’t really all that impressive if you compare it to other solutions available, which offers up to 50 GB for free), it’s so easy to use, since it’s basically just a folder on your computer, that syncs with the server whenever changes are made to it, and those changes are then passed on to your other computers, either right away, if they’re connected, or when they next connect (ie. has internet connection while the client is running).
“Wait a minute, this sounds familiar..” You may or may not be thinking right now, but if you are, you are indeed correct.. There are other services offering this very same thing, including Microsoft’s LiveMesh, which I used before I switched to Dropbox. But what made me switch? What’s better about Dropbox?
A lot of things, but I’ll quickly list off the ones that I like the most:
- Dropbox works on Windows, Mac OS X, and several if not all Linux variants, which is a huge plus for me, because although I mainly just use Windows, I have friends who use other OS’s, and this way I will more easily be able to share files with them if I need their input on something, if they have Dropbox installed too, since I can create a so-called “Shared folder” where I decide who gets to share it with me.
- Contrary to LiveMesh, Dropbox does not have a built-in VNC-like server, which cannot be disabled, and works absolutely horribly anyway, since a person needs to be physically present at the computer to accept the connection through LiveMesh, before it will allow the remote user to do anything.. If I need to remote-control one of my computers, it’s because I’m not currently sitting in front of it, Microsoft!
- All synchronized files are automatically versioned, so that you can return to an earlier version of the file if you make a mistake on it, something I haven’t had a need for yet, but it’s ever so nice a feature to have, and the revisions are not only stored as a “delta” on the server (meaning it contains only the differences from last version), but they do not count against your storage space, so even a 10 MB file with 100+ modifications will still only take up 10 MB. I don’t know if all revisions are stored forever, but again, this is for personal projects, not production-grade ones.
- In relation to the versioning of files, there’s another advantage.. Deleting a file will flag it as deleted on the server, but it will still be there so you can restore it, unless you choose to purge it, in which case it will be gone forever, but that is another very nice feature, since I sometimes end up deleting something accidentally, and I tend to do so with shift+delete, meaning it bypasses the garbage bin, and is deleted fully (for those of you who may not know).
- The sharing, public folder, and photos folder, are all very nice features as well, that I tend to use to quickly show off pictures and other files to friends, and for collaboration on documents.
- You can limit the traffic used, which is wonderful if you’re on a shared network where hogging all the bandwidth is a sure way to get lynched.
One thing that Dropbox doesn’t yet have, that LiveMesh does, is the ability to have multiple folders, and then only syncing those you have an interest in, which serves two purposes (for me). First of all, it enabled me to only get the folders I needed on my laptop, where the amount of free space is limited, and second, it allowed me to decide where each folder was on each computer, so if I had used them for projects, I could have had the folder in the project folder, and then it would have synced automatically.
Until Dropbox gets multiple folders, the first usage is impossible to simulate, but the second one can be done by the use of symbolic links (called Junctions (folders) and Hard Links (files) on Windows XP). One thing that I found out is, that you cannot place the folder you wish to sync, outside of Dropbox and then create the junction inside the Dropbox folder, as it will upload the files initially, but won’t sync when you alter a file. This applies to Windows, btw, as OS X and Linux should work perfectly. Anyway, if you place the folder inside the Dropbox folder, and then create the symbolic link / junction where you normally use it, everything will work flawlessly.
I’m using this for my Yii test project, and it’s working very well indeed, so I can warmly recommend it, although for larger projects, I would still recommends Subversion.
A quick note… Daniel Hofstetter posted in his blog yesterday, an article about another single-developer solution if you wish to avoid Subversion for whatever reason (his being that he couldn’t get Subversion and NetBeans to interact, a problem I haven’t had personally, but then I’ve never done Ruby stuff in NetBeans). So if you want to check it out, you can find it here.