<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Dirk Siemers</title>
  <link href="http://www.dirksiemers.de/atom.xml" rel="self" />
  <link href="http://www.dirksiemers.de" />
  <updated>2011-02-18T15:43:41+01:00</updated>
  <id>http://www.dirksiemers.de</id>
  <author>
    <name>Dirk Siemers</name>
    <email>dirk.siemers@gmail.com</email>
  </author>
  <entry>
    <title>Linksammlung KW 06+07 2011</title>
    <link href="http://www.dirksiemers.de/blog/2011/02/linksammlung-kw-06+07-2011" />
    <updated>2011-02-18T11:23:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/02/linksammlung-kw-06+07-2011</id>
    <content type="html">
      &lt;p&gt;Und schon wieder Freitag&#8230; keine Zeit&#8230; gespeicherte Links der letzten 2 Wochen raussuchen, Blogeintrag schreiben und schnell weiter an &lt;a href=&quot;http://www.sovido.de&quot;&gt;sovido&lt;/a&gt; arbeiten.&lt;/p&gt;
      
      &lt;h4&gt;Ruby + Rails&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://blog.codegram.com/2011/2/css3-html5-and-how-to-degrade-gracefully&quot;&gt;CSS3, HTML5 and how to degrade gracefully.&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/twg/comfortable-mexican-sofa&quot;&gt;ComfortableMexicanSofa - a powerful micro CMS for Ruby on Rails 3 applications&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://travis-ci.org/&quot;&gt;Travis – a distributed build server tool for the Ruby community&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Webdev&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://people.mozilla.com/~prouget/ie9/&quot;&gt;Is IE9 a modern browser?&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://line25.com/tutorials/how-to-create-a-cool-animated-menu-with-jquery&quot;&gt;How To Create a Cool Animated Menu with jQuery&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://gomockingbird.com/&quot;&gt;Mockingbird - a fast and friendly rapid wireframing tool&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Sonstiges&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.applegazette.com/wp-content/uploads/iPad2_Poster-large.png&quot;&gt;Building The iPad 2&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Code Schnipsel&lt;/h4&gt;
      
      &lt;div class=&quot;code_window&quot;&gt;
      &lt;em&gt;toggle details in 2nd table row&lt;/em&gt;
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;%table&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;#videos&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;%thead&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;%tr&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;%th&lt;/span&gt; Heading 1
                  &lt;span class=&quot;nt&quot;&gt;%th&lt;/span&gt; Heading 2
          &lt;span class=&quot;nt&quot;&gt;%tbody&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@videos&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;video&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
                  &lt;span class=&quot;nt&quot;&gt;%tr&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.video&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;video-&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;video&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&quot;}
                      &lt;span class=&quot;nt&quot;&gt;%td&lt;/span&gt; Info 1
                      &lt;span class=&quot;nt&quot;&gt;%td&lt;/span&gt; Info 2
                  &lt;span class=&quot;nt&quot;&gt;%tr&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.video-details&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;video-details-&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;video&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&quot;}
                      &lt;span class=&quot;nt&quot;&gt;%td&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:colspan&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                          &lt;span class=&quot;nt&quot;&gt;%p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;video&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_yaml&lt;/span&gt;
      
      &lt;span class=&quot;nd&quot;&gt;:css&lt;/span&gt;
          &lt;span class=&quot;nd&quot;&gt;.video-details { display:none; }&lt;/span&gt;
          &lt;span class=&quot;nd&quot;&gt;.video-details td { padding: 0 1em; }&lt;/span&gt;
          &lt;span class=&quot;nd&quot;&gt;.hover { background: #ddd; }&lt;/span&gt;
      
      &lt;span class=&quot;nd&quot;&gt;:javascript&lt;/span&gt;
          &lt;span class=&quot;nd&quot;&gt;$(document).ready(function(){&lt;/span&gt;
              &lt;span class=&quot;nd&quot;&gt;$(&quot;.video&quot;).hover(function () {&lt;/span&gt;
                  &lt;span class=&quot;nd&quot;&gt;$(this).css(&quot;cursor&quot;, &quot;pointer&quot;);&lt;/span&gt;
                  &lt;span class=&quot;nd&quot;&gt;$(this).addClass(&quot;hover&quot;);&lt;/span&gt;
              &lt;span class=&quot;nd&quot;&gt;}, function () {&lt;/span&gt;
                  &lt;span class=&quot;nd&quot;&gt;$(this).removeClass(&quot;hover&quot;);&lt;/span&gt;
              &lt;span class=&quot;nd&quot;&gt;});&lt;/span&gt;
              &lt;span class=&quot;nd&quot;&gt;$(&quot;.video&quot;).click(function(event){&lt;/span&gt;
                  &lt;span class=&quot;nd&quot;&gt;$(this).next(&quot;tr&quot;).toggle();&lt;/span&gt;
              &lt;span class=&quot;nd&quot;&gt;});&lt;/span&gt;
          &lt;span class=&quot;nd&quot;&gt;});    &lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      &lt;/div&gt;
    </content>
  </entry>
  <entry>
    <title>Awesome Feature Suggest 1</title>
    <link href="http://www.dirksiemers.de/blog/2011/02/awesome-feature-suggest-1of3" />
    <updated>2011-02-15T13:02:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/02/awesome-feature-suggest-1of3</id>
    <content type="html">
      &lt;p&gt;Ich habe mich am Sonntag mit einem &lt;a href=&quot;http://tutorialzine.com/2010/08/ajax-suggest-vote-jquery-php-mysql/&quot;&gt;Artikel&lt;/a&gt; von der Seite &lt;a href=&quot;http://tutorialzine.com&quot;&gt;Tutorialzine&lt;/a&gt; befasstet. Das Tutorial beschreibt den Aufbau einer simplen Feature Request App mit PHP, MySQL und jQuery.&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://suggest.dirksiemers.de&quot;&gt;HIER geht´s direkt zur app&lt;/a&gt;&lt;/p&gt;
      
      &lt;p&gt;Da ich noch nicht direkt ein Projekt mit Rails 3 entwickeln konnte, habe ich mich entschlossen den Ansatz von &lt;a href=&quot;http://tutorialzine.com&quot;&gt;Tutorialzine&lt;/a&gt; aufzunehmen und eine kleine Rails 3 app zu schreiben, nur BESSER!&lt;/p&gt;
      
      &lt;p&gt;Du brauchst für mein Tutorial RVM!&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    rails new suggest
          echo &quot;rvm ruby-1.9.2@suggest --create&quot; &gt; suggest/.rvmrc
          cd suggest
      
          ================================================================
          = Trusting an .rvmrc file means that whenever you cd into the  =
          = directory RVM will excecute this .rvmrc script in your shell =
          =                                                              =
          = Now that you have examined the contents of the file, do you  =
          = wish to trust this .rvmrc from now on?                       =
          ================================================================
      
          (yes or no) &gt; yes
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Wir werden aufgefordert die angelegte .rvmrc zu vertrauen, was natürlich der Fall ist, denn wir wollen ein seperates gemset für unsere neue app anlegen.&lt;/p&gt;
      
      &lt;p&gt;Für unser SCM nutzen wir natürlich git. Ich persönlich verfolge den Ansatz von git-flow und initialisiere somit meinen branches mit:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    git flow init
      
          No branches exist yet. Base branches must be created now.
          Branch name for production releases: [master] 
          Branch name for &quot;next release&quot; development: [develop] 
      
          How to name your supporting branch prefixes?
          Feature branches? [feature/] 
          Release branches? [release/] 
          Hotfix branches? [hotfix/] 
          Support branches? [support/] 
          Version tag prefix? []
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Sofern nicht anders benötigt, einfach ENTER drücken ;) Jetzt checken in welchen branch wir uns befinden:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    git branch
      
          * develop
            master
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Wir sehen, dass wir uns jetzt im develop branch befinden.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    git add .
          git commit -a -m &quot;initial commit&quot;
          bundle
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Zunächst den initial commit ausführen und als nächstes bundeler laufen lassen, damit wir in unserem frischen gemset auch alle benötigten gems haben.&lt;/p&gt;
      
      &lt;p&gt;Okay, das Projekt ist soweit um Modelle anzulegen. Fangen wir mit den suggestions an.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    rails generate model suggestion suggestion:string votes_up:integer votes_down:integer rating:integer
          rake db:migrate
          git add .
          git commit -a -m &quot;adding suggestion model&quot;
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Füllen wir das model &lt;strong&gt;app/models/suggestion.rb&lt;/strong&gt; mit Leben:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ActiveRecord&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Base&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;before_create&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:set_rating&lt;/span&gt;
        
        &lt;span class=&quot;n&quot;&gt;validates&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:presence&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;validates&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:uniqueness&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;kp&quot;&gt;true&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vote_up&lt;/span&gt;
          &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;update_attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
           &lt;span class=&quot;ss&quot;&gt;:votes_up&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;votes_up&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
           &lt;span class=&quot;ss&quot;&gt;:rating&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rating&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;vote_down&lt;/span&gt;
          &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;update_attributes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
           &lt;span class=&quot;ss&quot;&gt;:votes_down&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;votes_down&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
           &lt;span class=&quot;ss&quot;&gt;:rating&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rating&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to_i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;kp&quot;&gt;private&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;set_rating&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rating&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;votes_up&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;votes_down&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Die beiden Methoden &lt;strong&gt;vote_up&lt;/strong&gt; und &lt;strong&gt;vote_down&lt;/strong&gt; erleichtern später die Auswertung. Mit der Methode &lt;strong&gt;set_rating&lt;/strong&gt; initialisiere ich explizit vor dem Erstellen des Models die Wertungsattribute. Zusätzlich spendiere ich dem model die Validierung auf Vorhandensein und Einmaligkeit des Attributs &lt;strong&gt;suggestion&lt;/strong&gt;.&lt;/p&gt;
      
      &lt;p&gt;Das sind schon viele Kleinigkeiten, die wir dem Model auftragen zu beherzigen, aber passt das auch? Um z.B. die Validierungen zu testen, könnten wir folgenden Unit Test schreiben:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;test_helper&#39;&lt;/span&gt;
      
      &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SuggestionTest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ActiveSupport&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;TestCase&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;fixtures&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestions&lt;/span&gt;
        
        &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;suggestion attributes must not be empty&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;invalid?&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;errors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;any?&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;suggestion is not valid without a unique suggestion&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;  &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestions&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:rails&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_equal&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;has already been taken&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;errors&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;; &#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;l-Scalar-Plain&quot;&gt;rails&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;Create a Ruby on Rails Tutorial&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;votes_up&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;votes_down&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;rating&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
      
      &lt;span class=&quot;l-Scalar-Plain&quot;&gt;blog&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;Add new blog entry&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;votes_up&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;votes_down&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
        &lt;span class=&quot;l-Scalar-Plain&quot;&gt;rating&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;0&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Und was sagt unser Unit Test dazu?&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    rake test:units
      
          Started
          ..
          Finished in 0.194499 seconds.
      
          2 tests, 4 assertions, 0 failures, 0 errors, 0 skips
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Sauber, 2 tests, 4 assertions und keine Fehler. So kann das weitergehen.
      Also, Quellcode commiten und einen Controller für unser Model mit einer index action anlegen. Außerdem arbeite ich gerne mit haml und jquery, daher packe ich sie in das gemfile und starte bundler. Danach hole ich mir jQuery in das Projekt (rails.js muss überschrieben werden) und &#8220;verschiebe&#8221; das application .erb layout nach .haml.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;    git commit -a -m &quot;validating unique not empty suggestion&quot;
          rails g controller suggestions index
          echo &quot;gem 'haml'&quot; &gt;&gt; Gemfile
          echo &quot;gem 'jquery-rails', '&gt;= 0.2.6'&quot; &gt;&gt; Gemfile
          bundle
          rails generate jquery:install --ui
          mv app/views/layouts/application.html.erb app/views/layouts/application.html.haml
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Hier nun der Inhalt für das application haml layout:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nn&quot;&gt;!!! 5&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;%html&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;%head&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;%meta&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;http-equiv&#39;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;Content-Type&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:content&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;text/html; charset=utf-8&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}/&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;%title&lt;/span&gt; Suggest
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stylesheet_link_tag&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:all&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;javascript_include_tag&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:defaults&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;csrf_meta_tag&lt;/span&gt;
          
          &lt;span class=&quot;nt&quot;&gt;%body&lt;/span&gt;
              &lt;span class=&quot;nf&quot;&gt;#page&lt;/span&gt;
                  &lt;span class=&quot;nf&quot;&gt;#heading&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.rounded&lt;/span&gt;
                      &lt;span class=&quot;nt&quot;&gt;%h1&lt;/span&gt;
                          Feature Suggest
                          &lt;span class=&quot;nt&quot;&gt;%i&lt;/span&gt; for Tutorialzine.com
                      
                  &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;yield&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Der Inhalt vom Controller &lt;strong&gt;app/controllers/suggestions_controller.rb&lt;/strong&gt; :&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SuggestionsController&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ApplicationController&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;before_filter&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:load_suggestions&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;index&lt;/span&gt;
          &lt;span class=&quot;vi&quot;&gt;@suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;create&lt;/span&gt;
          &lt;span class=&quot;vi&quot;&gt;@suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;params&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      
          &lt;span class=&quot;n&quot;&gt;respond_to&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wants&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;save&lt;/span&gt;
              &lt;span class=&quot;n&quot;&gt;wants&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;redirect_to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;root_path&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
              &lt;span class=&quot;n&quot;&gt;wants&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;index&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;kp&quot;&gt;private&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;load_suggestions&lt;/span&gt;
          &lt;span class=&quot;vi&quot;&gt;@suggestions&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;rating DESC&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;pre&gt;&lt;code&gt;    rm public/index.html
          mv app/views/suggestions/index.html.erb app/views/suggestions/index.html.haml
          touch public/stylesheets/styles.css
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Das CSS und die Bilder habe ich mir bei dem Artikel von  &lt;a href=&quot;http://tutorialzine.com/2010/08/ajax-suggest-vote-jquery-php-mysql/&quot;&gt;tutorialzine.com&lt;/a&gt; ausgeliehen. Das Css kommt in die &lt;strong&gt;public/stylesheets/styles.css&lt;/strong&gt;, die Bilder in den Ordner &lt;strong&gt;public/images/&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Der Inhalt der &lt;strong&gt;routes.rb&lt;/strong&gt; :&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;no&quot;&gt;Suggest&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;Application&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;draw&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;resources&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestions&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;root&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:to&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;suggestions#index&quot;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Der Inhalt vom index View &lt;strong&gt;app/views/suggestions/index.haml&lt;/strong&gt; :&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;%ul&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.suggestions&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@suggestions&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;each&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;render&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:partial&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;suggestion&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:locals&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
              
      &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;form_for&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:as&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestions_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:html&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;suggest&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;|&lt;/span&gt;
          &lt;span class=&quot;nt&quot;&gt;%p&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text_field&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;suggestionText&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:class&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;rounded&quot;&lt;/span&gt;
              &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;submit&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Submit&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:disable_with&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;Submiting...&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;submitSuggestion&quot;&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Die Aktivität/Inaktivität der suggestion definiere ich vorerst aus
      Der Inhalt vom Partial suggestion &lt;strong&gt;app/views/suggestions/_suggestion.haml&lt;/strong&gt; :&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nt&quot;&gt;%li&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;s_&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&quot;}
          &lt;span class=&quot;nt&quot;&gt;%div&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:class&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;vote &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;inactive&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;inactive&#39;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;active&#39;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&quot;}
              &lt;span class=&quot;nt&quot;&gt;%span&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.up&lt;/span&gt;
              &lt;span class=&quot;nt&quot;&gt;%span&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;.down&lt;/span&gt;
          &lt;span class=&quot;nc&quot;&gt;.text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;
          &lt;span class=&quot;nc&quot;&gt;.rating&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;suggestion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rating&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Als nächstes können wir funktionalen Test erstellen um den Controller zu überprüfen:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;test_helper&#39;&lt;/span&gt;
      
      &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SuggestionsControllerTest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;ActionController&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;TestCase&lt;/span&gt;
        &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;should get index&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;get&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:index&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_response&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:success&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_select&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;#page ul.suggestions li&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_tag&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;form&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:attributes&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:action&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;/suggestions&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:method&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;post&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;should create suggestion&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt; 
          &lt;span class=&quot;n&quot;&gt;assert_difference&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;Suggestion.count&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Create functional tests&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_redirected_to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;root_path&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
        &lt;span class=&quot;nb&quot;&gt;test&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;should not create suggestion&quot;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_difference&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;Suggestion.count&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;post&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:create&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:suggestion&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Create a Ruby on Rails Tutorial&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
          &lt;span class=&quot;n&quot;&gt;assert_template&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:index&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
        
      &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;pre&gt;&lt;code&gt;    rake test:functionals
      
          Started
          ...
          Finished in 0.316923 seconds.
      
          3 tests, 7 assertions, 0 failures, 0 errors, 0 skips
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Okay, wir können sicher sein, dass unser Controller macht, was er tun soll.&lt;/p&gt;
      
      &lt;p&gt;Bevor ich hier die 300 LOC Grenze für einen Blogeintrag überschreite, werde ich den suggestion_votes und der meiner awsome Variante des Feature Requests jeweils einen eigenen Blogeintrag widmen.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title>Linksammlung KW05 2011</title>
    <link href="http://www.dirksiemers.de/blog/2011/02/linksammlung-kw05-2011" />
    <updated>2011-02-07T08:25:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/02/linksammlung-kw05-2011</id>
    <content type="html">
      &lt;h4&gt;Rails&lt;/h4&gt;
      
      &lt;p&gt;&lt;img src=&quot;http://www.dirksiemers.de/images/google_reader_ror.png&quot; title=&quot;google reader rails posts&quot; alt=&quot;google reader rails posts&quot; /&gt;
      Seit einigen Wochen habe ich mich nicht getraut den folder &#8220;rubyonrails&#8221; in meinem google reader abzuarbeiten. Das hat dazu geführt, dass sich dort so
      Einges angesammelt hat. Nun der Versuch dem Haufen Herr zu werden. Dies sind die Ergebnisse meiner Aufräumaktion:&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://thechangelog.com/post/3046439187/easy-translate-google-translate-with-bulk-translate-in-r&quot;&gt;easy_translate: Google (bulk) Translate in Ruby&lt;/a&gt;&lt;br /&gt;Einfaches gem für die die neue Google Translate V2 API&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://robots.thoughtbot.com/post/3105121049/delivering-email-with-amazon-ses-in-a-rails-3-app&quot;&gt;Delivering email with Amazon SES in a Rails 3 app&lt;/a&gt;&lt;br /&gt;Amazon hat seinen Simple Email Service (SES) gestartet. Hier die Infos um SES in seine Rails app zu integrieren.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://pivotallabs.com/users/ledwards/blog/articles/1557-visit-to-olin-college&quot;&gt;Lee Edwards - Visit to Olin College&lt;/a&gt;&lt;br /&gt;Eine nette Linksammlung über Agile Development, TDD, Git, Ruby, Rails &amp; popular gems&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://blogs.sitepoint.com/2011/02/01/getting-started-with-rails-3-part-1/&quot;&gt;Getting Started with Rails 3: Part 1&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://blogs.sitepoint.com/2011/02/02/getting-started-with-rails-3-part-2/&quot;&gt;Getting Started with Rails 3: Part 2&lt;/a&gt;&lt;br /&gt;2 Posts über die Erstellung einer Rails app zu Thema &#8220;URL shortener&#8221;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://nvie.com/posts/a-git-flow-screencast/&quot;&gt;A git-flow screencast&lt;/a&gt;&lt;br /&gt;Ich persönlich nutze für mein Projekt auch git-flow und kann es nur empfehlen. Besonders hotfixes lassen sich einfach umsetzen, wenn man gerade an einem feature arbeitet. Hier ein passender Screencast zum Thema git-flow.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://teachmetocode.com/screencasts/setting-up-and-testing-devise-delicious-clone/&quot;&gt;Setting Up And Testing Devise – Delicious Clone&lt;/a&gt;&lt;br /&gt;Ein weiterer Screencast, diesmal zu Thema Einrichtung und Testen von Devise&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://dalibornasevic.com/posts/21-rvm-and-passenger-setup-for-rails-2-and-rails-3-apps&quot;&gt;RVM and Passenger setup for Rails 2 and Rails 3 apps&lt;/a&gt;&lt;br /&gt;Howto um den Passenger mit RVM zu nutzen. Hilfreich, wenn man sein Projekt von Rails 2 auf Rails 3 uppen will.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.engineyard.com/blog/2011/front-end-maintainability-with-sass-and-style-guides/&quot;&gt;Front-end Maintainability with Sass and Style Guides&lt;/a&gt;&lt;br /&gt; Tips und Tricks für die Einbindung von HAML und SASS in dem eigenen Projekt.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.alfajango.com/blog/rails-3-remote-links-and-forms/&quot;&gt;Rails 3 Remote Links and Forms: A Definitive Guide&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.alfajango.com/blog/rails-3-remote-links-and-forms-data-type-with-jquery/&quot;&gt;Rails 3 Remote Links and Forms Part 2: Data-type (with jQuery)&lt;/a&gt;&lt;br /&gt;2 Rails 3 AJAX Guides&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.engineyard.com/blog/2011/introducing-railsinstaller/&quot;&gt;Introducing RailsInstaller&lt;/a&gt;&lt;br /&gt;Engine Yard hat einen RailsInstaller für Windows rausgebracht. Klingt interessant.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://everydayrails.com/2011/01/11/beginning-rails-testing.html&quot;&gt;Beginning Rails testing&lt;/a&gt;&lt;br /&gt;Für alle, die ihre Rails apps immer noch nicht testen&#8230;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://robots.thoughtbot.com/post/2745188601/diy-font-face-web-service&quot;&gt;DIY @font-face web service&lt;/a&gt;&lt;br /&gt;Kurze Einführung von font-face und die Einrichtung eines eigenen Services.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;jQuery/JavaScript&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://jquerymobile.com/2011/02/jquery-mobile-alpha-3-released/&quot;&gt;jQuery Mobile Alpha 3 Released&lt;/a&gt;&lt;br /&gt;Ich finde, dass das jQuery mobile framework relativ simpel einsetzbar ist und einen echten Mehrwert für die mobile Version‚ einer Website/app bietet.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://tutorialzine.com/2011/02/converting-jquery-code-plugin/&quot;&gt;Converting jQuery Code to a Plugin&lt;/a&gt;&lt;br /&gt;Es ist relativ simpel ein jQuery Plugin zu erstellen, daher sollte man sich überlegen seinen häufiger genutzen jQuery Code einfach in ein Plugin umzuwandeln.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://thechangelog.com/post/3156706920/treesaver-javascript-library-for-creating-column-and-pag&quot;&gt;treesaver: HTML5, JavaScript library for creating magazine style layouts for iPad and web&lt;/a&gt;&lt;br /&gt;Habe ich noch nicht benutzen können, fand das aber eine tolle Idee.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Linux&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://wiki.daviddarts.com/PirateBox&quot;&gt;PirateBox&lt;/a&gt;&lt;br /&gt;Das Prinzip der PirateBox ist es überall und jederzeit einen freien und offenen Dateiaustausch zu ermöglichen. Würde mich nicht wundern, wenn auf den nächsten Camps solche Piratenboxen rumstehen ;)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://rockiger.com/de/default/rockigeros&quot;&gt;ROCKIGER OS 10.04&lt;/a&gt;&lt;br /&gt;Ich finde die Idee gut und werde demnächst meinen alten Laptop mit Rockiger OS ausstatten, mal gucken, ob es hält, was es verspricht&#8230;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Mac&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.freemacsoft.net/AppCleaner/&quot;&gt;AppCleaner&lt;/a&gt;&lt;br /&gt;Kennt bestimmt schon jeder. War mir neu und ist eine ganz klar Empfehlung für jeden Mac User.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.zambetti.com/projects/liveview/&quot;&gt;LiveView for iPhone &amp; iPad&lt;/a&gt;&lt;br /&gt;Wie sieht eigentlich mein Design auf dem iPad oder iPhone aus? Mit dieser Kombination aus iPhone/iPad App und OSX Programm kann der aktuelle Bildschirmausschnitt auf das iDevice angeschaut werden.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://dennisbloete.de/blog/syncing-socialite-across-multiple-macs-using-dropbox/&quot;&gt;Syncing Socialite across multiple Macs (using Dropbox)&lt;/a&gt;&lt;br /&gt;Cooles Tutorial von Dennis um seine Programme zwischen mehreren Rechnern zu syncen, wenn die Apps dieses von Haus aus nicht können/wollen.&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Freelancer Tips&lt;/h4&gt;
      
      &lt;p&gt;Hier einige Tipps wie man sein Leben führen sollte ;) Einige coole Ideen kann man schon mitnehmen und für sich anwenden.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://thinkvitamin.com/business/startups-think-again-writing-code-is-not-your-biggest-challenge/&quot;&gt;Startups, Think Again: Writing Code Is Not Your Biggest Challenge&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.1stwebdesigner.com/design/website-ideas-positive-outcome/&quot;&gt;Excellent Ideas to Having a Positive Outcome to Your Website&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/5747213/how-to-hack-your-brain&quot;&gt;How to Hack Your Brain&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.webdesignerdepot.com/2011/02/6-time-tested-applications-for-freelance-web-designers/&quot;&gt;6 Time-Tested Applications for Freelance Web Designers&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Sonstiges&lt;/h4&gt;
      
      &lt;p&gt;Diese beiden Sachen haben keine Kategorie gefunden, sollten aber erwähnt werden&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/#!5753459/learn-the-basics-of-photoshop-in-under-25-minutes&quot;&gt;Learn the Basics of Photoshop in Under 25 Minutes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.cartoonland.de/archiv/super-bowl-werbespots-2011/&quot;&gt;Super Bowl Werbespots 2011&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Linksammlung KW03 2011</title>
    <link href="http://www.dirksiemers.de/blog/2011/01/linksammlung-kw03-2011" />
    <updated>2011-01-21T16:40:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/01/linksammlung-kw03-2011</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.catswhocode.com/blog/8-useful-sites-for-web-developers&quot;&gt;8 useful sites for web developers&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://headjs.com/&quot;&gt;Head JS script loader&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/quickleft/prologue&quot;&gt;Prologue - Generate a Rails 3 app with the application templates&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://thechangelog.com/post/2857400260/railsready-setup-script-to-get-ruby-and-rails-running&quot;&gt;Setup script to get Ruby and Rails running on Ubuntu with one command&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://tutorialzine.com/2009/12/colorful-clock-jquery-css/&quot;&gt;A Colorful Clock With CSS &amp; jQuery&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://tutorialzine.com/2011/01/how-to-make-auto-advancing-slideshows/&quot;&gt;How to Make Auto-Advancing Slideshows&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://tutorialzine.com/2010/09/html5-canvas-slideshow-jquery/&quot;&gt;An HTML5 Slideshow w/ Canvas &amp; jQuery&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.drinkrails.com/&quot;&gt;Drink Rails - Ruby on Rails Blog Links&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://thinkvitamin.com/code/create-javascript-apps-with-backbone-js/&quot;&gt;Create JavaScript Apps with Backbone.js&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Linksammlung KW02 2011</title>
    <link href="http://www.dirksiemers.de/blog/2011/01/linksammlung-kw02-2011" />
    <updated>2011-01-14T10:36:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/01/linksammlung-kw02-2011</id>
    <content type="html">
      &lt;h4&gt;Rails&lt;/h4&gt;
      
      &lt;p&gt;Hier einige Projekte die interessant sein könnten.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://stillalive.com/&quot;&gt;StillAlive&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://codehero.es/rails_gems_plugins/e9s&quot;&gt;Enrichments - Enrichments for a front-end CMS and i18n&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/oscardelben/Mongo-Shortener&quot;&gt;Shortener application that uses MongoDB, cucumber and rspec&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://blogupstairs.com/framework/ruby-on-rails/8-free-open-source-ruby-on-rails-content-management-system/&quot;&gt;8 Free Open Source Ruby on Rails Content Management System&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;RoR E - rails for ecommerce&lt;/h4&gt;
      
      &lt;p&gt;Leider hab ich das Projekt noch nicht testen können. Klingt aber Vielversprechend, hat das schon jemand Erfahrung mit?&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.ror-e.com/&quot;&gt;ror_ecommerce&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.rubyflow.com/items/4885&quot;&gt;RoR E-commerce in 45 minutes.&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.ror-e.com/posts/1-ror-ecommerce-vs-spree&quot;&gt;ror_ecommerce vs spree&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Gmail&lt;/h4&gt;
      
      &lt;p&gt;Einige Tipps zu Gmail sofern noch nicht bekannt.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/5721986/top-10-gmail-labs-you-should-enable&quot;&gt;Top 10 Gmail Labs You Should Enable&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/5719112/10-webapps-that-add-great-new-features-to-gmail&quot;&gt;10 Webapps that Add Great New Features to Gmail&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;h4&gt;Sonstiges&lt;/h4&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/5717451/how-to-get-the-most-out-of-your-new-camera&quot;&gt;Set Up and Get to Know Your New Camera&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.shopbetreiber-blog.de/2011/01/03/eventkalender-fuer-shopbetreiber-1-2011/&quot;&gt;Internationaler Eventkalender 2011 für Shopbetreiber&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://lifehacker.com/5719099/most-popular-iphone-posts-and-free-apps-of-2010&quot;&gt;Most Popular iPhone Posts and Free Apps of 2010&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
      
      
      &lt;iframe src=&quot;http://player.vimeo.com/video/18047040&quot; width=&quot;400&quot; height=&quot;230&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
      
      
      &lt;p&gt;&lt;a href=&quot;http://vimeo.com/18047040&quot;&gt;WikiLeaks – Rebellen im Netz&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/user407408&quot;&gt;netzpolitik&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <title>Magento Ubuntu Nginx Sample Installation</title>
    <link href="http://www.dirksiemers.de/blog/2011/01/magento-ubuntu-nginx-sample-installation" />
    <updated>2011-01-11T10:43:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2011/01/magento-ubuntu-nginx-sample-installation</id>
    <content type="html">
      &lt;h3&gt;PHP und nginx&lt;/h3&gt;
      
      &lt;p&gt;PHP5 und nginx installieren:&lt;br/&gt;
      &lt;strong&gt;sudo aptitude install php5-cgi nginx&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Erestelle ein PHP5 FastCGI start-up script mit&lt;br/&gt;
      &lt;strong&gt;sudo nano /etc/init.d/php-fastcgi&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Folgenden Inhalt einfügen:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c&quot;&gt;#!/bin/bash&lt;/span&gt;
      &lt;span class=&quot;nv&quot;&gt;BIND&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;127.0.0.1:9000
      &lt;span class=&quot;nv&quot;&gt;USER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;www-data
      &lt;span class=&quot;nv&quot;&gt;PHP_FCGI_CHILDREN&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;15
      &lt;span class=&quot;nv&quot;&gt;PHP_FCGI_MAX_REQUESTS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;1000
      
      &lt;span class=&quot;nv&quot;&gt;PHP_CGI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;/usr/bin/php-cgi
      &lt;span class=&quot;nv&quot;&gt;PHP_CGI_NAME&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;basename &lt;span class=&quot;nv&quot;&gt;$PHP_CGI&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
      &lt;span class=&quot;nv&quot;&gt;PHP_CGI_ARGS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND&quot;&lt;/span&gt;
      &lt;span class=&quot;nv&quot;&gt;RETVAL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0
      
      start&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; -n &lt;span class=&quot;s2&quot;&gt;&quot;Starting PHP FastCGI: &quot;&lt;/span&gt;
            start-stop-daemon --quiet --start --background --chuid &lt;span class=&quot;s2&quot;&gt;&quot;$USER&quot;&lt;/span&gt; --exec /usr/bin/env -- &lt;span class=&quot;nv&quot;&gt;$PHP_CGI_ARGS&lt;/span&gt;
            &lt;span class=&quot;nv&quot;&gt;RETVAL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$?&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$PHP_CGI_NAME.&quot;&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      stop&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; -n &lt;span class=&quot;s2&quot;&gt;&quot;Stopping PHP FastCGI: &quot;&lt;/span&gt;
            killall -q -w -u &lt;span class=&quot;nv&quot;&gt;$USER&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$PHP_CGI&lt;/span&gt;
            &lt;span class=&quot;nv&quot;&gt;RETVAL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$?&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$PHP_CGI_NAME.&quot;&lt;/span&gt;
      &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
      
      &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$1&quot;&lt;/span&gt; in
          start&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
            start
        ;;
          stop&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
            stop
        ;;
          restart&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
            stop
            start
        ;;
          *&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Usage: php-fastcgi {start|stop|restart}&quot;&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;exit &lt;/span&gt;1
        ;;
      &lt;span class=&quot;k&quot;&gt;esac&lt;/span&gt;
      &lt;span class=&quot;nb&quot;&gt;exit&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$RETVAL&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Das Startscript ausführbar machen:&lt;br/&gt;
      &lt;strong&gt;sudo chmod +x /etc/init.d/php-fastcgi&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;PHP starten:&lt;br/&gt;
      &lt;strong&gt;sudo /etc/init.d/php-fastcgi start&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;(Optional) Beim Booten ausführen:&lt;br/&gt;
      &lt;strong&gt;sudo update-rc.d php-fastcgi defaults&lt;/strong&gt;&lt;/p&gt;
      
      &lt;h4&gt;Testen&lt;/h4&gt;
      
      &lt;p&gt;Trage in der nginx server config folgendes ein:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;    &lt;span class=&quot;k&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;\.php$&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_pass&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_index&lt;/span&gt;   &lt;span class=&quot;s&quot;&gt;index.php&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_param&lt;/span&gt;   &lt;span class=&quot;s&quot;&gt;SCRIPT_FILENAME&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/var/www/nginx-default&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;include&lt;/span&gt;         &lt;span class=&quot;s&quot;&gt;fastcgi_params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;nginx neu starten:&lt;br/&gt;
      &lt;strong&gt;sudo /etc/init.d/nginx restart&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Erstelle eine Datei in deinem Web-Verzeichnis:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;x&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;&lt;?php&lt;/span&gt;
                &lt;span class=&quot;nb&quot;&gt;phpinfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
              &lt;span class=&quot;cp&quot;&gt;?&gt;&lt;/span&gt;&lt;span class=&quot;x&quot;&gt;&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Die erstellte Seite im Browser aufrufen. Nun sollte die PHP Info Seite erscheinen.&lt;/p&gt;
      
      &lt;h3&gt;Magento installieren:&lt;/h3&gt;
      
      &lt;p&gt;PHP Pakete für Magento installieren:&lt;br/&gt;
      &lt;strong&gt;sudo apt-get install php5-mcrypt php5-curl php5-gd&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Limitierung von Ressourcen. Maximalwert des Speichers erhöhen.&lt;br/&gt;
      &lt;strong&gt;sudo nano /etc/php5/cgi/php.ini&lt;/strong&gt;&lt;br/&gt;
      &lt;strong&gt;memory_limit = 64M;&lt;/strong&gt;&lt;/p&gt;
      
      &lt;p&gt;Magento aus dem SVN importieren:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;        sudo apt-get install subversion 
              &lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /var/www
              svn checkout http://svn.magentocommerce.com/source/branches/1.4
              sudo mv 1.4 magento 
              sudo chown -R www-data magento
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Magento Datenbank anlegen und Beispieldaten importieren:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;        wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz
              tar xvfz magento-sample-data-1.2.0.tar.gz
              &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;magento-sample-data-1.2.0
              
              mysqladmin -u root -p create magento
              mysql -u root -p magento &lt; magento_sample_data_for_1.2.0.sql
              mv media/* /var/www/magento/media/
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Server Config anpassen:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;user&lt;/span&gt;              &lt;span class=&quot;s&quot;&gt;nginx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;worker_processes&lt;/span&gt;  &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;error_log&lt;/span&gt;         &lt;span class=&quot;s&quot;&gt;/var/log/nginx/error.log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;pid&lt;/span&gt;               &lt;span class=&quot;s&quot;&gt;/var/run/nginx.pid&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
      &lt;span class=&quot;k&quot;&gt;events&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;worker_connections&lt;/span&gt;  &lt;span class=&quot;mi&quot;&gt;1024&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      
      &lt;span class=&quot;k&quot;&gt;http&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;include&lt;/span&gt;       &lt;span class=&quot;s&quot;&gt;/etc/nginx/mime.types&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;default_type&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;application/octet-stream&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
          &lt;span class=&quot;kn&quot;&gt;log_format&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;main&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$remote_addr&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$remote_user&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$time_local]&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$request&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&#39;&lt;/span&gt;
                            &lt;span class=&quot;s&quot;&gt;&#39;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$status&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$body_bytes_sent&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$http_referer&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&#39;&lt;/span&gt;
                            &lt;span class=&quot;s&quot;&gt;&#39;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$http_user_agent&quot;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$http_x_forwarded_for&quot;&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;access_log&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;/var/log/nginx/access.log&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
          &lt;span class=&quot;kn&quot;&gt;sendfile&lt;/span&gt;        &lt;span class=&quot;no&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;autoindex&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;off&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;map&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$scheme&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$fastcgi_https&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Detect when HTTPS is used&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;off&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;https&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      
          &lt;span class=&quot;kn&quot;&gt;keepalive_timeout&lt;/span&gt;  &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
          &lt;span class=&quot;kn&quot;&gt;gzip&lt;/span&gt;  &lt;span class=&quot;no&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;gzip_comp_level&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;gzip_proxied&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;any&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;gzip_types&lt;/span&gt;      &lt;span class=&quot;s&quot;&gt;text/plain&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;text/html&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;text/css&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/x-javascript&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;text/xml&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/xml&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/xml+rss&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;text/javascript&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
          &lt;span class=&quot;c1&quot;&gt;# Load config files from the /etc/nginx/conf.d directory&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
      
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;p&gt;Magento für nginx einrichten:&lt;/p&gt;
      
      &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;80&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;server_name&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;www.DOMAIN.com&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;*.DOMAIN.com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Domain is here twice so server_name_in_redirect will favour the www&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;root&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/var/www/vhosts/DOMAIN.com&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;index.html&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;index.php&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Allow a static html file to be shown first&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;try_files&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$uri/&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@handler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## If missing pass the URI to Magento&#39;s front handler&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;expires&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;30d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Assume all files are cachable&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/minify/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Needed for Fooman Speedster&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;rewrite&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;^/minify/([0-9]+)(/.*\.(js|css))&lt;/span&gt;$ &lt;span class=&quot;s&quot;&gt;/lib/minify/m.php?f=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$2&amp;d&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;=$1&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;c1&quot;&gt;## These locations would be hidden by .htaccess normally&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/app/&lt;/span&gt;                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/includes/&lt;/span&gt;           &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/lib/&lt;/span&gt;                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/lib/minify/&lt;/span&gt;         &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;allow&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;## Deny is applied after rewrites so must specifically allow minify&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/media/downloadable/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/pkginfo/&lt;/span&gt;            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/report/config.xml&lt;/span&gt;   &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/var/&lt;/span&gt;                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;deny&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/var/export/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Allow admins only to view export folder&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;auth_basic&lt;/span&gt;           &lt;span class=&quot;s&quot;&gt;&quot;Restricted&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Message shown in login window&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;auth_basic_user_file&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;htpasswd&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## See /etc/nginx/htpassword&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;autoindex&lt;/span&gt;            &lt;span class=&quot;no&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;/.&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Disable .htaccess and other hidden files&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;404&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@handler&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Magento uses a common front handler&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;rewrite&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/index.php&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;\.php/&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Forward paths like /js/index.php/x.js to relevant handler&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;rewrite&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;^(.*\.php)/&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
          
          &lt;span class=&quot;kn&quot;&gt;location&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;~&lt;/span&gt; &lt;span class=&quot;sr&quot;&gt;\.php$&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Execute PHP scripts&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;expires&lt;/span&gt;        &lt;span class=&quot;no&quot;&gt;off&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## Do not cache dynamic content&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_pass&lt;/span&gt;   &lt;span class=&quot;n&quot;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_param&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;HTTPS&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$fastcgi_https&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;fastcgi_param&lt;/span&gt;  &lt;span class=&quot;s&quot;&gt;SCRIPT_FILENAME&lt;/span&gt;  &lt;span class=&quot;nv&quot;&gt;$document_root$fastcgi_script_name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
              &lt;span class=&quot;kn&quot;&gt;include&lt;/span&gt;        &lt;span class=&quot;s&quot;&gt;fastcgi_params&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;## See /etc/nginx/fastcgi_params&lt;/span&gt;
          &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
      &lt;/pre&gt;
      &lt;/div&gt;
      
      
      &lt;h3&gt;Quellen:&lt;/h3&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;http://davidwinter.me/articles/2009/06/13/php-and-nginx-the-easy-way/&quot;&gt;PHP and nginx on Ubuntu: the easy way&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.linuxspace.org/archives/1576&quot;&gt;How to install nginx with PHP as FastCGI plus Wordpress&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.magentocommerce.com/knowledge-base/entry/installing-the-sample-data-for-magento&quot;&gt;Installing the Sample Data for Magento&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;http://www.magentocommerce.com/boards/viewthread/7931/&quot;&gt;Magento Forum - nginx config&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Linksammlung KW50 2010</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/linksammlung-kw50-2010" />
    <updated>2010-12-17T16:43:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/linksammlung-kw50-2010</id>
    <content type="html">
      &lt;p&gt;Die letzen 2 Wochen musste meine Linksammlung ausfallen, da ich mich an türkisblaue Lagunen mit weißen Sand entspannt habe, siehe letze Posts. Ich werde meine Tagestouren in Bangkok und die Erlebnisse auf Phuket und Ko Phi Phi in den demnächst nachholen, aber nun die Linksammlung dieser Woche mit kleinen Einschränkungen, da viel zutun war.&lt;/p&gt;
      
      &lt;ul&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://everydayrails.com/2010/12/17/rails-admin-panel.html&quot;&gt;Turnkey administration interface for your Rails apps&lt;/a&gt; &lt;a href=&quot;https://github.com/sferik/rails_admin&quot;&gt;RailsAdmin&lt;/a&gt; bietet ein funktionales Admin-Backend für deine Rails 3 Applikation. Der Blog-Post beschreibt die Nutzung von RailsAdmin mit &lt;a href=&quot;https://github.com/ryanb/cancan&quot;&gt;CanCan&lt;/a&gt; von Ryan Bates und einem simplen Rollensystem (is_admin im User-Model). Ich werde RailsAdmin mal in einem kleinen Projekt testen und meine Erfahrungen hier posten.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://gist.github.com/711913&quot;&gt;Another one nginx optimal configuration to use with passenger 3.0&lt;/a&gt; Das gist beschreibt die Installation und Einrichtung von Nginx mit Passanger + SSL Redirect + http headers + passenger settings. Wer mal Nginx mit SSL eingerichtet hat und sich durch die z.T. russische Doku gekämpft hat, findet hier recht übersichtliche Konfigurationsdateien. Das ein oder andere kann man sicherlich übernehmen. Wer dem Russischen mächtig ist, darf mir gerne die &lt;a href=&quot;http://mikhailov.posterous.com/nginx&quot;&gt;Details&lt;/a&gt; erklären. Google geht aber auch schon recht gut&#8230;&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/meltingice/RubyDrop&quot;&gt;RubyDrop&lt;/a&gt; Nachdem DropBox nun endlich 1.0 geworden ist, finde ich diese Projekt auch spannend. RubyDrop ist ein Dropbox Clone mit git als Backend zum Tracken und Synchronisieren. Nachdem ein Remote Git Repository eingerichtet ist, wird in einem definierten Abstand der ausgewählte Ordner mit dem Remote Repository synchronisiert. Weitere Infos entnehmt ihr bitte aus diesem &lt;a href=&quot;http://blog.meltingice.net/programming/rubydrop-open-source-alternative-dropbox/&quot;&gt;Blog-Post&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://blog.devinterface.com/2010/12/ruby-on-rails-and-jquery-multiselect-with-checkbox/&quot;&gt;Ruby on Rails and jQuery: multiselect with checkbox&lt;/a&gt; Dieser Post beschreibt die Nutzung von jQuery für eine has_many Relation mit Multi-Select Checkboxen. Kann man immer mal gebrauchen&#8230;&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/flippingbits/titan&quot;&gt;Titan&lt;/a&gt; kann genutzt werden um Hintergrundprozesse zu erzeugen und zu verwalten.&lt;/p&gt;&lt;/li&gt;
      &lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://www.engineyard.com/blog/2010/virtualize-this-instant-rails-in-a-virtual-box/&quot;&gt;Virtualize This – Instant Rails in a Virtual Box&lt;/a&gt; Wie ich bereites in &lt;a href=&quot;http://www.dirksiemers.de/blog/2010/11/linksammlung-kw46-2010&quot;&gt;Linksammlung KW46 2010&lt;/a&gt; erwähnt habe, wird das &lt;a href=&quot;http://vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt; Projekt von EngineYard supported. In dem Post wird die Installation und Nutzung von Vagrant vorgestellt. Ziel ist es dem Nutzer einen Ubuntu Server mit komplette RoR Stack zu liefern.&lt;/p&gt;&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Phuket</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/phuket" />
    <updated>2010-12-05T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/phuket</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Patong&lt;/li&gt;
      &lt;li&gt;Kamala Beach&lt;/li&gt;
      &lt;li&gt;Ko Phi Phi&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 7</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/bangkok-tag-7" />
    <updated>2010-12-04T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/bangkok-tag-7</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Fische füttern für Charma&lt;/li&gt;
      &lt;li&gt;TukTuk fahren&lt;/li&gt;
      &lt;li&gt;Dusit-Palast&lt;/li&gt;
      &lt;li&gt;Chatuchak Markt&lt;/li&gt;
      &lt;li&gt;MBK/Siam Central&lt;/li&gt;
      &lt;li&gt;Chatuchak Markt Feuerwerk&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 6</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/bangkok-tag-6" />
    <updated>2010-12-03T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/bangkok-tag-6</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Ko Kret&lt;/li&gt;
      &lt;li&gt;Chatuchak Markt&lt;/li&gt;
      &lt;li&gt;Cabadges &amp; Condoms&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 5</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/bangkok-tag-5" />
    <updated>2010-12-02T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/bangkok-tag-5</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;National Museum&lt;/li&gt;
      &lt;li&gt;National Theater&lt;/li&gt;
      &lt;li&gt;National Gallery&lt;/li&gt;
      &lt;li&gt;KSR&lt;/li&gt;
      &lt;li&gt;Wat Bonwonwiwet&lt;/li&gt;
      &lt;li&gt;Khlong Lod&lt;/li&gt;
      &lt;li&gt;Schweine Schrein&lt;/li&gt;
      &lt;li&gt;Wat Ratchabophit&lt;/li&gt;
      &lt;li&gt;Wat Ratchapradit&lt;/li&gt;
      &lt;li&gt;Kanonen am Grand Palace / Verteidigungsministerium&lt;/li&gt;
      &lt;li&gt;Lak Moang / Siegessäule&lt;/li&gt;
      &lt;li&gt;Wat Po / Thai Massage&lt;/li&gt;
      &lt;li&gt;Essen im Arum Residece (The Deck)&lt;/li&gt;
      &lt;li&gt;Be My Guest&lt;/li&gt;
      &lt;li&gt;Mal zuhause für 10 Euro angerufen&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 4</title>
    <link href="http://www.dirksiemers.de/blog/2010/12/bangkok-tag-4" />
    <updated>2010-12-01T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/12/bangkok-tag-4</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;TukTuk Abzocke&lt;/li&gt;
      &lt;li&gt;Golden Mount&lt;/li&gt;
      &lt;li&gt;Schreiner&lt;/li&gt;
      &lt;li&gt;Himmelsbrücke&lt;/li&gt;
      &lt;li&gt;Democracy Monument&lt;/li&gt;
      &lt;li&gt;Metallkloster - Nepper&lt;/li&gt;
      &lt;li&gt;Tempelausstatter&lt;/li&gt;
      &lt;li&gt;Giant Swing&lt;/li&gt;
      &lt;li&gt;Wat Satat&lt;/li&gt;
      &lt;li&gt;Tiger Shrine&lt;/li&gt;
      &lt;li&gt;Taxi 60Baht&lt;/li&gt;
      &lt;li&gt;San Peng Lane - China Walking Street&lt;/li&gt;
      &lt;li&gt;Wat Chakrawat (korkodil)&lt;/li&gt;
      &lt;li&gt;Kräuter&lt;/li&gt;
      &lt;li&gt;Sikh Tempel&lt;/li&gt;
      &lt;li&gt;Blumenhändler Memorial Bridge&lt;/li&gt;
      &lt;li&gt;Taksin&lt;/li&gt;
      &lt;li&gt;MBK&lt;/li&gt;
      &lt;li&gt;5th Av. Food court - curry schlecht&lt;/li&gt;
      &lt;li&gt;Thai Kämpfe&lt;/li&gt;
      &lt;li&gt;Be my guest live musik&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 3</title>
    <link href="http://www.dirksiemers.de/blog/2010/11/bangkok-tag-3" />
    <updated>2010-11-30T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/11/bangkok-tag-3</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Lupini Park&lt;/li&gt;
      &lt;li&gt;Snake Farm&lt;/li&gt;
      &lt;li&gt;Botschaften angeguckt&lt;/li&gt;
      &lt;li&gt;Nai Lert Park Hotel - Fallusschrein&lt;/li&gt;
      &lt;li&gt;Klongfahrt Klong San Saep&lt;/li&gt;
      &lt;li&gt;Jim Thomson House&lt;/li&gt;
      &lt;li&gt;MBK&lt;/li&gt;
      &lt;li&gt;BCS Skywalk&lt;/li&gt;
      &lt;li&gt;Erawan&lt;/li&gt;
      &lt;li&gt;Siam Central&lt;/li&gt;
      &lt;li&gt;Skytrain&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 2</title>
    <link href="http://www.dirksiemers.de/blog/2010/11/bangkok-tag-2" />
    <updated>2010-11-29T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/11/bangkok-tag-2</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Wat Po (Vormittag)&lt;/li&gt;
      &lt;li&gt;Königspalast&lt;/li&gt;
      &lt;li&gt;Garküche Tha Chang&lt;/li&gt;
      &lt;li&gt;Sa Nam Luang&lt;/li&gt;
      &lt;li&gt;Wat Mahathat&lt;/li&gt;
      &lt;li&gt;Amulettmarkt&lt;/li&gt;
      &lt;li&gt;Ta Tien&lt;/li&gt;
      &lt;li&gt;The Deck&lt;/li&gt;
      &lt;li&gt;River City&lt;/li&gt;
      &lt;li&gt;Rosary Church&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
  <entry>
    <title>Bangkok Tag 1</title>
    <link href="http://www.dirksiemers.de/blog/2010/11/bangkok-tag-1" />
    <updated>2010-11-28T00:01:00+01:00</updated>
    <id>http://www.dirksiemers.de/blog/2010/11/bangkok-tag-1</id>
    <content type="html">
      &lt;ul&gt;
      &lt;li&gt;Chao Praya Tagesticket&lt;/li&gt;
      &lt;li&gt;Wat Arun&lt;/li&gt;
      &lt;li&gt;Klong Fahrt 1000 Baht&lt;/li&gt;
      &lt;li&gt;Ta Tien gegessen&lt;/li&gt;
      &lt;li&gt;Sonnenuntergang&lt;/li&gt;
      &lt;/ul&gt;
    </content>
  </entry>
</feed>

