<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
  <title>Hendrik Volkmer</title>
  <subtitle>Refactoring Life. Mercilessly.</subtitle>
  <link href="http://blog.hendrikvolkmer.de//" rel="self" />
  <link href="http://blog.hendrikvolkmer.de/" />
  <updated>2009-05-03T17:39:49+02:00</updated>
  <author>
    <name>Hendrik Volkmer</name>
    <email>solaris@sundevil.de</email>
  </author>
  <id>http://blog.hendrikvolkmer.de/</id>
  
  <entry>
    <title>Running an Ioke web application on Google App Engine using Ikanserve</title>
    <link href="/2009/4/8/running-ikanserve-on-google-app-engine/" />
    <id>tag:blog.hendrikvolkmer.de,2009-04-08:1239188987</id>
    <updated>2009-04-08T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;I like to play around with interesting technologies. So what&amp;#8217;s on the table today?&lt;/p&gt;
&lt;p&gt;1. &lt;a href=&quot;http://appengine.google.com/&quot;&gt;Google App Engine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;a href=&quot;http://www.ioke.org&quot;&gt;Ioke E&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;a href=&quot;http://olabini.com/blog/2009/03/ikanserve-an-ioke-web-framework/&quot;&gt;Ikanserve&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google App Engine allows you to run Java applications since a few days. But as no one writes web apps in Java anymore you could either use &lt;a href=&quot;http://olabini.com/blog/2009/04/jruby-on-rails-on-google-app-engine/&quot;&gt;JRuby on App Engine&lt;/a&gt; or try out another fine language on the JVM. (That&amp;#8217;s why I think the JVM kicks ass and I still like it after several years of programming mostly in Ruby: It&amp;#8217;s a great plattform to run things&amp;#8230; not just Java programms but any language that&amp;#8217;s on the JVM. And there will be more&amp;#8230;). But I digress&amp;#8230;&lt;/p&gt;
&lt;p&gt;So, let&amp;#8217;s get into it:&lt;/p&gt;
&lt;p&gt;0. Create a temp dir to play in&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ mkdir appgarage
$ cd appgarage
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;1. &lt;a href=&quot;http://appengine.google.com/&quot;&gt;Get an App Engine Account&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Sign Up for the &lt;a href=&quot;http://appengine.google.com/promo/java_signup&quot;&gt;Java App Engine Account&lt;/a&gt; &amp;#8211; According to TechCrunch the first 10k developers get an account. So hurry up!&lt;/p&gt;
&lt;p&gt;3. Get ioke E&lt;/p&gt;
&lt;p&gt;You need git and java 1.6 to do that.&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ git clone git://github.com/olabini/ioke.git
$ cd ioke
$ ant
$ cd ..
&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;3. Get Ikanserve&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ git clone git://github.com/olabini/ikanserve.git
$ cd ikanserve
$ ant
$ cd ..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4. &lt;a href=&quot;http://code.google.com/appengine/downloads.html&quot;&gt;Get the Java App Engine SDK&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ unzip appengine-java-sdk-1.2.0.zip
$ cd appengine-java-sdk-1.2.0
$ cd ..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Optional: Try out the app engine demos and/or the ikanserve demo locally&lt;/p&gt;
&lt;p&gt;5. Merge Ikanserve with appengine&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ mkdir myikanserveengine
$ cd myikanserveengine
$ unzip ../ikanserve/jetty/webapps/root.war 
$ cp ../ioke/lib/ioke.jar lib/
$ cat &amp;gt; WEB-INF/appengine-web.xml 
&amp;lt;appengine-web-app xmlns=&quot;http://appengine.google.com/ns/1.90&quot;&amp;gt;
  &amp;lt;application&amp;gt;myikanserveengine&amp;lt;/application&amp;gt;
  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;
^D
$ cd ..
&amp;lt;/appengine-web-app&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A few explanations:&lt;br /&gt;
You need to unzip the war file because app engine only takes war dirs not files. And you you need to copy the ioke jar because the ioke version supplied with ikanserve (at this point in time) doesn&amp;#8217;t work with appengine. The current Ioke version does work.&lt;/p&gt;
&lt;p&gt;6. Deploy your application&lt;/p&gt;
&lt;p&gt;Go to the &lt;a href=&quot;http://appengine.google.com/&quot;&gt;App Engine Admin Interface&lt;/a&gt; log in and create an application with the same name you choose in your appengine-web.xml file (Here it was &amp;#8220;myikanserveengine&amp;#8221;).&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;$ cd appengine-java-sdk-1.2.0
$ bin/appcfg.sh -e yourgoogleaccountemail@yourdomain.com update ../myikanserveengine
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Done.&lt;/p&gt;
&lt;p&gt;Goto &lt;a href=&quot;http://myikanserveengine.appspot.com&quot;&gt;http://myikanserveengine.appspot.com&lt;/a&gt; and enjoy your first Ioke web application in the cloud. Try URLs like &lt;a href=&quot;http://myikanserveengine.appspot.com/foo&quot;&gt;foo&lt;/a&gt; or &lt;a href=&quot;http://myikanserveengine.appspot.com/xxx&quot;&gt;xxx&lt;/a&gt; to see some extra funky stuff ;-)&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Deploying a Rails application on OpenSolaris with passenger aka modrails</title>
    <link href="/2009/1/29/deploying-a-rails-application-on-opensolaris-with-passenger-aka-modrails/" />
    <id>tag:blog.hendrikvolkmer.de,2009-01-29:1233227387</id>
    <updated>2009-01-29T12:09:47+01:00</updated>
    <content type="html">&lt;p&gt;&lt;img src=&quot;http://blog.hendrikvolkmer.de/assets/2009/1/29/opensolaris.png&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;http://blog.hendrikvolkmer.de/assets/2009/1/29/modrails.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Two technologies I wanted to play around with for some time are &lt;a href=&quot;http://www.opensolaris.org&quot;&gt;OpenSolaris&lt;/a&gt; and &lt;a href=&quot;http://www.modrails.com&quot;&gt;passenger&lt;/a&gt;. OpenSolaris because of &lt;a href=&quot;http://opensolaris.org/os/community/zfs/&quot;&gt;ZFS&lt;/a&gt;, &lt;a href=&quot;http://opensolaris.org/os/community/zones/&quot;&gt;Zones&lt;/a&gt;, &lt;a href=&quot;http://opensolaris.org/os/community/smf/&quot;&gt;SMF&lt;/a&gt; and the latest addition &lt;a href=&quot;http://opensolaris.org/os/project/pkg/&quot;&gt;IPS&lt;/a&gt; and passenger because it seems to be the new default Rails deployment model and is really easy to configure.&lt;/p&gt;
&lt;p&gt;So I deceided to combine those to and get started. Here&amp;#8217;s what I did. Maybe it&amp;#8217;s useful for someone who&amp;#8217;s trying to do the same.&lt;/p&gt;
&lt;p&gt;I grabbed the &lt;a href=&quot;http://virtualboximages.com/OpenSolaris-2008.11&quot;&gt;OpenSolaris 2008.11 Virtualbox image&lt;/a&gt; from virtualboximages.com and booted it in VirtualBox.&lt;/p&gt;
&lt;p&gt;I wanted to make sure to have the latest updates so I updated the image (all commands are executed as root):&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec pkg image-update&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;A reboot later I installed the necessary parts for a Rails environment:&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec pkg install SUNWruby18
# pfexec pkg install gcc-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SUNWruby18 installes ruby 1.8.6p287 which is exactly what I needed.&lt;/p&gt;
&lt;p&gt;The mysql installation was a bit harder:&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec pkg install SUNWmysql5
# /usr/mysql/5.0/bin/mysql_db_install
# chown -R mysql:mysql /var/mysql/5.0/data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I needed to manually chown the data dir. Otherwise mysql wouldn&amp;#8217;t start.&lt;/p&gt;
&lt;p&gt;You can confirm that your mysql is running via:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# svcs -l mysql
&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The logfile gives further information if something goes wrong.&lt;/p&gt;
&lt;p&gt;To access mysql try:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# /usr/mysql/5.0/bin/mysql
&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The &amp;#8220;5.0&amp;#8221; in the path is important because there&amp;#8217;s also a mysql version 4 installed. This will be of interest when installing the mysql ruby gem. The command to correctly install the gem is:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec gem install mysql -- --with-mysql-lib=/usr/mysql/5.0/lib/mysql --with-mysql-include=/usr/mysql/5.0/include
&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Thanks to Amanda Waite for &lt;a href=&quot;http://blogs.sun.com/mandy/entry/segmentation_fault_when_running_rails&quot;&gt;this hint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The next installation step is Apache:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec pkg install SUNWapach22&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Make sure it starts via svcadm:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# svcadm start apache22&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Check that it runs:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# svcs -l apache22&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;(or just type http://localhost in your browser)&lt;/p&gt;
&lt;p&gt;I needed memcached, so I installed it:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# pfexec pkg install SUNWmemcached&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;It didn&amp;#8217;t start right away, though. There are some changes you have to apply to run &lt;a href=&quot;http://blogs.sun.com/trond/entry/memcached_in_solaris&quot;&gt;memcached in solaris&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# svccfg
svc:&amp;gt; select memcached
svc:/application/database/memcached&amp;gt; setprop memcached/options=(&quot;-u&quot; &quot;nobody&quot; &quot;-m&quot; &quot;2048&quot;)
svc:/application/database/memcached&amp;gt; quit
# svcadm refresh memcached
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Of course we need rails:&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;pfexec gem install rails
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The current stable version of passenger doesn&amp;#8217;t support Solaris but the egde version does. So I downloaded the &lt;a href=&quot;http://github.com/FooBarWidget/passenger/downloads/master&quot;&gt;passenger edge Version&lt;/a&gt; off github.&lt;/p&gt;
&lt;p&gt;It didn&amp;#8217;t compile right away. There are some compiler flags that aren&amp;#8217;t supported in Solaris so I used &lt;a href=&quot;http://github.com/farra/passenger/commit/b1af92376e150471c4e825957f145fe0b0dc527d&quot;&gt;these changes&lt;/a&gt; to make passenger compile.&lt;/p&gt;
&lt;p&gt;Commandwise this looked like this: I unpacked the tarball into /opt/passenger and then did a&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# cd /opt/passenger
# vi lib/passenger/platform_info.rb # see above
# bin/passenger-install-apache2-module
# chown -R webservd /opt/passenger
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add the mentioned config snippet to /etc/apache2/httpd.conf and restart apache &lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# svcadmin restart apache2&lt;/code&gt; &lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Now were all set to create a new rails app. I created a seperate ZFS partition to serve the apps. Just because it&amp;#8217;s so easy to do with ZFS and it gives you more control on how much space is used by your apps etc.&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# zfs create rpool/apps&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it&amp;#8217;s time for the demo app:&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# cd /rpool/apps
# rails demo
# chown -R webservd demo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I added the DocumentRoot of the app to the apacheconfig (&lt;code&gt;DocumentRoot /rpool/apps/demo/public&lt;/code&gt;) and restarted apache again (&lt;code&gt;svcadm restart apache2&lt;/code&gt; &amp;#8211; you know the drill by now).&lt;/p&gt;
&lt;p&gt;And that&amp;#8217;s it. A http://localhost gave me the demo welcome page. Nice.&lt;/p&gt;
&lt;p&gt;Later I wanted do deploy a rails app via capistrano so I needed git. There isn&amp;#8217;t a IPS package for git yet, so I decided to take the standard compile route. I downloaded git and compiled it like this:&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code&gt;# ./configure --prefix=/opt/git
# make install
# ln -s /opt/git/bin/git /usr/bin/git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I used the symlink because capistrano wasn&amp;#8217;t able to find git otherwise &amp;#8211; setting scm_command didn&amp;#8217;t work.&lt;/p&gt;
&lt;p&gt;If anyone tries this recipe and it works or it doesn&amp;#8217;t work&amp;#8230; just let me know. Have fun with OpenSolaris. It&amp;#8217;s worth checking out.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Java like experiences with merb</title>
    <link href="/2008/9/9/java-like-experiences-with-merb/" />
    <id>tag:blog.hendrikvolkmer.de,2008-09-09:1220958587</id>
    <updated>2008-09-09T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.java.com/&quot;&gt;Java&lt;/a&gt;? &lt;a href=&quot;http://merbivore.com/&quot;&gt;merb&lt;/a&gt;? What do they have in common? They are both multithreaded, fast, modular? You can choose which ORM, templating and JavaScript and testing framework you want to use?&lt;/p&gt;
&lt;p&gt;With all these things being true, they have another thing in common: It can be very frustrating to develop a web app using these technologies.&lt;/p&gt;
&lt;p&gt;I played around with merb at the beginning of the year just because it was something new and I like new things. I used something like 0.3.0 which as the version number suggests is an early development release. Things are supposed to change. And they have. merb was splittet into &lt;a href=&quot;http://github.com/wycats/merb-core/tree/master&quot;&gt;merb-core&lt;/a&gt; and &lt;a href=&quot;http://github.com/wycats/merb-more/tree/master&quot;&gt;merb-more&lt;/a&gt; and lots of other gems. Which in itself is a good idea but made it real hard to figure out what you really need.&lt;/p&gt;
&lt;p&gt;Engouraged by the infos I got in the BoF session about merb by &lt;a href=&quot;http://yehudakatz.com/&quot;&gt;Yehuda Katz&lt;/a&gt; at &lt;a href=&quot;http://en.oreilly.com/railseurope2008/public/content/home&quot;&gt;RailsConf Europe&lt;/a&gt;, I wanted to play around with some new merb features.&lt;/p&gt;
&lt;p&gt;On Saturaday I &amp;#8220;ported&amp;#8221; a very small (as in &amp;#8220;the standard blog&amp;#8221; app) merb 0.3.0 app to the current 0.9.5. And by &amp;#8220;ported&amp;#8221; I really mean: I&amp;#8217;ve thrown the old implementation away and rewrote it from scratch &amp;#8211; because after an hour or so of hunting errors and trying to find missing gems that I needed,  I figured it would be easier to start with a new 0.9.5 app.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a little bit ironic that the merb guys want to create a public API that doesn&amp;#8217;t change often and yet it changed very often until now. You can&amp;#8217;t really blame them &amp;#8211; there is no official release yet &amp;#8211; it&amp;#8217;s a development version &amp;#8211; but it makes playing around with this kind of thing really hard. I almost was at the point where I said &amp;#8220;F&amp;#8217; it, i&amp;#8217;ll use Rails and be happy with it&amp;#8221; &amp;#8211; which would have missed the point of playing around with merb.&lt;/p&gt;
&lt;p&gt;To play with merb you have to read the code. There is documentation which is ok on some parts and missing on other but there are no useful tutorials or blog post. Ok, there are&amp;#8230; but you have no idea which version of merb they are about so they&amp;#8217;re pretty much useless: If you don&amp;#8217;t use the exact version of merb the tutorial was written for it won&amp;#8217;t work. &amp;#8211; That&amp;#8217;s a general problem with tutorials/blog posts for new technologies (I experienced the same with some rspec posts). So please, if you write a post or tutorial, mention which version of the tools you&amp;#8217;re using.&lt;/p&gt;
&lt;p&gt;So to summarize what do I like and don&amp;#8217;t like about merb:&lt;/p&gt;
&lt;p&gt;I like&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the modular architechture (construction kit: pic what you need), merb-slices, etc.&lt;/li&gt;
	&lt;li&gt;that it is small and thus a good fit for focussed services&lt;/li&gt;
	&lt;li&gt;that it orm, js library, rendering framework agnostic&lt;/li&gt;
	&lt;li&gt;the idea of a public api that doesn&amp;#8217;t change often&lt;/li&gt;
	&lt;li&gt;that there&amp;#8217;s no real magic inside the code&lt;/li&gt;
	&lt;li&gt;that it&amp;#8217;s rack based&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I don&amp;#8217;t like&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;the naming of the gems. It&amp;#8217;s &lt;a href=&quot;http://github.com/wycats/merb-plugins/tree/master/merb_activerecord&quot;&gt;merb_activerecord&lt;/a&gt; but &lt;a href=&quot;http://github.com/wycats/merb-more/tree/master/merb-assets&quot;&gt;merb-assets&lt;/a&gt;. Why is it &amp;#8220;-&amp;#8221; one time and &amp;#8220;_&amp;#8221; the other time. If there&amp;#8217;s some kind of logic behind that I was not smart enough to figure it out.&lt;/li&gt;
	&lt;li&gt;the merb-more gems sometimes just don&amp;#8217;t work. e.g. form_for doesn&amp;#8217;t work for me in 0.9.5 &amp;#8211; and there are no specs/tests for it! Or at least I didn&amp;#8217;t find them.&lt;/li&gt;
	&lt;li&gt;that it is hard to get started with, especially if you&amp;#8217;re a spoiled Rails child. There should be a generator &amp;#8220;merb-gen app &amp;#8212;rails-like&amp;#8221; which should hook you up with alle the things that rails has (and merb has as well if you choose the according orm, js, helper gems, etc.)&lt;/li&gt;
	&lt;li&gt;that things like pagination are quite hard (there&amp;#8217;s &lt;a href=&quot;http://github.com/myobie/merb_paginate/tree/master&quot;&gt;merb_paginate&lt;/a&gt; + &lt;a href=&quot;http://github.com/mislav/will_paginate/tree/master&quot;&gt;will_paginate&lt;/a&gt; and it works) &amp;#8211; This isn&amp;#8217;t really a merb problem and more a problem of how some rails plugins are too rails focussed &amp;#8211; hopefully this will change when there are more Ruby web frameworks out there&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;#8220;So you just wanted to write a rant and say the J-Word, Hendrik?&amp;#8221; &amp;#8211; Not really. I think merb is a great framework but, as every piece of software  has some flaws, all of them can easily be fixed and let&amp;#8217;s see what merb 1.0 will bring us. If you want to try out merb I recommend waiting until 1.0 (which is due in about a month) &amp;#8211; or take the latest checkout from github where maybe everything is ok.&lt;/p&gt;
&lt;p&gt;And if you use merb for something in production and don&amp;#8217;t have tests (which is a bad idea in the first place), write them before you even think about upgrading to a newer version. This experience has once again shown the value of tests for me.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>RailsConf Europe quotes</title>
    <link href="/2008/9/5/railsconf-europe-quotes/" />
    <id>tag:blog.hendrikvolkmer.de,2008-09-05:1220612987</id>
    <updated>2008-09-05T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;There were a lot of cool presentations at RailsConf Europe this year. I&amp;#8217;ll write some summaries later.&lt;/p&gt;
&lt;p&gt;For now, here are some quotes I really liked:&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&amp;#8220;Java is to Javascript what car is to carpet&amp;#8221; &amp;#8211; at BoF &amp;#8220;Xing on Rails&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;#8220;Using tables to store objects is like driving your car home and then disassembling it to put it in the garage. It can be assembled again in the morning, but one eventually asks whether this is the most efficient way to park a car.&amp;#8221; &amp;#8211; Esther Dyson (was quoted in the Maglev BoF)&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  
  <entry>
    <title>Hug a developer</title>
    <link href="/2008/8/29/hug-a-developer/" />
    <id>tag:blog.hendrikvolkmer.de,2008-08-29:1220008187</id>
    <updated>2008-08-29T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;&lt;embed src=&quot;http://blip.tv/play/gYwjwZJqjdEh&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;503&quot; height=&quot;312&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;via [ &lt;a href=&quot;http://www.marcelscherf.com&quot;&gt;Marcel&lt;/a&gt; ] via [ juixie &lt;a href=&quot;http://www.juixe.com/techknow/index.php/2008/08/28/hug-a-developer/&quot;&gt;hug a developer&lt;/a&gt; ]&lt;/p&gt;
&lt;p&gt;And indeed: It&amp;#8217;s funny because it&amp;#8217;s so true.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Monome 40h</title>
    <link href="/2007/10/4/monome/" />
    <id>tag:blog.hendrikvolkmer.de,2007-10-04:1191496187</id>
    <updated>2007-10-04T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;This is an fantastic and yet very simple device: 64 buttons, 64 leds, no inside logic&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/bdu/133709235/&quot;&gt;&lt;img src=&quot;http://blog.hendrikvolkmer.de/assets/2007/10/4/monome_on_flickr.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to know what you can do with it, check out the website of the &lt;a href=&quot;http://monome.org&quot;&gt;creators&lt;/a&gt; or some of the &lt;a href=&quot;http://www.youtube.com/results?search_query=monome&amp;amp;search=Search&quot;&gt;youtube videos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[via: &lt;a href=&quot;http://www.37signals.com/svn/posts/616-cool-design-detail-at-monome&quot;&gt;37signals&lt;/a&gt; ]&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Railsconf Europe 2007 Berlin - Day 1</title>
    <link href="/2007/9/25/railsconf-europe-2007-berlin-day-1/" />
    <id>tag:blog.hendrikvolkmer.de,2007-09-25:1190718587</id>
    <updated>2007-09-25T13:09:47+02:00</updated>
    <content type="html">&lt;h2&gt;Day 1&lt;/h2&gt;
&lt;h3&gt;Keynote: DHH&lt;/h3&gt;
&lt;p&gt;Rails 2.0 is coming, yay. David showed the first version of the &amp;#8220;blog in 15 minutes&amp;#8221; video. Which seemed to include very, very complicated steps (Setting up apache, creating the databases). It really showed how spoiled we Rails developers are and reminds me of the pain I had to suffer when I did Java development. I also liked the frenche cheese and wine image in his presentation. I&amp;#8217;d love to have some! :)&lt;/p&gt;
&lt;h3&gt;Deployment and Continuous Integration from the Trenches Fernand Galiana&lt;/h3&gt;
&lt;p&gt;The title of the talk was a bit misleading. It was only about capistarno 2.0 but turned out to be very useful for me. The new deployment strategies (tar file, svn cache) and dependency checks (for gems) are features which I&amp;#8217;ll definitely use when we&amp;#8217;ll switch to cap 2.&lt;/p&gt;
&lt;h3&gt;Meta-Magic in Rails: Become a Master Magician Dr. Nic Williams&lt;/h3&gt;
&lt;p&gt;Well&amp;#8230; there&amp;#8217;s not much to say. If you ever have the chance to see a talk by Dr.Nic or just speak to him in person: Take the chance. That was a very entertaining talk and I learned a few new metaprogramming tricks as well. I also liked these funny little comments about Java&amp;#8230; &amp;#8220;because we&amp;#8217;re cool and they&amp;#8217;re not&amp;#8221;. If any Java developer reads this and feels offended&amp;#8230; Try to pick up some sense of humour&amp;#8230; and read &lt;a href=&quot;http://www.jroller.com/obie/entry/top_10_reasons_why_java&quot;&gt;this&lt;/a&gt; ;-)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
h3. Really Scaling Rails Britt Selvitelle,&lt;br /&gt;
 &lt;br /&gt;
Not so much new stuff for me here&amp;#8230; I didn&amp;#8217;t really understand why BIG-IP =&amp;gt; Apache 2.2 =&amp;gt; mongrel is faster than BIG-IP =&amp;gt; mongrel. Jason Hoffman said that the latter was faster and Britt said that the former was faster&amp;#8230; I&amp;#8217;m a bit confused but &amp;#8211; as with all things &amp;#8211; it might depend on the application and you just have to find out for your self. And one thing to notice: If you want to scale web applications: Find out wich parts doesn&amp;#8217;t have to be real time for the user doing the request and send these tasks off to a queuing system of any kind.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
h3. REST, Legacy stuff =&amp;gt; Lightning Talks&lt;/p&gt;
&lt;p&gt;The talk about legacy and REST somehow was canceled. I&amp;#8217;ve been a bit late due to talks in the break so I didn&amp;#8217;t realized that the talk was cancled until the second speaker turned up. David Cheminzkey of Rspec fame should rspec view tests and story tests which I found very impressing. That really helped me to understand the philosphy of rspec. Bascially you can define what your app should do and get testing and a executable specification at the same time. Brilliant!&lt;br /&gt;
 &lt;br /&gt;
Matt Wood of the Sanger institute was also very impressive. He explaind how the institute is replacing 10 year old perl scripts piece by piece with ruby and Rails applications. &amp;#8220;Does Rails Scale?&amp;#8221; &amp;#8211; They move terabytes of data per day and per cluster node around &amp;#8211; with rails applications&amp;#8230;&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
h3.  Beyond Startups: Rails Demand in the Global 2000 Jonathan Siegel&lt;/p&gt;
&lt;p&gt;That talk was a bit strange. Not so much new stuff in there for me. Big companies starting to use Rails for different things and are happy with it.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://conferences.oreillynet.com/cs/railseurope2007/view/e_sess/14847&quot;&gt;The Rest of REST Roy T. Fielding&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This talk was also strange but for a different reason. Some parts of it very entertaining and interesting other parts where just to abstract for me. And there where to many words on those slides. Seven is ok, maybe twelve but not twelve lines&amp;#8230; It was very interesting to hear how the whole web evolved and that you can surf the complete web in one hour or so (if there are only 50 web servers :-))&lt;/p&gt;
&lt;h3&gt;Rails and the Next Generation Web Craig R. McClanahan  &lt;br /&gt;
 &lt;br /&gt;
The best quote of his talk &amp;#8220;Developing web applications in Java after working with Rails would probably not be a particularly pleasant experience&amp;#8221;. He mentioned one thing I concur with: There are plugins who should be written more abstract so that you can use them with any Object and not only with ActiveRecord. That&amp;#8217;s one thing about Java which I&amp;#8217;ve found really good: explicit interfaces. You can do the same, or even better things with ruby and duck typing, but you have to force yourself to do it, the language won&amp;#8217;t&amp;#8230;&lt;/h3&gt;
&lt;h3&gt;Rejectconf&lt;/h3&gt;
&lt;p&gt;We managed to find the Rejectconf location but we arrived a bit late. So the best seats were already taken. Nevertheless I really liked the short presentations and got me excited to attend the next &lt;a href=&quot;http://www.pechakucha-stuttgart.de/&quot;&gt;Pecha Kucha&lt;/a&gt; event in Stuttgart. Thomas Fuchs had really nice C64 Design slides and this awesome 3 colour keynote transition. Dr Nic posted a &lt;a href=&quot;http://www.viddler.com/explore/crafterm/videos/6/&quot;&gt;video of his talk&lt;/a&gt; More info about &lt;a href=&quot;http://www.rug-b.de/wiki/show/RejectConf&quot;&gt;RejectConf&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Railsconf Europe 2007 Berlin - Day -1</title>
    <link href="/2007/9/24/railsconf-europe-2007-berlin-day-1/" />
    <id>tag:blog.hendrikvolkmer.de,2007-09-24:1190632187</id>
    <updated>2007-09-24T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;&lt;strong&gt;Bratwurst on rails&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Railsconf started with the &lt;a href=&quot;http://www.bratwurst-on-rails.com/&quot;&gt;Bratwurst on rails&lt;/a&gt; event organized by the &lt;a href=&quot;http://www.rug-b.com/wiki/show/HomePage&quot;&gt;Berlin Ruby User Group&lt;/a&gt;. Free Bratwurst for everyone :)&lt;/p&gt;
&lt;p&gt;Talking to interesting, intelligent people form all over the world has been a great experience. One thing which stuck in my mind was one guy from the UK (I am so bald with names&amp;#8230;) who referred to himself as a &amp;#8220;agile convert&amp;#8221;. Having been in the software business for about 20 years he couldn&amp;#8217;t believe that &amp;#8220;this agile thing would work&amp;#8221;. And now he doesn&amp;#8217;t want to do anything else :)&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Railsconf Europe 2007 Berlin - Day 0</title>
    <link href="/2007/9/24/railsconf-europe-2007-berlin-day-0/" />
    <id>tag:blog.hendrikvolkmer.de,2007-09-24:1190632187</id>
    <updated>2007-09-24T13:09:47+02:00</updated>
    <content type="html">&lt;h2&gt;Day 0: (Tutorial day)&lt;/h2&gt;
&lt;h3&gt;Ruby (and Rails) Testing Techniques: Charity Tutorial Chad Fowler, Marcel Molina Jr.&lt;/h3&gt;
&lt;p&gt;There was quite a queue in front of the check in counter (about 50m long). While I was waiting there, at some point, somewone said: You can register later. Just go to the session you want to see. So I just jumped in to the next room which happened to be the room where the testing tutorial with Chad Folwer and Marcel Molina jr. was held. It was very interesting to see who these guys not only did pair programming but pair teaching. Marcel really loves long expressive method names and almost never uses &amp;#8220;magic numbers&amp;#8221; in his code and test code. So instead of saying:&lt;br /&gt;
 &lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;
&lt;code&gt;
  Card.new(:number =&amp;gt; 5 )
&lt;/code&gt;&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
  &lt;br /&gt;
he would write&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;br /&gt;
&lt;code&gt;
  Card.new(:number =&amp;gt; low_card_number )
  
  and then define a helper method&lt;/p&gt;
def low_card_number
5
end
&lt;p&gt;&lt;/code&gt;&lt;br /&gt;
&lt;/pre&gt;&lt;br /&gt;
 &lt;br /&gt;
 I think that this approach is really valuable but, as with everything, you can overdo it. If I only had really small and only a few test cases for a small class, I probably wouldn&amp;#8217;t write as much helpers as Marcel did.&lt;br /&gt;
 &lt;br /&gt;
 Marcel never uses def.self some_method for defining class methods but always&lt;/p&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;
 &lt;code&gt;
 class &amp;lt;&amp;lt; self
    def some_method
    
    end
 end
&lt;/code&gt; 
&lt;/pre&gt;
At first I did&amp;#8217;t really see the advantage of that but when Chad explained why he does it that way, it became quite clear:

- you can structure your classes better: all class methods are in on place
- it is more DRY than writing &amp;#8220;def self.&amp;#8221; all the time


&lt;h3&gt;Scaling a Rails Application from the Bottom Up in Europe Jason Hoffman&lt;br /&gt;
  &lt;br /&gt;
I&amp;#8217;ve been to Jason&amp;#8217;s &amp;#8220;Rails a system view&amp;#8221; talks last year and realized that this years talk basically was a updated version of last year. Which isn&amp;#8217;t a bad thing. There just wasn&amp;#8217;t that much new stuff in it for me this time.&lt;/h3&gt;
&lt;p&gt;But what came out again was: There is no &amp;#8220;Rails scaling problem&amp;#8221;. &amp;#8220;Can Rails scale?&amp;#8221; as a question doesn&amp;#8217;t really make sense. There&amp;#8217;s nothing in Rails which makes it hard to scale. The fact that it&amp;#8217;s statless and shared nothing is actually a good thing if you want to scale. The bottlenecks are in front of Rails (Load balancer, network) or behind (database, network).&lt;br /&gt;
  &lt;br /&gt;
h3. Keynote: Dave Thomas&lt;br /&gt;
  &lt;br /&gt;
I liked Dave Thomas&amp;#8217; Keynote very much. It was very inspiring and he once again underlined that all programmers should take pride in what they do and should sign their work like artists do. Here is a &lt;a href=&quot;http://rails.nomad-labs.com/?p=14&quot;&gt;good summary of his keynote&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Bof&lt;/h3&gt;
&lt;p&gt;I had no idea what a &amp;#8220;Birds of a Feathers session&amp;#8221; was and I still haven&amp;#8217;t figured it out. At least I think it was very usefull and there will come something out of our session. We talked about Rails documentation in general and how we could i18ize it. There&amp;#8217;s a &lt;a href=&quot;http://groups.google.com/group/international-rails-documentation&quot;&gt;google group about i18zing the rails documentation&lt;/a&gt; if you&amp;#8217;d like to join the conversation.&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Railsconf Europe 2007 Berlin - Wrap up</title>
    <link href="/2007/9/24/railsconf-europe-2007-berlin-wrap-up/" />
    <id>tag:blog.hendrikvolkmer.de,2007-09-24:1190632187</id>
    <updated>2007-09-24T13:09:47+02:00</updated>
    <content type="html">&lt;p&gt;RailsConf Europe 2007 is over and it&amp;#8217;s time to wrap up.  So&amp;#8230; I don&amp;#8217;t want reproduce the content of all the presentations I&amp;#8217;ve attended because several other people already did. I&amp;#8217;ll just link to their posts. Instead I want to to give a subjective view of all the talks I&amp;#8217;ve seen.  I have no idea if that&amp;#8217;s of any value to anybody else but maybe it is. No pictures this year&amp;#8230; I was to lazy to bring my DSLR camera and forgot to borrow a smaller point and shoot cam&amp;#8230; There are a lot of pictures of the event on &lt;a href=&quot;http://www.flickr.com/photos/tags/railsconfeurope07/&quot;&gt;flickr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Check out the days in order:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;/2007/9/24/railsconf-europe-2007-berlin-day-1&quot;&gt;Day -1: Before Railsconf&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;/2007/9/24/railsconf-europe-2007-berlin-day-0&quot;&gt;Day 0: Tutorial Day&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;/2007/9/25/railsconf-europe-2007-berlin-day-1&quot;&gt;Day 1: First conference day&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;/2007/9/25/railsconf-europe-2007-berlin-day-2&quot;&gt;Day 2: Second conference day&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  
</feed>

