<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>Personal blog. Mostly photos.</description><title>Daniel Pietzsch</title><generator>Tumblr (3.0; @danielpietzsch)</generator><link>https://blog.danielpietzsch.com/</link><item><title>Say Hello to Octicons</title><description>&lt;a href="https://github.com/blog/1106-say-hello-to-octicons"&gt;Say Hello to Octicons&lt;/a&gt;: &lt;p&gt;GitHub started using a custom font for their icons. Totally my taste. I try to get by without graphics as much as I can myself. Of course, that’s partly because of me being bad at creating them. But it’s also because it has its advantages:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We try to leverage CSS3 techniques like rounded corners, gradients, and @font-face across all pages of the site. This allows us to focus more on what we can render in the browser, and less on images. This results in better page loads and an overall better experience for you.&lt;/p&gt;
  
  &lt;p&gt;Not only are we concerned with speed, but also clarity. With the introduction of new retina screen products, we realize that it’s more important than ever to have our site beautiful at any zoom level.&lt;/p&gt;
&lt;/blockquote&gt;</description><link>https://blog.danielpietzsch.com/post/23195319074</link><guid>https://blog.danielpietzsch.com/post/23195319074</guid><pubDate>Thu, 17 May 2012 02:01:21 +0200</pubDate><category>coding</category><category>software</category><category>links</category></item><item><title>Running a Rails app in production using rbenv, Apache and Passenger</title><description>&lt;p&gt;Recently, I upgraded &lt;a href="http://nzwalksinfo.co.nz/" title="NZ Walks Information"&gt;NZ Walks Info&lt;/a&gt; to Rails 3 and Ruby 1.9.3. In order to run this new setup successfully, I needed to upgrade the Ruby version on the server. I chose &lt;a href="https://github.com/sstephenson/ruby-build"&gt;ruby-build&lt;/a&gt; and the &lt;a href="https://github.com/sstephenson/rbenv"&gt;rbenv&lt;/a&gt; Ruby Version Manager to do so and would like to share some simple instructions that worked for me.&lt;/p&gt;

&lt;h3&gt;The Setup&lt;/h3&gt;

&lt;p&gt;I am running the site on a &lt;a href="https://www.linode.com/"&gt;Linode&lt;/a&gt; server running Ubuntu Linux 10.04. Here&amp;rsquo;s the software I use:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Ruby 1.8.7: installed system-wide using apt-get, located in &lt;code&gt;/usr/lib/ruby&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://httpd.apache.org/" title="Welcome! - The Apache HTTP Server Project"&gt;Apache2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.modrails.com/" title="Overview — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)"&gt;Passenger 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Ruby was going to be upgraded to version 1.9.3 while the other parts stayed the same. However, Passenger 3 needed to be reinstalled to work with the new version of Ruby installed via rbenv.&lt;/p&gt;

&lt;h3&gt;Installing Ruby 1.9.3 on Ubuntu 10.04 using rbenv&lt;/h3&gt;

&lt;p&gt;I found &lt;a href="https://gist.github.com/1237417"&gt;this Gist&lt;/a&gt; by Ben Woodward with instructions on how to install rbenv system-wide. I figured, when installing it like this I would less likely run into permission problems.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s the essential part of the Gist, adjusted to install Ruby 1.9.3:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Install rbenv
git clone git://github.com/sstephenson/rbenv.git /usr/local/rbenv

# Add rbenv to the path:
echo '# rbenv setup' &amp;gt; /etc/profile.d/rbenv.sh
echo 'export RBENV_ROOT=/usr/local/rbenv' &amp;gt;&amp;gt; /etc/profile.d/rbenv.sh
echo 'export PATH="$RBENV_ROOT/bin:$PATH"' &amp;gt;&amp;gt; /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' &amp;gt;&amp;gt; /etc/profile.d/rbenv.sh

chmod +x /etc/profile.d/rbenv.sh
source /etc/profile.d/rbenv.sh

# Install ruby-build:
pushd /tmp
  git clone git://github.com/sstephenson/ruby-build.git
  cd ruby-build
  ./install.sh
popd

# Install Ruby 1.9.3-p0:
rbenv install 1.9.3-p0
rbenv global 1.9.3-p0

# Rehash:
rbenv rehash
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Confirming that I am running the new version:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ruby -v
# ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Updating Passenger&lt;/h3&gt;

&lt;p&gt;Now I needed to update Passenger to work with the new version of Ruby. All there was to do was to install the passenger gem, following the &lt;a href="http://www.modrails.com/install.html" title="Install — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)"&gt;instructions on their website&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem install passenger

passenger-install-apache2-module
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;At the end of the installation, I got the configuration lines to paste into the Apache2 config file. I replaced my old settings with these updated ones:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;LoadModule passenger_module /usr/local/rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/passenger-3.0.11
PassengerRuby /usr/local/rbenv/versions/1.9.3-p0/bin/ruby
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Bundler&lt;/h3&gt;

&lt;p&gt;The only thing that was missing to be able to deploy my Rails 3/Ruby 1.9 version of my app was to install &lt;a href="http://gembundler.com/" title="Bundler: The best way to manage Ruby applications"&gt;Bundler&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gem install bundler
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Done&lt;/h3&gt;

&lt;p&gt;This was all that needed to be done to upgrade the Ruby version on my Linux/Ubuntu system using rbenv. I hope these instructions will help someone else, too.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/14005159872</link><guid>https://blog.danielpietzsch.com/post/14005159872</guid><pubDate>Sat, 10 Dec 2011 07:41:00 +0100</pubDate><category>coding</category><category>writings</category><category>howto</category><category>software development</category></item><item><title>Pow and Rails 2.3.x apps</title><description>&lt;p&gt;&lt;a href="http://pow.cx/" title="Pow: Zero-configuration Rack server for Mac OS X"&gt;Pow&lt;/a&gt; has just been released by &lt;a href="http://37signals.com/" title="37signals: Web-based collaboration apps for small business"&gt;37signals&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Knock Out Rails &amp;amp; Rack Apps Like a Superhero.&lt;br/&gt;
  Pow is a zero-config Rack server for Mac OS X. Have it serving your apps locally in under a minute.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Usually, there&amp;rsquo;s no configuration needed at all, but in order to get my old Rails 2.3.x apps running, I needed to &amp;ldquo;rackup&amp;rdquo; all of these. Following the &lt;a href="http://guides.rubyonrails.org/v2.3.10/rails_on_rack.html#rackup" title="Ruby on Rails Guides: Rails on Rack"&gt;Rails Guides instructions&lt;/a&gt;, I had to create a config.ru file with the following contents:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# RAILS_ROOT/config.ru
require "config/environment"

use Rails::Rack::LogTailer
use Rails::Rack::Static
run ActionController::Dispatcher.new
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then I was good to go.&lt;br/&gt;
Unless&amp;hellip;&lt;/p&gt;

&lt;p&gt;When I tried to symlink the app in the &lt;code&gt;~/.pow&lt;/code&gt; directory - as described on &lt;a href="http://pow.cx/" title="Pow: Zero-configuration Rack server for Mac OS X"&gt;the pow homepage&lt;/a&gt; - I got the following error:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~/.pow $ ln -s /path/to/myapp
ln: ./: File exists
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But that was easy. I just had to add the name of the symlink explicitly:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;~/.pow $ ln -s /path/to/myapp myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now, I was really up and running with my Rails 2.3.x apps and pow. &lt;a href="http://twitter.com/#!/pie4dan/status/4391706623475712" title="Twitter"&gt;Bye bye Passenger&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;(Be sure to have a look at the &lt;a href="http://pow.cx/docs/" title="index.coffee"&gt;documentation&lt;/a&gt;. It&amp;rsquo;s the best source code documentation I&amp;rsquo;ve ever seen.)&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/4431336602</link><guid>https://blog.danielpietzsch.com/post/4431336602</guid><pubDate>Fri, 08 Apr 2011 04:12:00 +0200</pubDate><category>coding</category><category>writings</category><category>howto</category><category>software development</category></item><item><title>Feature Branches</title><description>&lt;p&gt;When I am creating a new feature for an app, I sometimes realize halfway through that the way I am building it, is not the proper way to do so. Or the specification changes. Or there was a misunderstanding. Or there&amp;rsquo;s an unexpected bug that needs to be fixed and go onto the production server as soon as possible.&lt;br/&gt;
Then, when you did all development on the main branch (&lt;a href="http://www.trifectagis.com/" title="Trifecta | Homepage"&gt;we&lt;/a&gt; use &lt;a href="http://git-scm.com/" title="Git - Fast Version Control System"&gt;Git&lt;/a&gt;, so that&amp;rsquo;s the &lt;em&gt;master&lt;/em&gt; branch in that case), undoing things and/or doing a quick deployment can get very inconvenient. You can&amp;rsquo;t just deploy a quick bug fix, because all other half-finished features and fixes would have to be deployed, too. You can&amp;rsquo;t easily revert the existing commits for that feature, especially if the commits are mixed with all the other commits of unrelated features.&lt;/p&gt;

&lt;p&gt;A good way to get rid of this problem is to create a local feature branch &lt;em&gt;every time&lt;/em&gt; you want to work on a new feature. That branch doesn&amp;rsquo;t need to be pushed to the remote repository on the server. It&amp;rsquo;s just for you.&lt;br/&gt;
Then, all development for that feature happens in this branch exclusively. For every new feature a new branch is created. After a feature has been implemented completely, merge it back to the master branch (or whatever branch is appropriate). With Git, that&amp;rsquo;s super easy:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# create a new branch new_feature based on master and switch to it
git checkout -b new_feature master

# when you're done, merge it back
git checkout master
git merge new_feature

# when you are sure everything is working properly
# and no further work needs to be done for this feature,
# you can delete the feature branch again:
git branch -d new_feature
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Too often I thought, &amp;ldquo;I won&amp;rsquo;t need an extra feature branch for that&amp;rdquo;. But all it takes is one simple Git command to create one (and it&amp;rsquo;s probably equally simple in other modern &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control" title="Distributed revision control - Wikipedia, the free encyclopedia"&gt;DVCSes&lt;/a&gt;). It will make your life easier when coding new features.&lt;/p&gt;

&lt;h3&gt;Bonus tip&lt;/h3&gt;

&lt;p&gt;If you decide you want to discard all the development on a particular branch, except for one or two commits, you can &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html" title="git-cherry-pick(1)"&gt;cherry pick&lt;/a&gt; these commits from the discarded branch:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# say, you have a commit 'bd42c4e7' you would like to keep
# switch to the branch you want to copy the commit to
git checkout master

# copy it
git cherry-pick bd42c4e7
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Update&lt;/em&gt;&lt;/strong&gt;: there&amp;rsquo;s a nice post on the &lt;a href="http://robots.thoughtbot.com"&gt;Giant Robots&lt;/a&gt; blog which I like to recommend for further reading: &lt;a href="http://robots.thoughtbot.com/post/4747482956/streamline-your-git-workflow-with-aliases"&gt;Streamline your git workflow with aliases&lt;/a&gt;.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/2630069679</link><guid>https://blog.danielpietzsch.com/post/2630069679</guid><pubDate>Fri, 07 Jan 2011 02:18:00 +0100</pubDate><category>coding</category><category>writings</category><category>software development</category></item><item><title>Mix &amp; Mash Recap</title><description>&lt;p&gt;I couldn&amp;rsquo;t believe my eyes when the winners of the 2010 &lt;a href="http://www.mixandmash.org.nz" title="mix &amp;amp; mash - the great NZ remix &amp;amp; mashup competition"&gt;Mix and Mash competition&lt;/a&gt; were announced last Friday on &lt;a href="http://twitter.com/#!/search/%23mixmash" title=""&gt;Twitter&lt;/a&gt;. I read my name for the price of the &lt;a href="http://www.mixandmash.org.nz/winners/visitor.html" title="mix &amp;amp; mash - the great NZ remix &amp;amp; mashup competition"&gt;&amp;ldquo;Best Visitor Experience using DOC Data&amp;rdquo;&lt;/a&gt; &lt;em&gt;and&lt;/em&gt; the &lt;a href="http://www.mixandmash.org.nz/winners/suprememashup.html" title="mix &amp;amp; mash - the great NZ remix &amp;amp; mashup competition"&gt;&amp;ldquo;Supreme Mashup&amp;rdquo;&lt;/a&gt; categories (the &amp;ldquo;Supreme Mashup&amp;rdquo; is the highest price).&lt;br/&gt;
This is more than I have hoped for and a great honour.&lt;/p&gt;

&lt;p&gt;The Mix and Mash competition is about creating useful and beautiful mashups and remixes with open data from New Zealand institutions.&lt;/p&gt;

&lt;p&gt;My entry is a website to find information about all NZ walking/tramping/hiking tracks: &lt;a href="http://nzwalksinfo.co.nz/" title="New Zealand Walks Information"&gt;http://nzwalksinfo.co.nz/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ldcb4ulV8C1qzm9x2.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;Motivation&lt;/h3&gt;

&lt;p&gt;The minute I saw that the &lt;a href="http://www.doc.govt.nz/" title="Department of Conservation"&gt;Department of Conservation&lt;/a&gt; made available all the geo data of their walking tracks and huts, I knew I wanted to build a website with this data.&lt;/p&gt;

&lt;p&gt;The main idea of the site is to get relevant information on walking tracks in a very visual way. While there are lots of tramping websites already (including the excellent website of the &lt;a href="http://www.doc.govt.nz/" title="Department of Conservation"&gt;DOC&lt;/a&gt; itself), I always found it quite tedious to get to some important information quickly - if it was provided at all.&lt;/p&gt;

&lt;p&gt;Here are some of the questions I ask myself quite often and that I think are tedious to answer with existing sites:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;What tracks are available near my current location or a location I&amp;rsquo;m interested in visiting?&lt;/li&gt;
&lt;li&gt;Will it be stressful with a lot of ups and downs?&lt;/li&gt;
&lt;li&gt;Will I only walk through forest or will I have some nice views along the way?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;While I haven&amp;rsquo;t answered all of these question to my full satisfaction, yet, I think this first version is a very good starting point.&lt;br/&gt;
The elevation profile for example was a top priority for me, because it&amp;rsquo;s so important in my opinion. But yet I can&amp;rsquo;t find this information most of the time. The DOC makes some elevation profiles available, but only for very few tracks and then you have to get a brochure from a DOC office or download the PDF file.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_ldcb5rYjZo1qzm9x2.jpg" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;Future development&lt;/h3&gt;

&lt;p&gt;Of course, I wanted to do more for this entry, but I ran out of time. I think the site is useful already (eh&amp;hellip; obviously ;-)), but it can become a lot more useful in the future while sticking to a simple, uncluttered user interface.&lt;br/&gt;
I have lots of ideas and I hope I can implement them in the months to come. Winning the competition definitely is plenty of fuel for my motivation.&lt;/p&gt;

&lt;h3&gt;Mix and Mash is great&lt;/h3&gt;

&lt;p&gt;I love the idea behind the competition and I think all entries show that it&amp;rsquo;s a brilliant idea for NZ institutions to make their data available freely. I think it is a great success. Please check out &lt;a href="http://www.mixandmash.org.nz/awards.html" title="mix &amp;amp; mash - the great NZ remix &amp;amp; mashup competition"&gt;all the other exciting entries on the Mix and Mash website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thank you for this awesome competition. It makes the internet better.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/2192627623</link><guid>https://blog.danielpietzsch.com/post/2192627623</guid><pubDate>Mon, 13 Dec 2010 01:32:00 +0100</pubDate><category>coding</category><category>writings</category><category>projects</category><category>software development</category></item><item><title>“Why Ruby?” - RubyConf X Keynote (by David...</title><description>&lt;iframe src="https://player.vimeo.com/video/17420638?title=0&amp;byline=0&amp;portrait=0&amp;app_id=122963" width="400" height="225" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen title="&amp;quot;Why Ruby?&amp;quot; - RubyConf X Keynote"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://vimeo.com/17420638"&gt;“Why Ruby?” - RubyConf X Keynote&lt;/a&gt; (by &lt;a href="http://vimeo.com/user2454935"&gt;David Heinemeier Hansson&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Great talk. Good points and entertaining.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/2129633521</link><guid>https://blog.danielpietzsch.com/post/2129633521</guid><pubDate>Tue, 07 Dec 2010 06:43:06 +0100</pubDate><category>coding</category><category>links</category></item><item><title>Marco.org: My Default.png dilemma</title><description>&lt;a href="http://www.marco.org/1548306059"&gt;Marco.org: My Default.png dilemma&lt;/a&gt;: &lt;p&gt;More inspiring Instapaper development insights…&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/1549517622</link><guid>https://blog.danielpietzsch.com/post/1549517622</guid><pubDate>Fri, 12 Nov 2010 05:29:00 +0100</pubDate><category>coding</category><category>software</category><category>links</category><category>software development</category></item><item><title>Instapaper Blog: Instapaper 2.3 for iPhone and iPad now available</title><description>&lt;a href="http://blog.instapaper.com/post/1538890633"&gt;Instapaper Blog: Instapaper 2.3 for iPhone and iPad now available&lt;/a&gt;: &lt;p&gt;Great update for one of my favorite iPad apps, including a new feature I have been waiting for (length &amp; progress indicators). But what really strikes me with this update and &lt;a href="http://blog.instapaper.com/post/1538890633"&gt;blog post&lt;/a&gt;, is to see how much thought goes into Instapaper’s features and &lt;a href="http://www.marco.org/" title="Marco.org"&gt;Marco’s&lt;/a&gt; attention to detail.&lt;br/&gt;
Just look at the section about the new automatic dark mode preference:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can now have Instapaper automatically use dark mode at night and normal (light) mode during the day.&lt;/p&gt;
  
  &lt;p&gt;But how, exactly, do you define “night”? There’s no API access to the iPhone’s ambient light sensor, so I can’t just enable dark mode in dark rooms.&lt;/p&gt;
  
  &lt;p&gt;And I can’t just define hour boundaries, because 8 PM in December is much darker than 8 PM in June.&lt;/p&gt;
  
  &lt;p&gt;And I can’t just look at hours and the date, because 5 PM in December is much darker in Alaska than in Costa Rica.&lt;/p&gt;
  
  &lt;p&gt;So I used with the most reliable method I could think of: sunset times in your location. Yes, Instapaper is now location-aware, but only for this feature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I love this.&lt;br/&gt;
For example, he could have presented that slot-machine-ish control to the user to set the time range when it’s dark. He didn’t and I think that’s awesome, because it makes it almost effortless for the user to use the feature. And it’s very clever.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/1540779412</link><guid>https://blog.danielpietzsch.com/post/1540779412</guid><pubDate>Thu, 11 Nov 2010 07:21:00 +0100</pubDate><category>coding</category><category>links</category><category>software development</category><category>software</category></item><item><title>Rails Rumble Recap</title><description>&lt;p&gt;During the weekend of October 16th and 18th, I participated in the &lt;a href="http://railsrumble.com/" title="Rails Rumble 2010"&gt;Rails Rumble 2010&lt;/a&gt; coding competition. The exercise was to build a web app from scratch in 48 hours using &lt;a href="http://www.ruby-lang.org/" title="Ruby Programming Language"&gt;Ruby&lt;/a&gt; and &lt;a href="http://rubyonrails.org/" title="Ruby on Rails"&gt;Rails&lt;/a&gt;.&lt;br/&gt;
Our team consisted of 3 people: &lt;a href="http://tim-keller.tumblr.com/" title="Tim Keller - It's All About Passion"&gt;Tim&lt;/a&gt;, &lt;a href="http://www.systems-engineer.net/" title="Systems-Engineer.net :: webdesign :: application development :: graphics"&gt;Falk&lt;/a&gt; and &lt;a href="http://www.danielpietzsch.com/" title="Daniel Pietzsch"&gt;myself&lt;/a&gt;.&lt;br/&gt;
The app we produced: &lt;a href="http://li226-67.members.linode.com/" title="Pianrra - Make Music // Record it! Share it! Have fun!"&gt;Pianrra&lt;/a&gt; - An online keyboard with recording and playback functionality.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://64.media.tumblr.com/tumblr_lbnp3j558h1qzm9x2.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;It was a rather spontaneous decision to participate. Falk and I joined Tim - who had registered ealier - only one week before the competition started. Then the planning and prototyping started.&lt;br/&gt;
The main reason we participated was to have fun, build something interesting and get smarter (although a little fame and a prize wouldn&amp;rsquo;t have bothered us, either). That&amp;rsquo;s also the reason why we chose to implement this particular idea of an online keyboard. It was the most unusual, risky, and exciting idea of all the ones we discussed in the week before the Rumble.&lt;/p&gt;

&lt;p&gt;The Rails Rumble is a great exercise in collaboration - especially when you work with a team as distributed as ours. Tim and Falk were working from two different cities in Germany while I was hacking away in New Zealand.&lt;br/&gt;
Here are some of my insights.&lt;/p&gt;

&lt;h3&gt;Plan ahead&lt;/h3&gt;

&lt;p&gt;You can plan a lot of your project beforehand. This is crucial. When all of the planning is done before the competion, you can fully concentrate on the implementation during the 48 hours.&lt;br/&gt;
You aren&amp;rsquo;t allowed to produce any production ready code or graphics, but there is still plenty you can do. Here are some suggestions of what to think about:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;What app are you going to produce?&lt;/li&gt;
&lt;li&gt;What technologies/plugins are you going to use?&lt;/li&gt;
&lt;li&gt;How&amp;rsquo;s the user interface going to look like? Create Sketches!&lt;/li&gt;
&lt;li&gt;How are your users going to interact with the site? What&amp;rsquo;s the workflow?&lt;/li&gt;
&lt;li&gt;What is your database model going to look like?&lt;/li&gt;
&lt;li&gt;What name do you give your product?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Everything you can plan in advance, should be. Unfortunately we didn&amp;rsquo;t have the time to do so and decided a lot of things during the competition. So there is definitely much room for improvement next time.&lt;/p&gt;

&lt;h3&gt;Write it down&lt;/h3&gt;

&lt;p&gt;When you plan all this stuff, write it down! Use a tool of your choice where your team can collaborate easily. This is especially important if you&amp;rsquo;re &lt;em&gt;not&lt;/em&gt; sitting in the same room during the competition.&lt;br/&gt;
We used &lt;a href="http://basecamphq.com/" title="Project management software, online collaboration: Basecamp"&gt;Basecamp&lt;/a&gt; to do so and I think it helped a lot. Writing it down helped to clarify the vision for the project (&amp;lsquo;What &lt;em&gt;exactly&lt;/em&gt; are we going to build?&amp;rsquo;) and helped to agree on the technologies we are going to use. It definitely eliminated most (if not all) of the existing misunderstandings among the team members.&lt;/p&gt;

&lt;p&gt;Additionally, create a list of to-dos and assign each of them to a specific person. It helped us to stay focused, agree on features and - this might seem obvious, but really isn&amp;rsquo;t - everybody knows what everybody else is doing. (Again, this is especially important if you only collaborate online).&lt;/p&gt;

&lt;p&gt;For me, in order for a project to be successful, good communication is essential. And writing down goals, tools, features, to-dos etc. was and is an important part.&lt;/p&gt;

&lt;h3&gt;UI is important&lt;/h3&gt;

&lt;p&gt;Rails Rumble confirmed to me again, that the UI is the most important part of the software. What are all your amazing features worth when almost nobody can figure out how to use them? Right. Not much.&lt;br/&gt;
I won&amp;rsquo;t say that it was &lt;em&gt;that&lt;/em&gt; bad in our case, but we certainly had quite a number of confused users. We made quite a few quick decisions during the competition (especially towards the end) and these obviously weren&amp;rsquo;t the best. We also struggled with finishing on time and so certain features and improvements didn&amp;rsquo;t make it. Additionally we also had to deal with more or less unexpected browser and OS incompatibilities. If we had planned beforehand, this would have been less of on issue.&lt;/p&gt;

&lt;p&gt;So: get your UI, workflow and copywriting right!&lt;br/&gt;
There&amp;rsquo;s a lot of competition during Rails Rumble and people simply don&amp;rsquo;t have the time and/or energy to figure stuff out for every app. I know this from myself: I looked at every of &lt;a href="http://railsrumble.com/teams" title="Rails Rumble 2010"&gt;the other 179 apps&lt;/a&gt;, and when something wasn&amp;rsquo;t clear to me, didn&amp;rsquo;t work etc. I just moved on to the next one.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Altogether it was great fun. Sometimes stressful and exhausting, but still fun. We learned a lot and successfully delivered a working application. I am really looking forward to next year&amp;rsquo;s edition.&lt;/p&gt;

&lt;p&gt;Check out our app &lt;a href="http://li226-67.members.linode.com/" title="Pianrra - Make Music // Record it! Share it! Have fun!"&gt;Pianrra&lt;/a&gt;. (You might need these &lt;a href="http://railsrumble.com/teams/in-the-jungle" title="Rails Rumble 2010"&gt;instructions&lt;/a&gt;.)&lt;/p&gt;

&lt;hr&gt;&lt;h3&gt;Miscellaneous Notes&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;Working in two very different time zones (GMT+1 and GMT+13) is awesome. You can work around the clock.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.janrain.com/products/engage" title="Janrain Engage (formerly RPX) | Janrain"&gt;Janrain Engage&lt;/a&gt; authentication worked beautifully. It saved us lots of time.&lt;/li&gt;
&lt;li&gt;I used &lt;a href="http://basecamphq.com/" title="Project management software, online collaboration: Basecamp"&gt;Basecamp&lt;/a&gt; for the first time. Loved it. There was no learning curve and it&amp;rsquo;s very intuitive.&lt;/li&gt;
&lt;li&gt;We kept in touch via &lt;a href="http://www.skype.com/" title="Free internet calls and cheap phone calls  - Skype"&gt;Skype&lt;/a&gt;&amp;rsquo;s group chat and conference calls.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.railsrumble.com/blog/2010/10/02/tfg-sprint-planning" title="Rails Rumble :: Get Organized -- Rumble Sprint Planning"&gt;Splitting the project into two sprints&lt;/a&gt; worked very well.&lt;/li&gt;
&lt;/ul&gt;</description><link>https://blog.danielpietzsch.com/post/1532125924</link><guid>https://blog.danielpietzsch.com/post/1532125924</guid><pubDate>Wed, 10 Nov 2010 07:48:00 +0100</pubDate><category>coding</category><category>writings</category><category>projects</category><category>software development</category></item><item><title>Nice tip in the latest Heroku newsletter: “Use Git Tags to...</title><description>&lt;img src="https://64.media.tumblr.com/tumblr_l9wdrdTG0R1qa3r7do1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Nice tip in the latest &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt; newsletter: “Use Git Tags to Manage Versions”.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/1259617913</link><guid>https://blog.danielpietzsch.com/post/1259617913</guid><pubDate>Thu, 07 Oct 2010 04:04:25 +0200</pubDate><category>coding</category></item><item><title>Show the version number of your Rails app using Git</title><description>&lt;p&gt;I use &lt;a href="http://progit.org/book/ch2-10.html" title="Pro Git - Pro Git 2.10 Git Basics Tagging"&gt;Git tags&lt;/a&gt; to manage the version numbers of my Rails apps. Every time a new version is ready, I tag the current commit like this&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git tag -a v2.3 -m "adding version tag v2.3"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;My &lt;em&gt;environment.rb&lt;/em&gt; file defines a constant to hold this information (in this case &amp;ldquo;v2.3&amp;rdquo;):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;APP_VERSION = `git describe --always` unless defined? APP_VERSION
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This constant simply contains the output of &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-describe.html" title="git-describe(1)"&gt;Git describe&lt;/a&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;. Now I can use it anywhere in my app where I would like to display the version number.&lt;/p&gt;

&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:1" role="doc-endnote"&gt;
&lt;p&gt;You are using &lt;a href="http://semver.org/" title="Semantic Versioning"&gt;semantic versioning&lt;/a&gt;, right? &lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:2" role="doc-endnote"&gt;
&lt;p&gt;The backticks execute a shell command. Here&amp;rsquo;s more information: &lt;a href="http://gist.github.com/4069" title="gist: 4069 - Shell Execution in Ruby- GitHub"&gt;http://gist.github.com/4069&lt;/a&gt; &lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>https://blog.danielpietzsch.com/post/1209091430</link><guid>https://blog.danielpietzsch.com/post/1209091430</guid><pubDate>Wed, 29 Sep 2010 08:04:41 +0200</pubDate><category>coding</category><category>writings</category><category>software development</category></item><item><title>Ruby/ProgressBar: A Text Progress Bar Library for Ruby</title><description>&lt;a href="http://github.com/nex3/ruby-progressbar"&gt;Ruby/ProgressBar: A Text Progress Bar Library for Ruby&lt;/a&gt;: &lt;p&gt;This nice little Ruby library/gem/plugin is a great helper when you need to execute long running tasks from the terminal.&lt;br/&gt;
As the name suggests, it displays the progress of the task and even gives you an &lt;abbr title="Estimated Time of Arrival"&gt;ETA&lt;/abbr&gt; for when it thinks it will be done.&lt;br/&gt;
Check their examples:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% irb --simple-prompt -r progressbar
&gt;&gt; pbar = ProgressBar.new("test", 100)
=&gt; (ProgressBar: 0/100)
&gt;&gt; 100.times {sleep(0.1); pbar.inc}; pbar.finish
test:          100% |oooooooooooooooooooooooooooooooooooooooo| Time: 00:00:10
=&gt; nil

&gt;&gt; pbar = ProgressBar.new("test", 100)
=&gt; (ProgressBar: 0/100)
&gt;&gt; (1..100).each{|x| sleep(0.1); pbar.set(x)}; pbar.finish
test:           67% |oooooooooooooooooooooooooo              | ETA:  00:00:03
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I used it a lot for rake tasks that convert/import/export tons of data.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/1125417119</link><guid>https://blog.danielpietzsch.com/post/1125417119</guid><pubDate>Wed, 15 Sep 2010 09:29:53 +0200</pubDate><category>coding</category><category>links</category><category>software</category></item><item><title>Polyglot (computing)</title><description>&lt;a href="http://en.wikipedia.org/wiki/Polyglot_%28computing%29"&gt;Polyglot (computing)&lt;/a&gt;: &lt;p&gt;&lt;a href="http://mwunsch.tumblr.com/post/402876465/polyglot-computing" class="tumblr_blog"&gt;mwunsch&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;What I’m looking at on Wikipedia, right now.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;In the context of computing, a &lt;strong&gt;polyglot&lt;/strong&gt; is a computer program or script written in a valid form of multiple programming languages, which performs the same operations or output independently of the programming language used to compile or interpret it.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;Here’s more from this article:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The two most commonly used techniques for constructing a polyglot program are to make liberal use of languages which use different characters for comments and to redefine various tokens as others in different languages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Weird stuff. Check out the example of the &lt;a href="http://en.wikipedia.org/wiki/Polyglot_%28computing%29"&gt;article&lt;/a&gt; to see such a “thing”.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/555593535</link><guid>https://blog.danielpietzsch.com/post/555593535</guid><pubDate>Wed, 28 Apr 2010 11:57:58 +0200</pubDate><category>coding</category><category>links</category><category>software development</category></item><item><title>CSS3 + Progressive Enhancement = Smart Design</title><description>&lt;a href="http://perishablepress.com/press/2010/01/11/css3-progressive-enhancement-smart-design/"&gt;CSS3 + Progressive Enhancement = Smart Design&lt;/a&gt;: &lt;blockquote&gt;
  &lt;p&gt;Support all browsers to some degree – focus first on the latest and greatest browsers, and then go back and make sure that older browsers look and work reasonably well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This reflects precisely my approach to creating a website/webapp. I love the new features of CSS3 so much, because they enable me - as a developer - to create a decent UI without having to mess around in Photoshop or write tedious, non-semantic markup just to create good looking buttons, rounded corners etc. The design is implemented quicker, is flexible and the site loads faster, too.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The idea here is to begin with a nice, well-styled presentation that looks good in even archaic browsers like IE6. This is a good thing because even visitors using crappy browsers will be able to read and interact with your content. But instead of stopping there, progressive enhancement says, “let’s provide some additional features for people using better browsers.” After all, people using awesome browsers like Firefox, Safari, and Opera want the best experience possible from the Web. Progressive enhancement says, “let’s give it to them, but only after the less-capable crowd has been taken care of first.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unfortunately, when you have a lot of IE users and want to present your site in the best possible way, you have to bite the bullet and create all those buttons and rounded corners in Photoshop.&lt;br/&gt;
But I think the ‘progressive enhancement’ method is the best thing you can do. You can offer the best possible visual experience for those who use the latest and most advanced browsers at relative low costs. And for those who use older browsers - well, they probably do not care that much about having the best possible experience on the web anyway.&lt;/p&gt;

&lt;p&gt;Altogether, the &lt;a href="http://perishablepress.com/press/2010/01/11/css3-progressive-enhancement-smart-design/"&gt;article&lt;/a&gt; is a good read and also provides practical information on the new CSS3 techniques - some of which you might not have heard of yet.&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/348568244</link><guid>https://blog.danielpietzsch.com/post/348568244</guid><pubDate>Sat, 23 Jan 2010 07:06:19 +0100</pubDate><category>Css</category><category>design</category><category>coding</category><category>links</category><category>software development</category></item><item><title>Rails Model, View, Controller, and Helper: what goes where? -...</title><description>&lt;img src="https://64.media.tumblr.com/tumblr_kw7olfYoOV1qa3r7do1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://stackoverflow.com/questions/60658/rails-model-view-controller-and-helper-what-goes-where"&gt;Rails Model, View, Controller, and Helper: what goes where? - Stack Overflow&lt;/a&gt;&lt;/p&gt;</description><link>https://blog.danielpietzsch.com/post/333170904</link><guid>https://blog.danielpietzsch.com/post/333170904</guid><pubDate>Thu, 14 Jan 2010 01:41:39 +0100</pubDate><category>MVC</category><category>coding</category><category>links</category><category>software development</category></item></channel></rss>
