<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Holger Rüprich</title>
	
	<link>http://rueprich.de</link>
	<description>Web-Entwickler aus Leidenschaft</description>
	<lastBuildDate>Sun, 29 Jan 2012 09:52:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rueprich" /><feedburner:info uri="rueprich" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Eine riesen Sauerei – Quiek.de</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/zGPYJ8-g5tM/eine-riesen-sauerei-quiek-de</link>
		<comments>http://rueprich.de/bloggt/2011/11/eine-riesen-sauerei-quiek-de#comments</comments>
		<pubDate>Sun, 20 Nov 2011 00:28:24 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Mobile Web Apps]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=579</guid>
		<description><![CDATA[Kann man zu viele Domains haben? Eigentlich nicht. Denn wer weiß schon, ob eine Domain nach einiger Zeit nicht mal Unsummen an Geld einbringt! Über die letzten Jahre hinweg habe ich so immer wieder einzelne Domains registriert. Quasi ein Highlight nach dem Anderen. Bevorzugt Domains mit kurzen aussprechbaren Namen, da diese nur selten zu haben [...]]]></description>
			<content:encoded><![CDATA[<p>Kann man zu viele Domains haben? Eigentlich nicht. Denn wer weiß schon, ob eine Domain nach einiger Zeit nicht mal Unsummen an Geld einbringt! Über die letzten Jahre hinweg habe ich so immer wieder einzelne Domains registriert. Quasi ein Highlight nach dem Anderen. Bevorzugt Domains mit kurzen aussprechbaren Namen, da diese nur selten zu haben sind. Bringt mir eine dieser Domains heute Unsummen an Geld ein? Eher nicht&#8230;</p>
<p><span id="more-579"></span></p>
<p>Alle paar Monate stehe ich daher vor der Frage, was aus diesen Domains werden soll. Vergangenen Dienstag war es wieder soweit. Voller Eifer und Tatendrang, fest entschlossen einige alte Domains zu kündigen, machte ich mich ans Werk. Die erste Domain auf meiner Liste war <a title="Quiek.de - Was ne Sauerei!" href="http://quiek.de">quiek.de</a>. Die Domain ist ja schon sehr kurz und prägnant &#8211; eigentlich viel zu schade zum Kündigen. Aber sollte die Domain deswegen weitere vier bis fünf Jahre Staub ansetzten? Nein. Somit blieben zwei Optionen: Kündigen oder mit Leben füllen.</p>
<p>Wenige Augenblicke später stand glücklicherweise die rettende Idee: <a title="Quiek.de - So ne Sauerei" href="http://quiek.de">quiek.de</a> wird die neue Plattform für <em>Sauerei</em> im deutschsprachigen Netz.</p>
<p>Seid ihr von etwas genervt? Oder wollt ihr einfach mal Dampf ablassen? Quiek.de machts möglich (<a title="Zur Twitter Website" href="http://twitter.com/">Twitter Account</a> vorausgesetzt). Twittert dazu einfach über eine Sauerei eurer Wahl. <a title="Sauerei bei quiek.de" href="http://quiek.de">Quiek.de</a> findet alle Tweets die &#8220;Sauerei&#8221; enthalten und gibt diesen eine Plattform.</p>
<p>Wenn das mal keine Anwendung ist, auf die die Welt gewartet hat?!</p>
<h3>Zur Technik</h3>
<p>Im ersten Schritt habe ich versucht eine rein Client-seitige JavaScript Anwendung zu schreiben. Die einzelnen Tweets werden per AJAX und JSONP über die <a title="Dokumentation der Twitter Search API" href="https://dev.twitter.com/docs/api#search">Twitter Search API</a> geladen. Grafiken habe ich keine eingesetzt, sondern greife auf CSS Features wie text-shadow, box-shadow und RGBA zu.</p>
<p>Durch die folgenden zwei META-Elemente kann die Website gleichzeitig als Mobile Web App verwendet werden:</p>
<pre class="brush:html">&lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" /&gt;
&lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;</pre>
<p>Ergänzend wird mit Hilfe von <a title="Dokumentation der CSS3 Media Queries" href="http://www.w3.org/TR/css3-mediaqueries/">CSS Media Queries</a> die Schriftgröße und der Seitenrand für die Darstellung auf kleinen Bildschirmen optimiert.</p>
<p>Damit die Seite einen kleinen Mehrwert zur Sauerei auf Twitter hat, können Nutzer einzelne Sauereien &#8220;liken&#8221; und so die <a title="Top Ten der quiek.de Sauereien" href="http://quiek.de/top.html">Top Ten der quiek.de Sauereien</a> bestimmen. Die Top Ten sollten allerdings für alle Nutzer gelten, daher musste ich mein Plan, eine rein Client-seitige JavaScript Anwendung zu schreiben, verwerfen und überlasse die Verwaltung der &#8220;gelikten&#8221; Tweets einem kleinen PHP Script.</p>
<p>Mal sehen, wie es mit der Seite und meiner Domain weitergeht. Fürs Erste ist die Domain gerettet und mein Gewissen besänftigt :)</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/zGPYJ8-g5tM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2011/11/eine-riesen-sauerei-quiek-de/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2011/11/eine-riesen-sauerei-quiek-de</feedburner:origLink></item>
		<item>
		<title>Mobile Web Apps: Wie, Warum, Womit?</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/QYEAg5CBWfk/web-devcon-mobile-web-apps</link>
		<comments>http://rueprich.de/bloggt/2011/10/web-devcon-mobile-web-apps#comments</comments>
		<pubDate>Wed, 12 Oct 2011 20:11:08 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Mobile Web Apps]]></category>
		<category><![CDATA[Präsentationen]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[XHTML & CSS]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=557</guid>
		<description><![CDATA[Nächste Woche findet vom 17. &#8211; 18. Oktober die Web DevCon in Hamburg statt. Zusammen mit Stephan Schmidt werde ich ebenfalls dort sein. Stephan erklärt in seinem Vortrag &#8220;Continuous Integration mit Jenkins&#8221; die Vorteile des Einsatzes kontinuierlicher Integration am Beispiel von Jenkins. Am Dienstag führe ich unter dem Titel &#8220;Mobile Web Apps: Wie, Warum, Womit?&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><a class="image-link" href="http://www.web-devcon.de/Programm/Mobile-Web-Apps-Wie-Warum-Womit"><img src="/images/webDevConSpeaker.jpg" alt="Am 18. Oktober werde ich als Speaker an der Web DevCon teilnehmen" /></a> Nächste Woche findet vom 17. &#8211; 18. Oktober die Web DevCon in Hamburg statt. Zusammen mit <a title="Zum Blog von Stephan" href="http://blog.schst.net/">Stephan Schmidt</a> werde ich ebenfalls dort sein. Stephan erklärt in seinem Vortrag &#8220;<a href="http://www.web-devcon.de/Programm/Continuous-Integration-mit-Jenkins">Continuous Integration mit Jenkins</a>&#8221; die Vorteile des Einsatzes kontinuierlicher Integration am Beispiel von Jenkins. Am Dienstag führe ich unter dem Titel &#8220;<a href="http://www.web-devcon.de/Programm/Mobile-Web-Apps-Wie-Warum-Womit">Mobile Web Apps: Wie, Warum, Womit?</a>&#8221; in die Entwicklung von Mobile Web Apps ein. Mit dem Vortrag erkläre ich, was eine Web App von einer reinen Website unterscheidet und zeige anschließend welche Frameworks existieren, um die Entwicklung zu erleichtern.</p>
<p>Einen ersten &#8220;Testlauf&#8221; konnte ich mit dem Vortrag schon im Rahmen unserer Whiteboard Fridays auf der Arbeit absolvieren. Ich bin gespannt auf das Feedback aus Hamburg. Die Folien folgen kurz darauf bei Slideshare.</p>
<p><strong>Update:</strong> <a href="http://www.slideshare.net/holgerrueprich/mobile-web-apps-9764846" title="Mobile Web Apps" target="_blank">Die Folien sind inzwischen auf Slideshare verfügbar</a>.</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/9764846" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/QYEAg5CBWfk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2011/10/web-devcon-mobile-web-apps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2011/10/web-devcon-mobile-web-apps</feedburner:origLink></item>
		<item>
		<title>Package Chaos</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/OdhBo1FjfsQ/package-chaos</link>
		<comments>http://rueprich.de/bloggt/2011/07/package-chaos#comments</comments>
		<pubDate>Mon, 04 Jul 2011 19:12:57 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=524</guid>
		<description><![CDATA[Die Struktur unserer Packages ist aktuell recht chaotisch. Ohne Suchfunktion ist es kaum möglich eine Klasse zu finden. Da stellt sich die Frage: Arbeiten bei uns nur Chaoten? Oder Genies, die sich erst im Chaos wohl fühlen? Ich glaube weder das Eine noch das Andere. Unserer Package Struktur ist, wie so viele Dinge in der [...]]]></description>
			<content:encoded><![CDATA[<p>Die Struktur unserer Packages ist aktuell recht chaotisch. Ohne  Suchfunktion ist es kaum möglich eine Klasse zu finden. Da stellt sich  die Frage: Arbeiten bei uns nur Chaoten? Oder Genies, die sich erst im  Chaos wohl fühlen? Ich glaube weder das Eine noch das Andere. Unserer  Package Struktur ist, wie so viele Dinge in der Software Entwicklung  entschuldigt werden, historisch gewachsen. D.h. Gründe gibt es diverse  und der Schmerz war bisher zu gering dem Einhalt zu gebieten.<br />
<span id="more-524"></span></p>
<h3>Als Ursachen sehe ich vor allem:</h3>
<ul>
<li>Neue Namen (Firmenname, Abteilungsname, Teamname, &#8230;) führen zu neuen Packages während alte bestehen bleiben.</li>
<li>Ohne  klare Struktur ist es schwierig, neue Klassen einzuordnen. Da die  vorhandenen Packages oft nicht passen, kommen fortlaufend neue hinzu.</li>
<li>Nicht  alle Entwickler haben den gleichen Hintergrund oder  das gleiche Wissen  über ein Thema und strukturieren Klassen  unterschiedlich.</li>
</ul>
<p>Das  größte Problem an diesem Chaos ist, dass Anforderungen mehrfach und  unterschiedlich gelöst werden. Klassen mit gleichen fachlichen Themen  sind auf unterschiedlichste Packages verteilt. Betroffene Stellen sind  bei Änderungen schwer zu finden und werden leicht übersehen.</p>
<h3>Raus aus dem Durcheinander</h3>
<p>Ich  bin kein großer Freund von langen Regelwerken und Forschriften, wie zu  entwickeln ist. Im Gegensatz bin ich davon überzeugt, dass sich eine  klare Package Struktur eigenständig durchsetzt, sobald sie vorhanden und  nachvollziehbar ist. Doch der Weg aus diesem Gewirr an Packages ist  müsig. Etliche Stellen im Code müssen angepasst werden. Unsere  Applikationen erstecken sich über mehrere Module hinweg, womit jede  Änderung mehrere Releases mit sich zieht. Konfigurationsdateien könnten  übersehen werden und Bugs im &#8220;Worst-Case&#8221; erst live festgestellt werden.  Getoppt wird dies durch Suberversion Baumkonflikte beim Mergen von  bereits laufenden Projekten.</p>
<p>Doch aller Anfang ist bekanntlich  schwer und so hilft nur eins &#8211; ran ans Werk! Mit dem ersten Schritt bin  ich gerade beschäftigt. Dabei werde ich alle alten Packages in neue  überführen, um die offensichtlich veralteten Strukturen abzuschaffen.  Danach werde ich die Anzahl der Top-Level Packages einschränken und  diese nach fachlichen Themen strukturieren. Ich bin überzeugt, dass sich  dieser Aufwand lohnt. Stück für Stück kristalisiert sich so die finale  Struktur der Packages heraus und es wird leichter neue Klassen  einzuordnen sowie bestehende Logik aufzufinden.</p>
<p>Die ersten  Packages habe ich angepasst bzw. entfernt. Dabei sind die ersten  redundaten und unbenuzten Klassen aufgefallen bzw. abgeschafft worden.  Sobald die Struktur steht, werden wir darauf aufbauend die Frage der  Abhängigkeit zwischen Packages angehen, also welches Package auf welches  andere Zugriff haben sollte oder auch nicht. Also Augen zu und durch.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/OdhBo1FjfsQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2011/07/package-chaos/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2011/07/package-chaos</feedburner:origLink></item>
		<item>
		<title>Expression Language 2.2 mit Maven und Tomcat</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/G8XZDZeLCjo/expression-language-2-2-mit-maven-und-tomcat</link>
		<comments>http://rueprich.de/bloggt/2010/06/expression-language-2-2-mit-maven-und-tomcat#comments</comments>
		<pubDate>Sun, 27 Jun 2010 21:51:26 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=492</guid>
		<description><![CDATA[Beim Einsatz von JSF 2.0 bin ich diese Woche auf ein kleines Problem gestoßen &#8211; der Aufruf von Methoden mit Parametern war mit der Expression Language nicht möglich. Seit der Version 2 der Expression Language wurde dieses Feature zur Verfügung gestellt. Da diese Version allerdings kein Teil der JSF 2.0 API ist, waren für den [...]]]></description>
			<content:encoded><![CDATA[<p>Beim Einsatz von JSF 2.0 bin ich diese Woche auf ein kleines Problem gestoßen &#8211; der Aufruf von Methoden mit Parametern war mit der Expression Language nicht möglich. Seit der Version 2 der Expression Language wurde dieses Feature zur Verfügung gestellt. Da diese Version allerdings kein Teil der JSF 2.0 API ist, waren für den Einsatz im Tomcat noch ein paar kleinere Anpassungen nötig.</p>
<p><span id="more-492"></span></p>
<p><strong>Dependencies</strong><br />
Zuerst muss die Expression Language API sowie die dazugehörige Implementierung aus dem Maven Repository von java.net in das Projekt eingebunden werden.</p>
<pre class="brush:xml">&lt;dependency&gt;
  &lt;groupId&gt;javax.el&lt;/groupId&gt;
  &lt;artifactId&gt;el-api&lt;/artifactId&gt;
  &lt;version&gt;2.2&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
  &lt;groupId&gt;org.glassfish.web&lt;/groupId&gt;
  &lt;artifactId&gt;el-impl&lt;/artifactId&gt;
  &lt;version&gt;2.2&lt;/version&gt;
&lt;/dependency&gt;</pre>
<pre class="brush:xml">&lt;repository&gt;
  &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
  &lt;name&gt;Java.net Repository for Maven&lt;/name&gt;
  &lt;url&gt;http://download.java.net/maven/2&lt;/url&gt;
&lt;/repository&gt;</pre>
<p><strong>Verwendung der neuen Expression Language</strong><br />
Um die neue Version der Expression Language zu verwenden, muss die ExpressionFactory anschließend in der web.xml registriert werden.</p>
<pre class="brush:xml">&lt;context-param&gt;
  &lt;param-name&gt;com.sun.faces.expressionFactory&lt;/param-name&gt;
  &lt;param-value&gt;com.sun.el.ExpressionFactoryImpl&lt;/param-value&gt;
&lt;/context-param&gt;
</pre>
<p>Und damit lassen sich nun auch Parameter an Methoden per Expression Language übergeben.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/G8XZDZeLCjo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/06/expression-language-2-2-mit-maven-und-tomcat/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/06/expression-language-2-2-mit-maven-und-tomcat</feedburner:origLink></item>
		<item>
		<title>Clean Code Dojo</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/I4OgP551rpw/clean-code-dojo</link>
		<comments>http://rueprich.de/bloggt/2010/06/clean-code-dojo#comments</comments>
		<pubDate>Mon, 14 Jun 2010 21:26:53 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Clean Code]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=471</guid>
		<description><![CDATA[Ein Code Dojo ist ein Treffen von Programmierern mit dem Ziel eine bestimmte Programmieraufgabe zu lösen um dabei Neues zu lernen. Die Idee stammt ursprünglich von Chad Fowler, der in seinem Blog über Code Katas schreibt. Der Begriff Kata steht für eine Übung beim Karate, die immer wiederholt wird, um Schritt für Schritt besser zu [...]]]></description>
			<content:encoded><![CDATA[<p><img class="blog-image" src="/images/clean-code-dojo.jpg" alt="Clean Code Dojo" /> Ein Code Dojo ist ein Treffen von Programmierern mit dem Ziel eine bestimmte Programmieraufgabe zu lösen um dabei Neues zu lernen. Die Idee stammt ursprünglich von <a title="Der Blog von Chad Fowler" href="http://pragdave.pragprog.com/">Chad Fowler</a>, der in seinem Blog über <a title="Code Katas von Chad Fowler" href="http://codekata.pragprog.com">Code Katas</a> schreibt. Der Begriff Kata steht für eine Übung beim Karate, die immer wiederholt wird, um Schritt für Schritt besser zu werden. Ähnlich wie beim Karate ist es nach Fowler auch bei der Musik. Um ein guter Musiker zu werden, ist es wertvoll die Mechanik des Instruments zu verstehen, die Theorien zu kennen und Talent zu haben. Am wichtigsten ist aber die Übung. Das Gleiche gilt für Entwickler &#8211; um ein guter Entwickler zu werden, ist es wichtig die benötigten Programmiersprachen zu kennen, die Theorien zu verstehen und Talent zu haben. Um wirklich gut zu werden, ist vor allem viel Übung entscheidend.</p>
<p><span id="more-471"></span></p>
<p>Entwickler üben in der Regel direkt bei der  Arbeit und verursachen damit auch hier die meisten Fehler. Mit den Code Katas beschreibt Chad Fowler eine Möglichkeit dem entgegen zu wirken. Jedes Code Kata stellt eine Programmieraufgabe dar, die immer wiederholt werden kann, um Stück für Stück besser zu werden. Mit jeder Wiederholung können die Aufgaben z.B. in kürzerer Zeit, mit anderen Sprachen, in weniger Zeilen oder mit anderen Tools durchgeführt werden. Wichtig ist, dass man Spaß an der Aufgabe hat und etwas dabei lernen kann. Chad Fowler hat in seinem Blog seither 21 solcher Code Katas veröffentlicht.</p>
<p><a title="Der Blog von Laurent Bossavit" href="http://bossavit.com/dojo/">Laurent Bossavit</a> nahm diese Idee mit einigen weiteren Entwicklern auf und organisierte das erste bekannte Code Dojo. Also ein Treffen von Entwicklern, die gemeinsam versuchen ein bestimmtes Code Kata zu lösen. Mittlerweile gibt es solche Treffen immer öfter. In Deutschland organisiert z.B. die <a title="Code Dojos der Münchner .Net-User-Group" href="http://www.gmbsg.com/go/mucnetdojo">Münchner .Net-User-Group</a> regelmäßige Code Dojos, in <a title="Code Dojos in Finnland" href="http://wiki.agilefinland.com/?CodingDojo">Finnland</a> wird darüber berichtet oder bei der <a title="Code Dojo der Universtiät von Houston" href="http://www.codedojo.org/">Universität von Houston</a>.</p>
<h3>Und was steckt hinter dem Clean Code Dojo?</h3>
<p>Bei meiner Arbeit beschäftige ich mich sehr viel mit der Frage, wie wir unsere &#8211; über die Jahre gewachsene &#8211; Anwendung für die Zukunft wartbar halten können. Wie wir alten Code testbar machen und Stück für Stück aufräumen können. In einigen Diskussionen und Büchern bin ich dabei auf Code Reviews als Mittel gestoßen. Meine Befürchtung war allerdings, dass ein Review zu passiv verlaufen würde. Wenn eine Gruppe von 10 Leuten (um einen Beamer verteilt) über Code diskutiert, ist die Chance recht hoch, dass einige Diskussionen nur für wenige von Interesse sind und so mehr und mehr Leute abschalten und nur passiv &#8220;beisitzen&#8221;.</p>
<p>Unser Freelancer Florian brachte vor einer Weile das Thema wieder auf und fragte, warum wir nicht gemeinsam in kleineren Gruppen eine Aufgabe vornehmen und gemeinsam unseren Code testen, aufräumen und neu organisieren. Durch die kleineren Gruppen ist so jeder aktiver beim Thema und kann aus den einzelnen Diskussionen viel mehr für sich mitnehmen. Diese Idee fand ich spitze. Und mit meiner Vorliebe für das Buch <a title="Clean Code bei Amazon" href="http://www.amazon.de/gp/product/0132350882?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0132350882">Clean Code</a> war der Name bald gefunden &#8211; Clean Code Dojo.</p>
<p>Als Zeitrahmen für unsere Treffen haben wir fürs erste drei Stunden gewählt. Auf einer Wiki-Seite werden mögliche Aufgaben gesammelt. Für jedes Treffen wollen wir uns genau eines dieser Ziele vornehmen. Die Entscheidung darüber fällt direkt zu Beginn eines Treffens. Letzten Donnerstag haben wir den ersten Versuch gestartet und damit begonnen sämtliche Coding Stylequide Violations zu beseitigen. Das Ziel war für den Anfang noch sehr einfach und passt nicht zu 100% in die Form eines Code Katas, doch es ergaben sich bereits hierbei einige interessante Diskussionen und viele Aufgaben für kommende Clean Code Dojos. Innerhalb der drei Stunden haben wir in ca. 300 Klassen 3000 Zeilen Code angepasst. Es wurde einiges gelernt und viel gelacht. Meiner Meinung nach ein Erfolg auf ganzer Linie.</p>
<p>Die kommenden Wochen werden zeigen, wie es weiter geht. Wir werden uns ab jetzt alle zwei Wochen treffen. Ich hoffe, dass die Motivation anhält, weiterhin viel gelernt wird und die Ergebnisse den Erfolg bestätigen.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/I4OgP551rpw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/06/clean-code-dojo/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/06/clean-code-dojo</feedburner:origLink></item>
		<item>
		<title>JSF 2.0 mit Maven und Tomcat</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/soO-tSL1Uws/jsf-2-0-mit-maven-und-tomcat</link>
		<comments>http://rueprich.de/bloggt/2010/04/jsf-2-0-mit-maven-und-tomcat#comments</comments>
		<pubDate>Mon, 26 Apr 2010 19:41:16 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=444</guid>
		<description><![CDATA[Die Einrichtung eines JSF Maven Projekts in Kombination mit dem Tomcat-Plugin stellte mich vor einige kleine Einstiegshürden. Welche Dependencies sind nötig? Wo finden sich die passenden Jar-Files? Und warum werden die Managed Beans von JSF beim Starten des Tomcats nicht initialisiert? Hier daher die Schritte zur Einrichtung eines solchen Projekts. Projekt anlegen Um das Projekt [...]]]></description>
			<content:encoded><![CDATA[<p>Die Einrichtung eines JSF Maven Projekts in Kombination mit dem Tomcat-Plugin stellte mich vor einige kleine Einstiegshürden. Welche Dependencies sind nötig? Wo finden sich die passenden Jar-Files? Und warum werden die Managed Beans von JSF beim Starten des Tomcats nicht initialisiert? Hier daher die Schritte zur Einrichtung eines solchen Projekts.<br />
<span id="more-444"></span></p>
<h2>Projekt anlegen</h2>
<p>Um das Projekt initial anzulegen habe ich einen der Standard Maven Archetypes verwendet.</p>
<pre class="brush:bash">mvn archetype:generate
-&gt; 18 maven-archetype-webapp (A simple Java web application)
</pre>
<p><strong>Dependencies</strong><br />
Als Dependencies werden die JSF-API samt Implementierung, die Servlet API sowie JavaServer Pages Standard Tag Library (JSTL) verwendet.</p>
<pre class="brush:xml">&lt;dependency&gt;
  &lt;groupId&gt;com.sun.faces&lt;/groupId&gt;
  &lt;artifactId&gt;jsf-api&lt;/artifactId&gt;
  &lt;version&gt;2.0.2&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
  &lt;groupId&gt;com.sun.faces&lt;/groupId&gt;
  &lt;artifactId&gt;jsf-impl&lt;/artifactId&gt;
  &lt;version&gt;2.0.2&lt;/version&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
  &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
  &lt;version&gt;2.5&lt;/version&gt;
  &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;

&lt;dependency&gt;
  &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;jstl&lt;/artifactId&gt;
  &lt;version&gt;1.2&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p><strong>Repository</strong><br />
Die JSF API sowie dazu gehörige Implementierung finden sich im Maven Repository von Java.net.<strong><br />
</strong></p>
<pre class="brush:xml">&lt;repository&gt;
  &lt;id&gt;maven2-repository.dev.java.net&lt;/id&gt;
  &lt;name&gt;Java.net Repository for Maven&lt;/name&gt;
  &lt;url&gt;http://download.java.net/maven/2&lt;/url&gt;
&lt;/repository&gt;</pre>
<p><strong>Plugins</strong><br />
Zu guter letzt wird der Tomcat wie folgt konfiguriert.</p>
<pre class="brush:xml">&lt;plugin&gt;
  &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
  &lt;artifactId&gt;tomcat-maven-plugin&lt;/artifactId&gt;
&lt;/plugin&gt;</pre>
<h2>Eclipse konfigurieren</h2>
<p>Zur Unterstützung der Code Completion für JSF Taglibs muss der Dateityp der JSF-Dateien (in meinem Fall .xhtml) dem Content Type JSP zugeordnet werden:</p>
<pre>Window &gt; Preferences &gt; General &gt; Content Types &gt; Text &gt; JSP &gt; Add (xhtml)</pre>
<p></p>
<h2>Projekt mit Tomcat starten</h2>
<p>Wird das Projekt über Maven mittels <code>mvn tomcat:run</code> gestartet, gibt es ein Problem: Sämtliche @ManagedBeans(s) werden nicht initialisiert und können somit nicht verwendet werden. JSF sucht an zwei Stellen nach annotierten Klassen &#8211; unter <code>WEB-INF/classes</code> sowie in den jar-Files im Classpath. Sowohl das Verzeichnis <code>WEB-INF/classes</code> als auch das Verzeichnis <code>WEB-INF/lib</code> existiert allerdings nur sofern das Projekt mittels Maven zum war-Archiv gepackt wurde. Um dieses Problem zu lösen, muss das Projekt mittels <code>mvn tomcat:run-war</code> gestartet werden.</p>
<p>Will man das Packen des Projekts mit jeder Änderung umgehen, gibt es eine weitere Möglichkeit:</p>
<pre class="brush:xml">&lt;build&gt;
  &lt;outputDirectory&gt;src/main/webapp/WEB-INF/classes&lt;/outputDirectory&gt;
&lt;/build&gt;
</pre>
<p>Der Nachteil an dieser Lösung ist allerdings, dass man die gesamten class-Files im src-Verzeichnis ablegt.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/soO-tSL1Uws" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/04/jsf-2-0-mit-maven-und-tomcat/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/04/jsf-2-0-mit-maven-und-tomcat</feedburner:origLink></item>
		<item>
		<title>// Kommentare im Code</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/I1A_sbANNMg/kommentare-im-code</link>
		<comments>http://rueprich.de/bloggt/2010/02/kommentare-im-code#comments</comments>
		<pubDate>Mon, 01 Feb 2010 22:03:28 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=289</guid>
		<description><![CDATA[In dem Artikel &#8220;Verwenden Sie keine Verneinung nicht!&#8221; schreibt Stephan Schmidt: &#8220;Wenn ich es schaffe, eine if-Anweisung zu vermeiden, dann versüßt mir das immer meinen Tag.&#8221; Ganz ähnlich geht mir das mit Kommentaren. Nicht, dass ich Kommentare im Quelltext per se für eine schlechte Sache halte. Es gibt kaum etwas Hilfreicheres als ein gut platziertes [...]]]></description>
			<content:encoded><![CDATA[<p>In dem Artikel &#8220;<a title="Verwenden Sie keine Verneinung nicht bei blog.schst.net" href="http://blog.schst.net/2010/01/verwenden-sie-keine-verneinung-nicht/">Verwenden Sie keine Verneinung nicht!</a>&#8221; schreibt Stephan Schmidt: &#8220;Wenn ich es schaffe, eine if-Anweisung zu vermeiden, dann versüßt mir das immer meinen Tag.&#8221; Ganz ähnlich geht mir das mit Kommentaren. Nicht, dass ich Kommentare im Quelltext per se für eine schlechte Sache halte. Es gibt kaum etwas Hilfreicheres als ein gut platziertes Kommentar. Allerdings gibt es auch kaum etwas Schlechteres als veraltete Kommentare, die den Quelltext unötig aufblasen, den Leser falsch informieren und in die Irre führen.</p>
<p><span id="more-289"></span></p>
<p>Software wird ständig erweitert und angepasst. Aufgrund mangelnder Disziplin und der Hektik im Projektalltag gilt dies in der Regel allerdings nicht gleichzeitig für Kommentare. Je älter ein Kommentar ist, desto höher ist die Wahrscheinlichkeit, dass es nicht mehr dem aktuellen Verhalten der Software entspricht.</p>
<h3>Wann handelt es sich um ein schlechtes Kommentar?</h3>
<p>Neben dem häufigen Grund, dass Kommentare veraltet sind, gibt es auch ein paar weitere Beispiele, die ich euch nicht vorenthalten möchte.</p>
<p><strong>Positionsmarkierungen</strong><br />
Postitionsmarkierungen sind Kommentare, die größere Abschnitte im Code in einzelne kleinere Teile trennen. Anstatt Code durch Kommentare zu separieren, sollten die jeweiligen Abschnitte besser als eigenständige Methoden extrahiert werden.</p>
<pre class="brush:java">// **** Form Upload ****
....
// **** Input Validation ****
....</pre>
<p><strong>Auskommentierter Code</strong><br />
Ein großer &#8220;Freund&#8221; bin ich vor allem von auskommentiertem Code. Nicht nur, dass die Aussagekraft von auskommentiertem Code gegen null geht. Schlimmer ist, dass jeder weitere Entwickler, der über diesen Code stößt, denken wird, dass dieser aus einem bestimmten Grund überlassen wurde. Mit der Zeit verändert sich der umliegende Code und das Kommentar verliert immer mehr an Bedeutung und führt einzig und allein zu Verwirrungen.</p>
<p>In der heutigen Zeit wird jeder Stand bei größeren Software-Projekten mit Hilfe von Versionsverwaltungssystemen wie Subversion, Git oder CVS gesichert. Wird eine bestimmte Funktionalität nicht mehr benötigt, sollte diese schlicht weg gelöscht werden. Mit einem aussagekräftigen Kommentar im Versionsverwaltungssystem, erklärt sich auch viel besser aus welchem Grund diese Funktionalität entfernt wurde.</p>
<p><strong>Redundante Kommentare<br />
</strong>Kommentare, die nichts weiter aussagen als der beschriebene Code selbst.<strong><br />
</strong></p>
<pre class="brush:java">/**
 * Get the car
 */
public Car getCar() { return car; }

/** The name */
private String name;</pre>
<h3>Gibt es auch sinnvolle Kommentare?</h3>
<p>Wie bereits geschrieben halte ich nicht alle Kommentare für unnötig und schlecht. Zum Ausgleich daher auch einige Beispiele für den sinnvollen Einsatz von Kommentaren.</p>
<p><strong>@todo-Kommentare</strong><br />
Die meisten IDEs unterstützen Entwickler durch die Erkennung von @todo-Kommentaren im Code. Werden diese nicht nur als Ausrede verwendet, um unsauberen Code liegen zu lassen, ist der Einsatz solcher Kommentare auf jeden Fall in Ordnung.</p>
<p><strong>Informative Kommentare</strong><br />
Sinnvoll finde ich auch Kommentare, die Informationen zum Kontext des Quelltext liefern. Wurde der Code beispielsweise durch einen Bugfix auf eine ungewöhnliche aber erforderliche Weise angepasst, ist es ratsam die entsprechende Stelle mit einem Kommentar zu versehen.</p>
<p><strong>Kommentare in öffentlichen APIs</strong><br />
Eine gut dokumentierte öffentliche API ist für Entwickler ein Segen. Allerdings gilt diese Aussage nur, sofern die Dokumentation auf aktuellem Stand gehalten wird und dem Entwickler zusätzliche Informationen bietet. Kommentare für Setter und Getter halte ich auch in öffentlichen APIs für unnötig.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/I1A_sbANNMg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/02/kommentare-im-code/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/02/kommentare-im-code</feedburner:origLink></item>
		<item>
		<title>Clean Code mit Hilfe der Pfadfinder-Regel</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/o-6GYLhOUeQ/clean-code-mit-hilfe-der-pfadfinder-regel</link>
		<comments>http://rueprich.de/bloggt/2010/01/clean-code-mit-hilfe-der-pfadfinder-regel#comments</comments>
		<pubDate>Sun, 17 Jan 2010 23:12:27 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=359</guid>
		<description><![CDATA[Nach unserem Vortrag &#8220;Die Kunst des Software Design&#8221; auf dem PHP World Kongress, diskutierten Stephan und ich noch eine Weile darüber, wie man eine bestehende Anwendung im laufenden Betrieb am besten aufräumt. Ist eine Anwendung lang genug in Betrieb und groß genug, kommt oft der Ruf nach einem groß angelegten Refactoring-Projekt. Ein Projekt, in dem [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/images/die-pfadfinder-regel.jpg" title="Das Poster für die Pfadfinder-Regel"><img src="http://rueprich.de/images/die-pfadfinder-regel-small.jpg" alt="Die Pfadfinder-Regel" /></a></p>
<p>Nach unserem Vortrag &#8220;<a title="Die Kunst des Software Design beim PHP Word Kongress" href="http://rueprich.de/bloggt/2009/12/php-world-kongress-2009">Die Kunst des Software Design</a>&#8221; auf dem <a title="Die Website des PHP World Kongress" href="http://www.phpworld-kongress.de">PHP World Kongress</a>, diskutierten <a title="Der Blog von Stephan Schmidt" href="http://blog.schst.net">Stephan</a> und ich noch eine Weile darüber, wie man eine bestehende Anwendung im laufenden Betrieb am besten aufräumt. Ist eine Anwendung lang genug in Betrieb und groß genug, kommt oft der Ruf nach einem groß angelegten Refactoring-Projekt. Ein Projekt, in dem Entwickler endlich einmal die Zeit haben Dinge, die schon seit langer Zeit im Argen liegen, aufzuräumen und die Anwendung wieder in Ordnung zu bringen. In den wenigsten Fällen werden solche Projekte allerdings genehmigt oder entsprechend priorisiert.</p>
<p><span id="more-359"></span></p>
<p><a title="Robert C. Martin bei Object Mentor" href="http://www.objectmentor.com/omTeam/martin_r.html">Robert C. Martin</a> schreibt in seinem Buch <a title="Clean Code bei Amazon" href="http://www.amazon.de/gp/product/0132350882?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=6742&amp;creativeASIN=0132350882">Clean Code</a>, dass Code über die gesamte Lebensdauer &#8220;sauber&#8221; gehalten werden muss und findet dafür eine treffende Regel der amerikanischen Pfadfinder: &#8220;Leave the campground cleaner than you found it&#8221;. Der einzelne Schritt beim Aufräumen muss dabei gar nicht groß sein. Ob eine lange Methode aufgebrochen, eine Duplikation eliminiert oder der Name einer Variable in einen ausdrucksvolleren Namen geändert wird, spielt dabei keine Rolle. Wenn der Code einer Anwendung mit jedem Commit ein kleines Stück sauberer wird, als er es zuvor war, wird die gesamte Anwendung nicht verrotten (siehe auch <a title="Browen-Window-Theorie bei Wikipedia" href="http://de.wikipedia.org/wiki/Broken-Windows-Theorie">Broken-Window-Theorie</a>).</p>
<p>Letztendlich sind wir zu dem Entschluss gekommen, dass in dem für gewöhnlich hektischen Alltag der Weg von Robert C. Martin genau der Richtige ist. Der Fokus bei der Entwicklung liegt allerdings eher auf einem konkreten TODO, anstatt auf dem Aufräumen der Codebasis. Probleme im Code werden zwar oft erkannt, aber nie korrigiert, da man gerade an etwas anderem dran ist. Aus diesem Grund wollten wir ein Poster gestalten, das einige kleine &#8220;Aufräum-Arbeiten&#8221; auflistet und dazu ermuntert in kleinen Schritten das große Ziel zu erreichen. Nachdem Stephan bereits die Punkte gesammelt hatte, habe ich heute das Poster fertig gestellt. Ich bin gespannt, wie es ankommt und zu welchem Ergebnis es führen wird.</p>
<p><a href="/images/die-pfadfinder-regel-a4.jpg" title="Die Pfadfinder-Regel in A4" class="jpg">Die Pfadfinder-Regel als A4 Poster <span>als JPEG zum Download (ca. 1.1 MB)</span></a></p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/o-6GYLhOUeQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/01/clean-code-mit-hilfe-der-pfadfinder-regel/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/01/clean-code-mit-hilfe-der-pfadfinder-regel</feedburner:origLink></item>
		<item>
		<title>Modular Java</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/Dc7SQ5mFiRQ/modular-java</link>
		<comments>http://rueprich.de/bloggt/2010/01/modular-java#comments</comments>
		<pubDate>Sun, 10 Jan 2010 15:42:52 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Buchempfehlungen]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=347</guid>
		<description><![CDATA[Durch das Buch Der Pragmatische Programmierer von Andrew Hunt und Dave Thomas bin ich auch auf deren Firma The Pragmatic Programmers gestoßen. Unter dem Titel &#8220;The Pragmatic Bookshelf&#8221; publizieren die beiden &#8211; was will man auch anderes erwarten &#8211; pragmatische Bücher. Schon lange wollte ich mir eines dieser Bücher besorgen, da ich ein großer Fan [...]]]></description>
			<content:encoded><![CDATA[<p><a class="image-link" title="Modular Java von Craig Walls bei Amazon bestellen" href="http://www.amazon.de/gp/product/1934356409?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=1934356409"><img src="/images/modular-java.jpg" alt="Modular Java" /></a> Durch das Buch <a title="Der Pragmatische Programmierer bei Amazon" href="http://www.amazon.de/gp/product/3446223096?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3446223096">Der Pragmatische Programmierer</a> von <a title="Blog von Andrew Hunt" href="http://andy.pragprog.com/">Andrew Hunt</a> und <a title="Blog von Dave Thomas" href="http://pragdave.pragprog.com/">Dave Thomas</a> bin ich auch auf deren Firma <a title="Zur Website der Pragmatic Programmers" href="http://pragprog.com">The Pragmatic Programmers</a> gestoßen. Unter dem Titel &#8220;The Pragmatic Bookshelf&#8221; publizieren die beiden &#8211; was will man auch anderes erwarten &#8211; pragmatische Bücher. Schon lange wollte ich mir eines dieser Bücher besorgen, da ich ein großer Fan von praxisnahen, hands-on Büchern bin. Schlussendlich habe ich mich für <a title="Modular Java von Craig Walls bei Amazon bestellen" href="http://www.amazon.de/gp/product/1934356409?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=1934356409">Modular Java</a> mit dem Untertitel Creating Flexible Applications with OSGi and Spring von <a title="Zum Blog von Craig Walls" href="http://www.jroller.com/habuma/">Craig Walls</a> entschieden und war hell auf begeistert.</p>
<p><span id="more-347"></span></p>
<p>Interessant war das Buch für mich in erster Linie wegen OSGi. Vor dem Lesen des Buches wusste ich zwar grob, um was es bei OSGi ging, der praktische Nutzen war mir allerdings nicht wirklich ersichtlich. Da die Version 1.0 des Open Source Frameworks <a title="Zur Website des Pustefix Frameworks" href="http://pustefix-framework.org/">Pustefix</a>, auf dem die Bestellprozesse bei 1&amp;1 basieren, nun auch auf OSGi setzt, wollte ich mehr über OSGi erfahren und im Idealfall auch direkt erste praktische Erfahrungen sammeln. Genau dies erfüllt Craig Walls auf gerade mal 200 sehr gut zu lesenden Seiten.</p>
<p>Das Buch ist in drei Teile untergliedert. Im ersten Teil &#8220;OSGI Fundamentals&#8221; werden die Grundlagen von OSGi kurz und knapp erklärt und die Entwicklung des Hello World Beispiels im OSGI Style beschrieben. Anschließend wird die Beispielanwendung &#8220;Dude, Where&#8217;s My JAR&#8221; eingeführt und der Umgang mit Bundles sowie die Entwicklung von OSGi Services genauer beschrieben. Im zweiten Teil &#8220;Spring Dynamic Modules and Web Bundles&#8221; erklärt Walls neben Spring Dynamic Modules und Web Bundles auch wie man OSGi Bundles erweitern kann. Den Abschluss bildet der Teil &#8220;Finishing Touches&#8221; in dem es um OSGi im Live Betrieb sowie die Konfiguration der Anwendung geht.</p>
<p>Interesse geweckt? Das Buch könnt ihr <a title="Modular Java von Craig Walls bei Amazon bestellen" href="http://www.amazon.de/gp/product/1934356409?ie=UTF8&amp;tag=rueprichde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=1934356409">hier</a> direkt bei Amazon bestellen.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/Dc7SQ5mFiRQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/01/modular-java/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/01/modular-java</feedburner:origLink></item>
		<item>
		<title>Hinter den Kulissen von rueprich.de</title>
		<link>http://feedproxy.google.com/~r/rueprich/~3/ALtFHZTFGa8/hinter-den-kulissen-von-rueprich-de</link>
		<comments>http://rueprich.de/bloggt/2010/01/hinter-den-kulissen-von-rueprich-de#comments</comments>
		<pubDate>Sun, 03 Jan 2010 21:45:35 +0000</pubDate>
		<dc:creator>Holger</dc:creator>
				<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[XHTML & CSS]]></category>

		<guid isPermaLink="false">http://rueprich.de/?p=299</guid>
		<description><![CDATA[Meine neue Website ist inzwischen seit einigen Tagen online und die gröbsten Optimierungen sind seit heute auch vollendet. Bei der Umsetzung habe ich großen Wert auf die semantische Auszeichnung der Inhalte, sprechende URLs und eine gute Performance gelegt. Wie ich dies in WordPress realisiert habe, beschreibe ich in diesem Artikel. Semantische Auszeichnung der Inhalte Da [...]]]></description>
			<content:encoded><![CDATA[<p>Meine neue Website ist inzwischen seit einigen Tagen online und die gröbsten Optimierungen sind seit heute auch vollendet. Bei der Umsetzung habe ich großen Wert auf die semantische Auszeichnung der Inhalte, sprechende URLs und eine gute Performance gelegt. Wie ich dies in WordPress realisiert habe, beschreibe ich in diesem Artikel.</p>
<p><span id="more-299"></span></p>
<h3>Semantische Auszeichnung der Inhalte</h3>
<p>Da ich für meine Website ein eigenes WordPress Theme erstellt habe, war die Erfüllung des ersten Punktes keine große Herausforderung. WordPress Themes bestehen aus einer Reihe von PHP-Dateien mit bestimmten Namen (beispielsweise header.php, footer.php oder home.php). Hat man eine fertige XHTML Vorlage seiner Website, kann man diese direkt in die von WordPress vorgesehenen Dateien aufteilen. Somit hatte ich bei der Auszeichnung der Inhalte in XHTML alle Freiheiten. Die Auszeichnung von Inhalten, die dynamisch hinzugefügt werden, können leicht angepasst werden. Und die Inhalte des Rich Text Editor werden ebenfalls korrekt formatiert.</p>
<p>In dem Artikel <a title="High Accessibility Is Effective Search Engine Optimization bei A List Apart" href="http://www.alistapart.com/articles/accessibilityseo/">High Accessibility Is Effective Search Engine Optimization</a> geht Andy Hagans bei <a title="Zur Website von A List Apart" href="http://www.alistapart.com/">A List Apart</a> auf den Zusammenhang von Accessibility und Suchmaschinenoptimierung ein. Ein netter Nebeneffekt einer Website mit validem XHTML und reicher Semantik ist, dass sie auch sehr gut bei Suchmaschinen gelistet wird. Um die Qualität einer Website zu messen, empfehle ich die Firefox Extesion <a title="Zur Website von SenSEO" href="http://sensational-seo.com/">SenSEO</a> von meinem Kollegen <a title="Zur Website von Nico Steiner" href="http://nicosteiner.de/">Nico Steiner</a>.</p>
<h3>Sprechende URLs</h3>
<p>URLs sehe ich als eine Art API der Website an. Eine URL sollte daher einerseits die Struktur der Website wiederspiegeln. Anderseits sollte sie aber vor allem einfach, benutzerfreundlich und beschreibend sein. In WordPress nennen sich sprechende URLs Permalinks. Das Format dieser Links kann relativ einfach über die Einstellungen des Blogs konfiguriert werden. Schön finde ich dabei, dass direkt beim Schreiben eines Artikels der Seitenname angezeigt wird und editiert werden kann.</p>
<p>Mit den Namen meiner URLs habe ich versucht einen Satz zu konstruieren. Artikel der Kategorie Clean Code können z.B. wie folgt aufgerufen werden:</p>
<p><a title="rueprich.de bloggt über Clean Code" href="../bloggt/ueber/clean-code">rueprich.de/bloggt/ueber/clean-code</a></p>
<p>Und Projekte, an denen ich bisher gearbeitet habe können unter arbeitet-an/PROJEKT-NAME aufgerufen werden.</p>
<p><a title="rueprich.de arbeitet an Fitness Beruf" href="../arbeitet-an/fitness-beruf">rueprich.de/arbeitet-an/fitness-beruf</a></p>
<p>Bei Blog-Einträgen habe ich eine Ausnahme gemacht, da es relativ schnell passieren kann, dass ein Titel mehr als einmal verwendet wird. Aus diesem Grund habe ich den Monat und das Jahr der Veröffentlichung in die URL mit aufgenommen:</p>
<p><a title="rueprich.de - behind the scenes" href="../bloggt/2010/01/rueprichde-behind-the-scenes">rueprich.de/bloggt/2010/01/rueprichde-behind-the-scenes</a></p>
<p>Der Vorteil an diesen URLs ist, dass man so z.B. auch alle Einträge im Januar 2010 ansehen kann:</p>
<p><a title="Artikel vom Januar 2010" href="../bloggt/2010/01">rueprich.de/bloggt/2010/01</a></p>
<p>Oder alle Artikel von 2009:</p>
<p><a title="Artikel von 2009" href="../bloggt/2009">rueprich.de/bloggt/2009</a></p>
<p>In WordPress konnte ich die URLs über zwei Felder in den Blog-Einstellungen konfigurieren. Für Blog-Einträge verwende ich diese benutzerdefinierte Struktur:</p>
<pre><code>/bloggt/%year%/%monthnum%/%postname%</code></pre>
<p>Und als Basis für Kategorien verwende ich:</p>
<pre><code>bloggt/ueber</code></pre>
<p>Wenn ihr auch eine Vorliebe für sprechende URLs habt, kann ich euch den Artikel von Chris Shiflett <a title="URL Vanity von Chris Shiflett" href="http://shiflett.org/blog/2007/jan/url-vanity">URL Vanity</a> empfehlen.</p>
<h3>Performance</h3>
<p>Um eine gute Performance für meine Website zu erreichen, habe ich versucht alle Inhalte so klein wie möglich zu halten. Aus diesem Grund habe ich versucht mit so wenig HTML-Elementen, CSS-Klassen und -Eigenschaften wie möglich auszukommen. Die Bilder habe ich in Photoshop direkt für das “Web” gespeichert, daher sind diese bereits sehr gut komprimiert. Hover-Effekte bei Bildern habe ich mit Hilfe von <a title="CSS Sprites bei A List Apart" href="http://www.alistapart.com/articles/sprites">CSS Sprites</a> umgesetzt, um die Anzahl der HTTP-Request zu verringern. Denn viele HTTP-Requests führen zu einer längeren Ladezeit. Ein weiterer Vorteil von CSS Sprites ist, dass die Bilder im Hover-Zustand bereits geladen sind und es so nicht zu einem kurzen Flackern beim ersten “hovern” kommt.</p>
<p>In dem Artikel &#8220;<a title="Speed up: Optimierungstipps für Ihre Seiten bei Dr. Web" href="http://www.drweb.de/magazin/speed-up-optimierungstipps-fur-ihre-seite/">Speed Up: Optimierungstipps für Ihre Seiten</a>&#8221; fasst Nelly Brekardin bei <a title="Zur Website von Dr. Web" href="http://www.drweb.de">Dr. Web</a> einge Tipps für die Optimierung von Websites zusammen. Für meine Website war vor allem der Punkt &#8220;Die richtigen HTTP-Header senden&#8221; hilfreich. Hier wird beschrieben, wie man mit Hilfe der .htaccess Konfiguration die HTTP-Header Expires und Cache-Control sendet und textuelle Inhalte per gzip komprimiert.</p>
<p>Ein guter Einstieg für die Performance-Optimierung einer Website ist die Firefox Extension <a title="YSlow Firefox Extension" href="https://developer.yahoo.com/yslow/">YSlow</a>. Diese misst unterschiedliche Kriterien auf der Seite und beurteilt diese in Noten von A – F. Zu jedem Punkt gibt es eine Erklärung und Tipps, wie man die entsprechende Note verbessern kann. Unter dem Reiter “Statistics” sieht man darüber hinaus, wieviel Speicher die Website beim ersten Laden und wieviel Speicher die Site im “gecachten” Zustand benötigt.</p>
<p>Wer sich für dieses Thema interessiert, dem sei auch der Artikel &#8220;<a title="Best Practices for Speeding Up Your Web Site im Yahoo Developer Network" href="http://developer.yahoo.com/performance/rules.html">Best Practices for Speeding Up Your Web Site</a>&#8221; empfohlen.</p>
<img src="http://feeds.feedburner.com/~r/rueprich/~4/ALtFHZTFGa8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rueprich.de/bloggt/2010/01/hinter-den-kulissen-von-rueprich-de/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rueprich.de/bloggt/2010/01/hinter-den-kulissen-von-rueprich-de</feedburner:origLink></item>
	</channel>
</rss>

