<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>luckyduck networks</title>
	
	<link>http://the-luckyduck.de</link>
	<description>Magento, Wordpress und Web Freelancer</description>
	<lastBuildDate>Fri, 27 Jan 2012 08:21:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/JanBrinkmann" /><feedburner:info uri="janbrinkmann" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>JanBrinkmann</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>ACTA: Eine große Gefahr für das Internet</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/GbhoVB41mL8/</link>
		<comments>http://the-luckyduck.de/2012/01/acta-eine-grose-gefahr-fur-das-internet/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 07:34:03 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Netzwelt]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1295</guid>
		<description><![CDATA[Da ich es niemals besser auf den Punkt bringen könnte, hier ein aktueller Newsletter von avaaz.org der dazu aufruft sich gegen ACTA stark zu machen: Liebe Freundinnen und Freunde, Ein neues globales Abkommen könnte Konzernen erlauben, alles, was wir im Internet tun, zu überwachen. Letzte Woche drängten 3 Millionen von uns erfolgreich die Zensurgesetze in [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Da ich es niemals besser auf den Punkt bringen könnte, hier ein aktueller Newsletter von avaaz.org der dazu aufruft sich gegen ACTA stark zu machen:</p>
<p>Liebe Freundinnen und Freunde,</p>
<table width="220" align="right" bgcolor="#ffffff">
<tbody>
<tr>
<td><span style="color: black; font-family: Arial; font-size: x-small;"><span style="color: black; font-family: Arial; font-size: x-small;"><span style="color: black; font-family: Arial; font-size: x-small;"><a href="http://www.avaaz.org/de/eu_save_the_internet/?cl=1536125587&amp;v=12216"><img src="http://avaaz_images.s3.amazonaws.com/2050_STOP-ACTA1_3_200x100.png" alt="" border="0" /></a></span></span></span></p>
<p><strong>Ein neues globales Abkommen könnte Konzernen erlauben, alles, was wir im Internet tun, zu überwachen.</strong> Letzte Woche drängten 3 Millionen von uns erfolgreich die Zensurgesetze in den USA zurück &#8212; <strong>wenn wir jetzt handeln können wir das EU-Parlament dazu bringen, das Abkommen zu begraben: <br /></strong></p>
<div><a href="http://www.avaaz.org/de/eu_save_the_internet/?cl=1536125587&amp;v=12216"> <img src="http://avaazdesign.s3.amazonaws.com/btn_unterzeichnen.png" alt="Klicken Sie hier, um zu unterzeichnen!" width="200" border="0" /></a></div>
</td>
</tr>
</tbody>
</table>
<p>Letzte Woche konnten 3 Millionen von uns Amerikas Attacke auf unser Internet vereiteln &#8212; doch mit ACTA lauert eine noch größere Bedrohung. Unsere global agierende Bewegung für Internetfreiheit ist genau die Kraft, die diese Gefahr für immer aus der Welt schaffen kann.</p>
<p><strong>ACTA &#8212; ein weltweites Abkommen &#8212; könnte Konzernen erlauben, das Internet zu zensieren.</strong> Es wurde von wenigen reichen Ländern und mächtigen Konzernen ausgehandelt und würde einen neuen, nicht gewählten, “ACTA-Ausschuss” ins Leben rufen, der es privaten Interessen erlauben würde, alles, was wir Online machen zu überwachen und drakonische Bußgelder &#8212; oder gar Gefängnisstrafen &#8212; gegen alle zu verhängen, die angeblich ihren Geschäften schaden.</p>
<p><strong>Das EU-Parlament hat gerade mit dem Ratifizierungsprozess für ACTA begonnen &#8212; und ohne dessen Zustimmung würde der Angriff auf die Internet-Freiheit scheitern.</strong> Viele Parlamentarier haben sich schon früher gegen ACTA gestellt, doch einige sind unentschlossen &#8212; <strong>geben wir ihnen den nötigen Stoß, damit sie das Abkommen verwerfen.</strong> Unterzeichnen Sie die Petition &#8212; sobald wir 500.000 Unterschriften erreichen überreichen wir die Petition spektakulär in Brüssel:</p>
<p><a href="http://www.avaaz.org/de/eu_save_the_internet/?cl=1536125587&amp;v=12216">http://www.avaaz.org/de/eu_save_the_internet/?vl</a></p>
<p>Es ist empörend &#8212; die Regierungen von 80 Prozent der Weltbevölkerung waren von den Verhandlungen um das Anti-Counterfeiting Trade Agreement (ACTA) ausgeschlossen und <strong>ungewählte Bürokraten haben eng mit Konzern-Lobbyisten zusammengearbeitet um sich neue Regeln und ein viel zu mächtiges Vollzugsverfahren auszudenken.</strong> ACTA würde zunächst die USA, EU und 9 weitere Länder abdecken und dann auf die ganze Welt erweitert werden. Doch wenn wir die EU jetzt zu einem Nein bewegen könnten wir dem Abkommen den Schwung nehmen und es schließlich ganz aufhalten.</p>
<p>Die repressiven Verordnungen könnten bedeuten, dass Menschen für das Teilen von Zeitungsartikeln oder das Hochladen eines Videos von einer Party, auf der urheberrechtlich geschützte Musik gespielt wird, bestraft werden. Verpackt als Handelsabkommen zum Schutz von Urheberrechten <strong>könnte ACTA darüber hinaus zum Verbot lebensrettender generischer Medikamente führen und den Zugang von Bauern zu Saatgut bedrohen. </strong>Und der Höhepunkt ist, dass der ACTA-Ausschuss eine Freikarte zum Ändern seiner eigenen Regeln hätte, ohne jegliche demokratische Kontrolle.</p>
<p><strong>Mächtige Konzerninteressen drängen auf dieses Abkommen, aber das EU Parlament steht noch im Weg.</strong> Senden wir den Abgeordneten eine klare Botschaft, sich gegen die Lobbies zu stellen und für Internet-Freiheit einzutreten. Unterzeichnen Sie jetzt und erzählen Sie allen davon.</p>
<p><a href="http://www.avaaz.org/de/eu_save_the_internet/?cl=1536125587&amp;v=12216">http://www.avaaz.org/de/eu_save_the_internet/?vl</a></p>
<p>Letzte Woche sahen wir, was wir gemeinsam erreichen können, als Millionen von uns die USA davon abhielten, ein Internetzensurgesetz zu verabschieden. Wir haben der Welt gezeigt, wie mächtig unsere Stimme sein kann. Erheben wir sie erneut um gegen diese neue Bedrohung vorzugehen.</p>
<p>Voller Hoffnung und Entschlossenheit,</p>
<p>Dalia, Alice, Pascal, Emma, Ricken, Maria Paz und das ganze Avaaz-Team</p>
<p>Weitere Informationen:</p>
<p>Sogar der ACTA-Verantwortliche tritt zurück und warnt die Bürger<br /><a href="http://activepolitic.com:82/News/2012-01-26d/EU_ACTA_chief_resigns_in_disgust_over_disrespect_at_citizens.html">http://activepolitic.com:82/News/2012-01-26d/EU_ACTA_chief_resigns_in_disgust_over_disrespect_at_citizens.html</a> </p>
<p>EU-Parlament beginnt Debatte um ACTA-Ratifizierung (Heise)<br /> <a href="http://www.heise.de/newsticker/meldung/EU-Parlament-beginnt-Debatte-um-ACTA-Ratifizierung-1421066.html">http://www.heise.de/newsticker/meldung/EU-Parlament-beginnt-Debatte-um-ACTA-Ratifizierung-1421066.html</a></p>
<p>Warum ist ACTA so umstritten? Und warum sich Politiker und Bürger dafür interessieren sollten! (Digitale Gesellschaft)<br /> <a href="http://digitalegesellschaft.de/2011/10/warum-ist-acta-so-umstritten-und-warum-sich-politiker-und-burger-dafur-interessieren-sollten/">http://digitalegesellschaft.de/2011/10/warum-ist-acta-so-umstritten-und-warum-sich-politiker-und-burger-dafur-interessieren-sollten/</a></p>
<p>US-Senator stoppt Pipa-Abstimmung (Spiegel)<br /> <a href="http://www.spiegel.de/netzwelt/netzpolitik/0,1518,810408,00.html">http://www.spiegel.de/netzwelt/netzpolitik/0,1518,810408,00.html</a></p>
<p>The secret treaty: Anti-Counterfeiting Trade Agreement (ACTA) and Its Impact on Access to Medicines (auf Englisch)<br /> <a href="http://www.msfaccess.org/content/secret-treaty-anti-counterfeiting-trade-agreement-acta-and-its-impact-access-medicines">http://www.msfaccess.org/content/secret-treaty-anti-counterfeiting-trade-agreement-acta-and-its-impact-access-medicines</a></p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/qahfM_3N-pUZmrWycxdaZWfvtGA/0/da"><img src="http://feedads.g.doubleclick.net/~a/qahfM_3N-pUZmrWycxdaZWfvtGA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qahfM_3N-pUZmrWycxdaZWfvtGA/1/da"><img src="http://feedads.g.doubleclick.net/~a/qahfM_3N-pUZmrWycxdaZWfvtGA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=GbhoVB41mL8:YfRBiZLIOqo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=GbhoVB41mL8:YfRBiZLIOqo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=GbhoVB41mL8:YfRBiZLIOqo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=GbhoVB41mL8:YfRBiZLIOqo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/GbhoVB41mL8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2012/01/acta-eine-grose-gefahr-fur-das-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2012/01/acta-eine-grose-gefahr-fur-das-internet/</feedburner:origLink></item>
		<item>
		<title>Die Wunderkit Beta ist da – Invites verfügbar</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/Y_pmp-_SAy8/</link>
		<comments>http://the-luckyduck.de/2012/01/wunderkit-beta-invites/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 08:40:31 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Diverses]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1270</guid>
		<description><![CDATA[Die Wunderkit Beta ist nun nach längerer Wartezeit verfügbar. Der erste Eindruck ist schon gar nicht schlecht. Wunderlist habe ich nie aktiv genutzt, da ich mit der Actionmethod Lösung von Scott Belsky arbeite. Wunderkit wirkt jedoch vielversprechend. Speziell die soziale Integration und die Möglichkeit auf eine weite Verbreitung sind interessant. Wenn sich Wunderkit durchsetzen kann [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Die <a href="http://www.wunderkit.com">Wunderkit</a> Beta ist nun nach längerer Wartezeit verfügbar. Der erste Eindruck ist schon gar nicht schlecht. Wunderlist habe ich nie aktiv genutzt, da ich mit der <a href="http://www.actionmethod.com">Actionmethod</a> Lösung von Scott Belsky arbeite. Wunderkit wirkt jedoch vielversprechend. Speziell die soziale Integration und die Möglichkeit auf eine weite Verbreitung sind interessant. Wenn sich Wunderkit durchsetzen kann und viel genutzt wird, könnte es die Todo-Verwaltung und Zusammenarbeit an Projekten Kundenübergreifend vereinfachen. Ich bin gespannt, Potenzial ist vorhanden. Wer einen <strong>Invite</strong> möchte, bitte einfach einen Kommentar hinterlassen.</p>
<p>Hier ein Video das die Beta und die Features vorstellt:</p>
<p>
<p><a href="http://www.youtube.com/watch?v=dlzMjoD8sgg">http://www.youtube.com/watch?v=dlzMjoD8sgg</a></p></p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/2R6Hq_JUYU9HCWTilTV_9PWbias/0/da"><img src="http://feedads.g.doubleclick.net/~a/2R6Hq_JUYU9HCWTilTV_9PWbias/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2R6Hq_JUYU9HCWTilTV_9PWbias/1/da"><img src="http://feedads.g.doubleclick.net/~a/2R6Hq_JUYU9HCWTilTV_9PWbias/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=Y_pmp-_SAy8:L7NAhp523zA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=Y_pmp-_SAy8:L7NAhp523zA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=Y_pmp-_SAy8:L7NAhp523zA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=Y_pmp-_SAy8:L7NAhp523zA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/Y_pmp-_SAy8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2012/01/wunderkit-beta-invites/feed/</wfw:commentRss>
		<slash:comments>154</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2012/01/wunderkit-beta-invites/</feedburner:origLink></item>
		<item>
		<title>Professionelle Serverreinigung</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/r8XARznNr3Q/</link>
		<comments>http://the-luckyduck.de/2011/12/professionelle-serverreinigung/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 20:16:57 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1211</guid>
		<description><![CDATA[Im Rahmen meiner Recherchen zu einem neuen Serverschrank bin ich auf einen Service gestossen der für so manchen Serverraum den ich von innen gesehen habe zu empfehlen wäre. Im Detail geht es um Dienstleister für die Serverreinigung und IT-Reinigung. Wer Zuhause mal nach ein paar Monaten einen Blick in die eigene Workstation riskiert oder neue Hardware [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><a href="http://the-luckyduck.de/wp-content/uploads/2011/12/plantine.jpg"><img class="alignright size-medium wp-image-1214" title="motherboard" src="http://the-luckyduck.de/wp-content/uploads/2011/12/plantine-300x200.jpg" alt="" width="300" height="200" /></a>Im Rahmen meiner Recherchen zu einem neuen Serverschrank bin ich auf einen Service gestossen der für so manchen Serverraum den ich von innen gesehen habe zu empfehlen wäre. Im Detail geht es um Dienstleister für die <a href="http://www.it-server-reinigung.de/">Serverreinigung</a> und <a href="http://www.it-server-reinigung.de/">IT-Reinigung</a>. Wer Zuhause mal nach ein paar Monaten einen Blick in die eigene Workstation riskiert oder neue Hardware einbaut kennt das Problem. Überall sammelt sich Staub an. Während eine Workstation meist über Nacht ausgeschaltet wird ist bei einem Server 24/7 Dauerbetrieb angesagt. Eine stabile Kühlung ist also enorm wichtig. Zudem ist Staub generell ein noch größeres Problem, da leistungsstarke Lüfter viel Luft (und somit auch Staub und Partikel) durch ein relativ flaches Gehäuse pusten müssen. Hier sammelt sich die Staubschicht deutlich schneller an und wächst entsprechend schneller. Speziell Kühlkörper und interne Lüfter, also Komponenten die für die Kühlung von großer Bedeutung sind, werden auf Dauer vom Staub immer mehr okkupiert.</p>
<p>Wenn hier nicht irgendwann gehandelt wird kann sich eine schlechtere Kühlleistung negativ auf die Serverhardware wie z.B. Chipsätze und die CPU auswirken, da sie nicht mehr bei optimaler Temperatur gehalten werden können. In einem klimatisierten Rechenzentrum ist dies tendenziell weniger ein Problem. Jedoch habe ich schon viele &#8220;Serverräume&#8221; gesehen die eigentlich mehr Abstellraum als IT-freundliche Umgebung waren. Wenn dort im Sommer die Temperatur zusätzlich ansteigt kann es schnell zu Systemabstürzen und unerklärbarem Verhalten führen. Daher hier als Tipp, falls sich jemand von den oben genannten Punkten angesprochen fühlt: Es gibt Dienstleister die mit professioneller Hilfe die eigene IT wieder komplett säubern können. Die Investition kann sich wirklich auszahlen. Die eigene IT wird es ihnen sicher danken. =)</p>
<p>Links zum Thema:</p>
<ul>
<li><a href="http://www.it-server-reinigung.de/">Serverreinigung</a> / <a href="http://www.it-server-reinigung.de/serverreinigung-sanierung.html">EDV Sanierung</a></li>
</ul>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/oUO7Kk8k64eO5578WzcBiYG0J_A/0/da"><img src="http://feedads.g.doubleclick.net/~a/oUO7Kk8k64eO5578WzcBiYG0J_A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/oUO7Kk8k64eO5578WzcBiYG0J_A/1/da"><img src="http://feedads.g.doubleclick.net/~a/oUO7Kk8k64eO5578WzcBiYG0J_A/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=r8XARznNr3Q:iKd1vm9QXWI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=r8XARznNr3Q:iKd1vm9QXWI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=r8XARznNr3Q:iKd1vm9QXWI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=r8XARznNr3Q:iKd1vm9QXWI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/r8XARznNr3Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/12/professionelle-serverreinigung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/12/professionelle-serverreinigung/</feedburner:origLink></item>
		<item>
		<title>Know-how mit PHP Schulungen aufbauen?</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/4rtKT_0W_yI/</link>
		<comments>http://the-luckyduck.de/2011/12/know-how-mit-php-schulungen-aufbauen/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 17:54:52 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1200</guid>
		<description><![CDATA[Ein Kunde hat mich gefragt wie ich mein Wissen rund um PHP, Linux und das Web erlangt habe. Die Frage fand ich ziemlich interessant. Es ging ihm speziell darum dass er gerne die Kompetenz der hauseigenen Entwickler stärken wollte, sich jedoch gefragt hat was hier ein guter Weg sein könnte. Als spezielle Hürde hat sich [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><a href="http://the-luckyduck.de/2011/12/know-how-mit-php-schulungen-aufbauen/"><img class="alignright size-medium wp-image-1207" title="PHP Schulungen" src="http://the-luckyduck.de/wp-content/uploads/2011/12/php-schulungen-300x223.jpg" alt="" width="300" height="223" /></a>Ein Kunde hat mich gefragt wie ich mein Wissen rund um PHP, Linux und das Web erlangt habe. Die Frage fand ich ziemlich interessant. Es ging ihm speziell darum dass er gerne die Kompetenz der hauseigenen Entwickler stärken wollte, sich jedoch gefragt hat was hier ein guter Weg sein könnte. Als spezielle Hürde hat sich in dem Gespräch herausgestellt dass keiner der Entwickler mit Leidenschaft Programmierer ist und für das was er tut wirklich brennt. Wäre dies der Fall ist das &#8220;Lernen&#8221; eigentlich Nebensache, quasi Mittel zum Zweck, da nicht das Wissen sondern Ergebnisse und Projekte im Fokus stehen.</p>
<p>Nun, mein Wissen rund um das Webumfeld habe ich mir durch reine Faszination an den verschiedenen Technologien selbst angeeignet. Es gab sicher auch viel theoretische Informationen die von außen an mich herangetragen worden sind und man lernt natürlich auch immer von anderen. Allerdings ist der wirkliche Grundstein aus reinem Interesse entstanden, ohne den Anspruch damit jemals Geld zu verdienen. Programmieren ist wie das Beherrschen einer normalen Sprache. Anfangs ist die Grammatik umständlich und viele Wörter neu. Auf Dauer wird es immer leichter sich gewählt auszudrücken und am Ende kann man aus dem Bauch heraus entscheiden ob ein Ausdruck richtig ist. </p>
<p>Da es natürlich eine Menge Zeit kostet und das nicht &#8220;über Nacht&#8221; gemacht werden kann ist es ein guter Mittelweg, vor allem wenn kurzfristig Wissen benötigt wird, <a href="http://www.gfu.net/php/php-schulung.html">PHP Schulungen</a> zu besuchen. Man kann von Experten lernen, bekommt eine direkte Einsicht in best-practices und vor allem kann man aus den Fehlern von anderen lernen. Wer bisher noch nie objektorientiert gearbeitet hat und neben PHP auch keine andere Sprache wie Java beherrscht, hat auf sich allein gestellt einen weiten Weg vor sich um die Konzepte und objektorientierte Denkweise zu verinnerlichen. Wenn das Wissen wie bei meinem Kunden zeitnah benötigt wird ist eine Schulung aus meiner Sicht ein sehr guter Versuch bevor beim Personal umstrukturiert wird. So gibt man dem Personal noch eine letzte Chance an sich selbst zu arbeiten. </p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/mLy3ltuCMbzZiq6l5nPcBSPufqg/0/da"><img src="http://feedads.g.doubleclick.net/~a/mLy3ltuCMbzZiq6l5nPcBSPufqg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mLy3ltuCMbzZiq6l5nPcBSPufqg/1/da"><img src="http://feedads.g.doubleclick.net/~a/mLy3ltuCMbzZiq6l5nPcBSPufqg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4rtKT_0W_yI:TfGlZ6lyW4Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4rtKT_0W_yI:TfGlZ6lyW4Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=4rtKT_0W_yI:TfGlZ6lyW4Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4rtKT_0W_yI:TfGlZ6lyW4Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/4rtKT_0W_yI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/12/know-how-mit-php-schulungen-aufbauen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/12/know-how-mit-php-schulungen-aufbauen/</feedburner:origLink></item>
		<item>
		<title>Sichere(re) IT im Homeoffice dank Netzwerkschrank</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/2TzUN6lanqA/</link>
		<comments>http://the-luckyduck.de/2011/11/kmu-netzwerkschraenke/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 19:12:26 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Server]]></category>
		<category><![CDATA[Technik]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1186</guid>
		<description><![CDATA[Vermutlich hat nahezu jedes Homeoffice, jeder Kleinunternehmer und mittleres Unternehmen heutzutage einen Internetanschluss. Schnell kommt zum DSL-Anschluss mit Splitter, Modem und/oder Router noch ein Switch hinzu damit mehrere Rechner oder Accesspoints in das lokale Netzwerk eingebunden werden können. Wer zusätzlich ein NAS-System als zentralen Datenspeicher betreibt, evt. sogar mit zusätzlichen externen Festplatten, hat schnell ein [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><a href="http://the-luckyduck.de/wp-content/uploads/2011/11/switch-patchpanel.jpg"><img class="alignright size-medium wp-image-1194" title="network switch" src="http://the-luckyduck.de/wp-content/uploads/2011/11/switch-patchpanel-300x200.jpg" alt="netzwerkswitch" width="300" height="200" /></a>Vermutlich hat nahezu jedes Homeoffice, jeder Kleinunternehmer und mittleres Unternehmen heutzutage einen Internetanschluss. Schnell kommt zum DSL-Anschluss mit Splitter, Modem und/oder Router noch ein Switch hinzu damit mehrere Rechner oder Accesspoints in das lokale Netzwerk eingebunden werden können. Wer zusätzlich ein NAS-System als zentralen Datenspeicher betreibt, evt. sogar mit zusätzlichen externen Festplatten, hat schnell ein kleines Netzwerk aufgebaut. Mein Netzwerkequipment das ich für das Homeoffice und die private IT benötige ist in etwa dieser Form strukturiert. Damit jegliche Hardware möglichst zentral untergebracht ist steht sie in der Nähe der Netzabschlussdose der Telekom im Keller. Lange Zeit war dort alles weitestgehend ungeschützt auf einem kleinen Tisch untergebracht und die Kabel endeten nahezu ungeordnet. Sicher, Kabelsalat ist gesund. Jedoch ist es ein deutlich besseres Gefühl wenn der &#8220;Hauptnerv&#8221; der eigenen IT-Infrastruktur vor äußeren Einflüssen geschützt ist. Es musste also Abhilfe geschaffen werden.</p>
<p>Bei der Suche nach einer geeigneten Lösung bin ich auf <a href="http://www.lehmann-it.de/">19 Zoll Netzwerkschränke</a> von <strong>Lehmann IT</strong> gestossen. Das Sortiment bietet für nahezu jeden Bedarf eine passende Lösung, angefangen bei kleinen Schränken für KMUs (kleine und mittlere Unternehmen) bis hinzu den Anforderungen von Rechenzentren. Da ich selbst allerdings keine 19&#8243; Server (mehr) Zuhause betreibe reicht für meine Anforderungen ein kleiner Netzwerkschrank aus. Dieser ist nicht sehr tief, nimmt somit kaum Platz vom Raum selbst in Abspruch und bietet dank des 19&#8243; Standard die Möglichkeit dort dennoch ein Patchpanel unterzubringen. Daher können die Netzwerkkabel sauber angeschlossen werden. Im Gehäuse mit 7 Höheneinheiten ist zudem genug Platz für das NAS-System, externe Festplatten die im Wechsel für Backups genutzt werden und meinen Switch und den kleinen Linux Router. Dank der Wandmontage ist die sensible IT-Infrastruktur nun vor Staub, unabsichtlichen Gewalteinwirkungen und Grundwasser bis ca. 1,5m Höhe geschützt. Und sollte das Wasser jemals so hoch steigen wäre die IT etwas worum ich mir als Letztes Sorgen machen würde, da immer eine Backupplatte in einem Schließfach in der Bank untergebracht ist. Ganz klar zur Nachahmung empfohlen.</p>
<p>&nbsp;</p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/War3Jn4ifFX-zs1_IlPwMwQFq_U/0/da"><img src="http://feedads.g.doubleclick.net/~a/War3Jn4ifFX-zs1_IlPwMwQFq_U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/War3Jn4ifFX-zs1_IlPwMwQFq_U/1/da"><img src="http://feedads.g.doubleclick.net/~a/War3Jn4ifFX-zs1_IlPwMwQFq_U/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=2TzUN6lanqA:L0qX_gz2x08:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=2TzUN6lanqA:L0qX_gz2x08:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=2TzUN6lanqA:L0qX_gz2x08:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=2TzUN6lanqA:L0qX_gz2x08:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/2TzUN6lanqA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/11/kmu-netzwerkschraenke/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/11/kmu-netzwerkschraenke/</feedburner:origLink></item>
		<item>
		<title>Ist Outsourcing etwas für mein Unternehmen?</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/csHLzJKHj4g/</link>
		<comments>http://the-luckyduck.de/2011/11/ist-outsourcing-etwas-fur-mein-unternehmen/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 19:19:35 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[outsourcing]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1148</guid>
		<description><![CDATA[Im Gastartikel von Wojciech Dziedzic, twago.de, geht es um Outsourcing. Er hat an der Humboldt Universität zu Berlin Germanistische Linguistik, Anglistik und Polonistik studiert und seinen Magister erworben. Er arbeit nun bei Twago im Bereich Online Marketing. Viele Selbstständige und Freelancer machen den Fehler und sind nur auf dem lokalem Markt tätig. Manche haben vielleicht Angst [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><em><a href="http://the-luckyduck.de/wp-content/uploads/2011/11/outsourcing.jpg"><img class="alignright size-medium wp-image-1159" title="Global Customer Support Network" src="http://the-luckyduck.de/wp-content/uploads/2011/11/outsourcing-300x281.jpg" alt="" width="300" height="281" /></a><br />Im Gastartikel von Wojciech Dziedzic, <a href="http://www.twago.de/">twago.de</a>, geht es um Outsourcing. Er hat an der Humboldt Universität zu Berlin Germanistische Linguistik, Anglistik und Polonistik studiert und seinen Magister erworben. Er arbeit nun bei Twago im Bereich Online Marketing.</em></p>
<p>Viele Selbstständige und Freelancer machen den Fehler und sind nur auf dem lokalem Markt tätig. Manche haben vielleicht Angst einen Schritt weiter zu gehen. Andere kennen die Vorteile des größeren Arbeitsmarktes nicht. Es gibt auch welche, die von Outsourcing wahrscheinlich noch nichts gehört haben oder sehr wenig zu diesem Thema wissen. Eine direkte Übersetzung dieses Begriffs würde etwa äußere (out) Quelle (source) bedeuten. In einfachen Worten gesagt, heißt es nicht mehr, als die Vermittlung eines Projekts an einen Spezialisten, der sich außerhalb des eigenen Unternehmens befindet. Wie das funktioniert ? Ist es sicher? Ist das etwas für mein Unternehmen? Diese Frage haben sich bestimmt viele Unternehmer gestellt. Die Ergebnisse aus dem amerikanischen Arbeitsmarkt zeigen, dass etwa 30 Prozent aller Beschäftigten als Freelancer arbeiten. Das sind Leute, an die man Projekte „outsourcen“ kann. Um das an einem Beispiel zu zeigen, kann man folgende Situation nehmen:</p>
<p>Das Unternehmen „A“ braucht eine neue Webseite mit einigen Javascripten und dynamischen PHP-Effekten. Die Firma kann natürlich Spezialisten auf dem lokalen Markt suchen, aber eine globale Suche wäre viel effektiver und könnte auch einen Dienstleister anbieten, der diesen Auftrag für einen günstigeren Preis machen würde. Seit Jahrhunderten gilt die Regel, dass Angebot und Nachfrage den Preis bestimmen. Das Unternehmen „A“ entscheidet sich einen Spezialisten auf dem globalen Markt zu finden. Aber wie? An dieser Stelle bieten sich die Dienste von Online-Projektvermittlungsplattformen, wie zum Beispiel <a href="http://www.twago.de">twago</a>. Bei den meisten Anbeiter ist die Registrierung kostenlos. Man schreibt ein Projekt aus und wartet auf die Angebote der passenden Spezialisten. Wenn sich das Unternehmen schon für einen Freelancer entscheidet, oder bei komplexeren Projekten für mehr Spezialisten, wobei jeder seine Teilaufgabe des Projekts macht, kann die Arbeit anfangen. Am Ende bekommt der Dienstleister sein Geld überwiesen und beide Seiten können eine Bewertung abgeben. Das ist sehr hilfreich für die Zukunft und bildet eine gewisse Reputation im Web sowohl für den Freelancer, als auch für den Auftraggeber.</p>
<p>&nbsp;</p>
<h2>Externe Links</h2>
<ul>
<li><a href="http://www.twago.de">Projektauktionen auf Twago.de</a></li>
</ul>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/09zbu_sjwUh98YZa6VtfiqUINWo/0/da"><img src="http://feedads.g.doubleclick.net/~a/09zbu_sjwUh98YZa6VtfiqUINWo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/09zbu_sjwUh98YZa6VtfiqUINWo/1/da"><img src="http://feedads.g.doubleclick.net/~a/09zbu_sjwUh98YZa6VtfiqUINWo/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=csHLzJKHj4g:u7DJYhqN3ms:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=csHLzJKHj4g:u7DJYhqN3ms:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=csHLzJKHj4g:u7DJYhqN3ms:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=csHLzJKHj4g:u7DJYhqN3ms:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/csHLzJKHj4g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/11/ist-outsourcing-etwas-fur-mein-unternehmen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/11/ist-outsourcing-etwas-fur-mein-unternehmen/</feedburner:origLink></item>
		<item>
		<title>Server Überwachung mit serverstate.de</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/4nqqINxvTIQ/</link>
		<comments>http://the-luckyduck.de/2011/08/server-monitoring-serverstate/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 18:57:23 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Netzwelt]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=1002</guid>
		<description><![CDATA[Bei der Suche nach einem zuverlässigen und zugleich günstigen Anbieter für Server Überwachung bin ich auf serverstate.de gestossen. Ich habe zwar eigene Server die ich bereits mit Nagios überwache, jedoch vermittelt eine externe Überwachung ein zusätzlich beruhigendes Gefühl. Zudem habe ich derzeit keine Anbindung an ein SMS Gateway. Fällt also der falsche Server aus, bekomme [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Bei der Suche nach einem zuverlässigen und zugleich günstigen Anbieter für <a href="http://www.serverstate.de">Server Überwachung</a> bin ich auf <a href="http://www.serverstate.de">serverstate.de</a> gestossen. Ich habe zwar eigene Server die ich bereits mit Nagios überwache, jedoch vermittelt eine externe Überwachung ein zusätzlich beruhigendes Gefühl. Zudem habe ich derzeit keine Anbindung an ein SMS Gateway. Fällt also der falsche Server aus, bekomme ich die Alarmmeldung nicht, da der Mailserver nicht mehr erreichbar ist. Ebenso könnten Probleme beim Provider verhindern dass die Alarmmeldung per E-Mail empfangen werden kann.</p>
<h2>Anforderungen an den Monitoring Dienst</h2>
<p>In erster Linie wichtig war mir nicht die Möglichkeit komplexe Testszenarien abbilden zu können wichtig. Wesentliche Kriterien bei der Auswahl des richtigen Monitoring Dienstes waren, da es sich für mich um eine zusätzliche Sicherheit handelt, eher die folgenden Faktoren:</p>
<ul>
<li>günstige Konditionen (max ca. 5 Euro / Monat)</li>
<li>Zuverlässigkeit</li>
<li>SMS Benachrichtigung verfügbar</li>
</ul>
<div>Speziell die Zuverlässigkeit kann natürlich im Vorfeld nur schwer ermittelt werden. Bereits jetzt kann ich allerdings sagen dass alle Tests die ich verteilt über einem Zeitraum von ca. 2 Wochen gemacht habe alle funktioniert haben. Dazu habe ich per Cron gesteuert Dienste mittels IPTables gesperrt und oder kurzzeitig ICMP Pakete verworfen. Die Alarm-Meldung kam ebenso wie die Recovery-Meldung zeitnah an. Die Überwachungsaufträge werden zudem von verschiedenen Standorten ausgeführt. So wird  sichergestellt dass nicht ein lokales Problem bei serverstate.de selbst die Ursache für den gemeldet Ausfall ist.</div>
<h2>Server Monitoring mit serverstate.de</h2>
<p>Das Angebot von serverstate.de ist unter den Monitoring Lösungen noch relativ neu, bietet aber für meine Zwecke die optimalen Voraussetzungen. So kann ich bei geringen monatlichen Kosten die grundlegende Erreichbarkeit sowie elementare Dienste prüfen. All dies vereint serverstate.de aus meiner Sicht mit einer unkomplizierten Registrierung und einer sehr einfachen Einrichtung von Überwachungsaufträgen sowie Empfängern von Alarmmeldungen. Auch das <a href="http://serverstate.de/prices/">Tarifmodell</a> ist sehr transparent gestaltet. Die Kosten für einen Überwachungsauftrag, welcher die Überwachung eines konkreten Dienstes darstellt, richten sich nach dem Abstand zwischen den einzelnen Prüfungen:</p>
<ul>
<li>60 Minuten: 0,07 EUR/Monat</li>
<li>30 Minuten:  0,14 EUR/Monat</li>
<li>5 Minuten:  0,85 EUR/Monat</li>
<li>1 Minute:  4,32 EUR/Monat</li>
</ul>
<p>Ich habe mich für eine Checkintervall von 15 Minuten entschieden und zahle somit für jeden Auftrag 0,29 € im Monat! Für jede notwendige SMS fallen dann jeweils noch einmal 0,15 € an, was ebenfalls vergleichsweise günstig ist. Insgesamt überwache ich 3 Dienste, habe also somit monatliche Kosten von 0,87 € (vorrausgesetzt es kommt nicht zu einem Ausfall). Das unterschreitet mein ursprüngliches Budget deutlich.</p>
<p>&nbsp;</p>
<h2>serverstate.de Features</h2>
<p>Es können für die eigenen Testszenarien verschiedene Prüfungen konfiguriert werden. Diese werden über ein schlichtes, aber sehr übersichtliches Kundeninterface, verwaltet:</p>
<p><a href="http://serverstate.de/features/"><img class="alignnone size-medium wp-image-1017" title="sensors" src="http://the-luckyduck.de/wp-content/uploads/2011/08/sensors-300x233.png" alt="Server Monitoring mit serverstate.de" width="300" height="233" /></a></p>
<p>Zu den Überwachungsaufträgen wird zu jeder konfigurierten Prüfung eine eigene Statistik angelegt:</p>
<p><a href="http://serverstate.de/features/"><img class="alignnone size-medium wp-image-1018" title="reports" src="http://the-luckyduck.de/wp-content/uploads/2011/08/reports-300x161.png" alt="" width="300" height="161" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Ausbaufähig ist definitiv noch die Unterstützung der verfügbaren Tests. Dies ist der einzige Punkt an bei dem ich Verbesserungen vorzuschlagen hätte. Ein einfacher Test von TCP/UDP Ports wäre z.B. sehr hilfreich (ohne Protokoll Prüfung). Bei den Prüfungen selbst werden derzeit nur wenige Protokolle unterstützt:</p>
<ul>
<li>http / https (inkl. Inhaltsprüfung)</li>
<li>ftp</li>
<li>pop3</li>
<li>smtp</li>
</ul>
<div>Dies wird aber sicher noch weiter ausgebaut, der Service ist wie gesagt noch relativ neu.</div>
<h2>Fazit</h2>
<div>Für meine Zwecke sind die gegebenen Möglichkeiten mehr als ausreichend. Zudem ist der Preis für meine Konfiguration mit unter einem Euro pro Monat unschlagbar günstig. Jeder neue Benutzer hat die Möglichkeit komplett ohne Risiko oder Bindung den Dienst zwei Wochen lang zu testen. Dies ist mehr als empfehlenswert. Einfach mal ausprobieren!</div>
<h2>Links</h2>
<div>
<ul>
<li><a href="http://www.serverstate.de">Server Monitoring mit serverstate.de</a></li>
</ul>
</div>
<p>&nbsp;</p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/tgX01SEG969VJdMRyzhyf3bQXCU/0/da"><img src="http://feedads.g.doubleclick.net/~a/tgX01SEG969VJdMRyzhyf3bQXCU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tgX01SEG969VJdMRyzhyf3bQXCU/1/da"><img src="http://feedads.g.doubleclick.net/~a/tgX01SEG969VJdMRyzhyf3bQXCU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4nqqINxvTIQ:xSJeHcuFePI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4nqqINxvTIQ:xSJeHcuFePI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=4nqqINxvTIQ:xSJeHcuFePI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=4nqqINxvTIQ:xSJeHcuFePI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/4nqqINxvTIQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/08/server-monitoring-serverstate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/08/server-monitoring-serverstate/</feedburner:origLink></item>
		<item>
		<title>Website Monitoring mit #PHP? LiveTest !</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/-iNNBV1eVu0/</link>
		<comments>http://the-luckyduck.de/2011/03/website-monitoring-livetest/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 15:00:52 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[Opensource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[livetest]]></category>
		<category><![CDATA[monitoring]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=971</guid>
		<description><![CDATA[&#160; LiveTest ist ein schlankes Monitoring Tool für Webseiten. Es ist auf die Überwachung unterschiedlichster Faktoren eines Webauftritts ausgelegt und bietet dank flexibler Architektur ideale Voraussetzungen für Erweiterungen. Interessante Features sind z.B. die Überwachung von HTTP Status Codes, Prüfung von HTML Dokumenten auf vorhandene/nichtvorhandene Strings, Suche nach regulären Ausdrücken und die Überwachung der Seitengröße. Einmal [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>&nbsp;</p>
<p><img class="size-thumbnail wp-image-979 alignright" title="Webseiten überwachen" src="http://the-luckyduck.de/wp-content/uploads/2011/03/monitoring-150x150.jpg" alt="" width="150" height="150" /></p>
<p style="text-align: justify;"><a href="http://www.phmlabs.com/livetest/Neu.html">LiveTest</a> ist ein schlankes <strong>Monitoring Tool</strong> für Webseiten. Es ist auf die Überwachung unterschiedlichster Faktoren eines Webauftritts ausgelegt und bietet dank flexibler Architektur ideale Voraussetzungen für Erweiterungen. Interessante Features sind z.B. die Überwachung von HTTP Status Codes, Prüfung von HTML Dokumenten auf vorhandene/nichtvorhandene Strings, Suche nach regulären Ausdrücken und die Überwachung der Seitengröße. Einmal als Cronjob eingerichtet meldet es zuverlässig alle Abweichungen vom Normalzustand. Initiator und Hauptentwickler von LiveTest, Nils Lagner von phphatesme.com, hat da ein echt tolles Projekt ins Leben gerufen!</p>
<p style="text-align: justify;"><strong>LiveTest</strong> bietet dank einer streng objektorientierten Implementierung mehr als optimale Voraussetzungen um benötigte TestCases schnell und sauber implementieren zu können. TestCases sind vereinfacht dargestellt PHP Klassen in denen konkrete Tests abgebildet werden. Die Applikation basiert nicht unmittelbar auf dem Zend Framework, macht sich aber einige der Klassen dieser mächtigen Bibliothek zu nutze. Für eigene TestCases steht damit allerdings eine sehr umfangreiche Basis bereit und eine ganze Reihe an Möglichkeiten entsteht. Z.b. habe ich irgendwann mal ein Tool gesucht das automatisch HTML Dokumente validieren kann. Da ich finde dass LiveTest wie geschaffen für derartige Anwendungen ist fehlte aus meiner Sicht ein Validator für HTML. Den habe ich in den letzten Tagen als TestCase implementiert. Nach ein paar Anpassungen die ich in Absprache mit Nils noch gemacht habe wird er nun in <a href="http://www.phmlabs.com/livetest/Neu.html">LiveTest aufgenommen</a>. Das freut mich natürlich! <img src='http://the-luckyduck.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Wer ebenfalls mithelfen möchte dieses sinnvolle Tool zu entwickeln sollte unbedingt auf der <a href="http://www.phmlabs.com/livetest">neuen Webseite</a> vorbeischauen (Achtung: noch ganz neu) und <a href="https://github.com/phphatesme/LiveTest">LiveTest bei Github besuchen</a>.</p>
<p style="text-align: justify;">Das Tool ist aber nicht nur rein pragmatisch betrachtet toll. Es wird in PHP entwickelt und ist wirklich super strukturiert. Ein Musterbeispiel für aufgeräumten und sauberen PHP Code. Der Quellcode wird von Unittests abgedeckt (mein Validator übrigens auch), native PHP Namespaces die seit PHP 5.3 zur Verfügung stehen strukturieren den Quellcode und Events/Listener führen zu einer klaren Trennung von Verantwortlichkeiten der Klassen. Alles in allem bin ich von der Applikation total begeistert. Noch vor ca. einem Jahr hätte ich derartige Aufgaben aus dem Bauch heraus von Python erledigen lassen. LiveTest ist eine Anwendung mehr die zeigt dass PHP auch dafür bestens geeignet ist. Alles in allem merkt man dass viel Liebe und kreative Energie schon in die Planung geflossen sind. Und genau das macht LiveTest auch für Entwickler interessant. Saubere PHP Entwicklung die für jeden überschaubar ist. Es soll sogar Leute geben die auch heutzutage von objektorientierter Programmierung nichts halten. Hier zeigt es sich am Beispiel welche Vorteile ein elegantes Software Design haben kann. Also unbedingt mal anschauen!</p>
<p>&nbsp;</p>
<ul>
<li><a href="http://www.phmlabs.com/livetest/Erste-Schritte.html">Installation von LiveTest</a></li>
<li><a href="https://github.com/phphatesme/LiveTest">LiveTest bei Github</a></li>
<li><a href="http://www.phmlabs.com/livetest">LiveTest Homepage</a></li>
</ul>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/ErM8U3ND5LxNgzE-4ndNRlLSUE4/0/da"><img src="http://feedads.g.doubleclick.net/~a/ErM8U3ND5LxNgzE-4ndNRlLSUE4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ErM8U3ND5LxNgzE-4ndNRlLSUE4/1/da"><img src="http://feedads.g.doubleclick.net/~a/ErM8U3ND5LxNgzE-4ndNRlLSUE4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=-iNNBV1eVu0:JyI9se6Gpig:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=-iNNBV1eVu0:JyI9se6Gpig:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=-iNNBV1eVu0:JyI9se6Gpig:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=-iNNBV1eVu0:JyI9se6Gpig:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/-iNNBV1eVu0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/03/website-monitoring-livetest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/03/website-monitoring-livetest/</feedburner:origLink></item>
		<item>
		<title>Einfach sicher(rer): #YubiKey Authentifizierung</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/bxhI_YYqmfQ/</link>
		<comments>http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 07:30:59 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[yubikey]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=910</guid>
		<description><![CDATA[&#160; Der Artikel im letzten PHP Magazin über den YubiKey hat mich neugierig gemacht. Der YubiKey wirkte wie eine günstige OTP (One Time Password) Lösung. Eigentlich schien alles eher unspektakulär da ich mit One Time Password immer den Abschied von gespeicherten Logins und viel Tipparbeit in Verbindung gebracht habe. Aus Erfahrung kann ich jetzt jedoch [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>&nbsp;</p>
<p><a href="http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/"><img class="alignright size-medium wp-image-954" title="YubiKey Authentifizierung" src="http://the-luckyduck.de/wp-content/uploads/2011/03/yubikey-authentifizierung-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>Der Artikel im letzten PHP Magazin über den <a href="https://store.yubico.com/store/catalog/product_info.php?ref=217&amp;products_id=2&amp;affiliate_banner_id=1">YubiKey</a> hat mich neugierig gemacht. Der <strong>YubiKey</strong> wirkte wie eine günstige OTP (One Time Password) Lösung. Eigentlich schien alles eher unspektakulär da ich mit <span style="text-decoration: underline;">One Time Password</span> immer den Abschied von gespeicherten Logins und viel Tipparbeit in Verbindung gebracht habe. Aus Erfahrung kann ich jetzt jedoch sagen: Der YubiKey ist alles andere als umständlich! Im Gegensatz zu anderen OTP Ansätzen, z.B. dem iTan-Verfahren, muss man hier nicht manuell ein Passwort eingeben. Dies übernimmt der <strong>YubiKey</strong>!</p>
<p>Zudem stellt die Herstellerfirma Yubico offene Software für den YubiKey zur Verfügung. Das hat mich dann überzeugt. Für 45$ habe ich direkt zwei <a href="https://store.yubico.com/store/catalog/product_info.php?ref=217&amp;products_id=2&amp;affiliate_banner_id=1">YubiKeys bestellt</a>. Eine erste Überraschung war dann die Lieferzeit. Die angegebenen 7-14 Tage wurde mit 4 Tagen deutlich unterschritten! Sonntags bestellt und Donnerstags bereits Post aus England! Ein erster Pluspunkt also: Bei Bedarf kann man schnell an neue YubiKeys kommen.</p>
<p>&nbsp;</p>
<h2>YubiKey: So funktionierts</h2>
<p>Der YubiKey emuliert eine USB Tastatur und gibt per Knopfdruck ein 44-stelliges Passwort aus. Dies ist je nach konfiguriertem Modus immer wieder ein anderes (OneTime Password) oder jeweils das selbe Passwort (static). Unterstützt eine Webseite oder anderes System die Authentifizierung mittels YubiKey werden die Benutzerdaten über einen entsprechenden Webservice validiert. Yubico stellt diesen Dienst zur Verfügung. Zusätzlich wird eine offene Software angeboten über die ein eigener Webservice eingerichtet werden kann. Zum einen ist also wirklich alles transparent und zum anderen müssen derart empfindliche Daten und Dienste nicht aus der Hand gegeben werden. Die Software für die <a href="http://code.google.com/p/yubikey-val-server-php/">Yubico API</a> kann über Google Code bezogen werden, besteht aber aus zwei Teilen. Eine PHP Applikation für die Authentifizierung und ein sogenanntes <a href="http://code.google.com/p/yubikey-ksm/">Key Storage Modul</a> in dem die Benutzerdaten gespeichert werden.</p>
<p>Ich persönlich halte die Möglichkeit OneTime-Passwörter zu generieren (derzeit) vor allem für geschlossene Benutzerkreise interessant. Schön wäre natürlich wenn die Lösung flächendeckend Anklang findet. Es erspart Aufwand und die &#8220;Passwort vergessen&#8221; Funktion. Der <a href="https://store.yubico.com/store/catalog/product_info.php?ref=217&amp;products_id=2&amp;affiliate_banner_id=1">YubiKey</a> ist aber auch jetzt schon unschlagbar praktisch: Man kann unkompliziert in den statischen Modus wechseln. Der Yubikey gibt in dem Fall immer wieder dass gleiche 44 Zeichen lange Passwort aus. Für die alltägliche Nutzung ungemein praktisch. Mein Vater nutzt sein Exemplar im statischen Modus mit großer Zufriedenheit. Einziger Minuspunkt der mir insgesamt aufgefallen ist: Im statischen Modus muss dieses Passwort einem Account zuordnen. Der YubiKey gibt jedoch nicht nur ein Passwort sondern ebenfalls &#8220;\n&#8221; (Enter) mit aus. Das führt bei der Registrierung von Accounts dazu dass Formulare frühzeitig abgeschickt werden. Ein einmaliger Umweg über copy&amp;paste ist im statischen Modus also leider notwendig. Werfen wir einfach mal einen Blick auf die Praxis.</p>
<p>&nbsp;</p>
<h2>WordPress mit YubiKey Authentifizierung</h2>
<p>Meine ersten Erfahrungen mit YubiKey OneTime-Passwörtern habe ich mit dem YubiKey Wordpress Plugin gesammelt. Es kann ganz normal über die Pluginverwaltung von WordPress installiert werden. Ich habe dann einfach den Webservice von Yubico verwendet um die Authentifizierung durchzuführen. Man benötigt lediglich einen API Key der auf folgender Seite generiert werden kann. Man muss nur den eigenen YubiKey bereithalten:</p>
<p style="text-align: center;"><a href="https://upgrade.yubico.com/getapikey/"><img class="size-medium wp-image-920 aligncenter" title="YubiKey - get api key" src="http://the-luckyduck.de/wp-content/uploads/2011/03/yubico-getapikey-300x231.png" alt="" width="300" height="231" /></a></p>
<ul>
<li><a href="https://upgrade.yubico.com/getapikey/">Yubico API Key generieren</a> - <a href="https://upgrade.yubico.com/getapikey/">https://upgrade.yubico.com/getapikey/</a></li>
</ul>
<p>Dem Plugin fehlt aus meiner Sicht noch eine konfigurierbare API URL. Man kann wie bereits erwähnt einen eigenen Webservice bereitstellen und Benutzerdaten auf der eigenen Infrastruktur bereitstellen. Wenn Sicherheitsauflagen erfüllt werden müssen, z.B. im Rahmen einer PCI DSS Zertifizierung, kann dies zwingend erforderlich sein. Eine zusätzliche Option für WordPress wäre aber in jedem Fall schön. Zurück zum Thema. Ist dass Plugin installiert muss in der Plugin-Konfiguration der soeben generierte API Key hinterlegt werden. Die WordPress Login Maske zeigt nun ein neues Eingabefeld:</p>
<p style="text-align: center;"><a href="http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/"><img class="size-medium wp-image-921 aligncenter" title="WordPress YubiKey Login" src="http://the-luckyduck.de/wp-content/uploads/2011/03/wordpress-yubikey-login-280x300.png" alt="" width="280" height="300" /></a></p>
<p style="text-align: center;">&nbsp;</p>
<p>Nun muss für jeden Account den wir mittels Multifactor Authentifizierung zusätzlich absichern möchten die YubiKey OTP Authentifizierung aktiviert werden. Dafür gibt es nun eine neue Sektion in den Benutzereinstellungen:</p>
<p style="text-align: center;"><a href="http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/"><img class="aligncenter size-medium wp-image-934" title="Wordpress - YubiKey Benutzer Konfiguration " src="http://the-luckyduck.de/wp-content/uploads/2011/03/yubikey-wordpress-user-300x75.png" alt="" width="300" height="75" /></a></p>
<p>&nbsp;</p>
<p>Nun ist der Account abgesichert und kann nur noch mit einer Kombination aus Zugangsdaten und YubiKey OTP verwendet werden. Insgesamt wird die Sicherheit von WordPress Accouns deutlich verstärkt.</p>
<p>&nbsp;</p>
<h2>YubiKey mit statischem Passwort</h2>
<p>Einen YubiKey kann man im statischen Modus betreiben um immer wieder dass gleiche Passwort auszugeben. Das ist eine elegante Alternative zur Eingabe von eigenen Passwörtern. Der Hersteller Yubico stellt ein Tool für die Verwaltung von YubiKeys bereit. Unter Ubuntu Linux kann es direkt über APT installiert werden. Abhängig davon wie alt/neu der YubiKey ist kann es allerdings zu Problemen kommen. Ich habe scheinbar eine aktuelle Hardware Revision (2.2.7) bekommen und konnte mit der Ubuntu Maverick Version (1.3.2) nicht arbeiten. Es gibt bereits eine aktueller Version die auch in Debian (unstable) bereits enthalten ist. Einen entsprechenden Ubuntu Sync Request habe ich bereits hinterlegt. Vielleicht schafft es die neue Version ja trotz FeatureFreeze für 11.04 (natty) noch in die kommende Ubuntu Version. Installiert werden kann dass Paket über APT wie folgt:</p>
<p><span style="text-decoration: underline;"><br />
</span></p>
<pre>
$ sudo apt-get install ﻿﻿﻿yubikey-personalization
</pre>
<p>&nbsp;</p>
<p>Die Alternative dazu ist die direkte Installation von Debian Paketen. Ist kein großes Problem da derzeit dass Ubuntu Paket ohnehin unverändert von Debian übernommen wird. Wenn also dass Ubuntu Paket mal aktualisiert wird ist sehr wahrscheinlich bei euch dass Paket einfach schon installiert. Welches Paket benötigt wird hängt von der Rechnerarchitektur ab. Einfach die beiden benötigten Pakete herunterladen (Bibliothek + Software) und über dpkg installieren. Hier am Beispiel von amd64:</p>
<pre>

$ wget http://ftp.de.debian.org/debian/pool/main/liby/libyubikey/libyubikey0_1.7-1_amd64.deb

$ wget http://ftp.de.debian.org/debian/pool/main/y/yubikey-personalization/libykpers-1-1_1.5.0-1_amd64.deb

$ sudo dpkg -i *.deb
</pre>
<p>&nbsp;</p>
<p>Jetzt kann über das Tool &#8216;ykpersonalize&#8217; der YubiKey konfiguriert werden. Eine detailierte Anleitung dazu findet man direkt in der <a href="https://github.com/Yubico/yubikey-personalization/wiki/Read-Me">ReadMe</a>. Den YubiKey von meinem Vater habe ich mit dem Parameter &#8220;-ostatic-ticket&#8221; in den statischen Modus versetzt. Die exakten von mir verwendeten Werte bleiben natürlich mein Geheimnis:</p>
<p><a href="http://the-luckyduck.de/wp-content/uploads/2011/03/yubikey-static-password.png"><img class="aligncenter size-full wp-image-966" title="yubikey-static-password" src="http://the-luckyduck.de/wp-content/uploads/2011/03/yubikey-static-password.png" alt="" width="449" height="209" /></a></p>
<p>&nbsp;</p>
<p>Anschließend gibt der YubiKey ein statisches Passwort aus. Das Tool funktioniert unter Mac OS X ebenfalls. Die Mac OS X GUI Version, die von einer unabhängigen Firma bereitgestellt wird, wollte bei mir gar nicht. Die Software für Windows hat mich nicht wirklich interessiert. Hier ist jeder eingeladen selbst zu probieren.</p>
<p>&nbsp;</p>
<h2>Fazit</h2>
<p>Der YubiKey hat mich wirklich mehr als begeistert. Ich hoffe dass in Zukunft viele Webseiten die Authentifizierung per YubiKey OTP unterstützen, es ist einfach genial. Aber egal ob und wann man mit einer weiten Verbreitung rechnen kann ist der YubiKey bereits jetzt eine Bereicherung. Ein 44-Zeichen langes Passwort ist sicherer als ein &#8220;normales&#8221; Passwort aus unserem Alltag. Und dass muss man nicht einmal mehr eintippen. Mein Vater nutzt den YubiKey unter Mac OS X und im statischen Modus und kommt damit super zurecht. Ich habe bereits weitere YubiKeys bestellt. Es wird auch sicher erneut etwas über den YubiKey zu lesen geben. Mögliche Themen sind z.B. &#8220;Zend_Auth und YubiKeys&#8221; oder &#8220;ein eigener YubiKey Webservice&#8221;. Hier noch einmal der Link zum Webshop von Yubico. Ausprobieren lohnt sich. Es macht dass Leben ein Stück weit einfacher.</p>
<ul>
<li><a href="https://store.yubico.com/store/catalog/product_info.php?ref=217&amp;products_id=2&amp;affiliate_banner_id=1">YubiKeys bestellen</a></li>
</ul>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/bKmDLaXaQB9d0lzBIxbW6qZA3AM/0/da"><img src="http://feedads.g.doubleclick.net/~a/bKmDLaXaQB9d0lzBIxbW6qZA3AM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bKmDLaXaQB9d0lzBIxbW6qZA3AM/1/da"><img src="http://feedads.g.doubleclick.net/~a/bKmDLaXaQB9d0lzBIxbW6qZA3AM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=bxhI_YYqmfQ:yQBkmt91R9k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=bxhI_YYqmfQ:yQBkmt91R9k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=bxhI_YYqmfQ:yQBkmt91R9k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=bxhI_YYqmfQ:yQBkmt91R9k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/bxhI_YYqmfQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/03/yubikey-einfach-sicher/</feedburner:origLink></item>
		<item>
		<title>Continuous Integration mit Jenkins, PHPUnit und dem Zend Framework</title>
		<link>http://feedproxy.google.com/~r/JanBrinkmann/~3/8w5ZjLDskek/</link>
		<comments>http://the-luckyduck.de/2011/03/continous-integration-mit-jenkins-phpunit-und-dem-zend-framework/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 22:00:04 +0000</pubDate>
		<dc:creator>Jan Brinkmann</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[phpunit]]></category>

		<guid isPermaLink="false">http://the-luckyduck.de/?p=783</guid>
		<description><![CDATA[Angeregt von einem netten Kommentar zu meinem 2. Artikel zu nachhaltiger PHP Entwicklung (Dank an Thorsten Pohl nochmal!) habe ich mich eingehend mit Continuous Integration befasst. Seitdem hat mich das Konzept &#8220;Test-Driven-Development&#8221; infiziert. Es ist ein tolles Gefühl wenn man verifizieren kann ob eine Änderung ein unerwartetes Problem (vielleicht an ganz anderer Stelle) erzeugt. Man kann viel [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p><a href="http://the-luckyduck.de/wp-content/uploads/2011/03/continuos_integration.jpg"><img class="alignright size-medium wp-image-879" title="Continuous Integration - Zend Framework und Jenkins" src="http://the-luckyduck.de/wp-content/uploads/2011/03/continuos_integration-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p style="text-align: justify;">Angeregt von einem netten Kommentar zu meinem 2. Artikel zu <a href="http://the-luckyduck.de/2011/01/tipps-fur-nachhaltige-php-entwicklung-fortsetzung/">nachhaltiger PHP Entwicklung</a> (Dank an <a href="http://www.torsten-pohl.de/">Thorsten Pohl</a> nochmal!) habe ich mich eingehend mit <strong>Continuous Integration</strong> befasst. Seitdem hat mich das Konzept &#8220;Test-Driven-Development&#8221; infiziert. Es ist ein tolles Gefühl wenn man verifizieren kann ob eine Änderung ein unerwartetes Problem (vielleicht an ganz anderer Stelle) erzeugt. Man kann viel mutiger Änderungen vornehmen und verringert die Wahrscheinlichkeit 3 von 2 möglichen Fehler zu produzieren. Zusätzlich ist auch die Auswirkung auf den Stil der eigenen Programmierung durchaus positiv. Wirft man einen Blick auf die Auswertungen der <strong>Code Coverage</strong>, dem PHP Mess Detector und ähnlichem überlegt man hier und dort einmal mehr ob es auch anders geht, ob vielleicht eine weitere Methode sinnvoll wäre oder ob die eine oder andere Bedingung notwendig ist. Insgesamt halte ich den Mehraufwand nach einiger Übung für sinnvoll, speziell bei größeren Projekten die man etwas länger begleitet. Derzeit arbeite ich mich Schritt für Schritt durch meine Kopie des Buches <a href="http://www.amazon.de/gp/product/3446419233?ie=UTF8&amp;tag=luckyduck-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=3446419233">Softwarequalität in PHP-Projekten</a><img style="border: none !important; margin: 0px !important;" src="http://www.assoc-amazon.de/e/ir?t=luckyduck-21&amp;l=as2&amp;o=3&amp;a=3446419233" alt="" width="1" height="1" border="0" /> von <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a> . Das Buch geht deutlich über Unittests hinaus und hat meine Sicht auf Software Entwicklung generell umgekrempelt. Eine absolute Bereicherung für jeden Entwickler. Eine klare Leseempfehlung an dieser Stelle. Aber, zurück zum Thema.</p>
<h2>phpUnderControl</h2>
<p style="text-align: justify;">Die erste CI-Lösung mit der ich ein wenig experimentiert habe war wie empfohlen <a href="http://phpundercontrol.org/">phpUnderControl</a>. Irgendwie hat mir allerdings die Integration in ein Linuxsystem nicht so richtig gefallen. Ich hätte am liebsten gleich einiges anders gestaltet. So fehlte z.B. ein gutes Initskript, eine FHS-konforme Aufteilung der Daten und ähnliches. Ich bin wirklich nicht pedantisch was sowas angeht, aber es fühlte sich einfach &#8220;komisch&#8221; an die Daten gesammelt unter bspw. /opt zu &#8220;parken&#8221;. Ist keine stumpfe Kritik. Ich bin mir bewusst dass der Opensource Gedanke alle Wege öffnet meine eigenen Gedanken einzubringen. Leider fehlte mir derzeit, wie für soviele andere Projekte die ich gerne unterstützen würde, jedoch die Zeit. Wie der Zufall aber so will bin ich Anfang des Jahres durch die ganze Aufregung rund um Jenkins (ehemals Hudson) auf <span style="text-decoration: underline;">die</span> <strong>Continuous Integration</strong> Lösung aus der Java Welt aufmerksam geworden. In der Hoffnung eine &#8220;out of the box Lösung&#8221; zu finden habe ich beschlossen <strong>Jenkins</strong> eine Chance zu geben. Was für eine tolle Idee!</p>
<h2>Jenkins für PHP Projekte</h2>
<p style="text-align: justify;">Wie sich zeigte war ich nicht der Erste mit der Idee Jenkins für PHP Projekte zu verwenden. So bin ich unter <a href="http://jenkins-php.org/">jenkins-php.org</a> auf ein Job Template von Sebastian Bergmann gestossen welches eine perfekte Vorlage für PHP Projekte darstellt. Dass Buildsystem basiert auf <a href="http://ant.apache.org/">Ant</a>, ein Tool aus der Java Welt dass sich ebenfalls für PHP Projekte gut eignet. Jenkins startet bei einem Testlauf Ant mit einem vorbereiteten Buildskript (build.xml). Verschiedene Tools wie z.B. der PHP CodeSniffer, PHP Mess Detector und PHPUnit werden von diesem wiederrum angestossen. Die bei einem Testlauf generierten Logdateien können anschließend zentral über dass Jenkins Webinterface dargestellt werden. Bei dem angesprochenen Projekt nutze ich derzeit einen SCM (in meinem Fall: Subversion) gesteuerten Trigger für Jenkins. Dieser erkennt Veränderungen (&#8220;commits&#8221;) in einem Repository und holt sich einen frischen &#8220;Checkout&#8221;. Anschließend wird Ant gestartet. Kommt es zu Fehlern, z.B. wenn PHPUnit Tests fehlschlagen, werde ich per E-Mail informiert. Dass Szenario ist in größeren Teams noch einmal weitaus praktischer als für einen einzelnen Entwickler. Dennoch ist es für mich eine unheimliche Bereicherung, da die zentrale und übersichtliche Erreichbarkeit der Auswertungenunschlagbar ist. Auch die automatische Benachrichtigung im Fehlerfall ist von Vorteil. Ich habe nun bereits mehrfach Verbesserungen/Änderungen am Code auf Basis der gewonnen Daten vorgenommen und Fehler entdeckt die auf meiner aktuelleren Workstation (Ubuntu 10.10) nicht aufgetreten sind. Fazit an dieser Stelle daher: Zur Nachahmung empfohlen!</p>
<h2>Jenkins und dass Zend Framework</h2>
<p style="text-align: justify;">Die grundlegende Installation ist auf der Seite zum Jenkins PHP Template (<a href="http://jenkins-php.org/">jenkins-php.org</a>) super beschrieben. Ist dann dass Template für den Jenkins Job aus dem Github Repository erst einmal ausgecheckt kann es auch schon losgehen. Hier konzentriere ich mich nun auf Zend Framework spezifische Ergänzungen und Hinweise. Das folgende Setup nutze ich selbst für die Anbindung von Zend Framework Projekten an Jenkins. Beginnen wir mit der Vorbereitung von Helferklassen die es uns später erleichtern Tests für dass Zend Framework Projekt zu schreiben. Als erstes ein &#8220;TestHelper&#8221; welcher bspw. dass automatische Laden von Klassen vorbereitet. Abgelegt wird dieser im Verzeichnis &#8220;tests&#8221; unter dem Namen TestHelper.php:</p>
<h3><strong>TestHelper.php</strong></h3>
<p>
<pre>&lt;/p&gt;
&lt;p&gt;// start output buffering&lt;br /&gt; ob_start();&lt;/p&gt;
&lt;p&gt;// set our app paths and environments&lt;br /&gt; if (!defined(&#039;BASE_PATH&#039;)) {&lt;br /&gt; define(&#039;BASE_PATH&#039;, realpath(dirname(__FILE__) . &#039;/../&#039;));&lt;br /&gt; }&lt;br /&gt; if (!defined(&#039;APPLICATION_PATH&#039;)) {&lt;br /&gt; define(&#039;APPLICATION_PATH&#039;, BASE_PATH . &#039;/application&#039;);&lt;br /&gt; }&lt;br /&gt; if (!defined(&#039;APPLICATION_ENV&#039;)) {&lt;br /&gt; define(&#039;APPLICATION_ENV&#039;, &#039;testing&#039;);&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;// Include path&lt;br /&gt; set_include_path(&lt;br /&gt; &#039;.&#039;&lt;br /&gt; . PATH_SEPARATOR . BASE_PATH . &#039;/library&#039;&lt;br /&gt; . PATH_SEPARATOR . BASE_PATH . &#039;/propel/models&#039;&lt;br /&gt; . PATH_SEPARATOR . get_include_path()&lt;br /&gt; );&lt;/p&gt;
&lt;p&gt;require_once &#039;Zend/Loader/Autoloader.php&#039;;&lt;br /&gt; $autoloader = Zend_Loader_Autoloader::getInstance();&lt;br /&gt; $autoloader-&amp;gt;registerNamespace(&#039;Luckyduck_&#039;);&lt;/p&gt;
&lt;p&gt;require_once &#039;Zend/Loader/Autoloader/Resource.php&#039;;&lt;br /&gt; $resources = new Zend_Loader_Autoloader_Resource(array(&lt;br /&gt; &#039;namespace&#039; =&amp;gt; &#039;Application&#039;,&lt;br /&gt; &#039;basePath&#039; =&amp;gt; APPLICATION_PATH&lt;br /&gt; ));&lt;br /&gt; $resources-&amp;gt;addResourceType(&#039;form&#039;,&#039;forms&#039;,&#039;Form&#039;);&lt;br /&gt; $resources-&amp;gt;addResourceType(&#039;model&#039;,&#039;models&#039;,&#039;Model&#039;);&lt;br /&gt; $resources-&amp;gt;addResourceType(&#039;dbtable&#039;,&#039;models/DbTable&#039;,&#039;Model_DbTable&#039;);&lt;/p&gt;
&lt;p&gt;// Set the default timezone !!!&lt;br /&gt; date_default_timezone_set(&#039;Europe/Berlin&#039;);&lt;/p&gt;
&lt;p&gt;// We wanna catch all errors en strict warnings&lt;br /&gt; error_reporting(E_ALL|E_STRICT);&lt;/p&gt;
&lt;p&gt;require_once &#039;ControllerTestCase.php&#039;;&lt;br /&gt; </pre>
</p>
<p>&nbsp;</p>
<p>Sowie eine abstrakte Klasse ControllerTestCase. Diese stellt die Basis für die eigenen Unittests dar. Abzulegen ist sie im Verzeichnis &#8220;tests&#8221; in der Datei <strong>ControllerTestCase.php</strong>:</p>
<p>
<pre>&lt;/p&gt;
&lt;p&gt;&amp;lt; ?php&lt;br /&gt; require_once &#039;Zend/Application.php&#039;;&lt;br /&gt; require_once &#039;Zend/Test/PHPUnit/ControllerTestCase.php&#039;;&lt;/p&gt;
&lt;p&gt;abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase&lt;br /&gt; {&lt;br /&gt; public $application;&lt;br /&gt; public function setUp()&lt;br /&gt; {&lt;br /&gt; $this-&amp;gt;application = new Zend_Application(&lt;br /&gt; &#039;testing&#039;,&lt;br /&gt; APPLICATION_PATH . &#039;/configs/application.ini&#039;&lt;br /&gt; );&lt;/p&gt;
&lt;p&gt;$this-&amp;gt;bootstrap = array($this, &#039;appBootstrap&#039;);&lt;br /&gt; parent::setUp();&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;public function appBootstrap()&lt;br /&gt; {&lt;br /&gt; $this-&amp;gt;application-&amp;gt;bootstrap();&lt;br /&gt; }&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;?&amp;gt;&lt;/p&gt;
&lt;p&gt;</pre>
</p>
<p>&nbsp;</p>
<p style="text-align: justify;">Hier sind ein paar projektspezifische Details zu beachten. Z.b. wird in der Datei TestHelper.php der Namespace &#8220;Luckyduck_&#8221; beim Autoloader registriert. Ggf. kann man hier eigene Namespaces (Achtung: nicht PHP 5.3 Namespaces) eintragen oder evt. ganz darauf verzichten. In meinem Fall war es trotz Eintrag in der application.ini (wird im ControllerTestCase geladen) notwendig. Zusätzlich muss evt. auch der Includepfad angepasst werden, da ich hier von <a href="http://www.propelorm.org">Propel</a> generierte Models im Verzeichnis &#8220;propel/models&#8221; zum Includepath hinzufüge.</p>
<p style="text-align: justify;">Im ControllerTestCase wird dann von einer Klasse aus dem Zend_Test Paket geerbt. Der Zend_Test_PHPUnit_ControllerTestCase ist die Grundlage für Tests von &#8220;Controllern&#8221;. Mit seiner Hilfe sind sogar ganze Systemtests möglich. Der Aufruf von einzelnen URLs einer Zend Framework Applikation kann simuliert werden. Die Applikation verarbeitet die Anfrage dann als zusammenhängendes System:</p>
<ul>
<li>Router leitet die Anfragen zu passender Stelle (Module, Controller, Action)</li>
<li>Eine Action verarbeitet bspw. ein Formular</li>
<li>Man könnte die Datenbank testen (lesend/schreibend)</li>
<li>Ist ein Fehler aufgetreten (z.B. beim ErrorController &#8220;gelandet&#8221;?)</li>
<li>usw.</li>
</ul>
<p>Im ControllerTestCase wird die Applikation ebenfalls initialisiert (ich fand dass Wort &#8220;gebootstrapped?!&#8221; zweifelhaft), ohne dabei jedoch die finale Methode &#8220;run()&#8221; auszuführen. Was nun fehlt ist ein Test der wirklich etwas macht.</p>
<h3>Ein Unittest</h3>
<p style="text-align: justify;">Um zu verifizieren ob alles eingerichtet ist fehlt der erste Unittest. Hierfür können wir z.B. wie folgt prüfen ob der Aufruf einer nicht vorhandenen URL eine passende Antwort erzeugt (ErrorController / HTTP Response Code 404). Damit die Pfadangabe oben stimmt muss die Datei im Verzeichnis &#8220;tests/application/controllers&#8221; liegen. Genannt habe ich Sie <strong>IndexControllerTest.php</strong>:</p>
<p>&nbsp;</p>
<p>
<pre>&lt;/p&gt;
&lt;p&gt;&amp;lt; ?php&lt;/p&gt;
&lt;p&gt;require_once realpath(dirname(__FILE__) . &#039;/../../ControllerTestCase.php&#039;);&lt;/p&gt;
&lt;p&gt;class IndexControllerTest extends ControllerTestCase&lt;br /&gt; {&lt;br /&gt; public function testCallingBogusTriggersError()&lt;br /&gt; {&lt;br /&gt; $this-&amp;gt;dispatch(&#039;/bogus&#039;);&lt;br /&gt; $this-&amp;gt;assertModule(&#039;default&#039;);&lt;br /&gt; $this-&amp;gt;assertController(&#039;error&#039;);&lt;br /&gt; $this-&amp;gt;assertAction(&#039;error&#039;);&lt;br /&gt; $this-&amp;gt;assertResponseCode(404);&lt;br /&gt; }&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;?&amp;gt;&lt;/p&gt;
&lt;p&gt;</pre>
</p>
<p>&nbsp;</p>
<h3>PHPUnit Konfiguration</h3>
<p style="text-align: justify;">Die Konfigurationsdatei für PHPUnit, bzw. die Angaben zum Logging, sind auf jenkins-php.org bereits vorgegeben. Die Jenkins Module welche unsere Logdateien verarbeiten erwarten ein bestimmtes Format. Die Konfiguration des Loggings allein reicht jedoch noch nicht aus um wirklich dass eigene Zend Framework Projekt von Jenkins prüfen zu lassen. Hier meine PHPUnit Konfiguration welche ich im Stammverzeichnis abgelegt habe. Der Name der Datei ist &#8220;phpunit-jenkins.xml&#8221;:</p>
<p>
<pre>&lt;/p&gt;
&lt;p&gt;colors=&quot;true&quot;&lt;br /&gt; verbose=&quot;true&quot;&lt;br /&gt; stopOnFailure=&quot;true&quot;&lt;br /&gt; processIsolation=&quot;true&quot;&lt;br /&gt; backupGlobal=&quot;false&quot;&lt;br /&gt; syntaxCheck=&quot;true&quot;&amp;gt;&lt;/p&gt;
&lt;p&gt;tests/library&lt;br /&gt; tests/application&lt;/p&gt;
&lt;p&gt;./library/Luckyduck&lt;br /&gt; ./application&lt;/p&gt;
&lt;p&gt;./application&lt;/p&gt;
&lt;p&gt;charset=&quot;UTF-8&quot; yui=&quot;true&quot; highlight=&quot;true&quot;&lt;br /&gt; lowUpperBound=&quot;35&quot; highLowerBound=&quot;70&quot;/&amp;gt;&lt;/p&gt;
&lt;p&gt;</pre>
</p>
<p style="text-align: justify;">Hier wird der &#8220;TestHelper&#8221; als Bootstrapdatei verwendet und ein paar Einstellung bzgl. PHPUnit angepasst. Diese waren auf meinem Produktivsystem notwendig da dort unter Ubuntu 10.04 LTS eine etwas ältere PHPUnit Version zum Einsatz kommt. Ein Update über PEAR hat mir nicht kurzfristig zu lösende Probleme bereitet, weshalb ich dann (vorerst) zur Ubuntu Version zurückgerudert bin. Im Großen und Ganzen werden durch diese Konfiguration alle Dateien mit der Endung &#8220;.php&#8221; unter dem application-Verzeichnis in die Tests und Code Coverage Auswertung mit einbezogen. Zusätzlich teste ich noch meine Bibliothek unter &#8220;library/Luckyduck&#8221; . Leider reichten 2G memory_limit noch immer nicht aus um auch dass Zend Framework selbst in die Unittests (zumindest mal testweise) einzubeziehen. Sollte es wegen Arbeitsspeicher zu Problemen kommen als erstes kontrollieren ob ggf. dass komplette &#8220;library&#8221; Verzeichnis einbezogen wird.</p>
<h3>Ant Buildskript</h3>
<p style="text-align: justify;">Hier nun im letzten Schritt dann noch dass Ant Buildskript. Auch dies habe ich ein wenig modifiziert. Speziell wichtig ist hier die Modifikation &#8220;phpunit&#8221;-Target. Dort wird nun auf der Kommandozeile der Name der PHPUnit Konfiguration (phpunit-jenkins.xml) übergeben. Zusätzlich interessant ist vielleicht noch dass Target &#8220;dist&#8221; welches ich verwende um Releases zu erstellen. Dazu ersetze ich vor einem Aufruf einfach ganz oben die Versionsnummer und lasse mir anschließend ein ZIP-Archiv erzeugen. In diesem sind dann nur gewünschte Daten enthalten. Ich wollte hier gerne noch ein Subversion Target einbauen welches dann zeitgleich dass Repository mit der Versionsnummer &#8220;tagged&#8221;, aber auch dazu fehlte bisher einfach wieder die Zeit. Die Datei build.xml liegt auf gleicher Ebene wie die Datei phpunit-jenkins.xml, im Stammverzeichnis meines Projekts.</p>
<p>&nbsp;</p>
<p>
<pre>&lt;br /&gt; &lt;!-- Clean up --&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;!-- copy propel template --&gt;&lt;br /&gt; tofile=&quot;${basedir}/dist/build/propel/configs/anzeigenmarkt-conf.php&quot;&lt;br /&gt; overwrite=&quot;true&quot;/&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- zipfile --&gt;&lt;br /&gt; basedir=&quot;${basedir}/dist/build&quot;&lt;br /&gt; update=&quot;true&quot;&lt;br /&gt; level=&quot;9&quot;&lt;br /&gt; /&amp;gt;&lt;/p&gt;
&lt;p&gt;</pre>
</p>
<p>&nbsp;</p>
<h3>Abschliessend</h3>
<p>Ist dann die Einrichtung abgeschlossend und alle Dateien an der richtigen Stelle, sollte die Verzeichnisstruktur (neben den ohnehin vorhandenen Daten) in etwa wie folgt aussehen. Wichtig sind hier natürlich vor allem die erwähnten Dateien und Verzeichnisse:</p>
<p><a href="http://the-luckyduck.de/wp-content/uploads/2011/03/continous-integration-zend-framework.png"><img class="size-full wp-image-878 alignnone" title="continuous-integration-zend-framework" src="http://the-luckyduck.de/wp-content/uploads/2011/03/continous-integration-zend-framework.png" alt="" width="400" height="350" /></a></p>
<p>&nbsp;</p>
<p style="text-align: justify;">Nun muss nur noch dass Projekt inkl. der neuen Dateien ins Repository übertragen bzw. &#8220;commited&#8221; werden. Wird der SCM Trigger eingesetzt sollte Jenkins schon bald den ersten Testlauf starten. Zudem kann allerdings für unmittelbare Tests auch die Funktion &#8220;build now&#8221; genutzt werden. So erhält man unmittelbar Feedback. Über Anregungen, Tipps und Hinweise sowie über interessante Diskussionen hierzu würde ich mich selbstverständlich freuen. Ich bin mir sicher dass es in Zukunft weitere Beiträge zum Thema Unittesting geben wird. Derzeit befasse ich mich intensiv mit Magento, was vielleicht eine interessante Kombination ergeben könnte. Vielen Dank für&#8217;s lesen. Über Tweets und Empfehlungen würde ich mich selbstverständlich freuen!</p>
<h3 style="text-align: justify;">Externe Links</h3>
<p>Hier ein paar externe Links zu Jenkins, dem Zend Framework und Unittesting allgemein:</p>
<ul>
<li><a href="http://jenkins-php.org">Jenkins PHP Template</a></li>
<li><a href="http://jenkins-ci.org/">Jenkins Homepage</a></li>
<li><a href="http://framework.zend.com/manual/1.11/de/zend.test.html">Zend Framework: Zend_Test</a></li>
<li><a href="http://www.contentwithstyle.co.uk/content/unit-testing-controllers-with-zend-framework">Unit testing Zend Framework controllers</a></li>
<li><a href="http://net.tutsplus.com/tutorials/php/the-newbies-guide-to-test-driven-development/">Newbies guide to test driven development</a></li>
<li><a href="http://net.tutsplus.com/tutorials/php/10-compelling-reasons-to-use-zend-framework/">10 Gründe die für dass Zend Framework sprechen</a></li>
</ul>
<p>&nbsp;</p>
<p><img src="http://vg04.met.vgwort.de/na/a6c7f468c30d462e9693619b756a561c" alt="" width="1" height="1" /></p>

<!-- google_ad_section_end -->

<p><a href="http://feedads.g.doubleclick.net/~a/liTKo6y_NyK5gFAD0HJLCRhwh9I/0/da"><img src="http://feedads.g.doubleclick.net/~a/liTKo6y_NyK5gFAD0HJLCRhwh9I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/liTKo6y_NyK5gFAD0HJLCRhwh9I/1/da"><img src="http://feedads.g.doubleclick.net/~a/liTKo6y_NyK5gFAD0HJLCRhwh9I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=8w5ZjLDskek:LoRAvFhzpJw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=8w5ZjLDskek:LoRAvFhzpJw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?i=8w5ZjLDskek:LoRAvFhzpJw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/JanBrinkmann?a=8w5ZjLDskek:LoRAvFhzpJw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JanBrinkmann?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JanBrinkmann/~4/8w5ZjLDskek" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://the-luckyduck.de/2011/03/continous-integration-mit-jenkins-phpunit-und-dem-zend-framework/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://the-luckyduck.de/2011/03/continous-integration-mit-jenkins-phpunit-und-dem-zend-framework/</feedburner:origLink></item>
	</channel>
</rss>

