<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ducrot Websolutions</title>
	<atom:link href="http://ducrot.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ducrot.wordpress.com</link>
	<description>Über PHP, JavaScript, TYPO3, symfony, Magento und anderen Technikkram</description>
	<lastBuildDate>Fri, 09 Dec 2011 08:04:50 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ducrot.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Ducrot Websolutions</title>
		<link>http://ducrot.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ducrot.wordpress.com/osd.xml" title="Ducrot Websolutions" />
	<atom:link rel='hub' href='http://ducrot.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Textlängen und Umbrüche in verschiedenen Browsern</title>
		<link>http://ducrot.wordpress.com/2011/04/10/textlaengen-und-umbrueche-in-verschiedenen-browsern/</link>
		<comments>http://ducrot.wordpress.com/2011/04/10/textlaengen-und-umbrueche-in-verschiedenen-browsern/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 10:32:02 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Textlänge]]></category>
		<category><![CDATA[Umbruch]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=242</guid>
		<description><![CDATA[Das Problem ist so alt wie das Internet und jeder Webdesigner kennt es. Texte haben in verschiedenen Browsern unterschiedliche Längen und brechen bisweilen anders um. Selbst ein und dieselbe Browserversion zeigt deutliche Unterschiede auf unterschiedlichen Plattformen wie zum Beispiel Firefox Windows oder Mac. Dies hat sich auch mit den Browserversionen IE9 und Firefox 4 unter [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=242&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Das Problem ist so alt wie das Internet und jeder Webdesigner kennt es. Texte haben in verschiedenen Browsern unterschiedliche Längen und brechen bisweilen anders um. Selbst ein und dieselbe Browserversion zeigt deutliche Unterschiede auf unterschiedlichen Plattformen wie zum Beispiel Firefox Windows oder Mac. Dies hat sich auch mit den Browserversionen IE9 und Firefox 4 unter Windows noch einmal deutlich gezeigt, da diese Brower auf aktueller Hardware mit einem neuen Textrendering auf Basis des Grafikprozessors arbeiten und nicht mehr über die Rechner-CPU.</p>
<p><span id="more-242"></span>Dies führt auch bei meinen Kunden regelmäßig zu Verwirrungen. Speziell wenn der Kunde selber über ein CMS auf seiner Website Texte eingeben und ändern kann. Zwar wird auf Schulungen immer darauf hingewiesen, dass tunlichst keine manuellen Umbrüche im Absatz genutzt werden sollen, aber wenn das technische Verständnis zur Problematik fehlt, ist das auch schnell wieder vergessen. Der Anwender sieht zunächst mal nur das Ergebnis in seinem Browser und alles scheint in Ordnung.</p>
<p>Hier mal ein paar Screenshots eines einfachen Textes mit font-size: 12px in verschiedenen Browsern und Betriebssystemen (Quelle: <a title="Adobe Browserlab" href="https://browserlab.adobe.com/" target="_blank">Adobe Browserlab</a>).</p>
<h2>Übersicht (Achtung: 6.255 x 719 Pixel)</h2>
<p><a href="http://ducrot.files.wordpress.com/2011/04/alle-browser.gif"><img class="alignnone size-full wp-image-244" title="Alle Browser" src="http://ducrot.files.wordpress.com/2011/04/alle-browser.gif?w=450&#038;h=51" alt="" width="450" height="51" /></a></p>
<h2>Vergleich IE8 mit IE9</h2>
<p><a href="http://ducrot.files.wordpress.com/2011/04/ie8-ie9.gif"><img class="alignnone size-full wp-image-246" title="Vergleich IE8 mit IE9" src="http://ducrot.files.wordpress.com/2011/04/ie8-ie9.gif?w=450&#038;h=259" alt="" width="450" height="259" /></a></p>
<h2>Firefox 3.6 OSX &lt;-&gt; Windows</h2>
<p><a href="http://ducrot.files.wordpress.com/2011/04/firefox-mac-windows.gif"><img class="alignnone size-full wp-image-247" title="Firefox 3.6 OSX &lt;-&gt; Windows" src="http://ducrot.files.wordpress.com/2011/04/firefox-mac-windows.gif?w=450&#038;h=258" alt="" width="450" height="258" /></a></p>
<h2>Gründe für dieses Verhalten</h2>
<ul>
<li>Verschiedene Verfahren des Textrenderings.</li>
<li>Unterschiedliche Berücksichtigung von Font-Informationen wie Spacing, Kerning und Hinting.</li>
<li>Abweichende Interpretation von CSS-Anweisungen.</li>
<li>Bildschirmauflösung Windows = 96 dpi (dot per Inch = Punkte per Zoll) / Mac = 72 dpi.</li>
</ul>
<h2>Lösungen</h2>
<p>Zunächst mal muss jeder Screendesigner und Webdesginer lernen, dass der Browser kein abgeschlossenes Blatt Papier mit einer festen Größe ist. Eine normale Website hat in der Regel mehr oder weniger festgelegte Spaltenbreiten und ist in der Höhe flexibel. Der Webdesigner kann nur erahnen, wieviel Text eine bestimmte Textbox später in der Praxis haben wird. Hier werden die Kunden meist sehr Kreativ. Das Weblayout muss also für Textrahmen flexibel gestaltet sein.</p>
<h3>Bedingter Trennstrich</h3>
<p>Wie man an den Screenshots schön erkennen kann, machen manuelle Umbrüche auch keinen Sinn. Allerdings gibt es auch schon seit den Anfangstagen des WWW den bedingten Trennstrich &amp;shy; (= soft hyphen = bedingter Trennstrich). Damit kann man speziell bei sehr langen Wörtern dem Browser einen Vorschlag zur Trennung machen. Steht das Wort mitten im Fließtext passiert gar nichts, das Zeichen ist nicht sichtbar. Steht das Wort am Ende eines Textrahmens, erfolgt an der Sollbruchstelle durch den Browser ein Umbruch und ein Trennstrich wird eingefügt.</p>
<h3>CSS-Angaben im Stylesheet</h3>
<p>Auch bei der Angabe der Schriftgröße im Stylesheet kann man schon einiges falsch machen. Zu diesem Thema könnte man ganze Bücher füllen. Hier ein Verweis zur Einführung: <a href="http://www.typeforum.de/modules.php?op=modload&amp;name=News&amp;file=article&amp;sid=32&amp;mode=thread&amp;order=0" target="_blank">Das Windows/Mac font-size-Problem</a>. In der Praxis benutze ich für kleine Webprojekte meistens die schnelle Variante der Angabe in Pixeln. Der oft angemerkte Nachteil bei der Skalierung durch den Anwender ist nicht mehr gültig, da alle modernen Browser auch Pixel-Angaben richtig skalieren können. Bei größeren Projekten Arbeite ich gerne mit prozentualen Größenangaben. Hierzu werden vorher per CSS alle Angaben auf einen einheitlichen Wert von 13px gebracht. Dann kann man zum Beispiel über font-size: 116% eine Schriftgröße von 15px erzielen. Weitere Infos dazu gibt es zum Beispiel bei <a title="YUI 2: Fonts CSS" href="http://developer.yahoo.com/yui/fonts/" target="_blank">YUI 2: Fonts CSS</a>.</p>
<h3>Textersetzung durch Grafiken/Flash</h3>
<p>Und wenn man sich dann doch mal auf eine 100% korrekte Darstellung eines Textrahmens verlassen muss? Auch dazu gibt es einige Möglichkeiten. Letztlich wird der Text dann als Grafik oder Flash in die Website eingebaut. Hierbei sollte man aber darauf achten, dass der dargestellte Text weiterhin als solcher im Quelltext der Website steht, damit Google &amp; Co. glücklich sind. Die Technik dazu nennt sich Image-Replacement und eine Übersicht der gängigen Umsetzungen findet man zum Beispiel bei <a title="Übersicht: Image-Replacement-Techniken" href="http://meiert.com/de/publications/articles/20050513/" target="_blank">Jens Meiert</a> oder auch bei <a title="Nine Techniques for CSS Image Replacement" href="http://css-tricks.com/css-image-replacement/" target="_blank">css-tricks.com</a>. Das sollte aber eine absolute Ausnahme sein, wenn es wirklich nicht mehr anders geht.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/242/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/242/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/242/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=242&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2011/04/10/textlaengen-und-umbrueche-in-verschiedenen-browsern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2011/04/alle-browser.gif" medium="image">
			<media:title type="html">Alle Browser</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2011/04/ie8-ie9.gif" medium="image">
			<media:title type="html">Vergleich IE8 mit IE9</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2011/04/firefox-mac-windows.gif" medium="image">
			<media:title type="html">Firefox 3.6 OSX &#60;-&#62; Windows</media:title>
		</media:content>
	</item>
		<item>
		<title>Magento Performance-Tuning</title>
		<link>http://ducrot.wordpress.com/2011/03/30/magento-performance-tuning/</link>
		<comments>http://ducrot.wordpress.com/2011/03/30/magento-performance-tuning/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 11:31:46 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Rootserver]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=235</guid>
		<description><![CDATA[Eine Übersicht und Checkliste zu allen praxisrelevanten Maßnahmen zur Beschleunigung des Shopsystems: APC, Memcached, MySQL, Apache, Dateisystem und Magento. Übersicht / Checkliste PHP APC (Bytecode-Cache) oder Memcached (Memory Object Caching) MySQL Query Caching aktivieren Per tuning-primer.sh Shellscript prüfen und optimieren Apache MPM-Prefork Tuning KeepAlive aktivieren, HostNameLookups deaktivieren mod_deflate mod_expires .htaccess Einträge in vhost Konfiguration Dateisystem (Linux) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=235&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Eine Übersicht und Checkliste zu allen praxisrelevanten Maßnahmen zur Beschleunigung des Shopsystems: APC, Memcached, MySQL, Apache, Dateisystem und Magento.</p>
<h2><span id="more-235"></span>Übersicht / Checkliste</h2>
<ul>
<li><strong>PHP</strong>
<ul>
<li>APC (Bytecode-Cache) oder Memcached (Memory Object Caching)</li>
</ul>
</li>
<li><strong>MySQL</strong>
<ul>
<li>Query Caching aktivieren</li>
<li>Per tuning-primer.sh Shellscript prüfen und optimieren</li>
</ul>
</li>
<li><strong>Apache</strong>
<ul>
<li>MPM-Prefork Tuning</li>
<li>KeepAlive aktivieren, HostNameLookups deaktivieren</li>
<li>mod_deflate</li>
<li>mod_expires</li>
<li>.htaccess Einträge in vhost Konfiguration</li>
</ul>
</li>
<li><strong>Dateisystem</strong> (Linux)
<ul>
<li>tmpfs (Ramdisk)</li>
</ul>
</li>
<li><strong>Magento</strong>
<ul>
<li>Sessions in der Datenbank speichern</li>
<li>Zusammenfassung der Javascript und CSS-Dateien durch die Extension Fooman Speedster</li>
<li>Image Sprites verwenden</li>
<li>Magento Cache aktivieren</li>
<li>Content Delivery Network für statische Dateien und Produktbilder</li>
</ul>
</li>
</ul>
<h2>Benchmarking</h2>
<p>Sowohl die Ausgangsbasis einer Magento-Installation, als auch jede technische Veränderung am System sollte per Benchmark geprüft und protokoliert werden. Dies kann zum Beispiel auf dem Server direkt über das <a title="ab - Apache HTTP server benchmarking tool" href="http://httpd.apache.org/docs/2.0/programs/ab.html" target="_blank">Apache HTTP server benchmarking tool</a> gemacht werden. Wenn das Gesamtpaket des Webservers optimiert wurde, sollten noch die Ladezeiten im Browser über <a title="Yahoo! YSlow" href="http://developer.yahoo.com/yslow/" target="_blank">Yahoo! YSlow for Firebug</a> geprüft werden.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/235/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=235&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2011/03/30/magento-performance-tuning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>
	</item>
		<item>
		<title>Magento in der Cloud mit Amazon AWS</title>
		<link>http://ducrot.wordpress.com/2010/11/13/magento-in-der-cloud-mit-amazon-aws/</link>
		<comments>http://ducrot.wordpress.com/2010/11/13/magento-in-der-cloud-mit-amazon-aws/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 11:24:25 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Rootserver]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=197</guid>
		<description><![CDATA[Seit dem 1. November 2010 bietet Amazon für Neukunden bei seinem Dienst AWS (Amazon Web Services) einige Cloud-Dienste ein Jahr lang kostenlos an. Grund genug mal zu probieren, wie sich Magento 1.4 innerhalb eines SuSE Enterprise Servers denn so in einer Cloud verhält. Zunächst die notwendigen Schritte um ein neue Maschine innerhalb von Amazon AWS zu [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=197&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Seit dem 1. November 2010 bietet Amazon für Neukunden bei seinem Dienst AWS (Amazon Web Services) einige Cloud-Dienste <a title="Amazon AWS" href="http://aws.amazon.com/free/" target="_blank">ein Jahr lang kostenlos an</a>. Grund genug mal zu probieren, wie sich Magento 1.4 innerhalb eines SuSE Enterprise Servers denn so in einer Cloud verhält.<span id="more-197"></span></p>
<p>Zunächst die notwendigen Schritte um ein neue Maschine innerhalb von Amazon AWS zu installieren.</p>
<ol>
<li>AWS-Account anlegen: <a href="http://www.amazon.com/gp/aws/registration/registration-form.html" target="_blank">http://www.amazon.com/gp/aws/registration/registration-form.html</a></li>
<li>Unter <em>Security Credentials </em>einen <em>Access Key</em> anlegen und aktivieren: <a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key" target="_blank">http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key</a></li>
<li>Ebenfalls im Bereich <em>Security Credentials</em> ein X.509 Zertifikat erstellen und den privaten Schlüssel (pk-.pem) und das Zertifikat (cert-.pem) herunterladen. Unter Linux oder Mac speichert man die Zertifikate im Benutzer-Verzeichnis ~/.ssh. Unter Windows benutzt man am besten Putty und bindet dort die Zertifikate  ein.</li>
<li>Bei der <em>AWS Management Console</em> anmelden: <a href="https://console.aws.amazon.com/" target="_blank">https://console.aws.amazon.com/</a></li>
<li>Zum Bereich <a href="https://console.aws.amazon.com/ec2/home#s=Home" target="_blank">Amazon EC2</a> wechseln.<br />
<a href="http://ducrot.files.wordpress.com/2010/11/01-amazon-ec2.png"></a><a href="http://ducrot.files.wordpress.com/2010/11/01-amazon-ec21.png"><img class="alignnone size-medium wp-image-203" title="Amazon EC2" src="http://ducrot.files.wordpress.com/2010/11/01-amazon-ec21.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></li>
<li>Eine neue <em>Amazon EC2 instance</em> anlegen: Region auf &#8222;EU West&#8220; umstellen und auf <em>Launch Instance</em> klicken. Danach kann man eine <em>Amazon Machine Image</em> (AMI) auswählen, also das Betriebssystem des virtuellen Servers. Um den Sever kostenlos nutzen zu können muss man darauf achten, das bei <em>Instance Type</em> &#8222;Micro&#8220; eingestellt wird. Die von Amazon vorkonfigurierte Maschine &#8222;Ubuntu 10.04 LTS&#8220; geht zum Beispiel nicht. Ich entscheide mich aus der Quick Start Liste für &#8222;SUSE Linux Enterprise Server 11 64-bit&#8220; (AMI Id: ami-6e57621a), um ein LAMP mit Apache 2.2, MySQL 5.0 und PHP 5.3 zu erstellen. <span style="color:#ff0000;"><strong>Achtung:</strong></span> Bei dieser Instanz fallen Kosten an und zwar $0,035 pro Stunde. AWS macht einen Unterschied zwischen Linux/UNIX und SUSE Linux Instanzen. Das ist mir leider auch erst bei der ersten Rechnung aufgefallen. Wer hier also wirklich nichts zahlen will, wählt lieber eine der Basic-Instanzen.<br />
<a href="http://ducrot.files.wordpress.com/2010/11/02-ami.png"><img class="alignnone size-medium wp-image-204" title="Amazon Machine Image (AMI)" src="http://ducrot.files.wordpress.com/2010/11/02-ami.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></li>
<li>Die folgenden Einstellungsdialoge als Screenshot:<br />
<a href="http://ducrot.files.wordpress.com/2010/11/03-instance-details-1.png"><img class="alignnone size-medium wp-image-205" title="Einstellungen 1" src="http://ducrot.files.wordpress.com/2010/11/03-instance-details-1.png?w=300&#038;h=218" alt="" width="300" height="218" /></a><a href="http://ducrot.files.wordpress.com/2010/11/04-instance-details-2.png"><img class="alignnone size-medium wp-image-206" title="Einstellungen 2" src="http://ducrot.files.wordpress.com/2010/11/04-instance-details-2.png?w=300&#038;h=218" alt="" width="300" height="218" /></a><a href="http://ducrot.files.wordpress.com/2010/11/04-instance-details-2.png"> </a><a href="http://ducrot.files.wordpress.com/2010/11/05-instance-details-3.png"><img class="alignnone size-medium wp-image-207" title="Einstellungen 3" src="http://ducrot.files.wordpress.com/2010/11/05-instance-details-3.png?w=300&#038;h=218" alt="" width="300" height="218" /></a><a href="http://ducrot.files.wordpress.com/2010/11/06-key-pair.png"><img class="alignnone size-medium wp-image-208" title="Key Pair" src="http://ducrot.files.wordpress.com/2010/11/06-key-pair.png?w=300&#038;h=218" alt="" width="300" height="218" /></a>&nbsp;</p>
<p><a href="http://ducrot.files.wordpress.com/2010/11/07-firewall.png"><img class="alignnone size-medium wp-image-210" title="Firewall" src="http://ducrot.files.wordpress.com/2010/11/07-firewall.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></p>
<p><a href="http://ducrot.files.wordpress.com/2010/11/08-review1.png"><img class="alignnone size-medium wp-image-211" title="Übersicht" src="http://ducrot.files.wordpress.com/2010/11/08-review1.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></p>
<p><a href="http://ducrot.files.wordpress.com/2010/11/09-amazon-ec2.png"><img class="alignnone size-medium wp-image-212" title="Amazon EC2 Dashboard" src="http://ducrot.files.wordpress.com/2010/11/09-amazon-ec2.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></li>
<li>Im Bereich <em>Security Group</em> müssen nun noch Freigaben für die Ports 22 und 80 erstellt werden.<br />
<a href="http://ducrot.files.wordpress.com/2010/11/10-portfeigaben.png"><img class="alignnone size-medium wp-image-213" title="Portfreigaben" src="http://ducrot.files.wordpress.com/2010/11/10-portfeigaben.png?w=300&#038;h=218" alt="" width="300" height="218" /></a></li>
</ol>
<p>Die virtuelle Maschine ist nun konfiguriert und man kann man sich bereits mit dem Server über die <em>Public DNS</em> per SSH verbinden. Hierzu benötigt man die Schlüsseldatei aus Schritt 7:</p>
<blockquote><p>ssh -i pfad-zum-pk/ec2-keypair root@ec2-xx-xxx-xx-xx.eu-west-1.compute.amazonaws.com</p></blockquote>
<p>Nun geht es an die SuSE-Konfiguration. Obwohl die Beschreibung der AMI etwas anderes behauptet hat, muss man zunächst alle notwendigen LAMP-Komponenten installieren (<a href="http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53482&amp;tstart=0" target="_blank">http://developer.amazonwebservices.com/connect/thread.jspa?threadID=53482&amp;tstart=0</a>).</p>
<blockquote><p>zypper in apache2-mod_php5 mysql<br />
chkconfig apache2 on<br />
chkconfig mysql on<br />
service mysql start<br />
service apache2 start</p></blockquote>
<p>Damit Apache .htaccess Dateien verwendet, muss in der Datei /etc/apache2/default-server.conf der Bereich &#8222;Directory&#8220; der Wert von AllowOverride auf All angepasst werden:</p>
<blockquote><p><code>&lt;Directory "/srv/www/htdocs"&gt;<br />
# Possible values for the Options directive are "None", "All",<br />
# or any combination of:<br />
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews<br />
#<br />
# Note that "MultiViews" must be named *explicitly* --- "Options All"<br />
# doesn't give it to you.<br />
#<br />
# The Options directive is both complicated and important.  Please see<br />
# http://httpd.apache.org/docs-2.2/mod/core.html#options<br />
# for more information.<br />
Options None<br />
# AllowOverride controls what directives may be placed in .htaccess files.<br />
# It can be "All", "None", or any combination of the keywords:<br />
#   Options FileInfo AuthConfig Limit<br />
AllowOverride All<br />
# Controls who can get stuff from this server.<br />
Order allow,deny<br />
Allow from all<br />
&lt;/Directory&gt;</code></p></blockquote>
<p>Für Magento müssen noch fehlende Pakete installiert und mod_rewrite aktiviert werden:</p>
<blockquote><p><code>zypper in php5-mysql<br />
zypper in php5-mcrypt<br />
zypper in php5-curl<br />
zypper in php5-gd<br />
a2enmod rewrite<br />
rcapache2 restart</code></p></blockquote>
<p>Der Webserver ist nun tatsächlich einsatzbereit. Magento wird im Standardverzeichnis /srv/www/htdocs/ installiert. Also Los:</p>
<blockquote><p><code>cd /srv/www/htdocs/<br />
wget http://www.magentocommerce.com/downloads/assets/1.4.1.1/magento-1.4.1.1.tar.gz<br />
wget http://www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz<br />
tar -zxf magento-1.4.1.1.tar.gz<br />
tar -zxf magento-sample-data-1.2.0.tar.gz<br />
mv magento-sample-data-1.2.0/media/* magento/media/<br />
mv magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql magento/data.sql<br />
mv magento/* magento/.htaccess .<br />
chmod -R o+w media<br />
mysqladmin -u root create magento<br />
mysql -u root magento &lt; data.sql<br />
./pear mage-setup .<br />
./pear install magento-core/Mage_All_Latest-stable<br />
chmod o+w var var/.htaccess app/etc<br />
rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*<br />
rm -rf magento/ magento-sample-data-1.2.0/<br />
rm -rf magento-1.4.1.1.tar.gz magento-sample-data-1.2.0.tar.gz data.sql</code></p></blockquote>
<p>Die weitere Installation von Magento erfolgt dann über den normalen Webinstaller. Der erste Eindruck ist für den gewählten Servertyp (Micro) mit 613 MB RAM und 1 CPU Core und ohne Server-Tuning erstaunlich gut. Der Benchmarktest mit ab2 liefert 1,64 Requests pro Sekunde. Kein Weltrekord aber als Ausgangsbasis schon mal nicht schlecht.</p>
<blockquote><p>ab2 -c 2 -n20 http://46.51.176.105/coalesce-functioning-on-impatience-t-shirt.html: 1.64 Requests per second</p></blockquote>
<p>Ein weiterer Test mit einem anderen Instanzen-Typ (Large) ergibt 2.76 Requests per second. Mit 7,5 GB Arbeitsspeicher und 4 EC2-Recheneinheiten gibt es nun genügend Reserven, um mit den üblichen Performance-Tunings Magento weiterzubringen. Nach der Installation von APC ergibt der Benchmark 4.93 Requests per second. Wieder zurück zu Micro und mit APC leistet der Server 2.91 Requests per second.</p>
<p>Fazit: Die Installation eines virtuellen Servers in der Amazon Cloud verläuft einfach. Natürlich muss man sich mit den Begriffen und Techniken erst mal beschäftigen und nach einem Tag hat man sicher noch nicht alle Möglichkeiten ergründet. Die eigentliche Konfiguration des LAMPs und der Installation der Anwendungen (hier Magento) unterscheidet sich in keinster Weise von dem vorgehen auf einem Root- oder Managed-Server.</p>
<p>Mit der Performance bin ich noch nicht ganz zufrieden, aber für weitere Optimierung bietet die Cloud noch viele Schrauben zum Drehen. Die Hardware-Frage muss nun nicht mehr zu Beginn eines Projektes beantwortet werden, sondern kann innerhalb von Minuten dem aktuellen Bedarf angepasst werden.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=197&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2010/11/13/magento-in-der-cloud-mit-amazon-aws/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/01-amazon-ec21.png?w=300" medium="image">
			<media:title type="html">Amazon EC2</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/02-ami.png?w=300" medium="image">
			<media:title type="html">Amazon Machine Image (AMI)</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/03-instance-details-1.png?w=300" medium="image">
			<media:title type="html">Einstellungen 1</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/04-instance-details-2.png?w=300" medium="image">
			<media:title type="html">Einstellungen 2</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/05-instance-details-3.png?w=300" medium="image">
			<media:title type="html">Einstellungen 3</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/06-key-pair.png?w=300" medium="image">
			<media:title type="html">Key Pair</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/07-firewall.png?w=300" medium="image">
			<media:title type="html">Firewall</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/08-review1.png?w=300" medium="image">
			<media:title type="html">Übersicht</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/09-amazon-ec2.png?w=300" medium="image">
			<media:title type="html">Amazon EC2 Dashboard</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/11/10-portfeigaben.png?w=300" medium="image">
			<media:title type="html">Portfreigaben</media:title>
		</media:content>
	</item>
		<item>
		<title>Magento Schnipsel: Anzahl der Artikel und Gesamtsumme des Warenkorbs</title>
		<link>http://ducrot.wordpress.com/2010/09/04/magento-schnipsel-anzahl-der-artikel-und-gesamtsumme-des-warenkorbs/</link>
		<comments>http://ducrot.wordpress.com/2010/09/04/magento-schnipsel-anzahl-der-artikel-und-gesamtsumme-des-warenkorbs/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 14:48:33 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=183</guid>
		<description><![CDATA[Artikelanzahl: &#60;?php echo Mage::helper('checkout/cart')-&#62;getItemsQty() ?&#62; &#60;?php echo Mage::helper('checkout/cart')-&#62;getItemsCount() ?&#62; Formatierte Gesamtsumme: &#60;?php echo $this-&#62;helper('checkout')-&#62;formatPrice(Mage::getSingleton('checkout/cart')-&#62;getQuote()-&#62;getGrandTotal()) ?&#62; Beispiel: &#60;?php printf('Ihr Warenkorb: %d Artikel zu %s', Mage::helper('checkout/cart')-&#62;getItemsQty(), $this-&#62;helper('checkout')-&#62;formatPrice(Mage::getSingleton('checkout/cart')-&#62;getQuote()-&#62;getGrandTotal())) ?&#62;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=183&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Artikelanzahl:</p>
<blockquote><p><code>&lt;?php echo Mage::helper('checkout/cart')-&gt;getItemsQty() ?&gt;<br />
&lt;?php echo Mage::helper('checkout/cart')-&gt;getItemsCount() ?&gt;</code></p></blockquote>
<p>Formatierte Gesamtsumme:</p>
<blockquote><p><code>&lt;?php echo $this-&gt;helper('checkout')-&gt;formatPrice(Mage::getSingleton('checkout/cart')-&gt;getQuote()-&gt;getGrandTotal()) ?&gt;</code></p></blockquote>
<p>Beispiel:</p>
<blockquote><p><code>&lt;?php printf('Ihr Warenkorb: %d Artikel zu %s', Mage::helper('checkout/cart')-&gt;getItemsQty(), $this-&gt;helper('checkout')-&gt;formatPrice(Mage::getSingleton('checkout/cart')-&gt;getQuote()-&gt;getGrandTotal())) ?&gt;</code></p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/183/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/183/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/183/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=183&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2010/09/04/magento-schnipsel-anzahl-der-artikel-und-gesamtsumme-des-warenkorbs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>
	</item>
		<item>
		<title>UTF-8 Umstellung oder Reparatur eines vorhandenen TYPO3-Systems</title>
		<link>http://ducrot.wordpress.com/2010/06/04/utf-8-umstellung-oder-reparatur-eines-vorhandenen-typo3-systems/</link>
		<comments>http://ducrot.wordpress.com/2010/06/04/utf-8-umstellung-oder-reparatur-eines-vorhandenen-typo3-systems/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 08:41:51 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Typo3]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[zeichenkodierung]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=162</guid>
		<description><![CDATA[Das Ziel soll sein, ein System bestehend aus Datenbank, Datenbank-Verbidung und TYPO3 mit durchgängiger UTF-8-Kodierung zu bekommen. Der erste Teil hat das Vorgehen bei einer neuen TYPO3-Installation beschrieben. In der Praxis kommt es aber auch oft vor, dass man ein vorhandenes System vorfindet, bei dem keine durchgängige UTF-8 Kodierung besteht. Meist ist zwar TYPO3 mit forceCharset und die [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=162&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Das Ziel soll sein, ein System bestehend aus Datenbank, Datenbank-Verbidung und TYPO3 mit durchgängiger UTF-8-Kodierung zu bekommen.</p>
<p><span id="more-162"></span></p>
<p>Der <a title="UTF-8-Umgebung für TYPO3-Projekte einrichten" href="http://ducrot.wordpress.com/2010/05/30/utf-8-umgebung-fur-typo3-projekte-einrichten/">erste Teil</a> hat das Vorgehen bei einer neuen TYPO3-Installation beschrieben. In der Praxis kommt es aber auch oft vor, dass man ein vorhandenes System vorfindet, bei dem keine durchgängige UTF-8 Kodierung besteht. Meist ist zwar TYPO3 mit forceCharset und die MySQL-Datenbank korrekt mit UTF-8 Zeichensatz konfiguriert, die Datenbank-Verbindung zwischen TYPO3 und der Datenbank wird aber manchmal vergessen. In der der Standardeinstellung und somit auch bei den meisten Hostern, erfolgt die Verbindung zwischen PHP und der MySQL-Datenbank über latin1. Im Ergebnis landen dann doppelt UTF-8-kodierte Daten in der Datenbank.</p>
<p>Im Betrieb fällt es nicht auf, da alle Sonderzeichen wie z.B. Umlaute korrekt dargestellt werden. Erst bei einem Umzug der Datenbank oder wenn man die Daten außerhalb von TYPO3 verwenden möchte stellt man fest, das etwas nicht stimmt.</p>
<p>Die Problematik und weitere Szenarien werden ausgiebig im <a title="TYPO3 Kochbuch" href="http://www.oreilly.de/catalog/typo3ckbkger/" target="_blank">TYPO3 Kochbuch</a> in Kapitel 2.10 &#8220;Den Zeichensatz einer bestehenden TYPO3- Installation prüfen und auf UTF-8 umstellen&#8220; behandelt. Die wichtigsten Schritte gibt es hier. Zunächst müssen Informationen über das bestehende System gesammelt werden.</p>
<h3>1. Zeichensatz der Datenbank</h3>
<blockquote><p><code>SELECT distinct(character_set_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'datenbank_name' AND NOT character_set_name IS NULL</code></p></blockquote>
<h3>2. Zeichensatzhandhabung der MySQL-Verbindung</h3>
<p>Wurde $TYPO3_CONF_VARS['SYS']['setDBinit'] = &#8216;SET NAMES utf8&#8242;; in localconf.php gesetzt? Dann erfolgt die Kommunikation der TYPO3-DB-API mit dem MySQL Server über UTF-8. Ansonsten erfolgt die Verbindung im MySQL-Modul von PHP standardmäßig über latin1. Im Zweifel müssen die Variablen <em>character_set_client</em>, <em>character_set_connection</em> und <em>character_set_result</em> über eine TYPO3-DB-API Abfrage geprüft werden (SHOW VARIABLES LIKE &#8216;character_set_%&#8217;).</p>
<h3>3. Zeichensatzkonfiguration von TYPO3</h3>
<p>Wert von <em>forceCharset</em> prüfen. Wenn dieser nicht gesetzt ist, benutzt TYPO3 standardmäßig den Zeichensatz ISO 8859-1 (Latin 1).</p>
<h3>Ergebnis</h3>
<table border="1" cellspacing="2" cellpadding="0" width="100%">
<tbody>
<tr>
<th></th>
<th>TYPO3</th>
<th>Verbindung</th>
<th>Datenbank</th>
<th>Ergebnis</th>
</tr>
<tr>
<td>1.</td>
<td>Latin1</td>
<td>Latin1</td>
<td>Latin1</td>
<td>OK: Latin1</td>
</tr>
<tr>
<td>2.</td>
<td>Latin1</td>
<td>Latin1</td>
<td>UTF-8</td>
<td>OK: UTF-8 (TYPO3 vor 4.2: Binärfelder: Latin1)</td>
</tr>
<tr>
<td>3.</td>
<td>Latin1</td>
<td>UTF-8</td>
<td>Latin1</td>
<td>nicht möglich, sofern Umlaute verwendet werden</td>
</tr>
<tr>
<td>4.</td>
<td>Latin1</td>
<td>UTF-8</td>
<td>UTF-8</td>
<td>nicht möglich, sofern Umlaute verwendet werden</td>
</tr>
<tr>
<td>5.</td>
<td>UTF-8</td>
<td>Latin1</td>
<td>Latin1</td>
<td>durchgängig UTF-8-kodierte Daten in Latin1-Datenbank</td>
</tr>
<tr>
<td>6.</td>
<td>UTF-8</td>
<td>Latin1</td>
<td>UTF-8</td>
<td>doppelt UTF-8-kodierte Daten in Datenbank (TYPO3 vor 4.2: Binärfelder: korrektes UTF-8)</td>
</tr>
<tr>
<td>7.</td>
<td>UTF-8</td>
<td>UTF-8</td>
<td>Latin1</td>
<td>OK: Latin1 (TYPO3 vor 4.2: Binärfelder: UTF-8)</td>
</tr>
<tr>
<td>8.</td>
<td>UTF-8</td>
<td>UTF-8</td>
<td>UTF-8</td>
<td>OK: UTF-8</td>
</tr>
</tbody>
</table>
<h4>Zu 5.: UTF-8-kodierten Daten in der Latin1-Datenbank</h4>
<blockquote><p>
<code>mysqldump -u USER -p --default-character-set=latin1 datenbank_name &gt; datenbank_name.sql</code>
</p></blockquote>
<h4>Zu 6.: Doppelt UTF-8-kodierten Daten</h4>
<blockquote><p><code>mysqldump -u USER -p --default-character-set=latin1 datenbank_name &gt; datenbank_name.sql</code></p></blockquote>
<h4>In allen anderen Fällen:</h4>
<blockquote><p><code>mysqldump -u USER -p datenbank_name &gt; datenbank_name.sql</code></p></blockquote>
<p>Im Ergebnis hat man nun immer einen Dump mit korrekt kodierten UTF-8-Daten. Aber: mysqldump speichert den beim Dump verwendeten Zeichensatz, ebenso wie den Zeichensatz der Datenbank, innerhalb der Dump-Datei mit ab. Aus diesem Grund müssen innerhalb des Dumps alle Vorkommen von latin1 nach utf8  (innerhalb von SET NAMES latin1 oder DEFAULT Max. CHARSET latin1) abgeändert werden.</p>
<p>Nun wird TYPO3 für UTF-8 eingerichtet (siehe <a title="UTF-8-Umgebung für TYPO3-Projekte einrichten" href="http://ducrot.wordpress.com/2010/05/30/utf-8-umgebung-fur-typo3-projekte-einrichten/">Teil 1)</a> und danach der Dump wieder eingespielt. Dazu löscht man die vorhandene Datenbank (DROP DATABASE datanbank_name;) und lädt den Dump über:</p>
<blockquote><p><code>mysql -u USER -p datenbank_name &lt; datenbank_name.sql</code></p></blockquote>
<p>Was man jetzt noch prüfen sollte: Sind die HTML-Templates auch UTF-8 Kodiert? Und natürlich wie immer das ganze System gründlich testen.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=162&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2010/06/04/utf-8-umstellung-oder-reparatur-eines-vorhandenen-typo3-systems/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>
	</item>
		<item>
		<title>UTF-8-Umgebung für TYPO3-Projekte einrichten</title>
		<link>http://ducrot.wordpress.com/2010/05/30/utf-8-umgebung-fur-typo3-projekte-einrichten/</link>
		<comments>http://ducrot.wordpress.com/2010/05/30/utf-8-umgebung-fur-typo3-projekte-einrichten/#comments</comments>
		<pubDate>Sun, 30 May 2010 19:08:54 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Typo3]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=152</guid>
		<description><![CDATA[Das UTF-8 die Zeichenkodierung der Wahl ist, hat sich mittlerweile bei den meisten Entwicklern herumgesprochen. In diesem Blog-Eintrag wird gezeigt, wie man ein neues TYPO3-Projekt unter dem Apsekt der UTF-8-Kodierung einrichtet. Wichtig ist hier vor allem die richtige Reihenfolge, damit später nicht zwei verschiedene Zeichensätze in der Datenbank landen. Ein zweiter Artikel zeigt, wie man [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=152&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Das UTF-8 die Zeichenkodierung der Wahl ist, hat sich mittlerweile bei den meisten Entwicklern herumgesprochen. In diesem Blog-Eintrag wird gezeigt, wie man ein neues TYPO3-Projekt unter dem Apsekt der UTF-8-Kodierung einrichtet. <span id="more-152"></span></p>
<p>Wichtig ist hier vor allem die richtige Reihenfolge, damit später nicht zwei verschiedene Zeichensätze in der Datenbank landen. Ein <a title="UTF-8 Umstellung oder Reparatur eines vorhandenen TYPO3-Systems" href="http://ducrot.wordpress.com/2010/06/04/utf-8-umstellung-oder-reparatur-eines-vorhandenen-typo3-systems/">zweiter Artikel</a> zeigt, wie man ein vorhandenes TYPO3-Projekt umstellt.</p>
<h3>1. TYPO3 Basisversion installieren (Source+Dummy)</h3>
<h3>2. Datenbank erstellen</h3>
<blockquote><p><code>CREATE DATABASE datenbank_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</code></p></blockquote>
<p>Die Kollation „utf8_general_ci“ wird empfohlen. „utf8_unicode_ci“ ist zwar genauer, aber langsamer und unterscheidet sich im Deutschen nur bei SELECT-Abfragen, bei denen im Datensatz ein „ß“ vorkommt. Hier würde im einen Fall nach einem einfachen, im anderen Fall nach einem doppelten „s“ sortiert.</p>
<h3>3. localconf.php anpassen</h3>
<blockquote><p><code>$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';<br />
$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8';</code></p></blockquote>
<p>Diese Einstellungen müssen unbedingt vor dem Import der TYPO3-Tabellen gemacht werden. Dadurch verwendet TYPO3 UTF-8 als Zeichenkodierung und auch die Verbindung zur MySQL-Datenbank erfolgt über UTF-8.</p>
<p>Durch <em>setDBinit</em> ist man unabhängig von den Einstellungen aus my.conf. Auch bei einem Umzug auf einen anderen Server bleibt die Datenbankverbindung konsistent.</p>
<p>Erst jetzt darf die letzte Schritt im TYPO3 Install Tool zum Import der Datenbank durchgeführt werden.</p>
<h3>4. Test der Installation</h3>
<p>Im Backend einen Admin-Benutzer mit Umlauten anlegen (zum Beispiel Müller). Sowohl im Backend als auch in phpMyAdmin muss in der Spalte realName ein „ü“ angezeigt werden. Wird irgendwo das „ü“ als „Ã¼“ angezeigt, ist leider etwas schief gelaufen.</p>
<h3>5. Webserver</h3>
<p>Der Browser erkennt die Kodierung der Website zunächst am Content-Type-Feld im HTTP-Header. Nur wenn der HTTP-Header keine Angaben zur Kodierung enthält, wird der Content-Type Meta-Tag im HTML-Code ausgewertet. TYPO3 setzt aufgrund des <em>forceCharset</em> ebenfalls den richtigen HTTP-Header, auch wenn der Webserver eventuell noch auf charset=ISO-8859-1 eingestellt ist.</p>
<h3>6. Browserausgabe prüfen</h3>
<p>Durch die <em>forceCharset</em> Angabe werden bereits die Inhalte der Website in UTF-8 ausgegeben. Die TypoScript Einstellungen für <em>config.metaCharset</em> und <em>config.renderCharset</em> sollten überprüft und gegebenefalls entfernt werden.</p>
<h3>7. Templates</h3>
<p>Alle HTML-Templates sollten ebenfalls UTF-8 kodiert abgespeichert werden, damit darin enthaltene Sonderzeichen wie Umlaute usw. korrekt dargestellt werden.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/152/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/152/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/152/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=152&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2010/05/30/utf-8-umgebung-fur-typo3-projekte-einrichten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>
	</item>
		<item>
		<title>Magento-Bestellablauf mit Google Analytics verfolgen</title>
		<link>http://ducrot.wordpress.com/2010/01/27/magento-bestellablauf-mit-google-analytics-verfolgen/</link>
		<comments>http://ducrot.wordpress.com/2010/01/27/magento-bestellablauf-mit-google-analytics-verfolgen/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 13:09:32 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=123</guid>
		<description><![CDATA[Innerhalb von Google Analytics kann man für seine Website Ziele definieren für die dann Ziel-Conversion-Messdaten berechnet werden. Bei einem Onlineshop ist zum Beispiel ein Ziel erreicht, wenn der Besucher eine Bestellung durchgeführt hat. Wie oft eine Bestellung durchgeführt wurde, kann man im Backend von Magento erfahren. Dafür braucht man keine Google Analytics. Interessanter ist die [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=123&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Innerhalb von Google Analytics kann man für seine Website Ziele definieren für die dann Ziel-Conversion-Messdaten berechnet werden. Bei einem Onlineshop ist zum Beispiel ein Ziel erreicht, wenn der Besucher eine Bestellung durchgeführt hat.</p>
<p>Wie oft eine Bestellung durchgeführt wurde, kann man im Backend von Magento erfahren. Dafür braucht man keine Google Analytics. Interessanter ist die Frage, wieviele Bestellungen <strong>nicht</strong> abgeschlossen wurden und an <strong>welcher Stelle</strong> die Besucher den Einkauf abbrechen.<span id="more-123"></span></p>
<p>Um das zu Erfahren definiert man einen Trichter in Google Analytics. Auf der Seite &#8222;Websiteprofile&#8220; auf <em>Bearbeiten</em> klicken und dann im Bereich &#8222;Ziele&#8220; über <em>Ziel hinzufügen</em> einen neuen Trichter anlegen. Also eine Startseite, eine Endseite und alle Seiten die dazwischen liegen. Die Startseite für den Checkout ist /checkout/onepage und die Zielseite ist /checkout/onepage/success/. Diese beiden Adressen im Trichter definiert ergeben schon mal zwei Zahlen. Wieviele haben den Checkout gestartet und wieviele sind am Ende übrig geblieben.</p>
<p>Was fehlt sind die Seiten dazwischen. Leider kann man die Zwischenseiten wie Versandart, Zahlungsart usw. nicht so einfach messen. Magento ruft diese Seiten über Ajax auf und somit gehen die Aufrufe an Google Analytics vorbei. Es gibt die Extension <a title="Fooman Google Analytics Plus" href="http://www.magentocommerce.com/extension/171/fooman-google-analytics-plus" target="_blank">Fooman Google Analytics Plus</a>, die alle Ajax-Requests an Google Analytics sendet. Mir geht diese Extension etwas zu weit und deshalb benutze ich eine angepasste opcheckout.js zu diesem Zweck.</p>
<p>opcheckout.js vorher:</p>
<blockquote><p><code>gotoSection: function(section)<br />
{<br />
section = $('opc-'+section);<br />
section.addClassName('allow');<br />
this.accordion.openSection(section);<br />
},</code></p></blockquote>
<p>opcheckout.js nachher:</p>
<blockquote><p><code>gotoSection: function(section)<br />
{<br />
try {<br />
pageTracker._trackPageview('/checkout/onepage/' + section + '/');<br />
} catch(err) {}<br />
section = $('opc-'+section);<br />
section.addClassName('allow');<br />
this.accordion.openSection(section);<br />
},</code></p></blockquote>
<p>Nach dieser Anpassung werden dann auch die Zwichenseiten in der Trichteranalyse abgebildet:</p>
<blockquote><p>Zielname: Einkauf<br />
Aktives Ziel: Ein<br />
Zieltyp: URL-Ziel<br />
Keyword-Optionen: Genau passend<br />
Ziel-URL: /checkout/onepage/success/</p>
<p>Schritte:<br />
/checkout/onepage/ -&gt; Start Kassenprozess | Erforderlicher Schritt = ja<br />
/checkout/onepage/billing/ -&gt; Rechnungsadresse<br />
/checkout/onepage/shipping/ -&gt; Versandadresse<br />
/checkout/onepage/shipping_method/ -&gt; Versandart<br />
/checkout/onepage/payment/ -&gt; Zahlungsart<br />
/checkout/onepage/review/ -&gt; Zusammenfassung</p></blockquote>
<p>&nbsp;</p>
<p><a href="http://ducrot.files.wordpress.com/2010/01/analytics-einstellungen.png"><img class="alignnone size-medium wp-image-233" title="Analytics Einstellungen für Trichter" src="http://ducrot.files.wordpress.com/2010/01/analytics-einstellungen.png?w=226&#038;h=300" alt="" width="226" height="300" /></a></p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=123&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2010/01/27/magento-bestellablauf-mit-google-analytics-verfolgen/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2010/01/analytics-einstellungen.png?w=226" medium="image">
			<media:title type="html">Analytics Einstellungen für Trichter</media:title>
		</media:content>
	</item>
		<item>
		<title>Manuelle Korrektur von Kunden-Mailadressen in Magento</title>
		<link>http://ducrot.wordpress.com/2009/11/25/manuelle-korrektur-von-kunden-mailadressen-in-magento/</link>
		<comments>http://ducrot.wordpress.com/2009/11/25/manuelle-korrektur-von-kunden-mailadressen-in-magento/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 14:13:43 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=142</guid>
		<description><![CDATA[Es kommt schon mal vor, das Kunden aus Versehen eine falsche Mailadresse eingeben. Meist kann man durch logisches Kombinieren den Fehler finden ohne den Kunden anrufen zu müssen (z.B. kunde@t-onilne.de -&#62; kunde@t-online.de). Im Magento Backend kann man dann die Adresse korrigieren und die Bestellung geht seinen gewohnten Gang. Aber: Bei Gastbestellungen gibt es kein Kundenkonto und [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=142&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Es kommt schon mal vor, das Kunden aus Versehen eine falsche Mailadresse eingeben. Meist kann man durch logisches Kombinieren den Fehler finden ohne den Kunden anrufen zu müssen (z.B. kunde@t-onilne.de -&gt; kunde@t-online.de). Im Magento Backend kann man dann die Adresse korrigieren und die Bestellung geht seinen gewohnten Gang. Aber: Bei Gastbestellungen gibt es kein Kundenkonto und die falsche Mailadresse ist fest mit der Bestellung verknüpft.<span id="more-142"></span></p>
<p>Man kann die Bestellung zwar bearbeiten, aber mir gefällt die durch einen Stornovorgang anfallende zusätzliche Bestellung nicht. Wenn man sich etwas mit SQL auskennt, kann man die Adresse auch schnell in der Datenbank korrigieren. Die folgenden SQL-Befehle gelten für Magento 1.3.x und befördern die entsprechenden Zeilen zurück.</p>
<blockquote><p>SELECT customer_email FROM sales_flat_quote WHERE customer_email = &#8216;falsche@adresse.de&#8217;;<br />
SELECT email FROM sales_flat_quote WHERE email = &#8216;falsche@adresse.de&#8217;;<br />
SELECT sales_order_varchar FROM sales_order_varchar WHERE sales_order_varchar = &#8216;falsche@adresse.de&#8217;;</p></blockquote>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=142&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2009/11/25/manuelle-korrektur-von-kunden-mailadressen-in-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>
	</item>
		<item>
		<title>Magento Benchmarking und Tuning Teil 3</title>
		<link>http://ducrot.wordpress.com/2009/06/11/magento-benchmarking-und-tuning-teil-3/</link>
		<comments>http://ducrot.wordpress.com/2009/06/11/magento-benchmarking-und-tuning-teil-3/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 12:33:44 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Rootserver]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[Geschwindigkeit]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tuning]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=93</guid>
		<description><![CDATA[Nachdem es in Teil 1 und Teil 2 mehr um Fragen der Hardware und der richtigen Konfiguration des LAMP-Gespannes ging, handelt der 3. Teil direkt vom Magento-System. Zunächst soll ein Update von 1.2 nach 1.3 zeigen ob sich was im Core getan hat und dann habe ich noch eine Extension getestet die eine kürzere Übertragung [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=93&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nachdem es in <a title="Teil 1" href="http://ducrot.wordpress.com/2009/03/01/magento-tuning-teil-1/">Teil 1</a> und <a title="Teil 2" href="http://ducrot.wordpress.com/2009/03/10/magento-benchmarking-und-tuning-teil-2/">Teil 2</a> mehr um Fragen der Hardware und der richtigen Konfiguration des LAMP-Gespannes ging, handelt der 3. Teil direkt vom Magento-System. Zunächst soll ein Update von 1.2 nach 1.3 zeigen ob sich was im Core getan hat und dann habe ich noch eine Extension getestet die eine kürzere Übertragung der Seiten vom Server zum Browser verspricht.<span id="more-93"></span></p>
<h3>Rückblick</h3>
<p>Der Einsatz eines aktuellen Rootservers sowie die Installation von APC und Konfiguration von MySQL ergaben zuletzt eine Performance von 6,74 Requests pro Sekunde auf eine Artikelseite. Weitere versuchen mit <a href="http://de.wikipedia.org/wiki/TMPFS" target="_blank">TMPFS</a> im Bereich des Cache-Verzeichnisses von Magento ergaben keine Verbesserungen.</p>
<h3>Update</h3>
<p>Vor dem Update von 1.2.1.2 auf 1.3.2.1 habe ich noch mal die aktuelle Performance gemessen. Da der Webserver inzwischen nicht mehr nur alleine für den <a href="http://www.vitalityshop.de/" target="_blank">Vitalityshop</a> zuständig ist, ist die Leistung wie erwartet etwas geringer geworden.</p>
<blockquote><p>ab2 -c 5 -n 100 http://www.vitalityshop.de/blue-lagoon-mineral-foaming-cleanser.html</p>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Concurrency Level:      5</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Time taken for tests:   15.755 seconds</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Complete requests:      100</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Failed requests:        0</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Write errors:           0</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Total transferred:      2704100 bytes</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">HTML transferred:       2659400 bytes</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Requests per second:    6.35 [#/sec] (mean)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Time per request:       787.747 [ms] (mean)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Time per request:       157.549 [ms] (mean, across all concurrent requests)</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:0;width:1px;height:1px;">Transfer rate:          167.61 [Kbytes/sec] received</div>
<p>Concurrency Level:      5<br />
Time taken for tests:   15.755 seconds<br />
Complete requests:      100<br />
Failed requests:        0<br />
Write errors:           0<br />
Total transferred:      2704100 bytes<br />
HTML transferred:       2659400 bytes<br />
<strong>Requests per second:    6.35 [#/sec] (mean)</strong><br />
Time per request:       787.747 [ms] (mean)<br />
Time per request:       157.549 [ms] (mean, across all concurrent requests)<br />
Transfer rate:          167.61 [Kbytes/sec] received</p></blockquote>
<p>Der neue Startwert für Vergleiche ist also 6,35 Requests pro Sekunde. Nach dem Update auf die Version 1.2.3.1 und Neuerstellung sämtlicher Caches und Indexe ergab die neue Messung <strong>7.80 Requestst pro Sekunde</strong>.</p>
<p>Wow, da bin ich doch tatsächlich beeindruckt. In den Releasenotes stand zwar etwas von Perfomance-Steigerung. Aber das steht da ja eigentlich immer. Das es aber 23% werden, das hatte ich nicht erwartet. Glückwunsch Varien!</p>
<h3>Cache Layered Navigation</h3>
<p>Es gibt in der Cache-Verwaltung einen Schalter um Caching für Layered Navigation zu aktivieren. Die Funktion ist noch Beta und sollte zunächst gründlich getestet werden, bevor man sie bei seinem Shop einsetzt. Ein kurzer Test ergab bei meinem Shop keine Änderung. Laut Beschreibung soll das aber auch nur für umfangreiche Kataloge nützlich sein. Ich habe das wieder deaktiviert.</p>
<h3>Minify und Fooman Speedster</h3>
<p><a href="http://code.google.com/p/minify/" target="_blank">Minify</a> ist ein PHP-Script um die Anzahl und Menge der Daten einer Seite zur reduzieren, die vom Webserver zum Browser geschickt werden müssen. Das wird durch Zusamenfassung, Komprimierung und speziellen HTTP-Headern erreicht. Als Ergebnis sollte eine komplette Seite im Browser schneller geladen werden.</p>
<p>Minify ist zwar ein Serverscript, die Performance-Steigerung ergibt sich hier aber nicht durch eine schnellere Seitenerstellung auf dem Server, sondern durch kürzere Übertragung der Daten zwischen Webserver und Browser. Für Magento gibt es die Extension <a href="http://www.magentocommerce.com/extension/457/fooman-speedster" target="_blank">Fooman Speedster</a> die Minify einsetzt.</p>
<p>Um die Wirkung des Scripts prüfen zu können muss die Messung also im Browser stattfinden. Ich nehme dazu <a href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a>. Hier zunächst die Ergebnisse ohne Fooman Speedster:</p>
<p><a href="http://ducrot.files.wordpress.com/2009/06/bild-4.png"><img class="alignnone size-medium wp-image-101" title="Statistik vorher" src="http://ducrot.files.wordpress.com/2009/06/bild-4.png?w=300&#038;h=96" alt="Statistik vorher" width="300" height="96" /></a></p>
<p>Man sieht hier sehr deutlich das der eigentliche HTML-Anteil mit 26,7 KByte im Vergleich zu den anderen Bereichen sehr klein ist. Die JavaScript- und CSS-Dateien belegen zusammen 375,2 KByte von insgesamt 459.0 KByte für den kompletten Request. Dieses Packet muss für jeden neuen Besucher zunächst mal zum Browser übertragen werden. Nach dem Erstkontakt sollte dann (hoffentlich) das Caching des Browsers greifen und es wird nur noch der HTML-Teil der Seiten geladen. In diesem Beispiel also die 26,7 KByte für den HTML-Teil. Es werden aber trotzdem noch bei jedem Request 31 Anfragen zum Server übertragen.</p>
<p>Mit Fooman Speedster zeigt sich dann folgenden Bild:</p>
<p><a href="http://ducrot.files.wordpress.com/2009/06/bild-5.png"><img class="alignnone size-medium wp-image-103" title="Statistik nachher" src="http://ducrot.files.wordpress.com/2009/06/bild-5.png?w=300&#038;h=95" alt="Statistik nachher" width="300" height="95" /></a></p>
<p>Die gesamte Übertragungsgröße für die erste Seite  ist von 459,0 KByte auf 170,5 KByte geschrumpft. Bei der gecachten Seite sind nun 7 Requests pro Seite weniger notwendig. Und die Generierung der Seiten auf dem Server dauert auch nicht länger. Ich kann den Einsatz der Extension also nur empfehlen. Es ist nach der Installation lediglich ein Eintrag in der .htaccess vorzunehmen und das Verzeichnis var/minifycache muss Schreibrechte haben.</p>
<h3>Fazit</h3>
<p>Mit der Version 1.3 von Magento ist Varien ein großer Performance-Sprung gelungen. Bei meinem <a href="http://www.vitalityshop.de" target="_blank">Shop</a> brachte das Update eine 23% Steigerung im Vergleich zu 1.2.</p>
<p>Mit der einfach zu installierenden Extension <a href="http://www.magentocommerce.com/extension/457/fooman-speedster" target="_blank">Fooman Speedster</a> kann man die Dauer zur Anzeige der ersten Seite für Neukunden deutlich verkürzen. Und schließlich ist der erste Eindruck ja sehr wichtig.</p>
<p>Wie immer würde ich mich über Feedback freuen und zwar nicht nur per E-Mail sondern auch direkt hier im Block <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=93&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2009/06/11/magento-benchmarking-und-tuning-teil-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2009/06/bild-4.png?w=300" medium="image">
			<media:title type="html">Statistik vorher</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2009/06/bild-5.png?w=300" medium="image">
			<media:title type="html">Statistik nachher</media:title>
		</media:content>
	</item>
		<item>
		<title>Neues Symfony Projekt mit CVS-Unterstützung erstellen</title>
		<link>http://ducrot.wordpress.com/2009/05/22/neues-symfony-projekt-mit-cvs-unterstutzung-erstellen/</link>
		<comments>http://ducrot.wordpress.com/2009/05/22/neues-symfony-projekt-mit-cvs-unterstutzung-erstellen/#comments</comments>
		<pubDate>Fri, 22 May 2009 12:49:45 +0000</pubDate>
		<dc:creator>Websolutions</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[CVS]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://ducrot.wordpress.com/?p=110</guid>
		<description><![CDATA[Unter Symfony 1.0 war die Erstellung eines neuen Projektes noch recht einfach. Pear-Paket installieren, Verzeichnis erstellen,  symfony init-project eintippen und schon war der Projektordner mit allem gefüllt was man brauchte. Bei mittlwerweile 3 Versionszweigen ist dies allerdings nicht mehr so einfach. Wenn man Projekte aus verschiedenen Versionen pflegen muss, kann man mit der Pear-Installation nicht mehr [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=110&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Unter <a href="http://www.symfony-project.org/" target="_self">Symfony</a> 1.0 war die Erstellung eines neuen Projektes noch recht einfach. Pear-Paket installieren, Verzeichnis erstellen,  <em>symfony init-project</em> eintippen und schon war der Projektordner mit allem gefüllt was man brauchte. Bei mittlwerweile 3 Versionszweigen ist dies allerdings nicht mehr so einfach.<span id="more-110"></span></p>
<p>Wenn man Projekte aus verschiedenen Versionen pflegen muss, kann man mit der Pear-Installation nicht mehr arbeiten, da hier immer nur eine Version möglich ist. Ständiges deinstallieren und neu installieren finde ich auch keine gute Alternative. Ich habe mich dazu entschlossen, jedes Projekt fest mit seiner Symfony Library zu verknüpfen.</p>
<p>Der an vielen Stellen dafür vorgeschlagene optimale Platz dafür ist im lib/vendor Verzeichnis.</p>
<p><a href="http://ducrot.files.wordpress.com/2009/06/bild-3.png"><img class="alignnone size-full wp-image-111" title="Bild 3" src="http://ducrot.files.wordpress.com/2009/06/bild-3.png?w=450&#038;h=355" alt="Bild 3" width="450" height="355" /></a></p>
<p>Nun stellt sich natürlich die Frage der Updates. Entweder lädt man jedes mal das neue Archiv herunter und tauscht es bei allen Projekten komplett aus oder man lässt Subversion die Arbeit für einen machen. Hierbei hat man zusätzlich noch den Vorteil das man Updates noch vor einem offiziellen Release bekommt.</p>
<p>Die nun folgende Anleitung zur Erstellung neuer Projekte bezieht sich auf Symfony 1.2 sowie Subversion und wurde auf meinem MacBook Pro durchgeführt. Es sollte so oder so ähnlich aber auch unter Linux funktionieren.</p>
<h3>1.  Repository anlegen</h3>
<p>Um das Leben einfacher zu machen setze ich zunächst 2 Umgebungsvariablen. $SVNREP_DIR  bezieht sich auf das Verzeichnis in dem das Repository erstellt werden soll. $PROJECT_NAME hat mehrere Funktionen. Zunächst mal ist es der Projektname unter Symfony. Gleichzeitig aber auch der Verzeichnisname für die Arbeitskopie (Working Copy) und der Name der MySql-Datenbank. Wer das anders habe möchte muss an den entsprechenden Stellen etwas aufpassen.</p>
<blockquote><p>$ SVNREP_DIR=Users/freeze/svn/symfony_csv<br />
$ PROJECT_NAME=symfony_csv<br />
$ svnadmin create ~/svn/$PROJECT_NAME<br />
$ svn mkdir -m &#8222;Standard csv structure&#8220; file:///$SVNREP_DIR/trunk file:///$SVNREP_DIR/branches file:///$SVNREP_DIR/tags<br />
$ svn mkdir -m &#8222;Create folder for Symfony&#8220; file:///$SVNREP_DIR/trunk/lib file:///$SVNREP_DIR/trunk/lib/vendor~/svn/$PROJECT_NAME</p></blockquote>
<h3>2. Checkout</h3>
<p>Nun wechselt man in das Verzeichnis in dem man seine Projekte verwaltet. Bei mir ist das im Userverzeichnis unter Sites.</p>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:21px;width:1px;height:1px;">cd ~/Sites</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:21px;width:1px;height:1px;">svn checkout file:///$SVNREP_DIR/trunk $PROJECT_NAME</div>
<div id="_mcePaste" style="position:absolute;left:-10000px;top:21px;width:1px;height:1px;">cd $PROJECT_NAME</div>
<blockquote><p>$ cd ~/Sites<br />
$ svn checkout file:///$SVNREP_DIR/trunk $PROJECT_NAME<br />
$ cd $PROJECT_NAME</p></blockquote>
<h3>3. Symfony vorbereiten</h3>
<p>Symfony wird als externe Referenz in lib/vendor konfiguriert und danach installiert.</p>
<blockquote><p>$ svn propset svn:externals &#8222;symfony http://svn.symfony-project.com/branches/1.2&#8243; lib/vendor<br />
$ svn commit -m &#8222;External link to Symfony&#8220;<br />
$ svn update</p></blockquote>
<p>Die aktuellste Version aus dem Branch von Symfony ist nun installiert und man kann mit der Initialisierung des Projektes weitermachen.</p>
<blockquote><p>$ lib/vendor/symfony/data/bin/symfony generate:project $PROJECT_NAME</p></blockquote>
<p>Damit das Projekt portabel bleibt sollte noch der Pfad innerhalb von config/ProjectConfiguration.class.php geändert werden:</p>
<blockquote><p>$ require_once dirname(__FILE__).&#8217;/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php&#8217;;</p></blockquote>
<p>Ich lege noch einen symbolischen Link für das web/sf Verzeichnis an, da ich den Apache an dieser Stelle nicht konfigurieren möchte. Das ist aber sicher Geschmacksache.</p>
<blockquote><p>$ ln -s ../lib/vendor/symfony/data/web/sf/ web/sf</p></blockquote>
<p>Nun folgen Optimierungen für Subversion. Ins Repository gehören nur Dateien rein die veränderbar sind und nicht etwa automatisch generiert werden. Zu Letzteren gehören sicher die Daten in den Verzeichnissen cache und log, aber auch noch weitere aus lib wie zum Beispiel die Propel-Base Klassen. <strong>Die folgenden Einstellungen beziehen sich nur auf Propel.</strong></p>
<blockquote>
<p style="font:12px Helvetica;margin:0;">$ rm -rf cache/*</p>
<p>$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">rm -rf log/*</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn status | grep ^? | sed &#8222;s/? *//&#8220; | xargs svn add</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn mkdir data/sql lib/model lib/model/om lib/model/map lib/filter lib/filter/base lib/form lib/form/base lib/task lib/widget</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn propset svn:ignore &#8222;*&#8220; log</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn propset svn:ignore &#8222;*&#8220; cache</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn propset svn:ignore &#8222;*schema-transformed.xml&#8220; config</span><br />
$ <span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">svn propset svn:ignore &#8222;lib.model.schema.sql<br />
</span><span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">plugins.*.sql</span><br />
<span style="font-family:Helvetica, 'Times New Roman', 'Bitstream Charter', Times, fantasy;line-height:normal;font-size:12px;">sqldb.map&#8220; data/sql</span></p>
<p style="font:12px Helvetica;margin:0;">$ svn propset svn:ignore &#8222;*&#8220; lib/model/om</p>
<p style="font:12px Helvetica;margin:0;">$ svn propset svn:ignore &#8222;*&#8220; lib/model/map</p>
<p style="font:12px Helvetica;margin:0;">$ svn propset svn:ignore &#8222;*&#8220; lib/filter/base</p>
<p style="font:12px Helvetica;margin:0;">$ svn propset svn:ignore &#8222;*&#8220; lib/form/base</p>
<p style="font:12px Helvetica;margin:0;">$ svn commit -m &#8222;Project initialized&#8220;</p>
</blockquote>
<p style="font:12px Helvetica;margin:0;">
<h3>4. Datenbank und Propel-Setup</h3>
<p style="font:12px Helvetica;margin:0;">Bei Bedarf kann man nun die Datenbank vorbereiten. Die Konfiguration von config/schema.yml habe ich hier ausgelassen.</p>
<blockquote>
<p style="font:12px Helvetica;margin:0;">$ ./symfony configure:database &#8222;mysql:host=localhost;dbname=$PROJECT_NAME&#8220; user password<br />
$ ./symfony propel:build-filters<br />
$ ./symfony propel:build-forms</p>
<p style="font:12px Helvetica;margin:0;">$ ./symfony propel:build-model<br />
$ svn commit -m &#8222;Propel initialized&#8220;</p></blockquote>
<h3><span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, fantasy;font-size:13px;line-height:19px;">5.  Applikation erstellen</span></h3>
<p>Und zuletzt wird dann die eigentliche Applikation erstellt und noch mal alle neue Verzeichnisse dem Repository bekannt gemacht.</p>
<blockquote><p>$ ./symfony generate:app &#8211;escaping-strategy=on &#8211;csrf-secret=Top$ecret frontend<br />
$ svn status | grep ^? | sed &#8222;s/? *//&#8220; | xargs svn add<br />
$ svn commit -m &#8222;Generate app frontend&#8220;</p></blockquote>
<h3>Ergebnis</h3>
<p>Am Ende hat man nun ein neues Symfony Projekt unter CVS-Kontrolle. Ein Update der Library kann man mittels <em>svn update lib/vendor</em> durchführen.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ducrot.wordpress.com/110/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ducrot.wordpress.com/110/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ducrot.wordpress.com/110/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ducrot.wordpress.com&amp;blog=6780955&amp;post=110&amp;subd=ducrot&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ducrot.wordpress.com/2009/05/22/neues-symfony-projekt-mit-cvs-unterstutzung-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a593cd90e36a2c3251965b40265543c6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Websolutions</media:title>
		</media:content>

		<media:content url="http://ducrot.files.wordpress.com/2009/06/bild-3.png" medium="image">
			<media:title type="html">Bild 3</media:title>
		</media:content>
	</item>
	</channel>
</rss>
