<?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>Privates Blog von Karsten Gresch &#187; java</title>
	<atom:link href="http://blog.gresch.de/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gresch.de</link>
	<description>Varia, Miscellania</description>
	<lastBuildDate>Wed, 06 Jul 2011 18:23:07 +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>Vermisst: Hardware-Benchmark für Entwickler</title>
		<link>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/</link>
		<comments>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:28:22 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Berufsleben]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Vermisstes]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[karsten]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=312</guid>
		<description><![CDATA[Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- [...]]]></description>
			<content:encoded><![CDATA[<p>Ein Umstand, der in Unternehmen auf Entscheiderebene außerhalb des IT-Umfelds gerne verdrängt wird: Softwareentwickler sind Spezialisten und benötigen deshalb spezielle Hardware. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.<br />
Oberflächlich mag der typische Softwareentwickler Quellcode <em>schreiben</em>, was nicht so entfernt vom Schreiben von Textdateien zu sein scheint.</p>
<p>Tatsächlich ist der Quellcodeeditor nur ein Bestandteil von vielen, die die <a href="http://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung">Integrierte Entwicklungsumgebung</a> (&#8220;IDE&#8221;) eines Entwicklers ausmachen: Damit der Quellcode überhaupt ausgeführt werden kann, muss er kompiliert werden. Bisweilen muss ein Entwickler während der Ausführung des Programms an bestimmten Stellen den Ausführungsfluss Schritt-für-Schritt  überwachen (&#8220;debuggen&#8221;), wozu die Anwendung in den Arbeitsspeicher geladen werden muss.</p>
<p>Der Quelltext bewegt sich auch nicht im luftleeren Raum: Anwendungen werden in Projekte und Bibliotheken aufgeteilt, häufig handelt es sich um einige hunderte bis tausende Dateien, die gemeinsam kompiliert und in den Arbeitsspeicher geladen werden müssen. Allein das Lesen der Quelltexte und das Erstellen der Kompilate kann bei mittelgroßen Anwendungen mehrere Minuten, bei größeren sogar viele Stunden andauern.</p>
<p>Auch wenn IDEs inkrementelles Kompilieren ermöglichen, wird des öfteren ein &#8220;<a href="http://de.wikipedia.org/wiki/Erstellungsprozess">Build</a>&#8221; (alle Kompilate und dazugehörige Dateien) wieder gelöscht und vollständig neu erstellt.Zudem sind Softwareanwendungen im Unternehmensumfeld verteilt und kommunizieren mit Datenbanken, anderen Systemen und/oder der im Unternehmen eingesetzten Middleware.</p>
<p>Normalerweise ist der Entwickler bestrebt, auf seinem Rechner die Bedingungen, unter denen seine Anwendung später ausgeführt werden soll, en miniature nachzubilden: Auf diese Weise ist er unabhängig von Wartezeiten und kann ggf. auch offline (z.B. im Zug) arbeiten.</p>
<p>Was deshalb wirklich entscheidend für einen Entwicklerrechner?</p>
<p>Die Leistung:</p>
<p>Ein Softwareentwickler benötigt ein für seine Ansprüche äußerst leistungsfähiges System, was sich insbesondere auf<strong></strong></p>
<p><strong>a)</strong> die Festplatte<strong><br />
b)</strong> den Hauptspeicher<strong><br />
c)</strong> die CPU und<strong><br />
d)</strong> Grafikkarte + Display bezieht.</p>
<p>Die <strong>Festplatte</strong> ist deshalb so wichtig, weil zum Erstellen von &#8220;Builds&#8221; oft tausende Dateien gelesen und geschrieben werden. Normalerweise liegt in langsamen Festplatten <em>der</em> Schwachpunkt von Entwicklersystemen (abgesehen von Virenscanner, die die Buildverzeichnisse überwachen). Sinnvoll können hier <a href="http://de.wikipedia.org/wiki/Solid_State_Drive">Solid State Discs</a> (flash-basiert) oder <a href="http://de.wikipedia.org/wiki/RAID">RAID</a>-Systeme (RAID 0 oder 0+1, aber nicht 5) mit <a href="http://de.wikipedia.org/wiki/Serial_ATA">SATA</a> oder <a href="http://de.wikipedia.org/wiki/Serial_Attached_SCSI">SAS</a> sein, die den Datendurchsatz erhöhen.</p>
<p>Der <strong>Hauptspeicher</strong> muss sehr großzügig dimensioniert sein: Zur Zeit sollte ein Rechner für die Anwendungsentwicklung verteilter Systeme über mindestens 8 GByte Hauptspeicher verfügen, besser wäre gleich das Doppelte (einige Notebook-Workstations bieten mittlerweile 16 GByte an).</p>
<p>Softwareseitig bedingt dies den Einsatz von 64-Bit-Betriebssystemen.Wird mit virtuellen Maschinen gearbeitet (was immer mehr zunimmt), ist ein <strong>Mehrprozessor</strong>- wenigstens ein Multicoresystem sinnvoll. Um die Fülle an Informationen einer IDE wie <a href="http://www.eclipse.org/">Eclipse</a>, <a href="http://netbeans.org/">Netbeans</a> oder <a href="http://qt.nokia.com/">Qt</a> auf einen Bildschirm zu bekommen, empfiehlt sich zudem ein hochauflösendes Display und eine entsprechende Grafikkarte.</p>
<p>Wie separat dargelegt, macht sich eine <a href="http://blog.gresch.de/2009/08/30/der-wahre-prei…ger-hardware-2/">Leistungssteigerung bei Entwicklerrechnern schnell bezahlt</a>. Um Entscheidern (und nach besserer Hardware strebenden Entwicklern) eine objektivere Entscheidungsgrundlage an die Hand zu geben, würde ich mir einen Benchmark wünschen, der</p>
<p><strong>a)</strong> die Leistungsfähigkeit eines Systems hinsichtlich der o.a. Kriterien für einen Entwicklerrechner misst,<strong><br />
b)</strong> kostenlos verfügbar,<strong><br />
c)</strong> plattformunabhängig und<strong><br />
d)</strong> einfach bedienbar ist.</p>
<p>Ein Benchmark der mit Referenzprojekten arbeitet, der gängige IDEs startet, auf denen kleine, mittelgroße und große Referenzprojekte mit der IDE erstellt werden, wobei dies noch mit parallel laufenden Middlewareservern kombiniert werden sollte.</p>
<p>Falls jemandem ein solcher Benchmark bekannt ist, wäre ich dankbar für einen Hinweis ()! Interessenten, die ein derartiges Projekt auf die Beine stellen möchten, können mich gerne ansprechen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2009/09/01/vermisst-hardware-benchmark-fuer-entwickler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der wahre Preis billiger Hardware</title>
		<link>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/</link>
		<comments>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 18:42:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Berufsleben]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=315</guid>
		<description><![CDATA[In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen. Tatsächlich ist [...]]]></description>
			<content:encoded><![CDATA[<p>In Unternehmen verdrängen Entscheider außerhalb des IT-Umfelds gerne, dass Softwareentwickler Spezialisten sind und deshalb spezielle Hardware benötigen. Wer denkt, dass &#8220;Software schreiben&#8221; ungefähr mit dem Schreiben von Textdokumenten vergleichbar ist, liegt in etwa so richtig wie jemand, der meint, Autofahren hieße, auf einem Stuhl zu sitzen und beide Füße unregelmäßig auf- und abzubewegen.</p>
<p>Tatsächlich ist das Schreiben von Quellcode nur die Spitze des Eisbergs: Auf dem Entwicklerrechner wird dieser Quellcode nicht nur zu ausführbarer Software gemacht, sondern häufig eine vollständige Simulation der Unternehmensanwendungen ausgeführt, in deren Umgebung die Software verwendet werden soll. Also Datenbanken, Webserver, E-Mail-Server etc. etc.</p>
<p>Für den Entwicklerrechner bedeutet dies, dass er um ein Vielfaches leistungsfähiger sein muss als die Rechner, die man zur Erfüllung von Büroaufgaben verwendet.</p>
<p>Im Gegensatz zu <a href="http://www.joelonsoftware.com">Joel Spolsky</a> statten viele Unternehmen ihre Softwareentwickler aber mit billiger Standardbürohardware aus. Meist muss schon die Aufrüstung des Arbeitsspeichers gesondert beantragt werden.</p>
<p>Was bedeutet das für die Entwickler? Vor allem müssen sie längere Wartezeiten in Kauf nehmen: Beim Kompilieren, beim Debuggen und Testen ihrer Anwendungen sowie beim Starten der IDE.</p>
<p>Was bedeutet das für die Unternehmen? Berechnen wir das einmal an einem <strong>Beispiel (aus meiner Praxis)</strong>:</p>
<p>Die Entwickler eines größeren Finanzdienstleisters arbeiten mit Eclipse, die Anwendung wird in der Programmiersprache Java erstellt und ist in 10 voneinander abhängige Projekte (genauer: <a href="http://maven.apache.org">Maven</a>-Module) gegliedert. Insgesamt handelt es sich um über viertausend Dateien, die kompiliert werden müssen (zuzügl. einiger Konfigurationsdateien).</p>
<p>Der durchschnittliche Rechner der Entwickler benötigt für das Erstellen eines Builds eine knappe halbe Stunde (mit Virenscanner über zweieinhalb Stunden).</p>
<p>In dieser Zeit können die Entwickler zumindest nicht programmieren, häufig nicht einmal mehr E-Mails lesen, weshalb der Arbeitsalltag so ausgerichtet ist, dass vollständige Builds zum einen vermieden und zum anderen auf den Morgen (Rechnerstart &#8211; Zeit für einen Kaffee) und die Mittagspause verlegt werden.</p>
<p>Im Team wird verteilt gearbeitet und regelmäßig integriert (d.h., Entwickler, die an Modul A arbeiten, stellen ihre Änderungen zur Verfügung, Entwickler, die an Modul B arbeiten, holen sich die aktualisierten Quelltexte von der Versionsverwaltung, was häufiger zur Folge hat, dass ein vollständiges Build erzeugt werden muss), wodurch <em>zwei vollständige Builds am Tag die Regel</em> sind.</p>
<p>Gehen wir <a href="http://www.sueddeutsche.de/jobkarriere/821/470371/text/">vorsichtig</a> von einem Durchschnittsgehalt von 60 T EUR für einen Entwickler mit mehr als sechs Jahren Berufserfahrung aus, ergeben sich folgende Kosten (Berechnungsgrundlage 223 Arbeitstage: 365 Kalendertage abzügl. Wochenenden (104 Tage), Feiertage (8 Tage) und Urlaub (30 Tage), 40-Stundenwoche):</p>
<p><strong>Stundensatz</strong><br />
60.000 / 223 / 8 = <strong>33,62 EUR </strong></p>
<p>Auf zwei Builds zu je einer knappen halben Stunde am Tag bezogen bedeutete dies im ungünstigsten Fall (die Entwickler warten einfach nur, während das Build erstellt wird und sind ansonsten nicht weiter produktiv) jährliche Kosten von</p>
<p>223 x 33,62 EUR = <strong>7.497,26 EUR</strong> <strong>pro Entwickler</strong> und</p>
<p>16 x 7.497,26 EUR = <strong>119.956,16 EUR</strong> <strong>für das</strong> aus sechzehn Personen bestehende <strong>Team</strong>.</p>
<p>Die Verdopplung des Arbeitsspeichers und der Einbau schnellerer Festplatten bewirkte, dass ein vollständiges Build in gut 15 Minuten erstellt werden konnte.</p>
<p>Vergleicht man die Kosten für die Aufrüstung pro PC (450,- EUR für die Hardware, etwa 150,- EUR Personalkosten [Einbau durch Supporttechniker, Procurement] ) sieht man sofort, dass sich selbst bei einem geringeren Produktivitätsausfall als 100 % eine Investition in bessere Hardware schnell amortisiert:</p>
<p><strong>Ersparnis rein rechnerisch</strong>:<br />
119.956,16 EUR / 2* = 59978,08 EUR abzüglich 9.600,- EUR Hardwarekosten = <strong>50.378,08 EUR</strong></p>
<p>*Halbierung der Kompilierzeit</p>
<p>(Aufs Jahr bezogen wird somit eine Aufrüstung rentabel, sobald die festgestellte Produktivitätseinbuße bei über 8% liegt, was in jedem Fall gegeben ist.).</p>
<p>Weiterhin ist interessant, dass dieselben Rechner auch allen extenen Beratern zur Verfügung gestellt wurden. Deren Stundensatz lag dabei weitaus höher, wodurch sich die Investition noch schneller amortisierte.</p>
<p>Positive Seiteneffekte des Einsatzes leistungsfähigerer Entwicklerrechner sind zudem verbessertes Time-To-Market (offensichtlich) sowie ein besseres Betriebsklima (lange Buildzeiten frustrieren Entwickler, schnelle Rechner hingegen erfreuen sie).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2009/08/30/der-wahre-preis-billiger-hardware-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: Use DB2 Timestamps with Nanoseconds in Java</title>
		<link>http://blog.gresch.de/2008/11/24/java-use-db2-timestamps-with-nanoseconds-in-java/</link>
		<comments>http://blog.gresch.de/2008/11/24/java-use-db2-timestamps-with-nanoseconds-in-java/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 20:29:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=301</guid>
		<description><![CDATA[Sometimes you need to run your unit tests using DB2 TIMESTAMP values in your test data to match specific records. You can&#8217;t just use a Date() objekt because you have to specify nanoseconds. As I couldn&#8217;t find any code snippet via Google, this might be helpful for you, dear reader. Example: You want to check [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you need to run your unit tests using DB2 TIMESTAMP values in your test data to match specific records. You can&#8217;t just use a Date() objekt because you have to specify nanoseconds.</p>
<p>As I couldn&#8217;t find any code snippet via Google, this might be helpful for you, dear reader.</p>
<p>
Example: You want to check for a timestamp of &#8217;2006-02-15 12:05:19.861555&#8242; (within quotes, as shown by one of my favourite SQL clients, <a href="http://www.squirrelsql.org">SQuirrel SQL</a>).
</p>
<pre>
DateFormat formatter = new SimpleDateFormat( &quot;yyyy-MM-dd HH:mm:ss&quot; );
Date theMilliDate&nbsp; = formatter.parse( &quot;2006-02-15 12:05:19&quot; );
Timestamp timestamp = new Timestamp(theMilliDate.getTime());
// Note the trailing zeros!
timestamp.setNanos(861555000);
// validFrom would be of type java.util.Date
myEntityObjekt.setValidFrom(timestamp);
</pre>
<p>
This &#8211; at least &#8211; does the trick, if you know of a better solution, please share it <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/11/24/java-use-db2-timestamps-with-nanoseconds-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kubuntu 8.10 &#8216;Intrepid Ibex&#8217; : Netzwerkprobleme mit statischer IP</title>
		<link>http://blog.gresch.de/2008/11/01/kubuntu-8-10-intrepid-ibex-netzwerkprobleme-mit-statischer-ip/</link>
		<comments>http://blog.gresch.de/2008/11/01/kubuntu-8-10-intrepid-ibex-netzwerkprobleme-mit-statischer-ip/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 18:39:47 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=298</guid>
		<description><![CDATA[(English users: See Kubuntu 8.10 &#8216;Intrepid Ibex&#8217; : Networking problems with static IP address) Nach einigen hartn&#228;ckigen Problemen mit dem aktuellen Lenny-Snapshot auf einem neuen Rechner hab ichs mal mit dem brandaktuellen Kubuntu 8.10 aka &#34;Intrepid Ibex&#34; versucht. Wesentlicher Grund war, das neue KDE 4.1.2 ausprobieren zu k&#246;nnen. Die Installation verlief weitgehend problemlos, vorhandene Partitionen [...]]]></description>
			<content:encoded><![CDATA[<p>(English users: See <a href="../../../../index.php?/archives/293-Kubuntu-8.10-Intrepid-Ibex-Networking-problems-with-static-IP-address.html">Kubuntu 8.10 &#8216;Intrepid Ibex&#8217; : Networking problems with static IP address</a>)</p>
<p>Nach einigen hartn&auml;ckigen Problemen mit dem aktuellen Lenny-Snapshot auf einem neuen Rechner hab ichs mal mit dem brandaktuellen Kubuntu 8.10 aka &quot;Intrepid Ibex&quot; versucht. Wesentlicher Grund war, das neue KDE 4.1.2 ausprobieren zu k&ouml;nnen.</p>
<p>
Die Installation verlief weitgehend problemlos, vorhandene Partitionen wurden zwar erkannt, mussten aber den Mountpoints neu zugeordnet werden. (K&ouml;nnte man das nicht noch besser machen und die vorhandene /etc/fstab einlesen und defaultm&auml;&szlig;ig vorschlagen [ich meine mich dunkel entsinnen zu k&ouml;nnen, dass SUSE 10.2 das so gemacht hat]?<br />
Oder wenigstens dies erm&ouml;glichen?).</p>
<p>
VGA-Mode in den Terminals ist immer noch 640&#215;480, das machen andere Distributionen schon lange, lange besser. Aber immerhin kann man die <i>/boot/grub/menu.lst</i> nachtr&auml;glich bearbeiten.</p>
<p>&nbsp;</p>
<p>Der erste Start von KDE4 dauerte eine ganze Weile, h&ouml;chstwahrscheinlich, weil viele Dateien im Home-Verzeichnis angelegt werden mussten.</p>
<p>&nbsp;</p>
<p>Nach der Anmeldung flackerte der Bildschirm etwa alle 2-3 Sekunden, was mich beunruhigte. Meine Vermutung, dass keine NVidia-Treiber installiert waren, best&auml;tigte sich, immerhin folgte sofort ein Hinweis von &quot;Jockey&quot;, der Software f&uuml;r die Verwaltung propriet&auml;rer Treiber, dies solle man &auml;ndern. </p>
<p>Indes wurde meine Auswahl, Release 177 des Nvidia-Kernels zu verwenden, nicht &uuml;bernommen.</p>
<p>&nbsp;</p>
<p>Schnell war deutlich, weshalb: Die Netzwerkverbindung war nicht hergestellt. Zwar ist ein Icon im Systray vorhanden, das einem erm&ouml;glichen soll, die Netzwerkkarte zu konfigurieren. Nur werden die dort hinterlegten Einstellungen nicht in <i>/etc/network/interfaces</i> &uuml;bernommen.</p>
<p>Also hab ich die Netzwerkkarte manuell dort eingetragen, entsprechend der Konfiguration auf dem anderen Debian-Lenny-Rechner:</p>
<pre>
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 192.168.9.19
  netmask 255.255.255.0
  network 192.168.9.0
  broadcast 192.168.9.255
  gateway 192.168.9.1
</pre>
<p>Und noch <i>/etc/resolv.conf</i> erstellt, und dort die Arcor-Nameserver hinterlegt:</p>
<pre>
nameserver 145.253.2.75
nameserver 145.253.2.11</pre>
<p>Leider half jetzt nicht einfach&#8230;</p>
<pre>
sudo su
/etc/init.d/networking stop
ifconfig eth0 down
/etc/init.d/networking start</pre>
<p>&#8230; auszuf&uuml;hren, vielmehr musste ich den Rechner neustarten. Danach war die Netzwerkverbindung hergestellt.</p>
<p>Posts in den Ubuntuforen (<a href="http://ubuntuforums.org/showthread.php?t=964192">hier</a> und <a href="http://ubuntuforums.org/showthread.php?t=965416">hier</a>) lassen vermuten, dass es sich um ein generelles Problem handelt. Das ist nicht&nbsp; benutzerfreundlich gel&ouml;st, so eine Distribution darf man durchschnittlichen Anwendern nicht in die Hand geben, es sei denn, man m&ouml;chte sie f&uuml;r Linux vergraulen.</p>
<p>&nbsp;</p>
<p>Nachdem die Netzwerkverbindung aufgebaut war, lie&szlig; sich das Grundsystem einigerma&szlig;en komfortabel einrichten. Der NVidia-Treiber war schnell installiert (&uuml;ber den &quot;Jockey&quot;-Dialog), ebenso ein aktuelles Java</p>
<pre>
sudo su
apt-get-install sun-java6-jdk
</pre>
<pre>
</pre>
<p>Danach noch Synaptic installiert, da Adept mir v&ouml;llig kryptisch erschien, die Suche nach Paketen nichts brachte und die Hilfedatei nicht verf&uuml;gbar war.</p>
<p>Jetzt l&auml;ufts, allerdings mit Einschr&auml;nkungen: Gnome-Programme erkennen das Scrollrad nicht, die Tabs im Firefox (nachinstalliert) sehen gr&auml;uslich aus. Generell scheint mir noch viel manuelle Nacharbeit n&ouml;tig zu sein. <br />
Ein Blick in <i>/etc/X11/xorg.conf</i> zeigt, dass keine spezifischen 3D-Features f&uuml;r die Graphikkarte eingetragen sind, was m&ouml;glicherweise aber anders funktioniert als bei Lenny (???).</p>
<p>Ansonsten macht KD4 einen recht guten allgemeinen Eindruck, vieles scheint mir aber auch noch &uuml;berhaupt nicht ausgereift. Die Einstellungsanwendung ist in meinen Augen weitaus schlechter als das alte KDE Control Center, hier w&uuml;nschte ich mir die fr&uuml;here Anwendung zur&uuml;ck.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/11/01/kubuntu-8-10-intrepid-ibex-netzwerkprobleme-mit-statischer-ip/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Maven: test-jar für andere Projekte erstellen.</title>
		<link>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/</link>
		<comments>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 23:21:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=290</guid>
		<description><![CDATA[Manchmal ben&#246;tigt man ein JAR, das nur Testklassen enth&#228;lt, um diese in mehreren Projekten zu verwenden. Dieses erstellt man wie folgt: 1. Test-JAR im Ausgangsprojekt erstellen In der pom.xml des Projekts, dessen Testklassen verwendet werden sollen, erstellt man ein separates JAR &#252;ber eine &#196;nderung des maven-jar-plugins: &#60;plugins&#62; &#60;!-- Weitere Plugins --&#62; &#60;plugin&#62; &#60;groupId&#62;org.apache.maven.plugins&#60;/groupId&#62; &#60;artifactId&#62;maven-jar-plugin&#60;/artifactId&#62; &#60;executions&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal ben&ouml;tigt man ein <a href="http://de.wikipedia.org/wiki/Java_Archive">JAR</a>, das nur Testklassen enth&auml;lt, um diese in mehreren Projekten zu verwenden. Dieses erstellt man wie folgt:</p>
<p><b></b></p>
<p><b><br />
1. Test-JAR im Ausgangsprojekt erstellen</b></p>
<p>In der <i>pom.xml</i> des Projekts, dessen Testklassen verwendet werden sollen, erstellt man ein separates JAR &uuml;ber eine &Auml;nderung des maven-jar-plugins:</p>
<pre>
&lt;plugins&gt;
</pre>
<pre><span style="color: rgb(51, 153, 102);">&lt;!-- Weitere Plugins --&gt;  </span>  </pre>
<pre>
  &lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
      &lt;execution&gt;
        &lt;goals&gt;
          &lt;goal&gt;test-jar&lt;/goal&gt;
        &lt;/goals&gt;
      &lt;/execution&gt;
    &lt;/executions&gt;
  &lt;/plugin&gt;
&lt;/plugins&gt;
</pre>
<p>&nbsp;</p>
<p><b></b></p>
<p><b>2. Test-JAR verwenden</b></p>
<p>In der <i>pom.xml</i> eines Projekts, welches das JAR mit den Testklassen verwenden soll, tr&auml;gt man eine Dependency mit einem <i>classifier</i> ein:</p>
<pre>
&lt;dependency&gt;
  &lt;groupId&gt;de.buergel.bas&lt;/groupId&gt;
  &lt;artifactId&gt;bas-spring.server&lt;/artifactId&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;scope&gt;test&lt;/scope&gt;
  &lt;classifier&gt;tests&lt;/classifier&gt;
&lt;/dependency&gt;
</pre>
<p>Siehe dazu den <a href="http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html">ausf&uuml;hrlichen Blogeintrag von Walter Cedric (Englisch)</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/10/28/maven-test-jar-fuer-andere-projekte-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>berlin.jar 2008</title>
		<link>http://blog.gresch.de/2008/09/13/berlin-jar-2008/</link>
		<comments>http://blog.gresch.de/2008/09/13/berlin-jar-2008/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 12:26:22 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=291</guid>
		<description><![CDATA[Ralph Bergmann, Student an der FHTW Berlin, hat mit viel Energie und Elan die Java User Group Berlin-Brandenburg (re-)vitalisiert. H&#246;hepunkt seiner Aktivit&#228;ten ist die erste Berliner Fachkonferenz um die Programmiersprache Java, die berlin.jar. &#160; Im Vergleich zu den gro&#223;en kommerziellen Java-Konferenzen (in Deutschland die JAX, US-international die Java One) nimmt sich die berlin.jar bescheiden aus: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.xing.com/profile/Ralph_Bergmann3">Ralph Bergmann</a>, Student an der <a href="http://www.fhtw-berlin.de/">FHTW Berlin</a>, hat mit viel Energie und Elan die <a href="http://www.jug-bb.de/">Java User Group Berlin-Brandenburg</a> (re-)vitalisiert. H&ouml;hepunkt seiner Aktivit&auml;ten ist die erste Berliner Fachkonferenz um die Programmiersprache Java, die <a href="http://berlin.jar.jug-bb.de/">berlin.jar</a>.</p>
<p>&nbsp;</p>
<p>Im Vergleich zu den gro&szlig;en kommerziellen Java-Konferenzen (in Deutschland die <a href="http://it-republik.de/jaxenter/">JAX</a>, US-international die <a href="http://java.sun.com/javaone/sf/">Java One</a>) nimmt sich die <i>berlin.jar</i> bescheiden aus:</p>
<p>&nbsp;</p>
<p>Alle Besucher (zumindest, die mit denen ich sprach) wurden von Ralph Bergmann pers&ouml;nlich begr&uuml;&szlig;t.</p>
<p>Nett.</p>
<p>Jedenfalls etwas ganz anderes als die spektakul&auml;ren B&uuml;hnenbegr&uuml;&szlig;ungen von <a href="https://www.xing.com/profile/Sebastian_Meyen">Sebastian Meyen</a>, der ansonsten auf der JAX stets recht arrogant/gestresst agiert, wenn man sich nicht durch Anzug oder Speaker-T-Shirt ausweisen kann.</p>
<p>&nbsp;</p>
<p>An zwei Tagen werden Samstags vier Vortr&auml;ge in f&uuml;nf Tracks angeboten, am Sonntag drei. Daneben k&ouml;nnen Samstags noch Workshops besucht werden (v.a. Eclipse RCP und Tomcat 6).</p>
<p>&nbsp;</p>
<p>Die Konferenz findet &#8211; naheliegend &#8211; in den R&auml;umen der FHTW Berlin in der <a href="http://maps.google.com/maps?ie=UTF-8&amp;um=1&amp;cid=0,0,15165330293285825259&amp;fb=1&amp;dq=fhtw+berlin&amp;daddr=Treskowallee+8,+10318+Berlin,+Germany&amp;geocode=6644372185939614511,52.493827,13.525643&amp;ll=52.493827,13.525643&amp;iwstate1=dir:to&amp;iwloc=A&amp;f=d&amp;sa=X&amp;oi=local_result&amp;resnum=1&amp;ct=directions-to">Treskowallee</a> statt. Menschen von der User Group und offenbar auch Studenten (?) unterst&uuml;tzen die Veranstaltung, ein einem Gang sind drei St&auml;nde aufgebaut.</p>
<p>Essen wird an Grill und Suppenk&uuml;che ausgegeben, leider alles nicht ganz mit den Veranstaltungszeiten koordiniert. F&uuml;r die erste Veranstaltung dieser Art, zudem nichtkommerziell, ist das akzeptabel.</p>
<p>&nbsp;</p>
<p>Was macht aber eine Konferenz wertvoll? <i>Nat&uuml;rlich die mobile Massage in der Relax-Lounge!</i> M&ouml;gen manche sagen. Andere finden eher die Qualit&auml;t der Vortr&auml;ge entscheidend. Hier braucht sich die <i>berlin.jar</i> nicht zu verstecken: Von <a href="https://www.xing.com/profile/Oliver_Boehm2">Oliver B&ouml;hm</a> &uuml;ber <a href="https://www.xing.com/profile/Peter_Rossbach">Peter Ro&szlig;bach</a> (!Tomcat Workshop!) zu <a href="https://www.xing.com/profile/Eberhard_Wolff">Eberhard Wolff</a> sind viele Gr&ouml;&szlig;en der deutschen Java-Community vertreten. Die Qualit&auml;t der von mir besuchten Vortr&auml;ge braucht sich zumindest hinter denen der Vortr&auml;ge auf der JAX nicht zu verstecken.</p>
<p>Alles in allem eine lohnende Veranstaltung, f&uuml;r den l&auml;cherlich niedrigen Eintrittspreis (15,- EUR im Vorverkauf, Verk&ouml;stigung inklusive) bekommt im Vergleich zu den kommerziellen Veranstaltungen ein Vielfaches als Gegenwert.</p>
<p>&nbsp;</p>
<p>Dieses Angebot nutzten am ersten Tag nach meiner Einsch&auml;tzung (Mittagessen und &quot;Abendparty&quot;) mehr als 100, aber sicherlich weniger als 250 Teilnehmer, davon etwa 3% Frauen (leider nicht eine einzige Vortragende, sehr schade, dass <a href="https://www.xing.com/profile/Angelika_Langer">Angelika Langer</a> nicht anwesend war).</p>
<p>&nbsp;</p>
<p>Hochachtung verdient Ralph Bergmann und seinen Helfern f&uuml;r den Einsatz, der weitaus mehr von einer Begeisterung f&uuml;r die Technologie spricht als von reinem Profilierungsdrang. Dazu wurde zuviel gel&auml;chelt.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/09/13/berlin-jar-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social DNA</title>
		<link>http://blog.gresch.de/2008/09/04/social-dna/</link>
		<comments>http://blog.gresch.de/2008/09/04/social-dna/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 20:45:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[berlin]]></category>
		<category><![CDATA[bildung]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Ideen]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Literatur]]></category>
		<category><![CDATA[Politik]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=286</guid>
		<description><![CDATA[Letztens eine Nachricht über XING erhalten. Der Absender zeigte sich erfreut über meine dort hinterlegten Interessen, als da wären: Softwareentwicklung mit agilen Methoden, Java EE (JEE), J2EE, Java2EE, Java, Ruby, Linux, JSF, Spring, Hibernate, SCALA, JBoss Seam, Maven, Apache Software Foundation, Eclipse, Eclipse RCP, NetBeans, Rules Engines, Middleware, SOA, BPM, ITIL, TOGAF, Zachman, Lean Management, [...]]]></description>
			<content:encoded><![CDATA[<p>Letztens eine Nachricht über XING erhalten. Der Absender zeigte sich erfreut über meine dort hinterlegten Interessen, als da wären:</p>
<p><em>Softwareentwicklung mit agilen Methoden, Java EE (JEE), J2EE, Java2EE, Java, Ruby, Linux, JSF, Spring, Hibernate, SCALA, JBoss Seam, Maven, Apache Software Foundation, Eclipse, Eclipse RCP, NetBeans, Rules Engines, Middleware, SOA, BPM, ITIL, TOGAF, Zachman, Lean Management, IT-Strategie, Neue Musik, Klassische Musik, Musizieren, Klavier, Klarinette, Literatur (speziell Lyrik), Literatur, Bildende Künste, Kunst, Kulturgeschichte, Kunstgeschichte, Berlin, London, Venedig, Paris, Florenz, Rechtsinformatik, Italien, Großbritannien, English Literature, English Verse. Werke u.a. folgender Personen: Fowler, Tiepolo, Eisenstein, Braudel, Schnitzler, Ligeti, Knuth, Pushkin, Satie, Bellini, Monteverdi, Adams, Veronese, Shelley, Brecht, Dowson, Brahms, Montaigne, Schumann, Kubrick, Rameau, Bartok, Huizinga, Mahler, v. Bingen, Lenau, Frisch, Lenz, Olbrisch, Brunelleschi, Lichtenberg, Turner, Günther, Trakl, Scelsi, Redon, Streeruwitz, Flaubert, Friedell, Naso, Wilde, Bernhard, Erasmus, Gernhardt, Klimt, Palladio, Rückert, Härtling, Flaccus, v.d. Weyden, Balthus, Reynaldo Hahn, Caroll, Borodin, Verlaine, Mörike, Schobert, Villon, Greenaway, Heym, Thelen, Watteau, Abschatz, Jelinek, Bach (4x), Huysmans, Schiele, Ravel, Walser, V. Klemperer, Augustinus, Kling, Mann (2x), Gombrich, Stroustrup, Auster, Brüder Limburg, Franck, Purcell, Fellini, Truffaut, Hofmannsthal, Pollock, Schubert, Bresdins, Ariès/Duby, Bulgakow, Lenz, Proust, Neruda, de Beauvoir, Brouwer, Fragonard, Degas, Kurtag, Zelenka, Pepys, Rimbaud, Giorgione, Bachmann, Vian, Wilder, Wilmot/Rochester, Brinkmann, Callot, Opitz, Couperin, Ockeghem, Giacometti, Celan, Klinger, Catull, Sterne. Laufen, Laufsport, Joggen, Marathon.</em></p>
<p><em> </em><em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p>Diese hatte ich schon vor längerer Zeit einmal zusammengekramt, um einer <a href="http://blog.gresch.de/2005/05/05/computersprache/">schmerzhaft</a> Geliebten zu erkennen zu geben, ich wäre der richtige für sie, allein meiner Interessen wegen. (Magisches Denken, Zaubersprüche der Kindheit, nur transzendiert.).</p>
<p>Tatsächlich erkannte ich nach einer Weile, dass diese Frau sich weder für mich noch für wenigstens 10% der aufgeführten &#8220;Inhalte&#8221; hinter den Namen interessierte.</p>
<p>Wär mir letzteres wiederum von Anfang an bekannt gewesen, hätte ich gar nicht damit begonnen, ihr nichtvorhandene Gemeinsamkeiten zu unterstellen (Gegengeschlechtlichkeit ist ja wirklich keine Gemeinsamkeit.).</p>
<p>Und auch kein ernsthaftes Interesse für sie entwickelt.</p>
<p>Das wirft bei mir die Frage auf, ob es nicht irgendeinen Social-Web-Dienst gibt, bei dem man solche Informationen nicht hinterlegen kann, um eine &#8220;Interest Map&#8221; zu erstellen, die man dann mit der anderer Nutzer vergleichen kann. Auf diese Weise könnte man eine <a href="/index.php?/archives/212-Frisch-Lektuere-Rueckzug-aufs-Selbst.html">Sozial-DNA</a> erstellen, und Menschen finden, die ähnliche Interessen haben / Ziele verfolgen.</p>
<p>Am besten noch mobil die Sozial-DNA gegeneinander abgleichen können. Und das noch für berufliche Profile und private. Und eine &#8220;Heat Map&#8221;, die anzeigt, wo sich im Raum die Leute befinden, mit denen man zumindest die Interessen teilt. Etc. Etc. (z.B. mit sozioökonomischen und politischen Kriterien).</p>
<p>Datenschutz wäre da ein noch sensibleres Thema als bei den gängigen &#8220;Social Tools&#8221;. Mir erschiene <em>so etwas</em> jedenfalls sinnvoller als die ganzen &#8220;Legacy DNA&#8221; Startups wie <a href="http://www.navigenics.com/">Navigenics </a>etc., die einem alles und nichts zu der eigenen DNA mitteilen. Die Möglichkeit, die &#8220;Social DNA&#8221; (die keinen Status ausdrückt, sondern mikroindividuelle Differenzierung) verändern zu können, ist hier entscheidend: Jeder Mensch hat ja die Möglichkeit, sein Profil zu verändern. Ggf. sollte man sogar von vornherein angeben können, in welche Richtung man sich entwickeln möchte, was man nicht kennt, aber kennen möchte etc.</p>
<p>Konkreter sollte das ganze so gestaltet sein, dass für den Grunddatenbestand eine Anzahl von etwa 100 unterschiedlichen &#8220;Leads&#8221; (Schlüsselpersonen) ihre inhaltlichen, kulturellen, religiösen, sportlichen, politischen Interessen und Kenntnisse, Ziele und Vorlieben mitteilen, am besten über eine Liste von Stichwörtern wie oben dargestellt.</p>
<p>Diese wird dann geparst, bestehenden Schlüsselobjekten und semantisch zugeordnet. Danach erfolgt dann eine Auswertung / Neuindexierung der ermittelten Objekte durch die Nutzer. Sind die Schlüsselbobjekte zugeordnet, werden sie bewertet: Bei &#8220;Werken&#8221;, Künstlerinnen, Musikstücken (kristalline Intelligenz) vor allem nach Vorlieben (mag ich / mag nicht / mir unbekannt), bei konzeptionellen Schlüsselobjekten (fluider Intelligenz) auch nach Fähigkeit (verstehe/kann ich, verstehe/kann ich nicht / mir unbekannt).</p>
<p>Dieser Grunddatenbestand kann dann von anderen übernommen und weiter angepasst werden.</p>
<p>Das ganze mit der Möglichkeit, sich mit anderen Nutzern &#8220;zu verbinden&#8221;, von ihnen Objekte zu übernehmen und für sich selbst zu bewerten, zu suchen und sich finden zu lassen und sich eine Timeline anzeigen zu lassen, aus der man später ermitteln kann, wie sich die eigene Social DNA verändert hat.</p>
<p>Falls jemand einen solchen Dienst kennt, wär ich für einen Hinweis sehr dankbar <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/09/04/social-dna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux und AIR</title>
		<link>http://blog.gresch.de/2008/08/10/linux-und-air/</link>
		<comments>http://blog.gresch.de/2008/08/10/linux-und-air/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 21:46:27 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=276</guid>
		<description><![CDATA[Hm, wenn das wirklich stimmen sollte, hat Adobe noch schlechtere Karten (bei mir). Wie auch Marten wusste, ist zwar Ende März eine Linux-Alpha Version erschienen, aber nur für x86er-Systeme. Kein Wunder, dass sich Sun wegen JavaFX noch freut. Wäre nur schön, wenn das a) produktionsreif und b) auch mit Eclipse-Unterstützung erschiene (sonst machts Genuitec und [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Kein AIR auf Linux amd64" src="http://blog.gresch.de/wp-content/uploads/linux/air-linux-amd64.png" alt="" width="426" height="370" /></p>
<p>Hm, wenn das wirklich stimmen sollte, hat Adobe noch schlechtere Karten (bei mir). Wie auch <a href="http://blog.arten.be/">Marten</a> wusste, ist zwar Ende März eine <a href="http://labs.adobe.com/technologies/air/">Linux-Alpha Version</a> erschienen, <a href="http://labs.adobe.com/wiki/index.php/AIR_for_Linux:Release_Notes#System_Requirements">aber nur für x86er-Systeme</a>. Kein Wunder, dass sich Sun wegen JavaFX noch freut. Wäre nur schön, wenn das a) produktionsreif und b) auch mit Eclipse-Unterstützung erschiene (sonst machts Genuitec und bindet den noch nicht vorhandenen visuellen Editor wie Matisse in MyEclipse ein).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/08/10/linux-und-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven-Snippets</title>
		<link>http://blog.gresch.de/2008/07/12/maven-snippets/</link>
		<comments>http://blog.gresch.de/2008/07/12/maven-snippets/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 16:27:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=270</guid>
		<description><![CDATA[Hier einige Kniffe f&#252;r Maven, die h&#228;ufiger angefragt (oder von mir selbst ben&#246;tigt) werden. Siehe auch die Maven-FAQ (die Code-Snippets lassen leider immer noch auf sich warten) und die FAQ vom Codehaus-Wiki. &#160; Ein Tip: Installiert man das mittlerweile stark ausgereifte m2 Maven-Plugin von Codehaus, findet man weitere sehr n&#252;tzliche Hinweise in der Eclipse-Hilfe, die [...]]]></description>
			<content:encoded><![CDATA[<p>Hier einige Kniffe f&uuml;r Maven, die h&auml;ufiger angefragt (oder von mir selbst ben&ouml;tigt) werden. Siehe auch die <a href="http://maven.apache.org/general.html">Maven-FAQ</a> (die Code-Snippets lassen leider immer noch auf sich warten) und die FAQ vom <a href="http://docs.codehaus.org/display/MAVENUSER/FAQs-1">Codehaus-Wiki</a>.</p>
<p>&nbsp;</p>
<p>
Ein Tip: Installiert man das mittlerweile stark ausgereifte <a href="http://m2eclipse.codehaus.org/">m2 Maven-Plugin von Codehaus</a>, findet man weitere sehr n&uuml;tzliche Hinweise in der Eclipse-Hilfe, die den gesamten &quot;<a href="http://www.sonatype.com/book/reference/public-book.html">Definite Guide</a>&quot; integriert, mit Suchfunktion.</p>
<p>&nbsp;</p>
<p>Die letzten Versionen des Plugins w&auml;ren eigentlich einen eigenen Eintrag wert: Es kommt jetzt mit einem schon ansprechenden POM-Editor daher, der an die Editoren f&uuml;r die Eclipse-RCP-Entwicklung erinnert (etc. etc. etc., WTP-Unterst&uuml;tzung ist im <a href="http://docs.codehaus.org/display/M2ECLIPSE/WTP+mini+howto">Codehaus-Wiki</a> beschrieben), aber Achtung: Die Eclipse-Update-URL hat sich ge&auml;ndert zu <b>http://m2eclipse.sonatype.org/update/</b> resp. <b>http://m2eclipse.sonatype.org/update-dev</b> !<b></b></p>
<p><b></p>
<p>Test umgehen</b></p>
<p>An der Kommandozeile:</p>
<p><div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-Dmaven.test.skip=true</div></div>
</p>
<p>&nbsp;</p>
<p>In der <i>pom.xml</i>:</p>
<pre>
&lt;plugins&gt;<span style="color: rgb(51, 153, 102);">     </span>
<span style="color: rgb(51, 153, 102);">&lt;!-- ...weitere Plugins... --&gt;</span>
  &lt;plugin&gt;
    &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
    &lt;configuration&gt;
    &lt;skip&gt;true&lt;/skip&gt;
    &lt;/configuration&gt;
  &lt;/plugin&gt;
&lt;/plugins&gt;
</pre>
<p><b></b><b><br />
Fremdes Archiv in lokales Repository deployen</b></p>
<p>Kommt insb. vor, wenn man kommerzielle Archive, die nicht &ouml;ffentlich verf&uuml;gbar sind, in sein lokales Repository &uuml;bernehmen m&ouml;chte. Oder irgendwelche obskuren Legacy-jars, die mit Ant gebaut werden <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )))</p>
<p>Man ben&ouml;tigt eine rudiment&auml;re pom-Datei, Teil-Struktur ggf. von <a href="http://www.mvnrepository.com/">http://www.mvnrepository.com/</a> holen.</p>
<p>Hier ein POM f&uuml;rs Substance L&amp;F:</p>
<p><tt>&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br />
&nbsp; xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;<br />
&nbsp; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;<br />
&nbsp; &lt;groupId&gt;org.jvnet&lt;/groupId&gt;<br />
&nbsp; &lt;artifactId&gt;substance&lt;/artifactId&gt;<br />
&nbsp; &lt;version&gt;4.3.11&lt;/version&gt;<br />
&nbsp; &lt;packaging&gt;jar&lt;/packaging&gt;<br />
&nbsp; &lt;name&gt;Substance Look and Feel&lt;/name&gt;<br />
&nbsp; &lt;url&gt;https://substance.dev.java.net/&lt;/url&gt;<br />
&nbsp; &lt;description&gt;Private deplomyent, not from Sun!</tt><tt>&lt;/description&gt;</tt><br />
<tt>&nbsp; &lt;dependencies /&gt;<br />
&lt;/project&gt;</tt></p>
<p>Jetzt an der Kommandozeile in das Verzeichnis wechseln, in dem sich jar und Dummy-POM-Datei befinden und deployen (diesmal f&uuml;rs jnlp-Servlet):</p>
<pre>
mvn deploy:deploy-file -Dfile=jnlp-servlet-1.0.jar -DpomFile=openswing-jnlp-servlet.pom -DrepositoryId=release -Durl=http://10.45.7.7:7575/archiva/repository/internal -e
</pre>
<p><b><br />
Wirksame Konfiguration anzeigen</b></p>
<p><tt>mvn help:<em>effective</em>-pom</tt> (Siehe die n&uuml;tzlichen weiteren Features <a href="http://maven.apache.org/plugins/maven-help-plugin/usage.html">hier</a>).</p>
<p><b><br />
War erstellen</b></p>
<p>In <i>pom.xml</i> (Unterelement von <i>&lt;project&gt;</i>):</p>
<p><tt>&lt;packaging&gt;war&lt;/packaging&gt;</tt></p>
<p>Ggf. das Maven-War-Plugin verwenden und &lt;exclusion&gt; f&uuml;r JEE-Bibliotheken.</p>
<p>Zum Bauen</p>
<p><tt>mvn package</tt></p>
<p><b><br />
Build ausf&uuml;hren (sic)<br />
</b></p>
<p><tt>mvn compile</tt> / <tt>mvn package</tt> </p>
<p>(Und den &quot;<a href="http://www.sonatype.com/book/reference/public-book.html">Definite Guide</a>&quot; lesen, um das Konzept zu verstehen &lt;kicher&gt;).</p>
<p><b><br />
JDK festlegen (zum Kopieren)<br />
</b></p>
<pre>
&lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.0.2&lt;/version&gt;
    &lt;configuration&gt;
        &lt;source&gt;1.6&lt;/source&gt;<span style="color: rgb(51, 153, 102);">&lt;!-- oder 1.4 oder 1.5 etc.--&gt;</span>
        &lt;target&gt;1.6&lt;/target&gt;<span style="color: rgb(51, 153, 102);">&lt;!-- oder 1.4 oder 1.5 etc.--&gt;</span>
    &lt;/configuration&gt;
&lt;/plugin&gt;
</pre>
<p>(Fortsetzung folgt&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/07/12/maven-snippets/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Sehr ausführliche JVM-Optionsliste</title>
		<link>http://blog.gresch.de/2008/02/19/sehr-ausfuehrliche-jvm-optionsliste/</link>
		<comments>http://blog.gresch.de/2008/02/19/sehr-ausfuehrliche-jvm-optionsliste/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 21:48:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=233</guid>
		<description><![CDATA[Endlich eine brauchbare, ausf&#252;hrliche und nach Versionen vergleichende Referenz f&#252;r die JVM-Optionen gefunden: http://blogs.sun.com/watt/resource/jvm-options-list.html Wenn&#160;sie&#160;sich&#160;prim&#228;r auch auf Solaris/SPARC beziehen mag, ist sie mehr als n&#252;tzlich. &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Endlich eine brauchbare, ausf&uuml;hrliche und nach Versionen vergleichende Referenz f&uuml;r die JVM-Optionen gefunden:</p>
<p><a HREF="http://blogs.sun.com/watt/resource/jvm-options-list.html">http://blogs.sun.com/watt/resource/jvm-options-list.html</a></p>
<p>Wenn&nbsp;sie&nbsp;sich&nbsp;prim&auml;r auch auf Solaris/SPARC beziehen mag, ist sie mehr als n&uuml;tzlich.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/02/19/sehr-ausfuehrliche-jvm-optionsliste/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ant: Umgebungsvariablen an der Kommandozeile (mit &#8220;-D&#8221;) überschreiben</title>
		<link>http://blog.gresch.de/2008/01/16/ant-umgebungsvariablen-an-der-kommandozeile-mit-d-ueberschreiben/</link>
		<comments>http://blog.gresch.de/2008/01/16/ant-umgebungsvariablen-an-der-kommandozeile-mit-d-ueberschreiben/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 23:16:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Programmiernotizen]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=230</guid>
		<description><![CDATA[Wird immer mal wieder angefragt: Gesetzt den Fall, man m&#246;chte in einem Ant-Script auf eine Umgebungsvariable zugreifen, was man normalerweise so macht: &#60;property environment=&#34;env&#34; /&#62; &#60;property name=&#34;dist-conf&#34; location=&#34;${env.DIST_PATH}/conf&#34; /&#62; Dann kann man diese Variable an der Kommandozeile wie folgt &#252;berschreiben: ant -Denv.DIST_PATH=/path/to/the/dir Um einmal gesetzte Variablen zu &#252;berschreiben, ist der Ant-Contrib-Variable-Task (siehe http://ant-contrib.sourceforge.net/) die L&#246;sung [...]]]></description>
			<content:encoded><![CDATA[<p>Wird immer mal wieder angefragt: Gesetzt den Fall, man m&ouml;chte in einem Ant-Script auf eine Umgebungsvariable zugreifen, was man normalerweise so macht:</p>
<pre>&lt;property environment=&quot;env&quot; /&gt; &lt;property name=&quot;dist-conf&quot; location=&quot;${env.DIST_PATH}/conf&quot; /&gt;</pre>
<p>Dann kann man diese Variable an der Kommandozeile wie folgt &uuml;berschreiben:</p>
<pre>ant -Denv.DIST_PATH=/path/to/the/dir</pre>
<p>Um einmal gesetzte Variablen zu &uuml;berschreiben, ist der Ant-Contrib-Variable-Task (siehe <a href="http://ant-contrib.sourceforge.net/">http://ant-contrib.sourceforge.net/</a>) die L&ouml;sung der Wahl.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2008/01/16/ant-umgebungsvariablen-an-der-kommandozeile-mit-d-ueberschreiben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat (5/6) &#8211; Aelfred Fehlermeldung beim Start aus MyEclipse heraus</title>
		<link>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/</link>
		<comments>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 04:32:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[webapp]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=217</guid>
		<description><![CDATA[Hier half, &#252;ber Windows, Preferences, MyEclipse, Application Servers, [TC-#] folgendes hinzuzuf&#252;gen: &#160; -Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl-Dorg.xml.parsers.sax.parser=org.apache.xerces.parsers.SAXParser&#160; Siehe dazu auch nur Xerces als Default-Parser setzen.&#160; &#160; &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Hier half, &uuml;ber <em>Windows</em>, <em>Preferences</em>, <em>MyEclipse</em>, <em>Application Servers</em>, [TC-#] folgendes hinzuzuf&uuml;gen:</p>
<pre>&nbsp;</pre>
<pre>-Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl-Dorg.xml.parsers.sax.parser=org.apache.xerces.parsers.SAXParser&nbsp;</pre>
<p>Siehe dazu auch nur <a href="index.php?/archives/184-Xerces-als-Default-Parser-setzen.html">Xerces als Default-Parser setzen</a>.&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/10/17/tomcat-56-aelfred-fehlermeldung-beim-start-aus-myeclipse-heraus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(M)eine Singleton-Lösung</title>
		<link>http://blog.gresch.de/2007/07/26/meine-singleton-loesung/</link>
		<comments>http://blog.gresch.de/2007/07/26/meine-singleton-loesung/#comments</comments>
		<pubDate>Thu, 26 Jul 2007 19:23:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=202</guid>
		<description><![CDATA[Auf Googles Singleton-Detector gesto&#223;en und mir noch einmal die Begr&#252;ndungen angeschaut, weshalb Singletons b&#246;se sind. Das ist alles nicht wirklich neu, wiewohl aus meiner Sicht ein Singleton durchaus Sinn machen kann (gilt die Kritik nicht eigentlich jeder statischen Factory-Methode?). Wie auch immer, f&#252;r mich ist guter Stil, zu begr&#252;nden, weshalb man ein Singleton verwendet. Ebenso, [...]]]></description>
			<content:encoded><![CDATA[<p>Auf Googles <a href="http://code.google.com/p/google-singleton-detector/" target="_blank">Singleton-Detector</a> gesto&szlig;en und mir noch einmal die Begr&uuml;ndungen angeschaut, <a href="http://c2.com/cgi/wiki?SingletonsAreEvil" target="_blank">weshalb Singletons b&ouml;se sind</a>. Das ist alles nicht wirklich neu, wiewohl aus meiner Sicht ein Singleton durchaus Sinn machen kann (gilt die Kritik nicht eigentlich jeder statischen Factory-Methode?).</p>
<p>Wie auch immer, f&uuml;r mich ist guter Stil, zu begr&uuml;nden, weshalb man ein Singleton verwendet. Ebenso, wie man manchmal explizit nichts in einem Code-Block ausf&uuml;hren m&ouml;chte:</p>
<pre>if(this){&nbsp; do();}else if (scary){&nbsp; <font color="#008000"><strong>// empty on purpose!</strong></font>}else{&nbsp; doOther();}</pre>
<p>(da g&auml;bs sicherlich bessere Beispiele, ein besseres w&auml;re der leere private Konstruktor von nicht instantiierbaren Klassen),&nbsp; sollte man im JavaDoc eines Singletons erw&auml;hnen, <strong>dass </strong>es sich um eines handelt, <strong>weshalb</strong> es als Singleton verwendet wird und ggf. wie es <strong>getestet</strong> werden kann resp. welche Besonderheiten f&uuml;r das Testen von Klassen anfallen, die das Singleton verwenden.</p>
<p>Das geht h&ouml;chstwahrscheinlich dar&uuml;ber hinaus, was z.B. in Spring mit den DAO-Klassen erfolgt (sollen die alle schlecht sein?), ist aber gerade f&uuml;r die Arbeit im Team n&uuml;tzlich.&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/07/26/meine-singleton-loesung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JOptionPane mit JGoodies</title>
		<link>http://blog.gresch.de/2007/07/11/joptionpane-mit-jgoodies/</link>
		<comments>http://blog.gresch.de/2007/07/11/joptionpane-mit-jgoodies/#comments</comments>
		<pubDate>Wed, 11 Jul 2007 21:18:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=198</guid>
		<description><![CDATA[Wenn das Ekel LAF angezeigt wird: &#160;&#160;&#160; UIManager.put(&#34;ClassLoader&#34;, LookUtils.class.getClassLoader());&#160;&#160;&#160; UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); &#160;]]></description>
			<content:encoded><![CDATA[<p>Wenn das Ekel LAF angezeigt wird:</p>
<pre>&nbsp;&nbsp;&nbsp; UIManager.put(&quot;ClassLoader&quot;, LookUtils.class.getClassLoader());&nbsp;&nbsp;&nbsp; UIManager.setLookAndFeel(new Plastic3DLookAndFeel()); </pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/07/11/joptionpane-mit-jgoodies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auf zum Karneval: Maskieren für (Ant) replaceregexpr</title>
		<link>http://blog.gresch.de/2007/07/09/auf-zum-karneval-maskieren-fuer-ant-replaceregexpr/</link>
		<comments>http://blog.gresch.de/2007/07/09/auf-zum-karneval-maskieren-fuer-ant-replaceregexpr/#comments</comments>
		<pubDate>Mon, 09 Jul 2007 06:37:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=197</guid>
		<description><![CDATA[Dieser Tasks hats wegen der doch sehr d&#252;rftigen Dokumentation in sich, zumal wegen der RegExpr-Syntax f&#252;r Java. Backslash maskieren &#160; &#60;replaceregexp&#160;&#160;&#160; match=&#34;a:\\&#34;&#160;&#160;&#160; replace=&#34;b:\\\\&#34;&#160;&#160;&#160; flags=&#34;gi&#34;&#62;&#160;&#160;&#160; &#60;fileset dir=&#34;${build}${/}xml&#34; id=&#34;XmlStuff&#34;&#62;&#160;&#160;&#160;&#160;&#160; &#60;include name=&#34;takeme*.xml&#34;/&#62;&#160;&#160;&#160; &#60;/fileset&#62;&#160; &#60;/replaceregexp&#62;&#60;/target&#62; Punkt maskieren (z.B. f&#252;r Paktebezeichner) &#60;replaceregexp match=&#34;com\.old\.style\.business&#34; replace=&#34;org\.new\.style\.business&#34; flags=&#34;gi&#34;&#62; &#60;fileset dir=&#34;${the.path}&#34; id=&#34;pathy&#34;&#62; &#60;include name=&#34;Groov*y.java&#34;/&#62; &#60;/fileset&#62;&#60;/replaceregexp&#62; &#160;Das Flag &#34;gi&#34; bedeutet: global (alle Vorkommen der gefundenen [...]]]></description>
			<content:encoded><![CDATA[<p>Dieser Tasks hats wegen der doch sehr d&uuml;rftigen Dokumentation in sich, zumal wegen der RegExpr-Syntax f&uuml;r Java.</p>
<p><strong>Backslash maskieren</strong> </p>
<pre>&nbsp; &lt;replaceregexp&nbsp;&nbsp;&nbsp; match=&quot;a:\\&quot;&nbsp;&nbsp;&nbsp; replace=&quot;b:\\\\&quot;&nbsp;&nbsp;&nbsp; flags=&quot;gi&quot;&gt;&nbsp;&nbsp;&nbsp; &lt;fileset dir=&quot;${build}${/}xml&quot; id=&quot;XmlStuff&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include name=&quot;takeme*.xml&quot;/&gt;&nbsp;&nbsp;&nbsp; &lt;/fileset&gt;&nbsp; &lt;/replaceregexp&gt;&lt;/target&gt; </pre>
<p><strong>Punkt maskieren</strong> (z.B. f&uuml;r Paktebezeichner) </p>
<pre>&lt;replaceregexp  match=&quot;com\.old\.style\.business&quot;  replace=&quot;org\.new\.style\.business&quot;  flags=&quot;gi&quot;&gt;  &lt;fileset dir=&quot;${the.path}&quot; id=&quot;pathy&quot;&gt;    &lt;include name=&quot;Groov*y.java&quot;/&gt;  &lt;/fileset&gt;&lt;/replaceregexp&gt;</pre>
<p>&nbsp;Das Flag &quot;gi&quot; bedeutet: <strong>g</strong>lobal (alle Vorkommen der gefundenen Zeichenfolge), [case-] <strong>i</strong>nsensitive (Gro&szlig;-/Kleinschreibung nicht beachten). </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/07/09/auf-zum-karneval-maskieren-fuer-ant-replaceregexpr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Idee: Dokumentations-Plugin f. Eclipse mit Codeausschnitten</title>
		<link>http://blog.gresch.de/2007/06/28/idee-dokumentations-plugin-f-eclipse-mit-codeausschnitten/</link>
		<comments>http://blog.gresch.de/2007/06/28/idee-dokumentations-plugin-f-eclipse-mit-codeausschnitten/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 18:52:30 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Vermisstes]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Ideen]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=194</guid>
		<description><![CDATA[Ein Syntaxfehler in Codebeispielen f&#252;r Fachliteratur k&#246;nnte nicht erfolgen, wenn man die Code-Beispiele immer direkt aus der IDE n&#228;hme; diese zeigte sofort den Fehler an. Daher w&#228;re ein Eclipse-Plugin, etwa f&#252;r DocBook-Dokumentation n&#252;tzlich, wo man f&#252;r &#60;programlisting&#62;-Tags auf einen Code-Ausschnitt verweisen k&#246;nnte, den man direkt aus der &#34;lebenden Klasse&#34; nehmen k&#246;nnte. &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Ein Syntaxfehler in Codebeispielen f&uuml;r Fachliteratur k&ouml;nnte nicht erfolgen, wenn man die Code-Beispiele immer direkt aus der IDE n&auml;hme; diese zeigte sofort den Fehler an. </p>
<p>Daher w&auml;re ein Eclipse-Plugin, etwa f&uuml;r DocBook-Dokumentation n&uuml;tzlich, wo man f&uuml;r <em>&lt;programlisting&gt;</em>-Tags auf einen Code-Ausschnitt verweisen k&ouml;nnte, den man direkt aus der &quot;lebenden Klasse&quot; <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  nehmen k&ouml;nnte.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/06/28/idee-dokumentations-plugin-f-eclipse-mit-codeausschnitten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xerces als Default-Parser setzen</title>
		<link>http://blog.gresch.de/2007/05/15/xerces-als-default-parser-setzen/</link>
		<comments>http://blog.gresch.de/2007/05/15/xerces-als-default-parser-setzen/#comments</comments>
		<pubDate>Tue, 15 May 2007 20:54:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=185</guid>
		<description><![CDATA[Diese Einstellung entf&#228;llt mir immer wieder, ist aber doch manchmal n&#246;tig: -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl &#160;]]></description>
			<content:encoded><![CDATA[<p>Diese Einstellung entf&auml;llt mir immer wieder, ist aber doch manchmal n&ouml;tig:</p>
<pre>-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl</pre>
<p><font size="2">
<p>&nbsp;</p>
<p></font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/05/15/xerces-als-default-parser-setzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse erstellt plötzlich kein Build mehr???</title>
		<link>http://blog.gresch.de/2007/05/11/eclipse-erstellt-ploetzlich-kein-build-mehr/</link>
		<comments>http://blog.gresch.de/2007/05/11/eclipse-erstellt-ploetzlich-kein-build-mehr/#comments</comments>
		<pubDate>Sat, 12 May 2007 00:02:09 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=184</guid>
		<description><![CDATA[Das k&#246;nnte an einer korrumpierten .project-Datei liegen.Einfach mal &#160;&#160;&#160; &#160;&#160;&#160; &#60;buildCommand&#62;&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#60;name&#62;org.eclipse.jdt.core.javabuilder&#60;/name&#62;&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#60;arguments&#62;&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#60;/arguments&#62;&#160;&#160;&#160; &#160;&#160;&#160; &#60;/buildCommand&#62; einf&#252;gen (direkt via Eclipse, im ge&#246;ffneten Projekt funktioniert).&#160;]]></description>
			<content:encoded><![CDATA[<p>Das k&ouml;nnte an einer korrumpierten .project-Datei liegen.<br />Einfach mal</p>
<pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;buildCommand&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;name&gt;org.eclipse.jdt.core.javabuilder&lt;/name&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;arguments&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/arguments&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/buildCommand&gt; </pre>
<p>einf&uuml;gen (direkt via Eclipse, im ge&ouml;ffneten Projekt funktioniert).&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/05/11/eclipse-erstellt-ploetzlich-kein-build-mehr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Spring Framework: Enterprise Java ganz einfach! (Eberhard Wolff, Mike Wiesner, Interface 21)</title>
		<link>http://blog.gresch.de/2007/04/27/jax-2007-spring-framework-enterprise-java-ganz-einfach-eberhard-wolff-mike-wiesner-interface-21/</link>
		<comments>http://blog.gresch.de/2007/04/27/jax-2007-spring-framework-enterprise-java-ganz-einfach-eberhard-wolff-mike-wiesner-interface-21/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 06:47:26 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=183</guid>
		<description><![CDATA[Eberhard Wolff &#8211; Java Champion, Autor d. Buchs im dpunkt-Verlag (Eberhard Wolff &#8211; Spring) (dpunkt). Mike Wiesner: Fokus auf Security. Interface 21. Rod Johnson. J&#252;rgen H&#246;ller (Linz) Hauptentwickler Ausgangspunkt: Kritik an EJB. Deshalb mit POJOs (also known as &#34;Simple Objects&#34;) arbeiten. Java EE Design-Pattern-Ansatz zu komplex. DI &#8211; AOP &#8211; Portable Service Abstractions. Pluggable Architecture. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Eberhard Wolff</strong> &#8211; Java Champion, Autor d. Buchs im dpunkt-Verlag (<a href="index.php?/archives/142-Eberhard-Wolff-Spring-dpunkt.html">Eberhard Wolff &#8211; Spring) (dpunkt)</a>. <br /><strong>Mike Wiesner</strong>: Fokus auf Security.
<p>Interface 21. Rod Johnson. J&uuml;rgen H&ouml;ller (Linz) Hauptentwickler</p>
<p><strong>Ausgangspunkt</strong>: Kritik an EJB. Deshalb mit POJOs (also known as &quot;Simple Objects&quot;) arbeiten.</p>
<p>Java EE Design-Pattern-Ansatz zu komplex.</p>
<p>DI &#8211; AOP &#8211; Portable Service Abstractions.</p>
<p>Pluggable Architecture. Spring MVC. JNDI JPA, JTI etc.</p>
<p>Leightweight remoting, JMX. </p>
<p><strong><br />Inversion of Control</strong></p>
<p>Inversion of Control</p>
<p>^-Dependency Lookup ^-DI</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^-Setter Injection ^-Constructor Injection</p>
<p><strong><br />Setter Injection</strong></p>
<p>Spring setzt setter-Werte. <em>Parameterloser Konstruktor n&ouml;tig.</em></p>
<p>Nachteil: Inkonsistenter Zustand m&ouml;glich, wenn wesentliche Properties fehlen. BeanInterface (aber schlecht: abh&auml;ngig vom Framework) &#8211; besser init method =&gt; Ruft init-Methode auf. Oder setter mit @required erstellen, dann pr&uuml;ft Spring von selbst. noch besser:</p>
<p><strong><br />Constructor Injection</strong></p>
<p>Kann mit setter-I. kombiniert werden. Indizierung der Parameter. </p>
<p><em>&lt;constructor-arg index=&quot;0&quot; ref=&quot;accountDao&quot; /&gt; </em>(Index kann bei unterschiedlichen Typen auch weggelassen werden).</p>
<p>Dagegen spricht: super()-Aufruf bei Vererbung, Parameter <em>so</em> nicht mehr verwendbar. Kein Mechanismus, den Objekt-Status zu refreshen.</p>
<p><strong><br />Unit Test</strong></p>
<p>Nicht an Container denken, Objekte mit new() erzeugen.</p>
<p><strong><br />Spring Containers</strong><br />IoC und lookup Features. mit new einfach zu erzeugen:<br /><em>ApplicationContext theContext = new ClassPathXmlApplicationContext(&quot;spring-config.xml&quot;);</em></p>
<p>Bsp. deklarativ in web.xml &#8211; aber nicht empfohlen. Test-Case-Bsp.: protected String[] getConfigLocations()</p>
<p>Spring-Beans brauchen nicht ausgelesen zu werden. ###Files mit Aufgaben und Pr&auml;sentation hochladen###</p>
<p><strong><br />AbstractTransactionalDataSourceSpringContextTests</strong>: <br />Rollt DS nach Testaufruf auf Anfangszustand zur&uuml;ck.</p>
<p><strong><br />Autowiring</strong><br />Um Referenzen automatisch zuzuweisen. Nachteil: Weniger verst&auml;ndlich. Empfehlung: Eher nicht benutzen.</p>
<p><strong>AOP</strong><br />Spring AOP kann ohne DI benutzt werden. Bsp. Eclipse RCP. &quot;Decoration through configuration&quot;.<br /><em>Crosscutting concerns</em>. <em>Advices</em> &#8211; <em>Pointcuts</em>. Einige Aspects out-of-the-box. <br /><em>jamon</em> &#8211; Monitoring einfach einzurichten.</p>
<p><em>AOP-Proxy</em> &#8211; bezieht sich nur auf Spring-Beans (!), also z.B. nicht bei Selbstreferenzierung. Aspekte f&uuml;r AspectJ transformierbar von Spring AOP. Unterschiede: Keine Feldzugriffe mit Spring AOP. Dadurch, dass Bytecode erzeugt wird, kann AspectJ auch selbstinstantiierende Klassen finden. </p>
<p><em>Advice-Typen</em>: around (via <em>ProceedingJoinPoint</em>), before, after, throws.<br />Kurzer Verweis auf http://www.easymock.org/</p>
<p>Beispiel f&uuml;r Einbindung.</p>
<p><font face="courier new,courier" size="1">    &lt;aop:config&gt;<br />&nbsp; &lt;aop:aspect id=&quot;traceAspect&quot; ref=&quot;traceInterceptor&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;aop:around pointcut=&quot;execution(* dao.*+.*(..))&quot; method=&quot;trace&quot; /&gt;<br />&nbsp; &lt;/aop:aspect&gt;<br />    &lt;/aop:config&gt;</font>
<p>&nbsp;</p>
<p>Aufruf Unit-Test auch mit <em>-DSPRING_XML_FILE=aop-pojo.xml </em>in Eclipse als VM arg. Annotation-Aspects gut f&uuml;r Transaktionen, ansonsten immer schlecht, wo es schlecht ist, wenn der Code ge&auml;ndert wird.</p>
<p><em>    @Pointcut(&quot;execution(* dao.*+.*(..))&quot;)<br />    public void traceMethods()&nbsp; {<br />    }</em></p>
<p>Hack, damit &uuml;ber </p>
<p><em>@Around(&quot;traceMethods()&quot;)</em></p>
<p>darauf referenziert werden kann.</p>
<p>Annotations-Aspekt kann auch in AspectJ wiederverwendet werden, XML-POJO nicht. Bestimmte Views der SpringIDE: Bean Explorer; Bean Cross Reference; Spring AOP Event Trace.</p>
<p><strong>Effective Middle Tier</strong><br />Service Objects /Business Facade _transactional boundaries. Logik auch in Domain-Objekt, zu Lasten der Interoperabilit&auml;t.<br />Stateless, POJO. <br /><em>DAO Interfaces</em><br /><em>DAO Implementations</em></p>
<p><strong>Data Access Layer</strong> <br />Persistence hidden; Impl Class; Throws unchecked exception; Stateless, POJO. Gut mit Singleton Spring Beans. Dom&auml;nenobjekte. POJOs. </p>
<p><strong>Distributed Spring</strong><br />Referenzen auf Server injizieren. RMI, HttpInvoker &#8211; http + Serialisierung.</p>
<p>Server erstellen. Client erstellen. Seeeehr einfach. Funktioniert auch mit JMX. <em>BeanFactoryPostProcessor</em>. (Erl&auml;uterung, wie man &uuml;ber PropertyPlaceholderConfigurer Werte in *.properties-Datei [oder DB oder Input etc. etc.] auslagert und Werte in XML mit ${valuename} auslagert.</p>
<p>spring-modules hat auch eine Impl f&uuml;r Commons Configuration.</p>
<p><strong>Template Pattern</strong><br />Extreme Vereinfachung von Zugriff auf Persistenzl&ouml;sungen + JMS. Von Spring verwaltet, ohne M&auml;chtigkeit zu verlieren. Beispiel: </p>
<p><em>getSimpleJdbcTemplate().update(&quot;DELETE FROM T_ITEM WHERE ID=?&quot;, &quot;name&quot;);</em></p>
<p><strong>Exception Hierarchies.</strong><br />DataAccessException &#8211; all exceptions extend one single class. Erweiterbar. Vorbereitete Klassen, z.B. f&uuml;r SPs, die Fehlercode zur&uuml;ckgeben.<br />Datasource auch &uuml;ber JNDI-Lookup im J EE Appserver.</p>
<p>###Notiz: Wenn man Convention over Configuration folgte, sollte man IMHO f&uuml;r Spring stets drei Defaultverbindungen verwenden.### </p>
<p><strong>Transactions</strong><br />DAOs nehmen automatisch an Transaktionen teil. Gilt auch f&uuml;r Verbindungen von Persistenzl&ouml;sungen. DataSource &uuml;ber Connection. <em>Two-Phase-Commit</em>: JOTEM/Atomicus f. Java SE. Ansonsten Integration mit Appserver und JTA. </p>
<p><strong>iBATIS</strong><br />&quot;Sweet spot&quot; zwischen JDBC und ORM. Wohlbekannt&#8230; <img src='http://blog.gresch.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <br />Integration mit JavaSpaces: AUf Java Modules (?). Spring ist technologieneutrales API.<br />MSB &#8211; Support injizierbar.</p>
<p><strong>Spring + JSF</strong><br />Auf Spring Beans via JSF zugreifen, als w&auml;ren es Managed Beans.<br /><em>jsf-spring-Projekt</em>: Umgekehrt. </p>
<p><strong>Quartz</strong><br />Wie JMS. POJO-Bean mit  Aufrufmethoden. Sah sehr einfach aus.</p>
<p><strong>Security</strong><br />Acegi. Unabh&auml;ngiges Framework. ServletFilter.</p>
<p><strong><br />KGs Fazit:</strong></p>
<p>Der Stoff eines ganzen Buches von zwei h&ouml;chstprofessionellen, aber augenscheinlich gelangweilt-genervervten-ersch&ouml;pften &quot;Trainern&quot;. H&auml;tte ich den Enthusiasmus, das Feuer bei der Pr&auml;sentation als Richtschnur genommen,&nbsp; w&auml;re ich unweigerlich zur Vermutung gelangt, die beiden w&auml;ren vom Java EE Marketing aufgekauft. Spring ist ein excellentes Framework, das die Entwicklung verteilter Anwendungen ungemein erleichtern kann. Dies wurde zwar vermittelt, aber in einer Weise, als ob es sich um etwas Langweiliges handele. F&uuml;r einen &quot;Rundumschlag&quot; an einem Tag, der IMHO damit enden sollte, dass alle Entwickler begeistert noch auf der Heimfahrt an den Beispielen weiterarbeiten, fehlte der Elan, vielleicht auch die didaktischen F&auml;higkeiten von Eberhard Wolff, dessen Naturell aber vielleicht eher auf Coolness/Phlegma hingerichtet ist. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/27/jax-2007-spring-framework-enterprise-java-ganz-einfach-eberhard-wolff-mike-wiesner-interface-21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Testing with Selenium (Neal Ford, Thoughtworks)</title>
		<link>http://blog.gresch.de/2007/04/26/jax-2007-testing-with-selenium-neal-ford-thoughtworks/</link>
		<comments>http://blog.gresch.de/2007/04/26/jax-2007-testing-with-selenium-neal-ford-thoughtworks/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 13:53:29 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[thoughtworks]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[webapp]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=182</guid>
		<description><![CDATA[Origins &#34;Teflon-Effect&#34;: Thoughtworks Time and Expenses System (with Plone). Mercury testing suite (element Selenium protects from Mercury toxity). Acceptance Testing Tool. Test runs directly in the browser, analysing the DOM. BrowserBot -takes commands and exercises the app as if it was the user. http://selenium.houghtworks.com http://www.openqa.org/selenium Usage Modes: TestRunner -put core alongside the app (means static [...]]]></description>
			<content:encoded><![CDATA[<p><b>Origins</b></p>
<p>&quot;Teflon-Effect&quot;: Thoughtworks Time and Expenses System (with Plone). Mercury testing suite (element Selenium protects from Mercury toxity).</p>
<p>Acceptance Testing Tool. Test runs directly in the browser, analysing the DOM. BrowserBot -takes commands and exercises the app as if it was the user.</p>
<p>http://selenium.houghtworks.com</p>
<p>http://www.openqa.org/selenium</p>
<p><b>Usage</b></p>
<p>Modes: </p>
<p><i>TestRunner</i> -put core alongside the app (means static HTML dir).</p>
<p><i>RemoteControl</i> (&quot;driven mode&quot;).</p>
<p> Test cases: Simple HTML tables</p>
<p>| Ignored |   </p>
<p>Command | Target | Value</p>
<p>Command | Target | &amp;nbsp;</p>
<p>Assertion | Expectet | Actual</p>
<p>TestSuites possible. </p>
<p>Understands everthing that can be done by the user and additionally things like changing cookie values.</p>
<p><b>Concepts</b></p>
<p><i>Locators</i>: Find things on the page. id, name, identifier, dom=JS expression</p>
<p><i>Matching Patterns</i>: glob:pattern, regexp, exact, default is glob</p>
<p><i>Select</i>: label, value, id, index</p>
<p><i>Actions</i>: Action, actionAndWait, open</p>
<p><i>Assertions</i>: Assert, Verify (continue the test in case of a failure), waitFor (e.g. for AJAX &#8211; wait until field changes the value) </p>
<p><i>assertConfirmation</i>: JS confirmation dialog.</p>
<p><i>Parameters and Variables</i>: store, storeValue, storeText, storeAttribute, stored in JS map <i>storedVars</i></p>
<p><i></i>Variable Substitution &#8211; JS Evaluation</p>
<p />
<p><b>Selenium Techniques</b></p>
<p>Generating UIDs</p>
<p>Creating Test Case JSPs. </p>
<p />
<p>Assert sthg not existing. assertXPath extension (on openqa).</p>
<p>Fits into CruiseControl. </p>
<p>auto=&quot;true&quot; =&gt; /postResults =&gt; CC</p>
<p><b>Remote Control Selenium</b> </p>
<p>Drivers for Java, .NET, Python, Perl, Squeak, and Ruby. Jetty-based proxy-server. Issue Selenium commands &#8211; allows to issue all commands via JUnit tests&#8230;</p>
<p>Purely declarative Selenium syntax can be broken up.</p>
<p><b>User-Extensions</b></p>
<p><i>user-extensions.js</i> : e.g. own actions. Own locators and assertions (see openqa). </p>
<p><b>Selenium-IDE</b></p>
<p>Firefox-Extension. Recorder. With intelligent addons-e.g. forward-engineer macros to remote scripts in all languages.</p>
<p>###XPather + XPath Checker ###</p>
<p>Future</p>
<p>Driver capabilities. 1.0 soon. Documentation for driver. DSL-like language to supplement HTML.</p>
<p>File Uploads possible with Firefox.</p>
<p>Question: What about integration with Fit/FitNesse (e.g. <a href="http://www.cornetdesign.com/2006/09/fitnesse-selenium-wrapper.html">http://www.cornetdesign.com/2006/09/fitnesse-selenium-wrapper.html</a> or <a href="http://storytestiq.sourceforge.net/index.html">http://storytestiq.sourceforge.net/index.html</a>)? Neal Ford didn&#8217;t seem to see any use for it as he understands FitNesse also for functional tests and Selenium only for acceptance tests. ###TODO: Send an e-mailÂ  to him###</p>
<p><i>https</i>-Support (one-time import of the certificate)</p>
<p />
<p><b>(KG&#8217;s) Summary</b></p>
<p>This is &quot;best-of-breed&quot; technology for free. Whoever works in smaller/midrange IT departments and wants to spend money for a commercial tool is going to burn money. The multi-language facility via the remote runner makes Selenium quite adjustable. E.g. the integration with CruiseControl and even JUnit test cases makes it highly valuable.</p>
<p>The Selenium IDE can compete with professional Testing UIs. It&#8217;s AJAX support is stunning. Haven&#8217;t seen any commercial competitors yet.<b></b></p>
<p />
<p />
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/26/jax-2007-testing-with-selenium-neal-ford-thoughtworks/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Facelets und JSF (Thomas Spiegl, IRIAN.at)</title>
		<link>http://blog.gresch.de/2007/04/26/jax-2007-facelets-und-jsf-thomas-spiegl-irian-at/</link>
		<comments>http://blog.gresch.de/2007/04/26/jax-2007-facelets-und-jsf-thomas-spiegl-irian-at/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 12:12:00 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[jsf]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=181</guid>
		<description><![CDATA[Thomas Spiegl: Committer MyFaces. Einstieg: http://facelets.dev.java.net Nachteile von JSP&#8230; JSF 1.1-Problem falsche plazierte Renderung, kein Template-Framework. MyFaces hat Tiles-ViewHandler. Warum Facelets verwenden: HTML-Content kann schlecht in Komponentenbaum eingefÃ¼gt werden. 1.es Beispiel &#60;h:panelGrid columns=1&#34;&#62; &#60;h1&#62;&#60;h:outputText value=&#34;text&#34; /&#62; &#60;/h1&#62;&#60;/h:panelGrid&#62; Rendert als: &#60;table&#62;&#60;tr&#62;&#60;td&#62;text&#60;/td&#62;&#60;/tr&#62; &#60;h1&#62;&#60;/h1&#62; &#60;/table&#62; (Ist aber bei 1.2 gelÃ¶st mit automatischem verbatim-Tag). 2.es Beispiel &#60;h:outputLabel for=&#34;name&#34; /&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Thomas Spiegl: Committer MyFaces.</p>
<p>Einstieg: <a href="http://facelets.dev.java.net">http://facelets.dev.java.net</a></p>
<p>Nachteile von JSP&#8230; JSF 1.1-Problem falsche plazierte Renderung, kein Template-Framework. MyFaces hat Tiles-ViewHandler.</p>
<p>Warum Facelets verwenden:</p>
<p>HTML-Content kann schlecht in Komponentenbaum eingefÃ¼gt werden.</p>
<p><b>1.es Beispiel</b></p>
<p>&lt;h:panelGrid columns=1&quot;&gt;</p>
<p>&lt;h1&gt;&lt;h:outputText value=&quot;text&quot; /&gt;</p>
<p>&lt;/h1&gt;&lt;/h:panelGrid&gt;</p>
<p>Rendert als:</p>
<p>&lt;table&gt;&lt;tr&gt;&lt;td&gt;text&lt;/td&gt;&lt;/tr&gt;</p>
<p><b>&lt;h1&gt;&lt;/h1&gt;</b></p>
<p>&lt;/table&gt;</p>
<p>(Ist aber bei 1.2 gelÃ¶st mit automatischem verbatim-Tag).</p>
<p><b>2.es Beispiel</b></p>
<p>&lt;h:outputLabel for=&quot;name&quot; /&gt;</p>
<p>&lt;h:inputText id=&quot;name&quot; /&gt;</p>
<p>JSP und JSF 1.1: Label wird erst beim 2.en Request auf die Seite gerendert.</p>
<p>Facelets und JSF 1.1: Label wird gerendert. Komponentenbaum wird vor Renderphase aufgebaut.</p>
<p>(Ist auch bei JSF 1.2) vorhanden.</p>
<p>DataTable mit DataScroller &#8211; funktioniert nur, wenn der DS unterhalb der Table liegt.</p>
<ul>
<li>Performance 10-15% besser als JSP.</li>
<li>besseres Error-Reporting.</li>
<li>&quot;leichte&quot; Komponenten</li>
<li>einfaches Templating, ohne XML;</li>
<li>besseres Error Reporting &#8211; in web.xml. ui:debug</li>
<li>Designerfreundlich.</li>
<li>Konzept w</li>
</ul>
<p><b>Einrichten</b></p>
<p>FaceletViewHandler einbinden in faces-config.xml</p>
<p>Tag Libraries in facelets.LIBRARIES (web.xml Context-Param)</p>
<p>facelets.DEVELOPMENT</p>
<p>facelets.BUFFER_SIZE</p>
<p>facelets.REFRESH_PERIOD; Standard = 2 (Sekunden), lÃ¤dt die XHTML-Dateien nach. -1 zum Ausschalten.</p>
<p>facelets.VIEW_MAPPINGS</p>
<p>facelets.SKIP_COMMENTS false ist default. Sonst werden Kommentare Ã¼bermittelt.</p>
<p>facelets.BUILD_BEFORE_RESTORE default: false. Facelet baut Komponentenbaum ganz ab Beginn auf.</p>
<p><b>Erforderliche jars</b>:</p>
<ul>
<li>el-ri.jar</li>
<li>el-api.jar</li>
<li>jsf-facelets.jar</li>
</ul>
<p>JSF EL auch zum Schreiben von Properties. EL-libs fÃ¼r 1.5 kompiliert, aber im Netz auch noch fÃ¼r 1.4.</p>
<p>Maven-Konfig: Dependencies. http://maven-repository.dev.java.net/nonav/repository</p>
<p>Legacy-Attribut setzen fÃ¼r mvn2</p>
<p>Logging-Eigenschaften separat.</p>
<p>Beispielseite: Normales XHTML, Namespaces eingebunden.</p>
<p><b>Templating</b></p>
<p>xmlns:ui=&quot;http://~&quot;</p>
<p><b>Verwendung</b></p>
<p>mit ui:composition und ui:define. Alles auÃŸerhalb wird nicht geÃ¤ndert</p>
<p><b>Beispiel</b>: XHML-Datei erstelllt. Facelet-Namespace geholt und ui:definitionen =&gt; Template</p>
<p>Neue Datei mit Verweisauf Template. &lt;ui:composition&gt;&lt;ui:define name=&quot;content&quot; &gt;Das ist Inhalt =&gt; Ã¼berscjreibt default-Wert.</p>
<p>ui:decorate : Inhalt fÃ¼gt sich ein, alles Umgebende wird mitgerender</p>
<p>jsfc &#8211; Zur Kompilezeit Element in Komponente umwandeln.</p>
<p>&lt;input type=&quot;text&quot; jsfc=&quot;h:inputText&quot; etc.</p>
<p><b>JSTL-Support</b>: Nur eingeschrÃ¤nktes Set. Probleme beim Rendern: encodeChildren=&quot;true&quot;</p>
<p>ui:repeat statt c:forEach (buggy); besser rendered=&quot;true&quot; oder t:dataList</p>
<p><b>Custom TagLibs</b></p>
<p>Komponenten rein aus XHTML &#8211; TagHandler, Converter, Validator,</p>
<p>2 Alternative: 1 XML-Tag pro Komponente</p>
<p>1 XML-Tag, das eine Java-Klasse spezifiziert, welche die Konfiguration ausfÃ¼hrt. </p>
<p>&lt;facelet-taglib&gt;</p>
<p>&lt;namespace &#8230;&gt;</p>
<p>&lt;tag&gt;</p>
<p>&lt;tag-name&gt; etc.</p>
<p>Oder an Klasse binden (aber ungewÃ¶hnlich)</p>
<p>Einbindung der TagLib. Context-Param in web.xml facelets.LIBRARIES</p>
<p>oder Meta-Inf-Einbindung Ã¼ber WEB-INF/lib (automatisch)</p>
<p><b>Dynamische Komponenten</b></p>
<p />
<p />
<p>in Facelets library</p>
<p>Beispiel f. <b>Eingabekomponente</b>.</p>
<p>ui:component alle Anderen sind Kind-Elemente.</p>
<p>Ist echte Komponente im Baum.</p>
<p>Label mit Eingabekomponenten-Validierung. &lt;f:validateLength&gt;, indem in Template &lt;ui:insert /&gt; eingefÃ¼gt wird. Input-Text bekomment Validator gesetzt</p>
<p><b>Dynamische MenÃ¼s</b>-Beispiel.</p>
<p>Beispiel: Table-/Scroller-Kombination. </p>
<p>Method-Binding</p>
<p>funktioniert nicht: action=&quot;#{myBean.myAction}&quot;</p>
<p>sondern backing=&quot;{#myBean}&quot; action=&quot;myAction&quot;</p>
<p>und command action=&quot;backing[myBean]&quot; (###?, prÃ¼fen###)</p>
<p>Welche &lt;ui:&#8230;/&gt;-Tags</p>
<p>ui:fragment: rendert auch auÃŸenstehenden Text.</p>
<p>ui:composite</p>
</p>
<p>ui:decorate</p>
<p>ui:component</p>
<p>EL-Funktionen</p>
<p>JSP-Komponenten mÃ¼ssen in Taglib definiert werden. Component-Type + -Renderer festlegen.</p>
<p>Taglibs z.B.zum Einbinden in Tomahawk, auf Wiki-Seite von Faces.</p>
<p>Tag-Handler &#8211; Beispiel fÃ¼r Method-Binding. Tag-Handler nur einmal. dataTable-Tag-Handler: var-SpezialitÃ¤t. In Tomahawk kann das var-Attribut Ã¼ber Binding angespr werden</p>
<p>MetaRulest -Aliase, Attribute ignorieren, Meta-Rules f. Method-Binding.</p>
<p>Inlined EL-Expression: <b>unterstÃ¼tzen keine Konvertierung und kein Encoding</b> (also fÃ¼r Prototyping)</p>
<p>Debugging-Ausgabe: Mit Component-Tree und Scoped Vars, sehr nÃ¼tzlich.</p>
<p>In JSF 2.0 sollte eine Ã¤hnliche Technologie im Standard vorhanden sein (2008).</p>
<p><b>KGs Fazit:</b></p>
<p>Facelets sind JSP eindeutig vorzuziehen. Erhebliche Erleichterungen beim Erstellen von Taglibs. Intuitiveres Programmieren. </p>
</p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/26/jax-2007-facelets-und-jsf-thomas-spiegl-irian-at/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Grails &#8211; Rapid Web Application Development (Sven Haiges, Actionality)</title>
		<link>http://blog.gresch.de/2007/04/26/jax-2007-grails-rapid-web-application-development-sven-haiges-actionality/</link>
		<comments>http://blog.gresch.de/2007/04/26/jax-2007-grails-rapid-web-application-development-sven-haiges-actionality/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 10:05:31 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=180</guid>
		<description><![CDATA[Intro Ãœber S.H.: von Struts Ã¼ber JSF, Spring MVC zu Grails. Erstellt Grails Podcast. Motivation Framework wie Rails &#8211; Convention over Configuration, DRY Spring MVC im Hintergrund Grails vs. Rails Benchmark &#8211; Skaliert weitaus besser als Rails. 1.0 Release im Sommer, 0.5 im Mai. grails clean grails update zum Update, soll schmerzlos sein. Benutzte Frameworks [...]]]></description>
			<content:encoded><![CDATA[<p><b>Intro</b></p>
<p>Ãœber S.H.: von Struts Ã¼ber JSF, Spring MVC zu Grails. Erstellt Grails Podcast.</p>
<p><b>Motivation</b></p>
<p>Framework wie Rails &#8211; Convention over Configuration, DRY</p>
<p>Spring MVC im Hintergrund</p>
<p>Grails vs. Rails Benchmark &#8211; Skaliert weitaus besser als Rails. 1.0 Release im Sommer, 0.5 im Mai.</p>
<p><i>grails clean</i></p>
<p><i>grails update</i> </p>
<p>zum Update, soll schmerzlos sein. </p>
<p><b>Benutzte Frameworks</b></p>
<p>Spring: Spring DI + Spring MVC</p>
<p>Hibernate</p>
<p>SiteMesh &#8211; Layouting</p>
<p><b>Java EE &#8211; Integration</b></p>
<p>Standalone oder Hib-Mappings f Legacy-Schemata; EJB3-Integration; vorhandene Spring-Beans kÃ¶nnen verwendet werden.</p>
<p>Quickstart siehe am besten <a href="http://grails.org/Quick+Start">hier</a>.</p>
<p><i>ApplicationBootStrap</i> zum Persistieren.</p>
<p>TL-Erzeugung. Zur Laufzeit deploybar, ebenso mit Controller + Service. </p>
<p>Server-Start <i>runApp.groovy</i>. snipplr.com</p>
<p><b>MVC in Grails</b></p>
<p>Model: Domain-Klassen etc. </p>
<p>class Podcast {</p>
<p>String title</p>
<p>String feedUrl</p>
<p>}</p>
<p>View: Groovy SP oder JSP; dynamic TagLibs</p>
<p>Controller: Grails Controller + Grails Service</p>
<p>Object-Relational Mapping GORM. Equals()/hashCode() werden automatisch + dynamisch erstellt. </p>
<p> grails create-domain-class</p>
<p><b>Mapping 1:1</b></p>
<p>class Podcast {<br /><i>Author author</i><br />String title<br />}</p>
<p><b>Mapping 1:n</b></p>
<p>class Podcast {<br /><i>def hasMany = [ episodes : Episode ]</i><br />String title<br />}</p>
<p />
<p><b>Mapping m:n</b></p>
<p>class Podcast {<br /><i>def hasMany = [ episodes : Episode ]</i><br />String title<br />}</p>
<p>class Author<br />{<br /><i>def hasMany = [ podcasts : Podcasts ]</i><br />}</p>
<p>GORM: Dynamic Finders</p>
<p>Podcast.findByTitle(), QBE + HQL unterstÃ¼tzt.</p>
<p>Constraints</p>
</p>
<p>class Podcast {<br />String title<br />String feedUrl<br />static constraints = {<br />title(size:1..50)<br />feedUrl(unique:true)<br />}<br />}</p>
<p><b>GORM DB Konfiguration</b></p>
<p>development/production/test</p>
<p>Classe Development[...]DataSource Ã¤ndern. Standard: Development.</p>
<p><b>View-Technologien</b></p>
<p>Die meisten verwenden GSP wg. der Dynamic Tag Libs. </p>
<p />
<p><b>Grails Controller</b></p>
<p>Generierbar (mit CRUD), wird dynamisch geladen.  Immer alle CRUD-Operationen werden erstellt, DELETE kann z.B. nicht ausgeschlossen werden. Controller und Views mÃ¼ssen entsprechend manuell angepasst werden.</p>
<p>Parameter, Session, Flash-Objekte.</p>
<p>render()-Methode sehr mÃ¤chtig &#8211; AJAX</p>
<p>HTTP-MEthod-Restrictions.</p>
<p>Dynamisches Scaffolding</p>
<p>im Bsp.: <b>def scaffold= Podcast</b></p>
<p><b>Services</b></p>
<p>Kapselung von Business-Logik.</p>
<p>Buchempfehlung <i>Getting Started with Grails</i> (InnoQ)</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/26/jax-2007-grails-rapid-web-application-development-sven-haiges-actionality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Maven 2 &#8211; Umstellung eines Projekts von Ant zu Maven 2 (Oliver Stauss, eXXcellent solutions)</title>
		<link>http://blog.gresch.de/2007/04/26/jax-2007-maven-2-ae-umstellung-eines-projekts-von-ant-zu-maven-2-oliver-stauss-exxcellent-solutions/</link>
		<comments>http://blog.gresch.de/2007/04/26/jax-2007-maven-2-ae-umstellung-eines-projekts-von-ant-zu-maven-2-oliver-stauss-exxcellent-solutions/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 08:46:36 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=179</guid>
		<description><![CDATA[Historie &#8211; von make Ã¼ber Ant, Maven 1 zu Maven 2. Einfluss der Rails-Community. Komplett neue Implementierung von 1. Paradigmenwechsel: Nicht Build-Skripte erstellen, sondern Projekte konfigurieren. Nicht das wie des zu erzeugenden, sondern das was. Mehr managen als erzeugen. OO-Mechanismen zur Konfiguration (also Projekt). mvn2 hilft bei einem GroÃŸteil des Entwicklungsprozesses. UnterstÃ¼tzung fÃ¼r Kompilation Releaserstellung [...]]]></description>
			<content:encoded><![CDATA[<p>Historie &#8211; von make Ã¼ber Ant, Maven 1 zu Maven 2. Einfluss der Rails-Community. Komplett neue Implementierung von 1.</p>
<p />
<p>Paradigmenwechsel: Nicht Build-Skripte erstellen, sondern Projekte konfigurieren.</p>
<p>Nicht das <i>wie</i> des zu erzeugenden, sondern das <i>was</i>. Mehr managen als erzeugen. OO-Mechanismen zur Konfiguration (also Projekt).</p>
<p>mvn2 hilft bei einem GroÃŸteil des Entwicklungsprozesses. UnterstÃ¼tzung fÃ¼r</p>
<ul>
<li>Kompilation</li>
<li>Releaserstellung</li>
<li>BibliotheksabhÃ¤ngigkeiten</li>
<li>Dokumentation</li>
<li>Unit- und Integrationstests</li>
<li>nn</li>
<li>nn</li>
</ul>
<p>Weniger ein Tool wie Ant &#8211; vielmehr eine standardisierte Best-Practices-Enforcment-Box. </p>
<p><b></b></p>
<p />
<p><b></b></p>
<p />
<p><b>Konzepte </b></p>
<p><b>P</b>roject <b>O</b>bject <b>M</b>odel, beschrieben in <i>pom.xml</i>. Name + Version + Typ, Vererbung, Unterprojekte (Module), AbhÃ¤ngigkeiten und Repos, Lifecycle- Plugin Konfigurationen, Profile, Properties, sonstiges (Issue Tracker, Version Control etc). </p>
<p><b></b></p>
<p />
<p />
<p><b>Artifact</b>: </p>
<p>Ergebnis (Produkt) eines mvn2-Projekts. Typen: jar, war, ear, sar; plugin, archetype, pom.</p>
<p>Werden in Rep abgelegt. Jedes mvn2-Projekt erzeugt lediglich <b>ein</b> Ergebnis (dadurch Modularisierung erzwungen).</p>
<p />
<p><b></b></p>
<p />
<p><b>Goal</b></p>
<p>Wie Ant-Target.</p>
<p />
<p><b></b></p>
<p />
<p><b></b></p>
<p><b>Plugin</b></p>
<p>Logische Gruppierung von Goals. In Reps verwaltet.</p>
<p>Syntax: <i>plugin:goal</i></p>
<p><i>archetype:create</i> &#8211; Skeleton fÃ¼r weitere Projekte.</p>
<p><i>cargo:start</i> &#8211; FÃ¼r Java EE interessant.</p>
<p><i>compiler:compile</i>: Quellcode kompilieren.</p>
<p />
<p><b></b></p>
<p />
<p />
<p><b>Repositories</b></p>
<p>Zentrale Stelle, in der alle Artifacts abgelegt werden. Zwei Type: Lokal (file://[user-home].m2/repository), Remote (z.B. <a href="http://repo1.maven.org">http://repo1.maven.org</a>)<b></b></p>
<p><b></b></p>
<p />
<p><b></b></p>
<p />
<p />
<p><b>Dependency-Management</b></p>
<p>Alle abhÃ¤ngigen Artefakte Ã¼ber Repositories verwaltet, werden nicht physische in das Projekt kopiert. Kein &quot;Jarmaggedon&quot;.</p>
<p><b>Build-Lifecycle</b></p>
<p>Definiert in Phasen: validate-generate-resource-compile-test_compile-test-package-integration_test-install-deploy. Phasen mit plugin-goals verbunden.</p>
<p><b>Reports</b></p>
<p>QA-Reports, generelle Projektinformationen. <b></b></p>
<p><b>Frage: Wie funktioniert das innerhalb Eclipse?</b></p>
<p>Antwort: Plugins, libraries in rep</p>
<p><b>Ãœbergang von Ant zu Maven 2</b></p>
<p>Refactoring des Ant-Projekts. Projektstrukturen vereinfachen! Bei mehreren Artifacts in Unterprojekte aufteilen.</p>
<p>AuflÃ¶sen der AbhÃ¤ngigkeiten. Verwendete Bibliotheken identifzieren (mit Version!) &#8211; das ist normalerweise der aufwendigste Punkt.</p>
<p> Einspielen von 3rd-Party- und Inhouse-Bibliotheken in internes Repository.</p>
<p>POM definieren. Spezielle Ant-Targets in mvn2 umsetzen. Weitere features nutzen, um QualitÃ¤t zu steigern. </p>
<p> <b>Beispiel: antAuthProject</b></p>
<p />
<p />
<p>/src und /test/src-Folders. /lib, /etc; client, common und server-Packages. </p>
<p>=&gt; mvn: drei Verzeichnisse /server, /common, /client und eine <i>pom.xml</i> auf root-Ebene und jeweils in den drei Verzeichnissen. Sourcen darunter in /src/main (Mvn2-Konzept) und /src/test. Alles andere in /resources.</p>
<p>AuflÃ¶sen der AbhÃ¤ngigkeiten: Gut, wenn Versionsnummer in jar-Namen enthalten sind.</p>
<p>mvn install:install-file, um Libs in Rep zu bekommen (fÃ¼r internes Rep).</p>
<p>Mvn-plugin fÃ¼r spezielle Ant-targets. &lt;parent&gt;-Tag fÃ¼r Submodule. Submodule erben Konfig des Hauptprojekts (z.B. Unit-Tests, CodeCoverage).</p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/26/jax-2007-maven-2-ae-umstellung-eines-projekts-von-ant-zu-maven-2-oliver-stauss-exxcellent-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Polyglot Programming (Neal Ford, ThoughtWorks)</title>
		<link>http://blog.gresch.de/2007/04/25/jax-2007-polyglot-programming-neal-ford-thoughtworks/</link>
		<comments>http://blog.gresch.de/2007/04/25/jax-2007-polyglot-programming-neal-ford-thoughtworks/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 18:30:55 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=178</guid>
		<description><![CDATA[Bridge building as metaphor for sw. Jack W. Reeves &#34;What is sw design?&#34; Design: Sourcecode itself. Manufacturing incredibly cheap. Design small parts, then bigger. Our design tool: Java. C/C++-origins. Stupid Java Tricks: static block. 6 ways to initialize sthg. in Java. Enum example. Inner class inherits List&#60;String&#62; s = new ArrayList&#60;String&#62;() { { add(&#34;hi&#34;); //etc. [...]]]></description>
			<content:encoded><![CDATA[<p>Bridge building as metaphor for sw. Jack W. Reeves &quot;What is sw design?&quot;</p>
<p>Design: Sourcecode itself. Manufacturing incredibly cheap. </p>
<p>Design small parts, then bigger. Our design tool: Java. C/C++-origins. </p>
<p>Stupid Java Tricks: static block. 6 ways to initialize sthg. in Java. </p>
<p>Enum example. </p>
<p>Inner class inherits</p>
<p>List&lt;String&gt; s = new ArrayList&lt;String&gt;() </p>
<p>{</p>
<p>  { add(&quot;hi&quot;); //etc.</p>
<p>
Justin Gehtland.</p>
<p>Language entropy &#8211; languages tend to become more complex. </p>
<p>Java language is the design, Java platform the manufacture.</p>
<p />
<p> Jaskell, Scala &#8211; Functional languages &#8211; e.g. automatically thread-safe</p>
<p />
<p>More declarative than imperative code.</p>
<p />
<p>Paul Graham, <i>Hackers and Painters</i>. Scale of the power of languages. LISP as the most powerful predecessor &#8211; no language that goes so far, Java only 4 features, Groovy 6 (?), Ruby 7</p>
<p>Ruby example&#8230; Calendar cal; cal.2.days.fromToday&#8230;</p>
<p>Testing is the rigor of SW dev.</p>
<p><b>KGs Summary</b>:</p>
<p>The most inspiring and personally important session which I attended. Neal Ford made clear that following the test-first-approach (and testing in general) is more needed than type-safety. And even more needed than the IDE (or whatever) is the programming language as developer&#8217;s tool. But what the programmer most necessarily needs is &#8211; his brain. If he doesn&#8217;t think but just rely in the compiler warnings etc. there is no gain at all. As Neal Ford explained that FUD very often distracts from thinking, his recommendation is to evaluate, I think, every Java developer should take a mid-complex personal project and rewrite it in Ruby.</p>
<p>But I&#8217;m also sure, many won&#8217;t. This is caused in the fact that there are many programmers which have no &quot;personal project&quot; &#8211; they even haven&#8217;t any IDE installed at home. </p>
<p>To me it seems, the programming world is not only splitted into MS and non-MS programmers or those who use a plaintext editor and those who use a full-featured IDE, but also in those who want to be efficient (in the Pragmatic Programmer&#8217;s sense) and those who just want to stay where they are. There is a big &quot;gap of passion&quot; and IMHO, the less a developer is passionated about software development the more she/he&#8217;ll produce and consume FUD.</p>
<p> </p>
</p>
<p>Addendum: On Neal Ford:</p>
<p>Homepage: <a href="http://www.nealford.com/">http://www.nealford.com/</a></p>
<p>Blog: <a href="http://memeagora.blogspot.com/">http://memeagora.blogspot.com/</a></p>
<p />
<p />
<p />
<p />
<p />
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/25/jax-2007-polyglot-programming-neal-ford-thoughtworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAX 2007: Garbage Collection &#8211; Memories are made of this (Rainer Jung, kippdata)</title>
		<link>http://blog.gresch.de/2007/04/25/jax-2007-garbage-collection-memories-are-made-of-this-rainer-jung-kippdata/</link>
		<comments>http://blog.gresch.de/2007/04/25/jax-2007-garbage-collection-memories-are-made-of-this-rainer-jung-kippdata/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 14:34:08 +0000</pubDate>
		<dc:creator>KG</dc:creator>
				<category><![CDATA[Konferenzen]]></category>
		<category><![CDATA[develop]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JAX]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://web636.webbox122.server-home.org/wpkg/?p=177</guid>
		<description><![CDATA[Zu Rainer Jung: Tomcat-Commiter, Cluster, mod_jk, GeschÃ¤ftsfÃ¼hrer kippdata GmbH Warm-Up-Fragen, etc. wer benutzt noch 1.3 etc, Statistik XX-Optionen: 412 + 32 Diagnose 367 in DevBuild 53 Optionen mit verschiedenen Defaults BeschrÃ¤nkung auf Sun JVM 1.4.2, 1.5, 1.6 Drei Fragestellungen: GC run blockiert Anwendung GC blockiert CPU Zeiten GroÃŸes Memory ist teuer =&#62; Drei widersprÃ¼chliche Ziele. [...]]]></description>
			<content:encoded><![CDATA[<p>Zu Rainer Jung: Tomcat-Commiter, Cluster, mod_jk, GeschÃ¤ftsfÃ¼hrer kippdata GmbH</p>
<p>Warm-Up-Fragen, etc. wer benutzt noch 1.3 etc, </p>
<p>Statistik XX-Optionen: 412 + 32 Diagnose</p>
<p>367 in DevBuild</p>
<p>53 Optionen mit verschiedenen Defaults</p>
<p>BeschrÃ¤nkung auf Sun JVM 1.4.2, 1.5, 1.6</p>
<p>Drei <b>Fragestellungen</b>: </p>
<ol>
<li>GC run blockiert Anwendung</li>
<li>GC blockiert CPU Zeiten</li>
<li>
GroÃŸes Memory ist teuer</li>
</ol>
<p>=&gt; Drei widersprÃ¼chliche Ziele.</p>
<p>Objekterreichbarkeit &#8211; lebt, wenn es Kette v. ObjRefs von &quot;root&quot; zum Obj gibt.</p>
<p><i>roots</i>: static fields in Klassen, Args, MEmber der Methoden in allen aktuellen Threads.</p>
<p>Realisierungsziele</p>
<ul>
<li>schnelleObjAllokation: <b>Eden</b>-Stack; Ende d Stacks wird hochgesetzt -Inkrementierung d Pointers. Was, wenn Eden &quot;voll ist&quot;? Eden leerrÃ¤umen: In <b>Survivor Space</b> () [=&gt;Minor GC] wird Eden umkopiert. SS kleiner als Eden.<br />Was, wenn SS voll ist? Zwei SSes Survivor A + Survivor B. Eden=&gt;A=&gt;B. Dabei werden die From und To-Rollen immer abwechselnd vertauscht. Deshalb heiÃŸen die SSes auch &quot;Semi-Spaces&quot;. </li>
<li><b>New</b>: Var 1: Eden+ 1 Semi-Space</li>
<li>Var2: Eden + beide SSes.</li>
<li>Was, wenn SemiSpace voll ist? Objekte nicht mehr &quot;jung&quot; &#8211; <b>Tenured</b> &#8211; enthÃ¤lt Ã¤ltere Objekte. Nach MGC =&gt; Eden leer, From leer, alle Objekte in To und Tenured.</li>
<li>Objekte im SS erhalten Alter &quot;age&quot;, wird bei Umkopieren um eins erhÃ¶ht; Objekte oberhalb eines Age-limits (default 31 (1.4.2), 15 (1.6) und 31/15 (1.5), Ã¤nderbar) kommen nach Tenured.</li>
<li>Suche letztes Age A, welches unter N% liegt.</li>
<li><b>meisten Obj sterben jung</b></li>
<li>wenig Overhead + StÃ¶rung d. App</li>
</ul>
<p>Schalter -server / -client VerÃ¤ndert Memory Defaults. 64 bit immer Server. </p>
<p>Server Class Detection: Linux: Anhand d Memory-Werts. </p>
<p>-X-Argumente sind nicht standardisiert. -XX:+/-[Schalter] -XX:[key=value]</p>
<p>Argumente an CL oder .hotspotrc oder _JAVA_PREFIC envvar</p>
<p>Heap: Eden+2*Semi+Tenure</p>
<p>Dynamisches Resizing. Defaults 40/70%</p>
<p>FÃ¼r Produktion Xmx=Xms</p>
<p>New Size= Eden + 2*Semi</p>
<p>(Kein Schalter f. Tenured). New Size als Anteil New:Tenured = 1:NewRatio </p>
<p>New generation (in Doku): Ein Semi-Space + Eden</p>
<p><b></b></p>
<p />
<p><b>Survivor Ratio</b> 1 Semi Space also New /(SurvivorRatio+2)</p>
<p>4 = Eden 4/6, SS 1/6</p>
<p><b></b></p>
<p />
<p><b>Tenuring-Verhalten</b> beeinflussen</p>
<p>TargetSurvivorRatio (ZielfÃ¼llstand SemiSpaces %)</p>
<p>MaxTenurinbgThreshold</p>
<p><b></b></p>
<p />
<p><b>OutOfMemoryErrors</b></p>
<p>OnError &#8211; KommandoÃ¼bergabe.</p>
<p>Schalter <i>ShowMessageBoxOnError</i>: HÃ¤lt Prozess an, damit man Debugger anklemmen kann.</p>
<p>Seit 1.4.2. parallele Minor GC (Throughput Collector). Concurrent: Abarbeitung wÃ¤hrend App nicht gestoppt wird.</p>
<p>Schalter UseParallelGC bei CMS UseParNewGC, Default ab 1.5 bei server</p>
<p />
<p>Anzahl benutzter Threads nach Formel</p>
<p>(ncpus &lt;= ?) ncpus : 8 + (ncpus -8)* 5/ 8</p>
<p>ParallelGCThreads=x einstellen besser!</p>
<p>GC-Ergonomie, in Verbiindung m. Server-Class detection. Andere defaults der Mem-GrÃ¶ÃŸen.</p>
<p><i>UseAdaptiveSizingPolicy</i> &#8211; soll Eden und SemiSpaces automatisch skalieren. Wohl weniger performant, zu prÃ¼fen.</p>
<p />
<p><b></b></p>
<p />
<p><b>Major GC</b> / <i>Full GC</i><br />Entfernung toter Objekte aus Tenured. Steht nicht in jedem Log. Tenured &quot;voll&quot;? Ganz unterschiedliche AnsÃ¤tze Tenured-Size Eden &#8211; Size 1 Semi ODER 68% Tenured </p>
<p>System.gc() (aber kein Vertrag).</p>
<p>Webapp-Trick: &lt;% System.gc(); %&gt; &#8211; fÃ¼r Tests &#8211; ULR aufrufen.</p>
<p>GB-Tenured GC kann im Mehrsekundenbereich liegen; vor 1.6 single-threaded. </p>
<p><b></b></p>
<p />
<p><b>Zwei Algorithmen</b></p>
<p><i>Mark Sweep Compact</i> (Exact GC), default: </p>
<p>Geht nicht nur durch, um tote Obj zu entfernen, sondern &quot;defragmentiert&quot; auch</p>
<p><u>ab 1.5.06/1.6</u></p>
<p>optionale parallele Abarbeitung &#8211; mehrere Threads Parallel!=Concurrent-Vorsicht!</p>
<p>Gleicher Thread Count</p>
<p><i>Concurrent Mark Sweep [CMS] GC</i> (seit 1.4.2)<i></i></p>
<p>Anwendung nur kurz stoppen, GC in mehreren Phasen. UseConMarkSweepGC mit Minor GC nur mit UseParNewGC</p>
<p>Pausenzeiten deutlich kÃ¼rzer. Anfangs sehr buggy, jetzt aber empfehlenswert.</p>
<p>Gefahr: Fragmentierung von Tenured. erhÃ¶hter Memory Bedarf in Tenured (~30%?) </p>
<p>Neu in 1.6: CMS auch fÃ¼r System.gc(), Schalter <i>ExplicitGCInvokesConcurrent</i></p>
<p>Parallele Mark-Phase (stop)</p>
<p>1.4.2. ignoriert SurvivorRatio.</p>
<p>Class Garbage Collection;</p>
<p><b>Demo</b>: Eden und JMeter sendet Requests byteArray allozieren Speicher.</p>
<p>jconsole zeigt Ansteigen der Belegung d Eden Space an. </p>
<p><b>Demo</b>: Aging Distribution</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gresch.de/2007/04/25/jax-2007-garbage-collection-memories-are-made-of-this-rainer-jung-kippdata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

