<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>schuerrer.org Weblog</title>
    <link>http://blog.schuerrer.org</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Martin Schuerrer's perspective</description>
    <item>
      <title>Random Updates</title>
      <description>&lt;p&gt;I&amp;#8217;m currently under quite some stress with the approaching final exams, but I&amp;#8217;ve nevertheless two findings worth sharing:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.madewithmolecules.com/serotoninnecklace.html"&gt;Necklaces resembling neurotransmitters&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;A &lt;a href="http://rbyaml.rubyforge.org/"&gt;&lt;span class="caps"&gt;YAML&lt;/span&gt; parser in pure Ruby&lt;/a&gt;,  that supports using a mapping as a key in one line.&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;[123, 123]: asd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
This is something &lt;a href="http://whytheluckystiff.net/syck/"&gt;Syck&lt;/a&gt; won&amp;#8217;t parse, although it&amp;#8217;s correct &lt;span class="caps"&gt;YAML&lt;/span&gt;, as xitology from #yaml told me. He also informed me about his SoC project called libyaml, that would be a fast, feature complete alternative to Syck. If Google accepts his proposal he expects a release in 3 to 4 months.&lt;/li&gt;
	&lt;/ul&gt;
</description>
      <pubDate>Wed, 10 May 2006 12:22:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:abe04823-ca2c-4ad4-a17b-9f3f97ce6c5f</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2006/05/10/random-updates</link>
      <category>ruby</category>
      <category>yaml</category>
      <category>biology</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/47</trackback:ping>
    </item>
    <item>
      <title>How to write DSLs with Ruby</title>
      <description>&lt;p&gt;Recently I needed a &lt;span class="caps"&gt;DSL&lt;/span&gt; like the one in Rake for one of my projects. At first I just googled around a bit hoping to find a comprehensive tutorial. I did gain &lt;a href="http://www.artima.com/rubycs/articles/ruby_as_dslP.html"&gt;some&lt;/a&gt; &lt;a href="http://cubiclecoder.blogspot.com/2005/08/ruby-blocks-dsls-super-cool.html"&gt;more&lt;/a&gt; &lt;a href="http://nat.truemesh.com/archives/000538.html"&gt;or&lt;/a&gt; &lt;a href="http://www.oreillynet.com/ruby/blog/2005/12/what_is_a_dsl.html"&gt;less&lt;/a&gt; &lt;a href="http://www.onestepback.org/articles/lingo/"&gt;useful&lt;/a&gt; insights, but what I wanted was something as clean and coherent as a Rakefile:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="ident"&gt;namespace&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;samples&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="ident"&gt;task&lt;/span&gt; &lt;span class="symbol"&gt;:build&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="comment"&gt;# Build the sample programs&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;After reading lots of tutorials and gaining come clues all I managed to code was:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="ident"&gt;namespace&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;n&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
    &lt;span class="ident"&gt;n&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;task&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;t&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="comment"&gt;# Build the sample programs&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;I felt terrible and started reading the Pickaxe, desperate for a solution. Proc, Binding, Object, Kernel. I was looking everywhere for some clues on how to make my &lt;span class="caps"&gt;DSL&lt;/span&gt; as great as Rake&amp;#8217;s. Finally I found what I was looking for: &lt;a href="http://ruby-doc.org/docs/ProgrammingRuby/html/ref_c_object.html#Object.instance_eval"&gt;&lt;strong&gt;Object#instance_eval&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ll spare you any further explainations and present you the source (abridged, &lt;a href="/files/pseudorake.rb"&gt;download full version&lt;/a&gt;) to my &lt;span class="caps"&gt;DSL&lt;/span&gt; implementation:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;PseudoRakefile&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;evaluate&lt;/span&gt;&lt;span class="punct"&gt;(&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="constant"&gt;Tasks&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;({},&lt;/span&gt; &lt;span class="punct"&gt;{},&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="ident"&gt;protected&lt;/span&gt;
  &lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Tasks&lt;/span&gt;
    &lt;span class="ident"&gt;attr_reader&lt;/span&gt; &lt;span class="symbol"&gt;:parent&lt;/span&gt;
    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;initialize&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;args&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;options&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;parent&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="comment"&gt;# snip&lt;/span&gt;
      &lt;span class="ident"&gt;instance_eval&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;task&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;task&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;args&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;{},&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
     &lt;span class="constant"&gt;Tasks&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="attribute"&gt;@args&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;merge&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;args&lt;/span&gt;&lt;span class="punct"&gt;),&lt;/span&gt; &lt;span class="attribute"&gt;@options&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;merge&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:task&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;task&lt;/span&gt;&lt;span class="punct"&gt;),&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;namespace&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="constant"&gt;Tasks&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="attribute"&gt;@args&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="attribute"&gt;@options&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;merge&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:namespace=&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;),&lt;/span&gt; &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ident"&gt;block&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;

    &lt;span class="comment"&gt;# snip&lt;/span&gt;
    &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;puts&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;msg&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="constant"&gt;Kernel&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{@options[:namespace]}&lt;/span&gt;:&lt;span class="expr"&gt;#{@options[:task]}&lt;/span&gt; &lt;span class="expr"&gt;#{msg}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="ident"&gt;rakefile&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;PseudoRakefile&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;

&lt;span class="ident"&gt;rakefile&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;evaluate&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
  &lt;span class="ident"&gt;namespace&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;samples&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
    &lt;span class="ident"&gt;task&lt;/span&gt; &lt;span class="symbol"&gt;:build&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;develop&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;deal&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:do_it&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:great&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="ident"&gt;sleep&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;
      &lt;span class="ident"&gt;develop&lt;/span&gt;&lt;span class="punct"&gt;('&lt;/span&gt;&lt;span class="string"&gt;solution&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:do_it&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:sloppy&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
    &lt;span class="ident"&gt;task&lt;/span&gt; &lt;span class="symbol"&gt;:destroy&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:probability&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt;
      &lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Tear everything down like a little kid&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
      &lt;span class="ident"&gt;rm&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Schroedinger's Cat&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:probability&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0.5&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
      &lt;span class="ident"&gt;rm&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;some unimportant file&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;It&amp;#8217;s free to use for anyone, but you&amp;#8217;d make this boy very happy by leaving a comment, especially if you have improved the core idea or actually use my code in your projects.&lt;/p&gt;
</description>
      <pubDate>Sat, 01 Apr 2006 22:51:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:92ef2066-576e-4e9c-bd68-b2112d5bd270</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2006/04/01/how-to-write-dsls-with-ruby</link>
      <category>ruby</category>
      <category>dsl</category>
      <enclosure length="1547" url="http://blog.schuerrer.org/files/pseudorake.rb" type="application/octet-stream"/>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/45</trackback:ping>
    </item>
    <item>
      <title>Presentation techniques</title>
      <description>&lt;p&gt;Part of my education is learning how to do presentations. It&amp;#8217;s no standalone course but rather an integral (or not so integral) part of every subject.&lt;/p&gt;


	&lt;p&gt;Some time ago I stumbled about some &lt;a href="http://presentationzen.blogs.com/presentationzen/2005/09/one_presenters_.html"&gt;great advise&lt;/a&gt; when doing presentations: The &lt;a href="http://presentationzen.blogs.com/presentationzen/2005/09/living_large_ta.html"&gt;Takahashi Method&lt;/a&gt;. After deciding that Takahashi&amp;#8217;s way of conveying information was a little too pure for me, I settled with copying the &lt;a href="http://rubyonrails.com/screencasts"&gt;Ruby On Rails Presentations&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;This approach is not only clear enough to keep the focus on the presenter but also puts some real (scientific) data across.&lt;/p&gt;
</description>
      <pubDate>Thu, 09 Feb 2006 15:47:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:5b8e1d4d-7d39-481e-88fa-20ec8649efab</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2006/02/09/presentation-techniques</link>
      <category>takahashi</category>
      <category>presentation</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/29</trackback:ping>
    </item>
    <item>
      <title>F still comes before S</title>
      <description>&lt;p&gt;Some time ago &lt;a href="http://www.karmiccoding.com/pages/about"&gt;David Felstead&lt;/a&gt;, a &lt;em&gt;senior &lt;a href="http://www.site5.com"&gt;Site5&lt;/a&gt; engineer&lt;/em&gt;, said that Site5 was &lt;a href="http://www.karmiccoding.com/articles/2005/09/23/s-is-the-new-f-let-the-age-of-scgi-rails-begin"&gt;considering switching from FastCGI to &lt;span class="caps"&gt;SCGI&lt;/span&gt;&lt;/a&gt; and so I decided that if Site5 was considering it, I could simply do it.&lt;/p&gt;


He wrote about some major pains in the proverbial with FastCGI:
	&lt;ul&gt;
	&lt;li&gt;It&amp;#8217;s hard to set up&lt;/li&gt;
		&lt;li&gt;It&amp;#8217;s hard to monitor&lt;/li&gt;
		&lt;li&gt;It requires dedicated tasks to keep working (reaper, spawner, spinner anyone?)&lt;/li&gt;
		&lt;li&gt;Currently no one is actively developing the Apache module.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;According to him &lt;span class="caps"&gt;SCGI&lt;/span&gt; is better, because it only took him 15 minutes to set up properly. And now for the &lt;strong&gt;but&lt;/strong&gt;:&lt;/p&gt;


	&lt;p&gt;As you, dear well informed reader, of course know one feature of FastCGI is to keep &lt;em&gt;multiple&lt;/em&gt; instances of the Rails dispatcher open. &lt;span class="caps"&gt;SCGI&lt;/span&gt; in combination with the Apache module supports exactly &lt;em&gt;one&lt;/em&gt; instance of the dispatcher. There is &lt;a href="http://article.gmane.org/gmane.comp.lang.ruby.rails/33836"&gt;one obscure and in reality impossible way of changing that&lt;/a&gt; but believe me you don&amp;#8217;t want to do this.&lt;/p&gt;


	&lt;p&gt;For me monitoring seemed easier because &lt;a href="http://wiki.rubyonrails.com/rails/pages/LighttpdWithProcessScripts"&gt;reaper, spawner and spinner&lt;/a&gt; already exist for FastCGI opposed to my self-written Ruby script that tries to do the same for &lt;span class="caps"&gt;SCGI&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;And if that wouldn&amp;#8217;t be enough &lt;span class="caps"&gt;SCGI&lt;/span&gt; also simply delegates every request below a defined path to Rails, which of course sucks if you have static content in your application. You can try to work around that, but once you generate .js or .css files through Rails, you pretty much start hating &lt;span class="caps"&gt;SCGI&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;But uninformed as I was, I just went ahead and let &lt;span class="caps"&gt;SCGI&lt;/span&gt; handle my requests. Till today. Today I made &lt;a href="http://inlet-media.de/the-perfect-ruby-on-rails-with-apache2-and-fastcgi-setup-on-debian-sarge"&gt;Rails use FastCGI&lt;/a&gt;. I didn&amp;#8217;t exactly follow the instructions in that article, instead of compiling anything myself I just let apt and RubyGems do all the hard work:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;sudo apt-get install libfcgi-dev
sudo gem install fcgi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;For me switching from &lt;span class="caps"&gt;SCGI&lt;/span&gt; to FastCGI brought nothing but relieve: My requests seem to get handled faster (probably because of the multiple instances running concurrently) and I no longer have to breach &lt;span class="caps"&gt;DRY&lt;/span&gt;, as my .htaccess doesn&amp;#8217;t need to exclude non all rails handled requests.&lt;/p&gt;
</description>
      <pubDate>Sat, 07 Jan 2006 21:24:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:84013910-a073-4e76-952c-a552613bf4d0</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2006/01/07/f-still-comes-before-s</link>
      <category>rails</category>
      <category>apache</category>
      <category>fastcgi</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/17</trackback:ping>
    </item>
    <item>
      <title>Real-time collaborative editor shootout</title>
      <description>&lt;p&gt;&lt;a href="http://sommergut.de/wsommergut/archives/001160.shtml"&gt;Wolfgang Sommergut&lt;/a&gt; found &lt;a href="http://www.synchroedit.com/"&gt;SynchroEdit&lt;/a&gt; an open-source browser-based simultaneous multiuser editor. But unfortunately the Demo seemed broken when I tried it out, so I started to look for alternatives.&lt;/p&gt;


	&lt;p&gt;And alternatives I should find: &lt;a href="http://en.wikipedia.org/wiki/Collaborative_real-time_editor"&gt;Wikipedia&lt;/a&gt; has an article, that although sparse on content contains links to seemingly every collaborative editor there is. &lt;a href="http://www.jotlive.com/"&gt;JotSpot Live&lt;/a&gt; is a hosted application that works (I actually tried the free plan) on Firefox and Internet Explorer, but not Opera. It once told me it lost it&amp;#8217;s connection while I was typing on IE, but apart from that it seem slick, stable, &lt;span class="caps"&gt;WEB 2&lt;/span&gt;.0 like.&lt;/p&gt;


	&lt;p&gt;There&amp;#8217;s also &lt;a href="http://livepad.klogms.org/"&gt;LivePad&lt;/a&gt;, a Mozilla only browser based rich editor, that&amp;#8217;s free as in speech and works flawless, but takes quite some processor power.&lt;/p&gt;


	&lt;p style="float:left"&gt;&lt;a href="http://gobby.0x539.de/imgs/screenshots/gobby-0.3.0-dev-win32-1.png"&gt;&lt;img src="/files/gobby_thumbnail.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Because i couldn&amp;#8217;t find any really mind-blowing web applications, I decided to give standalone applications a look. Although there are two working, free solutions, I&amp;#8217;ll ignore &lt;a href="http://moonedit.com/index.html.en"&gt;MoonEdit&lt;/a&gt; and just describe my experience with the better looking, cross-platform &lt;a href="http://gobby.0x539.de/"&gt;Gobby&lt;/a&gt;, because Gobby is what the developers of the great game &lt;a href="http://clonk.de/contents_en.html"&gt;Clonk&lt;/a&gt; use.&lt;/p&gt;


	&lt;p&gt;After some initial work to get &lt;a href="http://darcs.0x539.de/trac/obby/cgi-bin/trac.cgi/wiki/InstallationGuide"&gt;Gobby running on Windows&lt;/a&gt; (you have to download and install &lt;span class="caps"&gt;GTK&lt;/span&gt; support packages), Gobby itself is a great piece of work. Editing works smooth and changes are visible immideatelly. Furthermore multiple documents, syntax highlighting (even for Ruby) and a seperate chat during the editing process are supported.&lt;/p&gt;


	&lt;p&gt;All in all I have to say, whenever possible I&amp;#8217;d use Gobby, because it&amp;#8217;s simply ten times more powerful then it&amp;#8217;s web based equivalents, and free.
If I&amp;#8217;d to go with a Web Application I&amp;#8217;d choose the non-free &lt;a href="http://www.jotlive.com/"&gt;JotSpot&lt;/a&gt;, because it supports many different browsers and just works out of the box.&lt;/p&gt;
</description>
      <pubDate>Sat, 17 Dec 2005 14:26:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f7545ffd-32b1-4f52-8815-642cb80e7d65</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/12/17/real-time-collaborative-editors</link>
      <category>Collaboration</category>
      <enclosure length="19527" url="http://blog.schuerrer.org/files/gobby_thumbnail.png" type="image/png"/>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/8</trackback:ping>
    </item>
    <item>
      <title>Convention over configuration</title>
      <description>&lt;a href="http://tech.rufy.com/"&gt;Lucas Carlson&lt;/a&gt; tried to &lt;a href="http://tech.rufy.com/entry/86"&gt;fix &lt;span class="caps"&gt;ERB&lt;/span&gt;&amp;#8217;s html_escape to escape special characters&lt;/a&gt;, because he didn&amp;#8217;t like that Rails produced &lt;input type="button" value="&amp;amp;lt; Back" /&gt; instead of &lt;input type="button" value="&amp;lt; Back" /&gt; with this statement:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;button_to&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;&amp;amp;lt; Back&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;view&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
So he went on and patched &lt;span class="caps"&gt;ERB&lt;/span&gt; so that it supported escaping of ampersands (by prefixing them with a \) and till yesterday that seemed like the Ruby like solution to my. But then I woke up today and everything seemed clear.

	&lt;p&gt;I was a fool. Not only did I completely ignore the potential security breach (&lt;a href="http://en.wikipedia.org/wiki/XSS"&gt;&lt;span class="caps"&gt;XSS&lt;/span&gt;&lt;/a&gt;) that was introduced by essentially removing html_escape&amp;#8217;s teeth, but I also neglected to see the really Rails like solution.&lt;/p&gt;


Rails is based on many principles that sound like buzzwords, but in fact aren&amp;#8217;t. &lt;strong&gt;Convention over configuration&lt;/strong&gt; is one of them, and it means that there&amp;#8217;s always one favoured way to do something. And for his problem this way is replacing the &lt;em&gt;&amp;amp;lt;&lt;/em&gt; with a plain old &lt;em&gt;&amp;lt;&lt;/em&gt;:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;button_to&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;&amp;lt; Back&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;view&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</description>
      <pubDate>Sat, 17 Dec 2005 13:31:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:0680bc6f-657c-4a0d-8c6b-929a356cdac9</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/12/17/convention-over-configuration</link>
      <category>rails</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/7</trackback:ping>
    </item>
    <item>
      <title>How I updated my typo installation</title>
      <description>&lt;p&gt;Yesterday I went from some revision I never cared to remember to the new and shiny 762. But not everything went smooth. While the &lt;em&gt;svn update&lt;/em&gt; worked perfectly, the migrations simpley kept on failing. I even considered looking at the &lt;span class="caps"&gt;SQL&lt;/span&gt; for myself, but thankfully I rerun them once again, and voila, everything worked. This is a &lt;a href="http://typo.leetsoft.com/trac/ticket/594"&gt;&lt;strong&gt;documented bug&lt;/strong&gt;&lt;/a&gt;, but no fix is available as of now and why my &amp;#8220;solution&amp;#8221; worked is incomprehensible to me. (Also, I didn&amp;#8217;t investigate)&lt;/p&gt;


	&lt;p&gt;In other news: Typo has lots of &lt;a href="http://typo.leetsoft.com/trac/ticket/405"&gt;javascript problems&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Even considering all these bugs &lt;a href="http://typo.leetsoft.com"&gt;Typo&lt;/a&gt; is still the best blogging software around (not only because it&amp;#8217;s written in Rails) and I&amp;#8217;ll happily keep on playing beta testing guinea pig.&lt;/p&gt;
</description>
      <pubDate>Fri, 16 Dec 2005 17:43:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:4ba6f393-dce6-4372-95f3-e6ed2fa3a125</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/12/16/how-i-updated-my-typo-installation</link>
      <category>rails</category>
      <category>typo</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/5</trackback:ping>
    </item>
    <item>
      <title>New (Swiss) Money on the block</title>
      <description>&lt;p style="float:left"&gt;&lt;img src="/files/swissfranken.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Switzerland"&gt;Switzerland&lt;/a&gt;, the country we all wish to be our home, held a competition to find a new design for their &lt;a href="http://www.snb.ch/e/banknoten/neue_noten/gestalter/krebs.html"&gt;&lt;strong&gt;upcoming series of Swiss Francs&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Although they amongst others feature a rendering of the &lt;span class="caps"&gt;AIDS&lt;/span&gt; virus and some people seem to object to that, I can&amp;#8217;t help but admire this great design and the message it carries: The future (as the past) belongs to science and progress! Yay!&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Source: &lt;a href="http://www.boingboing.net/2005/12/15/new_swiss_money_has_.html"&gt;BoingBoing&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Thu, 15 Dec 2005 18:03:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:f087dd7a-62b8-49b6-98f5-8cddad08ede6</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/12/15/new-swiss-money-on-the-block</link>
      <enclosure length="6593" url="http://blog.schuerrer.org/files/swissfranken.jpg" type="image/pjpeg"/>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/4</trackback:ping>
    </item>
    <item>
      <title>Oil Expert To Address Theory That Peak Oil Has Arrived</title>
      <description>&lt;p&gt;&lt;a href="http://www.physorg.com/news8441.html"&gt;Oil Expert To Address Theory That Peak Oil Has Arrived&lt;/a&gt; from &lt;a href="http://www.physorg.com"&gt;PhysOrg.com&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Princeton University emeritus professor and renowned oil analyst Ken Deffeyes thinks that the all-time production peak for petroleum, or &amp;#8220;peak oil,&amp;#8221; will occur on or around this Thanksgiving.&lt;/p&gt;


	&lt;p&gt;According to the article the professor already correctly predicted the US Oil Peak in 1970, so there might be some truth to it, but as the Austrian cabaret artist &lt;a href="http://www.hader.at/"&gt;Josef Hader&lt;/a&gt; says: &amp;#8220;I can&amp;#8217;t stand all the people that rant about people more than 100m away.&amp;#8221;&lt;/p&gt;
</description>
      <pubDate>Thu, 24 Nov 2005 15:25:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d0613b88-0301-43c3-b5bb-64245f21be85</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/11/24/oil-expert-to-address-theory-that-peak-oil-has-arrived</link>
      <category>Politics</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/3</trackback:ping>
    </item>
    <item>
      <title>iRiver H10 USB Connectivity</title>
      <description>&lt;p&gt;Today I tried to connect an iRiver &lt;span class="caps"&gt;H10&lt;/span&gt; to my Windows XP Professional &lt;span class="caps"&gt;SP 2&lt;/span&gt; Notebook. At first everything went fine, XP recognized the new device and showed the &amp;#8220;Add new Device&amp;#8221; Dialog, but the driver installation failed. Windows Update didn&amp;#8217;t have any drivers and neither did the iRiver Homepage. Firmware updates, check. Manuals, checkk. Drivers, fail.&lt;/p&gt;


	&lt;p&gt;And to make my day worse it also failed on two different machines in the same way.&lt;/p&gt;


	&lt;p&gt;That means no iRiver for me.&lt;/p&gt;
</description>
      <pubDate>Tue, 22 Nov 2005 15:00:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:61cbcfd0-950a-4086-bc0c-6d7395c1ad25</guid>
      <author>MSch</author>
      <link>http://blog.schuerrer.org/articles/2005/11/22/iriver-h10-usb-connectivity</link>
      <category>iRiver</category>
      <trackback:ping>http://blog.schuerrer.org/articles/trackback/2</trackback:ping>
    </item>
  </channel>
</rss>
