<?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>Matthias Bohlen &#187; Aktuelle Aktivitäten</title>
	<atom:link href="http://www.mbohlen.de/blog/category/current-activities/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mbohlen.de/blog</link>
	<description>Coach für produktive Software-Teams</description>
	<lastBuildDate>Thu, 08 Jul 2010 21:17:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kanban-Missverständnisse, Teil 1</title>
		<link>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/#comments</comments>
		<pubDate>Fri, 14 May 2010 17:10:41 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1140</guid>
		<description><![CDATA[In den letzten Tagen gab es auf Twitter einige interessante Fragen zu Kanban. Diese zeigen, dass es in der Community noch so manche Missverständnisse über die neue Methodik gibt.
Johannes Link stellte auf Twitter eine sehr interessante Frage:
Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer wasserfall-artigen Arbeitsaufteilung?
(Im Dialog mit Johannes, den Sie auf Twitter [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen gab es auf Twitter einige interessante Fragen zu Kanban. Diese zeigen, dass es in der Community noch so manche Missverständnisse über die neue Methodik gibt.</p>
<p>Johannes Link stellte auf Twitter <a href="http://twitter.com/johanneslink/status/13423538099">eine sehr interessante Frage</a>:</p>
<blockquote><p>Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer wasserfall-artigen Arbeitsaufteilung?</p></blockquote>
<p><em>(Im Dialog mit Johannes, den Sie auf Twitter nachlesen können, hatte ich Probleme, in 140 Zeichen darzustellen, was ich meine, deshalb hier dieser ausführliche Blog-Artikel.</em>)</p>
<p>Der Grund für das, was die Kanban-Fans tun, ist wohl dieser: In Kanban gibt es fünf Schritte oder Kern-Eigenschaften der Methode:</p>
<ol>
<li>Visualisiere den Workflow</li>
<li>Limitiere angefangene Arbeit (work in progress)</li>
<li>Messe und manage den Fluss</li>
<li>Mache Prozessrichtlinien explizit</li>
<li>Benutze Modelle (wie z.B. ToC), um Möglichkeiten zur Verbesserung zu erkennen</li>
</ol>
<p>Der erste Schritt &#8220;Visualisiere den Workflow&#8221; tut genau das: Auf einem Taskboard stellt man dar, wie der aktuelle Workflow des/der Teams gerade ist. Nicht mehr und nicht weniger. Manche Teams beginnen mit Spalten wie &#8220;backlog, in progress, done&#8221; wie in XP oder Scrum und machen gute Erfahrungen damit. Andere Teams fügen weitere Spalten hinzu, wenn sie glauben, dass es nötig ist.</p>
<h3>Beispiele für Workflow-Visualisierung</h3>
<p>Ein Beispiel: In einem Scrum-Team, das ich aktuell coache, erkannten wir in einer Retrospektive, dass die Entwickler die Features oft sehr zeitnah entwickelten, die Karten auf dem Taskboard aber trotzdem sehr lange Zeit in der Spalte &#8220;in progress&#8221; verbrachten.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<p>Der Grund war: Unsere Definition of Done schrieb vor, dass der Akzeptanztest durch den Product Owner Bestandteil des Begriffes &#8220;done&#8221; sein musste. Der Product Owner war jedoch in weiteren Projekten involviert und hatte fast nie sofort Zeit zu testen, sobald ein Feature fertig geworden war. Es bildete sich beim P.O. ein &#8220;Test-Stau&#8221; mit unangenehmem Ergebnis: Es gab öfters einmal ungetestete Karten, die dann eben nicht zum Sprint-Ergebnis gezählt werden konnten und sollten.</p>
<p>Dies wollten die Entwickler sichtbar machen und fügten dem Taskboard eine Spalte &#8220;acceptance test&#8221; hinzu. Nun konnte man erkennen, wie sich dort die Karten stapelten bis der Product Owner sie gegen Ende des Sprints abräumte &#8211; eine risikoreiche Vorgehensweise.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>acceptance test</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<p>Ein anderes Scrum-Team, das ich kenne, verwendet eine separate Spalte mit der Überschrift &#8220;GUI design&#8221;. Dort werden Karten aufgehängt, die fast fertig entwickelt und auch schon inspizierbar sind, jedoch noch ohne eine richtig schöne und ergonomische Oberfläche, die danach erst durch eine externe UI-Designagentur geschaffen wird. Erst wenn die UIs von dort zurückkommen, wird die Karte auf &#8220;acceptance test&#8221;, danach auf &#8220;done&#8221; geschoben.</p>
<table>
<tbody>
<tr>
<th>backlog</th>
<th>in progress</th>
<th>GUI design</th>
<th>acceptance test</th>
<th>done</th>
</tr>
<tr>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
<td>&#8230;</td>
</tr>
</tbody>
</table>
<h3>Vom Workflow zum Wasserfall</h3>
<p>Zurück zur Frage von Johannes: Warum zeigen die Kanban-Leute wasserfall-artige Taskboards? Antwort: Sie tun es nicht &#8211; sie zeigen lediglich Workflows. Was ist der Unterschied? Ein Workflow ist einfach eine Reihe von Arbeitsschritten, die hintereinander ausgeführt werden. Um daraus einen Wasserfall zu machen, muss man mindestens noch folgende negative Eigenschaften hinzufügen:</p>
<ol>
<li>Das &#8220;100% Losgröße&#8221;-Syndrom: Man führe jeden Workflow-Schritt mit 100% aller Anforderungen durch und gehe erst danach zum nächsten Schritt des Workflows. Auf keinen Fall das, was schon getan ist, schon mal in den nächsten Workflow-Schritt weiterreichen &#8211; das könnte ja unvollständig aussehen!</li>
<li>Das Isolations-Syndrom: Man lasse die Leute, die in einem Workflow-Schritt arbeiten, auf keinen Fall mit den Leuten aus einem anderen Workflow-Schritt zusammenarbeiten. Also darf ein Analyst niemals mit einem Architekten und dieser auch niemals mit einem Entwickler reden &#8211; alle dürfen nur über Dokumente miteinander kommunizieren, die durch ausführliche Reviews abgesichert und dann unterschrieben sind.</li>
</ol>
<h3>Kanban geht gegen den Wasserfall vor</h3>
<p>In Kanban ist beides nicht der Fall. Mit der Kanban-Methode versucht  man im Gegenteil die Durchlaufzeit eines Features durch den Workflow zu minimieren. Wer Littles Gesetz kennt, weiß, dass das mit 100% aller Anforderungen nicht geht, sondern je weniger &#8220;work in progress&#8221; (angefangene Arbeit) man hat, desto kürzer ist die Durchlaufzeit. Deshalb limitiert man in Kanban die Zahl der gleichzeitig in Arbeit befindlichen Features.</p>
<p>Jeder, der arbeitet, soll die Gelegenheit haben, sich zu konzentrieren &#8211; also limitiert man die Zahl der Features z.B. auf 4, wenn man 3 Entwickler hat. Die drei Entwickler sollten im wesentlichen immer an je einem  Feature arbeiten, es sei denn, dieses ist blockiert, weil man auf eine Antwort wartet oder weil eine Ressource fehlt, die man braucht. Dann darf man sich ausnahmsweise ein 4. Feature ziehen.</p>
<p>Je geringer die Menge gleichzeitig angefangener Arbeit, desto geringer ist auch die Zahl der Fehler, die man einbaut. Menschen arbeiten wesentlich korrekter, wenn sie konzentriert sind. Dies reduziert die Zahl der Überarbeitungen, die notwendig sind, um ein Vielfaches!</p>
<p>Auch die Isolation, die im Wasserfall typisch ist, gibt es in Kanban nicht. Da Kanban aus dem agilen Umfeld stammt, ist Kommunikation ein hohes Gut. Man sollte immer mit den Leuten reden, die am selben Feature gearbeitet haben oder arbeiten werden wie man selbst. Der Entwickler wird den Business Analysten oder den Architekten fragen, der Tester wird den Entwickler fragen, was hinter gewissen Zusammenhängen eigentlich steckt. Viel besser ist es natürlich, wenn Business Analyst und Entwickler zum selben cross-funktionalen Team (wie in Scrum) gehören und das Feature gemeinsam analysieren und realisieren.</p>
<h3>Die Kraft des Vakuums</h3>
<p>Oben habe ich das Beispiel mit dem überlasteten Product Owner erwähnt, bei dem sich ein Test-Stau bildete. In Scrum würde man dies jetzt auf die Impediment-Liste des Scrum-Masters schreiben und dieser würde gegen den Effekt zu kämpfen beginnen. In Kanban würde man das vermutlich folgendermaßen lösen: Man würde für die Spalte &#8220;acceptance test&#8221; ein WIP-Limit einführen und z.B. auf die Menge einschränken, die der Product Owner in einem Time-Slot, den er sich bei seinen vielen Projekten nimmt, bewältigen kann. Hat er ab und zu mal zwei Stunden Zeit und kann darin 3 Features sauber testen, so würde man das &#8220;work in progress&#8221;(WIP)-Limit auf 3 setzen. Was würde dann passieren?</p>
<p>Schließen Sie die Augen und überlegen Sie eine Minute, bevor Sie weiterlesen!</p>
<p>Die Entwickler würden jedesmal, wenn sie etwas fertig haben, eine Karte in die Spalte &#8220;acceptance test&#8221; schieben. Kommt der Product Owner nicht zum Testen und enthält die Spalte nun 3 Karten, würden die Entwickler einfach aufhören zu entwickeln. Sie würden stattdessen vielleicht refaktorisieren, Urlaub machen, Schulungen besuchen, Kaffee trinken oder andere sinnvolle Tätigkeiten durchführen. Beim morgendlichen Stand-Up würden sie diese Tatsache auch sofort bekanntgeben.</p>
<p>Das Risiko, den Sprint mit einer ungetesteten Featuremenge zu beenden, würde dadurch drastisch abnehmen. Das Team inklusive P.O. wäre plötzlich als Gesamtsystem erkennbar, das einfach nicht in der Lage ist, mehr zu leisten als der P.O. fertigbekommt. Der P.O. wäre ganz klar als Bottleneck erkennbar.</p>
<p>Was würde als nächstes passieren, wenn niemand interveniert? Denken Sie einen Moment nach&#8230;</p>
<h3>Das Vakuum greift um sich</h3>
<p>Wenn die Entwickler weniger tun, staut sich plötzlich alles im Backlog zurück. Nehmen Sie an, wir hätten mittels Kanban auch die Länge des Backlogs limitiert. Die Leute, die bisher dem Product Owner geholfen haben, Features zu beschreiben und ins Backlog zu bringen (nennen wir sie &#8220;fachliche Analysten&#8221;), wären dann plötzlich ebenfalls arbeitslos, weil sie nichts mehr in das bereits volle (weil limitierte) Backlog stellen dürfen.</p>
<p>Oh, hier haben wir Analysten, also fachlich geschulte Leute, die frei sind! Was tun wir mit denen? Wir machen sie zu Testern, die zunächst einmal den Stau von Akzeptanztests abbauen und dadurch den P.O. entlasten. Damit wird die Spalte &#8220;acceptance test&#8221; wieder frei, die Entwickler nehmen die Arbeit wieder auf und produzieren wieder. Im Backlog werden dadurch wieder Plätze frei, also können die Analysten ihre eigentliche Arbeit wieder aufnehmen und neue Backlog-Items produzieren. Der Propfen löst sich.</p>
<h3>Von der Taktik zur Strategie</h3>
<p>Das gerade geschilderte Verhalten ist sicherlich nicht optimal, doch hat es erst einmal geholfen. Das Management wird inzwischen von der Aktion gehört haben und sich entscheiden, mehr Tester einzustellen, die dem Product Owner helfen. Die Tester kommen langsam auf Touren und der Propfen wird sich dann nicht mehr bilden müssen.</p>
<h3>Die Antwort auf die Frage nach dem Wasserfall</h3>
<p>Johannes Frage von oben könnte man nun anders formulieren:</p>
<blockquote><p>Warum zeigen so viele Agilisten ihr neues Tool Kanban mit einer so ausführlichen Arbeitsaufteilung (so viele Spalten auf dem Taskboard)?</p></blockquote>
<p>Weil sie zeigen wollen, was wirklich passiert. Das dreispaltige Scrum-Taskboard zeigt eben nicht, dass in der Sprint-Mitte typischerweise viel WIP entsteht, besonders bei unreifen Scrum-Teams, die noch nicht lange dabei sind. Führt man mehr Spalten ein, bildet man die Realität im Team u.U. besser ab und kann auf Effekte aufmerksam machen, die man vorher übersehen hat.</p>
<p><em>D&#8217;accord, Johannes?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/14/kanban-missverstandnisse-teil-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Die Auferstehung eines Acer Aspire One</title>
		<link>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/#comments</comments>
		<pubDate>Sun, 09 May 2010 08:30:17 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1136</guid>
		<description><![CDATA[Manchmal überkommt mich ein Bastelzwang, wenn ich wieder zu lange zu ernsthaft gearbeitet habe. Das war heute auch wieder so.
Ich hatte mich entschieden, auf meinem Acer Aspire One Netbook eine neue Linux-Version (Ubuntu 10.04) zu installieren. Klappte auch wunderbar. Ubuntu heruntergeladen und auf einen USB-Stick geschrieben, mit dem Stick den Rechner gebootet und Ubuntu ganz einfach [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal überkommt mich ein Bastelzwang, wenn ich wieder zu lange zu ernsthaft gearbeitet habe. Das war heute auch wieder so.</p>
<p>Ich hatte mich entschieden, auf meinem Acer Aspire One Netbook eine neue Linux-Version (Ubuntu 10.04) zu installieren. Klappte auch wunderbar. Ubuntu <a href="http://www.ubuntu.com/getubuntu/download-netbook">heruntergeladen</a> und <a href="http://www.pendrivelinux.com/create-a-ubuntu-9-10-live-usb-in-windows/">auf einen USB-Stick geschrieben</a>, mit dem Stick den Rechner gebootet und Ubuntu ganz einfach parallel zu Windows auf der Festplatte installiert. Rechner neu gebootet, und ich konnte mit Ubuntu oder Windows arbeiten, je nachdem, wie ich Lust hatte.</p>
<p>Doch leider: Beim einem der nächsten Restarts der Maschine kam es zu einem <strong>Black Screen Of Death</strong>, einem in der Acer-Community offenbar wohlbekannten Problem mit einem nicht mehr startbaren BIOS: Schwarzer Bildschirm nach dem Einschalten, keine Bootmeldungen, voller Stopp!</p>
<p>Gott sei Dank war das Problem relativ leicht zu beheben:</p>
<ul>
<li>Neues BIOS von der <a href="http://support.acer-euro.com/drivers/notebook/as_one_150.html">Acer-Supportseite</a> laden.</li>
<li>Auf einen frisch formatierten USB-Stick schreiben.</li>
<li>Diesen <a href="http://gborn.blogger.de/stories/1218795/">magischen Anweisungen folgen</a> und derweil beschwörende Sprüche murmeln.</li>
</ul>
<p>Der Aspire One war danach wieder einsatzbereit. Manchmal hat man doch wirklich Glück, obwohl man es herausfordert. <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/09/die-auferstehung-eines-acer-aspire-one/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Softwarearchitekten &#8211; die machtlosen Anführer</title>
		<link>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/</link>
		<comments>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/#comments</comments>
		<pubDate>Fri, 07 May 2010 17:02:31 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=1125</guid>
		<description><![CDATA[Die neue Ausgabe der Fachzeitschrift OBJEKTspektrum ist seit kurzem auf dem Markt, diesmal mit dem Schwerpunktthema &#8220;Architektur und Teams&#8221;. Darin finden Sie auch einen Artikel von mir: Emergente Architektur: Der machtlose Architekt. Hier die Zusammenfassung:
Die Softwarearchitektur ist ein wichtiges Artefakt der Softwareentwicklung. Softwarearchitekten müssen kommunikationsstark sein, für die Durchsetzung der Architektur in den Projekten sorgen [...]]]></description>
			<content:encoded><![CDATA[<p>Die neue Ausgabe der Fachzeitschrift <a href="http://www.objektspektrum.de">OBJEKTspektrum</a> ist seit kurzem auf dem Markt, diesmal mit dem Schwerpunktthema &#8220;Architektur und Teams&#8221;. Darin finden Sie auch einen Artikel von mir: <a href="http://www.sigs-datacom.de/fachzeitschriften/objektspektrum/archiv/artikelansicht.html?tx_mwjournals_pi1[pointer]=0&amp;tx_mwjournals_pi1[mode]=1&amp;tx_mwjournals_pi1[showUid]=6588">Emergente Architektur: Der machtlose Architekt</a>. Hier die Zusammenfassung:</p>
<blockquote><p>Die Softwarearchitektur ist ein wichtiges Artefakt der Softwareentwicklung. Softwarearchitekten müssen kommunikationsstark sein, für die Durchsetzung der Architektur in den Projekten sorgen usw. Das ist die öffentliche Meinung. In der Projektrealität sieht es meist anders aus: Architekturdokumente werden mühsam erstellt, doch im Alltag nicht gelesen. Architekten versuchen, durch Predigen die Einhaltung der Architektur zu erreichen. Teams entwickeln, auch ohne auf die Architektur zu achten. Was wäre, wenn man Architektur emergieren lassen würde, quasi als &#8220;Ergebnis des Schwarms&#8221;, anstatt sie mit viel Kraft in Einzelleistung zu erstellen? Die folgende Geschichte ist ein Kondensat meiner Erfahrung aus vielen Projekten. Lesen Sie, warum Architektur letztlich nicht von Einzelnen gemacht werden kann, und erfahren Sie, was nötig ist, damit Emergenz möglich wird.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2010/05/07/softwarearchitekten-die-machtlosen-anfuhrer-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kanban-Training im Februar 2010</title>
		<link>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/</link>
		<comments>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 23:12:22 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=648</guid>
		<description><![CDATA[Im Februar gebe ich ein zweitägiges Kanban-Training in deutscher Sprache. Kanban ist ein leichtgewichtiges Prozess-Framework für die Entwicklung von Software. Es überträgt die Kanban-Prinzipien, die ursprünglich im Umfeld von Lean Production entstanden sind, auf die Softwareentwicklung.
Anmeldung und Organisation übernimmt SIGS-DATACOM, auf deren Website Sie weitere Informationen über dieses Training finden können.
Ich freue mich, Sie in [...]]]></description>
			<content:encoded><![CDATA[<p>Im Februar gebe ich ein zweitägiges Kanban-Training in deutscher Sprache. <a href="http://de.wikipedia.org/wiki/Kanban_in_der_IT">Kanban</a> ist ein leichtgewichtiges Prozess-Framework für die Entwicklung von Software. Es überträgt die Kanban-Prinzipien, die <a href="http://de.wikipedia.org/wiki/Kanban">ursprünglich im Umfeld von Lean Production</a> entstanden sind, auf die Softwareentwicklung.</p>
<p>Anmeldung und Organisation übernimmt SIGS-DATACOM, auf deren Website Sie <a href="http://www.sigs-datacom.de/nc/seminare/seminardetails.html?tx_mwworkshops_pi1%5BshowUid%5D=1442&amp;tx_mwworkshops_pi1%5BdateID%5D=394">weitere Informationen</a> über dieses Training finden können.</p>
<p>Ich freue mich, Sie in Köln zu sehen &#8211; das Training wird sehr spannend werden!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/12/21/kanban-training-im-februar-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This blog is now iPhone-ready!</title>
		<link>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/</link>
		<comments>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:03:15 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=646</guid>
		<description><![CDATA[Today, I upgraded to Wordpress 2.9 and the WPtouch plugin. Now, the users of Apple&#8217;s iPhone and other mobile clients can browse this blog more easily. Have fun!
]]></description>
			<content:encoded><![CDATA[<p>Today, I upgraded to Wordpress 2.9 and the <a href="http://www.bravenewcode.com/wptouch/">WPtouch</a> plugin. Now, the users of Apple&#8217;s iPhone and other mobile clients can browse this blog more easily. Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/12/20/this-blog-is-now-iphone-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome back, Uncle Bob!  [OOP 2010]</title>
		<link>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/</link>
		<comments>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 20:32:21 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=639</guid>
		<description><![CDATA[At the OOP 2010 conference, Robert C. Martin will give a keynote about polyglot programming, called &#8220;The Polyglot Craftsman&#8221;.
Hey, Uncle Bob is back at OOP,! For me this is very special because it was him who brought me to object oriented design/programming and to my first OOP conference, ever. And this was back in 1992 [...]]]></description>
			<content:encoded><![CDATA[<p>At the <a href="http://www.oopconference.com">OOP 2010</a> conference, <a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin">Robert C. Martin</a> will give a keynote about polyglot programming, called &#8220;The Polyglot Craftsman&#8221;.</p>
<p>Hey, Uncle Bob is back at OOP,! For me this is very special because it was him who brought me to object oriented design/programming and to my first OOP conference, ever. And this was back in 1992 when I was a enthusiastic software developer, coding in C. Java did not exist in those days, design patterns were not published, there was no TDD &#8211; well, it was just the old days of poorly maintainable code!</p>
<p>Bob, when I came into your workshop about object oriented design at OOP, you started with a very simple example in C++ (at least, I thought it was): a car with an engine. You said something like this:</p>
<p>Bob: &#8220;OK, guys, lets define an accelerate() method on the car &#8211; what would be inside the body of this method?&#8221;. And my head started thinking. Somebody else: &#8220;The car should tell the carburator to increase the fuel to air ratio. And it should also tell the automatic transmission to shift one gear up!&#8221;</p>
<p>Bob: &#8220;OK, so Car::accelerate() calls Carburator::increaseFuelToAirRatio(), followed by Transmission::shiftUp(). Question to all of you: Is this a good design or a bad design?&#8221;</p>
<p>And poor me, inexperienced in OOD, could say neither yes nor no: &#8220;In fact, I don&#8217;t know!&#8221;.</p>
<p>Bob, you suddenly shouted &#8220;Of course, it is a BAD design, very bad design!&#8221;</p>
<p>Me: &#8220;Oh, why this?&#8221;</p>
<p>Bob: &#8220;What if you have a Diesel engine, without carburator? And: What if your car has an electric engine, without transmission?&#8221;</p>
<p>Me: &#8220;Hmmm&#8230; well, I guess, I would have to change the design significantly. Something like Thyristor::increaseElectricCurrent().&#8221;</p>
<p>Bob: &#8220;Exactly! So, how about introducing a neutral abstraction above all this? How about Engine::increasePower()? And with an intelligent Engine class that knows how to increase the power purely by itself? With nobody telling it how to do that?&#8221;</p>
<p>Me: &#8220;Aha!&#8221;</p>
<p>And so 1992 was the year when I became enthusiastic about object oriented design. Thanks a lot, Bob &#8211; I am really looking forward to see you again at this OOP. I guess, you won&#8217;t remember me but this is not a problem. <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/11/09/welcome-back-uncle-bob-oop-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Understanding social media</title>
		<link>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:45:14 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=602</guid>
		<description><![CDATA[At the moment, there is a lot of buzz around social media like Twitter. Keyword is &#8220;democratizing information&#8221;. Social media users are forming new communities with their own rules and &#8220;social speak&#8221;. There are even web sites like Klout that calculate how much influence you have in social media (when I test my Twitter user [...]]]></description>
			<content:encoded><![CDATA[<p>At the moment, there is a lot of buzz around social media like Twitter. Keyword is &#8220;democratizing information&#8221;. Social media users are forming new communities with their own rules and &#8220;social speak&#8221;. There are even web sites like <a href="http://www.klout.net/">Klout</a> that calculate how much influence you have in social media (when I test my Twitter user account, it says that it has not indexed my tweets, yet).</p>
<p>This is an interesting phenomenon that I am trying to study and understand. Maybe, it is possible to generate something entirely new.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/13/understanding-social-media/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Viele externe Entwickler = schneller alternde Software?</title>
		<link>http://www.mbohlen.de/blog/2009/09/02/viele-externe-entwickler-schneller-alternde-software/</link>
		<comments>http://www.mbohlen.de/blog/2009/09/02/viele-externe-entwickler-schneller-alternde-software/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 19:15:29 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=580</guid>
		<description><![CDATA[Sowas passiert Ihnen in Ihrem Projekt hoffentlich nie:
Kunde: &#8220;Wir verstehen unser Framework nicht mehr. Es ist total verstrickt!&#8221;
Berater: &#8220;Aber Ihr habt doch gesagt, es sei erst zwei Jahre jung.&#8221;
Kunde: &#8220;Ja, und?&#8221;
Berater: &#8220;Sowas passiert doch sonst nur mit viel älterer Software!&#8221;
Kunde: &#8220;Nein, hier waren viele Externe vom Dienstleister XY dabei, da altert das Framework schneller!&#8221;
Berater: &#8220;Oh!???&#8221;
]]></description>
			<content:encoded><![CDATA[<p>Sowas passiert Ihnen in Ihrem Projekt hoffentlich nie:</p>
<p><strong>Kunde</strong>: &#8220;Wir verstehen unser Framework nicht mehr. Es ist total verstrickt!&#8221;</p>
<p><strong>Berater</strong>: &#8220;Aber Ihr habt doch gesagt, es sei erst zwei Jahre jung.&#8221;</p>
<p><strong>Kunde</strong>: &#8220;Ja, und?&#8221;</p>
<p><strong>Berater</strong>: &#8220;Sowas passiert doch sonst nur mit viel älterer Software!&#8221;</p>
<p><strong>Kunde</strong>: &#8220;Nein, hier waren viele Externe vom Dienstleister XY dabei, da altert das Framework schneller!&#8221;</p>
<p><strong>Berater</strong>: &#8220;Oh!???&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/09/02/viele-externe-entwickler-schneller-alternde-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Null-Constraint bei MySQL entfernen</title>
		<link>http://www.mbohlen.de/blog/2009/08/30/null-constraint-bei-mysql-entfernen/</link>
		<comments>http://www.mbohlen.de/blog/2009/08/30/null-constraint-bei-mysql-entfernen/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 20:27:21 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/2009/08/30/null-constraint-bei-mysql-entfernen/</guid>
		<description><![CDATA[Bevor ich die Syntax vergesse:

ALTER TABLE my_table MODIFY some_column varchar&#40;255&#41; NULL;

]]></description>
			<content:encoded><![CDATA[<p>Bevor ich die Syntax vergesse:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> my_table <span style="color: #993333; font-weight: bold;">MODIFY</span> some_column varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NULL</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/08/30/null-constraint-bei-mysql-entfernen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Released OpenID plugin V0.2 for Grails</title>
		<link>http://www.mbohlen.de/blog/2009/08/22/released-openid-plugin-v02-for-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/08/22/released-openid-plugin-v02-for-grails/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 19:59:58 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=478</guid>
		<description><![CDATA[Today, I released version 0.2 of the OpenID plugin for Grails (really easy to use plugin by original author Marcel Overdijk). The changes I made today:

Fixed a bug that caused a MissingPropertyException when user typed an OpenID that did not have a valid provider address
Fixed a bug that caused a NullPointerException when user&#8217;s OpenID contained [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I released version 0.2 of the <a href="http://openid.net/">OpenID</a> plugin for <a href="http://www.grails.org">Grails</a> (really easy to use plugin by original author <a href="http://marceloverdijk.blogspot.com/">Marcel Overdijk</a>). The changes I made today:</p>
<ul>
<li>Fixed a bug that caused a MissingPropertyException when user typed an OpenID that did not have a valid provider address</li>
<li>Fixed a bug that caused a NullPointerException when user&#8217;s OpenID contained syntactical errors</li>
<li>Simplified code in the controller so that it is now independent of the configured URL mapping</li>
</ul>
<p>You can find more information about the plugin on <a href="http://www.grails.org/OpenID+Plugin">the plugin&#8217;s Wiki page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/08/22/released-openid-plugin-v02-for-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SplendiCon ist online</title>
		<link>http://www.mbohlen.de/blog/2009/07/26/splendicon-ist-online/</link>
		<comments>http://www.mbohlen.de/blog/2009/07/26/splendicon-ist-online/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 22:22:39 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=451</guid>
		<description><![CDATA[Consultants, insbesondere die aus der IT, träumen von einem eigenen Produkt. So auch ich. Den Kunden zeigen, was man kann. Zeigen, was gute Softwarearchitektur ist. Frei über eine Lösung sprechen können, ohne den NDA eines Kunden zu verletzen. All das ist der Vorteil eines eigenen Produkts.
SplendiCon ist ein solches Produkt. Ich habe es vorige Woche [...]]]></description>
			<content:encoded><![CDATA[<p>Consultants, insbesondere die aus der IT, träumen von einem eigenen Produkt. So auch ich. Den Kunden zeigen, was man kann. Zeigen, was gute Softwarearchitektur ist. Frei über eine Lösung sprechen können, ohne den NDA eines Kunden zu verletzen. All das ist der Vorteil eines eigenen Produkts.</p>
<p><a title="SplendiCon conference management system" href="http://www.splendicon.net">SplendiCon</a> ist ein solches Produkt. Ich habe es vorige Woche online geschaltet. Es ist ein System, mit dem Sie Ihre eigene Konferenz organisieren können. Autoren/Sprecher/faszinierende Personen einladen, Beiträge in SplendiCon hochzuladen, mit einer Kurzbeschreibung und einer Datei. Qualifizierte Experten als Reviewer für diese Beiträge gewinnen und deren Ergebnisse einsammeln. Konflikte zwischen diesen Ergebnissen erkennen und in einer Programmkonferenz lösen. Zum Schluss das Konferenzprogramm, das verabschiedet wurde, downloaden.</p>
<p>Es hat Freude gemacht, dieses System in <a href="http://groovy.codehaus.org">Groovy</a> auf Basis von <a href="http://grails.org">Grails</a> zu entwickeln. Es läuft auf Tomcat, davor übernimmt Apache 2 die Rolle des Reverse Proxy, managt die SSL-Verbindungen und zeichnet die Webzugriffe im Logbuch auf. MySQL ist die verlässliche Datenbank im Backend. Linux als bewährtes Serversystem werkelt oberhalb der Silizium-Ebene und macht die Kraft der AMD-Prozessoren zugreifbar. SplendiCon spricht mit <a href="http://www.paypal.com">Paypal</a>, dem Bezahldienst, sobald jemand eine Lizenz für eine Konferenz kauft.</p>
<p>Das Ganze performt sehr schön &#8211; ich bin gespannt, wie es weitergeht, sobald die Userzahlen steigen.</p>
<p>SplendiCon wird unterstützt von einem <a href="http://www.splendicon.net/forum">User Forum</a>, in dem die Benutzer Fragen stellen und Antworten bekommen. Auch ein <a href="http://www.splendicon.net/thebuggenie">Bugtracker</a> ist online, er nimmt Fehlermeldungen und neue Anforderungen auf.</p>
<p>Ich lade alle, die sich mit der Organisation von Konferenzen befassen, herzlich auf die SplendiCon-Plattform ein. Surfen Sie vorbei: <a href="http://www.splendicon.net">http://www.splendicon.net</a> oder melden Sie sich auf Twitter: <a href="http://www.twitter.com/splendicon">@splendicon</a> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/07/26/splendicon-ist-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails Paypal Plugin V0.4 released</title>
		<link>http://www.mbohlen.de/blog/2009/07/18/grails-paypal-plugin-v04-released/</link>
		<comments>http://www.mbohlen.de/blog/2009/07/18/grails-paypal-plugin-v04-released/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 08:48:02 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=437</guid>
		<description><![CDATA[Today, I released the Grails Paypal Plugin again, the new release number: V0.4.
New features:

The plugin now supports purchases with multiple items (using whatever shopping cart you like). Thanks to Matt Stine for the code!
The plugin now records the information about the buyer that is supplied by Paypal after each transaction. This information includes name, address [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I released the Grails Paypal Plugin again, the new release number: V0.4.</p>
<p>New features:</p>
<ul>
<li>The plugin now supports purchases with multiple items (using whatever shopping cart you like). Thanks to Matt Stine for the code!</li>
<li>The plugin now records the information about the buyer that is supplied by Paypal after each transaction. This information includes name, address and email address, for example.</li>
</ul>
<p>Bugs fixed:</p>
<ul>
<li>In some rare situations when an Apache reverse proxy was running as a front end for the Tomcat engine, the plugin could not redirect back to the original URI in case of an invalid payment. I replaced the URI by an absolute URL, now it works. Users of the plugin: Please change the parameter <strong>originalURI</strong> to <strong>originalURL</strong> and supply an absolute URL when you use the Paypal button tag, like this:</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;paypal:button</span></span>
<span style="color: #009900;">    ...</span>
<span style="color: #009900;">    <span style="color: #000066;">originalURL</span>=<span style="color: #ff0000;">&quot;${createLink(absolute: true, controller: controller, action: action, params: params)}&quot;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>For users of Paypal Plugin V0.3: The schema has changed, the database needs to be migrated!</p>
<p>You can find the <a href="http://www.grails.org/PayPal+Plugin">plugin homepage here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/07/18/grails-paypal-plugin-v04-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Grails Paypal plugin 0.3 released</title>
		<link>http://www.mbohlen.de/blog/2009/06/22/grails-paypal-plugin-03-released/</link>
		<comments>http://www.mbohlen.de/blog/2009/06/22/grails-paypal-plugin-03-released/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 19:48:34 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=410</guid>
		<description><![CDATA[The Grails plugins project has accepted me as a committer. I am working on the Paypal plugin for Grails because I need it for a production site.
Today, I released V0.3 of the Paypal plugin. You can install it as usual with

grails install-plugin paypal

A description of the plugin is available at:

http://grails.org/PayPal+Plugin

The main changes in release 0.3:
Bugfix:

The [...]]]></description>
			<content:encoded><![CDATA[<p>The Grails plugins project has accepted me as a committer. I am working on the Paypal plugin for Grails because I need it for a production site.</p>
<p>Today, I released V0.3 of the Paypal plugin. You can install it as usual with</p>
<ul>
<li>grails install-plugin paypal</li>
</ul>
<p>A description of the plugin is available at:</p>
<ul>
<li><a href="http://grails.org/PayPal+Plugin">http://grails.org/PayPal+Plugin</a></li>
</ul>
<p>The main changes in release 0.3:<br />
Bugfix:</p>
<ul>
<li>The plugin now gives a proper response to Paypal when Paypal sends an IPN. Before, the plugin did not send a response so that Paypal repeated the IPN message several times.</li>
</ul>
<p>New feature:</p>
<ul>
<li>Analogous to the parameters &#8216;returnController&#8217; and &#8217;returnAction&#8217;, we now have &#8216;cancelController&#8217; and &#8216;cancelAction&#8217;. You can specify a controller and an action to process the cancellation of a payment.</li>
</ul>
<p>More changes are on the way. <a href="http://matt-stine.blogspot.com/">Matt Stine</a> has written code that allows you to purchase an entire shopping cart full of items instead of a single item as the plugin can do today. The new code is still under test.</p>
<p>Cheers,<br />
Matthias</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/06/22/grails-paypal-plugin-03-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neuer Vortrag auf den OMG Information Days</title>
		<link>http://www.mbohlen.de/blog/2009/05/30/neuer-vortrag-auf-den-omg-information-days/</link>
		<comments>http://www.mbohlen.de/blog/2009/05/30/neuer-vortrag-auf-den-omg-information-days/#comments</comments>
		<pubDate>Sat, 30 May 2009 21:19:39 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=379</guid>
		<description><![CDATA[Auf den OMG Information Days in Düsseldorf, Darmstadt und München halte ich einen neuen Vortrag, der das innige Verhältnis zwischen Anforderungen, Architektur und Projektvertrag beleuchtet. Wie müssen Anforderungen gemacht sein, um zur Basis &#8220;guter&#8221; Software-Architektur zu werden? Und wie können gut gemanagte Anforderungen Grundlage von Projektverträgen werden?
Ich freue mich darauf, Sie am 30.6., 1.7 und [...]]]></description>
			<content:encoded><![CDATA[<p>Auf den <strong>OMG Information Days in Düsseldorf, Darmstadt und München</strong> halte ich einen neuen Vortrag, der das innige Verhältnis zwischen Anforderungen, Architektur und Projektvertrag beleuchtet. Wie müssen Anforderungen gemacht sein, um zur Basis &#8220;guter&#8221; Software-Architektur zu werden? Und wie können gut gemanagte Anforderungen Grundlage von Projektverträgen werden?</p>
<p>Ich freue mich darauf, Sie am <strong>30.6., 1.7 und 2.7.</strong> in diesem Vortrag zu sehen und mit Ihnen innovative Ideen zu diskutieren!</p>
<p>Mehr Info dazu finden Sie bei <a href="http://www.sigs-datacom.de/sd/kongresse/infodays/2009/01/session_details.htm?&amp;Event=omg2009_01&amp;ID=3">SIGS DATACOM</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/05/30/neuer-vortrag-auf-den-omg-information-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails mit jQuery ist cool</title>
		<link>http://www.mbohlen.de/blog/2009/04/22/grails-mit-jquery-ist-cool/</link>
		<comments>http://www.mbohlen.de/blog/2009/04/22/grails-mit-jquery-ist-cool/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 21:42:47 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=364</guid>
		<description><![CDATA[Webanwendungen mit Grails im Backend ergänzen sich ideal mit jQuery im Frontend. Wirklich cool, was man an clientseitigen Effekten im Browser so erreichen kann, wenn man ein gutes JavaScript-Framework wie jQuery einsetzt. Noch eine Prise CSS-Magie hinzufügen, und man fühlt sich beim Programmieren wie Harry Potter, als er ausgelernt hatte. Webanwendungen machen wieder Spaß. Ich [...]]]></description>
			<content:encoded><![CDATA[<p>Webanwendungen mit <a href="http://www.grails.org/">Grails</a> im Backend ergänzen sich ideal mit <a href="http://jquery.com/">jQuery</a> im Frontend. Wirklich cool, was man an <a href="http://jqueryui.com/">clientseitigen Effekten</a> im Browser so erreichen kann, wenn man ein gutes JavaScript-Framework wie jQuery einsetzt. Noch eine Prise CSS-Magie hinzufügen, und man fühlt sich beim Programmieren wie Harry Potter, als er ausgelernt hatte. Webanwendungen machen wieder Spaß. Ich bin begeistert!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/04/22/grails-mit-jquery-ist-cool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filters in Grails</title>
		<link>http://www.mbohlen.de/blog/2009/02/17/filters-in-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/02/17/filters-in-grails/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 20:00:51 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=326</guid>
		<description><![CDATA[Nur, damit ich es selbst im Kopf behalte&#8230; die Filterkette in Grails ist ja richtig kompliziert! Sie läuft in folgender Reihenfolge ab:

Servlet Filter before chain.doFilter() (Acegi runs here)
GrailsDispatcherServlet.doDispatch() starts
Spring MVC Interceptors preHandle() (OSIVI opens session)
Grails Filters &#8220;before&#8221; closure
Controller beforeInterceptor
Controller action
Controller afterInterceptor
Grails Filters &#8220;after&#8221; closure
Spring MVC Interceptors postHandle
View rendering
Grails Filters &#8220;afterView&#8221; closure
Spring MVC Interceptors afterCompletion() (OSIVI [...]]]></description>
			<content:encoded><![CDATA[<p>Nur, damit ich es selbst im Kopf behalte&#8230; die Filterkette in Grails ist ja richtig kompliziert! Sie läuft in folgender Reihenfolge ab:</p>
<ol>
<li>Servlet Filter before chain.doFilter() (Acegi runs here)</li>
<li>GrailsDispatcherServlet.doDispatch() starts</li>
<li>Spring MVC Interceptors preHandle() (OSIVI opens session)</li>
<li>Grails Filters &#8220;before&#8221; closure</li>
<li>Controller beforeInterceptor</li>
<li>Controller action</li>
<li>Controller afterInterceptor</li>
<li>Grails Filters &#8220;after&#8221; closure</li>
<li>Spring MVC Interceptors postHandle</li>
<li>View rendering</li>
<li>Grails Filters &#8220;afterView&#8221; closure</li>
<li>Spring MVC Interceptors afterCompletion() (OSIVI closes session)</li>
<li>Grails DispatcherServlet.doDispatch() ends</li>
<li>Servlet Filter after chain.doFilter() (Sitemesh runs here)</li>
</ol>
<p>Uff!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/02/17/filters-in-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I18N-Problem in Grails</title>
		<link>http://www.mbohlen.de/blog/2009/02/04/i18n-problem-in-grails/</link>
		<comments>http://www.mbohlen.de/blog/2009/02/04/i18n-problem-in-grails/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 13:54:06 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=296</guid>
		<description><![CDATA[Wenn man eine mehrsprachenfähige Webanwendung erstellen will, unterstützt Grails recht gut dabei. Man legt eine messages.properties-Datei (ein Message-Bundle) pro Sprache an und schreibt dort (wie in Java üblich) die Übersetzung von Schlüssel auf Text, so wie es auf der Grails-Website beschrieben ist. Die GSP-Seiten enthalten &#60;g:message&#62;-Tags zur Übersetzung.
Leider gab es bei mir ein Problem: Ich [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man eine mehrsprachenfähige Webanwendung erstellen will, unterstützt Grails recht gut dabei. Man legt eine messages.properties-Datei (ein Message-Bundle) pro Sprache an und schreibt dort (wie in Java üblich) die Übersetzung von Schlüssel auf Text, so wie es <a href="http://grails.org/Internationalization">auf der Grails-Website beschrieben</a> ist. Die GSP-Seiten enthalten &lt;g:message&gt;-Tags zur Übersetzung.</p>
<p>Leider gab es bei mir ein Problem: Ich habe eine Grails-Anwendung mit einem deutschen und einem Default-Bundle, das englische Texte enthält und immer dann zum Zuge kommen soll, wenn die Sprache des Browser-Clients eben nicht Deutsch ist. Also:</p>
<ul>
<li>messages_de.properties für Deutsch</li>
<li>messages.properties für alle anderen Sprachen</li>
</ul>
<p>Ich stellte meinen Browser auf Deutsch ein &#8211; alles wunderbar, die deutschen Texte kamen einwandfrei. Ich stellte den Browser auf Englisch ein &#8211; Enttäuschung: es kamen immer noch deutsche Texte!</p>
<p>Nach einigem Suchen im Quellcode von Grails (ValidationTagLib.groovy) fand ich heraus, dass für die Übersetzung ein Objekt vom Typ ReloadableResourceBundleMessageSource aus dem Spring-Framework verantwortlich ist. Dieses hat eine Property <strong>fallbackToSystemLocale</strong>, die auf true oder false stehen kann. Sie steht standardmäßig auf <strong>true</strong>, das heißt, wenn kein Text für das eingestellte Locale gefunden wird, wird nicht etwa der Text aus dem Default-Bundle genommen, sondern noch einmal in demjenigen Message-Bundle gesucht, das dem &#8220;system locale&#8221; entspricht. Meine Servermaschine läuft auch auf Deutsch, so dass nochmals auf die Texte in message_de.properties zugegriffen wurde.</p>
<p>Abhilfe:</p>
<p>Jetzt war klar, dass diese Property während der Initialisierung auf false gesetzt werden muss. Mit folgenden Zeilen in <strong>Boostrap.groovy</strong> war der Fehler behoben:</p>
<pre>import org.codehaus.groovy.grails.commons.ApplicationAttributes

def init = { servletContext -&gt;
    def ctx = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
    def messageSource = ctx.getBean("messageSource")
    messageSource.fallbackToSystemLocale = false
}</pre>
<p>Wenn jetzt ein Request mit englischem Locale eintrifft, wird auf messages.properties zugegriffen, das ergibt das gewünschte Verhalten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/02/04/i18n-problem-in-grails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Upgrade auf Wordpress 2.7</title>
		<link>http://www.mbohlen.de/blog/2009/01/03/upgrade-auf-wordpress-27/</link>
		<comments>http://www.mbohlen.de/blog/2009/01/03/upgrade-auf-wordpress-27/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 11:18:51 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=265</guid>
		<description><![CDATA[Die Blogsoftware habe ich jetzt auf Wordpress 2.7 aktualisiert. Die Benutzungsoberfläche ist deutlich verbessert worden, ein paar Texte sind zwar nicht deutsch lokalisiert worden, doch das macht nichts.
]]></description>
			<content:encoded><![CDATA[<p>Die Blogsoftware habe ich jetzt auf Wordpress 2.7 aktualisiert. Die Benutzungsoberfläche ist deutlich verbessert worden, ein paar Texte sind zwar nicht deutsch lokalisiert worden, doch das macht nichts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2009/01/03/upgrade-auf-wordpress-27/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VHS auf bilinguale DVD</title>
		<link>http://www.mbohlen.de/blog/2008/09/12/vhs-auf-bilinguale-dvd/</link>
		<comments>http://www.mbohlen.de/blog/2008/09/12/vhs-auf-bilinguale-dvd/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 06:56:42 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[MacBook und Mac OS X]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=190</guid>
		<description><![CDATA[Zur Zeit digitalisiere ich alte VHS-Videokassetten auf DVDs, sofern es sie nicht als fertige DVD-Titel zu kaufen gibt.
Heute hatte ich einen alten Film in Zweikanalton, der nach dem Digitalisieren (mit EyeTV) in Stereo mit zwei Sprachen wiedergegeben wurde (links Englisch, rechts Deutsch). Wenn ich diesen ohne Zögern auf DVD gebrannt hätte, würde die Zweisprachigkeit beim [...]]]></description>
			<content:encoded><![CDATA[<p>Zur Zeit digitalisiere ich alte VHS-Videokassetten auf DVDs, sofern es sie nicht als fertige DVD-Titel zu kaufen gibt.</p>
<p>Heute hatte ich <a href="http://www.allesueberfilme.de/AmerikanischeFreundinnen-32150.html">einen alten Film</a> in Zweikanalton, der nach dem Digitalisieren (mit <a href="http://www.eyetv.com/elgato/int/mainmenu/home/what-is-eyetv.de.html">EyeTV</a>) in Stereo mit zwei Sprachen wiedergegeben wurde (links Englisch, rechts Deutsch). Wenn ich diesen ohne Zögern auf DVD gebrannt hätte, würde die Zweisprachigkeit beim anschließenden Anschauen der DVD etwas gestört haben.</p>
<p>Also habe ich in EyeTV zunächst einmal Bild und Ton getrennt (demuxing im Menü Ablage, Exportieren, Format = MPEG Elementary Streams). Es ergaben sich eine *.mpv (Video) und eine *.mpa (Audio) Datei.</p>
<p>Die *.mpa Datei habe ich dann mit dem Audio-Editor <a href="http://audacity.sourceforge.net/">Audacity</a> in zwei Spuren geteilt, dann jeweils eine gelöscht und die andere als Mono-Audio-Datei im WAV-Format exportiert. Dabei den Pegel der englischen Spur noch etwas angehoben, denn er war geringer als der der deutschen Spur.</p>
<p>Die beiden WAV-Dateien habe ich dann mit <a href="http://www.ffmpegx.com/index.html">ffmpegX</a> nach Dolby Digital (*.ac3) konvertiert, mit 228 kBit pro Sekunde, um das Audioformat zu benutzen, das die Mehrzahl der DVD-Player (so sagt man im Netz) abspielen können. Danach konnte ich die Videodatei (*.mpv) wieder mit den beiden Dolby-Audio-Dateien &#8220;muxen&#8221;, ebenfalls mit <a href="http://www.ffmpegx.com/index.html">ffmpegX</a>. Das Ergebnis war eine neue MPEG-Datei, diesmal jedoch nicht mit einer Stereo-Audio-Spur, sondern mit zwei Dolby-Mono-Spuren.</p>
<p>Schließlich habe ich Windows XP unter <a href="http://www.parallels.com/">Parallels</a> hochgestartet und dort das Programm <a href="http://www.dvdflick.net/">DVDFlick</a> gestartet. Die MPEG-Datei habe ich importiert und bei jeder Audio-Spur separat angegeben, in welcher Sprache sie aufgenommen ist (Englisch, Deutsch). Jetzt am DVD-Anfang noch ein Menü hinzugeben, das die Auswahl der Sprache erlaubt, danach alles als ISO-Image generieren lassen, fertig ist die bilinguale DVD!</p>
<p>DVDFlick erzeugt am Anfang der DVD ein Menü, das noch wenig schön ist, doch damit kann ich leben. Ich habe sonst keinen freien DVD-Editor gefunden, der es erlaubt, die Sprache der Audiospuren festzulegen. Überhaupt ist DVD-Authoring anscheinend eine durchaus nicht-triviale Aufgabe, wie man an der <a href="http://www.videohelp.com/tools/sections/macos-video-tools">großen Anzahl von kleinen Tools</a> für diese Aufgabe erkennen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/09/12/vhs-auf-bilinguale-dvd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musik auf dem Mac</title>
		<link>http://www.mbohlen.de/blog/2008/09/08/musik-auf-dem-mac/</link>
		<comments>http://www.mbohlen.de/blog/2008/09/08/musik-auf-dem-mac/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 12:28:31 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>
		<category><![CDATA[MacBook und Mac OS X]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=171</guid>
		<description><![CDATA[Heute bin ich in Urlaub, zu Hause. Zeit für Dinge, die schon lange liegen geblieben sind, wie das Musikmachen zum Beispiel. House of the Rising Sun lässt sich mit ein wenig Experimentieren in einem Tag zusammenstellen. Über die internen Lautsprecher des Mac klingt das Ganze etwas dünn, doch über ein Interface wie das Edirol UA-20 [...]]]></description>
			<content:encoded><![CDATA[<p>Heute bin ich in Urlaub, zu Hause. Zeit für Dinge, die schon lange liegen geblieben sind, wie das Musikmachen zum Beispiel. <em>House of the Rising Sun</em> lässt sich mit ein wenig Experimentieren in einem Tag zusammenstellen. Über die internen Lautsprecher des Mac klingt das Ganze etwas dünn, doch über ein Interface wie das Edirol UA-20 und ein optisches Kabel bringt die Hifi-Anlage ein recht anhörbares Ergebnis:</p>
<p><a href="http://www.mbohlen.de/blog/wp-content/uploads/2008/09/house-of-the-rising-sun.mp3">House of the Rising Sun</a><br />
<a href="http://www.mbohlen.de/blog/wp-content/uploads/2008/09/house-of-the-rising-sun.mp3"> <img class="alignnone size-medium wp-image-177" title="mp3" src="http://www.mbohlen.de/blog/wp-content/uploads/2008/09/mp3.jpg" alt="" width="73" height="94" /><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/09/08/musik-auf-dem-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.mbohlen.de/blog/wp-content/uploads/2008/09/house-of-the-rising-sun.mp3" length="2321191" type="audio/mpeg" />
		</item>
		<item>
		<title>Erster Sprint zu Ende, der zweite geht los</title>
		<link>http://www.mbohlen.de/blog/2008/08/07/erster-sprint-zu-ende-der-zweite-geht-los/</link>
		<comments>http://www.mbohlen.de/blog/2008/08/07/erster-sprint-zu-ende-der-zweite-geht-los/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 16:12:52 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=140</guid>
		<description><![CDATA[Mit dem Monatsende kam auch das Sprint-Ende mit Review und Retrospektive. Das Ergebnis sieht gut aus &#8211; das Team hat sich konzentriert und die Stories auch wirklich fertig (&#8220;done&#8221;) entwickelt. Wir mussten unterwegs etwas Federn lassen, weil wir unsere Geschwindigkeit überschätzt hatten.  Der Product Owner konnte das durch Herausnehmen von Stories korrigieren, und so [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Monatsende kam auch das Sprint-Ende mit Review und Retrospektive. Das Ergebnis sieht gut aus &#8211; das Team hat sich konzentriert und die Stories auch wirklich fertig (&#8220;done&#8221;) entwickelt. Wir mussten unterwegs etwas Federn lassen, weil wir unsere Geschwindigkeit überschätzt hatten.  Der Product Owner konnte das durch Herausnehmen von Stories korrigieren, und so haben wir den Sprint mit einer Punktlandung sauber beenden können.</p>
<p>Der Rest der Organisation bekommt langsam mit, dass Scrum ein erfolgreiches, motivierendes Verfahren sein könnte. Ich wurde gebeten, einen Vortrag darüber zu halten, was ich natürlich gern getan habe.</p>
<p>Das zweite Sprint-Planning ging viel besser als das erste &#8211; Stories in Tasks zerlegen und schätzen, Over- und Undercommitments ausbalancieren, alles diesmal sehr einfach und interaktiv. Die hypnotische Wirkung des Projektors, der das Bild des Bugtrackers an die Wand wirft, konnten wir diesmal fast neutralisieren.</p>
<p>Die Daily Scrums im zweiten Sprint gehen wie der Blitz. Die Teammitglieder haben schon die Kärtchen verschoben, ehe ich als ScrumMaster noch richtig gucken kann. Bin gespannt, wie es weitergeht.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/08/07/erster-sprint-zu-ende-der-zweite-geht-los/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fernbeziehung</title>
		<link>http://www.mbohlen.de/blog/2008/07/23/fernbeziehung/</link>
		<comments>http://www.mbohlen.de/blog/2008/07/23/fernbeziehung/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 17:20:02 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=139</guid>
		<description><![CDATA[Einige Mitglieder unseres Scrum-Teams arbeiten manchmal an einem anderen Ort. Wir binden sie neuerdings ins Daily Scrum ein, indem sie bis morgens 09:00 die drei Scrum-Fragen per Email an ein Teammitglied vor Ort beantworten. Dieses Teammitglied vertritt die entfernten Mitarbeiter und antwortet stellvertretend für sie im Daily Scrum, das um 09:30 startet.
Wir sollten nun noch [...]]]></description>
			<content:encoded><![CDATA[<p>Einige Mitglieder unseres Scrum-Teams arbeiten manchmal an einem anderen Ort. Wir binden sie neuerdings ins Daily Scrum ein, indem sie bis morgens 09:00 die drei Scrum-Fragen per Email an ein Teammitglied vor Ort beantworten. Dieses Teammitglied vertritt die entfernten Mitarbeiter und antwortet stellvertretend für sie im Daily Scrum, das um 09:30 startet.</p>
<p>Wir sollten nun noch einführen, dass wir JPEG-Fotos vom Taskboard jeden Tag per Email an die entfernten Teammitglieder schicken, damit sie wissen, wo das Team steht. Schon habe ich als ScrumMaster wieder eine neue Aufgabe!</p>
<p> <img src='http://www.mbohlen.de/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/07/23/fernbeziehung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erstes Daily Scrum</title>
		<link>http://www.mbohlen.de/blog/2008/07/16/erstes-daily-scrum/</link>
		<comments>http://www.mbohlen.de/blog/2008/07/16/erstes-daily-scrum/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 19:30:16 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=137</guid>
		<description><![CDATA[Heute war das erste Daily Scrum dieses Teams. Die Mitglieder sind bereits an morgendliche Stand-Up Meetings gewöhnt, doch mit Scrum ist das doch noch ein bisschen anders.
Die Runde lief ganz fein, jeder erklärte, was er gestern gemacht hat, was er heute macht und welche Hindernisse im Weg stehen. Mehr oder weniger alle reden mich (den [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war das erste Daily Scrum dieses Teams. Die Mitglieder sind bereits an morgendliche Stand-Up Meetings gewöhnt, doch mit Scrum ist das doch noch ein bisschen anders.</p>
<p>Die Runde lief ganz fein, jeder erklärte, was er gestern gemacht hat, was er heute macht und welche Hindernisse im Weg stehen. Mehr oder weniger alle reden mich (den ScrumMaster) an, obwohl ich am Anfang des Meetings extra gesagt habe, dass das Mitteilungen für die Peers sind, kein Statusbericht an mich. Ich bin jetzt im Moment kein Manager!</p>
<p>Das <a href="http://www.mountaingoatsoftware.com/task_boards">Taskboard</a> enthielt bereits zwei Tasks, die unter &#8220;done&#8221; einsortiert waren. Also konnten wir den Restaufwand auf dem Burndown-Chart bereits etwas verkleinern.</p>
<p>Mehrere Pigs berichten, dass sie nicht richtig fokussieren können, weil zu viele Chickens von außen Support brauchen. Klar, in den anderen Abteilungen draußen wird u.a. gegen unsere APIs, die wir herausbringen, programmiert. Kein Wunder, dass das legitime Fragen nach sich zieht. Mal schauen, wie viel Fokusfaktor uns das kosten wird.</p>
<p>Ich muss noch eine Wikiseite für die <a href="http://de.wikipedia.org/wiki/Scrum#Impediment_List">Impediment List</a> anlegen und allen mitteilen, dass sie da ist.</p>
<p>Die Neuigkeit &#8220;die im Soundso-Team machen jetzt was Neues, es heißt Scrum&#8221; verbreitet sich in den anderen Teams. Einige fragen mich, ob sie auch eine Kopie des <a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches">Büchleins von Henrik Kniberg</a> bekommen könnten, das ich für die Pigs beschaffen ließ. Natürlich, im Moment sind genug Exemplare vorhanden.</p>
<p>Bin gespannt, wie es weitergeht und wann die erste ganze Story (nicht Task) auf &#8220;done&#8221; gesetzt wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/07/16/erstes-daily-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Papier schlägt Elektronik</title>
		<link>http://www.mbohlen.de/blog/2008/07/15/papier-schlagt-elektronik/</link>
		<comments>http://www.mbohlen.de/blog/2008/07/15/papier-schlagt-elektronik/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 20:10:20 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=136</guid>
		<description><![CDATA[Im heutigen Sprint-Planning-Meeting zeigte sich ganz deutlich: elektronische Medien wie Excel-Tabellen oder Bugtracker sind Gift für ein hochinteraktives Meeting! Liest jemand die Exceltabelle von der Beamer-Leinwand ab und fragt nach Schätzungen für ein Feature &#8212; allgemeines Gähnen ist die Folge. Schnappt sich das Team jedoch die Karteikarten an der Metaplanwand, wachen alle auf und fangen [...]]]></description>
			<content:encoded><![CDATA[<p>Im heutigen Sprint-Planning-Meeting zeigte sich ganz deutlich: elektronische Medien wie Excel-Tabellen oder Bugtracker sind Gift für ein hochinteraktives Meeting! Liest jemand die Exceltabelle von der Beamer-Leinwand ab und fragt nach Schätzungen für ein Feature &#8212; allgemeines Gähnen ist die Folge. Schnappt sich das Team jedoch die Karteikarten an der Metaplanwand, wachen alle auf und fangen an, mitzumachen.</p>
<p>Dieses Video auf YouTube zeigt, wie ein anderes Team (nicht unseres!) Papier sehr kreativ nutzt, um dem Product Owner eine Software vorzuführen, die es noch gar nicht gibt. Viel Spaß beim Anschauen!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="src" value="http://www.youtube.com/v/ykJ60H4Qkvg" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/ykJ60H4Qkvg" wmode="transparent"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/07/15/papier-schlagt-elektronik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sprint-Start hat wunderbar funktioniert</title>
		<link>http://www.mbohlen.de/blog/2008/07/15/sprint-start-hat-wunderbar-funktioniert/</link>
		<comments>http://www.mbohlen.de/blog/2008/07/15/sprint-start-hat-wunderbar-funktioniert/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 20:04:40 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=135</guid>
		<description><![CDATA[Das Team hat den Sprint sauber gestartet, und das obwohl sie noch nie vorher Scrum gemacht haben!  Das macht Freude.
Product Backlog, Sprint Backlog, Product Owner, Taskboard, testbare Features, Aufwandsschätzungen, Velocity-Ermittlung, alles da in zwei halben Tagen à vier Stunden! Einen Moment, ich muss zugeben, das Product Backlog haben wir mit dem Product Owner und [...]]]></description>
			<content:encoded><![CDATA[<p>Das Team hat den Sprint sauber gestartet, und das obwohl sie noch nie vorher Scrum gemacht haben!  Das macht Freude.</p>
<p>Product Backlog, Sprint Backlog, Product Owner, Taskboard, testbare Features, Aufwandsschätzungen, Velocity-Ermittlung, alles da in zwei halben Tagen à vier Stunden! Einen Moment, ich muss zugeben, das Product Backlog haben wir mit dem Product Owner und dem Team schon vorher erstellt und dann in den letzten Tagen des alten Vorgehens ganz penibel sauber gemacht, bevor wir in dieses Planning Meeting gingen &#8211; das hat uns lange Diskussionen erspart!</p>
<p>Jetzt bin ich gespannt, was im Daily Scrum passiert&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/07/15/sprint-start-hat-wunderbar-funktioniert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retrospektive vor der Scrum-Einführung</title>
		<link>http://www.mbohlen.de/blog/2008/07/11/retrospektive-vor-der-scrum-einfuhrung/</link>
		<comments>http://www.mbohlen.de/blog/2008/07/11/retrospektive-vor-der-scrum-einfuhrung/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 16:57:25 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Agile Entwicklung]]></category>
		<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=134</guid>
		<description><![CDATA[In meinem aktuellen Projekt führe ich gerade Scrum ein. Warum? Ein Teammitglied brachte es auf den Punkt: Wenn Dir die Viecher auskommen, kannst Du sie jedesmal einzeln einfangen oder Dich entscheiden, einen Zaun zu bauen. Wir führen Scrum ein, um den Zaun zu schließen.
Nächste Woche geht es los mit dem ersten Sprint für dieses Projekt. [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem aktuellen Projekt führe ich gerade Scrum ein. Warum? Ein Teammitglied brachte es auf den Punkt: Wenn Dir die Viecher auskommen, kannst Du sie jedesmal einzeln einfangen oder Dich entscheiden, einen Zaun zu bauen. Wir führen Scrum ein, um den Zaun zu schließen.</p>
<p>Nächste Woche geht es los mit dem ersten Sprint für dieses Projekt. Das Projekt hat bisher schon einiges entwickelt, deshalb hatten wir die Idee, diese zurückliegende Zeit als einen gigantischen Sprint aufzufassen, den wir nun offiziell und regulär beenden, bevor wir nächste Woche einen neuen starten.</p>
<p>Wir haben also diese Woche ein Sprint Review Meeting gemacht mit einer Demo des aktuell lauffähigen Standes der Software. Heute habe ich dann mit dem Team eine Sprint-Retrospektive gehalten, eine wirklich tolle Sache.</p>
<p>Eine Metaplan-Wand hatte ich unterteilt in die Bereiche &#8220;Start doing&#8221;, &#8220;stop doing&#8221;, &#8220;continue doing&#8221; und &#8220;change&#8221;. Dort hefteten die Teammitglieder Karteikarten mit Themen an, die wir entweder neu starten, mit denen wir aufhören oder mit denen wir weitermachen wollen.</p>
<p>Interessant war, dass unter &#8220;start doing&#8221; bei weitem die meisten Karten angeheftet wurden. Unter &#8220;stop doing&#8221; tauchten auch einige auf und unter &#8220;continue&#8221; bzw. &#8220;change&#8221; ebenfalls einige. Also ist dieses Team der Meinung, dass wir noch vieles neu einführen müssen.</p>
<p>Wir haben die Metaplan-Wand fotografiert und uploaden das Foto ins Wiki. Unter das Foto kommt noch einmal die Liste der Vorschläge, die auf den Karten stehen, um eine Online-Diskussion zu ermöglichen und die Maßnahmen tatsächlich umsetzbar zu machen.</p>
<p>Nebenbei bemerkt: Die Kategorien &#8220;start doing&#8221;, etc. stellen sich als viel konkreter und motivierender heraus als die an sich äquivalenten, doch viel mehr nach Wertung klingenden Kategorien &#8220;good&#8221;, &#8220;needs improvement&#8221; und &#8220;bad&#8221;.</p>
<p>Ich bin gespannt, wie viele Maßnahmen wir bis zum Ende des Sprints tatsächlich umgesetzt bekommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/07/11/retrospektive-vor-der-scrum-einfuhrung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Softwareprojekte, mit System betrachtet</title>
		<link>http://www.mbohlen.de/blog/2008/05/14/softwareprojekte-mit-system-betrachtet/</link>
		<comments>http://www.mbohlen.de/blog/2008/05/14/softwareprojekte-mit-system-betrachtet/#comments</comments>
		<pubDate>Wed, 14 May 2008 20:58:08 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=128</guid>
		<description><![CDATA[Neuer Artikel befindet sich als Draft auf meiner Website. Viel Freude beim Lesen!
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mbohlen.de/content/view/58/40/">Neuer Artikel</a> befindet sich als Draft auf meiner Website. Viel Freude beim Lesen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/05/14/softwareprojekte-mit-system-betrachtet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die 4 Variablen</title>
		<link>http://www.mbohlen.de/blog/2008/05/06/die-4-variablen/</link>
		<comments>http://www.mbohlen.de/blog/2008/05/06/die-4-variablen/#comments</comments>
		<pubDate>Tue, 06 May 2008 21:28:59 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=127</guid>
		<description><![CDATA[Neuer Artikel auf meiner Website zum Thema &#8220;Ein Projekt richtig starten&#8221;.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mbohlen.de/content/view/57/40/">Neuer Artikel</a> auf meiner Website zum Thema &#8220;Ein Projekt richtig starten&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/05/06/die-4-variablen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blog auf Deutsch umgestellt</title>
		<link>http://www.mbohlen.de/blog/2008/04/15/blog-auf-deutsch-umgestellt/</link>
		<comments>http://www.mbohlen.de/blog/2008/04/15/blog-auf-deutsch-umgestellt/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 21:07:38 +0000</pubDate>
		<dc:creator>Matthias Bohlen</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://www.mbohlen.de/blog/?p=109</guid>
		<description><![CDATA[Ich fand, dass es sich in der Muttersprache besser bloggt. Habe deswegen umgestellt. Auch gleich die Blog-Software mit umgestellt, denn viele meiner Kollegen nutzen Wordpress, und so gehen Trackbacks vielleicht etwas leichter.
]]></description>
			<content:encoded><![CDATA[<p>Ich fand, dass es sich in der Muttersprache besser bloggt. Habe deswegen umgestellt. Auch gleich die Blog-Software mit umgestellt, denn viele meiner Kollegen nutzen Wordpress, und so gehen Trackbacks vielleicht etwas leichter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2008/04/15/blog-auf-deutsch-umgestellt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat behind Apache 2 reverse proxy</title>
		<link>http://www.mbohlen.de/blog/2007/12/30/tomcat-behind-apache-2-reverse-proxy/</link>
		<comments>http://www.mbohlen.de/blog/2007/12/30/tomcat-behind-apache-2-reverse-proxy/#comments</comments>
		<pubDate>Sun, 30 Dec 2007 15:27:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Aktuelle Aktivitäten]]></category>

		<guid isPermaLink="false">http://blog.mbohlen.de/2007/12/30/tomcat-behind-apache-2-reverse-proxy/</guid>
		<description><![CDATA[Today, I wanted to set up a Tomcat engine that runs on some 80xx port so that it looks like a usual web server running on port 80. I had to fiddle with the settings for some time and maybe, you have got the same steps to do, so this is what I did:
Insert this [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I wanted to set up a Tomcat engine that runs on some 80xx port so that it looks like a usual web server running on port 80. I had to fiddle with the settings for some time and maybe, you have got the same steps to do, so this is what I did:<span id="more-107"></span></p>
<p>Insert this virtual host declaration in /etc/apache2/vhosts.d/myown_vhost.conf:</p>
<pre>&lt;VirtualHost *:80&gt;
ServerName www.myownhost.com
ServerAdmin webmaster@myownhost.com
# don't lose time with IP address lookups
HostnameLookups Off
# needed for named virtual hosts
UseCanonicalName Off
ProxyPass / http://localhost:80xx/
ProxyPassReverse / http://localhost:80xx/
&lt;/VirtualHost&gt;</pre>
<p>But this was not enough. Some application inside Tomcat calls request.getServerName() and still gets &#8220;localhost&#8221;. So, inside Tomcat, I had to edit conf/server.xml and modify the connector declaration:</p>
<pre>&lt;Connector port="8088"  address="localhost"  proxyName="www.myownhost.com"  proxyPort="80"
... other arguments here ...</pre>
<p>After that, everything worked just fine.</p>
<p>For detailed information, see <a title="Tomcat documentation" href="http://tomcat.apache.org/tomcat-6.0-doc/config/http.html">http://tomcat.apache.org/tomcat-6.0-doc/config/http.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mbohlen.de/blog/2007/12/30/tomcat-behind-apache-2-reverse-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
