<?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>PINC-Blog &#187; Projektverwaltung</title>
	<atom:link href="http://www.pincservices.de/wordpress/category/projectmanagement/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pincservices.de/wordpress</link>
	<description>yet another developer blog</description>
	<lastBuildDate>Sat, 10 Sep 2011 07:53:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Warum &#8220;agile&#8221; nicht immer agil ist &#8230;</title>
		<link>http://www.pincservices.de/wordpress/warum-agile-nicht-immer-agil-ist</link>
		<comments>http://www.pincservices.de/wordpress/warum-agile-nicht-immer-agil-ist#comments</comments>
		<pubDate>Mon, 13 Jun 2011 07:30:33 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[agile softwaredevelopment]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[scrum smells]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=559</guid>
		<description><![CDATA[Nach mehreren Jahren (angeblicher) agiler Softwareentwicklung ist es interessant zu sehen, wie der Begriff &#8220;agile&#8221; gerne zum Motto eines chaotischen und unkoordinierbaren Gewusels werden kann. Aber bevor ich in einen Rausch von Anschuldigungen, Verfluchungen und verzweifelten Rundumschlägen verfalle &#8211; eine kurze Vorstellung von dem was agile Softwareentwicklung leisten soll. Wikipedia beschreibt die Zielsetzung von agiler [...]]]></description>
			<content:encoded><![CDATA[<p>Nach mehreren Jahren (angeblicher) agiler Softwareentwicklung ist es interessant zu sehen, wie der Begriff &#8220;agile&#8221; gerne zum Motto eines chaotischen und unkoordinierbaren Gewusels werden kann. </p>
<p>Aber bevor ich in einen Rausch von Anschuldigungen, Verfluchungen und verzweifelten Rundumschlägen verfalle &#8211; eine kurze Vorstellung von dem was agile Softwareentwicklung leisten soll.<br />
Wikipedia beschreibt die Zielsetzung von agiler Softwareentwicklung wie folgt:</p>
<blockquote><p>Das Ziel Agiler Softwareentwicklung ist es, den Softwareentwicklungsprozess flexibler und schlanker zu machen, als das bei den klassischen Vorgehensmodellen der Fall ist. Man möchte sich mehr auf die zu erreichenden Ziele fokussieren und auf technische und soziale Probleme bei der Softwareentwicklung eingehen. Die Agile Softwareentwicklung ist eine Gegenbewegung zu den oft als schwergewichtig und bürokratisch angesehenen traditionellen Softwareentwicklungsprozessen wie dem Rational Unified Process oder dem V-Modell.</p></blockquote>
<p>Häufig wird sich vor allem auf die ersten beiden Sätze konzentriert, die selbstverständlich eine große Bedeutung haben. Aber aus meiner Sicht hat aber der letzte Satz eine interessante Nebenbedeutung.<br />
Im Folgenden werde ich mich auf die Vorgehensweise nach Scrum konzentrieren, da sie meist als Vorzeige-Prozess verwendet wird und sich viele Firmen dies auf die &#8220;Fahnen&#8221; schreiben.<br />
Agile Softwarentwicklung wird als Gegenbewegung zu bürokratischen Prozessen angesehen. Was hier nur häufig scheinbar hinzugefügt wird, ist das Abschaffen von (notwendigen) formalen Regeln.  </p>
<ul>
<li>So ignoriert man des öfteren, dass ein Sprint in sich unveränderbar ist &#8211; das dies auch legitim sein kann, werde ich gleich erläutern.</li>
<li>Daily Scrums z.B. werden teilweise wie ein Kaffeeklatsch behandelt oder &#8211; noch schlimmer &#8211; werden als Plattform für das Management verwendet um dem Team neue Priorisierungen mitzuteilen.</li>
<li>Beliebt sind auch Sprintplanungen, in denen dem Team vorgeschrieben wird, wieviel Zeit es für welche Aufgaben haben darf.</li>
<li>Teammitglieder erscheinen gar nicht oder zu spät zu Meetings. </li>
<li> Daily Scrums beinhalten entweder zu viele oder zu wenige &#8220;Pigs&#8221; bzw. &#8220;Chickens&#8221; verhalten sich wie &#8220;Pigs&#8221;.</li>
<li>Sprintziele bzw. Commitments werden nicht ernst genommen.</li>
<li>&#8230;</li>
</ul>
<p>Eine kleine Übersicht über Anhaltspunkte, dass es mit dem agilen Prozess nicht ganz so gut bestellt ist, gibt folgende Seite über <a href="http://scrumcommunity.pbworks.com/w/page/10149004/Scrum-Smells">Scrum-Smells</a>.</p>
<p>Die Konsequenzen, wenn der &#8220;Gestank&#8221; (dt. für Smell) nicht berücksichtigt wird, sind einerseits lange Entwicklungszeiten und häufige Wartungsaktionen, da die Anforderungen nicht klar waren/sind oder Aufgaben permanent verschoben werden und andererseits Versuche Probleme mit klassisch bürokratischen Mitteln zu kompensieren, wie minutiös ausgearbeiteten Konzepten. Dadurch verlangsamt sich zusehends und dramatisch die Entwicklungszeit und damit die Reaktionszeit auf Kundenwünsche und Bugs. Ebenso wird die Flexibilität des Teams auf die reine Programmierung reduziert, die dann ggf. noch durch (von sich selbst übermäßig überzeugte) Code-Reviewer ad absurdum geführt wird.</p>
<p>Da dies kein komplettes Buch über die Vor- und Nachteile von Scrum respektive agiler Softwareentwicklung werden soll, möchte ich nur Folgendes festhalten:</p>
<p>Agile Softwareentwicklung besitzt genausoviel oder teils sogar mehr Formalismus als klassische Softwareentwicklung. Allerdings wird versucht den bürokratischen Aufwand zu reduzieren. Agil heisst hier vor allem, dass das Team wesentlich flexibler agieren und reagieren kann, als es in klassischen Prozessen ist und nicht, dass die Aufgabenstellung beliebig agil geändert werden kann. Dieser erhöhte Formalismus bedarf aber ebenso einer durchgängigen Disziplin aller Beteiligten. Ist diese Disziplin gegeben lassen sich auch innerhalb einer Iteration die Anforderungen bis zu einem bestimmten Grad ändern. Falls nicht, ist davon &#8211; wie es im Allgemeinen in der Literatur vorgegeben ist &#8211; abzuraten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/warum-agile-nicht-immer-agil-ist/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trac-Themes</title>
		<link>http://www.pincservices.de/wordpress/trac-themes</link>
		<comments>http://www.pincservices.de/wordpress/trac-themes#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:38:12 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[htdocs_location]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=410</guid>
		<description><![CDATA[2 Jahre ist es jetzt in etwa her, dass ich einen Artikel über Eigene Templates in Trac geschrieben habe. Seitdem ist ein wenig passiert. Diesen Änderungen möchte ich hiermit Rechnung tragen. Ich habe das ganze Trac-Themes genannt, weil es weniger um Templating an sich gehen soll, sondern eher um eine Möglichkeit gemeinsame Styles festlegen zu [...]]]></description>
			<content:encoded><![CDATA[<p>2 Jahre ist es jetzt in etwa her, dass ich einen Artikel über <a href="http://www.pincservices.de/wordpress/eigene-templates-in-trac">Eigene Templates in Trac</a> geschrieben habe. Seitdem ist ein wenig passiert. Diesen Änderungen möchte ich hiermit Rechnung tragen. Ich habe das ganze Trac-Themes genannt, weil es weniger um Templating an sich gehen soll, sondern eher um eine Möglichkeit gemeinsame Styles festlegen zu können.</p>
<p>Leider ist es mit Trac immer noch nicht möglich unter einem Environment mehrere Projekte bzw. Repositories laufen zu lassen. Darum wird für jedes Projekt eine eigene Trac-Umgebung angelegt. Wichtig hierbei ist insbesondere für Firmen, dass alle Projekte zumindest in der Grundstruktur gleich aussehen und die Firmenfarben tragen.</p>
<h3>&#8220;&#8230; was bisher geschah&#8221;</h3>
<p>Wer zuerst probieren will, wie und was er alles anpassen kann, sollte sich das Verzeichnis <code>templates</code> unterhalb seiner Trac-Umgebung anschauen. Standardmäßig liegt dort die Datei <code>site.html</code>. Wenn man sie das erste Mal aufmacht, kommt sie sehr unscheinbar daher, denn wie man sieht, sieht man nichts. Nur einen <code>html</code>-Tag und ein paar unbekannt anmutende Python-Attribute.<br />
Auf der Seite <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization">http://trac.edgewall.org/wiki/TracInterfaceCustomization</a> ist glücklicherweise bereits ein Beispiel-Code für den Inhalt dieser Datei. Für jene, die gerne lieber mehrere Dateien nutzen wollen hier gleich die Anpassung mit Einbindung externer Dateien:</p>
<pre class="brush: xml;">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
      xmlns:py=&quot;http://genshi.edgewall.org/&quot;
      xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot;
      py:strip=&quot;&quot;&gt;

  &lt;!--! Add site-specific style sheet --&gt;
  &lt;head py:match=&quot;head&quot; py:attrs=&quot;select('@*')&quot;&gt;
    ${select('*|comment()|text()')}
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;
          href=&quot;${href.chrome('common/style.css')}&quot; /&gt;
  &lt;/head&gt;

  &lt;body py:match=&quot;body&quot; py:attrs=&quot;select('@*')&quot;&gt;
    &lt;!--! Add site-specific header --&gt;
    &lt;div id=&quot;siteheader&quot;&gt;
       &lt;xi:include href=&quot;site_header.cs&quot;&gt;
         &lt;xi:fallback /&gt;
       &lt;/xi:include&gt;
    &lt;/div&gt;

    ${select('*|text()')}

    &lt;!--! Add site-specific footer --&gt;
    &lt;div id=&quot;sitefooter&quot;&gt;
      &lt;xi:include href=&quot;site_footer.cs&quot;&gt;
        &lt;xi:fallback /&gt;
      &lt;/xi:include&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Interessanterweise funktioniert das einfache Anlegen einer <code>site_header.cs</code> und <code>site_footer.cs</code> nicht immer &#8211; bzw. bei mir hat das noch nie funktioniert -, wie es auf manchen Seiten beschrieben wird.<br />
Mit diesem Grundgerüst ausgestattet lässt sich schon anfangen herumzuspielen. Für weiterführende Informationen zu Genshi und Clearsilver &#8211; den Engines im Hintergrund &#8211; sei auf folgende Seiten verwiesen:</p>
<ul>
<li><a href="http://genshi.edgewall.org/">http://genshi.edgewall.org/</a></li>
<li><a href="http://www.clearsilver.net/docs/">http://www.clearsilver.net/docs/</a></li>
</ul>
<h3>Neue und alte Freunde</h3>
<p>Ein altbekannter Helfer beim Erstellen von Templates ist auch in der Version 0.11.5 noch vorhanden. Der Konfigurationsparameter <code>template_dir</code>.</p>
<pre class="brush: plain;">
[inherit]
template_dir=
</pre>
<p>Mit diesem Parameter lässt sich das Verzeichnis für die Templates festlegen und wodurch verschiedene Seiten mit ein und demselben Template ausgestattet werden können.</p>
<p>Daneben ist ein neuer Freund dazugekommen der Parameter <code>htdocs_location</code>. Mit diesem Parameter werden alle internen URLs, die mit &#8220;common/&#8221; beginnen in die URL umgeschrieben, die als Wert angegeben wurde.</p>
<pre class="brush: plain;">
[trac]
htdocs_location=http://localhost/mytemplate
</pre>
<p>Führt, dazu, dass aus</p>
<pre class="brush: xml; gutter: false;">
&lt;link rel=&quot;stylesheet&quot; href=&quot;/trac/templating/chrome/common/css/trac.css&quot; type=&quot;text/css&quot; /&gt;
</pre>
<p>folgendes wird</p>
<pre class="brush: xml; gutter: false;">
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://localhost/mytemplate/css/trac.css&quot; type=&quot;text/css&quot; /&gt;
</pre>
<p><strong>Achtung!</strong> Leider hat die Sache einen Haken. Eigene Links aus der <code>site.html</code> werden nicht übersetzt. Der folgende Code</p>
<pre class="brush: plain; gutter: false;">
${href.chrome('common/style.css')}
</pre>
<p>wird nur in <code>"/trac/templating/chrome/common/style.css"</code> umgewandelt, aber nicht weiter.</p>
<p>Wichtig ist außerdem zu beachten, dass <code>htdocs_location</code> nur für statische Inhalte, wie Bilder, JavaScript- und CSS-Dateien gedacht ist. Templates werden nicht automatisch von dort erkannt. Diese müssen explizit über <code>template_dir</code> konfiguriert werden. Leider ist es hier nur möglich lokale Verzeichnisse zu setzen. Wer z.B. versucht eine Internetadresse anzugeben, bekommt zwar keine Fehlermeldung, wird aber mit einem Standard-Template &#8220;belohnt&#8221;.</p>
<p>Abschließend möchte ich sagen, dass &#8211; gefühlt &#8211; wesentlich mehr über die <code>trac.ini</code> konfigurierbar ist, als es noch vor 2 Jahren der Fall war. Das macht definitiv Lust auf mehr, aber dennoch bleibt das ein oder andere noch zu tun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/trac-themes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Und plötzlich war alles dunkel &#8230;</title>
		<link>http://www.pincservices.de/wordpress/und-plotzlich-war-alles-dunkel</link>
		<comments>http://www.pincservices.de/wordpress/und-plotzlich-war-alles-dunkel#comments</comments>
		<pubDate>Sat, 14 Nov 2009 09:40:03 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Genshi]]></category>
		<category><![CDATA[gtk+]]></category>
		<category><![CDATA[Trac]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=343</guid>
		<description><![CDATA[Ich weiss nicht, was passiert ist, aber nach dem Upgrade von Ubuntu auf 9.10 wurden diverse Entwickler-Tools unbenutzbar. Dabei handelt es sich insbesondere um Anwendungen, die nicht direkt aus dem Ubuntu-Repository stammen. Im Folgenden will ich auf Eclipse und Trac eingehen. Eclipse 3.5 Nachdem auf GTK+ 2.18 aktualisiert wurde, funktionieren diverse Buttons in Eclipse nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Ich weiss nicht, was passiert ist, aber nach dem Upgrade von Ubuntu auf 9.10 wurden diverse Entwickler-Tools unbenutzbar. Dabei handelt es sich insbesondere um Anwendungen, die nicht direkt aus dem Ubuntu-Repository stammen. Im Folgenden will ich auf Eclipse und Trac eingehen.</p>
<h3>Eclipse 3.5</h3>
<p>Nachdem auf GTK+ 2.18 aktualisiert wurde, funktionieren diverse Buttons in Eclipse nicht mehr. Schnell wird man dank Google auf der Suche nach einem Fix bzw. Workaround fündig (<a href="http://library.gnome.org/devel/gtk/2.18/gtk-migrating-ClientSideWindows.html">Migrating to client-side windows</a>). Offensichtlich ist die Umgebungsvariable <code>GDK_NATIVE_WINDOWS</code> für das Problem verantwortlich. Diese muss auf den Wert <code>true</code> gesetzt werden, damit SWT-basierte Java-Oberflächen (Anmerkung: auch andere Java-Applikationen mit SWT haben das Problem) wieder in altem Glanz erstrahlen.</p>
<pre class="brush: bash;">
#!/bin/bash
env GDK_NATIVE_WINDOWS=true &lt;your/eclipse/path&gt;/eclipse
</pre>
<p><em>(Den Pfad <code>&lt;your/eclipse/path&gt;</code> bitte an das jeweilige Installationsverzeichnis von Eclipse anpassen.)</em></p>
<p>Leider ist dies nur ein bescheidener Workaround, denn sobald man Eclipse aus sich heraus neu startet (z.B. nach Upgrades oder Plugin-Installationen) existiert das alte Problem wieder. Genauso, wenn man den Workspace versucht zu wechseln, da sich Eclipse auch hier herunterfährt und neu startet.</p>
<p>Ein richtiger Fix ist für die Version 3.5.2 angedacht bzw. soll in der 3.6 schon integriert sein, welche für die SDK-Variante bereits existiert. Nur für JEE-Developer wird es wohl noch etwas dauern.</p>
<p>Von einem globalen Umsetzen der Variable <code>GDK_NATIVE_WINDOWS</code> wird an diversen Stellen explizit abgeraten. Hier sei aber anzumerken, dass die Eclipse-Installation aus den Ubuntu-Repositories genau das macht. Für alle, die etwas &#8220;wagemutiger&#8221; sind hier das Startskript mit <code>export</code>.</p>
<pre class="brush: bash;">
#!/bin/sh

# work around e#290395 / LP: #458703
export GDK_NATIVE_WINDOWS=true

xuldir=/usr/lib/xulrunner-$(/usr/bin/xulrunner-1.9.1 --gre-version)
LD_LIBRARY_PATH=$xuldir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} &lt;your/eclipse/path&gt;/eclipse
 &quot;$@&quot;
</pre>
<p><em>(Den Pfad <code>&lt;your/eclipse/path&gt;</code> bitte an das jeweilige Installationsverzeichnis von Eclipse anpassen.)</em></p>
<p>Dieses Skript am besten unter <code>/usr/local/bin</code> als <code>eclipse</code> ablegen und alle Links, die vorher direkt auf die Eclipse-Startdatei gegangen sind auf dieses Skript umbiegen.</p>
<h3>Trac</h3>
<p>Interessanterweise &#8211; was die primäre Motivation für diesen Kurzkommentar war &#8211; hat es auch das Bugtracking-Tool Trac erwischt. Zum Glück nicht so &#8220;heftig&#8221; wie Eclipse, aber dafür umso unverständlicher. </p>
<p>Ich habe lokal Trac mittels <code>easy_install</code> installiert gehabt. Nach dem Upgrade auf Ubuntu 9.10 erhielt ich plötzlich auf allen Trac-Seiten einen 500-Fehler. Nach kurzem Suchen fand ich in der <code>error.log</code>-Datei von Apache (Pfad unter Ubuntu: <code>/var/log/apache2/error.log</code>) folgenden Eintrag:</p>
<pre class="brush: plain; light: true;">
... [error] [client 127.0.0.1] ImportError: No module named genshi, ...
</pre>
<p>Warum das Modul plötzlich nicht mehr vorhanden war kann ich zum aktuellen Zeitpunkt nicht erklären, aber das war noch nicht das Ende.</p>
<p>Just in dem Moment wo ich mit </p>
<pre class="brush: plain; light: true;">
sudo easy_install Genshi
</pre>
<p>das entsprechende Modul installieren wollte, quittierte mir Ubuntu die Nachricht, dass <code>easy_install</code> nicht existiert. Ein kurzer Blick in Synaptic unter <code>python-setuptools</code> bestätigte die Vermutung, dass das Paket nicht installiert war. Ich möchte an dieser Stelle nicht ausschließen, dass es beim Upgrade in der Liste der zu deinstallierenden Pakete dabei war, aber dennoch ärgerlich. Also war auch hier nachinstallieren angesagt. </p>
<p>Zum Glück fügte sich dann alles sehr schnell. Das Genshi-Modul installierte sich ohne Probleme.</p>
<p>Abschließend musste noch der Workaround für einen Bug (<a href="http://trac.edgewall.org/ticket/7526">http://trac.edgewall.org/ticket/7526</a>)  eingebaut werden. Einfach die <code>compat.py</code> im <code>functional/tests</code>-Ordner in <code>testcompat.py</code><br />
umbenennen und die <code>compat.pyc</code> in <code>compat.pyc.old</code> umbenennen oder gleich löschen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/und-plotzlich-war-alles-dunkel/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hudson und Grails am heimischen Herd</title>
		<link>http://www.pincservices.de/wordpress/hudson-und-grails-am-heimischen-herd</link>
		<comments>http://www.pincservices.de/wordpress/hudson-und-grails-am-heimischen-herd#comments</comments>
		<pubDate>Wed, 12 Aug 2009 22:01:52 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[Trac]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=217</guid>
		<description><![CDATA[Nachdem sich verschiedene Projekte bei mir angesammelt haben und ich für jedes in der Regel ein entsprechendes Trac-Projekt angelegt habe, fehlte mir immer mehr die projektübergreifende Oberfläche. Mit den Wochen und Monaten schwängerte sich mein Geist mit dem Gedanken sich an Trac &#8220;zu vergreifen&#8221; und selbst so eine Oberfläche zu schreiben. Zum Glück kam mir [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem sich verschiedene Projekte bei mir angesammelt haben und ich für jedes in der Regel ein entsprechendes Trac-Projekt angelegt habe, fehlte mir immer mehr die projektübergreifende Oberfläche.</p>
<p>Mit den Wochen und Monaten schwängerte sich mein Geist mit dem Gedanken sich an Trac &#8220;zu vergreifen&#8221; und selbst so eine Oberfläche zu schreiben. Zum Glück kam mir eine neue Anforderung in den Weg, die mir die Arbeit teilweise abnahm: der Wunsch eines Continuous Integration Systems &#8211; kurz CI.</p>
<p>Da ich schon gute Erfahrungen mit Hudson gemacht hatte, war die Entscheidung schnell getroffen das System auch für mich einzusetzen. Die Vorteile:</p>
<ul>
<li>einfache Installation</li>
<li>Open Source</li>
<li>kostenfrei</li>
</ul>
<p>Allerdings musste gewährleistet werden, dass man damit Grails-Projekte bauen kann. Schaut man in die Plugin-Liste schreit es einen förmlich an: &#8220;Hier bin ich. Ist total easy-schneasy. Machs einfach!&#8221;</p>
<p>Aber wie so oft bei so offensichtlichen Aktionen liegt die Tücke im Detail. Leider hören &#8211; wie so oft &#8211; die Tutorials im Netz bei der Hälfte auf und vermitteln einem das Gefühl, dass man zu doof für die IT-Welt ist. Deshalb möchte ich hier einfach meine Erfahrungen bei der Einrichtung von Hudson mit den Grails- und Trac-Plugin auf einem Ubuntu-System vorstellen.</p>
<h3>System</h3>
<ul>
<li>Ubuntu 09.04</li>
<li>Tomcat 6 (aus den Ubuntu-Repository)</li>
<li>Trac (manuell installiert)</li>
<li>Grails 1.1.1</li>
</ul>
<p><em>Anmerkung</em><br />
Ob Trac jetzt manuell oder aus dem Repository installiert wurde, ist eigentlich egal.</p>
<h3>Hudson</h3>
<p>Als erstes ging es darum Hudson zu installieren. Zwar bietet Ubuntu auch hier an über eine kleine Erweiterung der Repositories Hudson als Daemon zu installieren, allerdings bin ich persönlich kein großer Freund davon. Deshalb Alternative: war-File downloaden und einfach im Tomcat deployen.</p>
<p style="color: red; font-weight: bold;">Achtung!!! Wenn man das macht, sollte man vorsichtig beim Neustart aus Hudson heraus sein. Die Applikation fährt interessanterweise den Tomcat runter, bekommt ihn aber danach nicht mehr gestartet.</p>
<p>Zwei Dinge muss man dabei beachten, die aber auch auf der Hudson-Seite dokumentiert sind.</p>
<ol>
<li>die Variable HUDSON_HOME muss gesetzt sein &#8211; habe ich bei mir direkt in das Tomcat-Startskript geschrieben (Faulheit siegt)</li>
<li>Es müssen teilweise noch Verzeichnis-Rechte angepasst werden, damit Hudson korrekt läuft</li>
</ol>
<p>Nachdem Hudson nun endlich sein Pracht im Browser präsentiert geht es weiter mit dem Grails-Plugin.</p>
<h3>Grails</h3>
<p>Die Installation von Plugins ist in Hudson sehr simpel &#8211; oder wie manch Web 2.0-Entwickler sagen würde: &#8220;kissy&#8221; (von KISS &#8211; Keep it stupid simple). Einfach Häkchen setzen und auf &#8220;Installieren&#8221; klicken. Wie schon erwähnt, kann es hierbei dazu kommen, dass Hudson den kompletten Tomcat versucht neu zu starten, was zumindest bei mir nicht funktioniert hat. Ggf. einfach den Tomcat manuell neu starten.</p>
<p>Nachdem das Plugin installiert ist, müssen noch einige Konfigurationen durchgeführt werden. Als erstes muss der &#8220;Grails Builder&#8221; in der globalen Konfiguration von Hudson angelegt werden. Hier kann man verschiedene Grails-Installationen angeben, was insbesondere durch die teilweise Inkompatibilität der Versionen von großem Vorteil ist. Da die Sache in zwei Textboxen geregelt wird, verzichte ich mal auf den obligatorischen Screenshot.<br />
Hat man jetzt die notwendigen Installationen angegeben kann man sich gütlich an die Konfiguration des Jobs machen. Hier muss ich vorausschicken, dass ich bereits einige Jobs angelegt hatte.</p>
<p>Unter dem Punkt &#8220;Build Verfahren&#8221; kann man über den Button &#8220;Build-Schritt hinzufügen&#8221; ein &#8220;Build with Grails&#8221; anlegen. Dabei lassen sich verschieden Werte konfigurieren. Nach einigem Herumprobieren waren aber nur drei relevant:</p>
<ol>
<li>Grails Installation (wurde eben in der globalen Konfiguration angelegt)</li>
<li>Targets</li>
<li>grails.work.dir</li>
</ol>
<p>Die Targets kann sich jeder selbst aussuchen aus der Liste, die &#8220;grails help&#8221; ausgibt. Bei mir sind das <code>"test-app -unit --non-interactive" war doc</code>.<br />
Wichtig ist allerdings vor allem der Parameter grails.work.dir!</p>
<p>Das Grails-Plugin erwartet standardmäßig, dass es Zugriff auf das Verzeichnis /usr/share/tomcat6/.grails besitzt um auf den scriptCache zugreifen zu können. Da dieses Verzeichnis aber nicht zwingend freigegeben werden soll, muss ein alternatives Verzeichnis über <code>grails.work.dir</code> gesetzt werden. Andernfalls müssen die Zugriffsrechte mittels <code>sudo chmod -R 777 /usr/share/tomcat6/.grails</code> gesetzt werden.<br />
Das Projekt-Verzeichnis hat noch eine weitere Bedeutung. Wenn man z.B. in Subversion seinen Code unter &#8220;trunk&#8221; eincheckt und keinen expliziten Modulpfad angelegt hat, wird automatisch trunk als Projektname auch in Hudson beim Bauen verwendet. Nun kann man sich vorstellen, dass bei mehreren Projekten, die alle in &#8220;trunk&#8221; liegen dies zu einer Überschneidung führt, die nicht unbedingt erwünscht ist.</p>
<p>Nichtsdestotrotz, bin ich hiermit bereits an das Ende meiner Vorstellung gekommen. Nach der Konfiguration des Jobs einfach auf &#8220;Jetzt bauen&#8221; klicken und schauen was passiert &#8211; ich hoffe mal es funktioniert. Ansonsten: bitte nicht hauen, bei mir läufts <img src='http://www.pincservices.de/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Trac</h3>
<p>Für alle, die jetzt fragend dastehen und wissen wollen: &#8220;aber er hat doch was von Trac erzählt&#8221;. Ja, das habe ich und ja, auch das geht sehr einfach. Nachdem man das Trac-Plugin installiert hat, erscheint ein Eingabefeld in der Job-Konfiguration, in dem man einen Link zum Trac-Projekt hinterlegen. Nachdem man diesen gespeichert hat, erscheint ein simpler Menüpunkt auf der Job-Seite &#8220;Trac&#8221;, der zu der entsprechenden Trac-Seite führt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/hudson-und-grails-am-heimischen-herd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Planung ist &#8220;alles&#8221; &#8230;</title>
		<link>http://www.pincservices.de/wordpress/planung-ist-alles</link>
		<comments>http://www.pincservices.de/wordpress/planung-ist-alles#comments</comments>
		<pubDate>Sun, 25 Jan 2009 19:23:30 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[GanttProject]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[MS Project]]></category>
		<category><![CDATA[Openproj]]></category>
		<category><![CDATA[Planner]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=110</guid>
		<description><![CDATA[Wer schonmal mit Projektmanagement im Softwarebereich zu tun hatte, wird um MS Project nicht herumgekommen sein, oder zumindest davon gehört haben. Für einige der digitale Messias unter den Management-Tools bleibt es für Andere fast unerreichbar, denn nicht jeder will sich dem Windowssystem &#8220;unterwerfen&#8221;. Leider sträubt sich Ubuntu ein wenig mit glanzvollen Alternativen. Ich habe versucht [...]]]></description>
			<content:encoded><![CDATA[<p>Wer schonmal mit Projektmanagement im Softwarebereich zu tun hatte, wird um MS Project nicht herumgekommen sein, oder zumindest davon gehört haben. Für einige der digitale Messias unter den Management-Tools bleibt es für Andere fast unerreichbar, denn nicht jeder will sich dem Windowssystem &#8220;unterwerfen&#8221;.</p>
<p>Leider sträubt sich Ubuntu ein wenig mit glanzvollen Alternativen. Ich habe versucht 3 Perlen herauszupicken und ich glaube es ist mir gelungen. Ich will nicht behaupten, dass es die besten sind, aber sie zeigen zumindest gutes Potenzial. Für Alternativen bin ich immer offen &#8211; einfach hier als Kommentar posten.</p>
<h3>Planner</h3>
<p>Der erste Kandidat um die Krone ist Planner. Dieses Werkzeug ist hervorgegangen aus dem direkten Pendant von MS Project, nämlich MrProject.<br />
Ein Vorteil von Planner ist, dass es sich in den Standardrepositories von Ubuntu befindet. Leider ist es noch in seiner &#8220;Trotzphase&#8221;, insbesondere wenn es um den Import von MS Project-Dateien geht. Auch fehlen noch sinnvolle Reports. Man kann zwar den Plan ausdrucken, aber detaillierte Kostenaufstellungen sind nicht möglich.</p>
<h3>GanttProject</h3>
<p>Als zweites möchte ich GanttProject vorstellen. GanttProject befindet sich zwar nicht in den Repositories, aber wartet dagegen mit einigen visuellen Gimmicks auf. Es ist ein wenig bunter als Planner und ist der Konfigurationsmeister unter den vorgestellten Tools. An jeder &#8220;Klick-Ecke&#8221; findet man einen Menüpunkt zum konfigurieren von irgendwas. Meistens handelt es sich dabei um Darstellungselemente. Leider findet man auch hier keine Reporting-Funktion.</p>
<h3>OpenProj</h3>
<p>Komme ich damit zum dritten Kandidaten. OpenProj ist aus meiner Sicht das Tool für Manager, die sich neben der reinen Planung auch die Kosten stark im Auge behalten müssen und diese gerne in schriftlicher Form protokollieren wollen. Auf den ersten Blick kommt OpenProj mit wesentlich mehr Alternativ-Ansichten daher als Planner und GanttProject. Vor allem die Reportings können &#8211; nach kurzer Einarbeitungszeit &#8211; sehr nützlich sein. Auf der anderen Seite ist die Usability von OpenProj manchmal etwas holprig, so dass man gerade bei schnellen Aktionen eher ausgebremst wird (z.B. wird bei schnellen Klicken mal ein Eingabefeld geöffnet mal ein Popup angezeigt).</p>
<p>Weiteres findet man u.a. auf <a href="http://wiki.ubuntuusers.de/Projektmanagement" target="_blank">http://wiki.ubuntuusers.de/Projektmanagement</a></p>
<p>Für alle denen es aufgefallen ist: Ich habe nur GNOME-Tools vorgestellt. Da ich bei mir kein KDE verwende überlasse ich es anderen die Werkzeuge für diesen Desktopmanager vorzustellen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/planung-ist-alles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Meistere deinen Geist &#8230;&#8221;</title>
		<link>http://www.pincservices.de/wordpress/meistere-deinen-geist</link>
		<comments>http://www.pincservices.de/wordpress/meistere-deinen-geist#comments</comments>
		<pubDate>Sun, 23 Nov 2008 23:33:01 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[mind mapping]]></category>
		<category><![CDATA[mindmeister]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=75</guid>
		<description><![CDATA[Im letzten Artikel &#8220;Befreie deinen Geist &#8230;&#8221; habe ich ein Werkzeug vorgestellt, mit dem man einfach und schnell Mindmaps erstellen kann. Allerdings nur offline. Wer das ganze online machen mÃ¶chte sollte hier vorbeischauen: http://www.mindmeister.com/ (Link provided by Simonidossos).]]></description>
			<content:encoded><![CDATA[<p>Im letzten Artikel <a href="http://www.pincservices.de/wordpress/befreie-deinen-geist" target="_self">&#8220;Befreie deinen Geist &#8230;&#8221;</a> habe ich ein Werkzeug vorgestellt, mit dem man einfach und schnell Mindmaps erstellen kann. Allerdings nur offline. Wer das ganze online machen mÃ¶chte sollte hier vorbeischauen: <a href="http://www.mindmeister.com/" target="_blank">http://www.mindmeister.com/</a> (Link provided by <a href="http://landofideas.blogspot.com" target="_blank">Simonidossos</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/meistere-deinen-geist/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Befreie deinen Geist &#8230;&#8221;</title>
		<link>http://www.pincservices.de/wordpress/befreie-deinen-geist</link>
		<comments>http://www.pincservices.de/wordpress/befreie-deinen-geist#comments</comments>
		<pubDate>Sun, 23 Nov 2008 23:02:33 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[freemind]]></category>
		<category><![CDATA[mind mapping]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=65</guid>
		<description><![CDATA[So trivial die Worte im Film &#8220;Matrix&#8221; auch klingen mÃ¶gen, so schwer tut man sich in der RealitÃ¤t damit. Insbesondere wenn man gerade mitten in einer Konzeption fÃ¼r ein neues Produkt, Feature oder allgemeinen Idee steckt. Jetzt wird der ein oder andere aufschreien: &#8220;Mindmapping&#8221;Â  &#8211; und ja meine Freunde der Kommunikationsseminare zwischen 1995 und 2000, [...]]]></description>
			<content:encoded><![CDATA[<p>So trivial die Worte im Film &#8220;Matrix&#8221; auch klingen mÃ¶gen, so schwer tut man sich in der RealitÃ¤t damit. Insbesondere wenn man gerade mitten in einer Konzeption fÃ¼r ein neues Produkt, Feature oder allgemeinen Idee steckt. Jetzt wird der ein oder andere aufschreien: &#8220;Mindmapping&#8221;Â  &#8211; und ja meine Freunde der Kommunikationsseminare zwischen 1995 und 2000, die Antwort lautet Mindmapping. Aber nicht irgendwie sondern schlicht und einfach mit <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" target="_blank">FreeMind</a>.</p>
<p>FreeMind bietet viel freie FlÃ¤che zum Erstellen von Gedankenblasen &#8211; die mÃ¼ssen wirklich nicht immer sinnvoll gefÃ¼llt sein *gg*. ZusÃ¤tzlich lassen sich auch gleich ein paar Icons hinzufÃ¼gen um den Blick des Betrachters etwas zu fÃ¼hren, da es, wie so oft bei freien Gedanken, schnell unÃ¼bersichtlich werden kann. Zwar hat man das bei FreeMind im Sinne des Mindmappings damit zu lÃ¶sen versucht, dass die Gedanken baumstrukturiert dargestellt werden (siehe <a href="http://freemind.sourceforge.net/wiki/index.php/Screenshots" target="_blank">Screenshots</a>) und TeilbÃ¤ume ausblendbar sind.</p>
<p><a href="http://freemind.sourceforge.net/FreeMind-learning-german.png" target="_blank"><img class="alignnone" title="Beispiel-Screenshot" src="http://freemind.sourceforge.net/FreeMind-learning-german.png" alt="" width="412" height="300" /></a></p>
<p>Leider fÃ¼hrt dies aber gerade bei umfangreicheren Konstrukten am Anfang genau ins Gegenteil und man ist mehr damit beschÃ¤ftigt welche &#8220;Gedanken&#8221; auf welche Ebene gehÃ¶ren und in welchem geschlossenen Teilbaum sich gerade der benÃ¶tigte &#8220;Gedanke&#8221; befindet. AuÃŸerdem sollte man unter Linux frÃ¼hestens bei Version 0.8.1 beginnen, da vorher die Eingabe und Darstellung so fehlerhaft ist (z.B. Mausklicks funktionieren nur sporadisch, Darstellungsfehler beim Verschieben von Knoten), dass man nach einigen Minuten schon frustriert aufgeben will.</p>
<p>Leider lÃ¤sst auch die aktuelle Version (0.8.1) noch Einiges an Benutzerfreundlichkeit offen &#8211; z.B. lassen sich spontane Gedankenzweige nicht unverknÃ¼pft anlegen oder Knoten lassen sich noch nicht mit Notizen versehen, was insbesondere in Kombination damit unpraktisch ist, dass Knoten standardmÃ¤ÃŸig einzeilig sind (man muss entweder Alt+Eingabe drÃ¼cken oder im KontextmenÃ¼ &#8220;Knoten in einem separaten Editor bearbeiten &#8230;&#8221; auswÃ¤hlen um mehrere Zeilen schreiben zu kÃ¶nnen).</p>
<p>Und wieder muss ich mich bei <a href="http://landofideas.blogspot.com/" target="_blank">Simonidossos</a> fÃ¼r eine exzellente Empfehlung bedanken.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/befreie-deinen-geist/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Buchempfehlung: Der Termin</title>
		<link>http://www.pincservices.de/wordpress/buchempfehlung-der-termin</link>
		<comments>http://www.pincservices.de/wordpress/buchempfehlung-der-termin#comments</comments>
		<pubDate>Thu, 13 Nov 2008 20:20:01 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[buch]]></category>
		<category><![CDATA[Projektmanagement]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=56</guid>
		<description><![CDATA[Jeder der in der IT-Branche arbeitet, kennt das ewige Dilemma: Sinnfrei angesetzte Fertigstellungstermine, Spezifikationen, die eher der Tagesform einer verschlafenen Weinbergschnecke entsprechen &#8211; zäh und planlos &#8211; und einen Chef, der meint mit permanentem Druck (auch positivem Druck mit dem Mantra: &#8220;Wir sind gut, aber noch nicht gut genug. Wir müssen nochmal zulegen und zwar [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder der in der IT-Branche arbeitet, kennt das ewige Dilemma: Sinnfrei angesetzte Fertigstellungstermine, Spezifikationen, die eher der Tagesform einer verschlafenen Weinbergschnecke entsprechen &#8211; zäh und planlos &#8211; und einen Chef, der meint mit permanentem Druck (auch positivem Druck mit dem Mantra: &#8220;Wir sind gut, aber noch nicht gut genug. Wir müssen nochmal zulegen und zwar alle zusammen.&#8221;) würde man nach 3 Monaten durcharbeiten irgendein Weltwunder aus den Tränensäcken zaubern.</p>
<p>Das Buch &#8220;<a href="http://www.amazon.de/Termin-Ein-Roman-%C3%BCber-Projektmanagement/dp/3446414398" target="_blank">Der Termin</a>&#8221; beschreibt diese und andere Situationen teilweise überspitzt. aber immer so, dass man sich darin wiederfinden kann.</p>
<p>Die Geschichte handelt von einem Softwaremanager &#8211; Mr. T. &#8211; , der von einem Entwicklungsparadies (ein einfaches Projekt mit scheinbar unendlichen Ressourcen und keinem Endtermin) in ein Worst-Case-Szenario erster Güte rutscht. Mit intelligenten Mitstreitern, vorteilhaften Zufällen und einem unerschöpflichen Vorrat an gutem Willen manövriert er durch (fast) alle Widrigkeiten.</p>
<p>Obwohl das Buch für einen Softwareentwickler bzw. Projektmanager sehr oberflächlich daherkommt und die Zufälle sehr konstruiert wirken um möglichst alle Probleme zumindest angeschnitten zu haben, liest sich das Buch sehr angenehm. Durch das Tagebuch innerhalb der Geschichte, dass der Protagonist schreibt, kann man sich einige Ansätze für das eigene Leben herausziehen und diese gemächlich überdenken oder sofort umsetzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/buchempfehlung-der-termin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projektübergreifende Templates in Trac</title>
		<link>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac</link>
		<comments>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac#comments</comments>
		<pubDate>Fri, 21 Mar 2008 05:42:43 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Corporate Identity]]></category>
		<category><![CDATA[Individualisierung]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac</guid>
		<description><![CDATA[Im Beitrag http://www.pincservices.de/wordpress/eigene-templates-in-trac habe ich bereits vorgestellt wie man projektspezifische Designanpassungen machen kann bzw. wie die Projektliste in Trac anpassbar ist. Damals habe ich geschrieben, dass es scheinbar keine Möglichkeit gibt projektübergreifende Templates zu erstellen. Nun die frohe Kunde: Es geht doch. Leider bietet Trac keine Möglichkeit über eine globale Variable das allgemeine Templateverzeichnis zu [...]]]></description>
			<content:encoded><![CDATA[<p>Im Beitrag <a href="http://www.pincservices.de/wordpress/eigene-templates-in-trac">http://www.pincservices.de/wordpress/eigene-templates-in-trac</a><br />
habe ich bereits vorgestellt wie man projektspezifische Designanpassungen machen kann bzw. wie die Projektliste in <a href="trac.edgewall.org/" target="_blank">Trac</a> anpassbar ist. Damals habe ich geschrieben, dass es scheinbar keine Möglichkeit gibt projektübergreifende Templates zu erstellen. Nun die frohe Kunde: Es geht doch.</p>
<p>Leider bietet Trac keine Möglichkeit über eine globale Variable das allgemeine Templateverzeichnis zu definieren. Man muss hierfür die <em>trac.ini </em>im Verzeichnis <em>conf</em> der jeweiligen Projektumgebung anpassen. In dieser Datei gibt es folgenden Abschnitt:</p>
<pre class="brush: plain;">
[inherit]
plugins_dir =
templates_dir =
</pre>
<p>Hier kann man das eigene Templateverzeichnis angeben, welches als Default verwendet werden soll.<br />
Im Fall des Beispiels aus dem obigen Beitrag würde man den Eintrag</p>
<pre class="brush: plain;">templates_dir = /home/testUser/trac/templates</pre>
<p>setzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eigene Templates in Trac</title>
		<link>http://www.pincservices.de/wordpress/eigene-templates-in-trac</link>
		<comments>http://www.pincservices.de/wordpress/eigene-templates-in-trac#comments</comments>
		<pubDate>Sun, 16 Mar 2008 13:23:03 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Genshi]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=17</guid>
		<description><![CDATA[Tipps bei der Erstellung von individuellen Templates fÃ¼r Trac. ]]></description>
			<content:encoded><![CDATA[<p>Wer bereits ein größeres Programmierprojekt durchgeführt hat, wird die Erfahrung gemacht haben, dass man auf ein Bugtrackingsystem nicht wirklich verzichten kann.<br />
Im Beitrag <a href="http://www.pincservices.de/wordpress/10-im-kampf-jira-vs-trac">1:0 im Kampf JIRA vs. Trac</a> habe ich schon zwei solche Systeme angesprochen JIRA und Trac, wobei ich hier auf letzteres eingehen möchte.</p>
<p>Nachdem man sich mit diversen Funktionen und Plugins in Trac &#8220;angefreundet&#8221; hat, stellt sich meistens die grundlegende Frage: &#8220;Wie kann ich das Design von Trac so ändern, dass es zu meinem Projekt passt&#8221;. Das fängt beim Logo an und hört bei der Anzeige der Projektliste auf &#8211; insofern man mehrere Projekte hat.</p>
<p>Trac bietet hierfür auf der eigenen Projektseite auch ein <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization" target="_blank">Tutorial</a>, deshalb möchte ich hier nur eine kurze Einführung geben und dann auf ein paar Fallstricke bei der Individualiserung des Layouts eingehen, die in dem Tutorial nicht auftauchen. Auf das Ein- bzw. Ausblenden von Navigationspunkten oder die entsprechenden Verlinkungen wird hier nicht eingegangen.</p>
<p>Das Templatingsystem von Trac basiert auf <a href="http://genshi.edgewall.org/" target="_blank">Genshi</a>, einer Pythonbibliothek, die es erlaubt Text aus diversen Quellen für das Web aufzubereiten. Trac bedient sich hierbei vor allem des HTML-Parsers.</p>
<p>In dem Verzeichnis <em>trac/templates </em>unterhalb des Trac-Installationsverzeichnisses befinden sich alle html-Dateien für das Default-Template. Insbesondere die <em>layout.html</em> und die <em>index.html </em>sind hier relevant. Die layout.html bestimmt das Aussehen der projektspezifischen Seiten und die index.html die Seite für die Projektliste. Unter <em>trac/htdocs</em> befinden sich  die Bilder,  Javascript-Dateien und die CSS-Dateien.</p>
<p>Trac bietet pro Projekt diverse Stellen zur Individualisierung des Designs an. Eine eigene <em>site.html</em> im Verzeichnis <em>templates</em> und ein eigenes Verzeichnis <em>htdocs</em>, in der eine <em>style.css</em> angelegt werden kann.</p>
<p>Um das Layout der Projektliste anzupassen sollte man folgende Zeile in die Konfigurationsdatei vom Webserver (z.B. die <em>default</em> von Apache) schreiben</p>
<pre class="brush: python; light: true;">
SetEnv TRAC_ENV_INDEX_TEMPLATE &quot;/home/testUser/trac/templates/index.html&quot;
</pre>
<p>beim Setzen der Variable TRAC_ENV_INDEX_TEMPLATE muss darauf geachtet werden, dass sich das Verzeichnis <em>templates</em> nicht unterhalb des Elternverzeichnisses der Umgebungen (Environments) liegt. Wenn z.B. folgendes definiert ist</p>
<pre class="brush: python; light: true;">SetEnv TRAC_ENV_PARENT_DIR &quot;/home/testUser/trac/&quot;</pre>
<p> kommt es auf der Seite für die Projektliste (definiert durch die <em>index.html</em>) zu einer Fehlermeldung, dass die Datei <em>VERSION</em> für das Projekt templates fehlt. Aus diesem Grund sollte die Variable TRAC_ENV_PARENT_DIR auf ein anderes Verzeichnis zeigen. Z.B.</p>
<pre class="brush: python; light: true;">SetEnv TRAC_ENV_PARENT_DIR &quot;/home/testUser/trac/projects&quot;</pre>
<p>Nachdem diese Vorbereitungen getroffen sind, kann man daran gehen, die eigenen Templates zu entwerfen und umzusetzen.</p>
<p>Für projektspezifische Templates kann, wie bereits gesagt, die <em>site.html</em> verwendet werden. In dieser Datei ist vor allem der Ausdruck</p>
<pre class="brush: plain; light: true;">${select('*|text()')}</pre>
<p>relevant. Dieser wird in Verbindung mit</p>
<pre class="brush: python; light: true;">py:match=&quot;body&quot;</pre>
<p>verwendet und bedeutet soviel wie: &#8220;Nimm alle Subtags und jeden Text unterhalb vom Body-Tag&#8221;. Wenn man jetzt aber auf einzelne Elemente zugreifen möchte, z.B. nur den Content- oder den Main-Bereich, dann kann man folgenden Ausdruck verwenden:</p>
<pre class="brush: python; light: true;">${select('div[@id=&quot;main&quot;]|text()')}</pre>
<p>bzw.</p>
<pre class="brush: python; light: true;">${select('div/div[@id=&quot;content&quot;]|text()')}</pre>
<p>Der Ausdruck in der Select-Anweisung ist eine Untermenge von XPath (siehe hierzu <a href="http://genshi.edgewall.org/wiki/Documentation/0.4.x/xpath.html" target="_blank">Genshi XPath</a>).</p>
<p><strike>Leider bietet Trac scheinbar noch kein projektübergreifendes Templating an.</strike></p>
<p>[Update]</p>
<p>Es gibt doch eine Möglichkeit. Siehe hierzu <a href="http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac">diesen Beitrag</a>.</p>
<p>Weitere Informationen zum dem Thema befinden sich auf der Seite <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization" target="_blank">http://trac.edgewall.org/wiki/TracInterfaceCustomization</a>, sowie ein Beispiel auf <strike><a href="http://querdenker.kicks-ass.org/trac/querdenker/wiki/TracTemplating" target="_blank">http://querdenker.kicks-ass.org/trac/querdenker/wiki/TracTemplating</a></strike>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/eigene-templates-in-trac/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

