<?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>dahlen.org</title>
	<atom:link href="http://www.dahlen.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dahlen.org</link>
	<description>Familie Dahlen, NRW</description>
	<lastBuildDate>Tue, 03 Jan 2012 17:36:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Die Breßer-Kinder als Fotomodelle</title>
		<link>http://www.dahlen.org/2011/12/die-bresser-kinder-als-fotomodelle/</link>
		<comments>http://www.dahlen.org/2011/12/die-bresser-kinder-als-fotomodelle/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 10:00:23 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Kinder]]></category>
		<category><![CDATA[Fotografie]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=673</guid>
		<description><![CDATA[Mein (Studien-) Freund und Arbeitskollege Markus Rebbert taucht immer tiefer in das Thema professionelle Fotografie ein. Die Ergebnisse lassen sich bereits jetzt mehr als sehen, besonders wenn Kinder aus dem Familienkreis Modell stehen. Denn &#8211; Kinder gehen immer.]]></description>
			<content:encoded><![CDATA[<p>Mein (Studien-) Freund und Arbeitskollege <a href="http://www.rebbert.de/" title="Markus Rebbert" target="_blank">Markus Rebbert</a> taucht immer tiefer in das Thema professionelle Fotografie ein. Die Ergebnisse lassen sich bereits jetzt mehr als sehen, besonders wenn Kinder aus dem Familienkreis Modell stehen. Denn &ndash; <a href="http://www.rebbert.de/index.php/2011/12/04/kinder-gehen-immer" title="Kinder gehen immer" target="_blank">Kinder gehen immer</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2011/12/die-bresser-kinder-als-fotomodelle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TwonkyServer unter Ubuntu 10.04 verwenden</title>
		<link>http://www.dahlen.org/2011/05/twonkyserver-unter-ubuntu-10-04-verwenden/</link>
		<comments>http://www.dahlen.org/2011/05/twonkyserver-unter-ubuntu-10-04-verwenden/#comments</comments>
		<pubDate>Wed, 11 May 2011 21:55:22 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Medien]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[Playstation]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=557</guid>
		<description><![CDATA[Mit dem Erwerb eines neuen, netzwerkfähigen Fernsehers entstand der Wunsch die zentral verwalteten Musikstücke nicht nur per DAAP-Protokoll zu verteilen, sondern auch per DLNA MediaServer. Gleiches sollte auch für andere Medien (Fotos &#038; Videos) geschehen. Die Wahl der Software fiel dabei auf den TwonkyServer der PacketVideo Corporation, ein kommerzielles aber bezahlbares closed-source Produkt der TwonkyMedia [...]]]></description>
			<content:encoded><![CDATA[<p>Mit dem Erwerb eines neuen, netzwerkfähigen Fernsehers entstand der Wunsch die zentral verwalteten Musikstücke nicht nur per <abbr title="Digital Audio Access Protocol">DAAP</abbr>-Protokoll zu verteilen, sondern auch per <abbr title="Digital Living Network Alliance">DLNA</abbr> MediaServer. Gleiches sollte auch für andere Medien (Fotos &#038; Videos) geschehen. </p>
<p>Die Wahl der Software fiel dabei auf den <a href="http://www.twonky.com/products/twonkyserver/" title="TwonkyServer Produktseite">TwonkyServer</a> der PacketVideo Corporation, ein kommerzielles aber bezahlbares closed-source Produkt der TwonkyMedia Suite. Für die Installation unter Ubuntu 10.04 <q>Lucid Lynx</q> mussten einige Informationen zusammengesucht werden, die ich hier gesammelt zur Verfügung stelle.<br />
<span id="more-557"></span><br />
Mein Heimserver ist ein stromsparender PC auf Intel Atom 330 Basis mit Ubuntu Linux 10.04.2 <abbr title="Long Term Support">LTS</abbr> (<q>Lucid Lynx</q>) in der 64-Bit Server-Variante. Angesprochen wird die Maschine ausschließlich per <abbr title="Secure Shell">SSH</abbr> oder Browser, einen Bildschirm gibt es nicht. </p>
<p>Falls bisher noch keine 32-Bit-Applikation installiert wurde, muß zunächst ein Paket zur Kompatibilität  installiert werden.</p>
<pre><code>$ sudo apt-get install ia32-libs</code></pre>
<p>Zur Installation des TwonkyServers habe ich mich für das einfache <a href="http://www.twonky.com/upfiles/twonkymedia-i386-glibc-2.2.5-6.0.38.zip">ZIP</a>-Archiv entschieden. Der <a href="http://www.twonky.com/upfiles/twonkymedia-i386-glibc-2.2.5-6.0.38.sh">Installer</a> funktioniert zwar grundsätzlich, bot mir aber nicht genug Kontrolle über die Installation.</p>
<pre><code>$ wget http://www.twonky.com/upfiles/twonkymedia-i386-glibc-2.2.5-6.0.38.zip</code></pre>
<p>Gemäß des Linux <abbr title="Filesystem Hierarchy Standard">FHS</abbr> werden die eigentlichen Programmdateien unter /opt/twonkymedia installiert.</p>
<pre><code>$cd /opt
$ sudo unzip twonkymedia-i386-glibc-2.2.5-6.0.38.zip
$ sudo ln -s twonkymedia-6.0.38 twonkymedia</code></pre>
<p>Dann werden das mitgelieferte Start/Stop-Skript und die Beispiel-Konfiguration an entsprechende Stellen kopiert.</p>
<pre><code>$ sudo cp /opt/twonkymedia/twonkymedia.sh /etc/init.d/twonkymedia
$ sudo chmod +x /etc/init.d/twonkymedia
$ sudo cp /opt/twonkymedia/twonkymedia-server-default.ini /etc/opt/twonkymedia.ini</code></pre>
<p>Als nächstes stehen Anpassungen an diesen beiden Dateien an. In der Start/Stop-Datei werden zunächst einige Pfade gesetzt. Ohne diese Anpassungen tendiert TwonkyServer dazu, sich im gesamten System zu verteilen. </p>
<p>Ich bin vim-Freund, natürlich kann auch jeder andere Editor zum Einsatz kommen.</p>
<pre><code>$ sudo vim /etc/init.d/twonkymedia</code></pre>
<p>Ab Zeile 28 wird der Setup-Bereich modifiziert:</p>
<pre><code>#==================================================================[ Setup ]===

WORKDIR1="/opt/twonkymedia"
WORKDIR2="`dirname $0`"
PIDFILE=/var/run/mediaserver.pid
LOGFILE=/var/log/twonkymedia.log
INIFILE=/etc/opt/twonkymedia.ini
APPDATA=/var/opt/twonkymedia/config

#=================================================================[ Script ]===
</code></pre>
<p>Gerne hätte ich auch den Namen des <abbr title="Process ID">PID</abbr>-Files geändert, aber dies wird vom Server nicht unterstützt. Ab Zeile 94 überredet man den Server-Prozeß zur Verwendung der neuen Werte. Außerdem wird duch das Entfernen des -D Parameters der Dienst nicht mehr im Dämon-Modus gestartet:</p>
<pre><code>"$TWONKYSRV" -inifile "$INIFILE" -logfile "$LOGFILE" -appdata "$APPDATA"</code></pre>
<p>Jetzt geht es in die Konfigurationsdatei. Hier sind ebenfalls einige Pfade zu setzen, damit der Server innerhalb der angedachten Grenzen des Filesystems bleibt.</p>
<pre><code>$ sudo vim /etc/opt/twonkymedia.ini</code></pre>
<p>Meine Medien liegen unter /var/share in Unterverzeichnissen. Entsprechend des eigenen Setups ist mindestens der Parameter &#8220;contentbase&#8221; anders zu belegen. </p>
<p>Wichtig: Es ist eine ausgiebige Liste an &#8220;black listed&#8221; (ignorierten) Verzeichnissen in TwonkyServer eingebaut in denen nicht gesucht wird, auch wenn sie durch contentbase und contentdir eigentlich erfasst werden! Die Liste findet sich im Twonky <a href="http://www.twonkyforum.com/viewtopic.php?f=16&#038;t=6919&#038;p=25739&#038;hilit=blacklist#p25739">Forum</a>.</p>
<p>Der vorhandene, überschaubare Bestand an Optionen wird auf den folgenden Stand ausgebaut bzw. geändert:</p>
<pre><code>contentbase=/var/share
contentdir=+A|/audio,+P|/image,+P|/video
followlinks=0
radio=0
readdbondemand=0
ignoredir=AppleDouble,AppleDB,AppleDesktop,TemporaryItems
suppressmenu=divAutoShare
cachedir=/var/cache/twonkymedia
dbdir=/var/opt/twonkymedia/db
servermanagedmusicdir=/var/opt/twonkymedia/managed/music
servermanagedpicturedir=/var/opt/twonkymedia/managed/pictures
servermanagedvideodir=/var/opt/twonkymedia/managed/videos
onlinedir=/var/cache/twonkymedia/online-data
mediastatisticsdir=/var/opt/twonkymedia/statistics
rmhomedrive=/var/opt/twonkymedia/db
bgtrans=JPEG=1,MP3=0,MPEG2=1,WMV=0,MPEG4=0,Flash=0
language=de</code></pre>
<p>Bevor der Server jetzt gestartet wird, sind noch einige Pakete zu installieren, damit das Transcoding (die Wandlung von Video- und Audioströmen in ein Format) funktioniert. Den entsprechenden Hinweis habe ich <a href="http://www.dickson.me.uk/2010/11/02/installing-twonkyserver-on-ubuntu-lucid-lunx-10-04-1/">diesem</a> Post entnommen.</p>
<pre><code>$ sudo apt-get install libavcodec-unstripped-52 libavdevice-unstripped-52 \
 libavformat-unstripped-52 libavutil-unstripped-49 libpostproc-unstripped-51 \
 libswscale-unstripped-0 ffmpeg</code></pre>
<p>Nun ist der Pfad zu ffmpeg in der entsprechenden Datei einzutragen,</p>
<pre><code>$ sudo vim /opt/twonkymedia/cgi-bin/ffmpeg.location</code></pre>
<p>so daß sie nun folgenden Inhalt hat:</p>
<pre><code>/usr/bin</code></pre>
<p>Gleiches wird nun für das Matroska Container-Format eingestellt:</p>
<pre><code>$ sudo touch /opt/twonkymedia/cgi-bin/ffmpeg-mkv-mpeg.desc
$ sudo chmod 644 /opt/twonkymedia/cgi-bin/ffmpeg-mkv-mpeg.desc
$ sudo vim /opt/twonkymedia/cgi-bin/ffmpeg-mkv-mpeg.desc</code></pre>
<p>Die neue Datei erhält folgenden Inhalt:</p>
<pre><code>exec: ffmpeg -threads 2 -i $infile -vcodec mpeg2video -sameq -acodec copy -f vob -copyts -y $outfile
# capabilities
from=video/x-matroska
to=video/mpeg
synchronous
priority=idle</code></pre>
<p>Mit Version 6.0.34 hat eine neue Datei Einzug gehalten, welche zur Anlage von Vorschaubildern (<q>thumbnails</q>) für Videos verwendet wird. Leider gibt es hier einen Fehler beim Aufruf von ffmpeg (zumindest unter Ubuntu 10.04 LTS), so daß statt Vorschaubildern nur Fehler durchs Log rasseln. Man ändere in der Datei /opt/twonkymedia/cgi-bin/ffmpeg-video-thumb.desc die Zeile 3 von</p>
<pre><code>exec: ffmpeg  -itsoffset -$videothumbtime  -i $infile &hellip;
</code></pre>
<p>zu</p>
<pre><code>exec: ffmpeg  -itsoffset $videothumbtime  -i $infile &hellip;
</code></pre>
<p>Sprich &ndash; das führende Minus vor $videothumbtime muß entfernt werden.</p>
<p>So, das war&#8217;s &ndash; die restlichen Parameter lassen sich einfacher über das Webinterface einstellen. Zeit den Server zu starten &hellip;</p>
<pre><code>$ sudo /etc/init.d/twonkymedia start</code></pre>
<p>Wenn der Start erfolgreich war, steht der Server jetzt auf Port 9000 zur Verfügung. Als letzten Schritt kann der TwonkyServer noch automatisch beim Hochfahren der Maschine gestartet werden:</p>
<pre><code>$ sudo update-rc.d twonkymedia defaults</code></pre>
<p>Falls es wider Erwarten Probleme beim Start gibt, liefert das Logfile unter /var/log/twonkymedia.log vielleicht eintscheidende Hinweise.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2011/05/twonkyserver-unter-ubuntu-10-04-verwenden/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dahlenmühle in den Medien: &#8220;Land und Lecker&#8221; (WDR Fernsehen)</title>
		<link>http://www.dahlen.org/2010/09/dahlenmuehle-bei-land-und-lecker/</link>
		<comments>http://www.dahlen.org/2010/09/dahlenmuehle-bei-land-und-lecker/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 10:22:31 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Medien]]></category>
		<category><![CDATA[Sevelen]]></category>
		<category><![CDATA[Garten]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=509</guid>
		<description><![CDATA[Am 15.09.2010 wurde ab 21:00h eine neue Folge aus der Serie Land und lecker des WDR Fernsehens ausgestrahlt. Inhalt der Serie sind die Geschichten und Kochkünste von sechs Landfrauen, die sich &#8211; gefahren im Oldtimerbus &#8211; abwechselnd besuchen und ein festliches 3-Gänge-Menü zubereiten. In einer kurzen Sequenz ist ab 00:15min die Dahlenmühle zu sehen, vor [...]]]></description>
			<content:encoded><![CDATA[<p>Am 15.09.2010 wurde ab 21:00h eine neue Folge aus der Serie <q>Land und lecker</q> des WDR Fernsehens ausgestrahlt. Inhalt der Serie sind die Geschichten und Kochkünste von sechs Landfrauen, die sich &ndash; gefahren im Oldtimerbus &ndash; abwechselnd besuchen und ein <q>festliches 3-Gänge-Menü</q> zubereiten.</p>
<p>In einer kurzen Sequenz ist ab 00:15min die Dahlenmühle zu sehen, vor welcher der historische Reisebus das Gelände verlässt. Nur für Familienmitglieder zu erkennen, zieht im Hintergrund Fabian Dahlen auf dem Fahrrad seine Kreise.</p>
<p>Die Themenseite zur Serie ist unter <a href="http://www.landundlecker.wdr.de/">http://www.landundlecker.wdr.de/</a> zu erreichen, ein Mitschnitt der Sendung wird als <a href="http://www.wdr.de/tv/landundlecker/sendungsbeitraege/2010/0915/index.jsp">Flash-Film</a> bereitgestellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2010/09/dahlenmuehle-bei-land-und-lecker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Übernachten an der Dahlenmühle</title>
		<link>http://www.dahlen.org/2010/07/ubernachten-an-der-dahlenmuhle/</link>
		<comments>http://www.dahlen.org/2010/07/ubernachten-an-der-dahlenmuhle/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 20:57:33 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Orte]]></category>
		<category><![CDATA[Sevelen]]></category>
		<category><![CDATA[Garten]]></category>
		<category><![CDATA[Gästezimmer]]></category>
		<category><![CDATA[Mühle]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=333</guid>
		<description><![CDATA[Ab sofort können wir Radwanderern, Messebesuchern und anderen Interessierten ein Zimmer direkt an der Mühle zur Ver&#173;fügung stellen! Unser neu gestaltetes Gästezimmer in Sevelen (Gemeinde Issum, Kreis Kleve) kann als Einzelzimmer oder Doppel&#173;zimmer genutzt werden. Es bietet absolute Ruhe, den einmaligen Charme der Dahlenmühle und des umgebenden Gartens. Weitere Details, Bilder und Preise finden Sie [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.dahlen.org/wordpress/wp-content/gallery/gaestezimmer/DSC00513t.JPG" title="Der Schlafbereich mit zwei Einzelbetten" class="thickbox noslimstat" rel="singlepic173" >
	<img class="ngg-singlepic ngg-left" src="http://www.dahlen.org/wordpress/wp-content/gallery/cache/173__150x100_DSC00513t.JPG" alt="Schlafbereich" title="Schlafbereich" />
</a>
Ab sofort können wir Radwanderern, Messebesuchern und anderen Interessierten ein Zimmer direkt an der Mühle zur Ver&shy;fügung stellen! Unser neu gestaltetes Gästezimmer in Sevelen (Gemeinde Issum, Kreis Kleve) kann als Einzelzimmer oder Doppel&shy;zimmer genutzt werden. Es bietet absolute Ruhe, den einmaligen Charme der Dahlenmühle und des umgebenden Gartens.</p>
<p>Weitere Details, Bilder und Preise finden Sie unter <a href="http://www.dahlen.org/gaestezimmer/">http://www.dahlen.org/gaestezimmer/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2010/07/ubernachten-an-der-dahlenmuhle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Offene Gartenpforte 2010</title>
		<link>http://www.dahlen.org/2010/07/offene-gartenpforte-2010/</link>
		<comments>http://www.dahlen.org/2010/07/offene-gartenpforte-2010/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 07:54:10 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Leben]]></category>
		<category><![CDATA[Garten]]></category>
		<category><![CDATA[Gartenpforte]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=275</guid>
		<description><![CDATA[Zum letzten Mal in diesem Jahr öffnet sich am 10. und 11.07., zwischen 10 und 17 Uhr die Pforte zum Privat-Garten von Irmhild Dahlen in Sevelen. Nachdem der Japan-Garten nach der überreichen Rho&#173;do&#173;den&#173;don&#173;blüte inzwischen wieder zu einem Garten der Stille geworden ist, der Körper und Geist zum Entspannen und Meditieren einlädt, lassen an anderer Stelle [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.dahlen.org/wordpress/wp-content/gallery/garten/dsc00428.jpg" title="Blick auf das Teehaus, von der Terrasse aus" class="thickbox noslimstat" rel="singlepic160" >
	<img class="ngg-singlepic ngg-left" src="http://www.dahlen.org/wordpress/wp-content/gallery/cache/160__150x100_dsc00428.jpg" alt="Teehaus" title="Teehaus" />
</a>
Zum letzten Mal in diesem Jahr öffnet sich am 10. und 11.07., zwischen 10 und 17 Uhr die Pforte zum <a title="zur Garten-Seite" href="/projekte/garten">Privat-Garten</a> von Irmhild Dahlen in Sevelen.</p>
<p>Nachdem der Japan-Garten nach der überreichen Rho&shy;do&shy;den&shy;don&shy;blüte inzwischen wieder zu einem <q>Garten der Stille</q> geworden ist, der Körper und Geist zum Entspannen und Meditieren einlädt, lassen an anderer Stelle die Rosen und die ersten Hortensien ein buntes Blumenmeer erwarten.</p>
<p>Der Eintritt ist frei, es wird um eine Spende von 3€ für den <q><a title="zum Museumsverein" href="/projekte/museumsverein">Museumsverein Dahlenmühle <span class="nbthinsp">e<span>.</span>V.</span></a></q> gebeten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2010/07/offene-gartenpforte-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kai Alexander Thilo Breßer</title>
		<link>http://www.dahlen.org/2009/11/kai-bresser/</link>
		<comments>http://www.dahlen.org/2009/11/kai-bresser/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 13:32:48 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Familie]]></category>
		<category><![CDATA[Kinder]]></category>
		<category><![CDATA[Geburt]]></category>
		<category><![CDATA[Kai]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=258</guid>
		<description><![CDATA[Am Ende musste es doch schnell gehen: Per Not-Kaiserschnitt kam am 04.11.2009, um 14:32h, Kai Alexander Thilo, der erste Sohn und damit das dritte Kind von Corinna Breßer, geb. Dahlen und Peter Breßer auf die Welt! Wie auch bei bei seinen Schwestern Pia und Ina fand die Entbindung im Krankenhaus Krefeld-Uerdingen statt. Trotz seines leichten [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.dahlen.org/wordpress/wp-content/gallery/familie/kai.png" title="Kai, nach seiner Geburt im Krankenhaus Krefeld-Uerdingen" class="thickbox noslimstat" rel="singlepic147" >
	<img class="ngg-singlepic ngg-left" src="http://www.dahlen.org/wordpress/wp-content/gallery/cache/147__150x100_kai.png" alt="Kai Breßer" title="Kai Breßer" />
</a>
Am Ende musste es doch schnell gehen: Per Not-Kaiserschnitt kam am 04.11.2009, um 14:32h, Kai Alexander Thilo, der erste Sohn und damit das dritte Kind von Corinna Breßer, geb. Dahlen und Peter Breßer auf die Welt!</p>
<p>Wie auch bei bei seinen Schwestern <a title="Pia Catherina Breßer" href="/?p=20">Pia</a> und <a title="Ina Johanna Breßer" href="/?p=22">Ina</a> fand die Entbindung im Krankenhaus Krefeld-Uerdingen statt. Trotz seines leichten Frühstarts geht es Kai und seiner Mutter gut, die &#8222;Eckdaten&#8221; sind: 52cm Körpergröße, knapp 3.000 Gramm Gewicht.</p>
<p>Wir alle wünschen Kai, seinen Schwestern und seinen Eltern alles Gute!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2009/11/kai-bresser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abhängigkeiten vermeiden mit der Java Service Provider Spezifikation</title>
		<link>http://www.dahlen.org/2009/08/abhangigkeiten-vermeiden-mit-der-java-service-provider-spezifikation/</link>
		<comments>http://www.dahlen.org/2009/08/abhangigkeiten-vermeiden-mit-der-java-service-provider-spezifikation/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 11:52:03 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=197</guid>
		<description><![CDATA[Durch ein aktuelles Projekt der Cassini Consulting konnte ich mich endlich Mal tiefer mit einem grundsätzlichen Problem beschäftigen: der losen Kopplung eines Service Provider Interfaces (SPI) oder grundsätzlich eines API und seiner Implementierungen in Form von Plugins. Das Erstaunliche daran (überlagert von Themen wie Dependency Injection und Spring): Es gibt bereits seit dem JDK 1.3 [...]]]></description>
			<content:encoded><![CDATA[<p>Durch ein aktuelles Projekt der <a href="http://www.cassini.de/">Cassini Consulting</a> konnte ich mich endlich Mal tiefer mit einem grundsätzlichen Problem beschäftigen: der losen Kopplung eines Service Provider Interfaces (SPI) oder grundsätzlich eines <abbr title="Application Programmers Interface">API</abbr> und seiner Implementierungen in Form von <q>Plugins</q>. Das Erstaunliche daran (überlagert von Themen wie <a href="http://de.wikipedia.org/wiki/Dependency_Injection">Dependency Injection</a> und <a href="http://www.springsource.com/">Spring</a>): Es gibt bereits seit dem <abbr title="Java Development Kit">JDK</abbr> 1.3 eine sehr einfache Lösung für dieses Problem und sie funktioniert auch <q>ab Werk</q>: Die <em>Java Service Provider Spezifikation</em>.<br />
<span id="more-197"></span><br />
Die Problemstellung lässt sich am besten in Form eines Beispiels erläutern. Die Projektleitung kommt auf die irsinnige Idee, ein <q>Quoter</q>-Interface als Teil einer API zu definieren, über welches Texte in Anführungszeichen gefasst werden können. Etwa so:</p>
<pre><code>package demo.api;

public interface IQuoter {
        String quote(String s);
}
</code></pre>
<p>Dazu steuern die Entwickler eine Implementierung für den deutschen Sprachraum bei, welcher tief- und hochgestellte Anführungszeichen verwendet (über Unicode):</p>
<pre><code>package demo.impl;

public class GermanQuoter implements IQuoter {
        public String quote(String s) {
                return '\u201E' + s + '\u201D';
        }
}
</code></pre>
<p>Die Frage ist nun, wie kann man diese Implementierung verwenden,</p>
<ul>
<li>ohne sie direkt in der Applikation zu importieren und</li>
<li>ohne sie direkt in der API zu referenzieren?</li>
</ul>
<p>Die Lösung ist interessanterweise bereits seit dem JDK 1.3 Teil der Java Standard Edition (SE), auch wenn sie zwischen den Versionen einige Male den Platz gewechselt hat. Mit Java&#160;6 scheint sie nun aber ihren endgültigen Platz gefunden zu haben als  java.util.ServiceLoader.</p>
<p>Dafür muß die Implementierung als eigenes <abbr title="Java ARchive">JAR</abbr> ausgeliefert werden, denn folgende Punkte sind Voraussetzung für die Nutzung des ServiceLoader:</p>
<ol>
<li>im JAR muß ein Verzeichnis <em>META-INF/services</em> vorhanden sein</li>
<li>in diesem Verzeichnis muß für jede API Klasse (Interface oder abstrakte Klasse) eine Datei gleichen Namens liegen</li>
<li>in jeder dieser Dateien muß der vollqualifizierte Namen der Implementations-Klasse vermerkt sein</li>
</ol>
<p>Für unser Beispiel bedeutet das also, daß der Inhalt des Implementierungs-JAR wie folgt aussieht:<br />
<code>demo.impl.GermanQuoter<br />
META-INF/services/demo.api.IQuoter</code></p>
<p>Und die einzige Zeile in der Datei demo.api.IQuoter liest sich wie folgt:<br />
<code>demo.impl.GermanQuoter</code></p>
<p>Wie kommt nun unsere Applikation, welche die API und das Implementierungs-JAR im Klassenpfad hat an die Implementierung? Nun, über Aufruf der entsprechenden <q>Service Locator</q>, welche sich je nach JDK an verschiedenen Stellen finden:</p>
<ul>
<li>im JDK 1.3 als <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider">sun.misc.Service</a></li>
<li>im JDK 1.4 &ndash; 1.5 als <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/spi/ServiceRegistry.html#getServiceProviderByClass%28java.lang.Class%29">javax.imageio.spi.ServiceRegistry</a>(!)</li>
<li>seit dem JDK 1.6 endlich an richtiger Stelle als <a href="http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html#load%28java.lang.Class%29">java.util.ServiceLoader</a></li>
</ul>
<p>Also schreiben wir uns für das JDK 1.6 eine kleine, generische Utility-Klasse, welche eine oder alle Implementierungen für eine API-Artefakt liefern kann:</p>
<pre><code>package demo.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

public final class GenericServiceLocator {

    private GenericServiceLocator() {
    }

    public static &lt;T> T locate(final Class&lt;T> clazz) {
        final List services = locateAll(clazz);
        return services.isEmpty() ? (T) null : services.get(0);
    }

    public static &lt;T> List&lt;T> locateAll(final Class&lt;T> clazz) {

        final Iterator&lt;T> iterator = ServiceLoader.load(clazz).iterator();
        final List&lt;T> services = new ArrayList&lt;T>();

        while(iterator.hasNext()) {
            try {
                services.add(iterator.next());
            } catch (Error e) {
                e.printStackTrace(System.err);
            }
        }

        return services;

    }
}
</code></pre>
<p>Und so sieht dann der Aufruf aus unserer Beispiel-Applikation aus:</p>
<pre><code>package demo;

import demo.api.IQuoter;
import demo.util.GenericServiceLocator;

public class App {
    public static void main( String[] args ) {
        System.out.println(
                GenericServiceLocator
                    .locate(IQuoter.class)
                    .quote("Quote Me")
        );
    }
}
</code></pre>
<p>Das ist alles. Befinden sich API, Implementierung und Applikation im Klassenpfad, kann der Test über den Aufruf von<br />
<code>java -cp demo-api.jar;demo-impl.jar;demo-app.jar demo.App</code><br />
erfolgen. Das Ergebnis sollte auf Unicode-Terminals ein <tt>&#8222;Quote Me&#8221;</tt> sein. Auf der Windows&nbsp;XP Console ist es übrigens <tt>äQuote Meö</tt> &hellip;</p>
<p>Zum Ausprobieren ist das <a href='http://www.dahlen.org/wordpress/wp-content/uploads/2009/08/spi-demo.zip'>Beispiel-Projekt</a> als <a href="http://maven.apache.org/">Maven2</a> Multi-Module beigefügt, die Verwendung in eigenen Projekten ist &ndash; selbstverständlich &ndash; gestattet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2009/08/abhangigkeiten-vermeiden-mit-der-java-service-provider-spezifikation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Qualitätsmetriken des OOD</title>
		<link>http://www.dahlen.org/2009/07/qualitaetsmetriken-des-ood/</link>
		<comments>http://www.dahlen.org/2009/07/qualitaetsmetriken-des-ood/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 09:53:03 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Metriken]]></category>
		<category><![CDATA[OOD]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/?p=119</guid>
		<description><![CDATA[Aktuell unterstütze ich für meinen Arbeitgeber, die Cassini Consulting einen IT-Dienstleister bei der Realisierung einer kundenspezifischen Software-Plattform, gebildet aus Mitteln der JEE (Spring, JMS, JPA). Im Zuge dieses Projektes werden auch Analyse-Werkzeugen eingesetzt, welche Aspekte des objekt-orientierten Designs erfassen und (graphisch) aufbereiten. Getreu dem Motto „a fool with a tool is still a fool” ist [...]]]></description>
			<content:encoded><![CDATA[<p>Aktuell unterstütze ich für meinen Arbeitgeber, die <a href="http://www.cassini.de/">Cassini Consulting</a> einen IT-Dienstleister bei der Realisierung einer kundenspezifischen Software-Plattform, gebildet aus Mitteln der JEE (Spring, <acronym title="Java Messaging Service">JMS</acronym>, <acronym title="Java Persistence API">JPA</acronym>). Im Zuge dieses Projektes werden auch Analyse-Werkzeugen eingesetzt, welche Aspekte des objekt-orientierten Designs erfassen und (graphisch) aufbereiten. Getreu dem Motto „a fool with a tool is still a fool” ist für mich vor allem der theoretische Hintergrund von Bedeutung.<br />
<span id="more-119"></span></p>
<h3>Metriken</h3>
<p>Viele der eingesetzen Werkzeuge (wie <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a>, <a href="http://cap.xore.de/">CAP</a>, <a href="http://www.hello2morrow.com/products/sonarj">SonarJ</a>) verwenden Metriken, die bereits 1994 von Robert Martin als <cite>OO Design Quality Metrics</cite><a href="#fn1">[1]</a> definiert wurden. Die maßgeblichen Kennzahlen dabei sind:</p>
<ul>
<li>die Abstraktheit (abstractness, A) einer Kategorie</li>
<li>die Instabilität (instability, I) einer Kategorie</li>
<li>die Distanz (distance, D) einer Kategorie zur Ideallinie, der sog. main sequence</li>
</ul>
<p>Der Begriff „Kategorie” beschreibt in diesem Kontext eine logische Gruppierung innerhalb der Architektur, hierbei könnte es sich <span class="nbthinsp">z<span>.</span>B.</span> um eine Java Library, ein Java Package oder ein <a href="http://maven.apache.org/">Maven</a> Modul handeln.</p>
<h4>Abstraktheit</h4>
<p>Die Abstraktheit wird nun aus dem Verhältnis von „abstrakten” (N<sub>a</sub>) zur Summe aller Klassen gebildet (abstrakte und „konkrete”, N<sub>c</sub>). Im Java-Kontext schließt die Qualifizierung als „abstrakt” dabei auch Interfaces mit ein. Es gilt:</p>
<p>A = N<sub>a</sub> : (N<sub>a</sub> + N<sub>c</sub>)</p>
<p>Der Wertbereich ist [0,1], kann also als Prozentzahl wiedergegeben werden. 0% bedeutet, das die Kategorie ausschließlich aus konkreten Klassen besteht, 100% bedeutet, daß die Kategorie ausschließlich aus abstrakten Klassen oder Interfaces besteht.</p>
<h4>Instabilität</h4>
<p>Zur Bestimmung der Instabilität verwendet R. Martin die Abhängigkeiten einer Kategorie von anderen Kategorien. Dabei unterscheidet er zwischen eingehenden Abhängigkeiten (afferent couplings, C<sub>a</sub>) und ausgehenden Abhängigkeiten (efferent couplings, C<sub>e</sub>).</p>
<p>Afferent couplings sind also Abhängigkeiten, welche andere Kategorien in die betrachtete Kategorien haben, efferent couplings sind Abhängigkeiten, welche die betrachtete Kategorie in andere Kategorien hat.</p>
<p>Wieder wird das Verhältnis gebildet, es gilt:</p>
<p>I = C<sub>e</sub> : (C<sub>e</sub> + C<sub>a</sub>)</p>
<p>Auch hier kann der Wertebereich [0,1] in Prozent ausgedrückt werden. Je mehr ausgehende Abhängigkeiten eine Kategorie hat, desto höher ist der Grad an Instabilität. I ist also 0 für Kategorien, die keinerlei ausgehende Abhängigkeiten haben und 1 für Kategorien, die ausschließlich ausgehende Abhängigkeiten haben.<br />
<!--netxpage--></p>
<h4>Main Sequence</h4>
<p>Die für eine Kategorie ermittelte Abstraktheit A und Instabilität I lassen sich hervorragend als Achsen eines Graphen verwenden. Jede Kategorie kann dann als Koordinate in das System eingetragen werden. Doch welche Aussage lässt sich aus ihrer Plazierung machen?</p>
<dl>
<dt>A=1, I=0 </dt>
<dd>eine Kategorie, die zu 100% abstrakt ist und keinerlei ausgehende Abhängigkeiten hat, ist eine API. Interfaces und abstrakte Klassen definieren dabei die notwendigen Operationen, welche durch eine konkrete Implementierung zu realisieren sind </dd>
<dt>A=0, I=1 </dt>
<dd>eine Kategorie, die zu 0% abstrakt ist und ausschließlich abgehende Abhängigkeiten hat, ist eine Implementierung. Am Ende der Vererbungskette realisiert sie <span class="nbthinsp">z<span>.</span>B.</span> eine API </dd>
<dt>A=1, I=1 </dt>
<dd>eine Kategorie, die zu einem hochgradig abstrakt ist und andererseits ausschließlich abgehende Abhängigkeiten hat, stellt keinen erstrebenswerten Zustand dar. Als API ist sie zu instabil, als Implementierung müssten konkrete Klassen vorhanden sein </dd>
<dt>A=0, I=0 </dt>
<dd>Kategorien, welche stabil und konkret sind, haben ihre Berechtigung als geschlossenes, kleines System. Ein klassisches Beispiel dafür ist das typische HelloWorld.java, lässt man die Abhängigkeiten zu den JRE/JEE Bibliotheken außen vor. In größeren Architekturen wird dieser Punkt vermutlich nie erreicht werden. </dd>
</dl>
<div id="attachment_181" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.dahlen.org/wordpress/wp-content/uploads/2009/07/ood-metriken-graph.gif"><img class="ngg-singlepic ngg-left " title="OOD Matriken als Graph" src="http://www.dahlen.org/wordpress/wp-content/uploads/2009/07/ood-metriken-graph-150x150.gif" alt="Metriken nach R. Martin" width="150" height="150" /></a><p class="wp-caption-text">Metriken nach R. Martin</p></div>
<p>In der Theorie von R. Martin bildet die Strecke zwischen den Extremen von A und I nun die sog. Main Sequence (A + I = 1). Sie beschreibt das Verhältnis zwischen Abstraktheit und Instabilität, welches als ausgewogen (balanced) gilt.</p>
<h4>Distanz</h4>
<p>Die oben beschriebenen Kennzahlen dienen bisher nur der Einordnung einer Kategorie in den Graphen. Zur Bestimmung der „Güte” einer Kategorie empfiehlt R. Martin nun die Berechnung der Distanz (distance) einer Kategorie von der main sequence. Es gilt:</p>
<p>D = |(A + I &ndash; 1) : 2|</p>
<p>oder einfacher (um einen Wert zwischen 0 und 1 zu erhalten):</p>
<p>D = |A + I &ndash; 1|</p>
<p>Ziel des objekt-orientierten Design sollte es nun sein, die Distanz nahe an 0 zu bringen, etwa indem man ausgehende Abhängigkeiten eliminiert und damit die Stabilität erhöht, oder Kategorien in APIs mit hoher Abstraktheit und Implementierungs-Bereiche unterteilt.</p>
<h3>Fazit</h3>
<p>Die oben aufgeführten Metriken können eine Hilfe beim objekt-orientieren Design bzw. der objekt-orientierten Analyse sein. Man sollte sich ihnen aber nicht blind unterwerfen, denn wie immer gilt: Das Ideal im Blick, das Projektziel unter den Fingern.</p>
<p><sup>1</sup> <a name="fn1" href="http://www.objectmentor.com/resources/articles/oodmetrc.pdf">Robert Martin: OO Design Quality Metrics &ndash; An Analysis of Dependencies, 1994</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2009/07/qualitaetsmetriken-des-ood/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>website reloaded</title>
		<link>http://www.dahlen.org/2009/07/website-reloaded/</link>
		<comments>http://www.dahlen.org/2009/07/website-reloaded/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 14:28:39 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Sonstiges]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/wordpress/?p=72</guid>
		<description><![CDATA[Viele Anläufe hat es gegeben, dahlen.org unter Kontrolle eines Content Management Systems (CMS) zu stellen, mit neuen Inhalten und einem frischen Design zu versehen. Meistens verliefen sie sich in der Auswahl des &#8222;perfekten&#8221; Systems und im Eingeständnis gestalterischer Inkompetenz. Doch nun ist es soweit, dahlen.org startet neu. Was nicht jeder weiß, viele meiner beruflichen Projekte [...]]]></description>
			<content:encoded><![CDATA[<p><img class="ngg-singlepic ngg-left alignleft" src="http://www.dahlen.org/wordpress/wp-content/gallery/garten/thumbs/thumbs_img_1458.png" alt="img_1458" width="100" height="75" />Viele Anläufe hat es gegeben, dahlen.org unter Kontrolle eines Content Management Systems (CMS) zu stellen, mit neuen Inhalten und einem frischen Design zu versehen. Meistens verliefen sie sich in der Auswahl des &#8222;perfekten&#8221; Systems und im Eingeständnis gestalterischer Inkompetenz. Doch nun ist es soweit, dahlen.org startet neu.<br />
<span id="more-72"></span><br />
Was nicht jeder weiß, viele meiner beruflichen Projekte (bei <a title="freenet.de AG" href="http://www.freenet.ag/" target="_blank">freenet</a>, Vignette oder <a title="Cassini Consulting GmbH" href="http://www.cassini.de/" target="_blank">Cassini</a>) beschäftigen sich mit Internet- oder Intranet-Auftritten. In der Regel kommt dabei ein Enterprise Content Management System (ECMS) zum Einsatz, wie <span class="nbthinsp">z<span>.</span>B.</span> Day Communiqué oder CoreMedia. Doch trotz vieler vorwiegend technischer Aspekte, steht dabei immer auch die fachliche Beratung im Vordergrund. Deren wesentlicher Fragestellung kann sich auch ein privater Internet-Auftritt nicht verschliessen:</p>
<blockquote><p>Was soll vermittelt werden und an wen?</p>
</blockquote>
<p>Die Antwort auf die Frage &#8222;was&#8221; ist interessanterweise ein Ausschluß: keine persönlichen Dinge. Nichts, was man nicht im lokalen Käseblättchen veröffentlichen oder von außen an die Haustüre kleben würde.</p>
<p>Und darum beinhaltet diese Site aktuell nicht mehr als grundsätzliche Familien- und Personen-Daten, nichts was man nicht auch anderswo erfahren kann. Vorbei die Zeiten scheußlicher Jugendphotos oder peinlicher Teenager-Erinnerungen. Natürlich bin ich mir bewusst  &ndash; Tante Google vergisst nicht!</p>
<p>Für den zweiten Aspekt der Frage, das &#8222;wer&#8221; gibt es eine einfache Antwort: Jeder, den es interessiert. Betrachtet man die Logfiles von dahlen.org der letzten Monate, so ergibt sich ein beständiges, stabiles Interesse an der <a href="/?page_id=30">Dahlenmühle</a> und dem anliegenden <a href="/?page_id=37">Garten</a>. Dazu tragen sicherlich die <a href="/?page_id=42">Galerie</a> und die regelmässigen Termine, wie der Mühlentag und die &#8222;<a href="http://www.offene-gartenpforte.de/">Offene Gartenpforte</a>&#8221; bei. In Zukunft wird dieser Bereich daher einen Schwerpunkt von dahlen.org bilden. Auch die Aktualität soll erhöht werden, was nicht weiter schwer fällt, schließlich wird in Sevelen zu jeder Zeit irgendetwas erneuert oder umgebaut.</p>
<p>Und um all das zu bewerkstelligen habe mir Hilfe von <a href="http://wordpress.org/">WordPress</a> geholt. Als Blog-Software für die eher statischen Seiten von dahlen.org überqualifiziert, bietet es doch genug CMS-Fähigkeiten, um meinem Ansinnen gerecht werden. Auch habe ich kein eigenes Design erstellt, sondern verwende eine fertige Vorlage.</p>
<p>Lediglich die Übersetzung ins Deutsche muß an einigen Stellen noch vollzogen werden, aber daran soll es jetzt nicht mehr scheitern. Denn, auch wenn ich eine Niete am Zeichenstift bin, an der Tastatur bin ich unschlagbar.</p>
<p>Christoph</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2009/07/website-reloaded/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ina Johanna Valentina Breßer</title>
		<link>http://www.dahlen.org/2007/02/ina-johanna-valentina-breser/</link>
		<comments>http://www.dahlen.org/2007/02/ina-johanna-valentina-breser/#comments</comments>
		<pubDate>Wed, 14 Feb 2007 08:01:10 +0000</pubDate>
		<dc:creator>Christoph</dc:creator>
				<category><![CDATA[Familie]]></category>
		<category><![CDATA[Kinder]]></category>
		<category><![CDATA[Geburt]]></category>
		<category><![CDATA[Ina]]></category>

		<guid isPermaLink="false">http://www.dahlen.org/wordpress/?p=22</guid>
		<description><![CDATA[Es geht Schlag auf Schlag im Dunstkreis der Familie: Gestern, am 14.02.2007 um 10:01h hat Corinna Breßer, geb. Dahlen ihre zweite Tochter namens Ina Johanna Valentina in wiedermal rekordverdächtigen 30 Minuten zur Welt gebracht. Die kleine Ina ist 51cm lang, 3160g schwer und der ganze Stolz von Corinna, Peter und Schwesterchen Pia.]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.dahlen.org/wordpress/wp-content/gallery/familie/foto_ina.jpg" title="Ina, nach ihrer Geburt im Krankenhaus Krefeld-Uerdingen" class="thickbox noslimstat" rel="singlepic3" >
	<img class="ngg-singlepic ngg-left" src="http://www.dahlen.org/wordpress/wp-content/gallery/cache/3__150x100_foto_ina.jpg" alt="Ina Johanna Valentina Breßer" title="Ina Johanna Valentina Breßer" />
</a>
Es geht Schlag auf Schlag im Dunstkreis der Familie: Gestern, am 14.02.2007 um 10:01h hat Corinna Breßer, geb. Dahlen ihre zweite Tochter namens Ina Johanna Valentina in wiedermal rekordverdächtigen 30 Minuten zur Welt gebracht.</p>
<p>Die kleine Ina ist 51cm lang, 3160g schwer und der ganze Stolz von Corinna, Peter und Schwesterchen Pia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dahlen.org/2007/02/ina-johanna-valentina-breser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

