<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Cornelius Horstmann</title>
  <link href="http://brototyp.de/atom.xml" rel="self"/>
  <link href="http://brototyp.de/"/>
  <updated>2012-03-06T11:06:56+01:00</updated>
  <id>http://brototyp.de/</id>
  <author>
    <name>Cornelius Horstmann</name>
    
  </author>

  
  <entry>
    <title>Regenbogenfarben</title>
    <link href="http://brototyp.de/blog/regenbogenfarben/"/>
    <updated>2012-03-05T21:33:00+01:00</updated>
    <id>http://brototyp.de/blog/regenbogenfarben</id>
    <content type="html">&lt;p&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/regenbogentabelle.jpg&#8217; width=&#8217;200&#8217; height=&#8217;200&#8217; alt=&#8221; title=&#8221;&gt;
&lt;a href=&quot;http://www.realmacsoftware.com/clear/&quot;&gt;Realmac Software&lt;/a&gt; hat es mit Clear vorgemacht. Regenbogenfarben, auch wenn sie davon nur einen kleinen Ausschnitt benutzen, sind toll und können etwas hermachen. Aber wie kann man solche Farben anständig berechnen? Schließlich kann man ja nicht für jede (theoretisch beliebig viele) Tabellenzelle die Farbe per Hand festlegen. Auch hier hilft Mathe!&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;p&gt;Folgende Anleitung ist zu Objective-C übertragen von &lt;a href=&quot;http://krazydad.com/tutorials/makecolors.php&quot;&gt;Jim Bumgardner&lt;/a&gt;s Anleitung für Javascript.&lt;/p&gt;

&lt;p&gt;Beginnen wir mit einer einfachen Sinuswelle. Bei folgendem Code-Schnipsel wird in jedem Durchlauf der Schleife ein Grauwert als Farbe ermittelt. Diese Werte&lt;/p&gt;

&lt;figure role=code&gt;&lt;figcaption&gt;&lt;span&gt;Schwarzweißer Regenbogen  &lt;/span&gt;&lt;/figcaption&gt;
 &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;objc&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;128&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&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;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&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;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;n&quot;&gt;UIColor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;color&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;UIColor&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;colorWithRed:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;green:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;blue:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;alpha:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Nehmen wir nun für Rot, Grün und Blau jeweils einen anderen Wert, sondern verschieben ihn im Einheitskreis auch so, dass sie ein Dreieck bilden, so bekommen wir einen Regenbogen.&lt;/p&gt;

&lt;figure role=code&gt;&lt;figcaption&gt;&lt;span&gt;Schwarzweißer Regenbogen  &lt;/span&gt;&lt;/figcaption&gt;
 &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;objc&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;127&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;128&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&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;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&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;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M_PI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&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;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M_PI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&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;amplitude&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;n&quot;&gt;UIColor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;color&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;UIColor&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;colorWithRed:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;r&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;green:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;blue:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;alpha:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Das ganze in eine Klasse gepackt und um einige Parameter verfeinert schaut das ganze dann so aus:&lt;/p&gt;

&lt;figure role=code&gt;&lt;figcaption&gt;&lt;span&gt;Schwarzweißer Regenbogen  &lt;/span&gt;&lt;/figcaption&gt;
 &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;12&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;13&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;14&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;15&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;16&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;17&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;18&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;19&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;20&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;21&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;objc&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;cp&quot;&gt;//  BRColorCircle.h&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;cp&quot;&gt;#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;@interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BRColorCircle&lt;/span&gt; : &lt;span class=&quot;nc&quot;&gt;NSObject&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&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;UIColor&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;nl&quot;&gt;colorWithFrequency:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;phaseShift:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phaseShift&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;andLightness:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lightness&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;@end&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;cp&quot;&gt;//  BRColorCircle.m&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;cp&quot;&gt;#import &amp;quot;BRColorCircle.h&amp;quot;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;@implementation&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;BRColorCircle&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&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;UIColor&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;nl&quot;&gt;colorWithFrequency:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;phaseShift:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phaseShift&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;andLightness:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lightness&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;center&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;100.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;155.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;255.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;red&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;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phaseShift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0&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;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;center&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;lightness&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;green&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;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phaseShift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M_PI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&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;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;center&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;lightness&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;blue&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;sin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frequency&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;phaseShift&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;4.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M_PI&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.0&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;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;center&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;lightness&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UIColor&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;colorWithRed:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;red&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;green:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;green&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;blue:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;blue&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;alpha:&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;@end&lt;/span&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;&lt;a href=&quot;http://brototyp.de/files/BRColorCircle.zip&quot;&gt;Download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Somit haben wir die Frequenz, die Rotation im Farbkreis und die Helligkeit als Parameter. In einer kleinen Test-UITableView berechne ich dann die Farben für die Zellen und für einen CAGradientLayer als Hintergrund hinzu.&lt;/p&gt;

&lt;figure role=code&gt;&lt;figcaption&gt;&lt;span&gt;UITableView Cell in bunt  &lt;/span&gt;&lt;/figcaption&gt;
 &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;12&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;13&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;14&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;15&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;16&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;17&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;objc&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ci&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;indexPath&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;row&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;float&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;mf&quot;&gt;0.03&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;// Frequenz&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;1.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Phasen-Shift&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;kt&quot;&gt;float&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// Helligkeit&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cell&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;nl&quot;&gt;addGradientBackgroundFromColor:&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;        &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BRColorCircle&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;colorWithFrequency:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;phaseShift:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ci&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&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;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;andLightness:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;nl&quot;&gt;toColor:&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;        &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BRColorCircle&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;colorWithFrequency:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;phaseShift:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ci&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&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;/div&gt;&lt;div class=&#8217;line&#8217;&gt;            &lt;span class=&quot;nl&quot;&gt;andLightness:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.05&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    &lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;Varianten&lt;/h2&gt;

&lt;div style=&quot;float:left&quot;&gt;
&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/regenbogentabelle_2.jpg&#8217; width=&#8217;200&#8217; height=&#8217;200&#8217; alt=&#8221; title=&#8221;&gt;&lt;br /&gt;
s = 1.5, f = 0.08, ci = -indexPath.row
&lt;/div&gt;




&lt;div style=&quot;float:right&quot;&gt;
&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/regenbogentabelle_3.jpg&#8217; width=&#8217;200&#8217; height=&#8217;200&#8217; alt=&#8221; title=&#8221;&gt;&lt;br /&gt;
s = 0.0, f = 0.2, ci = -indexPath.row
&lt;/div&gt;




&lt;br style=&quot;clear:both;&quot; /&gt;



</content>
  </entry>
  
  <entry>
    <title>301 - dauerhaft verschieben</title>
    <link href="http://brototyp.de/blog/facelifting-bei-links-leichtgemacht-mit-mod-rewrite/"/>
    <updated>2011-09-30T20:56:00+02:00</updated>
    <id>http://brototyp.de/blog/facelifting-bei-links-leichtgemacht-mit-mod-rewrite</id>
    <content type="html">&lt;p&gt;Neben dem Umzug von Wordpress auf Octopress hat dieses Blog auch noch eine weitere einschneidende Veränderung erfahren: Alle Blogartikel haben ein vorangestelltes /blog/ in der URL bekommen. Einfach so die URL verändern ist eigentlich keine gute Idee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alle bisherigen Links funktionieren nicht mehr. Verlinkt jemand anderes auf einen Artikel, so verläuft dieser Link ins Leere.&lt;/li&gt;
&lt;li&gt;Für den Pagerank bei Google ist das selbstverständlich auch nicht hilfreich.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Wenn man es aber richtig macht, dann ist all dies kein Problem mehr.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;p&gt;Für (unter anderem) solche Umstände gibt es die &lt;a href=&quot;http://de.wikipedia.org/wiki/HTTP-Statuscode&quot;&gt;&amp;#8220;HTTP-Statuscodes&amp;#8221;&lt;/a&gt;, von denen 404 oder 500 wohl die bekanntesten sind. In diesem Fall hilft 301-Moved Permanently.&lt;/p&gt;

&lt;p&gt;Für dieses Blog reichte folgende .htaccess.&lt;/p&gt;

&lt;figure role=code&gt;&lt;figcaption&gt;&lt;span&gt;.htaccess&lt;/span&gt;&lt;/figcaption&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8221;&gt;&lt;div class=&#8217;line&#8217;&gt;ErrorDocument 404 /404.html
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&amp;lt;IfModule mod_rewrite.c&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteEngine On
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteBase /
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteRule ^feed atom.xml [l]
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteRule ^feed/atom atom.xml [l]
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteCond %{REQUEST_FILENAME} !-d
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteCond %{REQUEST_FILENAME} !-f
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteCond %{DOCUMENT_ROOT}/blog/$1/ -d
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;    RewriteRule ^(.*)$ blog/$1 [R=301,L]
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&amp;lt;/IfModule&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Das Wichtigste kurz erklärt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zeile 1&lt;/strong&gt; definiert die Datei, die angezeigt werden soll, wenn ein 404-Fehler aufgetreten ist (wenn also doch mal ein ungültiger Link existiert).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zeilen 5 und 6&lt;/strong&gt; biegt die beiden alten urls der RSS-Feeds so um, dass sie auf den neuen Feed zeigen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zeilen 7-10&lt;/strong&gt; sind wohl die interessantesten. Die RewriteCond geben die Bedingungen an, die erfüllt sein müssen, damit die RewriteRule ausgeführt wird. Dabei

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zeile 7&lt;/strong&gt; der Request darf nicht auf einen bereits existiertenden Ordner zeigen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zeile 8&lt;/strong&gt; der Request darf nicht auf eine bereits existiertende Datei zeigen&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zeile 9&lt;/strong&gt; diese Condition enthält einen Parameter ($1) aus der darauffolgenden RewriteRule&lt;br/&gt;
  Diese Condition prüft, ob denn im ordner &amp;#8220;blog&amp;#8221; ein Ordner mit dem angeforderten Artikelname existiert (bei Octopress ist das normalerweise so)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zeile 10&lt;/strong&gt; führt dann den eigentlichen rewrite durch und setzt den Statuscode 301&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Diese Konfiguration funktioniert aber nur, wenn &amp;#8220;%{DOCUMENT_ROOT}&amp;#8221; tatsächlich auf das Document_Root des Blogs zeigt. Bei mir war dies nicht der Fall, da Apache vorher ein Virtual-to-Real-Mapping durchgeführt hat. In diesem Fall muss man dann &amp;#8220;%{DOCUMENT_ROOT}&amp;#8221; dann durch den korrekten Pfad ersetzen.&lt;/p&gt;

&lt;p&gt;Die Verwendung von $1 in Zeile 9 ist nur deswegen möglich, weil bei der interne Verarbeitung der Direktiven erst das Suchmuster der RewriteRule überprüft wird und dann die RewriteCond.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Nacht des Wissens Hamburg</title>
    <link href="http://brototyp.de/blog/nacht-des-wissens/"/>
    <updated>2011-09-29T06:54:38+02:00</updated>
    <id>http://brototyp.de/blog/nacht-des-wissens</id>
    <content type="html">&lt;p&gt;&lt;a href=&quot;http://itunes.apple.com/de/app/nacht-des-wissens/id467102724?mt=8&quot;&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/wissensnacht_icon.png&#8217; width=&#8217;100&#8217; height=&#8217;100&#8217; alt=&#8217;Nacht des Wissens iPhone App&#8217; title=&#8217;Nacht des Wissens iPhone App&#8217;&gt;&lt;/a&gt;
Am 29. Oktober 2011 findet die &lt;a href=&quot;http://nachtdeswissens.hamburg.de/&quot;&gt;&amp;#8220;4. Nacht des Wissens Hamburg&amp;#8221;&lt;/a&gt; statt und seit gestern gibt es die passende App im &lt;a href=&quot;http://itunes.apple.com/de/app/nacht-des-wissens/id467102724?mt=8&quot;&gt;&amp;#8220;AppStore&amp;#8221;&lt;/a&gt;.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class=&#8217;right &#8217; src=&#8217;http://brototyp.de/pictures/wissensnacht_bootscreen.png&#8217; width=&#8217;200&#8217; height=&#8217;287&#8217; alt=&#8217;Wissensnacht Startscreen&#8217; title=&#8217;Wissensnacht Startscreen&#8217;&gt;Die App kommt mit einem komplett überholten Updatemechanismus daher, der zum einen deutlich versteckter ist, das Gros seiner Arbeit im Hintergrund verrichtet und zum anderen den benötigten Traffic um Größenordnungen verringert. Damit spart der Nutzer nicht nur das Volumen seiner &amp;#8220;Flatrate&amp;#8221;, sondern auch kostbare Zeit.&lt;/p&gt;

&lt;p&gt;Auch die News Funktion (in früheren Apps RSS genannt) wurde komplett überarbeitet und bietet nun zusätzich Pseudo-Push Nachrichten an, die dem Nutzer die wichtigsten Informationen zukommen lässt.&lt;/p&gt;

&lt;p&gt;Die Suchfunktion funktioniert nun komplett offline. Somit gibt es (abgesehen von Updates und den News) keine Notwendigkeit mehr für eine Internetverbindung.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>AdHoc on the fly</title>
    <link href="http://brototyp.de/blog/automatische-distribution-von-adhocs/"/>
    <updated>2011-09-17T18:43:00+02:00</updated>
    <id>http://brototyp.de/blog/automatische-distribution-von-adhocs</id>
    <content type="html">&lt;p&gt;Wenn man eine iPhone App von mehreren Beta-testern testen lassen will, dann ist die mit iOS 4 vorgestellte Möglichkeit der Distribution sehr hilfreich. Noch hilfreicher ist es, wenn nach dem Archivieren alles restliche passiert.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;p&gt;Folgende Schritte sind dabei notwendig:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Folgendes Script in den Projektordner speichern&lt;/li&gt;
&lt;/ul&gt;


&lt;div&gt;&lt;script src=&#8217;https://gist.github.com/1224112.js?file=&#8217;&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;pre&gt;&lt;code&gt;SIGNING_IDENTITY=&amp;quot;iPhone Distribution: &amp;lt;Your Name&amp;gt;&amp;quot;
PROVISIONING_PROFILE=&amp;quot;${HOME}/Library/MobileDevice/Provisioning Profiles/&amp;lt;filename&amp;gt;.mobileprovision&amp;quot;

LOG=&amp;quot;$SRCROOT/buildlog.txt&amp;quot;
SCP_USER=&amp;quot;user&amp;quot;
SCP_HOST=&amp;quot;example.de&amp;quot;
SCP_PATH=&amp;quot;/var/www/adhocs/&amp;quot;

DATE=$( /bin/date +&amp;quot;%Y-%m-%d&amp;quot; )
ARCHIVE=$( /bin/ls -t &amp;quot;${HOME}/Library/Developer/Xcode/Archives/${DATE}&amp;quot; | /usr/bin/grep xcarchive | /usr/bin/sed -n 1p )
APP=&amp;quot;${HOME}/Library/Developer/Xcode/Archives/${DATE}/${ARCHIVE}/Products/Applications/${PRODUCT_NAME}.app&amp;quot;

/usr/bin/open -a /Applications/Utilities/Console.app $LOG

echo &amp;quot;Creating .ipa for ${PRODUCT_NAME}&#8230; &amp;quot; &amp;gt;&amp;gt; $LOG

/usr/bin/perl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication -v &amp;quot;${APP}&amp;quot; -o &amp;quot;/tmp/${PRODUCT_NAME}.ipa&amp;quot; &#8211;sign &amp;quot;${SIGNING_IDENTITY}&amp;quot; &#8211;embed &amp;quot;${PROVISIONING_PROFILE}&amp;quot;

echo &amp;quot;done.&amp;quot; &amp;gt;&amp;gt; $LOG

echo &amp;quot;Uploading to Server&#8230; &amp;quot; &amp;gt;&amp;gt; $LOG

scp &amp;quot;/tmp/${PRODUCT_NAME}.ipa&amp;quot; ${SCP_USER}@${SCP_HOST}:&amp;quot;${SCP_PATH}&amp;quot; &amp;gt;&amp;gt; $LOG

echo &amp;quot;Adjusting rights on Server&#8230; &amp;quot; &amp;gt;&amp;gt; $LOG

ssh ${SCP_USER}@${SCP_HOST} &amp;quot;chmod 755 \&amp;quot;${SCP_PATH}${PRODUCT_NAME}.ipa\&amp;quot;&amp;quot; &amp;gt;&amp;gt; $LOG

echo &amp;quot;done.&amp;quot; &amp;gt;&amp;gt; $LOG
&lt;/code&gt;&lt;/pre&gt;&lt;/noscript&gt;&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Konfiguration in dem Projekt anpassen&lt;/li&gt;
&lt;li&gt;ausführbar machen&lt;/li&gt;
&lt;/ul&gt;


&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;chmod +x upload.sh
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ul&gt;
&lt;li&gt;im verwendenten Scheme ein &lt;strong&gt;Post-actions&lt;/strong&gt; Script hinzufügen&lt;/li&gt;
&lt;/ul&gt;


&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;PROJECT_DIR&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/upload.sh
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;ul&gt;
&lt;li&gt;in &lt;strong&gt;Post-actions&lt;/strong&gt; eine Email-Action hinzufügen&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  
  <entry>
    <title>Performancetest Mit Siege</title>
    <link href="http://brototyp.de/blog/performancetest-mit-siege/"/>
    <updated>2011-09-17T17:02:00+02:00</updated>
    <id>http://brototyp.de/blog/performancetest-mit-siege</id>
    <content type="html">&lt;p&gt;Hinundwieder möchte man die Performance einer Webseite auf den Prüfstand stellen. Da ich heute von Wordpress auf &lt;a href=&quot;http://octopress.org&quot;&gt;Octopress&lt;/a&gt; umgestiegen bin habe ich die neue statische Seite mit einer dynamischen Worpress Seite auf dem gleichen Server verglichen.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;h2&gt;Siege installieren&lt;/h2&gt;

&lt;p&gt;Hat man &lt;a href=&quot;http://www.macports.org&quot;&gt;Macports&lt;/a&gt; installiert, so ist die Installation von Siege ein Einzeiler.&lt;/p&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;sudo port install siege
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Danach möchte Siege nur noch eine Konfigurationsdatei unter &lt;strong&gt;/opt/local/etc/siegerc&lt;/strong&gt; finden. Eine neue erzeugt man mit&lt;/p&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;siege.config
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;New configuration template added to ~/.siegerc
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Run siege -C to view the current settings in that file
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;The server is now under siege&amp;#8230;&lt;/h2&gt;

&lt;p&gt;Siege hat einige Parameter. Gleich loslegen kann man mit&lt;/p&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;siege -c20 url -b -t30s
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;** SIEGE 2.70
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;** Preparing 20 concurrent users &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;battle.
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;The server is now under siege&#8230;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Dabei werden 30 Sekunden lang 20 parallele Verbindungen simuliert.&lt;/p&gt;

&lt;h2&gt;Der Vergleich&lt;/h2&gt;

&lt;h3&gt;Das Ergebnis der statischen Octopress Seite:&lt;/h3&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;12&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;13&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;Lifting the server siege&#8230;      &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;.
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Transactions:               1254 hits
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Availability:             100.00 %
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Elapsed &lt;span class=&quot;nb&quot;&gt;time&lt;/span&gt;:              29.41 secs
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Data transferred:           7.21 MB
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Response &lt;span class=&quot;nb&quot;&gt;time&lt;/span&gt;:              0.46 secs
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Transaction rate:          42.64 trans/sec
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Throughput:             0.25 MB/sec
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Concurrency:               19.63
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Successful transactions:        1254
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Failed transactions:               0
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Longest transaction:            2.37
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Shortest transaction:           0.14
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h3&gt;Das Ergebnis der dynamischen Wordpress Seite:&lt;/h3&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;12&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;13&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;Lifting the server siege&#8230;      &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;.
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Transactions:                368 hits
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Availability:             100.00 %
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Elapsed &lt;span class=&quot;nb&quot;&gt;time&lt;/span&gt;:              29.49 secs
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Data transferred:           1.17 MB
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Response &lt;span class=&quot;nb&quot;&gt;time&lt;/span&gt;:              1.54 secs
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Transaction rate:          12.48 trans/sec
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Throughput:             0.04 MB/sec
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Concurrency:               19.16
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Successful transactions:         381
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Failed transactions:               0
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Longest transaction:            5.81
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;Shortest transaction:           0.41
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;h2&gt;Fazit&lt;/h2&gt;

&lt;p&gt;Man sieht schnell, dass (wie erwartet) die statische Seite um einiges performanter ist. Gut 3 mal so viele Transactions in gleicher Zeit. Dennoch ist der Server scheinbar stark genug 20 parallelen Verbindungen auf der dynamischen Seite stand zu halten.
Den Effekt einer dynamischen Seite ließe sich mit Sicherheit durch ein Cache (wie WP-Super-Cache) reduzieren.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Vom Selbstbau-NAS zum Würfelsklaven</title>
    <link href="http://brototyp.de/blog/vom-selbstbau-nas-zum-wurfelsklaven/"/>
    <updated>2011-05-01T12:54:23+02:00</updated>
    <id>http://brototyp.de/blog/vom-selbstbau-nas-zum-wurfelsklaven</id>
    <content type="html">&lt;p&gt;Seit einiger Zeit suche ich nach der besten (bzw einer guten)
Konstellation meiner Geräte. Eine wichtige Rolle nimmt dabei das NAS
ein. Als Serienjunkie hat man eine nicht allzu kleine Datenmenge, die
auch sicher gespeichert werden möchte.&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/readynasduo_w350-150x150.jpg&#8217; width=&#8221; height=&#8221; alt=&#8217;ReadyNAS Duo&#8217; title=&#8217;ReadyNAS Duo&#8217;&gt;
Anfangs habe ich diese noch auf verschiedenen Platten verteilt gespeichert. Seit
einiger Zeit speichere ich sie nur noch auf einem NAS. Das hat den
Vorteil der Zentralisierung. Die Verwaltung und Suche gestaltet sich
somit um einiges einfacher. Nach einem &lt;a href=&quot;http://www.amazon.de/gp/product/B0019LXTIO?ie=UTF8&amp;amp;tag=webworxisde-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=B0019LXTIO&quot;&gt;ReadyNAS Duo von Netgear&lt;/a&gt;
und einem Selbstbau-&lt;a href=&quot;http://freenas.org/&quot;&gt;freenas&lt;/a&gt; bin ich nun bei einem
&lt;a href=&quot;http://www.amazon.de/gp/product/B003A7OMS6?ie=UTF8&amp;amp;tag=webworxisde-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=B003A7OMS6&quot;&gt;Synology D410 NAS&lt;/a&gt;
gelandet und (wiedermal) sehr zufrieden.&lt;/p&gt;

&lt;p&gt;Es fasst bis zu vier SATA
Platten (bei mir 4x2TB) und unterstützt neben diversen Raids (Basic,
JBOD, RAID 0, RAID 1, RAID 5, RAID 5+Spare, RAID 6, RAID 10) auch eine
Eigenentwicklung &lt;a href=&quot;http://www.synology.com/us/products/features/RAID.php&quot;&gt;SHR&lt;/a&gt;, die sich
vor allem durch hohe Dynamik auszeichnet. Das Interface ist (mit wenigen
Ausnahmen) sehr gut. Nachdem man SSH aktiviert hat, kann man aus einer
großen Auswahl von 3rdparty Applikationen wählen, die via
&lt;a href=&quot;http://www.synology-wiki.de/index.php/IPKG&quot;&gt;IPKG&lt;/a&gt; installiert werden
können.
&lt;img class=&#8217;right &#8217; src=&#8217;http://brototyp.de/pictures/002-150x150.jpg&#8217; width=&#8221; height=&#8221; alt=&#8217;Synology DS410&#8217; title=&#8217;Synology DS410&#8217;&gt;
Die Performance stimmt in etwa mit den von &lt;a href=&quot;http://www.synology.com/enu/products/4-5bay_perf.php&quot;&gt;Synology getroffenen Aussagen&lt;/a&gt; überein.
Positiv finde ich auch die Möglichkeit mit einer &amp;#8220;Expansion Unit&amp;#8221; -
&lt;a href=&quot;http://www.amazon.de/Synology-DX510-NAS-System-ohne-Festplatte/dp/B003A7YV82/ref=sr_1_1?ie=UTF8&amp;amp;qid=1298203491&amp;amp;sr=8-1&quot;&gt;DX510&lt;/a&gt;
die via eSATA angeschlossen wird die Kapazität zu erhöhen. Desweitern
gibt es eine wachsende Anzahl von iOS Applikationen, die den Zugriff auf
diversen Services der DiskStation gewähren. So nutze ich die &amp;#8220;DS audio&amp;#8221;
App, die die gesamte Musikbibliothek auf mein iPhone streamt.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Xcode Build fails custom sound</title>
    <link href="http://brototyp.de/blog/xcode-build-fails-custom-sound/"/>
    <updated>2011-04-08T09:56:45+02:00</updated>
    <id>http://brototyp.de/blog/xcode-build-fails-custom-sound</id>
    <content type="html">&lt;p&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/Bildschirmfoto-2011-04-08-um-09.50.35-150x150.png&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;&lt;/p&gt;

&lt;p&gt;Inspiriert durch diesen &lt;a href=&quot;http://todamax.kicks-ass.net/blog/2011/polly/&quot;&gt;Papagei&lt;/a&gt; habe ich mir
einen &lt;strong&gt;/System/Library/Sounds&lt;/strong&gt; gebaut und kann hier geladen werden:
&lt;a href=&quot;http://cl.ly/5qpQ&quot;&gt;http://cl.ly/5qpQ&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>MacBook ganz leise</title>
    <link href="http://brototyp.de/blog/macbook-ganz-leise/"/>
    <updated>2011-04-02T12:33:51+02:00</updated>
    <id>http://brototyp.de/blog/macbook-ganz-leise</id>
    <content type="html">&lt;p&gt;Vor einer Weile schon habe ich meine Festplatte durch eine
&lt;a href=&quot;http://www.google.de/search?client=safari&amp;amp;rls=en&amp;amp;q=CTFDDAC256MAG-1G1&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;redir_esc=&amp;amp;ei=Zv6WTZC2NZD0sgb3wMC2CA&quot;&gt;SDD&lt;/a&gt;
ersetzt. Der Scheibenspeicher hing per USB hin und wieder dran und
speicherte meine Fotos. Das hat zwei Nachteile: es ist umständlich (ein
externes Gerät) und man hat die Fotos nicht immer dabei. Schon seit
langem (&lt;a href=&quot;http://brototyp.de/briefkastenfrust-nachtrag/&quot;&gt;Briefkastenfrust – Nachtrag&lt;/a&gt;) überlege ich
mein Superdrive aus- und die Festplatte einzubauen. Zwei Vorteile der
SSD werde dadurch aber versaut.&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/nebuchadnezzar-150x150.jpg&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;
Durch die SSD gibt es (außer den Lüftern) keine beweglichen Teile mehr,
so dass man das MacBook getrost auf die Couch werfen kann. Außerdem ist
es um einiges leiser. Baut man die Festplatte wieder ein, sind diese
Vorteile nichtig. Wenn man, wie ich, den Scheibenspeicher aber nur hin
und wieder braucht, kann diesen unmounten. Das geht entweder mit dem
Festplattendienstprogramm(was scheinbar keinen Spindown zur Folge hat),
oder im Terminal. Dazu sucht man sich erstmal raus, welches Gerät man
unmounten will&lt;/p&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;5&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;6&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;7&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;8&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;9&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;10&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;paula-wlan:~ corneliushorstmann&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;diskutil list
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;/dev/disk0
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;c&quot;&gt;#:                       TYPE NAME                    SIZE       IDENTIFIER&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   0:      GUID_partition_scheme                        *256.1 GB   disk0
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   1:                        EFI                         209.7 MB   disk0s1
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   2:                  Apple_HFS HAL                     255.7 GB   disk0s2
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;/dev/disk1
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   &lt;span class=&quot;c&quot;&gt;#:                       TYPE NAME                    SIZE       IDENTIFIER&lt;/span&gt;
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   0:      GUID_partition_scheme                        *320.1 GB   disk1
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   1:                        EFI                         209.7 MB   disk1s1
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;   2:                  Apple_HFS nebuchadnezzar          319.7 GB   disk1s2
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;und tut dann genau das&lt;/p&gt;

&lt;figure role=code&gt; &lt;div class=&quot;highlight&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;span class=&#8217;line&#8217;&gt;1&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;2&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;3&lt;/span&gt;
&lt;span class=&#8217;line&#8217;&gt;4&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217; width=&#8217;100%&#8217;&gt;&lt;pre&gt;&lt;code class=&#8217;bash&#8217;&gt;&lt;div class=&#8217;line&#8217;&gt;paula-wlan:~ corneliushorstmann&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;hdiutil eject /dev/disk1
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;disk1&amp;quot;&lt;/span&gt; unmounted.
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;disk1&amp;quot;&lt;/span&gt; ejected.
&lt;/div&gt;&lt;div class=&#8217;line&#8217;&gt;paula-wlan:~ corneliushorstmann&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;


&lt;p&gt;Diese Methode hat auch einen Spindown zur Folge, wodurch es eine Weile
leise ist. Manch ein Dienst lässt die Festplatte dann wieder anlaufen
(bei mir habe ich iStats als eine Ursache gefunden).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Cornelius; C wie Chamäleon</title>
    <link href="http://brototyp.de/blog/cornelius-c-wie-chamaleon/"/>
    <updated>2011-03-17T20:43:36+01:00</updated>
    <id>http://brototyp.de/blog/cornelius-c-wie-chamaleon</id>
    <content type="html">&lt;p&gt;&lt;img class=&#8217;left &#8217; src=&#8217;http://brototyp.de/pictures/Chamaeleon-300x200.jpg&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;
In vielen Kinderbüchern gab es zu meinem Namen genau ein Tier. Das
Chamäleon. Das ist wohl mit ein Grund, warum mich diese Tiere so
faszinieren.&lt;/p&gt;

&lt;p&gt;Dieses Geschöpf habe ich im Tiergarten Berlin eingefangen.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Backup, die zweite</title>
    <link href="http://brototyp.de/blog/backup-die-zweite/"/>
    <updated>2011-02-21T10:01:27+01:00</updated>
    <id>http://brototyp.de/blog/backup-die-zweite</id>
    <content type="html">&lt;p&gt;In &lt;a href=&quot;http://brototyp.de/das-wichtigste-uberhaupt/&quot;&gt;Das wichtigste überhaupt&lt;/a&gt; hatte ich
bereits mein Backupsetup geschrieben. Dieses Setup hatte aber einen
entscheidenden Nachteil: Das Setup basierte auf einem laufenden Mac.
Nachdem ich mir ein neues NAS zugelegt habe (Blogpost in Arbeit) wollte
ich auch meine Backup-Prozedur umstellen. Auch mein neues Setup basiert
auf zwei teilen.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;h2&gt;1. Datenbankbackup&lt;/h2&gt;

&lt;p&gt;Das Backup der Datenbank(en) erledigt ein kleines Script mit der Hilfen
von mysqldump. Dieses Script wird immer in der Nacht um 2 Uhr
angestoßen. Optimal ist das ganze noch nicht, da dieses Script auch für
Datenbanken, in denen sich nichts geändert hat, eine neue Datei anlegt.
Das führt zu einigem overhead. Alle dumps werden dann in einem nicht per
http zugreifbaren Ordner auf dem Server gesichert.&lt;/p&gt;

&lt;h2&gt;2. Dateibackup&lt;/h2&gt;

&lt;p&gt;Das Backup der Dateien auf dem Server erledigt ein Script auf meinem
NAS. Dabei wird rsync via SSH bemüht. Da man Fehler auf Webseiten nicht
immer sofort merkt reicht es nicht immer nur ein Spiegel der aktuellen
Version zu haben, sondern braucht man dann eigentlich auch eine Art
Snapshot-System. Ein Trick, Snapshots zu haben, und gleichzeitig die
Vorzüge von rsync zu nutzen, ist die Verwendung von (hard-)Links.
&lt;a href=&quot;http://www.mikerubel.org/computers/rsync_snapshots/&quot;&gt;Rubel&lt;/a&gt; erklärt
sehr ausführlich, wie das funktioniert. Das gegebene Script habe ich
genommen, ein wenig abgeändert und habe somit nun ein tägliches Backup
der letzten 30 Tage (plus ein monatliches Archiv).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Protip für Keyboardliebhaber</title>
    <link href="http://brototyp.de/blog/protip-fur-keyboardliebhaber/"/>
    <updated>2011-02-18T01:09:22+01:00</updated>
    <id>http://brototyp.de/blog/protip-fur-keyboardliebhaber</id>
    <content type="html">&lt;p&gt;Lange habe ich gedacht, dass es keine Möglichkeit gäbe den Mac anständig
per Tastatur zu steuern. Schon alleine die fehlende Möglichkeit bei
Dialogboxen die Wahl per Tastatur zu treffen hat mich schier kirre
gemacht.&lt;!&#8211;more&#8211;&gt; Via mobilemacs habe ich nun mitbekommen, dass genau dies doch
möglich ist. Nachdem man einen kleinen Haken gesetzt hat sind (fast)
alle Kontrollfelder auch per Tab anzusteuern.
&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/Tastatur-300x266.jpg&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Briefkastenfrust - Nachtrag</title>
    <link href="http://brototyp.de/blog/briefkastenfrust-nachtrag/"/>
    <updated>2010-12-15T18:03:14+01:00</updated>
    <id>http://brototyp.de/blog/briefkastenfrust-nachtrag</id>
    <content type="html">&lt;p&gt;Das ist ein Nachtrag zu: &lt;a href=&quot;http://brototyp.debriefkastenfrust/&quot;&gt;Briefkastenfrust&lt;/a&gt; Bis jetzt
(exakt 2 Wochen später) habe ich noch immer keine Antwort auf mein Fax
(an die Post) bekommen. Nein, ich habe es auch nicht wirklich erwartet.
Aber es gibt eine andere Neuigkeit: Der eBay Verkäufer, den ich
eigentlich nur informiert hatte, hat mir wenn auch ein wenig spät (nach
1 Woche) und in gebrochenem Englisch angeboten direkt ein zweites Bay zu
schicken. Das nenne ich nett. Also werde ich nächste Woche dick in rot
einen Aufkleber an meinen Briefkasten kleben, der unseren Postzusteller
darum bittet, diesmal den Brief nicht zu knicken. Es bleibt spannend ;)&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Briefkastenfrust</title>
    <link href="http://brototyp.de/blog/briefkastenfrust/"/>
    <updated>2010-12-01T19:49:20+01:00</updated>
    <id>http://brototyp.de/blog/briefkastenfrust</id>
    <content type="html">&lt;p&gt;Normalerweise gibt es im groben und ganzen zwei Arten von Emotionen beim
Öffnen des Briefkasten, die davon abhängen was da drin ist:&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;ul&gt;
&lt;li&gt;positive Emotionen (bei einem netten Brief, man bekommt was tolles
geschickt &amp;#8230;)&lt;/li&gt;
&lt;li&gt;negative Emotionen (bei Rechnungen, bei Werbung &amp;#8230;)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Als ich am Montag meinen Briefkasten geleert habe hab ich Emotionen auf
Basis &lt;strong&gt;wie&lt;/strong&gt; etwas darin ist bekommen. Um vorne anzufangen: Ich hab mir
schon eine Weile überlegt eine SSD zu kaufen. Da eine SSD für (eher
selten zugegriffene) Daten aber Verschwendung ist habe ich mich dafür
entschieden mein SuperDrive auszubauen und durch eine SSD in einem
Optibay zu ersetzten. Nach ein bisschen Googeln und etwas Suche bei eBay
bin ich schnell zu dem Schluss gekommen, dass ich das Optibay aus Asien
(20€+ \~2 Wochen Wartezeit) anstatt aus Deutschland (80€ + \~4Tage
Wartezeit) bestelle. Nun zurück zum Anfang. Eben jenes Optibay ist in
meinem Briefkasten gelandet. Zu der Form, in der es dort gelandet ist
kann ich nur Vermutungen anstellen, aber am Wahrscheinlichsten ist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Briefträger(in) hat den Umschlag mit dem Optibay in der Hand&lt;/li&gt;
&lt;li&gt;passt (so) nicht in den Briefkasten&lt;/li&gt;
&lt;li&gt;einmal in der Mitte geknickt passts perfekt!&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Und so habe ich es dann auch aus dem Umschlag geholt:
&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/Foto-1.jpg&#8217; width=&#8217;200&#8217; height=&#8217;200&#8217; alt=&#8221; title=&#8221;&gt;
&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/Foto-2.jpg&#8217; width=&#8217;200&#8217; height=&#8217;200&#8217; alt=&#8221; title=&#8221;&gt;&lt;/p&gt;

&lt;p&gt;Mit dem Umschlag bin ich dann zur Post gewatschelt und habe mein Anliegen vorgetragen. Da Post≠Post war
ich da falsch. Ich musste ein Formular ausfüllen, das dann weiter zur
&amp;#8220;richtigen Post&amp;#8221; gefaxt wurde. Ich bin sehr gespannt, ob da noch
irgendetwas kommt. Mir ist zwar klar, dass so ein Bay per Briefpost zu
verschicken nun mal einige Risiken mit sich trägt, aber so wie das
gelaufen ist würde ich am liebsten am Briefkasten warten und dem
Postzusteller ordentlich meine Meinung geigen (würde ich auch machen,
wenn ich Zeit dafür hätte).&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Back to the Mac</title>
    <link href="http://brototyp.de/blog/back-to-the-mac/"/>
    <updated>2010-10-20T21:00:12+02:00</updated>
    <id>http://brototyp.de/blog/back-to-the-mac</id>
    <content type="html">&lt;p&gt;Steve Jobs hat mal wieder eine Keynote gehalten. Alle Fanboys haben sich
auf &amp;#8220;Apple-Weihnachten&amp;#8221; gefreut. Doch das was kam hat mich enttäusch.
Die iLife Suite hat mich nicht besonders berauscht. Das einzige was ich
daraus nutze ist iPhoto. Die Features, die es gewonnen hat sind für mich
uninteressant.&lt;!&#8211;more&#8211;&gt;&lt;/p&gt;

&lt;h2&gt;Max OS 10.7 - Lion&lt;/h2&gt;

&lt;p&gt;Gefreut habe ich mich auf Mac OS 10.7, &lt;strong&gt;Lion&lt;/strong&gt;. Hoffnungen hatte ich
viele. Enttäuscht wurden sie quasi alle. Ich habe mich super an Expose
gewöhnt. Nutze Spaces nie (aber die Anwesenheit davon hat mich nie
gestört). Plötzlich wird all dieses Verhalten über einen Haufen geworfen
und &lt;strong&gt;Mission Control&lt;/strong&gt; bahnt sich an. Prinzipiell eine schöne Sache,
aber warum? Wo ist der Vorteil gegenüber dem bisherigen?
&lt;strong&gt;Fullscreenapps&lt;/strong&gt;. Ich sehe den Punkt nicht. Ich konnte doch auch
bisher schon Vorschau auf Vollbild vergrößern. Warum hier eine andere
Ebene einführen? Programme, die nicht Fullscreen sind finde ich ganz
normal auf dem Desktop und für die anderen muss ich mich durchwischen
(Ja, Mission Control geht auch). &lt;strong&gt;Launchpad&lt;/strong&gt;. Sieht hübsch aus. Aber:
Auch hier sehe ich den Vorteil nicht. Wenn man in einen &amp;#8220;der Desktop
wird zum Launchpad&amp;#8221; Modus umschalten könnte und alle Programme über dem
Launchpad schweben dann wäre das eine super Sache für Neueinsteiger
(oder Quereinsteiger vom iOS). Aber so sehe ich das nur als verwirrend
an. &lt;strong&gt;Mac App Store&lt;/strong&gt;. Ich sehe nur wenige Nachteile und viele Vorteile
im Mac App Store. Die Hauptvorteile, die ich sehe sind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updates an einem Platz&lt;/li&gt;
&lt;li&gt;klare Lizenzstruktur (alle Programme auf all einen privaten
Rechnern)&lt;/li&gt;
&lt;li&gt;einfache Distribution (für die Developer)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Vor allem sehe ich den App Store als super Quelle für kleine Tools, die
sonst nur in den Tiefen des Internet vergessen werden. Was ich mich
jedoch frage (was sich vermutlich in den nächsten Tagen klären lässt):
Verhalten sich Apps aus dem Mac App Store wie Apps aus dem iOS App
Store? Soll heißen: Gibt es eine Sandbox? Hat jede App ihren Documents
Folder? &amp;#8230;&lt;/p&gt;

&lt;h3&gt;Was ich mir erhofft hatte?&lt;/h3&gt;

&lt;p&gt;Vor allem als fortgeschrittener Anwender (so möchte ich mich jetzt mal
nennen) fehlen mir ein paar Kernfeatures, bei denen ich hoffe, dass sie
nur noch nicht vorgestellt worden sind. Darunter sind vor allem ein
neues &lt;strong&gt;Dateisystem&lt;/strong&gt; eine durchdachte &lt;strong&gt;Sync-Strategie&lt;/strong&gt; das
Vorhandensein eines Musik/Video Dienstes im OS und ein iOS Sync Programm
(entkoppelt von iTunes).&lt;/p&gt;

&lt;h2&gt;Mac Book Air&lt;/h2&gt;

&lt;p&gt;Das Mac Book Air finde ich prinzipiell super. Hier möchte ich die für
mich negativen Punkte zuerst nennen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hässliches graues Bezel um das Display&lt;/li&gt;
&lt;li&gt;langsamer Prozessor&lt;/li&gt;
&lt;li&gt;11&amp;#8221; (halte ich für zu klein)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Was ich aber super finde ist der komplette Wechsel zu Flash Speicher.
Das ist ein konsequenter und in meinen Augen notwendiger Schritt
gewesen. Den Markt des Mac Book Air sehe ich bei den Anwendern, die
entweder weder viel Speicher noch Performance brauchen oder bei denen
die Portabilität an erster Stelle steht. Als primäres Gerät ist es für
mich definitiv zu wenig.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Monat der Fotografie Berlin</title>
    <link href="http://brototyp.de/blog/monat-der-fotografie-berlin/"/>
    <updated>2010-09-29T18:46:56+02:00</updated>
    <id>http://brototyp.de/blog/monat-der-fotografie-berlin</id>
    <content type="html">&lt;p&gt;Eine weitere App aus meiner Feder: Monat der Fotografie Berlin. Alle Inhalte,
die auch auf der &lt;a href=&quot;http://www.mdf-berlin.de/&quot;&gt;Internetseite&lt;/a&gt; zu finden
sind wurden aufbereitet und werden offline auf dem Gerät zur Verfügung
gestellt.&lt;/p&gt;

&lt;!&#8211;more&#8211;&gt;


&lt;p&gt;&lt;img class=&#8217;right &#8217; src=&#8217;http://brototyp.de/pictures/MdF_title_icon@2x-150x150.png&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;
Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Karte aller Ausstellungsorte&lt;/li&gt;
&lt;li&gt;diverse Filter (nach Künstlern, Vernissagen, Orten, &amp;#8230;)&lt;/li&gt;
&lt;li&gt;Highlights&lt;/li&gt;
&lt;li&gt;Erstellung eines Plan (welche Ausstellungen will ich besuchen)&lt;/li&gt;
&lt;li&gt;Suche&lt;/li&gt;
&lt;li&gt;RSS-Feed&lt;/li&gt;
&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  
  <entry>
    <title>iPhone Icons schnell und einfach testen</title>
    <link href="http://brototyp.de/blog/iphone-icons-testen/"/>
    <updated>2010-09-10T16:50:08+02:00</updated>
    <id>http://brototyp.de/blog/iphone-icons-testen</id>
    <content type="html">&lt;p&gt;Beim erstellen von iPhone Icons muss man sich hin und wieder einfach
anschauen, wie es auf dem Gerät wirkt. Entweder man erstellt dafür extra
eine App und Installiert sie immer wieder auf dem Gerät, oder man geht
den (schnelleren) weg über das Web. Damit das ganze möglichst schnell
vonstatten geht habe ich ein kleines (PHP)Script geschrieben.&lt;!&#8211;more&#8211;&gt;
Installation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hochladen&lt;/li&gt;
&lt;li&gt;Ordner &amp;#8220;uploads&amp;#8221; parallel zum script erstellen&lt;/li&gt;
&lt;li&gt;fertig&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Benutzung:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Script mit dem Computer ansurfen und Icon hochladen&lt;/li&gt;
&lt;li&gt;Script mit dem iPhone ansurfen, Icon auswählen und &amp;#8220;zum
Home-Bildschirm&amp;#8221; hinzufügen&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;a href=&quot;http://github.com/brototyp/Icontester&quot;&gt;Icontester (auf github)&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Lecker Pilze sammeln</title>
    <link href="http://brototyp.de/blog/lecker-pilze-sammeln/"/>
    <updated>2010-09-04T21:56:38+02:00</updated>
    <id>http://brototyp.de/blog/lecker-pilze-sammeln</id>
    <content type="html">&lt;p&gt;&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/pilze.sammeln-300x200.jpg&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Langzeitwürmchen</title>
    <link href="http://brototyp.de/blog/langzeitwurmchen/"/>
    <updated>2010-09-04T12:11:58+02:00</updated>
    <id>http://brototyp.de/blog/langzeitwurmchen</id>
    <content type="html">&lt;p&gt;&lt;img class=&#8221; src=&#8217;http://brototyp.de/pictures/Dusk_in_Summer_by_Quit0071-300x200.jpg&#8217; width=&#8221; height=&#8221; alt=&#8221; title=&#8221;&gt;
&lt;a href=&quot;http://quit007.deviantart.com/gallery/#Fireflies&quot;&gt;Auf Deviant-Art gibt es eine schöne Reihe Fotos von langzeitbelichteten Glühwürmchen.&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Das wichtigste überhaupt</title>
    <link href="http://brototyp.de/blog/das-wichtigste-uberhaupt/"/>
    <updated>2010-09-04T11:38:07+02:00</updated>
    <id>http://brototyp.de/blog/das-wichtigste-uberhaupt</id>
    <content type="html">&lt;p&gt;Backups sind wichtig. Ich würde sogar so weit gehen und Sagen: Backups
sind das erste worüber man sich Gedanken machen sollte. Also: Ich habe
mir Gedanken gemacht. Wie kann ich meine Webseiten (und die meiner
Kunden) zuverlässig sichern?&lt;!&#8211;more&#8211;&gt; Da ich viel mit Wordpress arbeite gibt es
vor allem 2 Aspekte, die wichtig sind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;die Dateien&lt;/li&gt;
&lt;li&gt;die Datenbank&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Für das Backup der Dateien verwende ich Automator in Verbindung mit
Transmit. Ein kleines PHP-Script sorgt dafür, dass in dem Dateibackup
auch ein mysqldump liegt. Der komplette Automator-Backupworkflow ist
somit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ein Script wird gecalled, dass den mysqldump macht&lt;/li&gt;
&lt;li&gt;Transmit synct den Server mit der Platte&lt;/li&gt;
&lt;li&gt;der komplette Ordner auf der Platte wird gezipt und mit dem Datum
versehen&lt;/li&gt;
&lt;li&gt;das neue zip wird auf den lokalen Server kopiert&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Zusätzlich dazu wird alles inkrementell via TimeMachine gesichert.&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Little Big Berlin</title>
    <link href="http://brototyp.de/blog/little-big-berlin/"/>
    <updated>2010-08-25T01:05:35+02:00</updated>
    <id>http://brototyp.de/blog/little-big-berlin</id>
    <content type="html">&lt;iframe src=&quot;http://player.vimeo.com/video/14014317?color=ff9933&quot; width=&quot;400&quot; height=&quot;193&quot; frameborder=&quot;0&quot; webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;


&lt;p&gt;&lt;a href=&quot;http://vimeo.com/14014317&quot;&gt;Little Big Berlin&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/pilpop&quot;&gt;pilpop&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;

</content>
  </entry>
  
</feed>

