Friday, June 18, 2010

Open Source Contributions & MongoDB

I recently attended RailsConf 2010 in Baltimore and the 3 major takeaways I got form it were:
  • The Rails community is awesome. I spent half of my time there just talking to other developers and found the experience to be as rewarding as any of the sessions.
  • Everyone was really pushing for more people to get involved in open source projects. There was a pretty heavy focus on "anyone can contribute."
  • MongoDB and other NoSQL solutions were all the rage. I tried to attend a few talks on it myself, since I was considering this for a project at work
I am really going to try to push myself to write more here about what I've been working on. John Nunemaker made a point in his presentation that writing helps him decompress what he's learned.

I am also going to try to push myself to contribute to more open source projects. Like I said, there was a big focus on this. The first day of the conference I randomly met up with Dr. Nic, and without realizing who he was, asked him if he contributed to any open source projects. He did walk with me and gave me some insight that I shouldn't be afraid or intimidated to contribute. The keynote by Yehuda Katz (who has been one of my heroes lately with not only his work on the Rails core, but his frequent updates to Rails Dispatch and some other screencats he's put out there) also focused on how anyone can and should contribute. So, hopefully, in the very near future I'll have some stuff up on github for people to take a look at.

Lastly, I've been working with the stuff I learned from the presentations (here and here), as well as the Birds of a Feather session, where a small group of us sat and peppered John Nunemaker with questions about MongoDB and MongoMapper, which was very helpful.

I've been working with both MongoMapper and Mongoid and have found them to be both easy and powerful to use. I hope to have an app that's using it in production soon, but there's still more reading I have to do to optimize it.

Saturday, August 1, 2009

On Version Control

While I'm sure that the paid services of github are great, I'm not convinced that I should be paying for private hosting of my repositories. So I needed to come up with a free solution that fit my development needs. I am a sole programmer for small Rails projects, but I needed a way to get my code from work to home (and vice versa) with limited trouble. Version control is the obvious solution, but there was some problems because my work machines are behind a VPN that I can't always connect to since it's a Windows only client, and I don't always want to start up Virtualbox to just checkout/checkin.

My first experience with version control was using subversion. I set up my own server at work, but the problem there was that I could only check in and out while at work (or on VPN), and I sometimes like to work on projects at home. I then started using Beanstalk, which has a really nice UI and design, but only gives one repository for free and doesn't give SSL access. I then moved to Assembla, which didn't give SSL access, but gave unlimited repos for free. They then decided to start charging, so I looked around again and found xp-dev. XP-Dev was great, unlimited repos, SSL access, and a sufficiently large disk quota. The problem is that they decided that in August they would move SSL access to a paid only service, so it was time to reassess my options.. It was also at this time I decided to move to git instead of svn.

My requirements for git hosting were:
  • Unlimited private repositories (or at least, many)
  • A large enough quota (> 100M) where I won't realistically have to worry about space
  • SSL (or otherwise secure) updates
  • Ability to access on and off my work VPN
  • Works across platform (primary OSX and Linux)
  • A copy of the repo on my work version control server.
What I came up with actually works quite well. I've been a happy user of Dropbox for a while now, so I created a 'git' directory there and initialized some bare repositories. From my local git repos, I push (as a local file) to the Dropbox directory as the origin. That repository then gets automatically updated on each server that has Dropbox installed on it and linked to my account (my work Linux machine and my home OSX machine.) When I am at work, I just pull whatever commits I had made. I also added another remote of my work's version control system and push changes (over ssh) to that as well.

Given git's distributed nature and Dropbox's ability to synchronize changes to multiple places (over SSL no less) all of my requirements are met for version control.