<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>initOS Blog</title>
	<atom:link href="http://blog.initos.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.initos.com</link>
	<description>Open Source im Unternehmenseinsatz</description>
	<lastBuildDate>Thu, 19 Apr 2012 12:21:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>TYPO3 eigene Extbase Erweiterung beschleunigen</title>
		<link>http://blog.initos.com/2012/04/19/typo3-eigene-extbase-erweiterung-beschleunigen/</link>
		<comments>http://blog.initos.com/2012/04/19/typo3-eigene-extbase-erweiterung-beschleunigen/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 12:21:01 +0000</pubDate>
		<dc:creator>Markus Schneider</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Extbase]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=575</guid>
		<description><![CDATA[In diesem Blogbeitrag sind wir ja auf die allgemeine Performanceoptimierung von TYPO3 schon eingegangen. Jetzt will ich mal noch ein paar Tipps geben, wie eine selbst entwickelte Extension beschleunigt werden kann, die auf Extbase aufbaut. Als Vorwort sollte noch angemerkt werden, dass der normale TYPO3-Cache ausreicht, wenn man nur Content hat, der für alle Besucher [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem <a href="http://blog.initos.com/2012/03/14/typo3-performanceoptimierung/">Blogbeitrag</a> sind wir ja auf die allgemeine Performanceoptimierung von TYPO3 schon eingegangen. Jetzt will ich mal noch ein paar Tipps geben, wie eine selbst entwickelte Extension beschleunigt werden kann, die auf Extbase aufbaut.</p>
<p>Als Vorwort sollte noch angemerkt werden, dass der normale TYPO3-Cache ausreicht, wenn man nur Content hat, der für alle Besucher gleich ist, also keine Daten an der Session oder an Rechten von FeUser hängen. Aber für aufwändigere Extensions muss man Action im Plug-In als &#8216;non-cacheable&#8217; eintragen, was dafür sorgt, dass diese Seiten wieder sehr langsam sind.</p>
<p>Falls noch nicht geschehen, kann man den Extbase Cache ab TYPO3 4.6 noch in den Memcache verlegen, dies tut man indem:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'extbase_reflection'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'backend'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'extbase_object'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'backend'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>in die localconf.php eingefügt wird.</p>
<p>Des Weiteren sollte man in seinen Models genau darauf achten, dass überall Lazy-Loading für die Relation aktiviert ist. Dies wird durch die Annotationen mit &#8220;@lazy&#8221; ergänzt. Dies sieht dann so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"> <span style="color: #009933; font-style: italic;">/**
  * Contact Informations
  * @lazy
  * @var Tx_Initos_Domain_Model_Contact
  */</span>
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$contact</span><span style="color: #339933;">;</span></pre></div></div>

<p>Eine weitere Analyse der PHP Ausführung zeigt, dass die Anteile vom Code in der Regel so aufgeteilt sind:</p>
<ul>
<li>40% Extbase Framework</li>
<li>20% eigene Extension</li>
<li>40% Fluid Template</li>
</ul>
<p>Dies zeigt, dass die falsche Verwendung von Extbase oder Fluid schnell auf die Performance durchschlagen. Da hilft es nur, geschickt Funktionalität im Controller abzufangen bzw. sich eigene ViewHelper zu definieren um komplexe Schachtelungen von  mit  und  zu unterbinden. Hier kommt man nicht um eine Code-Analyse herum.</p>
<p>Ein weiterer wichtiger Baustein ist, die eigene Extension um einen eigenen Cache zu erweitern. Hierfür gibt es schon eine <a href="http://wiki.typo3.org/Caching_framework#How_to_use_the_caching_framework_in_extensions" target="_blank">Anleitung im TYPO3 Wiki</a>.</p>
<p>Wenn Sie mit der Performance von TYPO3 nicht zufrieden sind, analysieren wir für Sie gerne das Problem und beheben es. Nehmen Sie einfach mit uns <a href="http://www.initos.com/kontakt" target="_blank">Kontakt</a> auf.</p>
<p><em>Anmerkung:</em><br />
Bei der Performance-Analyse zeigt sich, dass vor allem der Persistence Layer von Extbase sehr langsam ist. Aber wie wir schon erfahren haben, soll in der nächsten Version von Extbase noch mehr Performance rausgeholt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/04/19/typo3-eigene-extbase-erweiterung-beschleunigen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDFs in TYPO3 mit Fluid und FPDF erstellen</title>
		<link>http://blog.initos.com/2012/03/22/pdfs-in-typo3-mit-fluid-und-fpdf-erstellen/</link>
		<comments>http://blog.initos.com/2012/03/22/pdfs-in-typo3-mit-fluid-und-fpdf-erstellen/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:32:33 +0000</pubDate>
		<dc:creator>Markus Schneider</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Extbase]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[fpdf]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[ViewHelper]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=545</guid>
		<description><![CDATA[Bei einem aktuellen Kundenprojekt gab es den Feature-Wunsch, die bestehende Extbase/Fluid -Extension um einen PDF-Export der entsprechenden Daten zu erweitern. Ein Teammitglied ist auf die Idee gekommen FPDF zu verwenden, was es erlaubt, unter PHP schnell PDFs zu erstellen. Die ersten Versuche endeten dann aber darin, dass wir sehr große PHP-Dateien mit zu viel Code [...]]]></description>
			<content:encoded><![CDATA[<p>Bei einem aktuellen Kundenprojekt gab es den Feature-Wunsch, die bestehende Extbase/Fluid -Extension um einen PDF-Export der entsprechenden Daten zu erweitern. Ein Teammitglied ist auf die Idee gekommen <a href="http://www.fpdf.org/" target="_blank">FPDF</a> zu verwenden, was es erlaubt, unter PHP schnell PDFs zu erstellen. Die ersten Versuche endeten dann aber darin, dass wir sehr große PHP-Dateien mit zu viel Code hatten. Da haben wir uns gedacht, das muss irgendwie besser gehen und sind auf die Idee gekommen, Fluid zu verwenden und den Code in ViewHelper auszulagern.</p>
<p>Der HauptViewHelper sieht dann so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fpdf/fpdf.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Tx_Initos_ViewHelpers_FpfdViewHelper <span style="color: #000000; font-weight: bold;">extends</span> Tx_Fluid_Core_ViewHelper_AbstractViewHelper <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$pdf</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> FPDF<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">templateVariableContainer</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>add<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fpdf'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pdf</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">renderChildren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Output</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Report'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'I'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">templateVariableContainer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fpdf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Danach braucht man einen einfachen Helper, um Seiten anzulegen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Tx_Initos_ViewHelpers_P_PageViewHelper <span style="color: #000000; font-weight: bold;">extends</span> Tx_Fluid_Core_ViewHelper_AbstractViewHelper <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$fpdf</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">templateVariableContainer</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fpdf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$fpdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">AddPage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">renderChildren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Und einen ViewHelper, um den Text zu erzeugen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Tx_Initos_ViewHelpers_P_TextViewHelper <span style="color: #000000; font-weight: bold;">extends</span> cTx_Fluid_Core_ViewHelper_AbstractViewHelper <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * 
     * @param string $text
     * @param int $width
     * @param int $height
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$pdf</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">templateVariableContainer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'fpdf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SetFont</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Times'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'I'</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">SetTextColor</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Ln</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$pdf</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Cell</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #990000;">utf8_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span>c<span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'L'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">renderChildren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Danach kann man sich ein FluidTemplate bauen:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;f:section</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;main&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
    {namespace initos=Tx_Initos_ViewHelpers}
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;initos:fpdf<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;initos:p.page<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
            <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;initos:p.text</span> <span style="color: #000066;">text</span>=<span style="color: #ff0000;">&quot;Hallo World!&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;120&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;20&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/initos:p.page<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/initos:fpdf<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/f:section<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>So kann man die gewohnte Fluid-Syntax verwenden, um PDFs zu erstellen, erhält ein übersichtliches Template und vermeidet Code-Doppelungen. Auf zum Weiteren FPDF-ViewHelper bauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/03/22/pdfs-in-typo3-mit-fluid-und-fpdf-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TYPO3 Performanceoptimierung</title>
		<link>http://blog.initos.com/2012/03/14/typo3-performanceoptimierung/</link>
		<comments>http://blog.initos.com/2012/03/14/typo3-performanceoptimierung/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 17:13:49 +0000</pubDate>
		<dc:creator>Tobias Kalbitz</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=515</guid>
		<description><![CDATA[Ein neuer Kunde nutzt TYPO3 als CMS, hat aber einige Probleme mit der Geschwindigkeit. Er fragte uns, ob wir einen Blick auf das System werfen können. Die Maschine entpuppte sich als VMware Instanz mit zwei CPUs, 2 GB Speicher und einem Ubuntu 10.04 LTS. Einige Optimierungen waren bereits umgesetzt, wie beispielsweise die Nutzung von  mod_deflate in Apache. [...]]]></description>
			<content:encoded><![CDATA[<p>Ein neuer Kunde nutzt TYPO3 als CMS, hat aber einige Probleme mit der Geschwindigkeit. Er fragte uns, ob wir einen Blick auf das System werfen können. Die Maschine entpuppte sich als VMware Instanz mit zwei CPUs, 2 GB Speicher und einem Ubuntu 10.04 LTS. Einige Optimierungen waren bereits umgesetzt, wie beispielsweise die Nutzung von  mod_deflate in Apache.</p>
<p>Die initiale Optimierung bestand im Installieren eines PHP-Bytecode-Caches. Da die Ubuntu-LTS-Version kein aktuelles APC mitbringt, installierten wir über &#8220;pecl install apc&#8221; die neuste Version und aktivierten sie für die Apache Instanz. Die Größe des Caches erhöhten wir durch eintragen der Zeile &#8220;apc.shm_size=128M&#8221; in der Datei &#8220;/etc/php5/conf.d/apc.ini&#8221; auf 128MB und im selben Moment erhöhten wir auch die Anzahl des allokierbaren Shared Memories auf 256MB. Dies geschieht für das laufende System durch ausführen von &#8220;echo 268435456 > /proc/sys/kernel/shmmax&#8221;. Die Änderung wird durch einen Eintrag in die Datei /etc/sysctl.conf über einem Systemneustart persistent gemacht: &#8221;kernel.shmmax=268435456&#8243;.</p>
<p>Im nächsten Schritt behoben wir die  wichtigsten Google PageSpeed Meldungen.  Das größte gemeldete Problem waren die fehlenden Cacheheader für Bilder. Durch das Kommando &#8220;a2enmod expires&#8221; wird das Modul zum Setzen von Cacheheadern aktiviert und ein Eintrag von:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">ExpiresActive</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">ExpiresDefault</span> <span style="color: #7f007f;">&quot;access plus 1 month&quot;</span></pre></div></div>

<p>in der Datei &#8220;/etc/apache2/mods-enabled/expires.conf&#8221; sorgt dafür, dass alle statischen Inhalte für mindestens einen Monat ab dem Zugriff gecached werden. YSlow empfahl noch das deaktivieren des FileETag-Headers, was wir durch Eintrag &#8220;FileETag none&#8221; in der Datei &#8220;/etc/apache2/httpd.conf&#8221; auch taten.</p>
<p>Unser letzter Schritt bestand im Aktivieren des  installierten Memcached-Servers als Backendcache. Dies wird in der Datei &#8220;typo3conf/localconf.php&#8221; der TYPO3 Installation durchgeführt, durch Eintragen der Zeilen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//use memcached backend as cache</span>
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'useCachingFramework'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'1'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_pages'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'backend'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_pages'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'options'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
 <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_pagesection'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'backend'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_pagesection'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'options'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
 <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_hash'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'backend'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cache_hash'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'options'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
 <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$TYPO3_CONF_VARS</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SYS'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'caching'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cacheConfigurations'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dbal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'backend'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'t3lib_cache_backend_MemcachedBackend'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'servers'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost:11211'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Der Kunde war mit der erreichten Performance zufrieden und wir boten ihm noch weitere Optimierungen an:</p>
<ul>
<li>Optimierung des MySQL-Servers</li>
<li>Aufteilen der Bilder- und JS-Dateien auf unterschiedlicher Domains</li>
<li>Nutzung eines schnelleren Webservers wie nginx für statische Inhalte</li>
<li>Nutzung von Varnish als Reverse Proxy</li>
</ul>
<p>Diese Vorschläge will er eventuell in der Zukunft adaptieren.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/03/14/typo3-performanceoptimierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Mathematik von Microsoft</title>
		<link>http://blog.initos.com/2012/03/11/die-mathematik-von-microsoft/</link>
		<comments>http://blog.initos.com/2012/03/11/die-mathematik-von-microsoft/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 00:28:24 +0000</pubDate>
		<dc:creator>Frederik Kramer</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=497</guid>
		<description><![CDATA[Ich werde mal versuchen, ein Thema, das mich seit einige Monate beschäftigt, kurz mit Hilfe von Bildern auf den Punkt zu bringen. Ich halte Hyper-V, die Virtualisierungslösung von Microsoft für eine unausgereifte Technologie. Erstens erlaubt es Hyper-V als Einzige der prominenten Virtualisierungstechnologien (KVM, XEN, VMware) nicht, mehr Speicher an die Clients zuzuweisen, als dem Host [...]]]></description>
			<content:encoded><![CDATA[<p>Ich werde mal versuchen, ein Thema, das mich seit einige Monate beschäftigt, kurz mit Hilfe von Bildern auf den Punkt zu bringen. Ich halte <strong>Hyper-V</strong>, die Virtualisierungslösung von Microsoft für eine unausgereifte Technologie.</p>
<p>Erstens erlaubt es Hyper-V als Einzige der prominenten Virtualisierungstechnologien (<a title="Memory Overcommitment in KVM" href="http://www.linux-kvm.org/page/Memory" target="_blank">KVM</a>, <a title="Memory Overcommitment in XEN" href="http://blog.xen.org/index.php/2008/08/27/xen-33-feature-memory-overcommit/http://" target="_blank">XEN</a>, <a title="Memory Overcommitment in VMware" href="http://blogs.vmware.com/virtualreality/2008/03/memory-overcomm.html" target="_blank">VMware</a>) nicht, mehr Speicher an die Clients zuzuweisen, als dem Host insgesamt zur Verfügung steht (sogenanntes <a title="Memory Overcommitment" href="http://searchservervirtualization.techtarget.com/definition/memory-overcommit">Memory Overcommitment</a>). Zum anderen scheint selbst das Zuweisen real existierender Ressourcen lausig implementiert zu sein.</p>
<div id="attachment_502" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.initos.com/wp-content/uploads/2012/03/hyper-v1.png"><img class="size-medium wp-image-502 " title="Grundauslastung des Hyper-V Hosts" src="http://blog.initos.com/wp-content/uploads/2012/03/hyper-v1-300x224.png" alt="Grundauslastung des Hyper-V Hosts" width="300" height="224" /></a><p class="wp-caption-text">Grundauslastung des Hyper-V Hosts</p></div>
<p>&nbsp;</p>
<p>Will man auf einem mit 24 GB ausgestatteten Windows 2008 Small Business Server (Dell T-710) mit einer Quad Core CPU einer virtuellen Maschine mehr als etwa 10 GB Arbeitsspeicher zuweisen (ein genauer Grenzwert bei dem der Fehler auftritt ist nicht feststellbar. In unseren Versuchen zwischen 8 und ca. 10,5 GB) bekommt man folgende Fehlermeldung.</p>
<div id="attachment_501" class="wp-caption alignright" style="width: 310px"><a href="http://blog.initos.com/wp-content/uploads/2012/03/hyper-v_start.png"><img class=" wp-image-501  " title="Fehler beim Start des Hyper-V Clients" src="http://blog.initos.com/wp-content/uploads/2012/03/hyper-v_start-300x224.png" alt="Fehler beim Start des Hyper-V Clients" width="300" height="224" /></a><p class="wp-caption-text">Fehler beim Start des Hyper-V Clients</p></div>
<p>&nbsp;</p>
<p>Man schaue sich den Fehlernamen in Verbindung mit der Begründung dazu an. Wir wissen nicht was exakt da schief gelaufen ist, aber wir würden Microsoft davon abraten wollen, sich an der Neudefinition mathematischer Grundrechenarten zu beteiligen. Unseren Kunden würden wir vorerst ans Herz legen keine Microsoft Produkte wie Excel oder dergleichen mehr zu verwenden, denn es kann nicht ausgeschlossen werden, dass die offensichtlich fehlerhafte Berechnungsfunktion auch dort zum Einsatz kommt &#8216;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/03/11/die-mathematik-von-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warum Scrum halt auch nur eine Methode ist?</title>
		<link>http://blog.initos.com/2012/03/02/warum-scrum-halt-auch-nur-eine-methode-ist/</link>
		<comments>http://blog.initos.com/2012/03/02/warum-scrum-halt-auch-nur-eine-methode-ist/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 23:09:49 +0000</pubDate>
		<dc:creator>Frederik Kramer</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=451</guid>
		<description><![CDATA[Einleitung Wiederholt haben wir in der jüngeren Vergangenheit in Projekten mitgewirkt, in denen unter Verwendung der SCRUM Methodik Software entwickelt wird. Doch was sich erst mal wie eine gute Idee anhört, entpuppt sich vielerorts als ein mehr oder weniger große Farce. Aus nüchterner Perspektive betrachtet stellt SCRUM den Versuch dar, einige Probleme klassischer Softwareentwicklungmethoden zu lösen. Zum [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Einleitung</strong></p>
<p>Wiederholt haben wir in der jüngeren Vergangenheit in Projekten mitgewirkt, in denen unter Verwendung der SCRUM Methodik Software entwickelt wird. Doch was sich erst mal wie eine gute Idee anhört, entpuppt sich vielerorts als ein mehr oder weniger große Farce.</p>
<p>Aus nüchterner Perspektive betrachtet stellt SCRUM den Versuch dar, einige Probleme klassischer Softwareentwicklungmethoden zu lösen. Zum Beispiel wird das Schreiben umfangreicher Spezifikationen zu Gunsten kürzerer Entwicklungszyklen aufgegeben. Kürzere Entwicklungszyklen erzeugen eine besser Sichtbarkeit von Teilergebnissen. Nicht mehr das große Ganze in all seiner Komplexität steht bei SCRUM im Vordergrund, sondern die iterative Erbringung von Kundennutzen. Deshalb ist ein Kunden oder Zwischenkunde auch meistens Teil des SCRUM Teams.</p>
<p><strong>Beschreibung der Methode</strong></p>
<p>SCRUM-Entwicklungsteams haben typischerweise 7-10 Mitglieder von denen ein Teammitglied die Rolle des SCRUM Master und ein weiteres Mitglied die Rolle des Product Owner inne haben. Der SCRUM Master ist als &#8220;primus inter pares&#8221; zu verstehen. Er steht in keinem hierarchischen Weisungsverhältnis zum Rest des Teams, sondern hat eine Problemlöserfunktion innerhalb des Teams inne. Der Product Owner fungiert in der Role eines fiktiven (oder auch echten) Kunden. Daher wird die SCRUM Methode auch gerne dort genutzt, wo die Entwickler mit den End- oder Zwischenkunden zusammen Software entwickeln sollen und die Erbringung eines Kundennutzen im Vordergrund steht.</p>
<p>Die Entwicklungszyklen in SCRUM heißen Sprints. Sie sind typischerweise 3 Tage bis zu 4 Wochen lang und sind Iterationen an deren Ende eine stabile und funktionsfähige Version des zu entwickelnden Produkts steht. Idealerweise werden die Länge der Sprints und die Inhaber der Rollen zu Beginn eine Projekts festgelegt und während des Projekts nur bei vorliegen zwingender Gründe gewechselt. Ein solcher liegt jedoch NICHT vor, wenn die Sprintziele einmal oder widerholt nicht erreicht worden sind.</p>
<p>Weitere wichtige methodische Elemente von SCRUM sind eine Liste unbedingt umzusetzender Eigenschaften eine Produkts. Diese Liste nennt sich Work Backlog. Zu Beginn eines jeden Sprints gibt es das Sprint Planning. Dieses Meeting dient zunächst dazu die Tasks, die im nächsten Sprint umgesetzt werden sollen, vom Work Backlog auszuwählen und zu bewerten. Die Aufwandsbewertung erfolgt im ganzen SCRUM Team. Danach werden die Tasks vom Product Owner priorisiert. Anschließend werden alle Tasks, die in der insgesamt zur Verfügung stehenden Entwicklungsszeit entwickelt werden können auf die einzelnen Teammitglieder aufgeteilt.</p>
<p>Hierbei ist darauf zu achten, dass alle Teammitglieder eine etwa gleiche Auslastung während des Sprint haben. Jeden Tag findet ein kurzes Meeting im Team statt, an welchem der Product Owner jedoch nicht teilnimmt. Im Rahmen dieses Meetings hat jedes Teammitglied typischerweise 3 Fragen zu beantworten:</p>
<ol>
<li>Was habe ich gestern getan ?</li>
<li>Was werde ich heute tun ?</li>
<li>Welche Probleme sind aufgetreten / Was hat mich behindert ?</li>
</ol>
<p>Die Probleme sind im Anschluss an jedes &#8220;Daily Scrum&#8221; möglichst zeitnah vom SCRUM Master zu beseitigen bzw. abzustellen. Er ist daher gewissermaßen der Winston Wolf des SCRUM Teams und sorgt mit seiner Arbeit dafür, dass das Team möglichst reibungsarm arbeiten kann. Am Ende des Sprints findet das &#8220;Review Meeting&#8221; statt. In diesem Meeting nimmt der Product Owner wiederum teil und es werden die Arbeitsergebnisse des letzten Sprints besprochen. Typischerweise findet deshalb auch nach dem Review Meeting das &#8220;Sprint Planning&#8221; für den nächsten Iterationszyklus statt.</p>
<p>Eine der wichtigsten Regeln des Sprint ist, dass as Sprintziel nur dann erreicht ist, wenn ALLE geplanten Arbeitspakete im Rahmen des Sprint abgearbeitet wurden.<br />
Einen Teilerfolg gibt es also bei Anwendung der SCRUM Methode nicht. Dies impliziert, dass ebenfalls bereits zu Projektbeginn eine sehr klare Definition für die Frage, wann etwas wirklich erledigt ist, erfolgen muss. Ken Schwaber, einer der Erfinder von SCRUM nennt dies &#8220;The definition of done&#8221;. Wer unter den geneigten Lesern dieses Blogs sicht nicht vorstellen kann, dass das Wort &#8220;erledigt&#8221; verschiedentlich interpretierbar ist, dem seien die drei Youtube Videos vom Ken Schwaber selbst persönlich ans Herz gelegt.</p>
<p><iframe src="http://www.youtube.com/embed/VCzIFn8vt_c" frameborder="0" width="280" height="157"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/K4L31A3-xa8" frameborder="0" width="280" height="157"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/vwEZoBuOT9w" frameborder="0" width="280" height="157"></iframe></p>
<p><strong>Kritische Diskussion</strong></p>
<p>SCRUM ist eine sehr durchdachte Methode. Mich persönlich fasziniert immer wieder, wie häufig es amerikanischen Wissenschaftlern und Pratikern gelingt, komplexe Sachverhalte in überschaubare Methoden herunterzubrechen. Neben der SCRUM Methode ist zum Beispiel die Portfolioanalyse ein sehr effektive Methode, um komplizierte, multidimensionale Sachverhalte in einfache, nachvollziehbare Visualisierungen zu transformieren. SCRUM führt jedoch nicht ohne Einsatz zu guten oder besseren Ergebnissen als die klassischen Entwicklungsmethoden wie z.B. Wasserfall oder das V-Modell.</p>
<p>Eine akribische Beachtung der methodischen Grundsätze (Daily Scrum, Scrum Review Meeting), Einhaltung der Rollenzuordnungen (SCRUM Master, Product Owner) und eine klare a-priori Festlegung der &#8220;definition of done&#8221; sind wesentliche Grundsätze der Methode, die gelebt und verstanden werden müssen. Zwar setzt SCRUM Agilität durch kleine, überschaubare Teams, kürzere Entwicklungszyklen und Kundenpartizipation methodisch um, ob am Ende aber eine gutes und für das Team und den Kunden zufriedenstellendes Ergebnis steht, hängt wesentlich von der Einhaltung des Methodenfundaments ab. Jede Abweichung von der radikalen Vereinfachung des Entwicklungsprozesses nach SCRUM birgt die Gefahr am Ende mit schlechteren und vor allem teureren Ergebnissen konfrontiert zu werden, als sie klassische Methoden hervorgebracht hätten.</p>
<p>Auch wenn SCRUM das Lernen und Problemlösen im Team und damit das Gruppenziel in den Vordergrund stellt, ist es absolut notwendig ein SCRUM Team so zu besetzen, dass die Chance des Niveausausgleichs grudsätzlich gegeben ist bzw. das notwendige Spezialkenntnisse durch entsprechende Kompetenzträger abgedeckt werden. Teammitglieder die nachhaltig die Schätzwerte hinsichtlich des Zeitaufwandes für die Ihnen zugeteilten Aufgaben überreizen sind langfristig demotivierend und eine Belastung für den Rest des Teams sowie eine Gefahr für den Projekterfolg. SCRUM nur als Modewort zu verstehen und zu einer leeren Hülle verkommen zu lassen, weil die grundlegenden Regeln keine Beachtung mehr finden, ist jedenfalls keine gute Idee.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/03/02/warum-scrum-halt-auch-nur-eine-methode-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DLR veröffentlicht Open Source Library</title>
		<link>http://blog.initos.com/2012/02/29/dlr-veroffentlicht-open-source-library/</link>
		<comments>http://blog.initos.com/2012/02/29/dlr-veroffentlicht-open-source-library/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 13:15:35 +0000</pubDate>
		<dc:creator>Markus Schneider</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=431</guid>
		<description><![CDATA[Während die Welt über den Teich schaut wie die Nasa ein Portal veröffentlicht um ihre Open Source Aktivitäten zu bündeln und zu beschleunigen, stecken in Europa Bestrebungen, die öffentlich finanzierte Forschung und Softwareentwicklung als Open Source veröffentlichen noch in den Kinderschuhen. Dabei ist klar an sich sonnenklar, Software, die wir durch unsere Steuergelder bezahlt haben, [...]]]></description>
			<content:encoded><![CDATA[<p>Während die Welt über den Teich schaut wie die Nasa <a href="http://open.nasa.gov/" target="_blank">ein Portal veröffentlicht</a> um ihre Open Source Aktivitäten zu bündeln und zu beschleunigen, stecken in Europa Bestrebungen, die öffentlich finanzierte Forschung und Softwareentwicklung als Open Source veröffentlichen noch in den Kinderschuhen.</p>
<p>Dabei ist klar an sich sonnenklar, Software, die wir durch unsere Steuergelder bezahlt haben, sollten wir auch nutzen können. Auch sollten wir nicht für das selbe Problem nochmal die Entwicklung bezahlen, nur weil die Software von einer anderen Behörde oder öffentlichen Einrichtung genutzt wird. Open Source Software ist unseres Erachtens nicht nur der beste, sondern sogar der einzige Lösungsweg.</p>
<p>Wo wir mit der NASA schon bei der Luft- und Raumfahrt waren, können wir zeigen, das sich dort langsam aber sicher auch etwas bei uns bewegt. Sicherlich ist das nicht das erste Open Source Projekt, aber der Mitarbeiter Roland Winkler vom Institut für Flugführung beim DLR Deutsches Zentrum für Luft- und Raumfahrt e.V. hat seine DataMining Java Library unter einer BSD Lizenz auf <a href="https://github.com/Roland-Winkler/EDMOAL">Github veröffentlicht</a>.</p>
<p>Auch wenn das DLR selbst nicht zu unseren Kunden zählt, konnten wir im vorliegenden Fall Herrn Winkler -hoffentlich wertvolle- Tipps geben, wie man eine geeignete Open-Source-Lizenz auswählt und welche Rahmenbedingungen dabei zu beachten sind. Des weiteren  konnten wir ihn über die Möglichkeiten und Risiken einer umfassenden Open-Source-Strategie beraten. Wir teilen gerne unser Wissen über Open-Source-Strategien. Wenn Sie also wissen wollen, wie Sie ihr Softwareprodukt mit einer Open-Source Strategie erfolgreich machen, <a href="http://www.initos.com/kontakt">melden Sie sich</a> einfach bei uns.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/02/29/dlr-veroffentlicht-open-source-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TYPO3 &#8211; Fluid &#8211; Checkbox &#8211; ViewHelper</title>
		<link>http://blog.initos.com/2012/02/24/typo3-fluid-checkbox-viewhelper/</link>
		<comments>http://blog.initos.com/2012/02/24/typo3-fluid-checkbox-viewhelper/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 22:44:30 +0000</pubDate>
		<dc:creator>Markus Schneider</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Extbase]]></category>
		<category><![CDATA[Fluid]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[ViewHelper]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=402</guid>
		<description><![CDATA[Frage des Tages: &#8220;Wie kann man in einem TYPO3 Fluid Template die Inhalte sauber darstellen, die folgende Anforderungen erfüllen ?&#8221;. Im Extbase basierten Backend soll es Multiple Checkboxen geben, die auf ein Integer gemapped werden. In unserem Fall sind dies z.B. Organisationseinheiten. In der TCA von TYPO3 lässt sich das mit &#8216;type&#8217; = &#8216;check&#8217; umsetzen, [...]]]></description>
			<content:encoded><![CDATA[<p>Frage des Tages:</p>
<p>&#8220;Wie kann man in einem TYPO3 Fluid Template die Inhalte sauber darstellen, die folgende Anforderungen erfüllen ?&#8221;.</p>
<p>Im Extbase basierten Backend soll es Multiple Checkboxen geben, die auf ein Integer gemapped werden. In unserem Fall sind dies z.B. Organisationseinheiten.</p>
<p>In der TCA von TYPO3 lässt sich das mit &#8216;type&#8217; = &#8216;check&#8217; umsetzen, doch wie ließt man selbiges wieder aus, wenn die Anwendungslogik von TYPO3 meint, es in einer Binärdarstellung in der Datenbank halten zu müssen ?</p>
<p>Nach einem Tipp für die richtige PHP-Funktion, haben wir einen kleinen ViewHelper gebaut. Den Code wollen wir euch nicht vorenthalten.</p>
<p>Vielleicht kann ihn der eine oder andere in seinen Projekten auch gebrauchen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Tx_Initos_ViewHelpers_CheckViewHelper <span style="color: #000000; font-weight: bold;">extends</span> Tx_Fluid_Core_ViewHelper_AbstractViewHelper <span style="color: #009900;">&#123;</span>
        <span style="color: #009933; font-style: italic;">/**
         * ViewHelper to get state of check
         * @param int $int
         * @param int $pos
         */</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #000088;">$int</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pos</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$s</span> <span style="color: #339933;">=</span> <span style="color: #990000;">decbin</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$pos</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pos</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Im Fluid Template kann man dies dann mit der folgenden Inline-Syntax abfragen:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">{namespace initos = Tx_Initos_ViewHelpers}
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;f:if</span> <span style="color: #000066;">condition</span>=<span style="color: #ff0000;">&quot;{initos:check(int: '{person.position}', pos: '{type}')}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;f:then<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	Checkbox 1 gesetzt
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/f:then<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/f:if<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Die ViewHelper in Fluid sind das Schweizer Taschenmesser, um erfolgreich und effizient das passende Template für die Extbase Extention von TYPO3 zu bauen.</p>
<p>Wir werden deshalb gerne unser Wissen teilen und stehen für Fragen natürlich wie immer gerne zur Verfügung.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/02/24/typo3-fluid-checkbox-viewhelper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento meets Actindo ERP &#8212; Konnektorprobleme</title>
		<link>http://blog.initos.com/2012/02/09/magento-meets-actindo/</link>
		<comments>http://blog.initos.com/2012/02/09/magento-meets-actindo/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 15:39:26 +0000</pubDate>
		<dc:creator>Tobias Kalbitz</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[actindo]]></category>
		<category><![CDATA[konnektor]]></category>
		<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=390</guid>
		<description><![CDATA[Einer unser Kunden nutzt den kostenlosen Actindo ERP Konnektor und hatte in den letzten Tagen Probleme seine Produkte mit dem Magentoshop abzugleichen. Es klappte bis zu diesem Zeitpunkt problemlos. Nachdem die Artikelanzahl in den letzten paar Monaten auf mehrere Tausend gestiegen war, funktionierte der Abgleich plötzlich nicht mehr. Es stellte sich nach Auswertung eines Netzwerkdumps heraus, [...]]]></description>
			<content:encoded><![CDATA[<p>Einer unser Kunden nutzt den kostenlosen <a href="http://www.atlantismedia.de/magento/schnittstellen.html">Actindo ERP Konnektor</a> und hatte in den letzten Tagen Probleme seine Produkte mit dem Magentoshop abzugleichen. Es klappte bis zu diesem Zeitpunkt problemlos. Nachdem die Artikelanzahl in den letzten paar Monaten auf mehrere Tausend gestiegen war, funktionierte der Abgleich plötzlich nicht mehr.</p>
<p>Es stellte sich nach Auswertung eines Netzwerkdumps heraus, dass die Shopseite eine Anfrage über den XMLRPC-Server erhält, aber nie auf den Request antwortet. Als das Zeit- und Speicherlimit für PHP, die üblichen Verdächtigen in solchen Fällen, ausgeschlossen waren, sahen wir, dass der Konnektor suboptimale Anfragen an die Datenbank stellt und diese somit schwer arbeiten musste. Die angefragten 500 Artikel können so nicht rechtzeitig geliefert werden und die Gegenseite bricht den Versuch ab.</p>
<p>Da der Kunde eine schnelle Lösung benötigt, um die neusten Produkte zu synchronisieren, beschränkten wir den Abgleich auf 350 Artikel. Weiterhin unterbreiteten wir ihm den Vorschlag das Problem durch geschicktere Datenbankanfragen und Caching der Ergebnisse  komplett aus der Welt zu schaffen um die volle Funktionalität wiederherzustellen.</p>
<p>Falls Sie auch Unterstützung bei der Anbindung eines ERP-Systems an Magento  oder der Anpassung am Shop benötigen, nehmen Sie <a title="Kontakt aufnehmen" href="http://www.initos.com/kontakt" target="_blank">Kontakt</a> mit uns auf und wir helfen Ihnen gerne weiter.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/02/09/magento-meets-actindo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento Performanceoptimierung</title>
		<link>http://blog.initos.com/2012/02/07/magento-performanceoptimierung/</link>
		<comments>http://blog.initos.com/2012/02/07/magento-performanceoptimierung/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 11:36:56 +0000</pubDate>
		<dc:creator>Tobias Kalbitz</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=373</guid>
		<description><![CDATA[tl;dr: Seite laden: 16s -&#62; 4.5s , TTFB: 4.5s -&#62; 2.5s, Datenmenge: 1.1MB -&#62; 0.59MB, PageSpeed: 75% -&#62; 93% Einer unserer Kunden kam mit dem Wunsch auf uns zu, seinen Magentoshop zu beschleunigen. Es ist ein relativ neuer Shop, der noch am Anfang seiner Entwicklung steht. Das Hosting übernimmt ein vServer, für den der Kunde [...]]]></description>
			<content:encoded><![CDATA[<p><strong>tl;dr: Seite laden: 16s -&gt; 4.5s , TTFB: 4.5s -&gt; 2.5s, Datenmenge: 1.1MB -&gt; 0.59MB, PageSpeed: 75% -&gt; 93%</strong></p>
<p>Einer unserer Kunden kam mit dem Wunsch auf uns zu, seinen Magentoshop zu beschleunigen. Es ist ein relativ neuer Shop, der noch am Anfang seiner Entwicklung steht. Das Hosting übernimmt ein vServer, für den der Kunde auch root-Zugang hat. Unsere ersten Schritte bestanden in einer Ist-Analyse gefolgt von einer Soll-Definition. Der Kunde wählte dafür eine für Ihn repräsentative Seite aus.</p>
<p>Für die Untersuchung der Seite boten sich die Webseiten <a href="http://gtmetrix.com/">GTmetrix</a> und <a href="http://www.webpagetest.org/">WebPagetest</a> an. GTmetrix fasst die Ergebnisse von YSlow und Google PageSpeed zusammen und als Bonus speichert es alte Messungen zum Vergleich der verschiedenen Optimierungen. Die Seite WebPagetest überzeugt mit aussagekräftigen Wasserfall und Verbindungsdiagrammen.</p>
<p>Bei der Analyse zeigte sich, dass das Rendern der Seite mehr als 15 Sekunden benötigt und diese Seite mehr als 1.1 MB an initialen Daten benötigt. Als Ziel setzte der Kunde 6 Sekunden zum Rendern der Seite. Das sahen wir auch als realistisch an.</p>
<div id="attachment_379" class="wp-caption alignright" style="width: 280px"><a href="http://blog.initos.com/wp-content/uploads/2012/02/connection.png"><img class=" wp-image-379 " src="http://blog.initos.com/wp-content/uploads/2012/02/connection-300x194.png" alt="" width="270" height="175" /></a><p class="wp-caption-text">Beispiel eines Verbindungsdiagramms</p></div>
<p>Im Wasserfalldiagramm stellt sich die TTFB (Time To First Byte) als größter Posten dar und dort begannen wir auch mit unserer Arbeit. Nach eingehender Analyse der momentanen Systems zeigte sich auf PHP-Seite, dass der APC Bytecode Cache mit 12MB zu klein dimensioniert war und PHP per FCGI eingebunden ist.</p>
<p>Der kleine Cache sorgte für eine schnelle Verdrängung von Cacheeinträgen. Dies führt zu einer Hit / Miss Rate von 20 / 80. Da jeder FCGI Prozess seinen eigenen Bytecode Cache benötigt, wird bei der Nutzung von APC für den Magento Cache zusätzlicher Platz benötigt. Wir splitteten den Mangento Cache und Bytecode Cache in zwei verschiedene Systeme. Der APC-Cache ist mit 128MB bemessen und sorgt für das Cachen des Bytecodes. Der Magento Cache wird jetzt durch einen Memcached-Server mit 256MB übernommen. Durch diese Maßnahme kann der Kunde später durch neue Server horizontal skalieren und hat einen gemeinsamen Cache für alle Instanzen. Die TTFB war damit bei einem Drittel der ursprünglichen Zeit und die Hit- / Missrate für den APC- und Bytecode-Cache bei 99/1.</p>
<p>Die Begutachtung des Seiten-HTML-Codes förderte zu Tage, das Boxen mit aktuellen Angebote per iframe eingebunden wurden. Dies sorgte beim Laden der Seite für ein ständiges Neurendern und verzögerte den subjektiven Seitenaufbau. Die diversen iframes konsolidierten wir zu einem einzigen, der bereits von Magento an der richten Stelle im Template eingebunden wird.</p>
<p>Die Verbindungsanalyse von GTmetrix zeigte, das viele Bilder/CSS/JS Dateien sequenziell geladen werden müssen und nur eine begrenzte Anzahl von Verbindungen zum Server aufgebaut werden. Dies lösten wir durch Aktivieren von HTTP-Pipelining im Apacheserver und Aufteilung der js, media und skin Verzeichnisse auf verschiedene vHosts. Beispielhaft nachzulesen ist das in einem <a href="http://www.jcg.de/host-splitting-fur-magento/">Blogeintrag zum Thema Hostplitting</a>.</p>
<div id="attachment_380" class="wp-caption alignleft" style="width: 300px"><a href="http://blog.initos.com/wp-content/uploads/2012/02/waterfall1.png"><img class="size-medium wp-image-380 " src="http://blog.initos.com/wp-content/uploads/2012/02/waterfall1-290x300.png" alt="" width="290" height="300" /></a><p class="wp-caption-text">Beispiel eines Wasserfalldiagramms</p></div>
<p>Als letztes widmeten wir uns dem Thema Trafficreduzierung. Dazu ließen wir Magento alle CSS- und JS-Dateien jeweils in eine Datei zusammenfassen und diese mit einem CSS- und JS-Minifier weiter komprimieren, die Produktbilder von Magento auf die korrekte Größe skalieren.</p>
<p>Weiterhin verkleinerten wir die Bilder ohne Qualitätseinbußen durch das Tool in Googles Pagespeed.  Die GZip-Kompression aller textuellen Ressourcen und das Setzen eines Expires-Headers durch den Apache Server brachte noch einmal einen deutliche Geschwindigkeitssteigerung und Trafficreduzierung bei weiteren Zugriffen auf die Seite.</p>
<p>Desweiteren setzten wir alle einfach zu erreichenden Vorschläge von YSlow und Googles Pagerank um.</p>
<p>Das Ergebnis der Mühe ist ein Shop, der in 4.5 Sekunden lädt.  Der benötigte Traffic für die Seite sank dabei von 1.1MB auf 590KB. Das YSlow-Ranking wuchs von  67% auf 80% und das PageSpeed-Ranking von 75% auf 93%.</p>
<p>Wir legten dem Kunden dar, dass er die Ladezeit von 4.5s weiter reduzieren könnte, da dort 2.5s als TTFB enthalten sind. Dies könnte er durch geschicktes Caching mittels eines Reverse Proxy wie beispielsweise Varnish erreichen. Das Laden des statischen Contents könnte weiterhin auch durch einen leichtgewichtigeren Webserver wie lighttpd oder nginx noch beschleunigt werden. Der Kunde ist mit dem erreichten Zustand sehr zufrieden und priorisiert momentanen andere Projekte höher.</p>
<p>Falls auch Sie Hilfe bei der Beschleunigung ihres eCommerce Portals benötigen, stehen wir Ihnen gerne mit Rat und Tat  zur Seite. Fordern Sie uns ! Wir lieben Herausforderungen. Nehmen Sie einfach über das <a title="Kontakt aufnehmen" href="http://www.initos.com/kontakt" target="_blank">Kontaktformular</a> mit uns Kontakt auf und wir melden uns bei Ihnen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/02/07/magento-performanceoptimierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tortoise SVN on Linux ?</title>
		<link>http://blog.initos.com/2012/01/24/tortoise-svn-on-linux/</link>
		<comments>http://blog.initos.com/2012/01/24/tortoise-svn-on-linux/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 11:29:54 +0000</pubDate>
		<dc:creator>Frederik Kramer</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[RabbitVCS]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[TortoiseSVN]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.initos.com/?p=365</guid>
		<description><![CDATA[As a Software Developer or Project Manager one has to deal quite often with versioned documents (at least if he / she tries to keep minimum track of his / her work advancements). Without arguing on the individual advantages or disadvantages of SVN or GIT, most developers end up in using at least these two [...]]]></description>
			<content:encoded><![CDATA[<p>As a Software Developer or Project Manager one has to deal quite often with versioned documents (at least if he / she tries to keep minimum track of his / her work advancements). Without arguing on the individual advantages or disadvantages of SVN or GIT, most developers end up in using at least these two solutions (if not Mercurial and CVS as well). As a software engineering company that fully migrated to Ubuntu Linux Desktop we were searching for a tool similar to <a title="TortoiseSVN" href="http://tortoisesvn.tigris.org/" target="_blank">TortoiseSVN</a> on Windows, that allows easy sharing and updating of repositories using the favorite Desktop Explorer (in our case Nautilus on Gnome). While addressing these task regularly we recently discovered <a title="RabbitVCS" href="http://rabbitvcs.org/" target="_blank">RabbitVCS</a>. We installed the tool on two different machines, one running <strong>Ubuntu Lucid (LTS)</strong> the other running <strong>Ubuntu Oneiric</strong>. It works like a charm, providing all menu entries that you need to neatly deal with SVN or GIT.</p>
<p>The only thing you have to do is to add the following PPA to your Ubuntu installation and update the repository afterwards (Ubuntu Karmic and Later)</p>
<p><span id="more-365"></span></p>
<p><strong>sudo add-apt-repository ppa:rabbitvcs/ppa</strong><br />
<strong>sudo apt-get update</strong></p>
<p>followed by a</p>
<p><strong>sudo apt-get install «packages»</strong></p>
<p>Aavailable packages are:</p>
<p><strong>rabbitvcs-nautilus3</strong> for the Nautilus 3.x extension<br />
<strong>rabbitvcs-nautilus</strong> for the Nautilus 2.x extension<br />
<strong>rabbitvcs-thunar</strong> for the Thunar extensions<br />
<strong>rabbitvcs-gedit</strong> for the GEdit extension<br />
<strong>rabbitvcs-cli</strong> for the command line launchers</p>
<p>We tested the <strong>nautilus integration</strong> and the <strong>gedit extension</strong> on both versions of Ubuntu and all work like a charm !</p>
<p>Thanks a lot to the RabbitVCS community for having put that project on the track.</p>
<p>Additional extra suggested by <a title="WebUpd8" href="http://www.webupd8.org/2011/01/rabbitvcs-perfect-tortoisesvn.html" target="_blank">WebUpd8</a> is to re-add the icons to the nautilus menu</p>
<p>Prior to Oneiric you hav run</p>
<p><strong>gconf-editor</strong></p>
<p>on the console and check</p>
<p><em>&#8220;desktop&#8221;-&gt;&#8221;gnome&#8221;-&gt;&#8221;interface&#8221;-&gt;&#8221;menu_have_icons&#8221;</em></p>
<p>starting from Oneiric you have to use the new by just typing</p>
<p><strong>dconf-editor</strong></p>
<p>on the console to check</p>
<p><em>&#8220;org&#8221;-&gt;&#8221;gnome&#8221;-&gt;&#8221;desktop&#8221;-&gt;&#8221;interface&#8221;-&gt;&#8221;menu_have_icons&#8221;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.initos.com/2012/01/24/tortoise-svn-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.281 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-19 19:48:51 -->
<!-- Compression = gzip -->
