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

<channel>
	<title>Axel Jung</title>
	<atom:link href="http://www.ajung.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Tue, 22 Nov 2011 21:13:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>UnitTH  Unit Tests im zeitlichen Verlauf</title>
		<link>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/</link>
		<comments>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 21:13:42 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[Continuus Integration]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=696</guid>
		<description><![CDATA[In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://junitth.sourceforge.net/"><img class="size-full wp-image-697 alignright" title="unitth-header" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth-header.jpg" alt="" width="330" height="80" /></a>In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf alle Test Module zu haben. Bei jeden Test sollte erkennbar sein bei welchen Build Lauf er erfolgreich war oder nicht.</p>
<p><a href="http://junitth.sourceforge.net/">UnitTH</a> ist ein kleines Java Tool das aus den Unit Test Ergebnis Dateien einen Report erzeugen kann.</p>
<p>Das Tool untersucht bestehende Unit Test Report XML Dateien und erzeugt daraus ein einen Report. Die zeitliche Achse wird durch Build Läufe erzeugt. UnitTH erkennt die Build Läufe anhand von Ordnern.</p>
<p>Die Reports muss in dieser Struktur vorliegen:</p>
<p>/build1/junit_log1.xml<br />
/build1/junit_log2.xml<br />
/build2/junit_log1.xml<br />
/build2/junit_log2.xml</p>
<p>In den Ordnern können beliebig viele XML Dateien liegen.</p>
<p>Testsuiten sind für das Tool sogenannte Module. Damit wird der Report gegliedert. Man muss also darauf achten das die Suiten in den Reports eindeutige Namen haben und nicht verschachtelte Suiten haben. Meine Report Dateien haben nicht ganz dem Schema entsprochen. Ich wandel die Dateien mit XSLT um.</p>
<p>Der Aufruf erfolgt so:</p>
<p><strong>java -jar -Dunitth.report.dir=/…/unitth/report unitth.jar /…/unitth/xml/*</strong></p>
<p>Man gibt also nur das Ziel Verzeichnis für die Reports und den Pfad zu den XML Dateien.</p>
<p>In den Report bekommt man eine praktische Übersicht über den aktuellen Stand der Tests und den Trend.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png"><img class="alignnone size-full wp-image-698" title="unitth_overview" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png" alt="" width="317" height="346" /></a></p>
<p>Über die Graphen kann man erkennen, wie sich die Testdauer verhält und ob sich die Anzahl der Tests verändert.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph.png"><img class="alignnone size-medium wp-image-699" title="unitth_graph" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph-500x235.png" alt="" width="500" height="235" /></a></p>
<p>Man bekommt eine Liste der Build Läufe und darin zusammengefasst wie deren Status war. Hier sieht man auch schön die aktuellen Trends.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs.png"><img class="alignnone size-medium wp-image-700" title="unitth_runs" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs-500x154.png" alt="" width="500" height="154" /></a></p>
<p>Die Module (Testsuiten) werden auch zusammengefasst dargestellt und man kann sich auf einer Unterseite den Verlauf auf Testcase Basis anschauen. Dadurch kann man besonders kritische Testfälle erkennen und dann stabilisieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests.png"><img class="alignnone size-medium wp-image-701" title="unitth_tests" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests-500x277.png" alt="" width="500" height="277" /></a></p>
<p>Das spannendste Feature ist die Spread Ansicht. Hier sieht man, bei welchen Build die Testfälle fehlgeschlagen sind. Damit kann man sogenannte &#8220;Blinker&#8221; Test finden. Um diese dann zu Isolieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung.png"><img class="alignnone size-medium wp-image-702" title="unitth_verteilung" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung-500x241.png" alt="" width="500" height="241" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JMeter Testplan Parametrisieren</title>
		<link>http://www.ajung.de/2011/11/01/jmeter-testplan-parametrisieren/</link>
		<comments>http://www.ajung.de/2011/11/01/jmeter-testplan-parametrisieren/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 19:43:33 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[jmeter]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=684</guid>
		<description><![CDATA[Es kann relativ aufwendig sein einen sinnvollen und realistischen Testplan mit JMeter zu erstellen. In unseren Fall wollte ich diesen Testplan auf verschiedenen Testumgebungen einsetzen und mal mit der JMeter Gui und mal auf der Konsole mittels Jenkins laufen lassen. Hierbei unterscheiden sich die Urls, Userdaten und Laufzeiten des Tests. Wenn ich den Plan kopiert [...]]]></description>
			<content:encoded><![CDATA[<p>Es kann relativ aufwendig sein einen sinnvollen und realistischen Testplan mit <a href="http://jakarta.apache.org/jmeter/">JMeter</a> zu erstellen. In unseren Fall wollte ich diesen Testplan auf verschiedenen Testumgebungen einsetzen und mal mit der JMeter Gui und mal auf der Konsole mittels Jenkins laufen lassen. Hierbei unterscheiden sich die Urls, Userdaten und Laufzeiten des Tests. Wenn ich den Plan kopiert hätte, wäre die Wartung sehr aufwendig.</p>
<h3>JMeter Properties</h3>
<p>Es gibt bei JMeter die Möglichkeit eine Properties Datei für den Testplan anzugeben.</p>
<pre>jmeter –p dev.properties –t testplan.jmx</pre>
<p>In dieser Datei kann man beispielsweise die Domain definieren.</p>
<pre>domain=example.com</pre>
<p>Im Testplan kann man auf diesen Wert dann wie folgt zugreifen:</p>
<pre>${__P(domain)}</pre>
<p>Man kann auch einen Default Wert angeben.</p>
<pre>${__P(domain,www.example.com)}</pre>
<h3><a href="http://www.ajung.de/wp-content/uploads/2011/11/jmeter_properties.jpg"><img class="alignnone size-full wp-image-685" title="jmeter_properties" src="http://www.ajung.de/wp-content/uploads/2011/11/jmeter_properties.jpg" alt="" width="444" height="240" /></a></h3>
<h3>JMeter Funktionen</h3>
<p>Mit dem JMeter Funktionen kann man noch einiges mehr machen. Beispielsweise: Daten aus einer <a href="http://jakarta.apache.org/jmeter/usermanual/functions.html#__CSVRead">CSV lesen</a> oder<a href="http://jakarta.apache.org/jmeter/usermanual/functions.html#__Random"> Zufallszahlen</a> verwendet.</p>
<p>http://jakarta.apache.org/jmeter/usermanual/functions.html</p>
<p>Im Hilfe Menü gibt es ein ganz praktisches Tool um mit den Funktionen zu arbeiten. Hierbei wird einem auch der richtige Code generiert.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/jmeter_help.jpg"><img class="alignnone size-medium wp-image-692" title="jmeter_help" src="http://www.ajung.de/wp-content/uploads/2011/11/jmeter_help-500x173.jpg" alt="" width="500" height="173" /></a></p>
<h3>Berechnungen</h3>
<p>Es lassen sich auch Berechnungen durchführen. Diese werden mit der Javascript Funktion gemacht:</p>
<pre>${__javaScript(${DURCHSATZ}/100*38.5)}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/11/01/jmeter-testplan-parametrisieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Lasttest mit JMeter und Amazon</title>
		<link>http://www.ajung.de/2011/10/27/cloud-lasttest-mit-jmeter-und-amazon/</link>
		<comments>http://www.ajung.de/2011/10/27/cloud-lasttest-mit-jmeter-und-amazon/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 20:53:31 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=667</guid>
		<description><![CDATA[Wir hatten die Aufgabe für eine Webseite Lasttests zu erstellen. Die zu erzeugende Last sollte sehr real sein. Da man mit einen einzigen Rechner nicht so eine hohe Last erzeugen kann haben wir uns für die Amazon Cloud entschieden. Dort kann man für einen kurzen Zeitraum eine hohe Zahl an Rechnern verwenden und das mit [...]]]></description>
			<content:encoded><![CDATA[<p>Wir hatten die Aufgabe für eine Webseite Lasttests zu erstellen. Die zu erzeugende Last sollte sehr real sein. Da man mit einen einzigen Rechner nicht so eine hohe Last erzeugen kann haben wir uns für die Amazon Cloud entschieden. Dort kann man für einen kurzen Zeitraum eine hohe Zahl an Rechnern verwenden und das mit sehr geringen Kosten.</p>
<p>Als Lasttest Tool wird JMeter verwendet. Mit JMeter kann man sehr granulare Testpläne erstellen und damit ein relativ gutes Abbild der realen Last simulieren.</p>
<p><a href="http://jakarta.apache.org/jmeter/" rel="nofollow">http://jakarta.apache.org/jmeter/</a></p>
<p>JMeter ist in der Lage die Tests über verteilte Rechner auszuführen. Dadurch kann man eine sehr große Last erzeugen.</p>
<p><a href="http://jakarta.apache.org/jmeter/usermanual/remote-test.html" rel="nofollow">http://jakarta.apache.org/jmeter/usermanual/remote-test.html</a></p>
<p>JMeter ist in der Lage alle Anfragen über einen Proxy laufen zu lassen. So kann man IP geschützte Seiten testen indem man die IP vom Proxy freischaltet. In unseren Fall verwenden wir den Squid Proxy mit einer geschützten Authentifizierung.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/10/proxy.png"><img class="alignnone size-medium wp-image-668" title="proxy" src="http://www.ajung.de/wp-content/uploads/2011/10/proxy-500x368.png" alt="" width="500" height="368" /></a></p>
<p>&nbsp;</p>
<h3>Vorbereitung</h3>
<h4>Proxy Server AMI erstellen</h4>
<p>In der Amazon Cloud gibt es sogenannte AMI (Amazon Machine Images). Das sind Abbildungen von Systemen die man erstellen kann um diese immer wieder zu verwenden.</p>
<h4>AMI erstellen</h4>
<p>AWS Management Console <a href="https://console.aws.amazon.com/ec2/" rel="nofollow">https://console.aws.amazon.com/ec2/</a> auf den Reiter ec2 wechseln und eine Instanz starten. Den  Rechner nach eigenen Wünschen anpassen und dann über das Menü „Instance Action“ eine AMI erstellen. Amazon erstellt dann von dem aktuellen System ein Abbild das man wiederverwenden kann.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/10/ami.jpg"><img class="alignnone size-full wp-image-669" title="ami" src="http://www.ajung.de/wp-content/uploads/2011/10/ami.jpg" alt="" width="580" height="486" /></a></p>
<h3>Squid Proxy in der Cloud installieren:</h3>
<p><a href="http://home.engineering.iastate.edu/%7Ehawklan/squidProxy/squidProxy.html" rel="nofollow">http://home.engineering.iastate.edu/~hawklan/squidProxy/squidProxy.html</a></p>
<p>Dieser Proxy muss natürlich abgesichert werden, da er sonst missbraucht werden könnte.</p>
<h3>Passwort Authentifizierung einrichten</h3>
<p>In der Squid Konforgurations Datei (/etc/squid/squid.conf) muss als erstes das Authentifizierungs Programm eingestellt werden. Es gibt diverse Möglichkeiten. ncsa_auth ist wahrscheinlich die einfachste. Man erzeugt mit htpasswd eine Passwort Datei (/etc/squid/squid_user) und gibt diese in der Konfiguration an.</p>
<div>
<div>
<div>
<div id="highlighter_860025">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div title="Hint: double-click to select code">
<pre><code>auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/squid_user</code></pre>
<div> <code>acl jmeter proxy_auth REQUIRED</code></div>
<div><code>http_access allow jmeter</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<p>Der Proxy lässt sich damit nur noch mittels Usernamen und Passwort aufrufen.</p>
<h3>Caching auschalten</h3>
<p>Squid speichert die Anfragen normalerweise. Das würde aber das Ergebniss verfälschen. Deshalb muss man noch das Caching ausschalten. Dazu genügt es folgende Zeile in die Squid Konforgurations Datei (/etc/squid/squid.conf)  einzufügen.</p>
<pre>cache deny all</pre>
<h3>Proxy automatisch starten</h3>
<p>Damit der Proxy automatisch mit dem Starten der Instanz mit gestartet wird kann man in der Datei /etc/rc.local diesen Befehl eintragen /etc/init.d/squid start .</p>
<h3>Proxy starten</h3>
<p>In der AWS Management Console starten wir die vorgefertigte AMI.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/10/proxy1.jpg"><img class="alignnone size-medium wp-image-675" title="proxy" src="http://www.ajung.de/wp-content/uploads/2011/10/proxy1-500x128.jpg" alt="" width="500" height="128" /></a></p>
<h3>JMeter Master Server</h3>
<p>Für den JMeter Master Server verwenden wir einen vorgefertigte Windows AMI bei der JMeter vorinstalliert ist. Dieser Rechner kann dann über Remote Desktop bedient werden.</p>
<p>Auf den Master Server muss dann der Testplan kopiert werden.</p>
<p>Auf dem Master Server wird die Testausführung gesteuert.</p>
<h3>JMeter Slaves</h3>
<p>Die JMeter Slaves sind beliebig viele Linux Rechner auf denen der JMeter im Server Modus gestartet ist. Dafür benötigt man eine AMI auf der JMeter vorhanden ist und dieser Befehl Autostart (/etc/rc.local) ist</p>
<div>
<div>
<div>
<div id="highlighter_343846">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div title="Hint: double-click to select code">
<pre><code>{pathtojmeter}/bin/jmeter-server</code></pre>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<p>Dafür steht auch die öffentliche AMI zur Verfügung: <strong>ami-823f0df6</strong></p>
<p>Die Adressen der Slave Rechner müssen in die JMeter Properties Datei auf den Master Server eingetragen werden. So das dieser seine Remote Maschinen kennt.</p>
<h3>jmeter.properties</h3>
<div>
<div>
<div>
<div id="highlighter_379261">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div title="Hint: double-click to select code">
<pre><code>remote_hosts=...,....</code></pre>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<h3>Starten der Tests</h3>
<p>Wenn die Slaves hochgefahren sind kann der Testplan auf den Remote Servern gestartet werden.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/10/cloud.jpg"><img class="alignnone size-medium wp-image-670" title="cloud" src="http://www.ajung.de/wp-content/uploads/2011/10/cloud-500x310.jpg" alt="" width="500" height="310" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/10/27/cloud-lasttest-mit-jmeter-und-amazon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>T3CON 11 und IPC11</title>
		<link>http://www.ajung.de/2011/10/14/t3con-11-und-ipc11/</link>
		<comments>http://www.ajung.de/2011/10/14/t3con-11-und-ipc11/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 19:32:20 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[deployment]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=660</guid>
		<description><![CDATA[Hier ein kurzer Rückblick auf die Typo3 Konferenz in Hanau und die PHP Konferenz in Mainz. Typo3 Konferenz Die Konferenz fand dieses Mal in Hanau statt und hatte angenehmere Räume als die letzten Jahre. Das Catering hat sich aber leider extrem verschlechtert und war ungenießbar. Sonar Es gab einen Vortrag über Sonar,  ein Tool mit [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajung.de/wp-content/uploads/2011/10/typo3-logo.png"><img class="alignright size-full wp-image-661" title="typo3-logo" src="http://www.ajung.de/wp-content/uploads/2011/10/typo3-logo.png" alt="" width="132" height="45" /></a>Hier ein kurzer Rückblick auf die <a href="http://t3con11-frankfurt.typo3.org/">Typo3 Konferenz</a> in Hanau und die <a href="http://phpconference.com/2011/">PHP Konferenz</a> in Mainz.</p>
<h2>Typo3 Konferenz</h2>
<p>Die Konferenz fand dieses Mal in Hanau statt und hatte angenehmere Räume als die letzten Jahre. Das Catering hat sich aber leider extrem verschlechtert und war ungenießbar.</p>
<h3>Sonar</h3>
<p>Es gab einen Vortrag über <a href="http://www.sonarsource.org/">Sonar</a>,  ein Tool mit dem man sehr übersichtlich Metriken darstellen kann. Es war für mich neu, dass es unter http://metrics.typo3.org/ einen Sonar Server mit den Metriken zu allen Typo3 Extension gibt.</p>
<p>Ein Mitarbeiter der <a href="http://www.dkd.de/">d.k.d</a>  plant eine neue TER Plattform in der man diese Sonar Daten mit einer Suche verknüpfen kann und darüberhinaus die Extension noch mit Sozialen Daten anreichern kann. Eine schöne Vision die eventuell Ende des Jahres verfügbar ist.</p>
<h3>Flow3</h3>
<p>Das <a href="http://flow3.typo3.org/">Flow3 Framework</a> steht vor der ersten stabilen Version. In einem Talk wurden die Erfahrungen mit Flow3 in der Praxis präsentiert. Als Fazit kann man sagen das Flow3 schon einsatzfähig ist und sich der Einsatz lohnt. Wenn man schon mit Extbase gearbeitet hat, ist der Einstieg extrem leicht. Das kann ich nur bestätigen, da wir Flow3 auch in der Praxis einsetzen und keinerlei Probleme hatten.</p>
<h2><a href="http://www.ajung.de/wp-content/uploads/2011/10/header_en.png"><img class="alignright size-full wp-image-663" title="header_en" src="http://www.ajung.de/wp-content/uploads/2011/10/header_en.png" alt="" width="221" height="138" /></a>IPC11</h2>
<p>Die PHP Konferenz fand wieder mal in Mainz statt und hier war das Catering richtig gut.</p>
<h3>PHP 5.4</h3>
<h4>Traits</h4>
<p>Die schönste Neuerung in PHP 5.4 sind für mich die Traits. Damit kann man quasi eine Mehrfachvererbung einsetzen. Ich hatte immer mal wieder Stellen bei denen das notwendig gewesen wäre.</p>
<pre>Class Produkt {
    Public function getPreis(){}
}
Class UserItem {
    Public function getItemId(){}
}
Class UserProdukt extends UserItem use Produkt(){
}</pre>
<p>In diesen Fall habe ich ein Produkt aus einen Katalog und ein gekauftes Produkt eines Kunden. Mit Hilfe der Traits kann ich bei meinen Kunden Objekten in meiner Vererbungslinie bleiben, aber trotzdem die Produkt Methoden verwenden. Man kann das Vererbungsverhalten auch noch konfigurieren und die Namen der Methoden überschreiben oder deren Sichtbarkeit ändern.</p>
<h4>Arrays in Rückgaben verwenden</h4>
<p>Es ist jetzt möglich Arrays aus Rückgabewerten direkt zu verwenden ohne die Variable zwischen zu speichern:</p>
<pre>foo()[42]</pre>
<h4>Neuer Typehint</h4>
<p>Leider gibt es immer noch keine Typehints für scalare Werte. Dafür gibt es einen neuen Typehint <strong>callable</strong>.</p>
<h4>Integrierter Webserver</h4>
<p>PHP hat jetzt einen integrierten Webserver für Development Zwecke. Dieser ist sehr einfach gestrickt und mir ist der Sinn dessen nicht ganz klar geworden.</p>
<h4>JsonSerializable</h4>
<p>Über das neue Interface JsonSerializable kann man steuern welche Daten beim json_encode indem man die Daten über die Methode jsonSerialize zurück gibt.</p>
<h3>Openstreetmap</h3>
<p>Es gab einen spannenden Vortrag über Geo Berechnungen mit vielen Formeln einiges an Theorie zu diesen Thema. Es wurde besonders das Projekt <a href="http://www.openstreetmap.de/">Openstreetmap</a> hervorgehoben. Dieses bietet eine gute Alternative zu Google Maps, da man die Daten lokal speichern kann und somit auch mit Karten ohne Internet Verbindung arbeiten kann.</p>
<p><a href="http://derickrethans.nl/talks/maps-ipc11.pdf">Slides</a></p>
<h3>Liquibase</h3>
<p>Über <a href="http://www.liquibase.org/">Liquibase</a> wurde ja vor kurzem im PHP Magazin berichtet. Hier hatte ein Entwickler von Mayflower seine Erfahrungen mit Liquibase geteilt. Mit Liquibase kann man die Datenbank Änderungen versionieren und sehr komfortabel deployen. Es ist ein sehr mächtiges Java Tool das sich gut in Continuus Deployment Prozesse integrieren lässt.  Besonders interessant, finde ich die Roleback Möglichkeit. Auch andere Teilnehmer in den Talk berichteten von ihren Positiven Erfahrungen mit dem Tool.</p>
<p>Unter dieser Adresse findet man alle Links zu den Slides der Konferenz<br />
<a href="http://joind.in/event/view/806">http://joind.in/event/view/806</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/10/14/t3con-11-und-ipc11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tipps für Kunagi</title>
		<link>http://www.ajung.de/2010/11/26/tipps-fur-kunagi/</link>
		<comments>http://www.ajung.de/2010/11/26/tipps-fur-kunagi/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 19:09:04 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=653</guid>
		<description><![CDATA[Serverumzug mit Kunagi Um Kunagi auf einen neuen Server zu transferieren muss man keine Datenbank kopieren, da Kunagi ausschließlich XML Dateien zur Speicherung der Daten verwendet. Es gibt aber 2 Dinge die beachtet werden müssen: Url Änderung Wenn sich die URL ändert muss das auch in in der Datei /webapps/kunag/iconfig.properties angepasst werden. Starten des Kunagi [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://kunagi.org/"><img class="alignright size-full wp-image-644" title="kunagi" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi.png" alt="" width="172" height="85" /></a>Serverumzug mit Kunagi</h2>
<p>Um Kunagi auf einen neuen Server zu transferieren muss man keine Datenbank kopieren, da Kunagi ausschließlich XML Dateien zur Speicherung der Daten verwendet. Es gibt aber 2 Dinge die beachtet werden müssen:</p>
<ol>
<li>Url Änderung<br />
Wenn sich die URL ändert muss das auch in in der Datei /webapps/kunag/iconfig.properties angepasst werden.</li>
<li>Starten des Kunagi<br />
Das Startup Script muss immer von dem gleichen Verzeichniss aus gestartet werden damit Kunagi die richtigen XML Dateien findet. Mann muss das Script auf den neuen Server vom gleichen Verzeichniss starten wie auf den alten Server. Oder relativ gesehen zum /webapps/kunagi Verzeichnis.</li>
</ol>
<h2></h2>
<h2>Fehlender Burndown Chart unter Linux</h2>
<p>Unter Linux kann es beim Erzeugen des Burndown Chart zu folgenden Fehler kommen:</p>
<pre><code>FATAL AHttpServlet         GET failed: scrum.server.sprint.SprintBurndownChartServlet -&gt; 
java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart
</code></pre>
<p><code>Das Problem liegt nicht an Kunagi sondern an Java und kann behoben werden in dem man beim Starten des Tomcat folgende Optionen mitgibt:</code></p>
<p><tt>-Djava.awt.headless=true</tt></p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/11/26/tipps-fur-kunagi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum mit Kunagi</title>
		<link>http://www.ajung.de/2010/10/23/scrum-mit-kunagi/</link>
		<comments>http://www.ajung.de/2010/10/23/scrum-mit-kunagi/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 10:51:40 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=642</guid>
		<description><![CDATA[Kunagi  http://kunagi.org/ ist eine art digitales Whiteboard zu Unterstützung von Scrum Prozessen. Das Tool ist webbasiert und kostenlos. Es basiert auf der GWT http://code.google.com/intl/de-DE/webtoolkit/ von Google und benötigt einen Tomcat. Kunagi hält sich streng an die Regeln von Scrum. So kann im Backlog auch nur der Product Owner eine Story anlegen. Die Story kann erst [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi.png"><img class="size-full wp-image-644 alignright" title="kunagi" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi.png" alt="" width="172" height="85" /></a>Kunagi  <a href="http://kunagi.org/">http://kunagi.org/</a> ist eine art digitales Whiteboard zu Unterstützung von Scrum Prozessen.</p>
<p>Das Tool ist webbasiert und kostenlos. Es basiert auf der GWT <a href="http://code.google.com/intl/de-DE/webtoolkit/">http://code.google.com/intl/de-DE/webtoolkit/</a> von Google und benötigt einen Tomcat.</p>
<p>Kunagi hält sich streng an die Regeln von Scrum. So kann im Backlog auch nur der Product Owner eine Story anlegen.</p>
<p>Die Story kann erst in den Sprint aufgenommen werden wenn es geschätzt wurde.  Dafür kann man das Planing Poker starten. Dann erscheint bei allen Usern dieser Poker Screen.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_planing_poker.jpg"><img class="alignnone size-full wp-image-645" title="kunagi_planing_poker" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_planing_poker.jpg" alt="" width="400" height="184" /></a></p>
<p>Die Storys können dann in den Sprint übernommen werden. Dort sieht man dann alles Story und die Zusammenfassung</p>
<p>der Punkte.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_sprint.jpg"><img class="alignnone size-full wp-image-646" title="kunagi_sprint" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_sprint.jpg" alt="" width="400" height="264" /></a></p>
<p>Dreh und Angel Punkt beim Scrum ist das Whiteboard. Dieses bekommt man in Kunagi mit den 3 Spalten angezeigt und kann zu jeder Story Tasks erstellen. Das sind dann die Notizzettel die man nehmen kann und schließen kann. Hier sieht man auch wer an welchen Punkten arbeitet.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_whiteboard.jpg"><img class="alignnone size-full wp-image-647" title="kunagi_whiteboard" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_whiteboard.jpg" alt="" width="400" height="190" /></a></p>
<p>In den Task kann man auch angeben wie viel man davon schon gemacht hat.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_hours.jpg"><img class="alignnone size-full wp-image-648" title="kunagi_hours" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_hours.jpg" alt="" width="321" height="44" /></a></p>
<p>Kunagi generiert auf dieser Daten Basis den Burndown Chart.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_dashboard.jpg"><img class="alignnone size-full wp-image-649" title="kunagi_dashboard" src="http://www.ajung.de/wp-content/uploads/2010/10/kunagi_dashboard.jpg" alt="" width="400" height="250" /></a></p>
<p>Hier kann man sehen ob man noch in dem Zeitplan ist und ob man noch Punkte aufnehmen kann oder entfernen muss.</p>
<p>Wir nutzen das Tool jetzt seit einem Sprint und ich bin begeistert. Man hält sich viel strenger an die Scrum Regeln und der Burndown Chart hat wirklich einen Mehrwert. Dem Kunden gefällt das Tool auch da er immer den Überblick hat was das Team gerade macht und ob zeitlich alles hinhaut. Ab und zu kommen mal kleine Fehlermeldungen aber es nichts Gravierendes. Das Tool macht einen professionellen Eindruck.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/10/23/scrum-mit-kunagi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium Grid Server aufsetzen</title>
		<link>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/</link>
		<comments>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 19:00:47 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=629</guid>
		<description><![CDATA[In diesen Artikel geht es darum wie Selenium Grid installiert wird. Wozu Selenium Grid? Man kann Selenium Tests über einen Selenium RC Server automatisiert ausführen. Wer das schon mal gemacht hat, weiß das dieser Prozess sehr lange dauern kann. Insbesondere wenn man verschiedene Browser testen möchte und die Tests mit Dataprovidern verwendet. Das bedeutet das [...]]]></description>
			<content:encoded><![CDATA[<p>In diesen Artikel geht es darum wie Selenium Grid installiert wird.</p>
<h2>Wozu Selenium Grid?</h2>
<p>Man kann Selenium Tests über einen Selenium RC Server automatisiert ausführen. Wer das schon mal gemacht hat, weiß das dieser Prozess sehr lange dauern kann. Insbesondere wenn man verschiedene Browser testen möchte und die Tests mit Dataprovidern verwendet. Das bedeutet das die Tests nicht nur einmal, sondern mehrmals laufen und dann kommen schnell ein paar Stunden zusammen. Diese Zeit ist besonders unangenehm wenn man die Software ausliefern möchte und lange auf die Test Ergebnisse warten muss.</p>
<p>Selenium Grid behebt das Problem in dem es wie eine Art Load Balancer arbeitet. Es existiert ein Hub der genau wie der RC Server die Test Kommandos entgegen nimmt.  Der Hub verhält sich für den Test Client (z.Bsp.: PHPUnit) genauso wie der Selenium RC Server. An den Hub können sich verschieden RC Server Instanzen registrieren. Diese Server können auch auf ganz anderen Host Systemen oder Virtuellen Hosts laufen. Somit kann man auch wirklich alle Browser Varianten testen.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/07/clientdiagramjpeg.png"><img class="alignnone size-full wp-image-632" title="clientdiagramjpeg" src="http://www.ajung.de/wp-content/uploads/2010/07/clientdiagramjpeg.png" alt="" width="851" height="800" /></a></p>
<h2>Installation</h2>
<p>Man benötigt einen Host der vom Test Client erreichbar ist. Also der Rechner auf der PHPUnit oder JUnit läuft. Auf diesem Host muss <a href="http://ant.apache.org/">Ant</a> installiert sein um den Grid Hub zu starten. Selenium Grid muss man nur <a href="http://seleniumhq.org/download/">herunterladen</a> und entpacken.</p>
<h2>Hub Starten</h2>
<p>Zum Starten des Hubs wechselt man ich den Grid Verzeichniss und startet den Hub über die buid.xml</p>
<pre>ant launch-hub</pre>
<p>Damit ist der Hub auf diesen Host unter localhost:4444 erreichbar.</p>
<h2>RC Server starten</h2>
<p>Den RC Server kann man entweder auf dem dem gleichen Host starten.</p>
<pre>ant launch-remote-control -Dport=5555
</pre>
<p>oder auf einen anderen Host oder VHost</p>
<pre>ant launch-remote-control -Dport=5555 -Dhost=vhost1 -DhubURL=http://grid-hub:4444
</pre>
<p>Host: Das ist die Adresse vom Hub aus gesehen zum Host auf dem der RC Server liegt.</p>
<p>HubUrl:  Das ist die Adresse zum Hub vom Host mit dem RC Server.</p>
<p>Sinnvollerweise betreibt man die RC Server auf getrennten Hosts.</p>
<h2>RC Server Einstellungen</h2>
<p>Man kann den RC Server der unter Grid läuft genauso anpassen wie einen normalen RC Server. Um beispielsweise ein spezielles Firefox Profil zu verwenden kann man beim Starten des RC Servers noch das Selenium Argument <code>firefoxProfileTemplate mit dem Ant Property </code><code>seleniumArgs angeben.<br />
</code></p>
<pre>
<pre>ant launch-remote-control -Dport=5555<code> -DseleniumArgs=</code><code>"-firefoxProfileTemplate C:\selenium_ff"</code></pre>
</pre>
<h2>Umgebungen</h2>
<p>Der RC Server unter Grid läuft im Gegensatz zum normalen RC Server immer nur mit einer Umgebung. Standardmäßig ist das &#8220;*firefox&#8221;. Um eine andere Umgebung zu starten muss das Argument environment angeben.</p>
<pre>-Denvironment="*iexplore"
</pre>
<h2>PHPUnit und Grid</h2>
<p>Leider ist es nicht möglich den vollen Nutzen aus Grid zu ziehen wenn man mit PHPUnit arbeitet. Da PHPUnit nicht in der Lage ist die Tests parallel auszuführen.</p>
<p>Man kann aber dennoch die Tests mit dem &#8211;filter oder &#8211;group Argument aufteilen und diese dann parallel ausführen. Hierbei muss man aber dann die Ergebnisse aus den verschiedenen Ausführungen zusammenfassen.</p>
<p>Auf jeden Fall lohnt sich aber die Aufteilung für verschiedene Browser.</p>
<p>Absolut notwendig wird Grid wenn man verschiedene Build Prozesse hat die einen Selenium Server nutzen.</p>
<h2>Fazit</h2>
<p>Grid lässt sich relativ einfach aufsetzen und erhöht die Test Performance deutlich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

