<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>/usr/portage</title>
    <link>http://usrportage.de/</link>
    <description>As A Result of the Objective Gray</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.3 - http://www.s9y.org/</generator>
    
    

<item>
    <title>Meine Lieblingsalben 2000 – 2009</title>
    <link>http://usrportage.de/archives/920-Meine-Lieblingsalben-2000-2009.html</link>
    
    <comments>http://usrportage.de/archives/920-Meine-Lieblingsalben-2000-2009.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=920</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=920</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    &lt;p&gt;
Zur Jahreswende ist es Zeit auf die letzten zehn Jahre Popmusik zu schauen. Allen ein gutes neues Jahr zu wünschen,
wann auch immer es in den jeweiligen Kalendern beginnt.
&lt;/p&gt;

&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;20&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Matisyahu&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Youth&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2005&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000BYCOD6?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2005-matisyahu-youth.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Matisyahu – Youth&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;19&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Joanna Newsom&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Ys&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2006&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000I2K9M4?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2006-joanna-newsom-ys.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Joanna Newsom — Ys&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;18&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;The Shins&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Oh, Inverted World&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2001&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B00005JSHW?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2007-the-shins-oh-inverted-world.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;The Shins - Oh, Inverted World&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;17&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Rufus Wainwright&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Release the Stars&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2007&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000O78LH8?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2007-rufus-wainwright-release-the-stars.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Rufus Wainwright - Release the Stars&quot;/&gt;&lt;/a&gt;

&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;16&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Architecture in Helsinki&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Fingers Crossed&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2003&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B0001JXPDE?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2003-architecture-in-helsinki-fingers-crossed.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Architecture in Helsinki - Fingers Crossed&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;15&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Morrissey&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Years of Refusal&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2009&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B001O9CR5M?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2009-morrissey-years-of-refusal.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Morrissey - Years of Refusal&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;14&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Editors&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;The Back Room&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2005&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B0009YA386?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2005-editors-the-back-room.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Editors - The Back Room&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;13&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;The Kooks&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Inside In/Inside Out&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2006&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
  href=&quot;http://www.amazon.de/gp/product/B000HEWFRK?tag=usr-21&quot;&gt;&lt;img
  src=&quot;http://usrportage.de/uploads/0er/2006-the-kooks-inside-in-inside-out.jpg&quot;
  class=&quot;cover&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;12&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Gossip&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Standing in the Way of Control&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2006&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000RI0UTG?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2006-gossip-standing-in-the-way-of-control.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Gossip – Standing in the Way of Control&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;11&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;The Good, The Bad &amp;amp; The Queen&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;The Good, The Bad &amp;amp; The Queen&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2007&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000LXST5O?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2007-tgbq.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;The Good, The Bad &amp;amp; The Queen - The Good, The Bad &amp;amp; The Queen&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
      &lt;span class=&quot;position&quot;&gt;10&lt;/span&gt;
      &lt;span class=&quot;artist&quot;&gt;The Knife&lt;/span&gt;
      &lt;span class=&quot;album&quot;&gt;Deep Cuts&lt;/span&gt;
      &lt;span class=&quot;year&quot;&gt;2003&lt;/span&gt;
    &lt;/h3&gt;

    &lt;a
      href=&quot;http://www.amazon.de/gp/product/B000F1HGN8?tag=usr-21&quot;&gt;&lt;img
        src=&quot;http://usrportage.de/uploads/0er/2003-the-knife-deep-cuts.jpg&quot;
        alt=&quot;The Knife – Deep Cuts&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;09&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Element of Crime&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Mittelpunkt der Welt&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2005&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000B8ITC2?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2005-element-of-crime-mittelpunkt-der-welt.jpg&quot;
      class=&quot;cover&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;08&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Bloc Party&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Intimacy&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2008&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
  href=&quot;http://www.amazon.de/gp/product/B001EKNYG2?tag=usr-21&quot;&gt;&lt;img
  src=&quot;http://usrportage.de/uploads/0er/2008-bloc-party-intimacy.jpg&quot;
  class=&quot;cover&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;07&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Arctic Monkeys&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Whatever People Say I Am, That&#039;s What I’m Not&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2006&lt;/span&gt;
  &lt;/h3&gt;
  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000BTDMDC?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2006-arctic-monkeys.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Arctic Monkeys — Whatever People Say I Am, That&#039;s What I’m Not&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
    &lt;h3&gt;
      &lt;span class=&quot;position&quot;&gt;06&lt;/span&gt;
      &lt;span class=&quot;artist&quot;&gt;Maxïmo Park&lt;/span&gt;
      &lt;span class=&quot;album&quot;&gt;Our Earthly Pleasures&lt;/span&gt;
      &lt;span class=&quot;year&quot;&gt;2007&lt;/span&gt;
    &lt;/h3&gt;

    &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000MV9NC8?tag=usr-21&quot;&gt;&lt;img
    src=&quot;http://usrportage.de/uploads/0er/2007-maximo-park-our-earthly-pleasures.jpg&quot;
    class=&quot;cover&quot;/&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;05&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Johnny Cash&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;American V: A Hundred Highways&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2000&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B0002W18MU?tag=usr-21&quot;&gt;&lt;img
      class=&quot;cover&quot;
      src=&quot;http://usrportage.de/uploads/0er/2006-johnny-cash-american-v-a-hundred-highways.jpg&quot;
      alt=&quot;Cover: Johnny Cash – American V: A Hundred Highways&quot; /&gt;&lt;/a&gt;

  &lt;p&gt;
    Mit der Veröffentlichung von &lt;q&gt;American V: A Hundred Highway&lt;/q&gt; nach dem Tod Johnny Cashs geht ein Stück
    Musikgeschichte zu Ende. Die &lt;q&gt;American Recordings&lt;/q&gt;-Serie zeigt Cash auf dem Höhepunkt seines musikalischen
    Schaffens. Wer hat nicht wenigstens eins dieser Stück gehört und nicht wieder vergessen: &lt;q&gt;The Beast In Me&lt;/q&gt;,
    &lt;q&gt;Bird On A Wire&lt;/q&gt;, &lt;q&gt;I See a Darkness&lt;/q&gt;, &lt;q&gt;I Won’t Back Down&lt;/q&gt;, &lt;q&gt;The Mercy Seat&lt;/q&gt;, &lt;q&gt;Solitary Man&lt;/q&gt;.
  &lt;/p&gt;

  &lt;p&gt;
    Den Tracks des letzten Albums ist der Gesundheitszustand Cashs aufgeprägt: seine brüchige Stimme verstärkt
    die Melancholie, die der ganzen Serie anhaftet. Unvergessen das Celebrity-Tribute-Video zu &lt;q&gt;God’s Gonna Cut You
    Down&lt;/q&gt;.
  &lt;/p&gt;

  &lt;object width=&quot;350&quot; height=&quot;230&quot;&gt;
    &lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/7auzYgVosJA&amp;amp;hl=de_DE&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;
    &lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;
    &lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;
    &lt;embed
      src=&quot;http://www.youtube.com/v/7auzYgVosJA&amp;amp;hl=de_DE&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;
      type=&quot;application/x-shockwave-flash&quot;
      allowscriptaccess=&quot;always&quot;
      allowfullscreen=&quot;true&quot;
      width=&quot;350&quot;
      height=&quot;230&quot;&gt;
    &lt;/embed&gt;
  &lt;/object&gt;

  &lt;p&gt;
    Die letzte Platte ist nicht die beste der Serie, sie ist aber sicher die beeindruckenste. Ob aus
    pragmatisch-ökonomischen Gründen, wie bei Veröffentlichung gelästert wurde, oder aus edleren Motiven: ein Album zu
    veröffentlichen, auf dem deutlich zu hören ist, dass es das letzte sein wird, zwingt den Zuhörer zu irgendeiner Art
    von Reaktion. Und wem Cashs Musik etwas bedeutet, der wird gerade dieses Album in seiner bitteren Süße genießen.
  &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;04&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Modest Mouse&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Good News for People Who Love Bad News&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2004&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B0001M6GBY?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2004-modest-mouse-good-news-for-people-who-love-bad-news.jpg&quot;
      alt=&quot;Modest Mouse – Good News for People Who Love Bad News&quot;
      class=&quot;cover&quot;/&gt;&lt;/a&gt;

  &lt;p&gt;
    Wenn wir schon bei Rockmusik sind: im Sommer 2007 empfahl mir ein Bekannter Modest Mouse als ein wenig verspult
    aber &lt;q&gt;interessanter Sound&lt;/q&gt;. Und er meinte nicht
    nicht &lt;q&gt;picky&lt;/q&gt;-interessant, sondern &lt;q&gt;interessant-interessant&lt;/q&gt;. Also hörte ich mir das an und reagierte
    erstmal zurückhaltend. Ja, lustiger Albumtitel, ja, Musik ist Okay aber mehr war erstmal nicht. Aus heute nicht mehr
    nachvollziehbaren Gründen hörte ich das Album aber weiterhin an und irgendwann gefiel es dann doch. Sogar ziemlich
    gut. Jedenfalls so gut, dass ich kurz darauf Modest Mouse live sah, mir den Rest Ihrer Alben besorgte und immer
    weiter hörte.
  &lt;/p&gt;

  &lt;p&gt;
    &lt;q&gt;Good News for People Who Love Bad News&lt;/q&gt; klingt wie heiser und aggresiv – wie Musik manchmal sein muss. Die
    Gitarren schrammeln, das Schlagzeug treibt, Rockstruktur halt.
  &lt;/p&gt;

  &lt;h4&gt;Lieblingstitel&lt;/h4&gt;
  &lt;ul class=&quot;tips&quot;&gt;
    &lt;li&gt;02: World At Large&lt;/li&gt;
    &lt;li&gt;03: Float On&lt;/li&gt;
    &lt;li&gt;06: Bury Me With It&lt;/li&gt;
    &lt;li&gt;08: Bukowski&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;03&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Eels&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Souljacker&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2001&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B00005OM5F?tag=usr-21&quot;&gt;&lt;img
      src=&quot;http://usrportage.de/uploads/0er/2001-eels-souljacker.jpg&quot;
      class=&quot;cover&quot;
      alt=&quot;Eels – Souljacker&quot;/&gt;&lt;/a&gt;

    &lt;p&gt;
      &lt;q&gt;Life ain’t pretty for a dog faced boy&lt;/q&gt; heißt es im Refrain von &lt;q&gt;Dog Faced Boy&lt;/q&gt;. &lt;q&gt;Life ain’t pretty
      for the E man&lt;/q&gt; würde genauso passen.
    &lt;/p&gt;

    &lt;p&gt;
      Mark Oliver Everett hat mit Eels bis heute eine Reihe von Platten hingelegt, die so unfassbar gut sind, dass
      selbst die schlechten noch die musikalische Konkurrenz bei weitem übertreffen. Aber über die schlechteren wollen
      wir nicht reden, wir reden über Souljacker. Souljacker ist deswegen so interessant, weil es all dass, das Eels
      kann, auf eine Platte presst. Da geht es krächzend los mit &lt;q&gt;Dog Faced Boy&lt;/q&gt; und &lt;q&gt;That’s not Really
      Funny&lt;/q&gt;, dann folgen &lt;q&gt;Fresh Feeling&lt;/q&gt; und &lt;q&gt;Woman Driving, Man Sleeping&lt;/q&gt; ganze ruhige Stücke, die sogar
      mit Streichern umso besser funktionieren, nur um wieder von einem klassischen Rock-Arrangement, nämlich
      &lt;q&gt;Souljacker I&lt;/q&gt;, abgelöst zu werden. In &lt;q&gt;Friendly Ghost&lt;/q&gt; verschmelzen die beiden Stilrichtungen und
      werden angereichtet mit Elementen des Folk zu einem netten 3:23 Stückchen.
    &lt;/p&gt;

    &lt;p&gt;
      Zwischen 2000 und 2009 sind ganze sieben Eels-Alben erschienen, nur eines zu loben wäre unaufrichtig. Souljacker
      ist die Verdichtung aller anderen Alben, die hier aber nicht unerwähnt bleiben sollen. Wer den symphonischen Teil
      weiter kennenlernen will, kann auf &lt;a
      href=&quot;http://www.amazon.de/gp/product/B000E6EIZS?tag=usr-21&quot;&gt;With
      Strings: Live at Town Hall&lt;/a&gt; Neuinterpretationen der Eels-Stücke mit Orchester lauschen, wem nach poppigen
      Arrangements zu Mute ist, der wird mit &lt;a
      href=&quot;http://www.amazon.de/dp/B00004NJL4?tag=usr-21&quot;&gt;Daisies of the Galaxy&lt;/a&gt; glücklich.
    &lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;02&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Tocotronic&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Kapitulation&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2007&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000RG121I?tag=usr-21&quot;&gt;&lt;img
    class=&quot;cover&quot;
    src=&quot;http://usrportage.de/uploads/0er/2007-tocotronic-kapitulation.jpg&quot;
    alt=&quot;Tocotronic – Kapitulation&quot;/&gt;&lt;/a&gt;

  &lt;p&gt;
    Der deutschen Poplandschaft entsprießten um die Jahrtausendwende ein Haufen musikalisch und textlich ausbaufähiger Bands
    wie Juli, Echt, Silbermond oder Revolverheld. &lt;q&gt;Ausbaufähig&lt;/q&gt; ist eine freundliche Untertreibung, solcher Quatsch sucht
    seinesgleichen. Diese Bands mussten immer betonen, wie sehr sie von Tocotronic beeinflusst wurden. Diese Entwicklung
    griffen Tocotronic 2002 mit ihrem Album &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000VI4XLI?tag=usr-21&quot;&gt;Tocotronic&lt;/a&gt;,
    auch als &lt;q&gt;Weißes Album&lt;/q&gt; bekannt, auf. Sicher auch aus dem Bedürfnis der Abgrenzung heraus wurde die
    vormalige Sloganhaftigkeit mehr und mehr verdrängt durch diffizilere, lyrische Texte.
  &lt;/p&gt;

  &lt;p&gt;
    Reise nach 2007: Seit 1998 war die Schröder-Regierung an der Macht: Deutschland war im Reformfieber, seitdem wird
    gefördert und gefordert, ohne Eigeninitiative geht gar nichts mehr. In dieses Treiben hinein veröffentlichte
    Tocotronic 2007 ihren Aufruf, den Quatsch einfach mal sein zu lassen. Nicht als aufdringliche Liedermacher-Dichtung,
    sondern als höflicher Schubser, wegzulaufen, sich zu verstecken – eben zu kapitulieren, wenn man es nicht mehr
    aushält.
  &lt;/p&gt;

  &lt;p&gt;
    Der Klang der Platte ist, trotzdem sie als Themenalbum angelegt ist, typisch für die ehemaligen Neulinge der
    Hamburger Schule: gitarrenlastig, roh. Über den Klangteppich breitet sich die Nichtstimme von Dirk von Lowtzow, die
    mal brüchig und zurückhaltend wie in &lt;q&gt;Dein geheimer Name&lt;/q&gt; oder stampfend wie in &lt;q&gt;Sag alles ab&lt;/q&gt; das
    stimmliche Spektrum der Band beleuchtet. Die Platte kann einfach als Rockmusik gehört werden, als poetisches Album
    voller versteckter Referenzen oder eben als auch als politisches Konzeptalbum. Die Vorgänger-Alben waren richtig und
    wichtig, doch nie war Tocotronic auch musikalisch so gut.
  &lt;/p&gt;

  &lt;h4&gt;Lieblingstitel&lt;/h4&gt;
  &lt;ul class=&quot;tips&quot;&gt;
    &lt;li&gt;02: Kapitulation&lt;/li&gt;
    &lt;li&gt;06: Harmonie ist eine Strategie&lt;/li&gt;
    &lt;li&gt;10: Sag alles ab&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;review&quot;&gt;
  &lt;h3&gt;
    &lt;span class=&quot;position&quot;&gt;01&lt;/span&gt;
    &lt;span class=&quot;artist&quot;&gt;Arcade Fire&lt;/span&gt;
    &lt;span class=&quot;album&quot;&gt;Neon Bible&lt;/span&gt;
    &lt;span class=&quot;year&quot;&gt;2007&lt;/span&gt;
  &lt;/h3&gt;

  &lt;a
    href=&quot;http://www.amazon.de/gp/product/B000NDDPDI?tag=usr-21&quot;&gt;&lt;img
      class=&quot;cover&quot;
      src=&quot;http://usrportage.de/uploads/0er/2007-arcade-fire-neon-bible.jpg&quot;
      alt=&quot;Arcade Fire – Neon Bible&quot;/&gt;&lt;/a&gt;

  &lt;p&gt;
    Mit &lt;q&gt;Neon Bible&lt;/q&gt; zeigten Arcade Fire 2007 was sie können: ungewöhnliche Arrangments an den Genre-Grenzen
    von Folk und Rock unterlegt mit ungewöhnlichen Instrumenten wie Orgel und Akkordeon. Was auf dem Vorgänger
    &lt;a href=&quot;http://www.amazon.de/gp/product/B0006ZRX86?tag=usr-21&quot;&gt;&lt;q&gt;Funeral&lt;/q&gt;&lt;/a&gt;
    schon anklang, Dunkelheit, Hysterie, drückende Hitze, wird hier zur Perfektion getrieben. Wer behauptet, nach Pink
    Floyd könne im Pop niemand mehr Songs die Anmutung von Opern-Arien geben, sieht sich getäuscht. Der Qualität von
    &lt;q&gt;Neon Bible&lt;/q&gt; können auch die in reaktionäre Sehnsucht sich wendenden Texte kaum etwas anhaben: zu berauschend,
    zu atemberaubend ist die Schönheit dieser Aufnahme.
  &lt;/p&gt;

  &lt;p&gt;
    Und weil ich in den letzten zehn Jahren einfach kein Album gehört habe, dass mich dermaßen gefesselt hat, muss es
    auf Platz 1 landen.
  &lt;/p&gt;

  &lt;h4&gt;Lieblingstitel&lt;/h4&gt;
  &lt;ul class=&quot;tips&quot;&gt;
    &lt;li&gt;01: Black Mirror&lt;/li&gt;
    &lt;li&gt;03: Neon Bible&lt;/li&gt;
    &lt;li&gt;04: Intervention&lt;/li&gt;
    &lt;li&gt;11: My Body is a Cage&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
 
    </content:encoded>

    <pubDate>Thu, 31 Dec 2009 15:10:36 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/920-guid.html</guid>
    <category>Arcade Fire</category>
<category>Johnny Cash</category>
<category>Music</category>
<category>Tocotronic</category>

</item>
<item>
    <title>Batch-generating SSL certificates</title>
    <link>http://usrportage.de/archives/919-Batch-generating-SSL-certificates.html</link>
    
    <comments>http://usrportage.de/archives/919-Batch-generating-SSL-certificates.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=919</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=919</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;I had an itch to scratch this day: generate a huge amount of SSL-certificates for a set of whitelabels. Every whitelabel has it&amp;#8217;s own domain and needs it&amp;#8217;s own &lt;span class=&quot;caps&quot;&gt;SSL&lt;/span&gt; certificate. I don&amp;#8217;t want to spend &lt;strong&gt;n ⋅ x ¤&lt;/strong&gt; to buy them just for testing purpose (generating a huge number would have been an issue too if I bought them but &amp;#8230;). So I needed a script to do it. We had one before to generate a single one with the typical user interactions. While hacking it down I found out a few neat things about OpenSSL which I didn&amp;#8217;t know before and which I think are worth sharing.&lt;/p&gt;

	&lt;blockquote&gt;
		&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; the script is not hacked together with security in mind. It simply doesn&amp;#8217;t matter for me in this specific case.&lt;/p&gt;
	&lt;/blockquote&gt;

	&lt;p&gt;So after alot of chit-chatting, there we go:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/bash
DOMAIN=&amp;#34;$1&amp;#34;
if [ -z &amp;#34;$DOMAIN&amp;#34; ]; then
    echo &amp;#34;Usage: $(basename $0) &amp;#60;domain&amp;#62;&amp;#34;
    exit 11
fi
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Obvious: we need to call the script with a domain as a parameter. Next is a simple to fail when a certain condition matches:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;fail_if_error() {
    [ $1 != 0 ] &amp;#38;&amp;#38; {
        unset PASSPHRASE
        exit 10
    }
}
export PASSPHRASE=$(head -c 128 /dev/random  | uuencode - | grep -v &amp;#34;^end&amp;#34; | tr &amp;#34;\n&amp;#34; &amp;#34;d&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;We generate a passphrase by reading 128 byte from /dev/random, encoding it with base64 and joining the lines. A simple trick if you can&amp;#8217;t rely on &lt;a href=&quot;http://sourceforge.net/projects/pwgen/&quot;&gt;pwgen&lt;/a&gt; or &lt;a href=&quot;http://people.defora.org/~khorben/projects/makepasswd/&quot;&gt;makepasswd&lt;/a&gt;. Next is to define the subject string. But we&amp;#8217;ll talk about that later:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;subj=&amp;#34;
C=&amp;#60;Country Code&amp;#62;
ST=&amp;#60;State&amp;#62;
O=&amp;#60;Company&amp;#62;
localityName=&amp;#60;City&amp;#62;
commonName=$DOMAIN
organizationalUnitName=&amp;#60;Unit Name&amp;#62;
emailAddress=&amp;#60;email&amp;#62;
&amp;#34;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Of all things generating a fresh &lt;span class=&quot;caps&quot;&gt;RSA&lt;/span&gt; key comes first. The neat trick to avoid user interaction here is to use &lt;code&gt;-passout&lt;/code&gt; option. This option takes an protocol argument similar to PHPs stream wrappers. &lt;code&gt;env:&amp;#60;envvar&amp;#62;&lt;/code&gt; for environment variables, &lt;code&gt;pass:&amp;#60;password&amp;#62;&lt;/code&gt; if you like to pass the string directly, &lt;code&gt;file:&amp;#60;filename&amp;#62;&lt;/code&gt; to read from a file, &lt;code&gt;fd:&amp;#60;number&amp;#62;&lt;/code&gt; to read from a file descriptor and &lt;code&gt;stdin&lt;/code&gt; &amp;#8211; well &amp;#8211; to read from the standard input. Of course we fail on error.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;openssl genrsa -des3 -out $DOMAIN.key -passout env:PASSPHRASE 2048
fail_if_error $?
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Now we generate a certificate request (.csr). &lt;code&gt;-batch&lt;/code&gt; simply supresses user interaction. And here comes the &lt;code&gt;$subj&lt;/code&gt; variable into play which allows us to override our certificate requests defaults specified in our &lt;code&gt;openssl.conf&lt;/code&gt;. Most of the time the OpenSSL configuration file should be located in &lt;code&gt;/etc/ssl/openssl.cnf&lt;/code&gt; but if you are on Mac OS X it is located in &lt;code&gt;/System/Library/OpenSSL/openssl.cnf&lt;/code&gt;. The subject variables you can override are defined in this configuration. It&amp;#8217;s an &lt;span class=&quot;caps&quot;&gt;INI&lt;/span&gt; file, just search for the section &lt;strong&gt;[ req ]&lt;/strong&gt; and look at the keys &lt;strong&gt;distinguished_name&lt;/strong&gt; and &lt;strong&gt;req_attributes&lt;/strong&gt;. There values redirect to the section name we are searching for: here you can find the candidates you might want to override in your subject string. Just extend the &lt;code&gt;$subj&lt;/code&gt; variable according to your needs. The &lt;code&gt;$subj&lt;/code&gt; variable lines are joined with a slash as a seperator &amp;#8211; this is how OpenSSL likes it. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;openssl req \
    -new \
    -batch \
    -subj &amp;#34;$(echo -n &amp;#34;$subj&amp;#34; | tr &amp;#34;\n&amp;#34; &amp;#34;/&amp;#34;)&amp;#34; \
    -key $DOMAIN.key \
    -out $DOMAIN.csr \
    -passin env:PASSPHRASE
fail_if_error $?
cp $DOMAIN.key $DOMAIN.key.org
fail_if_error $?
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Strip the passphrase from our RSA-key to not get prompted when Apache (or any other webserver) starts:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;openssl rsa -in $DOMAIN.key.org -out $DOMAIN.key -passin env:PASSPHRASE
fail_if_error $?
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Last step, create the certificate file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;openssl x509 -req -days 365 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt
fail_if_error $?
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Now: deploy the &lt;strong&gt;.key&lt;/strong&gt; and &lt;strong&gt;.crt&lt;/strong&gt; file to your webserver and set up your configuration.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Fri, 14 Aug 2009 22:07:28 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/919-guid.html</guid>
    <category>OpenSSL</category>
<category>PHP</category>
<category>Security</category>
<category>SSL</category>
<category>Web</category>
<category>Webserver</category>

</item>
<item>
    <title>Dokumentation über Adorno und die Kritische Theorie</title>
    <link>http://usrportage.de/archives/917-Dokumentation-ueber-Adorno-und-die-Kritische-Theorie.html</link>
    
    <comments>http://usrportage.de/archives/917-Dokumentation-ueber-Adorno-und-die-Kritische-Theorie.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=917</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=917</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;h3&gt;Theodor W. Adorno &amp;#8211; Dokumentation 1. Teil&lt;/h3&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/YpTkisE83c4&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YpTkisE83c4&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YpTkisE83c4&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YpTkisE83c4&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/YpTkisE83c4&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/-811TSKUPLI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-811TSKUPLI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-811TSKUPLI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/-811TSKUPLI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/-811TSKUPLI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/SIZjeKXjnaE&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/SIZjeKXjnaE&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/SIZjeKXjnaE&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/SIZjeKXjnaE&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/SIZjeKXjnaE&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/2FiTS7Tvhcc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/2FiTS7Tvhcc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/2FiTS7Tvhcc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/2FiTS7Tvhcc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/2FiTS7Tvhcc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&amp;amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/8VHiMjLOq5g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8VHiMjLOq5g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8VHiMjLOq5g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8VHiMjLOq5g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/8VHiMjLOq5g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;h3&gt;Theodor W. Adorno &amp;#8211; Dokumentation 2. Teil &amp;#8211; &amp;#8220;Wer denkt, ist nicht wütend&amp;#8221;
&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/nI2Ib-KO5fI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/nI2Ib-KO5fI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/nI2Ib-KO5fI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/nI2Ib-KO5fI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/nI2Ib-KO5fI&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/h3&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/CpYVbM8l8m0&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/CpYVbM8l8m0&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/CpYVbM8l8m0&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/CpYVbM8l8m0&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/CpYVbM8l8m0&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/zalkhqtCxF8&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zalkhqtCxF8&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zalkhqtCxF8&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/zalkhqtCxF8&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/zalkhqtCxF8&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/YervO5K5N1U&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YervO5K5N1U&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YervO5K5N1U&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/YervO5K5N1U&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/YervO5K5N1U&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/aNWuO8f1w6g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/aNWuO8f1w6g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/aNWuO8f1w6g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/aNWuO8f1w6g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/aNWuO8f1w6g&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt;

	&lt;p&gt;&lt;!-- xhtml clean youtube --&gt;&lt;object type=&quot;application/x-shockwave-flash&quot; width=&quot;500&quot; height=&quot;405&quot; data=&quot;http://www.youtube.com/v/USD8J8XsoSc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/USD8J8XsoSc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/USD8J8XsoSc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;/object&gt;&lt;!-- /xhtml clean youtube --&gt;

&lt;!-- &lt;object width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/USD8J8XsoSc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/USD8J8XsoSc&amp;amp;hl=de&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;405&quot;&gt;&lt;/embed&gt;&lt;/object&gt; --&gt;

&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 31 May 2009 15:29:51 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/917-guid.html</guid>
    <category>Dokumentation</category>
<category>Kritische Theorie</category>
<category>Theodor W. Adorno</category>

</item>
<item>
    <title>An introduction to Domain Driven Design</title>
    <link>http://usrportage.de/archives/916-An-introduction-to-Domain-Driven-Design.html</link>
    
    <comments>http://usrportage.de/archives/916-An-introduction-to-Domain-Driven-Design.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=916</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=916</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;My collegues asked me to write down some documentation on the basic concepts of domain driven design. Why not make a blog post out of it?&lt;/p&gt;

	&lt;p&gt;Domain Driven Design is all about the domain. The premise is, that what we call model, is the model of the real world process we are going to implement (the &amp;#8220;domain&amp;#8221;). &lt;span class=&quot;caps&quot;&gt;DDD&lt;/span&gt; focuses on the domain of the problem, not on data, not on functions, not on control structures (although all of this stuff is used to implement them). Object technology fits pretty well into &lt;span class=&quot;caps&quot;&gt;DDD&lt;/span&gt; as it allows us to narrow reality, as we can express behavior and state together (in an object).&lt;/p&gt;

	&lt;h3&gt;A short glossary&lt;/h3&gt;

	&lt;h4&gt;Domain Layer&lt;/h4&gt;

	&lt;p&gt;The layer in the application where the domain is expressed in terms of objects.&lt;/p&gt;

	&lt;h4&gt;Domain Objects&lt;/h4&gt;

	&lt;p&gt;All the objects in the domain layer&lt;/p&gt;

	&lt;h4&gt;Entity&lt;/h4&gt;

	&lt;p&gt;Entities are those domain objects that are equal by identity as they express a specific state of a specific entity in the system. Examples are a customer or a purchase.&lt;/p&gt;

	&lt;h4&gt;Value Object&lt;/h4&gt;

	&lt;p&gt;The opposite of entities in the domain layer. Objects that are equal because of equal values not because they are identical. A money object is a typical value object and so is an address.&lt;/p&gt;

	&lt;h4&gt;Aggregate&lt;/h4&gt;

	&lt;p&gt;An aggregate is an objects graph in the domain layer consisting of entity and value objects. A customer has a number of addresses and an order has a money value object.&lt;/p&gt;

	&lt;h4&gt;Aggregate root&lt;/h4&gt;

	&lt;p&gt;The top level object in an aggregate. In the customer example, the customer is the aggregate root and all the other objects are aggregations to the customer.&lt;/p&gt;

	&lt;h4&gt;Repository&lt;/h4&gt;

	&lt;p&gt;The repository acts like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Facade_pattern&quot;&gt;Facade&lt;/a&gt; to the &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt; components of a system. In &lt;span class=&quot;caps&quot;&gt;DDD&lt;/span&gt; we focus only on the domain, we don&amp;#8217;t care about &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt;, we are ignorant against &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt;. The repository allows us to be ignorant as it provides a simple, collection like interface to the user. Think of the repository as a factory to the persisted objects with a collection interface and being a facade to keep away all that sad details of &lt;span class=&quot;caps&quot;&gt;ORM&lt;/span&gt;.&lt;/p&gt;

	&lt;h4&gt;Ubiquitous Language&lt;/h4&gt;

	&lt;p&gt;At the beginning everything is messy: you think that girl is stupid, she thinks you are a quirky nerd with strange hobbies and even more strange friends. A few dates later you both find an ubiquitous language which allows you to communicate efficiently. &lt;span class=&quot;caps&quot;&gt;DDD&lt;/span&gt; encourages to find a set of terms to describe the system, that is modeled after the language of the domain. So the knowledge gathered in the development team about the domain is directly build into the systems core.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 13 May 2009 00:54:33 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/916-guid.html</guid>
    <category>DDD</category>
<category>Design patterns</category>
<category>Development</category>

</item>
<item>
    <title>Leaflet: PHP development in 2009</title>
    <link>http://usrportage.de/archives/915-Leaflet-PHP-development-in-2009.html</link>
    
    <comments>http://usrportage.de/archives/915-Leaflet-PHP-development-in-2009.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=915</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=915</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;ul&gt;
		&lt;li&gt;Develop object-oriented code
	&lt;ul&gt;
		&lt;li&gt;Avoid static cling&lt;/li&gt;
		&lt;li&gt;Avoid global state&lt;/li&gt;
		&lt;li&gt;Use dependency injection&lt;/li&gt;
		&lt;li&gt;Use a framework if appropriate&lt;/li&gt;
		&lt;li&gt;Refactor continuously&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Use a &lt;span class=&quot;caps&quot;&gt;VCS&lt;/span&gt;, preferably a decentralized
	&lt;ul&gt;
		&lt;li&gt;Have commit notifications configured&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Utilize continuous deployment
	&lt;ul&gt;
		&lt;li&gt;Deploy with tools like capistrano&lt;/li&gt;
		&lt;li&gt;Deploy phar files&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Test your code
	&lt;ul&gt;
		&lt;li&gt;Use continuous integration to run tests, create and deploy artefacts&lt;/li&gt;
		&lt;li&gt;Unit test your code with PHPUnit or SimpleTest&lt;/li&gt;
		&lt;li&gt;Have database migration in place to ease schema changes, e.g. with dbdeploy&lt;/li&gt;
		&lt;li&gt;Use build tools like phing or ant&lt;/li&gt;
		&lt;li&gt;Have metrics configured and use them as a QA measure&lt;/li&gt;
		&lt;li&gt;Have a code sniffer in place&lt;/li&gt;
		&lt;li&gt;Acceptance tests with tools like Selenium&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Use rapid development tools like Zend Tool or cake
	&lt;ul&gt;
		&lt;li&gt;A fresh checkout should be up and running in a few minutes&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Monitor your (production) systems
	&lt;ul&gt;
		&lt;li&gt;Load monitoring with tools like Cacti&lt;/li&gt;
		&lt;li&gt;Event reporting and monitoring with tools like Nagios (for the enterprise, there is nothing else)&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
		&lt;li&gt;Use a bytecode cache&lt;/li&gt;
		&lt;li&gt;Love your code&lt;/li&gt;
	&lt;/ul&gt;

	&lt;p&gt;What do you think is the state of the art in 2009?&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 02 May 2009 19:25:57 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/915-guid.html</guid>
    <category>Development</category>
<category>PHP</category>
<category>QA</category>

</item>
<item>
    <title>Speaking at IPC Spring ’09</title>
    <link>http://usrportage.de/archives/912-Speaking-at-IPC-Spring-09.html</link>
    
    <comments>http://usrportage.de/archives/912-Speaking-at-IPC-Spring-09.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=912</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=912</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;I&amp;#8217;m giving a talk at &lt;a href=&quot;http://it-republik.de/php/phpconference/&quot;&gt;International &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; Conference Spring Edition&lt;/a&gt; in May in Berlin. I will talk about &lt;strong&gt;Beatiful (&lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;) code&lt;/strong&gt;: code your &lt;del&gt;mother&lt;/del&gt; domain experts can read, code that talks, code that reveals intention and what does it mean on the architecture side. So, a somewhat impractical and detached topic. I&amp;#8217;m looking forward to see you in Berlin.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 10 Mar 2009 00:29:47 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/912-guid.html</guid>
    <category>Berlin</category>
<category>Conferences</category>
<category>PHP</category>

</item>
<item>
    <title>Not having globals state doesn't mean you're doomed</title>
    <link>http://usrportage.de/archives/911-Not-having-globals-state-doesnt-mean-youre-doomed.html</link>
    
    <comments>http://usrportage.de/archives/911-Not-having-globals-state-doesnt-mean-youre-doomed.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=911</wfw:comment>

    <slash:comments>11</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=911</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;&lt;img src=&quot;http://usrportage.de/uploads/clean-dependencies.jpg&quot; title=&quot;Clear Dependencies&quot; alt=&quot;Clear Dependencies&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://flickr.com/photos/85128884@N00/&quot;&gt;hbp_pix&lt;/a&gt;&amp;#169;&lt;/p&gt;

	&lt;p&gt;A pretty popular myth about avoiding global state (singletons, multitons, registries, global variable, static variables/methods) is that it results in creating widely used objects more often than needed. The most common example in this case is a database connection. We try to avoid global state to let objects express their dependencies clearly: the object constructor should be as readable as &amp;#8220;give me this, give me that and I will work&amp;#8221;. Let&amp;#8217;s talk about a situation where we instanciate a relatively complex set of domain objects including a service layer. For the example, we assume that we read an existing customer. We use the &lt;code&gt;CustomerServiceLayer&lt;/code&gt; to retrieve the &lt;code&gt;Customer&lt;/code&gt;, which uses the &lt;code&gt;CustomerRepository&lt;/code&gt; to create the &lt;code&gt;Customer&lt;/code&gt; object which needs a &lt;code&gt;DatabaseConnection&lt;/code&gt; connection and passes a strategy (&lt;code&gt;NameFormattingStrategy&lt;/code&gt;) to format the name of the customer to the &lt;code&gt;Customer&lt;/code&gt; object and a &lt;code&gt;CustomerDataMapper&lt;/code&gt; to allow the &lt;code&gt;Customer&lt;/code&gt; object to save itself. Here are the constructor signatures of the involved components:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Customer ...
    public function __construct(
        NameFormattingStrategy $nameFormattingStrategy
    )
class CustomerRepository ...
    public function __construct(
        DatabaseConnection $connection,
        CustomerDataMapper $dataMapper,
        NameFormattingStrategy $nameFormattingStrategy
    )
class CustomerServiceLayer ...
    public function __construct(CustomerRepository $repository)
class CustomerDataMapper ...
    public function __construct(DatabaseConnection $connection)
class DatabaseConnection ...
   public function __construct(
       string $host,
       int $port,
       string $username,
       string $password,
       string $database
    )
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;So, all we do in the page controller, may it be a (page) controller or a plain &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; file is instanciating the service layer and its dependencies:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$databaseConnection = new DatabaseConnection(...);
$customerDataMapper = new CustomerDataMapper($databaseConnection);
$nameFormattingStrategy = new NameFormattingStrategy();
$customerRepository = new CustomerRepository(
    $databaseConnection,
    $customerDataMapper,
    $nameFormattingStrategy
);
$serviceLayer = new CustomerServiceLayer($customerRepository);
$customer = $serviceLayer-&amp;#62;getCustomerById((int)$_GET[&amp;#39;customer_id]);
... pass it to the view, do nifty things ...
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;If other components, like the &lt;code&gt;OrderRepository&lt;/code&gt; needs a database connection, just pass it to it. No need to let the order repository know how to get it. It is just there. In your unit test you can passed a mocked repository, a mocked database connection and a mocked data mapper depending on what particular part of the chain you are going to test. By the way: the heavy construction work could be easily passed to a number of factories &lt;strong&gt;just&lt;/strong&gt; responsible for creating your objects. These factories are easily testable too as the only assertion made would be is the returned object correctly configured.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 15 Feb 2009 03:08:19 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/911-guid.html</guid>
    <category>OOD</category>
<category>OOP</category>
<category>PHP</category>
<category>Unit testing</category>

</item>
<item>
    <title>A Tech Book a Day</title>
    <link>http://usrportage.de/archives/909-A-Tech-Book-a-Day.html</link>
    
    <comments>http://usrportage.de/archives/909-A-Tech-Book-a-Day.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=909</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=909</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;When it comes to reading I&amp;#8217;m coming from a different corner: I read a lot of philosophical books from philosophers like Adorno, Marcuse, Marx before I really started reading tech books. These books are hard to read, especially the works of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Frankfurt_School&quot;&gt;Frankfurt School&lt;/a&gt; are notorious for their specific language which is sometimes hard to decipher. Tech books are exactly the opposite: while there are entertaining technical writers with a good style a lot use a pretty common and dry vocabulary &amp;#8211; which is a good thing. The thing is, you don&amp;#8217;t really need to read tech books.&lt;/p&gt;

	&lt;p&gt;Novels, philosophical &amp;#8211; and more general humanistic &amp;#8211; works are much harder. They often transport semantics in metaphors you don&amp;#8217;t get when just reading. You have to read a sentence more than once to get it. But when you read a book about Design Patterns, your favourite book on &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; or something similar non-algorithm related you can just scan the book for news, read and understand the code samples and go on, page per page. Scan through the page, take notes but just note what&amp;#8217;s new to you. If it is a reference, mark the important parts with stickers. Ignore the rest, remember, don&amp;#8217;t read, just scan.&lt;/p&gt;

	&lt;p&gt;Additionally technical books tend to have a foreword and a foreword for the second edition and a forward for the third edition and a lot of testimonials attesting how good this book is (hey, I already purchased it, don&amp;#8217;t sell it to me again). So the real content starts at page 40. Excluding white pages the book that was 400 pages long might shrink to 300 pages. If you need 30 seconds per page that means you can read the book in two and a half hours. And 30 seconds per page a a pessimistic estimation. With this technique it is possible to read a technical book in a day without stress and totally relaxed in a week. That means you could read 52 tech books a year. I&amp;#8217;m lame, I just &lt;del&gt;read&lt;/del&gt; scanned around 20 last year.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 02 Feb 2009 18:50:14 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/909-guid.html</guid>
    <category>Books</category>
<category>Frankfurt School</category>
<category>PHP</category>
<category>Reading</category>
<category>Retraining</category>
<category>Technology</category>

</item>
<item>
    <title>Using IMAP semantics to control web publishing</title>
    <link>http://usrportage.de/archives/908-Using-IMAP-semantics-to-control-web-publishing.html</link>
    
    <comments>http://usrportage.de/archives/908-Using-IMAP-semantics-to-control-web-publishing.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=908</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=908</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;Every time a new comment or trackback arrives here I get a new mail. Of course I read mails over &lt;span class=&quot;caps&quot;&gt;IMAP&lt;/span&gt;, as I utilize a number of different clients. It always felt a bit clumsy to click a link to decide what happens with the new comment: should it be approved or deleted? At the end I decide twice a time what happens with the comment. First I click the link for approval or deletion, second I decide what to do with the notification mail. Why not couple these options? Every unread comment mail represents a moderated comment, if I delete the mail, the comment is deleted, if I just mark the mail as read, it will be approved. The good thing is, we have &lt;span class=&quot;caps&quot;&gt;IMAP&lt;/span&gt; so the blog comment moderation daemon would be just another &lt;span class=&quot;caps&quot;&gt;IMAP&lt;/span&gt; client that watches a single mail directory. Wouldn&amp;#8217;t that be cool? Maybe &lt;a href=&quot;http://garv.in/&quot;&gt;Garvin&lt;/a&gt; would like that for &lt;a href=&quot;http://s9y.org&quot;&gt;Serendipity&lt;/a&gt;.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 10 Jan 2009 00:44:18 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/908-guid.html</guid>
    <category>Blog</category>
<category>IMAP</category>
<category>PHP</category>
<category>Serendipity</category>

</item>
<item>
    <title>Seven Things</title>
    <link>http://usrportage.de/archives/907-Seven-Things.html</link>
    
    <comments>http://usrportage.de/archives/907-Seven-Things.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=907</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=907</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;I&amp;#8217;ve got tagged by &lt;a href=&quot;http://www.deshong.net/?p=145&quot;&gt;Brian DeShong&lt;/a&gt; and &lt;a href=&quot;http://www.manuel-pichler.de/&quot;&gt;Manuel Pichler&lt;/a&gt; to write down seven facts about me. Quick and easy:
	&lt;ul&gt;
		&lt;li&gt;Sung in a boys choir and had professional vocal training for almost ten years. We wore funny suits and it was quite cool&lt;/li&gt;
		&lt;li&gt;Sung the alto solo of the Paul McCartney opera &lt;a href=&quot;http://en.wikipedia.org/wiki/Liverpool_Oratorio&quot;&gt;Liverpool Oratorio&lt;/a&gt;. You didn&amp;#8217;t even know Paul McCartney wrote operas, right?&lt;/li&gt;
		&lt;li&gt;Went to a Rudolf Steiner school for 13 years. This was not so cool as I&amp;#8217;m not enough into mystery&lt;/li&gt;
		&lt;li&gt;I&amp;#8217;m together with a upcoming geologist. I&amp;#8217;m trying to get her into the oil business against her will. We actually met on a dating portal but I have an excuse: I worked there at that time.&lt;/li&gt;
		&lt;li&gt;I read most of the works of Theodor W. Adorno, the important ones from Karl Marx and it made me a better programmer. Not.&lt;/li&gt;
		&lt;li&gt;I still think smoking is one of the coolist habits ever.&lt;/li&gt;
	&lt;/ul&gt;&lt;/p&gt;

	&lt;p&gt;So here are my nominated victims:
	&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;http://sitzpisser.net/&quot;&gt;Johannes Steidl&lt;/a&gt;, my best friend, because I want to know if I guess right on what the facts are&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://pooteeweet.org/&quot;&gt;Lukas Smith&lt;/a&gt; for his efforts in bringing more structure in the &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; core development process&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://schlueters.de/blog/&quot;&gt;Johannes Schlüter&lt;/a&gt; &amp;#8216;cause I know he will hate it&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.kasn.de/&quot;&gt;Karsten Gohm&lt;/a&gt; a new collegue of mine&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://mzacher.de/&quot;&gt;Marc Zacher&lt;/a&gt;, the guy who had an &lt;a href=&quot;http://flickr.com/photos/mastayoda/sets/72157601115364510/&quot;&gt;intimate affair with Bart&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://octavian.supersized.org/&quot;&gt;Marc Jakubowski&lt;/a&gt; because of stuff like &lt;a href=&quot;http://twitter.com/octavian/status/1082515572&quot;&gt;that&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 03 Jan 2009 13:06:08 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/907-guid.html</guid>
    <category>Me</category>
<category>Meme</category>
<category>PHP</category>

</item>
<item>
    <title>Ubuntu Linux on an Asus EeePC 901</title>
    <link>http://usrportage.de/archives/906-Ubuntu-Linux-on-an-Asus-EeePC-901.html</link>
    
    <comments>http://usrportage.de/archives/906-Ubuntu-Linux-on-an-Asus-EeePC-901.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=906</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=906</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;I got an Asus EeePC for Christmas. As a long time Linux user the pre-installed Windows XP version had a very short life, something around ten minutes to check that the hardware is working. In general installing Linux is not very hard, actually the harder part was to build the install &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; stick, as the EeePC has no disk drive. But first a few sentences about the EeePC.&lt;/p&gt;

	&lt;h4&gt;The Good&lt;/h4&gt;

	&lt;p&gt;The device is small and looks cute so the girl acceptance level is pretty high as my personal girl acceptance level test girl confirmed. It just feels right. The weight is alright, 1.1kg is fair enough. Three &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; slots, one more than my Apple Mac Book, so good too. &lt;span class=&quot;caps&quot;&gt;VGA&lt;/span&gt; out, fine, SD card slot, alright, not that I need it but &amp;#8230; RaLink WiFi chip, Gigabit network, built-in web cam, Bluetooth, synaptics touch pad. That&amp;#8217;s pretty good, sounds like a complete computer, doesn&amp;#8217;t it? The display resolution is 1024&amp;#215;600 &amp;#8211; good for such a small device.&lt;/p&gt;

	&lt;h4&gt;The Bad&lt;/h4&gt;

	&lt;p&gt;As as result of the overall size, the keyboard is of course small too. Also I&amp;#8217;m now writing this entry on it, it takes some time to get used to it. The position of the pipe/less/greater-key is annoying as it can only be reached in combination with the fn modifier key. This is not very convenient for a programmer. The rest of the layout is more or less standard and it doesn&amp;#8217;t take so long to not miss every key.&lt;/p&gt;

	&lt;h4&gt;The Ugly&lt;/h4&gt;

	&lt;p&gt;When I tried Bluetooth the first time, the device was not detected at all. Neither on Windows nor on Linux. But while changing other stuff I found out that the Bluetooth adapter was disabled in the &lt;span class=&quot;caps&quot;&gt;BIOS&lt;/span&gt;. It is a nice feature to allow to hard disable some features in the &lt;span class=&quot;caps&quot;&gt;BIOS&lt;/span&gt; but disabling anything by default seems not like the most clever idea. So please fix, Asus.&lt;br /&gt;
Sadly the EeePC suffers a heat problem. If you stress it a bit it gets really hot on the downside (like the Mac Books). So don&amp;#8217;t put it on your naked thigh.&lt;/p&gt;

	&lt;h4&gt;Choosing the Right Distribution&lt;/h4&gt;

	&lt;p&gt;I have the model with two solid state discs which makes a total of 12GB disk space. Not very much but enough for my use cases (and I always wanted to have a &lt;span class=&quot;caps&quot;&gt;SSD&lt;/span&gt; based device). I decided to go with Ubuntu:http://ubuntu.com also I normally prefer &lt;a href=&quot;http://gentoo.org&quot;&gt;Gentoo&lt;/a&gt; because of the size. Source base distributions like Gentoo don&amp;#8217;t differentiate between the actual packages and the header files so a complete Gentoo installations takes a lot more disk space than any binary distribution. Additionally, it was Christmas evening and I wanted something quick. While Gentoo is flexible, it is not quick to install.&lt;br /&gt;
Although I chose Ubuntu, I would roughly guess that Fedora or SuSE would work fine too, please leave a comment if you have an experience to share.&lt;br /&gt;
I chose Ubuntu mainline, not &lt;a href=&quot;http://www.eeebuntu.org/&quot;&gt;Eeebuntu&lt;/a&gt; because I want to have the latest and greatest Ubuntu and I can configure my panel myself.&lt;/p&gt;

	&lt;h4&gt;Preparing the Installation&lt;/h4&gt;

	&lt;p&gt;Before you read on further make sure you understand that this is not about a dual boot installation. I completely removed the Windows system, so please make sure this is what you want too.&lt;br /&gt;
First of all we need a boot medium. There is an SD card slot and a number of &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; ports, so the alternatives are &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; disk drive, SD card, &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; stick. I chose the latter but the rest should work too. Creating an &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; boot stick requires a bit of manual work: download the Ubuntu Intrepid Ibex (8.10) &lt;span class=&quot;caps&quot;&gt;ISO&lt;/span&gt; image for 32bit computers (Atom &lt;span class=&quot;caps&quot;&gt;CPU&lt;/span&gt;) then:
	&lt;ul&gt;
		&lt;li&gt;Format the stick with FAT32: &lt;code&gt;mkfs.vfat /dev/sdX1&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Add an &lt;span class=&quot;caps&quot;&gt;MBR&lt;/span&gt; to the stick: &lt;code&gt;cat /usr/share/syslinux/mbr.bin &amp;#62; /dev/sdX&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Install syslinux: &lt;code&gt;syslinux -s /dev/sdX1&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Mount the &lt;span class=&quot;caps&quot;&gt;ISO&lt;/span&gt; image: &lt;code&gt;mount -o loop &amp;#60;iso&amp;#62; /mnt/iso&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Mount the &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; stick: &lt;code&gt;mount /dev/sdX1 /mnt/stick&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Copy the contents of the image to the stick: &lt;code&gt;cp /mnt/iso/.* /mnt/stick&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Fix the dists directory: &lt;code&gt;mv /mnt/stick/dists/intrepid /mnt/stick/dists/stable&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Rename isolinux directory to syslinux: &lt;code&gt;mv /mnt/stick/syslinux /mnt/stick/isolinux&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Rename isolinux.cfg to syslinux.cfg: &lt;code&gt;mv /mnt/stick/isolinux/syslinux.cfg /mnt/stick/isolinux/isolinux.cfg&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;/p&gt;

	&lt;h4&gt;Installing Ubuntu from the Stick&lt;/h4&gt;

	&lt;p&gt;Now the &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; boot stick is ready. Just plug it in, type F1 to select the boot menu, choose the stick as the boot medium, boot from it and install Ubuntu as usual. Everything is detected and configured correctly including the synaptics touch pad, web cam and screen. The only missing components are the WiFi adapter and the specials keys. The keys generate &lt;span class=&quot;caps&quot;&gt;ACPI&lt;/span&gt; events so it should not be hard to get them running. However, I don&amp;#8217;t use specials keys so I don&amp;#8217;t care.&lt;br /&gt;
The WiFi adapter is a RaLink RT2860 and RaLink provides a driver for it. You could download and manually compile this driver but I found it more convenient to have specific package for it.&lt;/p&gt;

	&lt;h4&gt;Installing the Right Kernel&lt;/h4&gt;

	&lt;p&gt;The linux-eeepc-lean kernel from &lt;a href=&quot;http://array.org/ubuntu/&quot;&gt;array.org&lt;/a&gt; works really well and includes support for the RaLink WiFI adapter. Just follow the &lt;a href=&quot;http://array.org/ubuntu/setup-intrepid.html&quot;&gt;setup instructions&lt;/a&gt; to install it. Then boot the new kernel and, if everything works fine, edit &lt;strong&gt;/boot/grub/menu.lst&lt;/strong&gt; to use the eeepc lean kernel as the default kernel. The Ubuntu installation is now done, enjoy!&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 28 Dec 2008 18:43:36 +0100</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/906-guid.html</guid>
    <category>EeePC</category>
<category>Gadgets</category>
<category>Hardware</category>
<category>Linux</category>
<category>Ubuntu</category>

</item>
<item>
    <title>SSH configuration parameters</title>
    <link>http://usrportage.de/archives/905-SSH-configuration-parameters.html</link>
    
    <comments>http://usrportage.de/archives/905-SSH-configuration-parameters.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=905</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=905</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;Having a number of hosts following the same naming scheme is good, defining them is repetitive and boring. Maybe we could patch &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt; to achieve something like this. Take a look at an example for ssh-config:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Host myhost%02d
    User lars
    Hostname myhost$1.example.com
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;code&gt;ssh myhost02&lt;/code&gt; would be expanded and as a result would resolve to myhost02.example.com.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Tue, 14 Oct 2008 17:46:15 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/905-guid.html</guid>
    <category>Administration</category>
<category>Bowl Of Cherries</category>
<category>SSH</category>

</item>
<item>
    <title>Antipattern: chaining stateless protocol requests</title>
    <link>http://usrportage.de/archives/904-Antipattern-chaining-stateless-protocol-requests.html</link>
    
    <comments>http://usrportage.de/archives/904-Antipattern-chaining-stateless-protocol-requests.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=904</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=904</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;As we all know, &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; is a stateless protocol. We do all sort of hacks to add state, like &lt;code&gt;ext/session&lt;/code&gt; in &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt;. While such hacks work great for a lot of use cases, we should remind ourselves that they are hacks. There is a phenomenon of &lt;strong&gt;state creep&lt;/strong&gt;: coupling unrelated &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; requests. Think of a page that references a thumbnail in an &lt;code&gt;&amp;#60;img/&amp;#62;&lt;/code&gt;-tag and the picture is generated as needed: it would be possible to generate that image in the context of the request that embeds that image. So the template calls a helper to generate the thumbnail and the thumbnail is generated in the file system.&lt;/p&gt;

	&lt;p&gt;While this works well for a single host, your personal weblog about cooking and cats, it won&amp;#8217;t work for something serious. When you start load balancing between two webserver nodes you are set on fire as you can&amp;#8217;t guarantee that the image is present on the correct node (beside you are generating the image n times where n is the number of nodes). The solution is not that hard: pregenerate all the images with a queuing system and display &lt;strong&gt;&amp;#8220;This image is currently not available&amp;#8221;&lt;/strong&gt;-placeholders as long as they are not ready or &amp;#8211; in case of little image uploads &amp;#8211; generate them when uploading the image. The other option is to generate them on the fly when they are requested. If you do the latter, do it in the context of the request that tries to receive the image, not in the embedding context (the page that embeds the image). Generating on the fly means that you deliver your files through &lt;span class=&quot;caps&quot;&gt;PHP&lt;/span&gt; or something similar: this is fine as long as you have an &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; accelerator in place.&lt;/p&gt;

	&lt;p&gt;One of the systems that does it in the way described above is &lt;a href=&quot;http://drupal.org&quot;&gt;Drupal&lt;/a&gt;. I&amp;#8217;ve implement MogileFS for image storage and retrieval for Drupal and let me say, it was not a pleasure.&lt;/p&gt;

	&lt;p&gt;On a side note: &lt;span class=&quot;caps&quot;&gt;HTTP&lt;/span&gt; 1.1 allows resources to be fetched in parallel, which makes generating images in the wrong context even worse from a user experience point of view, as the page will not show up until each thumbnail is generated.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 24 Sep 2008 20:55:13 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/904-guid.html</guid>
    <category>Cluster</category>
<category>Patterns</category>
<category>PHP</category>
<category>Scalability</category>

</item>
<item>
    <title>8 Hints out of Testing-Turmoil</title>
    <link>http://usrportage.de/archives/903-8-Hints-out-of-Testing-Turmoil.html</link>
    
    <comments>http://usrportage.de/archives/903-8-Hints-out-of-Testing-Turmoil.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=903</wfw:comment>

    <slash:comments>6</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=903</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;ol&gt;
		&lt;li&gt;Have a continuous integration solution in place. Really. If you don&amp;#8217;t, you just burn money by writing tests. I would go so far and say, if you don&amp;#8217;t have continuous integration, you should stop writing unit tests and do click testing. Let your CI system generate &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; docs, high level docs, code coverage report, testdox and every statical analysis info you generate.&lt;/li&gt;
		&lt;li&gt;The definition of &amp;#8220;tests pass&amp;#8221; is &amp;#8220;tests pass on the continous integration system&amp;#8221;. &amp;#8220;Works for me&amp;#8221; has neither a place in the bugtracker nor everywhere else.&lt;/li&gt;
		&lt;li&gt;If you can&amp;#8217;t test it, the architecture is most likely wrong (exceptions are sessions and caching related code which is generally hard to test). Testability should be your main concern when writing code. What&amp;#8217;s the use of fast or wonderful looking code, if you can&amp;#8217;t repeatable prove it is working?&lt;/li&gt;
		&lt;li&gt;Prefer method calls over annotations. A typo in &lt;code&gt;setExpectedException&lt;/code&gt; will trigger a transparent error, while a typo in &lt;code&gt;expectedException&lt;/code&gt; will lead to &lt;a href=&quot;http://xunitpatterns.com/Obscure%20Test.html&quot;&gt;Obscure Test&lt;/a&gt;, and most likely a Mistery Guest.&lt;/li&gt;
		&lt;li&gt;Run the whole test harness twice. This will hellp to identify setup/teardown bugs. Create a random test suite to identify the hard to track mistakes.&lt;/li&gt;
		&lt;li&gt;Run your testsuite really often. We run it with 15 seconds delay every minute and I&amp;#8217;m pretty happy with it.&lt;/li&gt;
		&lt;li&gt;Use good test names that describe the behavior of the unit. The behavior is not the unit you test itself, that&amp;#8217;s what I see in the code, it is something like &amp;#8220;calling register changes the status of the user to foobar&amp;#8221; so the good test name would be &amp;#8220;testRegisterChangesTheStatus &amp;#8230;&amp;#8221;.&lt;/li&gt;
		&lt;li&gt;Aim for 100% code coverage. 95% is nothing to be proud about, I can guarantee, the missing 5% will be the hardest part.&lt;/li&gt;
	&lt;/ol&gt; 
    </content:encoded>

    <pubDate>Fri, 19 Sep 2008 17:55:00 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/903-guid.html</guid>
    <category>PHP</category>
<category>PHPUnit</category>
<category>Unit testing</category>
<category>xUnit</category>

</item>
<item>
    <title>Recovering a software RAID</title>
    <link>http://usrportage.de/archives/902-Recovering-a-software-RAID.html</link>
    
    <comments>http://usrportage.de/archives/902-Recovering-a-software-RAID.html#comments</comments>
    <wfw:comment>http://usrportage.de/wfwcomment.php?cid=902</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://usrportage.de/rss.php?version=2.0&amp;type=comments&amp;cid=902</wfw:commentRss>
    

    <author>nospam@example.com (Lars Strojny)</author>
    <content:encoded>
    	&lt;p&gt;The scenario: my &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; crashed because I&amp;#8217;ve messed around with the partition table of one of the disks in there. This results in a &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; array not being able to assemble itself because the superblock of the messed up device is invalid. The trick is pretty easy: just recreate the whole &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; with &lt;code&gt;mdadm&lt;/code&gt;. The existing metadata will not be overwritten, the current information is just replicated. I  used to have a simple RAID1, but I&amp;#8217;ve now recreated it as an incomplete RAID5 (&lt;code&gt;--level=5&lt;/code&gt;, &lt;code&gt;--raid-devices=2&lt;/code&gt;) as the missing disk is soon to be bought.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ mdadm --create /dev/md0 --level=5 --raid-devices=2 /dev/&amp;#60;original&amp;#62; /dev/&amp;#60;crashed&amp;#62;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;If you like to stick with a RAID1, and not doing the migration to RAID5 along the way, just use &lt;code&gt;--level=1&lt;/code&gt; instead. I&amp;#8217;m not really sure if the order of the disks matter and I&amp;#8217;m not brave enough to find it out.&lt;/p&gt;

	&lt;p&gt;Tomorrow I&amp;#8217;m going to buy the next disk for the &lt;span class=&quot;caps&quot;&gt;RAID&lt;/span&gt; to make sure the redundancy level is alright. Generally I&amp;#8217;m pretty amazed that this kind of setup is so robust. Even me messing around with it can&amp;#8217;t bring it down.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 13 Sep 2008 03:17:22 +0200</pubDate>
    <guid isPermaLink="false">http://usrportage.de/archives/902-guid.html</guid>
    <category>Gentoo</category>
<category>Linux</category>
<category>mdadm</category>
<category>RAID</category>

</item>

</channel>
</rss>