Wednesday, July 22, 2009

Columbus Give Camp 2009 == awesome

What is Give Camp?
Give Camp is an event that connects volunteer developers, graphic designers, and database administrators with charities who need programming work done. This includes website redesign, setting up content management systems (CMS), and dynamic database driven web applications. See GiveCamp.org or ColumbusGiveCamp.org for full details.

One of my teammates, Joel, is apparently quicker to blog & less long-winded than me. If you're in a hurry, read his take on Columbus Give Camp 2009 on the Adelphus blog.

Pre-Give Camp
Last year, I heard about Give Camp from some blog posts right after it happened. I decided at that point that next year, I would make it a point to attend. So this year I found out about it pretty much just in time from a post to the Columbus Ruby Brigade mailing list from Greg Malcolm. I had at least 5 other things I wanted to do that weekend, but luckily none of them were plans I couldn't change.

I signed up & realized after I signed up that I didn't have any choice on the charity, project, and since I didn't sign up with a team I had no clue who I'd be working with. The thought did occassionally pop into my head "This event is originally sponsored by Microsoft. It'll be just my luck if I end up working on a .NET project and I have absolutely no experience in .NET." It turns out that thought was completely unfounded. Carey Payette and the other Columbus Give Camp organizers did a great job of making sure developers were matched up with projects that fit their skills.

I received an email on Wednesday with my team assignment. There were a few people that I didn't know, but there was one on my team that I did know. This was Gayle Craig from the Columbus Ruby Brigade. The charity I was assigned to work with was Tech Corps Ohio, which teaches kids in grades K-12 about technology and computers.

Welcome to Columbus Give Camp
Friday night the event kicked off. There were just over 40 developers there and at least one representative for each charity. There were a couple of teams using .NET, and originally one Ruby on Rails development team, which was too big and was broken up into two. I didn't feel I had enough Rails experience to hack something together during a weekend so put my PHP and Perl experience on my application for the event instead of my limited Ruby on Rails experience.

We worked closely with Aung Nay from Tech Corps Ohio (TCO). The project was this: they had multiple sites running Joomla (CMS system), Moodle (online learning system) and WordPress (blogging software). All of these were running PHP and each set up by different people, so they all looked like different sites. Before the event, Erin Corrigan from a firm called Aero313 put together a wonderful Photoshop mock-up of what all the Tech Corps Ohio sites should look like. Our mission (should we chose to accept it) was to take this template and make all the current TCO sites look the same. And they had plans to deploy more sites, so we had to build the templates in such a way they would be easy to deploy to new sites. I can't remember who came up with the name but we became #teamtco on Twitter.

TeamTCO
The team we ended up with was myself and 3 other people: Joel Helbling of Adelphus.com His official title is "Visionary" which is one of the coolest official job titles I've heard. Joel stepped up and became our project manager and gave everyone a five minute crash course in a project management technique called "Kanban." More on that later... Also on our team was Chris Bumgarner who is a lawyer who has taken a major interest in Linux and uses Arch Linux. Last, but definitely not least is Sarah Dutkiewicz (aka sadukie) who is a Microsoft MVP because of her involvement with IronPython. It made the weekend an awesome experience working with such a talented group. We decided to pair up to work on tasks since we are all developers, not web designers. Two heads are better than one when you're used to working with databases and such and are working with CSS and PHP.

Friday night: network hiccups, planning, and getting started
At first we had constant network outages. It was a sure-fire way to make the network go down if you asked if the network was up. Carey's husband saved the day by bringing in some network equipment and worked with some other people to get everything running smoothly.

Aung was very supportive and already had figured out exactly what he wanted to have done and also had it all prioritized.

Joel gave us a five minute crash course in Kanban, or at least enough of it we could keep track of what was going on project-wise. It worked like this: we had a dry erase board and a pile of Post-It Notes. We wrote every task we had to do on the notes, one task per note and stuck them on the left side column of the board labelled "Backlog." The next column is labelled "WIP" short for "Work in Progress." This column contains one Post-It Note of a different color for each "development unit" you have working on the project. Since we had four developers working in pairs, this meant we had two "development units" working on the project. Once you decide which task is next on the list to do, you move it from Backlog to WIP. Next up is "Testing" which is where you move a task once you think it is done and needs to be tested. Last of all is "Done" of course.

Before we set up the board, looking at the list of what we had to do made me feel a bit panicked but thanks to Kanban and Aung already having everything prioritized, we were able to just jump in and do whatever was most important first, second most important next, etc.

Luckily all of us had enough development experience to know we were going to need some kind of source code control tool since we'd all be working on the same set of files at the same time. Joel suggested git. I have no git experience, but it is similar enough on the command line to Subversion (svn) I quickly figured it out after a quick lesson on working with git. Then we had an issue of setting a git server. Luckily all the CSS will be public anyway, and all the PHP code we were doing was just tweaked themes of already open-source projects. So Aung gave us the OK to set up a free, public github project. This saved us from some severe misery throughout the weekend as despite accidentally overwriting each other's changes a couple times, we were always able to revert back to earlier versions and merge everyone's changes in. We had a couple people roving from project to project helping out, so you never knew who you were going to meet and work with.

Saturday: coding, dinosaurs, and foreign substances
I found out that I actually don't live too far from Chris, so we ended up just carpooling in on Saturday. I checked my email & twitter before I left and saw something about Ninja Dinosaurs. It turned out that some sleep-deprived programmers had found a video on YouTube called "Go, Go Ninja Dinosaur" which became our theme song for the weekend.

Project wise, Saturday was just everyone working to move the tasks across our Kanban board. James Bender played a big part in helping make sure everyone was fed. Potbelly Sandwiches donated enough boxes of sandwiches and chips to feed everyone for lunch on Saturday. Sophic Group took care of supper Saturday - Pei Wei. Pei Wei apparently gave twice as much food to Give Camp than the original order was! Also Aung dropped in with a huge box of strawberries and bag of fresh Mandarin oranges. This was a very welcome change of pace after the pizza, pop, chips, and other similar foods. Someone joked that fresh fruit was a foreign substance to developers and they'd probably go into seizures from eating fresh fruit. Luckily this was not the case - the fruit ended up on the big "help yourself" table and quickly disappeared except for a couple over-ripe strawberries.

At one point, I hit a snag with git. In treating a local git clone like a local svn working copy, I got myself into a situaton where I couldn't revert to a previous version and I couldn't push my changes. There were no conflicts, git was just really, really confused. A google search for the error turned up only one search result, and that was a patch send to the git mailing list in May to make it generate the error message I was seeing instead of doing who knows what... Failing with some kind of "something unexpected & bad happened" error message, I'd guess was what it would do before the patch.

Sunday: appreciation, two boxes of silver, and swordfish
Sunday I managed to wake up in time for the early service at church & then make it back to GiveCamp just in time for lunch. Everyone was hurriedly wrapping up their projects by fixing bugs in the code and putting in last minute features. Lunch was Kane's chicken - fried chicken & French fries and some kind of special sauce. So much for eating healthy.

We put the finishing touches on the Joomla template and made sure it was installable as well as working some on the Moodle template. We did look at the WordPress template, but that's as far as we got with that.

Aung showed up with two boxes that looked like Chinese takeout and said he was paying us in silver. Someone had joked on Saturday when Aung asked if we needed anything if we could have a bag of money. So he brought in two boxes of silver in the form of York Peppermint Patties which hit the spot! Again, so much for eating healthy...

Things started to wind down and we ended up doing a group picture with all the volunteers and then each group got to demo what they did on the weekend. I don't think anyone managed to accomplish everything they wanted to, but everyone seemed blown away by how much was accomplished over the weekend, especially the charities.

Afterward Aung asked us all where we wanted to go out to eat, his treat. Half our team was from Cleveland, half from Grove City and Aung wasn't familiar with the area, so we ended up eating at Meijin, the Japanese Steakhouse across the street from the Quick Solutions office (where the event was held). I ordered swordfish, which I remember having once or twice and last time a few years ago. I only realized on Tuesday, after seeing a twitter message from Joel, they had accidentally given me his salmon and he got my swordfish. I guess I'll have to go back there again and try the swordfish soon. Joel seemed to enjoy it.

Take-aways from Give Camp (besides the salmon pretending to be swordfish)
I learned several lessons from this experience.

* When starting a project, things go MUCH better if you know what is most important to complete to least important. You also need some way to know who is working on what.

* Source code control is a must! If you are working on a project alone, you can go back and see what things looked like before if it quits working as expected. If you are working on a team, it is NOT optional.

* Each developer should have their own development environment. Having a local copy of Joomla and Moodle on my laptop allowed me to work on my tasks without stomping all over Joel's, Sarah's, or Chris's changes if I happened to touch the same file. If we did touch the same file, we could merge all our changes together thanks to git. See above point about source code control.

* Community - It was just amazing to see how much could be accomplished by a community of people all working toward the same goal: how much can we get done for these charities in one weekend? This also allowed for some knowledge and talent to hop from group to group such as getting some help with PhotoShop and CSS when we needed it.

Traits of programmers who show up to Give Camp
What really impressed me about GiveCamp was how much fun it was. I think it would not have happened if anyone there was a jerk or pretending to know more than they actually knew. Thinking about it, I think it was this way because only particular types of programmers would even consider participating in GiveCamp.

* Social - a programmer who is completely antisocial would not have found out about Give Camp. The only way to find out about it was some level of involvement in the development communtiy.

* Giving - there's a certain kind of person who volunteers a weekend to help out other people at no charge with no strings attached. These people are much more fun to be around than the average bear.

* Confident - part of Give Camp is that you have just a weekend to complete a programming project. It takes a certain amount of confidence to even think of attempting this, and a certain amount of technical skills to gain this much confidence.

Addicted
I absolutely cannot wait for next year's GiveCamp! I can't remember last time I had this much fun programming and have already started to look for events like it before next July. The only things I can think of for sure would be other GiveCamps and hackathons. Unfortunately the only other GiveCamp schduled that I know of is Grand Rapids Give Camp in November. I don't think I will be able to make that one. And the only open source project I know of doing hackathons is OpenBSD, and theirs is in Canada on the other side of the continent. Maybe other projects just call theirs something different?

While I may not be able to find a Give Camp to go to between now & the next one, I think I can do the next best thing: be more involved in the programming community. There are some very active user groups and events in Columbus. Erubycon, Ohio Linux Fest, Columbus Ruby Brigade, and COLUG (Central Ohio Linux Users' Group) all come to mind. I'm sure there are a couple more that would interest me I could get involved in.

Monday, July 20, 2009

Life changing experiences

I have not been able to update this blog nearly as often as I should. Recently I had a life-changing experience that has changed my focus. As of May 6, 2009, I'm a dad! I'm the proud father of a little girl: Zoe Drobnack.

One cool thing: as of this writing, if you search for her name with quotes on Google, you get no search results at all. How often can you say that? Let's see how long it takes to show up with one search result.

Expect more updates shortly as I share my experiences from this past weekend's event: Columbus Give Camp 2009.