<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4722905579699085960</id><updated>2012-01-24T20:55:33.323+01:00</updated><category term='Experiences'/><category term='Continuous Integration'/><category term='Performance'/><category term='Project Management'/><category term='illumina'/><category term='Statistik'/><category term='UML'/><category term='Tomact'/><category term='WebDAV'/><category term='Java'/><category term='bioinformatics'/><category term='Extreme Programming'/><category term='Distributed Computing'/><category term='SAS'/><category term='Politik'/><category term='Maven'/><category term='Linux'/><category term='Eclipse'/><category term='Mac'/><category term='Webapp'/><category term='Hudson'/><category term='Jackrabbit'/><category term='Spring'/><category term='JUnit'/><category term='Agile Development'/><category term='Book'/><category term='Log4J'/><category term='SVN'/><category term='Video'/><category term='LaTeX'/><category term='Ant'/><category term='Blog'/><category term='Offtopic'/><category term='R'/><title type='text'>Programming</title><subtitle type='html'>Aus dem praktischen Leben eines Programmierers. Hier geht's um die Kleinigkeiten zwischen Java, Eclipse, Ant, Maven, JUnit, agiler Softwareentwicklung und und und ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>94</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3972229170882569431</id><published>2012-01-24T20:55:00.000+01:00</published><updated>2012-01-24T20:55:33.327+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Buchreview: Arbeiten statt Deligieren</title><content type='html'>Junge, neue Unternehmen haben es in Deutschland schwer auf die Beine zu kommen und erfolgreich zu werden. Die bürokratischen Bestimmungen und die Organisations-Mentalität der Deutschen hämt viele gute Ideen und lässt diese schon im Keim ersticken. Das Besteller Buch "Rework" der erfolgreichen Software Schmiede "37signals" aus Amerika beschreibt wie es mit einfachen, greifbaren Mitteln möglich ist gute Ideen auf den Markt zu bringen. Es geht nicht darum teure Werbung zu schalten, Manager einzustellen welche die Arbeit deligieren, lange Meetings zu halten, bis spät in die Nacht zu arbeiten oder Geld von Investoren zu akquirieren. Im Gegenteil, es geht darum Produkte zu entwickeln die einen begeistern, seinen Kunden zuzuhören, ehrlich zu sein und am Erfolg zu arbeiten und das mit Mitteln die wir alle zur Verfügung haben. Die Autoren zeigen wie jeder mit dem Fokus auf das Wesentliche zum Ziel kommt. Diese Maxime wird wunderbar im Buch umgesetzt. Die Kapitel sind nicht länger als zwei Seiten, sind leicht zu lesen und für jeden verständlich. Ein großartiges Buch für Alle die arbeiten und Arbeit produzieren.&lt;br /&gt;&lt;br /&gt;REWORK - Jason Fried &amp;amp; David Heinemeier Hansson - Founders of 37signals&lt;br /&gt;&lt;a href="http://www.amazon.de/Rework-Business-intelligent-Jason-Fried/dp/3570501256/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1327351700&amp;amp;sr=1-1"&gt;http://www.amazon.de/Rework-Business-intelligent-Jason-Fried/dp/3570501256/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1327351700&amp;amp;sr=1-1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Autor des Gastbeitrags: Stefan Laabs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3972229170882569431?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3972229170882569431/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2012/01/buchreview-arbeiten-statt-deligieren.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3972229170882569431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3972229170882569431'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2012/01/buchreview-arbeiten-statt-deligieren.html' title='Buchreview: Arbeiten statt Deligieren'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8371814085944593463</id><published>2012-01-22T18:10:00.000+01:00</published><updated>2012-01-22T18:10:10.332+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Zeitbetrug aufdecken</title><content type='html'>Neben den Werksverträgen werden oft Serviceverträge zwischen Unternehmen abgeschlossen. Serviveverträge sind im IT Bereich sehr beliebt. Dazu werde in der Regel die Arbeitszeiten des Dienstleiters nachgewiesen. Praktisch sind im IT Bereich Issue Tracking Systeme wie JIRA dafür. Sie ermöglichen das Festhalten und Dokumentieren der Aufgabe, der Problemlösung und der dafür benötigten Zeiten, sehr praktisch. Sehr praktisch, vor allem weil der Kunde keine Kontrollmöglichkeit Besitz und er dem Dienstleister ausgeliefert ist.&lt;div&gt;Aber nein, es gibt einfache Möglichkeiten&amp;nbsp;mit Hilfe von ein wenig einfacher Mathematik&amp;nbsp;den Betrugs mit Servicezeiten aufzudecken. Dazu zuerst der Normalfall an einem Beispiel kurz dargestellt, ein Aufgabe kommt herein, und wird auf X h geschätzt und bearbeitet, innerhalb des Bearbeitungszeitraums wird die Zeit für das Bearbeiten verbraucht. Die Aufgabe wird gelöst. In der Regel werden diese Arbeiten beim Kunden zum Monatsende abgerechnet.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Die allermeisten Abweichungen sind Betrug, die wohl beliebteste Methode ist, wenn der Dienstleister merkt, dass er zu wenig Aufwände (Zeiten) im Monat hatte. Er trägt zum Monatsende, kurz vor Rechnungsstellung gehäuft Zeiten nach. D.h. es werden Zeiten auf längst bearbeitete Vorgänge geschrieben. Um diese Betrugsvariante aufzudecken, muss man nur die Daten, wann Zeiten eintragen wurde in Bezug zum Abrechnungszeitraum setzen. Es kommt zu einer klaren, nicht normalen Häufung. Die zweite Auffälligkeit dieser Betrugsmethode ist die große Differenz (Tage) zwischen dem Datum wann die Zeiten eingetragen wurden und wann sie angeblich angefallen sind. Mit beiden Methoden lässt sich diese Betrugsart erkennen.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8371814085944593463?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8371814085944593463/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2012/01/zeitbetrug-aufdecken.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8371814085944593463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8371814085944593463'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2012/01/zeitbetrug-aufdecken.html' title='Zeitbetrug aufdecken'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5743019436310766505</id><published>2012-01-21T09:43:00.004+01:00</published><updated>2012-01-23T18:16:02.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>Hudson 3 als Alpha Version verfügbar</title><content type='html'>Tote leben länger, wohl auch im Bereich Continuous Integration. Nachdem auf deutschen Wikipedia Hudson nicht mehr existent war und Hudson nur als Vorgänger von Jenkins am Rande erwähnt wurde, freue ich mich auf den Hudson 3, jetzt unter dem Dach von Eclipse. Ein erster Test (OpenJDK 7, Tomcat 7, Hudson 3.0.0 M0 als WAR), was ist mit meinen Augen, die Farbe, Lila? na gut, also weiter im Test. Einige unangenehme Fehler sind im neuen Hudson nicht mehr drin, so funktioniert jetzt das Deployen auf den Tomcat 7. Der Bug war in der zweier Version seit langem bekannt aber nicht gefixt. Mein normaler Hudson-Job läuft auch ein bisschen schneller, ca. 10 %. Schon die Hudson Alpha Version 3.0.0 M0 ist ein deutlicher Fortschritt und für den Praxiseinsatz tauglich. Auf jeden Fall ist Hudson damit wieder im Rennen, ich werde wohl die deutsche Wikipedia Seite für Hudson anlegen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/hudson/download.php"&gt;http://www.eclipse.org/hudson/download.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hudson-ci.org/"&gt;http://hudson-ci.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Geschaft, jetzt gibt es eine neue Seite bei &lt;a href="http://de.wikipedia.org/wiki/Hudson_(Software)" target="_blank"&gt;Wikipedia zum Hudson&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5743019436310766505?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5743019436310766505/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2012/01/hudson-3.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5743019436310766505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5743019436310766505'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2012/01/hudson-3.html' title='Hudson 3 als Alpha Version verfügbar'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1111396779533848169</id><published>2011-12-22T09:54:00.000+01:00</published><updated>2011-12-22T09:54:32.957+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Schöne neue Maven Welt</title><content type='html'>Was mich an Maven oder viel mehr an Maven Entwicklern stört, ist dass sie Abhängigkeiten aufbauen statt sie abzubauen. Wenn ich an einem Open Source Plugin eines größeren Systems nur eine Zeile Code ändern möchte, dann&amp;nbsp; muss ich gleich das ganze System und nicht nur das Plugin auschecken. Das ist absurd. Guter Code hat eine eine geringe Kopplung zwischen Modulen und wenige Abhängigkeiten. Parent Module sind schön aber nicht immer notwendig. Hört auf alle möglichen Features zu nutzen. Jedes neue Feature sollte das Gesamtsystem einfacher und nicht komplizierter machen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1111396779533848169?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1111396779533848169/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/12/schone-neue-maven-welt.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1111396779533848169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1111396779533848169'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/12/schone-neue-maven-welt.html' title='Schöne neue Maven Welt'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8344916853179938829</id><published>2011-10-22T23:02:00.000+02:00</published><updated>2011-10-22T23:02:20.103+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Clean Code 2</title><content type='html'>Ich hatte schonen einen Post zu Thema Clean Code geschrieben, da wurde ich auf das Buch Clean Code von&amp;nbsp;Robert C. Martin hingewiesen. Er beschreibt dort keine Techniken sondern eher Prinzipien, also mehr wie man Code schreibt. Immer wen ich mit Programmierern über das Thema sprach, ergaben sich lebhafte Diskussionen über einzelne Prinzipien. In meiner Arbeit sind mir viele der Dinge im Buch begegnet. Klassen mit generischen Namen wie Statistik. Jeder mit dem kennt eigene Episoden, die auch Teil dieses Buches sind. Deswegen gibt es an der einen oder anderen Stelle an der man sich wieder kennt. Es ist hervorragend für Diskussionen geeignet. Man kann das Buch auch quer lesen und wenn man genug Zeit hat auch sich die umfangreichen Codebeispiele ansehen. Das bedarf aber ,eist einer gewissen Überwindung. Dafür wird man dann aber auch meist mit einer neuen Einsicht belohnt.&lt;br /&gt;&lt;br /&gt;&lt;script charset="utf-8" src="http://ws.amazon.de/widgets/q?rt=ss_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=DE&amp;amp;ID=V20070822/DE/p0cf-21/8001/b69f6906-01f7-4b3e-80cf-77cebfa912c5" type="text/javascript"&gt; &lt;/script&gt; &lt;noscript&gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;A HREF="http://ws.amazon.de/widgets/q?rt=ss_mfw&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;ServiceVersion=20070822&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;MarketPlace=DE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;ID=V20070822%2FDE%2Fp0cf-21%2F8001%2Fb69f6906-01f7-4b3e-80cf-77cebfa912c5&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;Operation=NoScript"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Amazon.de Widgets&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/A&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&lt;/noscript&gt;&lt;br /&gt;Es ist aus meiner Sicht ein wichtiges Buch für alle Programmierer und unbedingt jedem zu empfehlen. Ich kann neben der englischen auch die deutsche Version empfehlen.&lt;br /&gt;&lt;script charset="utf-8" src="http://ws.amazon.de/widgets/q?rt=ss_mfw&amp;amp;ServiceVersion=20070822&amp;amp;MarketPlace=DE&amp;amp;ID=V20070822/DE/p0cf-21/8001/31cf259e-852a-421a-b153-44a98a3df25d" type="text/javascript"&gt; &lt;/script&gt; &lt;noscript&gt;&amp;amp;amp;amp;lt;A HREF="http://ws.amazon.de/widgets/q?rt=ss_mfw&amp;amp;amp;amp;amp;ServiceVersion=20070822&amp;amp;amp;amp;amp;MarketPlace=DE&amp;amp;amp;amp;amp;ID=V20070822%2FDE%2Fp0cf-21%2F8001%2F31cf259e-852a-421a-b153-44a98a3df25d&amp;amp;amp;amp;amp;Operation=NoScript"&amp;amp;amp;amp;gt;Amazon.de Widgets&amp;amp;amp;amp;lt;/A&amp;amp;amp;amp;gt;&lt;/noscript&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8344916853179938829?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8344916853179938829/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/10/clean-code-2.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8344916853179938829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8344916853179938829'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/10/clean-code-2.html' title='Clean Code 2'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3196283934408967424</id><published>2011-09-06T09:43:00.002+02:00</published><updated>2011-10-22T14:50:44.433+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Politik'/><title type='text'>Onlinepetition zum Thema Vorratsdatenspeicherung</title><content type='html'>Ich habe ja nichts zu verbergen, also warum sollen meine Daten denn nicht gespeichert werden. Das ist wohl die bekannteste Meinung zu diesem Thema. Aber die Verdachtslose Speicherung &amp;nbsp;von Onlinedaten lässt sich per Knopfdruck in ein Überwachunginstrument verwandeln und Überwachung ist der erste Schritt zur Abschaffung der Freiheit, im Internet wie auch in der realen Welt.&lt;br /&gt;&lt;br /&gt;Auch der renommierte Chaos Computer Club (CCC) bezieht zum Thema &lt;a href="https://www.ccc.de/de/updates/2011/ende-VDS"&gt;Vorratsdatenspeicherung&lt;/a&gt; deutlich Stellung. Der CCC lehnt die Vorratsdatenspeicherung ab.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Darum denkt darüber nach und macht mit, unterzeichnet die Onlinepetition zum&amp;nbsp;&lt;a href="https://epetitionen.bundestag.de/index.php?action=petition;sa=details;petition=17143"&gt;Verbot der Vorratsdatenspeicherung&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3196283934408967424?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3196283934408967424/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/09/onlinepetition-zum-thema.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3196283934408967424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3196283934408967424'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/09/onlinepetition-zum-thema.html' title='Onlinepetition zum Thema Vorratsdatenspeicherung'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1731189177483505050</id><published>2011-08-30T22:04:00.002+02:00</published><updated>2011-09-06T09:29:38.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Welche Stadt ist die IT Hauptstadt Deutschlands 2011</title><content type='html'>Hauptstädte gibt es viele, jedes Land hat eine Hauptstadt. Das Verbrechen hat eine Hauptstadt, Frankfurt. Aber welche ist die IT Hauptstadt Deutschlands. Eine Suche zum Thema bei Google bring nur PR-Informationen. Aber wir können auch anders, die Zugriffsdaten lüften das Geheimnis. Die IT Hauptstadt Deutschlands ist ... nein, nicht Berlin sondern das Rhein-Ruhr-Gebiet (Köln, Dortmund, Düsseldorf, ...). Also genauer gesagt die Java Hauptstadt ist die Rhein-Ruhr-Region im Jahr 2011 dicht gefolgt vom&amp;nbsp;Berlin und&amp;nbsp;München. Auch wenn man die Daten des Umlands der Metropolen mit einbezieht, bleibt das Rhein-Ruhr-Gebiet vor Berlin und&amp;nbsp;München. Mit Abstand folgen Hamburg und Frankfurt. Interessant ist, dass 2010 die Reihenfolge leicht anders war. Sie war&amp;nbsp;Rhein-Ruhr-Gebiet, München, Berlin, Frankfurt, Hamburg.&lt;br /&gt;&lt;br /&gt;Die Daten sind Zugriffsdaten des Blogs und damit nur bedingt übertragbar, aber sie zeichnen gut ein Bild über die Verteilung der Software-Industrie (Java) in Deutschland. Was die Daten auch zeigen, dass es ganze Regionen in Deutschland existieren, in denen die Softwareentwicklung keine Rolle spielt.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://de.wikipedia.org/wiki/Metropolregion#Liste_der_Metropolregionen_in_Deutschland"&gt;http://de.wikipedia.org/wiki/Metropolregion#Liste_der_Metropolregionen_in_Deutschland&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1731189177483505050?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1731189177483505050/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/08/it-hauptstadt-2011-der-republik.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1731189177483505050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1731189177483505050'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/08/it-hauptstadt-2011-der-republik.html' title='Welche Stadt ist die IT Hauptstadt Deutschlands 2011'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1035350520386784911</id><published>2011-07-11T11:15:00.000+02:00</published><updated>2011-07-11T11:15:06.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>SVN Server aufsetzen</title><content type='html'>Codemanagement ist ein Grundbaustein fürs Projektmanagement. Die meisten Unternehmen betreiben eigene Server fürs Codemanagement. Mache sogar Mehrere. Aber auch hier gilt, viel hilft nicht viel. Private Projekte liegen oft bei Sorce Forge oder ähnlichen Anbietern. Aber man kann auch in 5 Minuten einen eigenen Server fürs Codemanagement aufsetzen. Im Internet gibt es eine Vielzahl von mehr oder weniger guten Anleitungen:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.freshblurbs.com/setting-subversion-5-minutes"&gt;http://www.freshblurbs.com/setting-subversion-5-minutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://debassociates.com/subversion-on-windows-zero-to-version-control-in-5-minutes/"&gt;http://debassociates.com/subversion-on-windows-zero-to-version-control-in-5-minutes/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Aber es geht noch schneller:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.tonyspencer.com/2007/03/02/setup-a-subversion-server-in-4-minutes/"&gt;http://www.tonyspencer.com/2007/03/02/setup-a-subversion-server-in-4-minutes/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1035350520386784911?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1035350520386784911/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/07/svn-server-aufsetzen.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1035350520386784911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1035350520386784911'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/07/svn-server-aufsetzen.html' title='SVN Server aufsetzen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8035711352784391182</id><published>2011-07-01T14:45:00.000+02:00</published><updated>2011-07-01T14:45:09.987+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Vergleich von Build Systemen: Ant, Maven und Grandle</title><content type='html'>JAXenter versucht sich an einem besonderen Vergleich, es wurde versucht die Build Systeme Ant, Maven und Grandle zu vergleichen (&lt;a href="http://it-republik.de/jaxenter/news/Interaktiver-Build-Vergleich-Maven-vs.-Ant-vs.-Gradle-055697.html"&gt;Link&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Dabei wurden einige Argumente vorgebracht die nicht richtig sind.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ant arbeitet sequenziell aber es ist sehr einfach mehrere Tasks zu parallelisieren.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Maven kann ab Version 3 auch mehrere Task benutzen (&lt;a href="http://programming-2.blogspot.com/2010/12/maven-3.html"&gt;Link&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;Ant und Maven arbeiten auch inkrementell.&lt;/li&gt;&lt;li&gt;Maven ist auch in der Lage Ant in den Build einzubeziehen. Wenn auch in Grenzen (&lt;a href="http://programming-2.blogspot.com/2009/04/integration-von-ant-in-maven.html"&gt;Link&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Trotz dieser kleinen Patzer ist es trotzdem nicht uninteressant die Artikel in JAXenter zu lesen.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8035711352784391182?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8035711352784391182/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/07/vergleich-von-build-systemen-ant-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8035711352784391182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8035711352784391182'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/07/vergleich-von-build-systemen-ant-maven.html' title='Vergleich von Build Systemen: Ant, Maven und Grandle'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5383398107677679072</id><published>2011-06-29T19:44:00.000+02:00</published><updated>2011-06-29T19:44:09.120+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven: Build Jar with Dependencies</title><content type='html'>Um eine Applikation zu bauen die aus nur einer JAR-Datei besteht nahm ich früher das Maven Shade Plugin (&lt;a href="http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html"&gt;http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html&lt;/a&gt;). Dies geht auch einfacher mit Hilfe des, nein nicht des JAR Plugins, sondern mit Hilfe des Maven Assembly Plugins (maven-assembly-plugin). Das sieht dann wie folgt aus:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-7XiQn8VQrdI/TgtkKj1kC6I/AAAAAAAAAMo/G6ejY7xmfig/s1600/maven_assembly.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-7XiQn8VQrdI/TgtkKj1kC6I/AAAAAAAAAMo/G6ejY7xmfig/s1600/maven_assembly.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-style-span" style="color: #009594;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5383398107677679072?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5383398107677679072/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/06/maven-build-jar-with-dependencies.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5383398107677679072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5383398107677679072'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/06/maven-build-jar-with-dependencies.html' title='Maven: Build Jar with Dependencies'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-7XiQn8VQrdI/TgtkKj1kC6I/AAAAAAAAAMo/G6ejY7xmfig/s72-c/maven_assembly.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5865179457425752291</id><published>2011-05-27T10:06:00.001+02:00</published><updated>2012-01-21T17:36:44.665+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Integration'/><title type='text'>Continuous Integration: Hudson</title><content type='html'>Brown Field Projekte sind oft in einem schlechten Zustand, oft wissen die Beteiligten gar nicht wie es um ein Projekt steht, oft haben sie nur eine Ahnung oder ein Gefühl. Um Brown Field Projekte unter Kontrolle zu bringen und Wartbarkeit, Qualität und Sicherheit zu erhöhen wird bei Brown Field Projekten als eine der ersten Massnahmen Continuous Integration (CI) etabliert. Zurzeit sind eine Reihe von CI-Systemen verfügbar. Dazu zählen die populären Systeme:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://continuum.apache.org/"&gt;Continuum &lt;/a&gt;von Apache&lt;/li&gt;&lt;li&gt;&lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cruisecontrol.sourceforge.net/"&gt;Cruise Control&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Alle drei Systeme eignen sich für Java-Projekte, sind aber offen und flexibel auch andere Programmiersprachen zu unterstützen. Der prinzipille Ablauf ist folgender:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Auschecken des Projektes aus der Codeverwaltung (CVS, SVN)&lt;/li&gt;&lt;li&gt;Build des Projektes (Maven, ANT)&lt;/li&gt;&lt;li&gt;Benachrichtung von Benutzern über das Ergebnis (Email)&lt;/li&gt;&lt;/ul&gt;In den Klammern hinter den Schritten stehen die populärsten Vertreter für diese Schritte. Sie werden in der Regel von allen CI-Systemen unterstützt. Oft unterstützen die CI-Systeme auch noch andere Systeme.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Continuum 1.3.7&lt;/u&gt; &lt;br /&gt;Auf meinem Testrechner lief ein aktuelles Windows 7. Continuum ist sowohl aus Webapp für Tomcat als auch als Standalone-Version verfügbar. Letztere probierte ich zu installieren und zu benutzen. Leider liess sich Continuum nicht starten und eine Beschreibung war nicht zu finden. Das ist das AUS für Contiunuum. Continuum macht sonst den Eindruck sehr stark auf Maven zu fokussieren, also ist Continuum ein Tipp für alle Maven Benutzer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Hudson 2.0&lt;/u&gt; &lt;br /&gt;Auf meinem virtuelle Testrechner lief ein Fedora 14 Linux. Zusätzlich habe ich JAVA, ANT und Maven2 installiert. Leider ist keiner der CI-Systeme per YUM zu installieren. Schade, doch Hudson lies sich einfach von der Website über einen Link aus installieren. Das funktionierte sehr gut. Auch bei Hudson entschied ich mich für die Standalone-Variante. Nach der Installation lief Hudson schon als Demon, nur leider funktionierte Hudson nicht ganz, die Weboberfläche (http://localhost:8080) war da, liess sich aber nicht benutzen. Nach einem manuellen Start von Hudson als Root funktionierte alles.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/etc/init.d/hudson stop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;java -jar /usr/lib/hudson/hudson.war&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Strg+C&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/etc/init.d/hudson start&lt;/span&gt;&lt;br /&gt;Ich konnte Jobs einrichten und abarbeiten. Für den Zugriff aus CVS musst ich das Passwort und den Benutzernamen in Feld CVSROOT eingeben. Je nach dem wer (Root oder User) und wie (Demon oder Terminal) Hudson gestartet wird legt Hudson eine Verzeichnisstruktur an verschieden Orten auf dem Volume an. Also nicht erschrecken, wenn ihr Hudson als User startet und nicht die Jobs seht, die ihr vorhin angelegt habt, wahrscheinlich lief Hudsun da als Demon, also Huson beenden und als Demon neu starten. Dann ist alles wieder OK. &lt;br /&gt;Zur CVS Integration kann Hudson auch die Datei &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.cvspass&lt;/span&gt; benutzen, das funktioniert aber nur eingeschränkt. So kann Hudson als Demon gestartet trotz richtiger Dateirechte nicht auf die &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.cvspass&lt;/span&gt; eines Benutzers zugreifen.&lt;br /&gt;Ein schönes Feature ist auch die Möglichkeit von Hudson Programme wie ANT oder Maven selbständig aus dem Internet zu laden und sogar in verschiedenen Versionen dem Benutzer anzubieten. Auch wenn Fedora über ein aktuelles ANT verfügt ist es trotzdem zu empfehlen, das ANT via Hudson zu installieren, die erhöht die Konsistenz in der Softwareentwicklung und elemeniert ein potentielle Fehlerquelle, unterschiedliche ANT oder Maven Versionen.&lt;br /&gt;Trotz dieser Hürden schien Hudson gut zu funktionieren, bis ich versuchte die Plugins zu aktualisieren. Dabei wurde meine Hudson Installation so beschädigt, dass Hudson nicht mehr zum Arbeiten zu überreden war. Schade.&lt;br /&gt;Trotz dieser hidden Features ist Hudson zu empfehlen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5865179457425752291?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5865179457425752291/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/05/continuous-integration-hudson.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5865179457425752291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5865179457425752291'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/05/continuous-integration-hudson.html' title='Continuous Integration: Hudson'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6599995307098193903</id><published>2011-05-15T19:02:00.001+02:00</published><updated>2011-05-15T19:02:00.190+02:00</updated><title type='text'>Java Performance Tipp Nummer 1</title><content type='html'>Die einfachste Möglichkeit die Geschwindigkeit von Java-Anwendungen zu erhöhen besteht darin, die aktuelle JVM zu verwenden. Es gibt einen deutlichen Performanceunterschied zwischen den zur Zeit gebräuchlichen Java-Versionen. Leider sind meine Bio-Benchmarkergebnisse (DNA Alignment) nicht mehr existent aber unter folgenden Links sind ähnliche Tests und Aussagen zu finden. Java 7 ist schneller als Java 6. Java 6 ist schneller als Java 5. Die Unterschiede sind größer als 10%, d.h. ein Update auf die aktuelle Java-Version lohnt sich auf jeden Fall.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/"&gt;http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/performance/reference/whitepapers/6_performance.html"&gt;http://java.sun.com/performance/reference/whitepapers/6_performance.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6599995307098193903?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6599995307098193903/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/05/java-performance-tipp-nummer-1.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6599995307098193903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6599995307098193903'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/05/java-performance-tipp-nummer-1.html' title='Java Performance Tipp Nummer 1'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5566177498028648983</id><published>2011-05-14T19:18:00.000+02:00</published><updated>2011-05-14T19:18:00.764+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Codeoptimierung: Wurzel allen Übels</title><content type='html'>Das erste mit dem Softwareentwickler in Projekten anfangen, ist die Optimierung ihres Codes. Wahrscheinlich dient dies als Beweis ihres Könnens. Klar, Optimierungen sind sind immer ein Fall für erfahrenen Entwickler.  Aus diesem Grund ist dieses Streben nach optimiertem Code von Beginn an verständlich. Nur was nützt schneller (dazu kommen wir in einem andern Post) Code der schnell Fehler produziert aber nicht die gewünschte Funktion? Durch die aufwendige Fehlersuche und Fehlerbehebung kostet das oben beschriebene Vorgehen mehr Entwicklungszeit im Vergleich zum normalen Entwickeln. Was lernen wir daraus, Optimierungen sind prima, wenn man sie nicht macht.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson&lt;/blockquote&gt;&lt;br /&gt;Aus agiler Entwicklungssicht sind Optimierungen erst notwendig, wenn sie &lt;b&gt;notwendig&lt;/b&gt; sind. Optimierungen sind Teil des Refactoringprozesses in der agilen Softwareentwicklung. Wichtiger ist die Verständlichkeit und die Wartbarkeit des Codes. Aber zurück zur Optimierung, der erste Schritt bei der Optimierung ist es, festzustellen das es ein Problem gibt, dass durch Optimierung gelöst werden kann, der zweite Schritt ist es das entsprechende Verhalten der Software zu dokumentieren und ein Testset aufzubauen mit dem die Ergebnisse nachvollziehbar sind. Im dritten Schritt wird das Problem analysiert (Profiling) und die beste Stelle (Bottleneck) zur Optimierung gefunden. Erst im vierten Schritt wird der Code optimiert. Dann wird der Effekt der Optimierung mittels des Testsets dokumentiert (fünfter Schritt). Die Optimierung von Code besteht aus folgenden Schritten:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Feststellen und Dokumentieren das es ein Problem gibt.&lt;/li&gt;&lt;li&gt;Definieren eines Testsets und Dokumentieren der Ergebnisse für den nichtoptimierten Code.&lt;/li&gt;&lt;li&gt;Analyse des Problems z.B. mittels Profilings und finden der Codestelle für die Optimierung.&lt;/li&gt;&lt;li&gt;Optimieren des Codes.&lt;/li&gt;&lt;li&gt;Dokumentation der Ergebnisse des optimierten Codes mit Hilfe des Testsets.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Und eins sollte man nie vergessen, die Entwicklungszeit die in eine Optimierung fliesst, muss durch den Optimierungsgewinn gerechtfertigt sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5566177498028648983?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5566177498028648983/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/05/codeoptimierung-wurzel-allen-ubels.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5566177498028648983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5566177498028648983'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/05/codeoptimierung-wurzel-allen-ubels.html' title='Codeoptimierung: Wurzel allen Übels'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1046831008560467152</id><published>2011-02-07T20:35:00.002+01:00</published><updated>2011-05-11T08:56:17.742+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Broken-Window-Theorie und Null-Tolleranz-Strategie bei der Softwareentwicklung</title><content type='html'>Für Alle die nicht mit den Themen vertraut sind, hier eine Minimaleinführung. Die Broken-Window-Theorie kann erklären wie Kleinigkeiten z.B. ein zerbrochenes Fenster zu Verwahrlosung eines Hauses, des Stadtviertels führen. Darauf aufbauend wurde von der New Yorker Polizei die Zero-Toleranz-Strategie angewandt, die kleinste Vergehen  konsequent angeht und damit der Verwahrlosung schon in deren Entstehung begegnet. Dies ist ein effektive Strategie zur Verhinderung solcher Missstände.&lt;br /&gt;&lt;br /&gt;Was hat die mit Softwareentwicklung zu tun? Dazu folgendes. Wenn ein neuen Entwickler zu einem bestehenden Projekt kommt und anfägt Code zu schreiben, dann setzt er den Code nicht nur so um, wie er es für richtig hält, sondern der bestehende Code wirkt sich auf ihn aus. Wenn also der bestehende Projektcode in einem suboptimalen Zustand ist, dann wirkt sich dieses Manko auf alle Programmierer aus. Sie werden zusehens schlechteren Code abliefern, im schlimmsten Fall kann dies zu einer negativen Abwärtsspirale führen. Als Gegenmassnahmen gibt es zwei Dinge. Erstens, der Code muss aufgeräumt werden und zwar sofort. Selbst Kleinigkeiten im Code korrigiert müssen korrigiert werden. Und Zweitens, dass man Code-Review auf Basis der Null-Toleranz-Strategie fahren muss. Mit Hilfe dieser beiden Verfahren ist es möglich eine &lt;i&gt;gewachsene&lt;/i&gt; Code-Basis für zukünftige Erweiterungen fit zu machen. Aus einer anderen Perspektive, ohne Aktives Gegensteuern im Bereich der Softwarequalität werden schlechte Softwareprojekte schlechter. Diese Erkenntnis ist nicht neu, aber man kann sie mit Hilfe der Broken-Window-Theorie erklären und damit kennt man auch die Gegenmaßnahmen. Und so können Programmierer der New Yorker Polizei dankbar sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1046831008560467152?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1046831008560467152/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2011/02/broken-window-theorie-und-null.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1046831008560467152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1046831008560467152'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2011/02/broken-window-theorie-und-null.html' title='Broken-Window-Theorie und Null-Tolleranz-Strategie bei der Softwareentwicklung'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6033634836337382832</id><published>2010-12-15T23:06:00.001+01:00</published><updated>2010-12-15T23:07:52.242+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offtopic'/><title type='text'>Bin ich ein Nerd?</title><content type='html'>Ja, ich glaube schon. Bist du auch ein Nerd? Wenn du diesen Blog liest, dann mit Sicherheit aber du kannst es, um ganz ganz sicher zu gehen, selbst testen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nerdtests.com/ft_nq.php"&gt;&lt;br /&gt;&lt;img src="http://www.nerdtests.com/images/ft/nq/4fbf3d9fe6.gif" alt="I am nerdier than 97% of all people. Are you a nerd? Click here to take the Nerd Test, get nerdy images and jokes, and write on the nerd forum!"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6033634836337382832?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6033634836337382832/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/12/bin-ich-ein-nerd.html#comment-form' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6033634836337382832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6033634836337382832'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/12/bin-ich-ein-nerd.html' title='Bin ich ein Nerd?'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3971997881615535707</id><published>2010-12-13T20:34:00.000+01:00</published><updated>2010-12-13T20:34:05.049+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven 3</title><content type='html'>Von vielen unbemerkt kam ein Major Release von Maven heraus, Maven 3. Ich habe es auch nicht bemerkt, dass ich es schon nutzte. Nach der Installation des Eclipse-Plugins m2eclipse in meinem Brandneuen Eclipse Indigo M4 hatte ich es mir schon eingefangen und nicht bemerkt. Das wichtigste zuerst, Maven 3 ist kompatibel zu Maven 2. Auch bei m2eclipse ändert sich nicht.&amp;nbsp;Die Mavenentwickler haben sich einiger Kritikpunkt angenommen, z.B. der miserablen Maven Performance. Jetzt neu, Maven 3 arbeitet inkrementel, d.h. es wird nicht immer ein Clean Build gemacht, sondern nur geänderte Dateien aktualisiert des weiteren kann Maven jetzt auch parallel arbeiten. Mittels des Kommandozeilenparameters &lt;b&gt;-T&lt;/b&gt; arbeitet Maven mit mehren Threads. Wie schnell Maven jetzt ist kann nur ein direkter Vergleich zeigen. Auf jeden Fall verkürzt hier Maven 3 den Unterschied zu ANT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3971997881615535707?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3971997881615535707/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/12/maven-3.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3971997881615535707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3971997881615535707'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/12/maven-3.html' title='Maven 3'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3000784050068077319</id><published>2010-12-10T10:05:00.001+01:00</published><updated>2010-12-10T10:32:23.081+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Die 10 typische Fehler in Programmierung</title><content type='html'>Auf der Seite JAXenter gibt es eine Video&amp;nbsp;&lt;i&gt;10 typische Fehler in Enterprise-Java-Anwendungen&amp;nbsp;&lt;/i&gt;(&lt;a href="http://it-republik.de/jaxenter/news/10-typische-Fehler-in-Enterprise-Java-Anwendungen-057701.html?save=1&amp;amp;error=1#commentForm"&gt;Link&lt;/a&gt;). Trotz einiger Ecken und Kanten ist dieser Vortrag von Eberhard Wolff (Spring Source) interessant. An einigen Stellen wünscht man sich weitergehende Informationen. Aber innerhalb der Zeit kann er die Problemfelder (Unit Tests, SQL Injection, Dependencies) nur anreissen. Ich hatte das Gefühl, dass diese Themenfelder aus der Praxis kommen und sie bringen mich dazu über meinen Code nachzudenken. Leider ist der Vimeo-Player nicht ganz fehlerfrei, das ist leider ein kleiner Anstrich.&lt;br /&gt;&lt;br /&gt;Vielleicht sollte ich auch mal eine Liste meiner 10 beliebtesten Programmierfehler machen. Ich nehme auch gerne Vorschläge entgegen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3000784050068077319?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3000784050068077319/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/12/die-10-typische-fehler-in.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3000784050068077319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3000784050068077319'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/12/die-10-typische-fehler-in.html' title='Die 10 typische Fehler in Programmierung'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6174448332112852038</id><published>2010-12-06T21:46:00.001+01:00</published><updated>2010-12-07T08:42:54.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><title type='text'>Erste Eindrücke vom Tomcat 7</title><content type='html'>Zur Zeit teste ich wieder verschiedene neue Betaversionen bekannter Porgramme, so Eclipse Indigo und Tomcat 7 (7.0.5 beta). Tomcat 7 setzt jetzt eine Java 6 SE voraus. Zuerst fällt auf, das die Startseite des Tomcats überarbeitet wurde und ein wenig moderner anmutet. An den anderen Seiten, z.B. die des Managers hat sich grafisch nichts geändert. Allerdings wurde die Rolle des Managers aufgeteilt. Es gibt jetzt die Rollen &lt;i&gt;manager-gui&lt;/i&gt; (dieser entspricht dem klassischen Manager), einen&amp;nbsp;&lt;i&gt;manager-status,&lt;/i&gt;&amp;nbsp;&amp;nbsp;einen &lt;i&gt;manager-script&lt;/i&gt; und einen &lt;i&gt;manager-jmx&lt;/i&gt;. Auch der Manager wurde unterteilt in manager-gui und manager-script. Daneben wurde noch einige Kleinigkeiten geändert (siehe&amp;nbsp;&lt;a href="http://tomcat.apache.org/migration.html"&gt;Link&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6174448332112852038?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6174448332112852038/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/12/erste-eindrucke-vom-tomcat-7.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6174448332112852038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6174448332112852038'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/12/erste-eindrucke-vom-tomcat-7.html' title='Erste Eindrücke vom Tomcat 7'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8103415499361678261</id><published>2010-12-03T20:02:00.003+01:00</published><updated>2010-12-03T20:04:14.132+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Java 7 auf dem Mac</title><content type='html'>Nachdem Apple angekündigt hat, Java auf dem Mac nicht mehr selbst auszuliefern, hat jetzt Oracle in einer Pressemitteilung bekannt gegeben, dass ab Java 7, Oracle Java-Distributionen für Mac OS X bereitstellen wird (&lt;a href="http://www.oracle.com/us/corporate/press/186701"&gt;Link&lt;/a&gt;).&lt;br /&gt;Aus meiner Sicht ist dies wieder ein Schritt hin zu der Aussage von Steve Jobs, Mac OS X sein die beste Plattform zur Javaentwicklung. Jetzt mit Hilfe von Oracle. Aber es ist schon erstaunlich wie viele Javaentwickler auf einem Mac arbeiten. Nebenbei bemerkt, die Java 7 Beta (OpenJDK), die ich unter Fedora getestet habe, waren erstaunlich schnell. Und obwohl es sich um eine Beta handelte, war sie in einigen Belangen schneller als Java 6 von Sun. Dies lässt natürlich auf einen kleinen, zusätzlichen Geschwindigkeitsschub beim finalen Java 7 hoffen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8103415499361678261?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8103415499361678261/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/12/java-7-auf-dem-mac.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8103415499361678261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8103415499361678261'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/12/java-7-auf-dem-mac.html' title='Java 7 auf dem Mac'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-2503308071423275989</id><published>2010-11-26T11:28:00.006+01:00</published><updated>2010-11-30T20:28:18.002+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Optimierung von Endrekursionen in Java</title><content type='html'>In meinem letzten Post (&lt;a href="http://programming-2.blogspot.com/2010/11/funktionale-programmierung-mit-java.html"&gt;Funktionale Programmierung mit Java&lt;/a&gt;) musst ich noch zugeben, dass ich nicht wusste ob Java Optimierungen von Endrekursionen (Tail Recursion) beherrscht. Nach einem kleinen Test, kann ich sagen, das Java 1.6 diese Optimierung beherrscht. Getestet habe ich mit:&lt;br /&gt;&lt;br /&gt;j&lt;i&gt;ava version "1.6.0_22"&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Java(TM) SE Runtime Environment (build 1.6.0_22-b04-307-10M3261)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03-307, mixed mode)&lt;/i&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Der optimierte Code läuft um den Faktor &lt;b&gt;4&lt;/b&gt; bis&amp;nbsp;&lt;b&gt;5&lt;/b&gt; schneller. Dies ist enorm! Beim Code handelt es sich um eine modifizierte Version von &lt;a href="http://blackflash.nordic-dev.de/endrekursion"&gt;Blackflash&lt;/a&gt;&amp;nbsp;(Andre Mölle). Andre Mölle vergleicht funktionale Programmierung in Java und anderen Programmiersprachen mit und ohne&amp;nbsp;Endrekursionen (&lt;a href="https://docs.google.com/leaf?id=0B7DFVEImG3MGOTI1MjQ3YWQtODBiZi00NGVkLTk1Y2UtZmI0MTliMzAwNjAy&amp;amp;hl=de"&gt;Link&lt;/a&gt;). Bei ihm gab es keine Unterschiede zwischen optimiertem und nicht optimiertem Code. Was aber an verschiedenen Dingen liegen kann. Mein Ergebnis steht damit im Widerspruch zu dem Ergebnis von Andre Mölle aus dem Jahr 2008. Man kann diese Unterschiede mit verschiedenen Versionen der Java VM/Compiler begründen. Leider habe ich kein passendes Dokument von Sun/Oracle zu diesem Thema gefunden.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Mit diesem Ergebnis können auch imperative, normale Programmierer ihren Code optimieren, in dem sie ihre rekursiven Funktionen endrekursiv umbauen. Noch ein Tip zu letzt, &amp;nbsp;bei Java ist natürlich die Vergrösserung des Stacks der JVM (-Xss) wichtig, wenn man mit Rekursionen arbeitet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-2503308071423275989?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/2503308071423275989/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/11/optimierung-von-endrekursionen-in-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2503308071423275989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2503308071423275989'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/11/optimierung-von-endrekursionen-in-java.html' title='Optimierung von Endrekursionen in Java'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-2564932698491763274</id><published>2010-11-26T09:49:00.003+01:00</published><updated>2010-11-26T17:33:41.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Funktionale Programmierung mit Java</title><content type='html'>Java zählt zu den imperativen Programmiersprachen, wie die meisten verbreiteten Programmiersprachen. Was ich beim schreiben von Java-Methoden anstrebe, ist die Vermeidung jeglicher Seiteneffekte, d.h. eine Methode benutzt nur die Übergabeparameter. Dies erhöht erheblich die Verständlichkeit und die Wartbarkeit des Codes. Damit kann man solche Methoden als statisch deklarieren. Damit bezieht sich Methode nicht mehr auf Objekt sondern auf die Klasse. Damit könnte man die Methode auch an einen beliebigen Ort verschieben, davon rate ich im Allgemeinen ab, weil dies der Verständlichkeit des Codes abträglich wäre. Ich nenne diese Art der Programmierung &lt;i&gt;neoprozedurale&lt;/i&gt; Programmierung. Beim Einhalten dieses simplen Paradigmas wird man sehen, dass sich sowohl der Code als auch die Denkweise des Programmierers sich positiv verändert. Wenn man bei Webservices den Transportaspekt vernachlässigt, dann erinnert die neoprozedurale Programmierung an die Webservice-Idee. Wenn man dann die neoprozedurale Programmierung mit dem Test-Driven-Programming kombiniert, kommt man der funktionalen Programmierung schon näher. Aber funktionale Programmierung ist mehr. Ein leichte, praktische Einführung gibt im Blog von Alexander Pohl&amp;nbsp;&lt;a href="http://www2.pms.ifi.lmu.de/mitarbeiter/pohl/nblogn/?p=387"&gt;N blog N&lt;/a&gt;. Was für ein toller Name für ein Blog, ich bin neidisch, das so ein Name nicht auch mir eingefallen ist. Welche Frage ich mir stelle, ist die funktionale Programmierung ein Ziel der agilen Softwareentwicklung? Ich höre jetzt die HASKELL-Programmierer schon lästern. Und die Java- und C-Programmierer werden&amp;nbsp;schimpfen&amp;nbsp;über die Verschwendung von Speicherplatz (Ups, Stack Overflow: also -Xss benutzen) und Rechenzeit, wenn man Schleifen durch Rekursionen ersetzt. Dem kann ich natürlich die Optimierung von Endrekursionen (Tail Recursion) entgegenhalten, allerdings weiss ich nicht ob Java (Compiler, JVM) solche Optimierungen macht. Ich bin mir nicht ganz sich, was der aktuelle Stand bei Java ist, aber es steht bei OpenJDK (Da Vinci Machine) auf dem Plan (&lt;a href="http://openjdk.java.net/projects/mlvm/subprojects.html#TailCalls"&gt;Link&lt;/a&gt;). Ich bin gespannt, wie es weitergeht. Ich würde mir wünschen, Java in eine Art funktionalen Compiler-Modus zu versetzen um in Java funktional zu programmieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-2564932698491763274?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/2564932698491763274/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/11/funktionale-programmierung-mit-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2564932698491763274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2564932698491763274'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/11/funktionale-programmierung-mit-java.html' title='Funktionale Programmierung mit Java'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-2765659202606032442</id><published>2010-11-25T12:56:00.000+01:00</published><updated>2010-11-25T12:56:14.838+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Au weia, ich habe die falsche Datei überschrieben ...</title><content type='html'>was nun, ich habe eine wichtige Datei im Projekt überschrieben und im Subversion liegt auch nur eine alte Version. Eclipse liegt lokale Kopien von den Daten an die man bearbeitet. Wenn man eine solche lokale Kopie wiederherstellen will, muss man im Package Explorer einen Rechtsklick auf die Datei machen und dann in das Menü &lt;i&gt;Restore from Local History ...&lt;/i&gt; (siehe Bild).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/TO5MkwisUpI/AAAAAAAAALY/NFg1jG6UboA/s1600/localhistory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_9ca3NMTRST4/TO5MkwisUpI/AAAAAAAAALY/NFg1jG6UboA/s320/localhistory.png" width="177" /&gt;&lt;/a&gt;&lt;/div&gt;Damit hat man das erste Problem gelöst, aber da hinter jedem kleinen Problem ein grosses Problem steckt, muss auch dieses Problem gelöst werden. Es zeigt sich also, dass die Richtlinien fürs Codemanagement unvollständig sind oder unzureichend umgesetzt werden. In der Regel gilt, nach jeden Bug Fixing, nach jeden Feature oder nach jedem Refactoring sollte das SVN Repository aktualisiert werden.&amp;nbsp;Übrigens kann man auch sehr einfach ein lokales SVN aufsetzen (&lt;a href="http://www.tonyspencer.com/2007/03/02/setup-a-subversion-server-in-4-minutes/"&gt;Setup a Subversion Server in 4 Minutes&lt;/a&gt;).&amp;nbsp;Wenn sich dies nur schwierig im eigenen Entwicklungsprozess umsetzen lässt, dann sollte man einen Blick auf &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; werfen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-2765659202606032442?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/2765659202606032442/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/11/au-weia-ich-habe-die-falsche-datei.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2765659202606032442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2765659202606032442'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/11/au-weia-ich-habe-die-falsche-datei.html' title='Au weia, ich habe die falsche Datei überschrieben ...'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9ca3NMTRST4/TO5MkwisUpI/AAAAAAAAALY/NFg1jG6UboA/s72-c/localhistory.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7389718315197232367</id><published>2010-10-14T09:47:00.006+02:00</published><updated>2010-11-17T08:42:29.360+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Verbreitung der Programmiersprache Java</title><content type='html'>Wenn ein Softwareprojekt ansteht, steht auch immer die Frage mit welcher Programmiersprache soll es umgesetzt werden. Oft wird die Programmiersprache dafür gewählt, für die es im Haus verfügbare Programmierer gibt. Und trotz dieser pragmatischen Antwort bleibt diese Frage. Wenn dies aber eine offene Frage ist, kann man anfangen das Problem mit allen Programmiersprachen zu vergleichen, um die beste Programmiersprache zu finden. Auch wenn man sich einschränkt ist dies eine sehr Zeitaufwendige Untersuchung. Unklar ist auch ob man alle Aspekte des Problems kennt um objektiv die richtige Programmiersprache zu wählen. Ich behaupte, das es nicht möglich ist alle Aspekte und Informationen vor der Beendigung des Projektes zu kennen. Daher bin ich ein&amp;nbsp;Verfechter der Agilen Softwareentwicklung, die flexibel mit wechselnden Anforderungen umgehen kann.&amp;nbsp;Mit dieser Erkenntnis kann man andere Kriterien für die Auswahl einer Programmiersprache heranziehen. Wenn man davon ausgeht das alle Programmiersprachen ähnlich leistungsfähig sind, kann man sich an dem Verbreitungsgrad einer Programmiersprache orientieren. Zu behaupten alle Programmiersprachen sind gleich leistungsfähig ist eine sehr grobe Vereinfachung, die aber aber für die wichtigsten Programmiersprachen ein zulässige Annahme ist. So lassen sich Java, C++ oder C# im Allgemeinen als äquivalent betrachten. Dazu kommt, dass der Verbreitungsgrad von Programmiersprachen sich gut ermitteln lässt. Bei Heise Jobs 2010 (&lt;a href="http://www.heise.de/jobs/artikel/Wer-verdient-wie-viel-981845.html?artikelseite=8"&gt;http://www.heise.de/jobs/artikel/Wer-verdient-wie-viel-981845.html?artikelseite=8&lt;/a&gt;) liegt Java bei 17,3% auf Platz 1 und C++ bei 7,4%. Bei Tiobe ist die Nummer 1 Java mit 18% vor C mit 17% gefolgt von C++ mit 9,8% (&lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html&lt;/a&gt;). Bei Gulp liegt Java derzeit (09/2010) bei ca. 16%, C bei 9% und C++ bei nur 4%. Der Trend bei Gulp und Tiobe ist ähnlich, die Differenz lässt sich zu Teil dadurch erklären, dass bei Gulp nacht &lt;i&gt;Skills&lt;/i&gt; gefiltert wird, d.h. SQL hat dort eine Wert von 13%, wohingegen SQL bei Tiobe nicht separat aufgeführt wird. Trends bei den Programmiersprachen werden bei Tiobe direkt angegeben, auch bei Gulp kann man Trendanalysen durchführen. Bei Gulp fällt auf, dass die Angaben zu einer Programmiersprache stark zeitlich schwanke, für genaue Aussagen, müsste man die Gulp-Daten statistisch bearbeiten. In diesem Zusammenhang interessant sind die Nutzungswerte der Usenet Gruppe Java (siehe Bild).&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_9ca3NMTRST4/TLaw2TknM0I/AAAAAAAAAKg/PJH6_B5H47Q/s1600/usenet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="http://1.bp.blogspot.com/_9ca3NMTRST4/TLaw2TknM0I/AAAAAAAAAKg/PJH6_B5H47Q/s400/usenet.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Danach erreichte Java seinen Höhepunkt im Jahr 2002 und ist bis 2010 deutlich geschrumpft. Bei Gulp erreichte Java seine grösste Popularität im Jahr 2000. Dies betrifft nicht nur Java sondern auch andere etablierte Programmiersprachen wie C. C erreicht bei Gulp im Jahr 1999 seine maximale Beliebtheit. 1999 ist dabei das erste verfügbare Jahr in Gulp. Ob diese Rückgänge real oder nur Prozentual auf Grund sich neu etablierender Programmiersprachen ist, ist nicht zu ermitteln. Aber die zunehmende Diversität der Programmiersprachen ist sicher ein Grund für die prozentualen Rückgänge bei Gulp und die realen Rückgänge im Usenet. Bei den dramatisch erscheinenden Java Usenet Zahlen kommt hinzu, dass es auch bei den Hilfepunkten zu einer staken der Diversität z.B. durch Webforen kam. Bei Tiobe sind auch allgemein abnehmende Verbreitungsgrade festzustellen, aber entgegen dem Trend bei Gulp kann sich dort C im Langzeittrend (10 Jahre) besser behaupten und sogar Boden gut machen.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Abschliessend kann man sagen, dass es in den letzten 10 Jahren zu einer stark zunehmenden Diversität der Programmiersprachen kam. Trotzdem behaupten sich die wichtigen Sprachen wie Java oder C weiterhin. Diese neue Vielfalt der Programmiersprachen lädt dazu ein beim nächsten Projekt mal über alternative Programmiersprachen nachzudenken. Ein einfaches Auswahlkriterium könnte die Verbreitung der Sprache sein.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7389718315197232367?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7389718315197232367/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/10/verbreitung-von-java-als.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7389718315197232367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7389718315197232367'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/10/verbreitung-von-java-als.html' title='Verbreitung der Programmiersprache Java'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9ca3NMTRST4/TLaw2TknM0I/AAAAAAAAAKg/PJH6_B5H47Q/s72-c/usenet.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8343282866356510172</id><published>2010-10-06T09:21:00.003+02:00</published><updated>2011-10-30T10:38:30.909+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Statistik'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Freies R Lehrbuch</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikibooks/de/b/bc/Wiki.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikibooks/de/b/bc/Wiki.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Wikipedia ist jedem Bekannt und ist heute so etwas wie ein kollektives Gedächtnis oder für viele eine Art dritte Gehirnhälfte. Neben dem Wikipedia-Projekt gibt es weitere Projekte, z.B. Wikibooks. &lt;a href="http://de.wikibooks.org/wiki/Hauptseite"&gt;Wikibooks&lt;/a&gt; sind Lehrbücher zu speziellen Themen. Zur Zeit helfe ich bei der Erstellung eines Buchs über die &lt;a href="http://de.wikibooks.org/wiki/GNU_R"&gt;Statistik-Software und Sprache R&lt;/a&gt;. Helfer sind gern willkommen. Ein allgemeines Problem bei den Wikibooks ist, dass viel Experten zwar tiefgreifendes Expertenwissen haben aber nicht in der Lage sind, leicht verständliche Texte zu schreiben. Ein Grund dafür ist, dass die Experten meist ein Uni-Karriere hinter sich haben und dem entsprechend sozialisiert sind. Ihr Schreibstiel ist eher kompliziert und akademisch und weniger erklärend. Aus diesem Grund ist es wichtig, dass nicht nur Fachexperten bei Wikibooks helfen, sondern auch normale Anwender. Bitte helft mit, nicht nur Experten sind wichtig um gute Bücher zu schreiben.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8343282866356510172?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8343282866356510172/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/10/freies-r-buch.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8343282866356510172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8343282866356510172'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/10/freies-r-buch.html' title='Freies R Lehrbuch'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5157085238882211255</id><published>2010-10-05T14:02:00.003+02:00</published><updated>2010-10-15T10:30:15.812+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='illumina'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Wie gut skaliert Illumina OLB?</title><content type='html'>Illumina ist zur Zeit einer der Hersteller von Next Generation Sequencing (NGS) Maschinen. Beim NGS fallen im Vergleich zu den bis hierhin üblichen Methoden der Genetik eine riesige Menge an Daten an. NGS ermöglicht Genom-weite Untersuchungen. Teil der Illumina Auswertungspipeline sind die Softwarebausteine Casva und der Off Line Base Caller (OLB). Weil sie risige Datenmanegen verarbeiten müssen, tun sie das möglichst parallel.&amp;nbsp;Deshalb mach ich hier eine Test, wie gut der OLB skaliert. Beim betrachten der Testergebnisse ist zu beachten, dass die Illumina Software &amp;nbsp;sich gerade in Phase der rapiden Weiterentwicklung&amp;nbsp;befindet.&lt;br /&gt;Für diesen Test setze ich das &lt;a href="http://programming-2.blogspot.com/2010/10/off-line-base-caller-18.html"&gt;Testdatenset&lt;/a&gt; von Illumina ein, ein Dell R815 Server mit 4 Magny Cours (insgesamt 48 Cores, 64GB RAM, RAID 0, Centos 5.5). Ich variiere den Parameter &lt;b&gt;j&lt;/b&gt; des OLB, der für eine Aufteilung des Jobs in mehrere Prozesse dient. Ich erhalte folgende Messergebnisse:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9ca3NMTRST4/TKsSB2Ad8yI/AAAAAAAAAKY/2itKeMEgB1Q/s1600/table_olb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_9ca3NMTRST4/TKsSB2Ad8yI/AAAAAAAAAKY/2itKeMEgB1Q/s1600/table_olb.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Und diese Daten jetzt mal als Diagramm:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/TKsSLrIt8VI/AAAAAAAAAKc/zwECP6qyMzQ/s1600/dia_olb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="339" src="http://2.bp.blogspot.com/_9ca3NMTRST4/TKsSLrIt8VI/AAAAAAAAAKc/zwECP6qyMzQ/s640/dia_olb.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Positiv ist, dass OLB über mehrere Cores skaliert. Es wird mehr als der Faktor 4 erreicht. Negativ ist, dass OLB mit mehr als 7 Prozessen keinen Geschwindigkeitszuwachs mehr hat. Damit drängt sich die nächste Frage auf, warum ist 7 das Optimum und warum scheint es ein Plateau bei 4-6 zu geben?&lt;br /&gt;&lt;br /&gt;Aus meiner Sicht enthält OLB ca. 23..24% nicht skalierenden Code. Zusammenfassend kann man sagen, OLB profitiert sehr gut von mehreren CPU-Cores, aber nur begrenzt bis 7, d.h. die Taktfrequenz spielt weiterhin, wenn auch untergeordnete Rolle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5157085238882211255?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5157085238882211255/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/10/wie-gut-skaliert-illumina-olb.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5157085238882211255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5157085238882211255'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/10/wie-gut-skaliert-illumina-olb.html' title='Wie gut skaliert Illumina OLB?'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_9ca3NMTRST4/TKsSB2Ad8yI/AAAAAAAAAKY/2itKeMEgB1Q/s72-c/table_olb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8364771372307672668</id><published>2010-10-05T09:25:00.003+02:00</published><updated>2010-10-06T09:11:21.788+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='illumina'/><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><title type='text'>Off-Line Base Caller 1.8</title><content type='html'>Nach der Restrukturierung von Illuminas Software gibt es jetzt den Off-Line Base Caller. Dieser kann wie folgt installiert werden. Für diese Beschreibung wird vorausgesetzt, das Casava wie &lt;a href="http://programming-2.blogspot.com/2010/08/casava-17.html"&gt;hier&lt;/a&gt; beschrieben auf dem Computer installiert wurde.&lt;br /&gt;&lt;br /&gt;Installation FFT Bibliothek.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;tar xfz fftw-3.1.2.tar.gz&amp;nbsp;&lt;/li&gt;&lt;li&gt;cd fftw-3.1.2&lt;/li&gt;&lt;li&gt;./configure --enable-single&lt;/li&gt;&lt;li&gt;make&lt;/li&gt;&lt;li&gt;su&lt;/li&gt;&lt;ul&gt;&lt;li&gt;make install&lt;/li&gt;&lt;li&gt;exit&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;Installation von OLB.&lt;/div&gt;&lt;ul&gt;&lt;li&gt;tar xfz OLB-1.8.0.tar.gz&lt;/li&gt;&lt;li&gt;cd ../../OLB-1.8.0&lt;/li&gt;&lt;li&gt;make&lt;/li&gt;&lt;li&gt;su&lt;/li&gt;&lt;ul&gt;&lt;li&gt;make install&lt;/li&gt;&lt;li&gt;exit&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;Testen von OLB mit Testdaten.&lt;/div&gt;&lt;ul&gt;&lt;li&gt;tar xfjv Illumina_Genome_Analyzer_Validation_Dataset_v_1_8_0.tar.bz2&lt;/li&gt;&lt;li&gt;cd&amp;nbsp;Illumina_Genome_Analyzer_Validation_Dataset_v_1_8_0&lt;/li&gt;&lt;li&gt;su&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;./validate.sh /home/mirkoebert/illumina/olb/OLB-1.8.0&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8364771372307672668?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8364771372307672668/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/10/off-line-base-caller-18.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8364771372307672668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8364771372307672668'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/10/off-line-base-caller-18.html' title='Off-Line Base Caller 1.8'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4895442482636222655</id><published>2010-09-24T14:49:00.000+02:00</published><updated>2010-09-24T14:49:07.282+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R Plugin für Eclipse</title><content type='html'>Auch für gibt es ein Eclipse-Plugin. Hier beschreibe ich wie ich eine funktionierende R Installation mittel StatET-Plugins in Eclipse nutze.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Installation von SatET via Update-Site&lt;/li&gt;&lt;li&gt;Konfigurieren des Proxys für R in der Konsole:&amp;nbsp;&lt;b&gt;export http_proxy=http://proxy:8080&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Starte von R in der Konsole: R&lt;/li&gt;&lt;li&gt;Installation des R-Paketes rJava:&amp;nbsp;&lt;b&gt;install.packages('rJava')&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Laden des Paktes rJava:&amp;nbsp;&lt;b&gt;library(rJava)&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Testen des Pakets und Beenden von R: &lt;b&gt;q()&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Download des rj Paketes mit dem Webbrowser&lt;/li&gt;&lt;li&gt;Installation des rj Paketes in der Konsole:&amp;nbsp;&amp;nbsp;&lt;b&gt;R CMD INSTALL --no-test-load rj_0.5.0-5.tar&lt;/b&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Konfiguration von StatET in Eclipse&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4895442482636222655?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4895442482636222655/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/09/r-plugin-fur-eclipse.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4895442482636222655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4895442482636222655'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/09/r-plugin-fur-eclipse.html' title='R Plugin für Eclipse'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1811000413012061399</id><published>2010-09-09T14:57:00.002+02:00</published><updated>2010-09-24T15:05:40.865+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAS'/><category scheme='http://www.blogger.com/atom/ns#' term='Statistik'/><title type='text'>Export großer Tabellen aus SAS oder JMP</title><content type='html'>Prinzipiell kann man seine Daten aus SAS oder JMP exportieren z.B. als Excel Datei. Leider funktioniert das nicht bei Tabellen mit sehr vielen Spalten (&amp;gt;255). Schuld daran ist weder das Excel Dateiformat noch SAS. Es ist kein SAS Bug sondern benutzt dort SAS eine Funktion in Windows für, die an dieser Stelle limitiert ist. SAS weiss das und bietet keinen eigenen Baustein an, der dieses Problem umgeht. Wahrscheinlich hat SAS kein gesteigertes Interesse das der Kunde seine Daten exportiert. Aber es gibt ein Workaround in Form eines SAS Makros von SAS selbst (&lt;a href="http://support.sas.com/kb/36/904.html"&gt;Link&lt;/a&gt;). Damit wird eine Excel-Datei erzeugt, die eine Reihe von Tabellen mit jeweils 255 Spalten enthält. Damit hat man seine Daten exportiert und steht nur noch vor der Aufgabe die Daten wieder zusammenzusetzen.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/TJyh0SEFlMI/AAAAAAAAAKU/-esXDYOHuaI/s1600/sas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/_9ca3NMTRST4/TJyh0SEFlMI/AAAAAAAAAKU/-esXDYOHuaI/s320/sas.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So sieht eine funktionierende Beispielkonfiguration besagten Export-Skripts aus.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1811000413012061399?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1811000413012061399/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/09/export-groer-tabellen-aus-sas-oder-jmp.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1811000413012061399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1811000413012061399'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/09/export-groer-tabellen-aus-sas-oder-jmp.html' title='Export großer Tabellen aus SAS oder JMP'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9ca3NMTRST4/TJyh0SEFlMI/AAAAAAAAAKU/-esXDYOHuaI/s72-c/sas.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5880464737437125293</id><published>2010-08-30T10:38:00.004+02:00</published><updated>2010-08-30T10:38:30.974+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><title type='text'>Vollständige JARs mit Ant erstellen</title><content type='html'>In Maven gibt es das sehr nützliche Shade Plugin (siehe &lt;a href="http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html"&gt;http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html&lt;/a&gt;) mit dem man aus seinem Projekt ein JAR erstellen kann, in dem alle abhängigen Bibliotheken enthalten sind und zur Laufzeit auch gefunden werden. Dies kann mit ANT wie im folgenden Bild realisiert werden.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/THttoWprwCI/AAAAAAAAAJw/5qtPtNiqhgY/s1600/ant_bigjar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://2.bp.blogspot.com/_9ca3NMTRST4/THttoWprwCI/AAAAAAAAAJw/5qtPtNiqhgY/s640/ant_bigjar.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;Jetzt kann man dieses JAR z.B. via SCP verteilen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5880464737437125293?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5880464737437125293/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/08/vollstandige-jars-mit-ant-erstellen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5880464737437125293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5880464737437125293'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/08/vollstandige-jars-mit-ant-erstellen.html' title='Vollständige JARs mit Ant erstellen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9ca3NMTRST4/THttoWprwCI/AAAAAAAAAJw/5qtPtNiqhgY/s72-c/ant_bigjar.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5436547116017123547</id><published>2010-08-27T13:37:00.008+02:00</published><updated>2010-08-30T14:19:00.233+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>And the winner is ... ANT</title><content type='html'>Heute bin ich mit meinem ersten Projekt von Maven zu Ant&amp;nbsp;migriert. Der Aufwand ist überschaubar und das neue Ant-File auch. Das Maven-File umfasste 92 Zeilen wohingegen das Ant-File nur 58 Zeilen umfasste. Eine Ersparnis von &amp;nbsp;37%, nicht mitgerechnet habe ich da die notwendigen Erweiterungen der Maven Konfigurationsdateien. Leider habe ich noch kein Werkzeug gefunden, dass bei diesen Vorgang unterstützt.&lt;br /&gt;Jetzt funktioniert alles wie gedacht nur das Dependency Management muss ich noch per Ivy ergänzen. Am Besten geht man wie folgt vor:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_9ca3NMTRST4/THtpSmYEfvI/AAAAAAAAAJo/htRnjCcFwTY/s1600/ant_cp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="99" src="http://4.bp.blogspot.com/_9ca3NMTRST4/THtpSmYEfvI/AAAAAAAAAJo/htRnjCcFwTY/s640/ant_cp.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Sichern des aktuellen Standes des Projekts z.B. im SVN (&lt;a href="http://www.tonyspencer.com/2007/03/02/setup-a-subversion-server-in-4-minutes/"&gt;kurze Anleitung zum Aufsetzen und starten eine SVN Servers unter Linux&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Erzeuge ein neues Verzeichnis im Root-Verzeichnis des Projekts, welches die benötigten Bibliotheken aufnimmt z.B. &lt;b&gt;mkdir lib/&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Zeige dir alle von Maven verwalteten Bibliotheken an in dem die &lt;b&gt;pom.xml&lt;/b&gt; öffnest.&lt;/li&gt;&lt;li&gt;Kopiere alle direkt abhängigen Bibliotheken aus dem lokalen Maven Repository in das neue Verzeichnis lib,&amp;nbsp;&lt;b&gt;cp /Users/mirkoebert/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar lib/&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Ergänze in der build.xml einen Ausdruck der alle JARs im Verzeichnis &lt;b&gt;lib&lt;/b&gt; in den Classpath einbindet (siehe Bild oben).&amp;nbsp;&lt;/li&gt;&lt;li&gt;Deaktivieren des Dependency Managements mit Maven in Eclipse.&lt;/li&gt;&lt;li&gt;Entfernen der Maven Dependencies aus dem Build Path des Projekts und ergänzen der JARs aus dem Verzeichnis &lt;b&gt;lib/&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Löschen der &lt;b&gt;pom.xml&lt;/b&gt; aus dem Projektverzeichnis.&lt;/li&gt;&lt;li&gt;Entfernen der Maven-Reste aus den Eclipse-Projektdatei (&lt;b&gt;.project&lt;/b&gt;, diese Datei kann man mit dem View Navigator anzeigen und öffnen).&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Entfernen Maven-Builders entweder via Menü in den Projekteinstellungen oder man löscht den zweiten buildCommand-Block (siehe Bild unten)&lt;/li&gt;&lt;li&gt;Entfernen der Maven-Natur durch löschen der zweiten nature-Zeile (Bild unten)&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_9ca3NMTRST4/THuhq7tih6I/AAAAAAAAAJ4/ER2U5YANPfg/s1600/eclipse_natures.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="332" src="http://3.bp.blogspot.com/_9ca3NMTRST4/THuhq7tih6I/AAAAAAAAAJ4/ER2U5YANPfg/s640/eclipse_natures.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5436547116017123547?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5436547116017123547/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/08/the-winner-is-ant.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5436547116017123547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5436547116017123547'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/08/the-winner-is-ant.html' title='And the winner is ... ANT'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9ca3NMTRST4/THtpSmYEfvI/AAAAAAAAAJo/htRnjCcFwTY/s72-c/ant_cp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8369017207058075928</id><published>2010-08-12T11:02:00.009+02:00</published><updated>2010-10-06T09:10:52.499+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='illumina'/><category scheme='http://www.blogger.com/atom/ns#' term='bioinformatics'/><title type='text'>Casava 1.7</title><content type='html'>Dem Komplilieren von Casava 1.7 stehen einigen Hürden entgegen. Meine Ausgangsbasis ist ein frischer Server mit der noch aktuellen Centos 5.5 Linux Distribution. Eine der Neuerungen von Casava ist die Unterstützung von gcc 4.4 und den entsprechenden Header-Dateien. Bei Casva 1.6 und einem gcc 4.4 musst man noch eine kleine Verränkung machen und eine alte string.h einfügen. Dies ist jetzt nicht mehr notwendig. Eine Beschreibung ist auch im Casava 1.7 Handbuch ab Seite 125 zu finden. Hier habe ich alle Schritte zusammengefasst um zu einer lauffähigen&amp;nbsp;Casava 1.7 Installation zu kommen. Ausgangspunkt ist die Datei&amp;nbsp;CASAVA_v1.7.0.tar.bz2.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Entpacken der Datei mit dem Casava Quellcode:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;bunzip2 CASAVA_v1.7.0.tar.bz2&lt;/li&gt;&lt;li&gt;tar xf&amp;nbsp;CASAVA_v1.7.0.tar&lt;/li&gt;&lt;li&gt;cd CASAVA_v1.7.0&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Installation der fehlende Softwarepakete die für das Kompilieren und Ausführen notwendig sind:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;yum groupinstall 'Development Tools'&lt;/li&gt;&lt;li&gt;yum install bzip2-devel.x86_64&lt;/li&gt;&lt;li&gt;yum install&amp;nbsp;zlib-devel.x86_64&lt;/li&gt;&lt;li&gt;yum install&amp;nbsp;libxml2-devel.x86_64&lt;/li&gt;&lt;li&gt;yum install perl-XML-Dumper&lt;/li&gt;&lt;li&gt;yum install perl-XML-Parser&lt;/li&gt;&lt;li&gt;yum install perl-XML-LibXML&lt;/li&gt;&lt;li&gt;yum install perl-XML-Simple&lt;/li&gt;&lt;li&gt;yum install perl-XML-Twig&lt;/li&gt;&lt;li&gt;yum install perl-XML-Grove&lt;/li&gt;&lt;li&gt;yum install ImageMagick&lt;/li&gt;&lt;li&gt;yum install PyXML&lt;/li&gt;&lt;li&gt;yum install gnuplot&lt;/li&gt;&lt;li&gt;yum install libtiff&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Kompilieren von Casava&lt;/li&gt;&lt;ul&gt;&lt;li&gt;cd src&lt;/li&gt;&lt;li&gt;./configure&lt;/li&gt;&lt;li&gt;make&lt;/li&gt;&lt;li&gt;make install&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Testen&lt;/li&gt;&lt;ul&gt;&lt;li&gt;run.pl --help&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;liefert keinen Fehler&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;export CASAVA_EXAMPLES=/usr/local/share/CASAVA-1.7.0/examples&lt;/li&gt;&lt;li&gt;run.pl --runId=TestEColiPE --projectDir=./DNA_EColi_PE -e ${CASAVA_EXAMPLES}/GERALD -l 4 --refSequences=${CASAVA_EXAMPLES}/genomes/E_coli --snpCovCutoff=-1 --indelsCovCutoff=-1 &lt;/li&gt;&lt;li&gt;/usr/local/bin/taskServer.pl --tasksFile=/root/test/DNA_EColi_PE/tasks.17_42_27_04_10_10.txt --host=localhost --jobsLimit=1&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Danach sollte es ein Verzeichnis&amp;nbsp;DNA_EColi_PE geben in dessen Unterverzeichnis html liegen dann die Ergebnisse derAnalyse in HTML-Form.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Anmerkung&lt;/b&gt;: Nicht alle der oben angegebenen Softwarekomponenten sind fürs kompilieren von Casva notwendig. Hier wurden nur die Softwarebausteine aufgelistet die ich installieren musste. Abhängige Softwarebausteine wurden nicht aufgeführt, aus diesem Grunde ist diese Liste hier kürzer als die Liste im Casava-Handbuch (S.139f).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8369017207058075928?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8369017207058075928/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/08/casava-17.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8369017207058075928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8369017207058075928'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/08/casava-17.html' title='Casava 1.7'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5393690449883460874</id><published>2010-08-09T09:26:00.001+02:00</published><updated>2010-08-10T08:55:37.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jackrabbit'/><category scheme='http://www.blogger.com/atom/ns#' term='WebDAV'/><title type='text'>Das WebDAV Grauen</title><content type='html'>Unter dem Titel "Das Grauen der Praxis" (15/2010) wurde ein &lt;a href="http://www.heise.de/kiosk/archiv/ct/10/15/116/"&gt;Artikel&lt;/a&gt; in der &lt;b&gt;ct&lt;/b&gt; veröffentlicht. Die Erkenntnis des Artikels, erwartet nicht so viel von WebDAV. Der Nutzen von WebDAV wird in der Praxis vor allem von den Clients limitiert. Die WebDAV Client bieten in der Regel nur einfache Dateizugriffe und kein Locking oder Versionierung. Diese Erfahrungen kann ich leider voll bestätigen. Interessantes Detail, Windows kann WebDAV Server einbinden und daneben haben aber die Office-Produkte einen eigenen WebDAV Client. Keiner der beiden Clients scheint aber weiterführende Funktionen zu besitzen. Aber auch die Server-Seite hat ihre Grenzen, so scheitert der Filetransfer grosser Dateien (&amp;gt;2GB) bei Jackrabbit. Dadurch kann Jackrabbit nicht als tauglicher Ersatz für Produktionsumgebungen eingesetzt werden. Schade. Zur Zeit würde ich WebDAV nicht für Produktionsumgebungen als Ersatz für andere Systeme einsetzen. Aber aus Sicht des Programmierers ist WebDAV sehr interessant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5393690449883460874?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5393690449883460874/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/08/das-webdav-grauen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5393690449883460874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5393690449883460874'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/08/das-webdav-grauen.html' title='Das WebDAV Grauen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1436737513830748202</id><published>2010-07-13T11:42:00.000+02:00</published><updated>2010-07-13T11:42:25.454+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Statistik'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R auf dem Mac</title><content type='html'>R auf dem Mac stellt mich vor einige Hürden.&lt;br /&gt;&lt;br /&gt;Die erste Hürde war die Konfiguration des Proxy. Leider verwendet R nicht die Systemeinstellungen und im Preferences-Fenster gab es keine passendes Feld. Also muss der Proxy in der R Konsole eingestellt werden:&amp;nbsp;&lt;b&gt;Sys.setenv(http_proxy="http://proxy:1234")&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Die zweite Hürde trat auf bei der Installation ein Source-Pakets.&lt;br /&gt;&lt;b&gt;R CMD INSTALL Desktop/GenABEL_1.6-0.tar.gz&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;* installing to library ‘/Users/mirkoebert/Library/R/2.11/library’&lt;br /&gt;* installing *source* package ‘GenABEL’ ...&lt;br /&gt;** libs&lt;br /&gt;*** arch - i386&lt;br /&gt;sh: make: command not found&lt;br /&gt;ERROR: compilation failed for package ‘GenABEL’&lt;br /&gt;* removing ‘/Users/mirkoebert/Library/R/2.11/library/GenABEL’&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/b&gt;&lt;br /&gt;Es fehlte &lt;b&gt;make&lt;/b&gt;. Um dies zu beheben muss man Apples XCode installieren. Dazu muss man sich bei Apple kostenlos registrieren lassen. Danach funktionierte die Paketinstallation reibungslos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1436737513830748202?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1436737513830748202/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/07/r-auf-dem-mac.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1436737513830748202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1436737513830748202'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/07/r-auf-dem-mac.html' title='R auf dem Mac'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1329943969809215795</id><published>2010-06-23T10:37:00.003+02:00</published><updated>2010-07-06T09:43:23.007+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Eclipse Helios</title><content type='html'>Die kommende Eclipse Helios (Eclipse 3.6) hat ein neues Feature, auf das Viele schon lange gewartet haben. Im &lt;i&gt;Package Explorer&lt;/i&gt; werden nicht mehr die vollen Packagenamen angezeigt, sondern sie werden jetzt verkürzt dargestellt. Dies spart Platz auf dem Bildschirm. Wie das aussieht ist &lt;a href="http://it-republik.de/jaxenter/artikel/Eclipse-Helios-Was-gibt%92s-Neues-in-JDT-3164.html"&gt;hier&lt;/a&gt;&amp;nbsp;in der Abbildung 6 zu sehen. Leider werden die Namen nicht automatisch gekürtzt, sondern man muss manuell ein Mapping anlegen. Damit ist dies Funktion nur noch halb so elegant.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.eclipse.org/downloads/"&gt;Elipse Helios Download Link.&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1329943969809215795?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1329943969809215795/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/06/eclipse-helios.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1329943969809215795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1329943969809215795'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/06/eclipse-helios.html' title='Eclipse Helios'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1236910955727827464</id><published>2010-06-08T09:52:00.001+02:00</published><updated>2010-06-08T09:56:30.884+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>32 Bit vs 64 Bit Java</title><content type='html'>Fast hätte mich das Ergebnis überrascht, 32 Bit Java ist schneller als 64 Bit Java. Bei mir (Core2Duo, Mac OS X 10.6) lag die Differenz bei ca. 11%, das ist nicht wenig. Das genaue Testsetup und die Ergebnisse werde ich noch veröffentlichen. Zu einer Erklärung sein noch mal auf die Literatur in &lt;a href="http://programming-2.blogspot.com/2010/04/mixt-it-oder-auch-nicht-die-32-bit-java.html"&gt;MixIt&lt;/a&gt; verwiesen.&lt;br /&gt;Ein weiterer interessanter Fakt, die OpenJDK 6 VM ist minimal schneller als Sun's VM, dies kann aber auch an meiner speziellen Aufgabe liegen. Auf jeden Fall scheint die OpenJDK Implementierung mindestes auf gleicher Höhe wie die Suns zu sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1236910955727827464?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1236910955727827464/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/06/32-bit-vs-64-bit-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1236910955727827464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1236910955727827464'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/06/32-bit-vs-64-bit-java.html' title='32 Bit vs 64 Bit Java'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6978203656542422876</id><published>2010-05-28T10:08:00.003+02:00</published><updated>2010-05-28T10:14:33.148+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Shade Plugin</title><content type='html'>Shade ist ein nützliches Maven Plugin, mit dem man sogenannte BIGJARs bauen kann, also JARs die alle notwendigen Libs enthalten. Dies ist z.B. beim Testen der Applikation in der Kommandozeile sinnvoll. Leider gibt es zwei Plugins die auf &lt;i&gt;SHADE&lt;/i&gt; hören, wenn ich es in Eclipse hinzufügen möchte. Das Plugin, das ich suchte muss mit dem Suchstring &lt;b&gt;maven-shade&lt;/b&gt; gesucht werden.&lt;br /&gt;Nach dem man das richtige Plugin der POM hinzugefügt hat muss man es natürlich konfigurieren:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;plugin&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;groupId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;org.apache.maven.plugins&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/groupId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;artifactId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;maven-shade-plugin&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/artifactId&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;version&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;1.3.3&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/version&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt; &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;executions&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;execution&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;phase&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;package&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/phase&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;goals&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;goal&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;shade&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/goal&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/goals&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;configuration&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;transformers&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;transformer&lt;/font&gt; &lt;font color="#2040a0"&gt;implementation=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;org.apache.maven.plugins.shade.resource.ManifestResourceTransformer&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                  &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;mainClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;de.fbn.bio.benchmark.Benchmark&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/mainClass&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/transformer&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/transformers&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/configuration&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/execution&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/executions&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;&lt;strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;/plugin&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6978203656542422876?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6978203656542422876/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6978203656542422876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6978203656542422876'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/maven-shade-plugin.html' title='Maven Shade Plugin'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8294353108004616784</id><published>2010-05-26T12:21:00.002+02:00</published><updated>2010-05-28T10:00:10.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Fedora 13 eigenet sich nicht gut als Java Entwicklungsplattform</title><content type='html'>Mal wieder ein &lt;i&gt;Leider&lt;/i&gt;. Nach dem ich ein frisches Fedora eingespielt hatte, Java als OpenJDK war vorhanden, installierte ich ein Eclipse via Paketmanager (GUI). Ich dachte toll, ist ja einfach. Dieses war leider ein Eclipse für C/C++, das stand nur nirgens und es fehltem ihm auch wesentliche Bestandteile. Dies merkte ich nach der Installation von M2Eclipse.&amp;nbsp;Ich deinstallierte also Eclipse und installierte ein Neues.&lt;br /&gt;Immer noch liefs nicht wie erwartet. Als javac wurde der ecj verwandt und OpenJDK bedeut nicht, dass man ein JDK hat. &amp;nbsp;Maven wollte ein JDK, das ja eigentlich da war. Also installierte ich ein JDK von Sun, leider waren dann immer noch alle Pfade noch beim Alten. Also das einfache Aufsetzen eine Java-Entwicklerplattform sieht anders aus. Fedora möchte scheinbar eine einfache und nutzerfreundliche Linux-Variante sein, nur leider muss man einiges über Fedora wissen, damit man es nutzen kann. Hier steckt noch viel Arbeit drin. Ich wechsel wohl jetzt den Computer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8294353108004616784?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8294353108004616784/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/fedora-13-eigent-sich-nicht-gut-als.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8294353108004616784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8294353108004616784'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/fedora-13-eigent-sich-nicht-gut-als.html' title='Fedora 13 eigenet sich nicht gut als Java Entwicklungsplattform'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7220724682369389944</id><published>2010-05-26T10:03:00.001+02:00</published><updated>2010-05-26T10:03:53.756+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Neue Version des Eclipse LaTeX-Plugins, Texlipse 1.4 erschienen</title><content type='html'>Wir haben schon lange auf eine neue Version von Texlipse gewartet, endlich ist sie da. Neu ist, dass es eine LaTeX-Perspektive gibt, und man sie sich nicht mehr selber bauen muss. Vor allem wurden auch Bugs gefixt. Ich werde die neue Texlipse-Version bei Gelegenheit testen.&lt;br /&gt;&lt;br /&gt;Update-Site:&lt;br /&gt;&lt;a href="http://texlipse.sourceforge.net/"&gt;&lt;b style="font-weight: normal;"&gt;http://texlipse.sourceforge.net/&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7220724682369389944?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7220724682369389944/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/neue-version-des-eclipse-latex-plugins.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7220724682369389944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7220724682369389944'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/neue-version-des-eclipse-latex-plugins.html' title='Neue Version des Eclipse LaTeX-Plugins, Texlipse 1.4 erschienen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7762400816952772311</id><published>2010-05-19T08:48:00.006+02:00</published><updated>2010-05-26T08:19:54.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jackrabbit'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='WebDAV'/><title type='text'>Running Jackrabbit on Tomcat</title><content type='html'>Apache Jackrabbit ist ein Java-basiertes Content Repository. Es ist möglich es als Stand-alone Installation zu betreiben oder es in Tomcat als Webapp zu installieren. Mein Kombination ist Windows, Tomcat 6.0.26 und Jackrabbit 2.1.0. Mir sind mehrere Dinge aufgefallen:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Vor der Installation muss ins &lt;b&gt;lib&lt;/b&gt; Verzeichnis von Tomacat noch die &lt;a href="http://repo1.maven.org/maven2/javax/jcr/jcr/2.0/"&gt;jcr-2.0.jar&lt;/a&gt; kopiert werden und anschliessend muss Tomcat neu gestartet werden. Wichtig ist die Version 2.0 von JCR und nicht die Version 1.0 zu benutzen, wie fälschlicher Weise noch in der Dokumentation steht.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="text-decoration: line-through;"&gt;Das installierte Jackrabbit, zumindest die Weboberfläche scheint nicht ganz fehlerfrei zu sein.&lt;/span&gt;&amp;nbsp;Alle Fehler waren durch die falsche JCR-Version verursacht.&lt;/li&gt;&lt;li&gt;Neue Content Repositories werden im Verzeichnis &lt;i&gt;CATALINA_HOME &lt;/i&gt;angelegt. Wenn diese Variable nicht explizit gesetzt wurde, schätzt Tomcats Startskript das Verzeichnis. Das Resultat ist das Verzeichnis aus dem Tomcat gestartet wurde. Dieses Faeture ist leider nicht dokumentiert und ich habe auch keinen einfachen Weg gefunden dies zu konfigurieren.&lt;/li&gt;&lt;li&gt;Bei der Suche nach Hilfe via Google viel mir auf, das es leider einen Vibrator gleichen Namens gibt, der leider Googles Ergebnisliste häufig dominiert.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Das Jackrabbit WebDAV-Repository lässt sich ohne weiteres unter Mac OS X 10.6 im Finder als &lt;b&gt;Mit Server verbinden ...&lt;/b&gt; als Laufwerk einbinden. Unter Windows kann man es als Webresource einbinden oder mittels &lt;i&gt;Netdrive&lt;/i&gt; als Laufwerk mounten. Alternativ soll auch der Befehl &lt;i&gt;net&lt;/i&gt; funktionieren, nur leider bei mir nicht. Unter Linux kann man sich das WebDAV-Repository als Laufwerk mounten. Dazu muss man als User &lt;b&gt;root&lt;/b&gt; folgende Zeile verwenden: &lt;b&gt;mount -t davfs http://mir:8080/jackrabbit/repository/default/ /home/ebert/testset/dav&lt;/b&gt;&lt;br /&gt;Natürlich kann man auch /etc/fstab um den WebDAV-Eintrag erweitern.&lt;br /&gt;&lt;br /&gt;Leider fand ich auch keinen Client, der Versionierung und Locking unterstützt, damit gehen wichtige Funktionen des WebDAV verloren.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7762400816952772311?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7762400816952772311/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/running-jackrabbit.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7762400816952772311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7762400816952772311'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/running-jackrabbit.html' title='Running Jackrabbit on Tomcat'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8112613661626146218</id><published>2010-05-18T10:01:00.004+02:00</published><updated>2010-05-25T15:55:48.845+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Computing'/><title type='text'>Distributed Computing</title><content type='html'>Wenn es um ein &lt;b&gt;Number Crunching&lt;/b&gt; Problem geht, steht man vor der Frage, ob man nicht einen Computer-Cluster bzw. eine Menge von Desktop-PCs an Stelle eines Servers einsetzen sollte. Natürlich ist Distributed Computing seit Seti@Home ein hippes Thema, doch bringt Distributes Computing mit PCs nüchtern betrachtet Vorteile gegenüber der Nutzung eines grossen Servers?&lt;br /&gt;In meinem Fall habe ich einen Referenz-Server, d.h. ich muss mittels Ditribueted Computing mindestens die selbe Rechenenleistung erreichen wie der Server. Natürlich muss ich vorher abschätzen, ob dies ein realisitsches Ziel ist. Die Aufage ist extrem gut parallelisierbar und damit sowohl für den Einsatz auf einem Multi-Core-Server als auch auf einem Rechner-Cluster gut geeignet. Zum abschätzen der zu erwartenden Performance der Computer bei meinem Problem nehme ich den &lt;b&gt;SPECint_rate_base2006&lt;/b&gt;, weil er gut zu meinem Problem passt und weil SPEC-Werte für viele Systeme auf der Seite der &lt;a href="http://www.spec.org/"&gt;SPEC&lt;/a&gt; zu finden sind. Das Referenz-System erreicht einen SPECint_rate_base2006 Wert von 268. Die Desktop-PCs schätze ich mit einem Wert von 11 (Pentium 4) und einer Arbeitszeit von 14 &amp;nbsp;h pro Tag. Damit ergiebt sich folgende Formel:&lt;br /&gt;P * C * h = &amp;nbsp;R * 24 ; wobei C die Anzahl der Desktop-PCs ist die benötig werden um die &amp;nbsp;Leistung des Referenzsystem R bei einer Arbeitszeit der PCs von h Stunden zu erreichen. P ist die durchschnittliche PC-Leistung. Nach dem Umstellen erhält man C = R * 24 / P / h. Für meinen Fall ergab diese Formel das ich 42 PCs benötige. Das ist eine Menge. Besser wird dieser Wert, wenn man neben den PCs auch dedizierte Server einsetzt oder die Desktop-PCs ersetzt. Mit einem Zwei-Sockel-Server (SPECint_rate_base2006 &amp;nbsp;= 158) ergibt sich dann einen PC Anzahl von nur 18. Distributed Computing lohnt sich nur, wenn ausreichend ungenutzte Rechenkapazität in Form von PCs zur Vergung steht. Weiterhin wurd in der Formel nicht beachtet, dass man die Aufgaben an verschiedene Clients mehrfach vergibt, um durch Überkreuzprüfung die Richtigkeit der zurückgelieferten Werte sicherstellt.&lt;br /&gt;Ein weiterer Vorteil des Ditrubted Computing Ansatzen mit PCs besteht darin, dass diese Lösung automatisch mitwächsed. Normale PCs werden alle 2 bis 3 Jahr ausgetauscht und damit erneuert sich auch der PC-Cluster, es sind keine zusätzlichen Investitionen nötig. Aber es ist davon auszugehen, dass der Aufwand für das Datenmanagement beim Distributed Computing leicht erhöht ist und dass die Software angepasst werden muss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8112613661626146218?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8112613661626146218/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/distributed-computing.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8112613661626146218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8112613661626146218'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/distributed-computing.html' title='Distributed Computing'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3657204125740922263</id><published>2010-05-17T13:35:00.004+02:00</published><updated>2010-11-02T20:15:31.466+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Nutzen von UML</title><content type='html'>&lt;blockquote&gt;"Ich stelle fest, dass es zwei Wege gibt, ein Software-Design zu erstellen, entweder so einfach, dass es offensichtlich keine Schwächen hat, oder so kompliziert, dass es keine offensichtlichen Schwächen hat."&lt;/blockquote&gt;&lt;blockquote&gt;T. Hoare&lt;/blockquote&gt;UML ist ein wichtiges Thema in der Ausbildung von Informatikstudenten an den Universitäten. Deshalb ist es nicht verwunderlich, dass alle Uni-Absolventen glühende Verfechter von UML sind. Aber wie sieht es mit der Bedeutung von UML in der Programmierrealität aus? Dazu hatte ich eine kleine nicht repräsentative Umfrage in der Java Usegroup gestartet und möchte hier die Ergebnisse zusammenfassen.&lt;br /&gt;Obwohl eine Mehrheit kein oder kaum UML einsetzt, sind sowohl die Probleme als auch gute Werkzeuge bekannt. Häufig wird UML eingesetzt zum Dokumentieren, zur internen und externen Kommunikation und zur Anforderungsanalyse. UML wird auf einem hohen Abstraktionslevel eingesetzt. Neben diesen Anwendungen gab es auch Forderungen an UML bzw. an die UML-Werkzeuge. Die wichtigsten sind die Integration in die IDEs, die Möglichkeit des Roundtrips und damit einer agilen Entwicklung mit UML. UML wird als statisch und kompliziert in der Anwendung wahrgenommen.&amp;nbsp;Damit stellt sich die Frage, liegt dies an UML oder an den Werkzeugen?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Trotz dieser Kritik,&amp;nbsp;UML bleibt wichtig, weil es den Programmierern eine Möglichkeit gibt sich einfach, klar und standardisiert über Softwareentwürfe und Probleme auszutauschen. Sei es an einem Whitebord oder als Teil der Dokumentation oder der Anforderungsanalyse. Hier ist es klar ein wichtiges und unersetzliches Instrument. Auch die Ausbildung im Bereich UML ist wichtig, schult sie doch das abstrakte Denken der Softwareentwickler und hilft somit Probleme besser zu erfassen und zu lösen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3657204125740922263?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3657204125740922263/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/nutzen-von-uml.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3657204125740922263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3657204125740922263'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/nutzen-von-uml.html' title='Nutzen von UML'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-948811420720658507</id><published>2010-05-12T10:54:00.004+02:00</published><updated>2010-05-17T13:39:39.969+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><title type='text'>Wiki auf Tomcat</title><content type='html'>Auf Grund meiner Wissensmanagement-Affinität setze ich &amp;nbsp;zur Dokumentation meiner Arbeitergebnisse ein Wiki ein. Dies macht meine Ergebnisse einfacher nutzbar und erschließt leichter neue Benutzer. Als bekenntder Tomcat-Fan suchte ich nach einer Java-Wiki-Lösung die auf einem Tomcat läuft. Meine Wahl fiel auf VQWiki (&lt;a href="http://www.vqwiki.org/"&gt;http://www.vqwiki.org/&lt;/a&gt;). VQWiki steht für Very Quick Wiki und dies kann ich nur bestätigen. Download der WAR-Datei von Sourceforge, deployen - ferig, keine weiter Installation oder Konfiguration. Am besten benennt man die WAR-Datei noch um (z.B. vqwiki-2.8.1.war -&amp;gt; wiki.war), um die spätere URL über der das Wiki zu erreichen sein wird, zu vereinfachen. VQWiki benutzt nicht die vom Mediawiki (Wikipedia) bekannt Syntax ein aber dies ist kein Problem. Schön gelöst ist die Admin-Administration, es wird angenommen, dass der erste Benutzer der Admin ist, eine sehr schöne Lösung.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-948811420720658507?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/948811420720658507/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/05/wiki.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/948811420720658507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/948811420720658507'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/05/wiki.html' title='Wiki auf Tomcat'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4783499160803431193</id><published>2010-04-27T14:31:00.004+02:00</published><updated>2010-06-07T14:02:12.985+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Ist Java langsam?</title><content type='html'>Ein vielgehörtes Vorurteil gegenüber Java ist, Java ist langsam. Oft kommt diese Behauptung von Programmieranfängern oder C-Programmierern. Ich bin der Meinung, das sollte man erstmal nachweisen. Dafü mangelte es mir aber an zwei Dingen, einem guten C-Programmierer und einer passenden Aufgabe. Einen C-Programierer hätte ich gefunden aber das auswählen einer passende Aufgabe ist nicht trivial. Denn wie heisst es, wer misst misst Mist. Aber es gibt auch für dieses Problem eine passende Antwort im Netz. Auf der Seite&amp;nbsp;&lt;a href="http://www.shudo.net/jit/perf"&gt;http://www.shudo.net/jit/perf&lt;/a&gt;/ werden die Geschwindigkeiten verschiedner Java-VMs verglichen und es wird auch .Net und C einbezogen. Auch wenn die Resultate aus 10/2004 stammen, so dürften sie auch noch heute gültig sein. Eine neue Frage wirft sich bei den heutigen Mulit-Core-CPUs auf, wie gut skalieren die VMs, diese Frage wurde damals noch nicht beantwortet. Zu den Antworten, die Messergebnisse zeigen einige deutliche Ergebnisse, C und Java sind ähnlich schnell beim Linpack und SciMark, der Vorsprung für C liegt im Bereich von 6%. Die Interpreter (Java, C#) sind immer weit abgeschlagen. Die VMs von Sun liegen in der Regel vorn. Die Server-VM ist schneller als die Client-VM.&lt;br /&gt;Aber kein Vorurteil ohne wahren Kern. Die früheren Java-Versionen waren langsamer, Sun hat viel Zeit und Ideen in die Optimierung des JIT gesteckt. Heute ist man mit Java nicht langsamer als mit C, wichtig ist vor allem, dass die Programmierer wissen, was sie programmieren und was dies aus Sicht der CPU bedeutet. Diese Überlegungen dürften in Regel mehr Performance-Schub bringen als der Wechsel von Java zu C. Was bei den obigen Benchmarks auch nicht getestet wurde, war die Geschwindigkeit des graphischen Systems. Diese ist bei Java-Anwendungen in Architektur-beding niedriger. Aber auch hier hat Sun viel getan um die Geschwindigkeit zu steigern. Ich hoffe das Oracle genauso viel Zeit investiert um Java weiter zu entwickeln.&lt;br /&gt;&lt;br /&gt;Nachtrag:&lt;br /&gt;Hier ist nach ein weiterer interessanter Beitrag zum Thema Java Performance im Vergleich, leider auch schon von 2004: &lt;br /&gt;&lt;a href="http://www.idiom.com/~zilla/Computer/javaCbenchmark.html"&gt;http://www.idiom.com/~zilla/Computer/javaCbenchmark.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp09275.html"&gt;http://www.ibm.com/developerworks/java/library/j-jtp09275.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4783499160803431193?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4783499160803431193/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/04/ist-java-langsam.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4783499160803431193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4783499160803431193'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/04/ist-java-langsam.html' title='Ist Java langsam?'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-494453628972766883</id><published>2010-04-08T09:29:00.005+02:00</published><updated>2010-04-18T20:43:11.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Der richtige Umgang des Programmierers mit Passwörter</title><content type='html'>Viele Anwendungen wie der Apache Webserver oder andere haben ein eigenes Passworthandling. Trotzdem ist man als Programmierer machmal gezwungen sich selbst um das Handling der Passwörter kümmern. Die meisten selbstentwickelten Lösungen der Programmierer sind oft mäßig bis unzureichend. Das liegt auch daran, dass es während des Informatikstudiums keine oder nur selten entsprechende Vorlesungen oder Seminare gibt. Hier jetzt ein paar Regeln Regeln zum besseren Umgang mit Passwörtern.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Akzeptiere nur ausreichend lange Passwörter um Brute Force Attacken zu erschweren. Zur Zeit gelten Passwörter mit 8 und mehr Zeichen als akzeptabel.&lt;/li&gt;&lt;li&gt;Passwörter sollten nicht mit dem Benutzernamen identisch sein. Das wäre zu leicht zu erraten.&lt;/li&gt;&lt;li&gt;Passwörter sollten nicht Personennamen sein und auch möglichst kein normales Wort sein, auch sollte man nicht nur die Jahreszahl an eine Personennamen hängen. Diese Passwörter können durch Wörterbuch-Attacken ermittelt werden.&amp;nbsp;Sinnvoll wäre immer eine Etropieprüfung der Passwörter.&lt;/li&gt;&lt;li&gt;Das Passwort sollte kein Tastaturmuster ala QWERTZU sein. Diese Passwörter sind auch anfällig für Attacken.&lt;/li&gt;&lt;li&gt;Passwörter sollten vom Programmierer nie als Klartext gespeichert werden. Passwörter sollten immer mit einer sicheren Hash-Funktion verarbeitet werden. Anschliessend wird dann der Hash-Wert gespeichert. Z.B. gelten zur Zeit&amp;nbsp;SHA2 und MD5&amp;nbsp;als sicher. Durch das hashen ist es einem Eindringling nicht möglich die Passwörter im Klartext zu ermitteln.&lt;/li&gt;&lt;li&gt;Zusätzlichen Schutz bietet der Einsatz eines &lt;i&gt;Salt&lt;/i&gt;. Dieser Salt wird dann zusätzlich zum Hash-Wert des Passworts gespeichert. Der Salt verhindert den Angriff von Eindringlingen via Rainbow Table.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Prinzipiell sollte man beim Schutz von Daten immer mehrere Verteidigungslinien aufbauen und sich nicht allein auf eine Schutzmassnahme verlassen. Oft zieht ein Einbruch weitere Einbrüche nach sich, wie z.B. auch bei der Apache Foundation (&lt;a href="http://www.golem.de/1004/74458.html"&gt;http://www.golem.de/1004/74458.html&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #444444; font-family: arial, sans-serif; font-size: 13px;"&gt;7FHFWF5TMNZC&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-494453628972766883?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/494453628972766883/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/04/passworter-richtig-speichern.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/494453628972766883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/494453628972766883'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/04/passworter-richtig-speichern.html' title='Der richtige Umgang des Programmierers mit Passwörter'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3683699660122621739</id><published>2010-04-07T15:42:00.001+02:00</published><updated>2010-04-15T08:49:58.304+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Mixt it oder auch nicht - die 32 Bit Java Option</title><content type='html'>Ich habe auf meinem Mac ein aktuelles Eclipse, die &lt;b&gt;Mac Cocoa 64 Bit&lt;/b&gt; Version. Jetzt versuchte ich ein eigenes Eclipse-Plugin zu entwickeln und erzeugte ein entsprechendes neues Projekt. Wow, ein seltsamer Fehler in der &lt;b&gt;.log&lt;/b&gt; Datei:&amp;nbsp;&lt;i&gt;java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM.&lt;/i&gt;&lt;br /&gt;Was nun, die Tipps wie der auf Seite &lt;a href="http://www.eclipse.org/swt/faq.php#cocoa64launch"&gt;SWT FAQ&lt;/a&gt; fruchten nicht oder waren zu kompliziert. Einfacher war es beim Start meines Plugins die 32 Bit Karte zu ziehen. Mit Hilfe der VM-Option -d32 weist man die JVM an das 32 Bit Datenmodell zu benutzen. Dies muss man in Eclipse bei &lt;b&gt;Run Configurations ... / Arguments / VM Arguments&lt;/b&gt; eintragen.&lt;br /&gt;Neben der VM-Option -d32 gibt es auch die 64 Bit Option -d64. Und wenn die Ergebnisse aus der &lt;a href="http://portal.acm.org/citation.cfm?id=1107407"&gt;Veröffentlichung&lt;/a&gt; von &amp;nbsp;Venstermans,&amp;nbsp;Eeckhout und De Bosschereaus aus dem Jahr 2005 noch heute stimmen, sollte man in der Regel bei der 32 Bit Option bleiben. Das 64 Bit Java verbraucht mehr Heap (39%), führt zu mehr Cache Misses und ist auch noch langsamer (1,7%).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3683699660122621739?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3683699660122621739/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/04/mixt-it-oder-auch-nicht-die-32-bit-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3683699660122621739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3683699660122621739'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/04/mixt-it-oder-auch-nicht-die-32-bit-java.html' title='Mixt it oder auch nicht - die 32 Bit Java Option'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1040629481837281065</id><published>2010-03-29T13:45:00.000+02:00</published><updated>2010-03-29T13:45:30.778+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Smart Maven Configuration Project</title><content type='html'>Ich habe ein neues Projekt (&lt;a href="http://smartmaven.origo.ethz.ch/"&gt;Smart Maven Configuration Project SMCP&lt;/a&gt;) gestartet, dass die leidige Konfigurationsarbeit in Maven Projekten deutlich reduzieren soll. Im Gegensatz zu Eclipse Plugin M2Eclipse soll in dieses Projekt durch Intelligenz vor allem in der Anfangsphase eines neuen Projektes Maven-Anfängern und Fortgeschrittenen die leider notwendigen Maven Konfigurationen automatisch und intelligent zu erledigen. Dies spart den Entwicklern Zeit, Frust und Recherchearbeit bzgl. der Maven Konfiguration. Dadurch sind sie in der Lage ihrer eigentlichen Entwicklungsarbeit nachzukommen. Idee und Entwickler und Tester sind willkommen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1040629481837281065?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1040629481837281065/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/smart-maven-configuration-project.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1040629481837281065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1040629481837281065'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/smart-maven-configuration-project.html' title='Smart Maven Configuration Project'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3601764819306932151</id><published>2010-03-28T18:25:00.003+02:00</published><updated>2010-05-26T10:24:22.295+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>M2Eclipse Version 0.10.0</title><content type='html'>Eine neue Version des beliebten Eclipse-Maven-Plugins m2eclipse ist erschienen. Für alle Eclipse Benutzer die eine vorhergehende Version von m2eclipse einsetzen, müssen sie als erstes das alte Plugin deinstallieren und anschliessend die neuen Version installieren. Die Aktualisierung per Updatesite URL funktioniert nicht. Das liegt daran, das es mit der Version 0.10.0 zwei neue Updatesite URLs vorhanden sind. Das Plugin besteht jetzt aus zwei Teilen dem Core-Plugin und den Extras. Um alle Extras installieren zu können sollte vor der Installation von M2Eclipse Subclipse installiert werden.&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;a href="http://subclipse.tigris.org/update_1.6.x"&gt;http://subclipse.tigris.org/update_1.6.x&lt;/a&gt;&lt;/div&gt;&lt;div style="color: black; font-family: inherit;"&gt;&lt;a href="http://m2eclipse.sonatype.org/sites/m2e"&gt;http://m2eclipse.sonatype.org/sites/m2e&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;a href="http://m2eclipse.sonatype.org/sites/m2e-extras"&gt;&lt;span style="font-family: inherit;"&gt;http://m2eclipse.sonatype.org/sites/m2e-extras&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;Und natürlich sollte man auch gleich den Proxy-Eintrag für Maven konfigurieren: &lt;a href="http://maven.apache.org/guides/mini/guide-proxies.html"&gt;http://maven.apache.org/guides/mini/guide-proxies.html&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3601764819306932151?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3601764819306932151/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/m2eclipse-version-0100.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3601764819306932151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3601764819306932151'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/m2eclipse-version-0100.html' title='M2Eclipse Version 0.10.0'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-697585529997871095</id><published>2010-03-22T09:22:00.003+01:00</published><updated>2010-03-23T15:37:03.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offtopic'/><title type='text'>Java User Group Rostock</title><content type='html'>Wer Interesse hat oder mitmachen möchte bei der &lt;a href="http://sites.google.com/site/jughro/home"&gt;Java User Group Rostock (JUGHRO)&lt;/a&gt;, schreibe bitte eine &lt;a href="mailto:mirko.ebert@googlemail.com?subject=JUGHRO"&gt;E-Mail&lt;/a&gt;. Nächstes Ziel ist die Gründung der JUGHRO.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-697585529997871095?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/697585529997871095/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/java-user-group-rostock.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/697585529997871095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/697585529997871095'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/java-user-group-rostock.html' title='Java User Group Rostock'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3568989796996843989</id><published>2010-03-17T15:16:00.002+01:00</published><updated>2010-03-19T20:09:56.126+01:00</updated><title type='text'>Maven Dependency Hell Teil 2</title><content type='html'>Folgender Fall, ich benötige &lt;i&gt;a.jar&lt;/i&gt; die ist abhängig von &lt;i&gt;b.jar&lt;/i&gt;. Aber &lt;i&gt;b.jar&lt;/i&gt; ist wieder abhängig von &lt;i&gt;c.jar&lt;/i&gt;. Dies führt oft dazu, dass ein Maven Projekt viele JARs benötigt, die es in der Realität nicht braucht, denn es ist nicht notwendiger Weise so, dass &lt;i&gt;a.jar&lt;/i&gt; auch &lt;i&gt;c.jar&lt;/i&gt; braucht. Dafür bietet Maven eine passende Konfigurationsmöglichkeit. Hier dies mal konkret für das Problem der Bibliothek&amp;nbsp;&lt;i&gt;jide-oss&lt;/i&gt; und dem Archiv&amp;nbsp;&lt;i&gt;aqua.jar&lt;/i&gt;. Noch ein Tipp, schaut euch mal im Eclipce Depedency View an welche Archive Log4J im Schlepptau hat.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;groupId&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;com.jidesoft&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: #369393;"&gt;groupId&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;jide-oss&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: #369393;"&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;version&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;2.8.4&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: #369393;"&gt;version&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;exclusions&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;exclusion&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;aqua&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: #369393;"&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;groupId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;aqua&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: #369393;"&gt;groupId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &amp;nbsp;&lt;span class="Apple-style-span" style="color: #009594; white-space: normal;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: #369393;"&gt;exclusion&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="color: #009594; white-space: normal;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: #369393;"&gt;exclusions&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #5669d0; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-style-span" style="color: #369393;"&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #009594; font-family: Monaco; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;Hier stellt sich wieder die Frage, ob &lt;b&gt;convention over configuration&lt;/b&gt; wirklich funktioniert oder ob das Problem in der Maven-Interpretation dieser Idee liegt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3568989796996843989?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3568989796996843989/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/maven-dependency-hell-teil-2.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3568989796996843989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3568989796996843989'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/maven-dependency-hell-teil-2.html' title='Maven Dependency Hell Teil 2'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3114231776114502980</id><published>2010-03-15T15:11:00.003+01:00</published><updated>2010-03-15T15:18:33.265+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Dependency Hell</title><content type='html'>Einer der Vorzüge Mavens ist das einfache Dependency-Management, also der Umgang mit fremden JARs. Diese Einfachheit kann auch mal zu Umwegen führen, wie bei diesem Beispiel: Baralga benötigt &lt;a href="https://jide-oss.dev.java.net/"&gt;jide-oss&lt;/a&gt; eine Bibliothek die das Erstellen von Swing-GUIs erleichtert. Diese Bibliothek nutzt OS-spezifische Bibliotheken auf dem Mac z.B. die Datei&amp;nbsp;&lt;i&gt;aqua.jar&lt;/i&gt;. Mit Mac OS X 10.6 (Snow Leopard) gibt es diese Datei nicht mehr, Apple hat die Packages umbenannt und auch die JAR (&lt;a href="http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/"&gt;siehe hier&lt;/a&gt;). Baralga ist auf dem Mac weiterhin lauffähig. Aber man kann es leider nicht mehr kompilieren, weil Maven diese Abhängigkeit nicht auflösen kann. Ein Workaround besteht darin, die &lt;i&gt;jidee-oss.2.8.4.jar&lt;/i&gt; herunter zu laden und als System-Jar zu deklarieren und den Pfad zu ihr anzugeben.&amp;nbsp;Noch ein Tipp, Maven akzeptiert hier nur absolute Pfade.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;groupId&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;com.jidesoft&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: #369393;"&gt;groupId&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;jide-oss&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: #369393;"&gt;artifactId&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;version&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;2.8.4&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: #369393;"&gt;version&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;scope&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;system&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: #369393;"&gt;scope&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;systemPath&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;/Users/ebert/Downloads/jide-oss-2.8.4.jar&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;span style="color: #369393;"&gt;systemPath&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #009594;"&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3114231776114502980?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3114231776114502980/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/maven-dependency-hell.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3114231776114502980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3114231776114502980'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/maven-dependency-hell.html' title='Maven Dependency Hell'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1944947763094642081</id><published>2010-03-09T09:22:00.003+01:00</published><updated>2010-04-20T10:46:55.449+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Free Projekthosting Origo</title><content type='html'>Es gibt eine Reihe von Anbietern zum hosten von eigenen Projekten. Der bekannteste ist Sourceforge. Bei &lt;a href="http://sf.net/"&gt;Sourceforge&lt;/a&gt; wie bei ähnlichen Hostern z.B.&amp;nbsp;&lt;a href="http://www.berlios.de/"&gt;Berlios&lt;/a&gt; kann man nur Open Source Projekte hosten, die auch entsprechende Lizenznen z.B. die infektiöse GPL haben. Natürlich sind auch andere Lizenzen OSS-Lizenzen wie die APL möglich. Eine Übersicht der relevanten OSS-Lizenzen ist auf Wikipedia zu finden (&lt;a href="http://de.wikipedia.org/wiki/Kategorie:FLOSS-Lizenz"&gt;Link&lt;/a&gt;).&lt;br /&gt;Es ist schwierig für Closed Source einen Hoster zu finden. Ein weniger bekannter Hoster der auch Closed Source Projekte akzeptiert ist &lt;a href="http://www.origo.ethz.ch/"&gt;Origo&lt;/a&gt;. Natürlich hat man auch die Möglichkeit eigene Softwareinstallationen einzusetzen z.B. bietet sich da&amp;nbsp;&lt;a href="http://trac.edgewall.org/"&gt;TRAC&lt;/a&gt;&amp;nbsp;an.&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Leider scheitere ich an der Issue-Tracker-Integration von Origo in Eclipse. Der entsprechende Connector liefert leider einen Fehler.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1944947763094642081?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1944947763094642081/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/projekthosting.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1944947763094642081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1944947763094642081'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/projekthosting.html' title='Free Projekthosting Origo'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5314705445842387640</id><published>2010-03-08T10:24:00.002+01:00</published><updated>2010-03-09T09:40:41.910+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Hilfreiche Links zur Integration von Java Anwendungen in Mac OS X</title><content type='html'>Eine kleine Liste mit Links die helfen Java-Applikationen Mac-like zu machen.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eine grundlegende Beschreibung für Java-Programmierer auf dem Mac von Apple selbst.&amp;nbsp;&lt;a href="http://developer.apple.com/mac/library/documentation/Java/Conceptual/Java14Development/03-JavaDeployment/JavaDeployment.html#//apple_ref/doc/uid/TP40001885"&gt;http://developer.apple.com/mac/library/documentation/Java/Conceptual/Java14Development/03-JavaDeployment/JavaDeployment.html#//apple_ref/doc/uid/TP40001885&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Eine gut verständliche, dreiteilige Anleitung von Sun, jetzt Oracle.&amp;nbsp;&lt;a href="http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac/"&gt;http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Und zu guter Letzt von Apple die Dokumention der Mac OS X Erweiterung von Java.&amp;nbsp;&lt;a href="http://developer.apple.com/mac/library/documentation/Java/Reference/1.5.0/appledoc/api/index.html"&gt;http://developer.apple.com/mac/library/documentation/Java/Reference/1.5.0/appledoc/api/index.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5314705445842387640?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5314705445842387640/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/hilfreiche-links-zur-integration-von.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5314705445842387640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5314705445842387640'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/hilfreiche-links-zur-integration-von.html' title='Hilfreiche Links zur Integration von Java Anwendungen in Mac OS X'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-636186073529200323</id><published>2010-03-08T09:47:00.008+01:00</published><updated>2010-03-19T10:12:03.490+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Integration von Java Anwendungen in Mac OS X</title><content type='html'>Java Anwendungen laufen auf fast jeder Plattform, der Mac ist hier keine Ausnahme. Aber der Mac ist nicht nur was besonderes sondern er ist auch ein bisschen anders. Eine normale, unangepasste Java Anwendung sieht wie folgt aus:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/S5S38rQVULI/AAAAAAAAAIE/hvJn0AqDOzI/s1600-h/baralga.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://2.bp.blogspot.com/_9ca3NMTRST4/S5S38rQVULI/AAAAAAAAAIE/hvJn0AqDOzI/s400/baralga.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://baralga.origo.ethz.ch/"&gt;Baralga&lt;/a&gt; Zeiterfassung auf dem Mac&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Was dem Mac-User auffällt ist, dass das Menü im Fenster und nicht wie Mac-üblich in der Menüleiste untergebracht ist. Um dies zu ändern muss ein Property-Wert gesetzt werden, dies kann in der Kommandozeile beim Aufruf des Programm passieren oder im Code.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; java -Dapple.laf.useScreenMenuBar=true -jar baralga-core-1.4.4-SNAPSHOT.jar&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Alternativ kann man in der Klasse die die Main-Methode enthält folgende Zeile einfügen:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;static {&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; System.setProperty("apple.laf.useScreenMenuBar", "true");&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Dieser Code wird beim Erzeugen eines Objektes dieser Klasse ausgeführt und der Property-Wert gesetzt. &amp;nbsp;Das Ergebnis sieht dann wie folgt aus:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_9ca3NMTRST4/S5S780QPvVI/AAAAAAAAAIM/RB5Y6f6Y1Vo/s1600-h/baralga2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/_9ca3NMTRST4/S5S780QPvVI/AAAAAAAAAIM/RB5Y6f6Y1Vo/s400/baralga2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Noch besser wird es wenn man folgendes Argument mit übergibt:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; -Xdock:name="Alif"&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_9ca3NMTRST4/S5S_clo5BwI/AAAAAAAAAIU/YLyJuQLREKE/s1600-h/baralga3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://2.bp.blogspot.com/_9ca3NMTRST4/S5S_clo5BwI/AAAAAAAAAIU/YLyJuQLREKE/s400/baralga3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Es wird damit der Name der Applikation gesetzt. Dies führt dazu, dass nicht die Javaklasse in der Menüleiste auftaucht sondern der Applikationsname. Dies gilt auch für Dock. Wenn man einen Mac zur Verfügung hat kann man es sich einfacher machen, in dem man den &lt;b&gt;Jar Bundler&lt;/b&gt; benutzt. Dieser ist ein Werkzeug, dass mit Apples Xcode installiert wird. Leider ist es nicht separat zu finden. Mit Hilfe des &lt;b&gt;Jar Bundler&lt;/b&gt;s lassen sich aus Java-Applikationen einfach Doppel-Klick-bare Anwendungen bauen. Naürlich kann sind auch richtig gebaute JARs Doppel-Klick-bare Anwendungen, &amp;nbsp;mit Hilfe &amp;nbsp;des Jar Bundlers kann man alle Mac OS X spezifischen Einstellungen vornehmen. Für den Fall das, die Java-Anwendung kein sogenanntes Big-JAR ist, kann man die benötigeten JARs auch mit Hilfe des Jar Bundlers hinzufügen. Leider fügt der Jar Bundler nur absolute Pfade in die entsprechende Datei (Info.plist) ein. Man kann jetzt die abhängigen Bibliotheken mit in Paket kopieren z.B. unter Contents/Resoures/Java/lib. DAnach muss man nur noch die Pfade in der Datei Info.plist korrigieren und die absoluten Pfade ersetzen. Dazu kann man z.B. JEdit benutzen:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;$JAVAROOT/lib/commons-lang-2.4.jar&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Die Variable JAVAROOT gibt den vollständigen Pfad zum Verzeichnis an, in dem die eigentliche JAR meines Programms liegt, also /Application/Baralga/Baralga/Contents/Resource/Java.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-636186073529200323?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/636186073529200323/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/03/integration-von-java-anwendungen-in-mac.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/636186073529200323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/636186073529200323'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/03/integration-von-java-anwendungen-in-mac.html' title='Integration von Java Anwendungen in Mac OS X'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9ca3NMTRST4/S5S38rQVULI/AAAAAAAAAIE/hvJn0AqDOzI/s72-c/baralga.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-563073470738560382</id><published>2010-01-21T12:35:00.001+01:00</published><updated>2010-11-26T20:52:45.537+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><category scheme='http://www.blogger.com/atom/ns#' term='Webapp'/><title type='text'>Datenbank-Ressource in Tomcat einbinden</title><content type='html'>Das das verwenden von Connection Poos eine tolle, Performance steigernde Sache ist hat sich sicher herumgesprochen. Nun gibt es verschiedene Möglichkeiten einen DB Connection Pool zu benutzen. Man kann natürlich auch selber entsprechende Logik in eine zentralen Datenbankklasse implementieren. Bei Serversoftware ist eher davon abzuraten, weil man dann das Connection Management komplexer wird. So schliesst die Datenbank von ihrer Seite aus eine Connection nach einer festgelegten Zeit der Inaktivität um Ressourcen zu sparen, bei MySQL sind dass 8 Stunden, d.h. wenn 8 Stunden lang keine Daten über die Datenbank Connection geflossen sind schliesst die Datenbank die Verbindung. Dies bemerkt man in der Regel erst am nächsten Tag oder am Montag, wenn man versucht Daten von Datenbank zu holen. Die Lösung lautet, man muss immer prüfen ob die Connection noch funktioniert, das macht man in dem man eine Datenbankabfrage macht, die immer ein definiertes Ergebnis liefert. Das prüfen der DB-Connection reicht nicht.&lt;br /&gt;&lt;div&gt;Zurück zum Pooling, Tomcat bietet ein eigenes Pooling mittel Tag &lt;i&gt;resource&lt;/i&gt;. Das sieht in der Datei &lt;i&gt;META-INF/context.xm&lt;/i&gt;l der Webapp wie folgt aus:&lt;/div&gt;&lt;div&gt;&amp;lt;Resource&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;name="jdbc/MYSQLDB" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;auth="Container" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;type="javax.sql.DataSource" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;username="smartblu" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;password="xxx" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;url="jdbc:mysql://localhost:3306/igd"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;driverClassName="com.mysql.jdbc.Driver"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;maxActive="500" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;maxIdle="100" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;maxWait="10000"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;validationQuery="select count(*) from USER"&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;removeAbandoned="true" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;logAbandoned="true" &lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Mit &lt;i&gt;validationQuery&lt;/i&gt; gibt man die oben erwähnte Wartungsabfrage an, mit der DB-Connection-Pool die Datenbankverbindung testen kann. Was jetzt noch fehlt, ist die Referenzierung der Datenbankressource in der Datei web.xml.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;resource-ref&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;description&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;DB Connection&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;/&lt;/span&gt;description&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;res-ref-name&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;jdbc/MYSQLDB&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;/&lt;/span&gt;res-ref-name&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #369393;"&gt;res-type&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;javax.sql.DataSource&lt;span class="Apple-style-span" style="font-family: Times; font-size: small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;/&lt;/span&gt;&lt;span style="color: #369393;"&gt;res-type&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;&amp;lt;&lt;/span&gt;res-auth&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;Container&lt;/span&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #009594;"&gt;/&lt;/span&gt;res-auth&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #369393; font: 11.0px Monaco; margin: 0.0px 0.0px 0.0px 0.0px;"&gt;&lt;span style="color: #009594;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Times; font-size: small;"&gt;&amp;lt;&lt;/span&gt;/&lt;/span&gt;resource-ref&lt;span style="color: #009594;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-563073470738560382?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/563073470738560382/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/01/datenbank-ressource-in-tomcat-einbinden.html#comment-form' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/563073470738560382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/563073470738560382'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/01/datenbank-ressource-in-tomcat-einbinden.html' title='Datenbank-Ressource in Tomcat einbinden'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7541004615168793611</id><published>2010-01-20T08:29:00.000+01:00</published><updated>2010-01-20T08:38:29.400+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><title type='text'>Dependency Management mit Ant</title><content type='html'>Genau. Einer der oft genannten Vorteile von Maven im Vergleich zu Ant ist das Dependency Management. D.h. in Maven muss man nur angeben welche Bibliotheken man für das Softwareprojekt braucht und Maven lädt die JARs dann automatisch aus dem Internet und legt sie im lokalen Repository ab. Bei Ant muss man die JARs selber laden und verwalten. Dies ist nicht notwendig wenn &lt;a href="http://ant.apache.org/ivy/index.html"&gt;Apache Ivy&lt;/a&gt; eingesetzt wird. Ivy übernimmt das Dependency Management bei Ant-Projekten. Das schöne an Ivy ist die Kompatibilität zu Maven. Die Beschreibung der Bibliotheken erfolgt nach dem gleichen Prinzip und benutzt auch das zentrale Maven Repository. Aktuell gibt es bei IT Republik einen &lt;a href="http://it-republik.de/jaxenter/artikel/Die-Ameise-naehert-sich-Maven-2135.html"&gt;Artikel zu Ivy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7541004615168793611?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7541004615168793611/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/01/dependency-management-mit-ant.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7541004615168793611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7541004615168793611'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/01/dependency-management-mit-ant.html' title='Dependency Management mit Ant'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4885166929934737656</id><published>2010-01-13T10:40:00.000+01:00</published><updated>2010-01-13T10:46:52.890+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Brownfield Projekte</title><content type='html'>Nicht alle Projekte starten auf einer grünen Wiese oft oder meistens beziehen sich Projekte auf vorhandene Software, den so genannten &lt;a href="http://en.wikipedia.org/wiki/Brownfield_%28software_development%29"&gt;Brownfield&lt;/a&gt; Projekten. Wie kann man trotz dieser existierenden und oft laufenden Software die Grundsätze der CCD (Clean Code Developer). Mit diesem Thema beschäftigen sich zwei Artikel auf &lt;a href="http://www.heise.de/developer/artikel/Clean-Code-Developer-in-Brownfield-Projekten-855114.html"&gt;Heise Developer&lt;/a&gt;. Ich denke vielen Entwicklern werden einige Dinge bekannt vorkommen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4885166929934737656?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4885166929934737656/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/01/brownfield-projekte.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4885166929934737656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4885166929934737656'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/01/brownfield-projekte.html' title='Brownfield Projekte'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-2119620996860429512</id><published>2010-01-05T12:22:00.000+01:00</published><updated>2010-01-06T19:33:42.073+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven vs. Ant</title><content type='html'>"Maven - eine Ausgeburt der Hölle", das ist ein toller Aufmacher von &lt;a href="http://it-republik.de/jaxenter/news/Maven---eine-Ausgeburt-der-Hoelle-053182.html"&gt;JAXenter&lt;/a&gt;. Das Zitat stammt von Kent Spillner, aus diesem &lt;a href="http://kent.spillner.org/blog/work/2009/11/14/java-build-tools.html"&gt;Artikel&lt;/a&gt;. Interessant ist, dass Ant zumindest das zweit beste Build-Tool ist.  Was sich dahinter versteckt, ist ein tiefer Frust über Maven. Maven sollte das Leben und den Build vereinfachen. Mein Urteil ist noch nicht gefällt. Auf jeden Fall sollt man diesen Blog-Eintrag lesen, oft habe ich mit dem Kopf genickt.  Maven bringt aber noch andere Probleme mit sich, die zum Teil aus der Transparenz der Vorgänge in Maven herrühren. Das Dependency-Management ist einer der Argumente für Maven. Mein erstes Problem, wie heisst das Artefakt. Ausserdem lädt das Depency-Management alle möglichen Pakete, egal ob ich sie nötig sind oder nicht. Die Frage ist das ein Problem oder nicht, ich merke davon nichts und ich hab' keinen Einfluss drauf. Doch da fällt mir ein Nachteil ein, wenn ich Web-Applikationen entwickle und deploye muss ich ein grösseres WAR-transferieren, das kostet mehr Zeit und was das für bedeutet, kann man bei &lt;a href="http://www.joelonsoftware.com/"&gt;Joel Splonsky&lt;/a&gt; nachlesen.&lt;div&gt;Ein Kritikpunk von Kent Spiller, dass das Maven-Paradigma "Convention over Configuration" bei fast jeder Anforderung an den Build-Prozess nicht stimmt kann ich nachvollziehen, vor allem bei grösseren Projekten. Meine Idee ist es Projekte stärker zu modularisieren und jedes einzelne Projekt mit Maven zu realisieren. Vorteile sind überschaubare, wenig modifizierte (konfigurierte) POMs. Am besten man richtet dann auch gleich ein eigenes Remote-Repository ein, wie in &lt;a href="http://blog.ralfmuehle.de/entwicklung/java/einrichten-eines-maven-repositories"&gt;diesem Blog beschrieben&lt;/a&gt;. D.h. benutze Maven bei grossen, modularen Projekten, sonst nehme lieber Ant.&lt;/div&gt;&lt;div&gt;Aber es ist schon ein Ärgernis, dass man bei Maven so viel konfigurieren muss und dass die Dokumentation spärlich ist. Ein andere Tipp ist, komplexere Anforderungen via Ant zu realisieren.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-2119620996860429512?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/2119620996860429512/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2010/01/maven-vs-ant.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2119620996860429512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2119620996860429512'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2010/01/maven-vs-ant.html' title='Maven vs. Ant'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1547135361930491095</id><published>2009-12-25T11:30:00.000+01:00</published><updated>2010-01-12T09:30:21.132+01:00</updated><title type='text'>Fehlende Einträge</title><content type='html'>Hier meine unvollständige Liste noch fehlender Einträge. Ich nehme noch gerne Vorschläge für weitere Artikel entgegen.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Security, Rolls in Tomcat&lt;/li&gt;&lt;li&gt;Performancevergleich von Webservices im Vergleich zu reinem HTTP&lt;/li&gt;&lt;li&gt;Optimierter Code&lt;/li&gt;&lt;li&gt;DB Zugriffe&lt;/li&gt;&lt;li&gt;XSL&lt;/li&gt;&lt;li&gt;SCORM&lt;/li&gt;&lt;li&gt;Automatisierung, Konsistenz&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1547135361930491095?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1547135361930491095/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/12/fehlende-eintrage.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1547135361930491095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1547135361930491095'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/12/fehlende-eintrage.html' title='Fehlende Einträge'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6398760657899380241</id><published>2009-12-22T20:49:00.000+01:00</published><updated>2009-12-26T10:24:37.750+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Joel on Software</title><content type='html'>Es ist schon erstaunlich, dass viele Entwickler ähnliche Probleme haben, zumindest die Guten :-D. Hier ein interessanter Blog: &lt;a href="http://www.JoelOnSoftware.com/"&gt;Joel on Software&lt;/a&gt; von Joel Spolsky. Joel Spolsky ist ein ehemaliger Fallschirmjäger und Microsoftentwickler. Ob es zwischen diesen Fähigkeiten einen Zusammenhang gibt? In dem Blog geht es um gutes und natürlich schlechtes Projektmanagement aber auch um Programmierdinge (z.B. Blähsoftware, Bytes oder der Joel-Test). Einige Beiträge von 2000 bis 2009 sind auch auf &lt;a href="http://german.joelonsoftware.com/index.html"&gt;Deutsch&lt;/a&gt; verfügbar. Man kann auch bei der Übersetzung helfen. Spontan meine liebste Stelle:&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia, 'Times New Roman', Times, serif;font-size:medium;"&gt;&lt;blockquote&gt;...&lt;/blockquote&gt;&lt;blockquote&gt;Aber ich mache mir nicht über die Tage Sorgen, an denen ich "nur" zwei Stunden arbeite. Es sind die Tage, an denen ich &lt;em&gt;gar nichts&lt;/em&gt; tue.&lt;/blockquote&gt;&lt;blockquote&gt;...&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;Interessant ist auch der Joel-Test, obwohl er schon fast 10 Jahre alt ist, erfüllen immer noch nicht alle Softwarefirmen den Test. Selbst wenn man den Test nicht kennt, so ist sein Inhalt doch für alle guten Programmierer keine Überraschung sondern sollte der Normalfall sein. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Die Forderung des Test eines One-Click-Build passt gut zu Maven und Ant und zu diesem Blog. Ja und ich habe einen zweiten Monitor. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6398760657899380241?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6398760657899380241/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/12/joel-on-software.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6398760657899380241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6398760657899380241'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/12/joel-on-software.html' title='Joel on Software'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4626434520921013406</id><published>2009-08-14T14:32:00.001+02:00</published><updated>2011-03-03T08:44:56.913+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>CCD: clean code developer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/ccd%20full%20size%20banner.gif?format=raw"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 468px; height: 60px;" src="http://www.clean-code-developer.de/GetFile.aspx?File=dotnetpro_ccd_stempel_full_size.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Viele Dinge in diesem Blog thematisieren die täglichen Probleme. Auch gibt es paar etwas grundlegendere Beiträge nur leider keine grundlegende Verarbeitung dieser Dinge. Ich hatte mir das alles auf einen späteren Zeitpunkt verschoben. Das ist dann wohl zu spät. Aber ich freue mich auf die folgende Webseite hinzuweisen: &lt;a href="http://www.clean-code-developer.de/"&gt;CCD: clean code developer&lt;/a&gt;  bzw. auf das &lt;a href="http://www.heise.de/developer/Ralf-Westphal-im-Gespraech-ueber-Clean-Code-Developer--/artikel/143437"&gt;Interview&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/dotnetpro%20ccd%20stempel%20full%20size%20banner.gif?format=raw"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 468px; height: 60px;" src="http://www.clean-code-developer.de/attachment/wiki/CcdStempel/dotnetpro%20ccd%20stempel%20full%20size%20banner.gif?format=raw" border="0" alt="" /&gt;&lt;/a&gt;Ich glaube alle Prinzipien dieser Seite kann ich gutes Gewissens empfehlen, weil ich sie aus meiner Erfahrung selbst anwende und meinen Studenten rate. Die dort beschriebenen Prinzipien lassen sich durch eine Reihe von Werkzeugen sinnvoll unterstützen. Dazu werde ich demnächst einen Beitrag schreiben.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4626434520921013406?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4626434520921013406/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/08/ccd-clean-code-developer.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4626434520921013406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4626434520921013406'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/08/ccd-clean-code-developer.html' title='CCD: clean code developer'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7213184866620124327</id><published>2009-08-10T20:07:00.000+02:00</published><updated>2009-08-10T20:23:14.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Internationalisierung</title><content type='html'>Oft stößt man bei Internationalisierung von Java-basierter Software auf das Problem das die &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Property&lt;/span&gt;-Dateien von Java mit einem festen &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Encoding&lt;/span&gt; (ISO-8859-1) eingelesen werden, das man auch nicht ändern kann. Diese &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Property&lt;/span&gt;-Datei dienen zur Aufnahme der lokalisierten Zeichenketten. Wenn es sich nur um gelegentliche Zeichen handelt, die nicht in diesem &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Encoding&lt;/span&gt; vorhanden sind kann man diese Zeichen in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;UTF&lt;/span&gt;-Schreibweise eingeben. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Alternatif&lt;/span&gt; schreibt man sich eine eigene Klasse die &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Proppertie&lt;/span&gt;-Dateien mit unterschiedlichen &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Encodings&lt;/span&gt; einlesen kann. Dann muss man nur noch eine Methode schreiben mit denen man auf diese lokalisierten &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;String&lt;/span&gt; zugreifen kann. Besonders elegant finde ich, folgende Methode &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;String&lt;/span&gt; _(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;String&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Key&lt;/span&gt;)&lt;/b&gt; zu definieren und diese dann statisch zu importieren. Noch eleganter wird es wenn man den &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Key&lt;/span&gt; als &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;Fallbackwert&lt;/span&gt; zurückgibt wenn der &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Key&lt;/span&gt; nicht vorhanden ist. Natürlich sollt man das in Fehlerlog dann eintragen. Ein wirkliche Alternative zu der Lokalisierung via &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Property&lt;/span&gt;-Dateien ist die Benutzung von &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;XLIFF&lt;/span&gt; (XML &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Localization&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Interchange&lt;/span&gt; File Format).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7213184866620124327?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7213184866620124327/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/08/internationalisierung.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7213184866620124327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7213184866620124327'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/08/internationalisierung.html' title='Internationalisierung'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4536071231409026110</id><published>2009-07-30T14:31:00.000+02:00</published><updated>2009-07-31T09:43:08.785+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Vereinheitlichung von GUIs komplexer Applikationen</title><content type='html'>In vielen komplexeren Projekten hat man das Problem das verschiedene Leute GUI-Teile implementieren. Das führt in vielen Fällen zu einer inkonsistenten GUIs. Dieses Problem kann man auf verschiedenen Wegen angehen. Der Weg 1 wäre einen eigenen Style Guide zu entwickeln und  umzusetzen. Dieser Weg erzeugt sehr gute Resultate ist aber aufwendig. Bei der Umsetzung in Java hat man zusätzlich das Problem, dass einige Anforderungen des Style Guides in den Java-Klassen selbst umgesetzt werden müssen andere Dinge hingegen eine Anpassung des Look and Feels (L&amp;amp;F) erfordern.&lt;br /&gt;Der 2. Weg ist pragmatischer und wesentlich einfacher und schneller umzusetzen, dafür sind die Resultate nicht ganz so gut, stellen aber in den meisten Fällen eine wesentlich Verbesserung gegenüber der Ausgangssituation dar. Folgende Regeln sind dafür umzusetzen:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Verwendung möglichst wenigen Layout Manager z.B. BoxLayout, wenn komplizierter ist und sonst BorderLayout bzw. FlowLayout für Button-Reihen&lt;/li&gt;&lt;li&gt;Einen Entwickler montiert bzw. überarbeitet der alle Oberflächen&lt;/li&gt;&lt;li&gt;Convenience Methoden z.B. wenn man Textabschnitte bold setzt&lt;/li&gt;&lt;li&gt;Minimale und sehr einfache Klassen die alle Entwickler nutzen z.B. für Fenster, dort sind dann Font, Rahmen und Layoutmanager werden schon richtig gesetzt&lt;/li&gt;&lt;li&gt;Kreuzprüfung der GUI-Teile, d.h. die Entwickler testen die GUI-Teile die von anderen Entwicklern erstellt wurden&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Diese Punkte garantieren kein einheitliches L&amp;amp;F der Oberflächen aber sie wirken Wunder und kosten fast nix. Ein weiterer wichtiger Punkt wenn es um das Interface zwischen Maschine und Mensch geht ist die Usability. Aus meiner Sicht ist es wichtig nicht nur in den Evaluationsphase Usability-Tests einzusetzen sondern schon in der Konzeptionsphase. Usability sollte den Entwicklungsprozess begleiten. Hier der &lt;a href="http://www.useit.com/"&gt;Link&lt;/a&gt; zur bekanntesten Usability-Web-Seite. ES lohnt sich immer auf dieser Seite zu stöbern.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4536071231409026110?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4536071231409026110/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/vereinheitlichung-von-guis-komplexer.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4536071231409026110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4536071231409026110'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/vereinheitlichung-von-guis-komplexer.html' title='Vereinheitlichung von GUIs komplexer Applikationen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-312699800098843368</id><published>2009-07-10T21:52:00.000+02:00</published><updated>2009-12-24T23:17:02.282+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Noch so ein Programmierer-Blog</title><content type='html'>Scheinbar gibt es noch ähnlich angelegte Blogs, wie diesen &lt;a href="http://code4j.wordpress.com/"&gt;Blog&lt;/a&gt;. Schaut mal rein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-312699800098843368?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/312699800098843368/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/noch-so-ein-blog.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/312699800098843368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/312699800098843368'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/noch-so-ein-blog.html' title='Noch so ein Programmierer-Blog'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-8024993759235138841</id><published>2009-07-10T13:37:00.000+02:00</published><updated>2009-07-10T13:45:48.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Log4J'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Buch zum Logging</title><content type='html'>Logging ist wenig beachteter Teil von vielen Projekten. Oft wird wenig Zeit in das Logging investiert, weil es kein zentrales Feature der Software ist. Dem entsprechend gut funktioniert es auch. Zur Zeit werden primär drei verschiedene Logging-APIs eingesetzt, log4j, commons-logging und das Logging des JDK (Bestandteil seit dem JDK 1.4). Mein persönlicher Favoriet log4j war aus meiner Sicht lange Zeit nicht allzu gut dokumentiert, vor allem nicht die Möglichkeit der XML-Konfiguration. Aus diesem Grund habe ich mir auch folgendes Buch gekauft. In ihm wird nicht nur log4j erläutert sondern auch das Logging-API des JDK. Aus meiner Sicht könnte es noch weiter in die Tiefe gehen obwohl es schon ein paar Spezialitäten anreisst. Es bietet allgemein ein recht guten Einstieg ins Logging für Programmierer die nicht nur den Logging-Code aus einem alten Projekt kopieren.&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=p0cf-21&amp;o=3&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=1M6ABJKN5YT3337HVA02&amp;asins=1590590996" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-8024993759235138841?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/8024993759235138841/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/buch-zum-logging.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8024993759235138841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/8024993759235138841'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/buch-zum-logging.html' title='Buch zum Logging'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-9095087615949312903</id><published>2009-07-10T09:16:00.001+02:00</published><updated>2009-07-10T09:17:18.899+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Bücherregal</title><content type='html'>Ich werde hier in loser Folge einige Bücher empfehlen die ich für meine Arbeit nutze. Den Anfang machte gestern ein Buch zu Tomcat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-9095087615949312903?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/9095087615949312903/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/bucherregal.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9095087615949312903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9095087615949312903'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/bucherregal.html' title='Bücherregal'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4290911559330767440</id><published>2009-07-09T21:34:00.000+02:00</published><updated>2009-07-10T14:11:36.005+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><title type='text'>Tomcat Buch</title><content type='html'>Dieses Buch ist ein gutes Nachschlagewerk, wenn man mit der Entwicklung von Webapps vertraut ist und Spezialitäten des Apache Tomcat nutzen will. Vor allem für komplexere Web-Projekte jenseits von Spring ist es zu empfehlen als auch für Administratoren. Schon das Vorgängerbuch ist empfehlenswert.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?t=p0cf-21&amp;amp;o=3&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=0471753610&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4290911559330767440?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4290911559330767440/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-buch.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4290911559330767440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4290911559330767440'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-buch.html' title='Tomcat Buch'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5384724828912659319</id><published>2009-07-09T14:16:00.000+02:00</published><updated>2009-07-09T14:17:03.921+02:00</updated><title type='text'>c2in7y8qwm</title><content type='html'>c2in7y8qwm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5384724828912659319?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5384724828912659319/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/c2in7y8qwm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5384724828912659319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5384724828912659319'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/c2in7y8qwm.html' title='c2in7y8qwm'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4132862237319849289</id><published>2009-07-09T09:12:00.000+02:00</published><updated>2009-07-09T09:46:24.652+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Blog: Java ist auch nur eine Insel</title><content type='html'>Die meisten Programmierer werden das &lt;a href="http://openbook.galileodesign.de/javainsel5/index.htm"&gt;Buch "Java ist auch nur Insel"&lt;/a&gt; (Open Book) aus dem Galileo-Verlag  kennen und als gutes, schnelles Nachschlagewerk schätzen. Der Autor des Buches, Christian Ullenboom , schreibt nicht nur Bücher, sondern auch noch einen interessanten &lt;a href="http://www.tutego.com/blog/javainsel/"&gt;Blog&lt;/a&gt; mit Tipps zum Thema Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4132862237319849289?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4132862237319849289/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/blog-java-ist-auch-nur-eine-insel.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4132862237319849289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4132862237319849289'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/blog-java-ist-auch-nur-eine-insel.html' title='Blog: Java ist auch nur eine Insel'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1495375148931922350</id><published>2009-07-08T14:36:00.000+02:00</published><updated>2009-07-08T14:47:21.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Develop your developers</title><content type='html'>Tests ein mal anders. &lt;a href="http://www.javablackbelt.com/"&gt;JavaBlackBelt&lt;/a&gt; ist ein Community-Website, die Test und Kurse zu vielen aktuellen Themen bietet. Diese stammen primär aus dem Bereich der Java-Programmierung. Je nach dem, wie viele Examen man erfolgreich absolviert hat bekommt man einen entsprechenden, farbigen Gürtel. Der schwarze Gürtel ist dann der höchste zu erreichende Gürtel. Natürlich stellt sich bei einigen Test die Frage, wie relevant sie in der Praxis sind und ob es sich bei dem Code nicht um gefährlichen Code (potentieller Bug) handelt. Trotzdem ist es aus meiner Sicht eine sehr gelungene Site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1495375148931922350?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1495375148931922350/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/develop-your-developers.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1495375148931922350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1495375148931922350'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/develop-your-developers.html' title='Develop your developers'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5085551603713190408</id><published>2009-07-08T09:46:00.000+02:00</published><updated>2009-07-08T10:24:30.394+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Log4J'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Log4J Pattern Layout</title><content type='html'>&lt;div&gt;Oft hat man beim Logging das Problem, dass ein Logmeldung länger ist als eine Zeil auf dem Bildschirm. Das führt dazu dass diese lange Zeile am Bildschirmrand umgebrochen wird. Für den Programmierer ist dies auf den ersten Blick nicht immer zu sehen, wo die Zeile weitergeht. Für mehr Übersichtlichkeit kann man durch folgendes Pattern sorgen:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt layout class="org.apache.log4j.PatternLayout"&amp;gt&lt;br /&gt;        &amp;lt param name="ConversionPattern" value="%d [%t] %-5p %c.%M%n: %m%n" /&amp;gt&lt;br /&gt;&amp;lt/layout&amp;gt&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Das ergibt dann folgendes:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;2009-07-08 06:59:06,470 [main] INFO  me.alif.App.&lt;br /&gt;App starts up&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Bei diesem Pattern wird der Inhalt der Logausgabe, also dass was der Programmierer in die Klammer des Log-Methodenaufruf schreibt, in einer neuen Zeile ausgegeben, die mit einem Doppelpunkt beginnt. Dies führ aus meiner Sicht zu einer höheren Lesbarkeit der Log-Ausgabe.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5085551603713190408?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5085551603713190408/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/log4j-pattern-layout.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5085551603713190408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5085551603713190408'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/log4j-pattern-layout.html' title='Log4J Pattern Layout'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-9060658211360694048</id><published>2009-07-08T09:08:00.001+02:00</published><updated>2009-07-09T14:17:32.738+02:00</updated><title type='text'></title><content type='html'>&lt;span class="Apple-style-span"  style="font-family:'Helvetica Neue', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-9060658211360694048?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/9060658211360694048/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/g9efmsk8qv.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9060658211360694048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/9060658211360694048'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/g9efmsk8qv.html' title=''/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-454277915653764909</id><published>2009-07-03T12:11:00.001+02:00</published><updated>2009-07-03T12:18:15.575+02:00</updated><title type='text'>Tomcat JNDI Realm</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Man man &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Tomcat&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; nicht nur gegen Datenbanken &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;authentifizieren&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; lassen sondern auch gegen andere &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Naming&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;and&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; Directory Services. Hier ein Beispiel für die &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Authentifizierung&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; gegen einen &lt;/span&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;LDAP&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;-Server:&lt;/span&gt;&lt;div&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#3f7f7f;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Realm&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"org.apache.catalina.realm.JNDIRealm"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;connectionURL&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"ldap://ldap.rostock.xxx.de"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;userPatter=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"|(cn={0},ou=XXX,o=XX1)(cn={0},ou=XX1,o=XXX)(cn={0},ou=XXX,ou=XY,o=XX1)(cn={0},ou=XX1,ou=XY,o=XY)"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;userRoleName&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"SmartBluUserRole"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;roleSearch&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;"(uniqueMember={0})"&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 128, 128); "&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);  font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Jetzt muss man nur noch das formulieren des LDAP-Such-Pattern beherrschen.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-454277915653764909?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/454277915653764909/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jndi-realm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/454277915653764909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/454277915653764909'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jndi-realm.html' title='Tomcat JNDI Realm'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7106308240466220560</id><published>2009-07-03T11:33:00.000+02:00</published><updated>2009-07-03T12:09:23.501+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomact'/><category scheme='http://www.blogger.com/atom/ns#' term='Webapp'/><title type='text'>Tomcat JDBC Realm</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Mit Hilfe des JDBC Realms kann man in Tomcat sehr einfach und elegant eine Benutzerauthentifizierung und Zugriffsteuerung durchführen, bzw. von Tomcat durchführen lassen. Dafür muss man in der Datei &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;context.xm&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;l der Webapp folgenden Abschnitt einfügen:&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Realm&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"sb.realm.SmartBLURealm"&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;debug&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"99"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;driverName&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#2a00ff;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#7f007f;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionURL&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"jdbc:mysql://localhost:3306/test"&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionName&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"smartblu"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;connectionPassword&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;""&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userTable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"USER"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userNameCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"LoginName"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userCredCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"Password"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;userRoleTable&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"user_roles"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;roleNameCol&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"role_name"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;digest&lt;/span&gt;&lt;span style="color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;"sha"&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"  style="color:#008080;"&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Tomcat versucht dann die Benutzer zu Authentifizieren gegen eine Datenbank &lt;/span&gt;&lt;span class="Apple-style-span"  style="  color: rgb(42, 0, 255); font-family:Monaco, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;jdbc:mysql://localhost:3306/test &lt;/span&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;mit den entsprechenden Parametern. Der Datenbank-Table heisst hier &lt;/span&gt;&lt;span class="Apple-style-span"  style="  color: rgb(42, 0, 255); font-family:Monaco, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;USER&lt;/span&gt;&lt;span class="Apple-style-span"  style="color: rgb(0, 0, 0);   font-family:Georgia, -webkit-fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;. Die Passwörter der Benutzer sind mit SHA gehasht. &lt;/span&gt;&lt;a href="http://de.wikipedia.org/wiki/Secure_Hash_Algorithm"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SHA&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; bedeutet in der Java-Welt meines Wissens nach SHA2.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;In diesem Beispiel wir nicht der normale JDBC Realm verwandt sondern ein eigener Realm, der von JDBC Realm abgeleitet wurde aber gleichzeitig ein Migrationsfunktion (das Altsystem verwendete nicht SHA sondern Crypt) besitzt. Die Jar-Datei die die hier verwandte Klasse enthält muss für Tocat verfügbar sein, sie muss sich also im Verzeichnis &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;tomcat/libs&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; befinden. Alternativ kann in dieses Beispiel auch der JDBC Realm (org.apache.catalina.realm.JDBCRealm) eingetragen werden.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color:#7f007f;"&gt;&lt;span class="Apple-style-span"   style="font-family:Georgia, -webkit-fantasy;color:#000000;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Der Realm ist aber nur ein Baustein bei der Authentifizierung mit Tomcat. Die weiterne Bausteine (Login-Config, Rollen und Security Constraints) sind in der Datei &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;web.xml&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; des Projektes enthalten. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7106308240466220560?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7106308240466220560/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jdbc-realm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7106308240466220560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7106308240466220560'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/tomcat-jdbc-realm.html' title='Tomcat JDBC Realm'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-1264767351415056455</id><published>2009-07-03T10:23:00.000+02:00</published><updated>2009-07-03T12:09:50.624+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Fluent Interface - schlechter Stil hat einen Namen</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: small;"&gt;Gester oder war es Vorgestern bin ich gleich zweimal auf ein Problem gestossen, dass einige Programmierer in einer Codezeile lange, komplexe, häufig ineinander geschachtelte Anweisungen schreiben. In einigen Fällen sieht da sehr elegant aus und es spart Platz, d.h. man muss nicht so viel scrollen im Editor.  Diese Art des Code Schreibens hat aus meiner Sicht zwei Mankos, auch wenn ich weniger scrollen muss sinkt die Verständlichkeit des Codes und wenn ein Fehler in dieser Zeile auftritt (Nullpointer in Zeile 137), muss diesen Ausdruck zerlegen um den Bug zu finden. Aus diesem Grund halte ich auch trinäre Ausdrücke für potentielle Fehler.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Daraufhin habe ich in der Newsgroup &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;de.comp.lang.java&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; den Verweis auf die Idee des &lt;/span&gt;&lt;a href="http://de.wikipedia.org/wiki/Fluent_Interface"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Fluent Interface&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; gefunden. Die oben beschrieben Art der Programmierung ist &lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;kein&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; Fluent Interface. Fluent Interface ist eine elegante Art der Programmierung die vor allem Domain-spezifisch, sehr effizient sein kann. Der Vorteil der Natürlichsprachlichkeit dieser Ausdrücke halte ich nicht unbedingt für einen Vorteil, das mag vielleicht auch mit mit meinen mit Lingo (&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-style: italic; line-height: 19px; font-family:sans-serif, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Macromedia Director, jetzt Adobe Director&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="  font-style: normal; line-height: normal; font-family:Georgia, fantasy;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;) gemachten Erfahrungen zusammenhängen. Die Natürlichsprachlichkeit war ja ein Kernfeature von Lingo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-1264767351415056455?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/1264767351415056455/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/fluent-interface-schlechter-stil-hat.html#comment-form' title='3 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1264767351415056455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/1264767351415056455'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/fluent-interface-schlechter-stil-hat.html' title='Fluent Interface - schlechter Stil hat einen Namen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3479293403852354409</id><published>2009-07-03T09:59:00.000+02:00</published><updated>2009-07-03T10:05:45.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Texte für LaTeX-Dokumente schreiben.</title><content type='html'>Die aktuellen Office-Pakete glänzen heute durch eine recht gute Rechtschreib- und Grammatikprüfung, ein Feature das vielen LaTeX-Editoren fehlt. Ein Möglichkeit dies zu kompensieren ist die Verwendung von Open Office mit der Erweiterung &lt;a href="http://extensions.services.openoffice.org/project/writer2latex"&gt;Writer2LaTeX&lt;/a&gt;. Mit ihr kann man Open Office Textdokumente als LaTeX-Dokumente exportieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3479293403852354409?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3479293403852354409/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/07/texte-fur-latex-dokumente-schreiben.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3479293403852354409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3479293403852354409'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/07/texte-fur-latex-dokumente-schreiben.html' title='Texte für LaTeX-Dokumente schreiben.'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4612141480967733874</id><published>2009-06-25T14:57:00.001+02:00</published><updated>2010-08-30T11:47:10.230+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='JUnit'/><title type='text'>Wo sollen die JUnit-Tests ausgeführt werden?</title><content type='html'>&lt;div style="text-align: left;"&gt;Wenn man ein Projekt mit Hilfe Mavens realisiert, steht man meist vor der Frage wo man die JUnit-Tests ausführt. Natürlich in Maven, das funktioniert prima auf Grund der meist durch Maven definierten Projektstruktur (ich weiss, sie ist natürlich änderbar). Das Problem was ich dann habe, es dauert länger bis ich weiss wie das Ergebnis der Test ist, dazu kommt das die Integration der Testergebnisse und deren graphische Darstellung (lange List in der Console) im Vergleich zur JUnit-Komponnente aus Eclipse mau ist. Wenn ich versuche einzelne Tests oder alle Tests des Projekts via Run-Menü in Eclipse ausführen zu lassen schlägt dies fehl. Abhilfe schafft dort ein anderer Weg (siehe Bild), wähle im &lt;i&gt;Package Explorer&lt;/i&gt; das Projekt aus, gehe dann auf den Menüpunkt &lt;i&gt;Run As&lt;/i&gt; und dort weiter auf den Punkt 5 &lt;i&gt;JUnit Test&lt;/i&gt;. Das wars, jetzt können alle Tests sowohl in Maven als auch in Eclipse ausgeführt werden.&lt;/div&gt;&lt;div&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5351253303108047682" src="http://4.bp.blogspot.com/_9ca3NMTRST4/SkN4hurkE0I/AAAAAAAAAG4/C9wusug-0q8/s320/Ohne+Titel.jpg" style="cursor: hand; cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 242px;" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4612141480967733874?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4612141480967733874/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/06/wo-sollen-die-junit-tests-ausgefuhrt.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4612141480967733874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4612141480967733874'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/06/wo-sollen-die-junit-tests-ausgefuhrt.html' title='Wo sollen die JUnit-Tests ausgeführt werden?'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9ca3NMTRST4/SkN4hurkE0I/AAAAAAAAAG4/C9wusug-0q8/s72-c/Ohne+Titel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3792304681264789075</id><published>2009-05-21T20:21:00.000+02:00</published><updated>2009-05-21T20:54:48.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Projektmanagementfehler</title><content type='html'>Hier ein Sammlung meiner liebsten Projektmanagement-Fehler:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Es wird eine neue Software  entwickelt die am Markt verfügbar ist, aber in schlechterer Qualität.&lt;/li&gt;&lt;li&gt;Projekte mit diversen Unterprojekten werden ohne Koordinator versucht.&lt;/li&gt;&lt;li&gt;Projekte mit diversen Unterprojekten werden ohne Integrationskonzept und ohne Personalaufwand für die Integration versucht.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Einheitliche Richtlinien für grosse Projekte werden nicht entwickelt oder nicht umgesetzt bzw. es wird die Umsetzung wird nicht überwacht.&lt;/li&gt;&lt;li&gt;Usability wird als Beiwerk in Projekten betrachtet.&lt;/li&gt;&lt;li&gt;Projektpläne werden nicht an veränderte Bedingungen angepasst.&lt;/li&gt;&lt;li&gt;Hippe Techniken werden ohne Rücksicht auf die Bedingungen im Projekt eingesetzt.&lt;/li&gt;&lt;li&gt;Erkannte Architekturfehler werden ignoriert.&lt;/li&gt;&lt;li&gt;Komplexe Projekte werden ohne Entwicklungsiterationen versucht.&lt;/li&gt;&lt;li&gt;Zeitverzug in Projekten wird ignoriert, es wird dann auf auf die Selbstheilungskräfte im Projekt gesetzt.&lt;/li&gt;&lt;li&gt;Man ignoriert elementare Anforderungen des Kunden um sich selbst zu verwirklichen.&lt;/li&gt;&lt;li&gt;Man lässt den Kunden alles Bestimmen (zu diesem Thema gibt es übrigen eine Simpsons-Folge in der Homer ein Auto entwirft).&lt;/li&gt;&lt;li&gt;Gute Projektidee werden durch mangelhafte Benutzeroberflächen sabotiert, weil bei der Planung niemanden Aufgefallen ist, dass die Software durch eine GUI bedient werden soll. Selbst nach dem erkennen dieses Problem werden keine Ressourcen in die GUI investiert unter dem Motto "&lt;span class="Apple-style-span" style="font-style: italic;"&gt;Wir haben eine Software mit den versprochenen Funktionen umgesetzt.&lt;/span&gt;", dass Niemand sie bedienen kann ist nicht unser Problem.&lt;/li&gt;&lt;li&gt;Schwierigkeiten in Projekten werden nicht konsequent angegangen sondern es wird entweder versucht das Problem zu ignorieren (Probleme die ich nicht sehe sind auch nicht da.) oder es wird herum lamentiert und die sich Sachen schöngeredet und versucht es nicht wie einen Fehler aussehen zu lassen.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3792304681264789075?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3792304681264789075/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/projektmanagementfehler.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3792304681264789075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3792304681264789075'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/projektmanagementfehler.html' title='Projektmanagementfehler'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4055351785705269332</id><published>2009-05-20T13:43:00.000+02:00</published><updated>2009-05-20T14:12:20.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Spring</title><content type='html'>Zur Zeit arbeiten wir an einem Projekt (Server, Fat-Client) in welchem Spring eingesetzt wird. Primär wird dort nur &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Dependency Injection&lt;/span&gt; (DI) verwand. Andere Dinge wie Aspekte, Lokalisierungsunterstützung oder Messageing kamen nicht zum Einsatz. Ein Probleme die dort auftrat waren:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hohe Startup-Zeiten des Clients&lt;/li&gt;&lt;li&gt;Inkonsistentes Logging&lt;/li&gt;&lt;li&gt;Laufzeit-Spring-Fehler &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unzureichende Integration von Spring in Eclipse&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Die hohen Startup-Zeiten in Kombination mit dem Problem das viele Spring-Fehlermeldungen erst zur Laufzeit auftraten haben aus meiner Sicht die ganze Entwicklung des Projektes behindert. Aus diesen Gründen wäre es besonders sinnvoll gewesen, wenn der Projektcode &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Test Driven&lt;/span&gt; entwickelt worden wäre. So hätte man viele Zeit-fressende Iterationen den Entwicklern erspart. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4055351785705269332?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4055351785705269332/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/spring.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4055351785705269332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4055351785705269332'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/spring.html' title='Spring'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3200623826988729155</id><published>2009-05-19T09:50:00.001+02:00</published><updated>2010-12-10T10:30:08.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><title type='text'>Test Driven Development (TDD) Vorlesung - Einführung</title><content type='html'>Bei iTunes gibt es den etwas weniger bekannten Bereich iTunes U. Dort können Universitäten Podcast oder Videopodcast veröffentlichen. Hier habe ich unter anderem eine Vorlesung von RWTH Aachen zu Thema &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Test Driven Development&lt;/span&gt; &amp;nbsp;von Prof. Jan Borchers (&lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/rwth-aachen.de.1974222834.01974222836.1990456993?i=1335072304"&gt;Link&lt;/a&gt;) gefunden. Auch wenn dort Xcode als Entwicklungsumgebung verwandt wird, so ist es doch eine gute Einführung in das Thema für Leute die sich das erste Mal mit dem Thema beschäftigen wollen. Leider enthält diese Vorführung einen sehr entscheidenden Fehler. Es wird hier demonstriert wie man Test schreibt. Was fehlt ist, wie man den Code schreibt. Bei TDD ist das schreiben von Code nicht equivalent zum schreiben von herkömmlichen Code, das hängt mit den kurzen Round-Trip-Zeiten zusammen, d.h. zwischen schreiben eines Test und dem schreiben des dazugehörigen Codes vergeht sehr wenig Zeit, z.B. eine Minute auch wird dort nur beiläufig angerissen, wie Test zu schreiben sind. Dies hat aber aus meiner Erfahrung einen entscheidenden Einfluss auf den späteren Code. Aber solche Dinge könnte man ja schon als Vertiefung des TDD ansehen. Sauberer wäre es schon gewesen, die wichtigen Dinge des TDD gleich am Anfang zu erwähnen:&lt;br /&gt;&lt;a href="http://deimos3.apple.com/WebObjects/Core.woa/Browse/rwth-aachen.de.1974222834.01974222836.1990456993?i=1335072304"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Test first&lt;/li&gt;&lt;li&gt;Kurze Round-Trip-Zeiten&lt;/li&gt;&lt;li&gt;Boundary Test&lt;/li&gt;&lt;li&gt;Testen mit falschen Parametern (Fehlerbehandlung)&lt;/li&gt;&lt;li&gt;Einbeziehung von Code-Überdeckung&lt;/li&gt;&lt;li&gt;Übergang vom Black-Box-Testen zum White-Box-Testen&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3200623826988729155?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3200623826988729155/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/ttd-vorlesung.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3200623826988729155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3200623826988729155'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/ttd-vorlesung.html' title='Test Driven Development (TDD) Vorlesung - Einführung'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3860248816461359448</id><published>2009-05-08T09:50:00.001+02:00</published><updated>2009-05-08T09:51:40.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Spassvögel bei Sun</title><content type='html'>Warum heisst die grundlegende Klasse in Java eigentlich &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Object&lt;/span&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3860248816461359448?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3860248816461359448/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/spassvogel-bei-sun.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3860248816461359448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3860248816461359448'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/spassvogel-bei-sun.html' title='Spassvögel bei Sun'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-5453220050712025706</id><published>2009-05-08T09:30:00.000+02:00</published><updated>2009-05-08T09:42:38.110+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extreme Programming'/><title type='text'>Test Driven Development (TDD)</title><content type='html'>Letztens wurde ich gefragt, wie ich das Problem löse, schwer testbare Klassen zu testen. Eine Möglichkeit wären natürlich Mock-Objekte, also Objekte die fürs Testen gewisse Funktionen als Dummy bereitstellen ggf. auch Datenbanken mit Testdaten aufbauen. Dies ist zwar etwas aufwendiger als das schreiben reiner Tests aber sonst nicht weiter aufregend. Da diese Antwort scheinbar nicht ausreichte, war meine nächste Antwort, dass das Objektmodell dann wohl fehlerhaft wäre und man dort ansätzen müsste. Diese Antwort war wohl nichts für Verfechter der reinen Objekt-orientierten Analyse und Entwurfs. Es wurde daraufhin auch deutlich, dass das Gegenüber unter &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Extreme Programming&lt;/span&gt; (XP) und TDD wohl nur als eine Technik wie z.B. &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Hibernate&lt;/span&gt; verstanden. XP und TDD sind an dieser Stelle mehr, sie sind ein Wechsel bei der Art und Weise wie Software entwickelt wird. Das heisst natürlich nicht, dass sich XP, TDD und Objekt-orientierte Softwareentwicklung sich ausschliessen. XP und TDD sind die nächste Evolutionsstufe der Softwareentwicklung, der Objekt-orientierten Softwareentwicklung.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-5453220050712025706?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/5453220050712025706/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/test-driven-development-tdd.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5453220050712025706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/5453220050712025706'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/test-driven-development-tdd.html' title='Test Driven Development (TDD)'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3575373052679636234</id><published>2009-05-04T20:14:00.002+02:00</published><updated>2010-03-08T10:02:26.749+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>Mac OS X, die beste Plattform für Java-Entwickler?</title><content type='html'>Vor einigen Jahren behauptete Apple, MaxOSX sei die beste Plattform für Java-Entwickler. Das stimmt nur zum teil. Einige Zeit verbaute Apple Intel Core Prozessoren. Diese sind im Gegensatz zu den Intel Core 2 Prozessoren nicht 64 Bit tauglich und leider bietet Apple Java 6 nur für 32 Bit Prozessoren an. Von Sun gibt es leider kein Java für den Mac. Auf meinem noch ganz guten iMac mit einem Core Duo Prozessor kann ich nicht mehr entwickeln. Kurze Hoffnung hatte ich als ich diesen &lt;a href="http://landonf.bikemonkey.org/code/macosx/"&gt;Link&lt;/a&gt; fand. Aber der Backport lief bei mir nicht.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Zur Zeit setzt ich deshalb VirtualBox und Windows ein um auf meinem Mac mit Java 6 zu entwickeln. Ob das so gewollt ist?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Übrigen hier noch ein nicht mehr ganz so frischer &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=13058"&gt;Link&lt;/a&gt; &amp;nbsp;zu diesem Thema.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3575373052679636234?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3575373052679636234/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/05/macosx-die-beste-plattform-fur-java.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3575373052679636234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3575373052679636234'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/05/macosx-die-beste-plattform-fur-java.html' title='Mac OS X, die beste Plattform für Java-Entwickler?'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6788896889868536341</id><published>2009-04-24T14:34:00.000+02:00</published><updated>2009-04-24T14:39:42.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Buch</title><content type='html'>Auf den Seiten der Firma Sonatype gibt es ein frei zugängliches (Creative Commons) Buch zum Thema Maven. Hier der &lt;a href="http://www.sonatype.com/books/maven-book/reference_de/public-book.html"&gt;Link zur deutschen Version&lt;/a&gt; des Buches. Alternativ kann man sich nach einer Registrierung  &lt;a href="http://www.sonatype.com/products/maven/documentation/book-defguide"&gt;hier die PDF-Version&lt;/a&gt; des Buches herunterladen. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6788896889868536341?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6788896889868536341/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-buch.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6788896889868536341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6788896889868536341'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-buch.html' title='Maven Buch'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-911244633513578546</id><published>2009-04-23T21:13:00.000+02:00</published><updated>2009-04-23T21:53:43.702+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Philosophie</title><content type='html'>Man kann Maven am besten vor dem Hintergrund von anderen Build-Werkzeugen wie Ant oder Make verstehen. Ich habe jahrelang alle meine Projekte mit Ant gemanaget. Dadurch ergab sich eine gewisse Standardisierung der Projekte. Ich verwendete immer die selbe bewährt Dateistruktur, immer die selbe Abfolge von Ant-Tasks. In der Regel kopierte ich dann auch die Ant-Build-Datei und passte sie leicht an. Alle Variablen waren richtig gesetzt. Es kam so zu einer Automatisierung der Softwareentwicklung. An dieser Stelle die Maven-Idee an. Maven geht jetzt noch einen Schritt weiter indem Maven davon ausgeht, dass es ein solches Vorgehen bei vielen Softwareentwicklern gibt und automatisiert den Build-Prozess. Dies geschieht auf folgenden Wegen:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Einführung eines Standard-Lifecycles für den Build-Prozess&lt;/li&gt;&lt;li&gt;Standard-Dateistruktur fürs Projekt&lt;/li&gt;&lt;li&gt;Jar-Management&lt;/li&gt;&lt;li&gt;Plugin-Managment&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Das Hauptproblem aus meiner Sicht für Ant-Benutzer ist, dass sich der Lifecycle und auch die Standard-Dateistruktur sich nicht in einer normalen &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;pom.xml&lt;/span&gt; widerspiegeln. In Ant oder auch in Make werden nur Dinge ausgeführt, die der Entwickler explizit in den entsprechenden Dateien definiert. In Maven greift hier die Automation, viele Dinge passieren ohne weiteres zutun des Entwicklers. Das man erstmal verkraften. Dazu kommt, dass man dadurch das man keine entsprechenden Anweisungen in der Steuerungsdatei definieren musste, fehlt dem Maven-Einsteiger der offensichtliche Ansatzpunkt um nach seinen Vorstellung das Projekt zu manipulieren. Ein weiterer Stolperstein für Maven-Anfänger oder Umsteiger ist, das der hohe Automatisierungsgrad sich nicht 1:1 durch das Maven-Eclipse-Plugin &lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;a href="http://m2eclipse.codehaus.org/"&gt;m2eclipse&lt;/a&gt;&lt;/span&gt; wieder findet. Dies kann z.B. zu interessanten Fehlern wie dem folgenden führen. Ich habe in Eclipse eine Javaklasse angelegt und dann mir durch Eclipse die passende Testklasse erzeugen lassen. Diese legt Eclipse automatisch im selben Package und im selben Verzeichnis ab. Das führt zu einem Fehler im Maven-Build-Prozess, weil die Testdateien nicht im selben Verzeichnis wie die Klasse liegen dürfen. Ih habe ein bisschen nach diesem Fehler suchen müssen, weil der Code korrekt war, die Dateien sich alle im Build-Path befanden und die Fehlermeldungen nicht auf das eigentliche Problem hinwiesen. In Nicht-Maven-Projekten existiert tritt dieser Fehler nicht auf.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-911244633513578546?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/911244633513578546/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-philosophie.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/911244633513578546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/911244633513578546'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-philosophie.html' title='Maven Philosophie'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7330930645983785153</id><published>2009-04-21T09:26:00.000+02:00</published><updated>2009-07-03T10:06:48.959+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Texlipse</title><content type='html'>Zur Zeit erstelle ich ein Liste meiner Programmierwerkzeuge. Heute ist der Abschnitt zu Texlipse fertig geworden. Teclipse ist ein Eclipse-Plugin zur Erstellung von Latex-Dokumenten. Weiters ist hier zu finden: &lt;a href="http://sites.google.com/site/mirkoebert/Home/werkzeuge"&gt;http://sites.google.com/site/mirkoebert/Home/werkzeuge&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7330930645983785153?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7330930645983785153/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/texlipse.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7330930645983785153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7330930645983785153'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/texlipse.html' title='Texlipse'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-2490339751246049644</id><published>2009-04-14T14:15:00.000+02:00</published><updated>2009-04-14T14:22:30.341+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Mehrere Ant-Schnipsel in Maven</title><content type='html'>Es ist natürlich möglich mehrere Ant-Schnipsel in Maven zu benutzen. Dazu fügt man dem Ant-Plugin mehrere &lt;span style="font-weight:bold;"&gt;execution&lt;/span&gt; in den &lt;span style="font-weight:bold;"&gt;executions&lt;/span&gt; Tag ein. Wichtig hierbei ist die Verwendung des Id-Tags.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;executions&amp;gt;&lt;br /&gt;       &amp;lt;execution&amp;gt;&lt;br /&gt;             &amp;lt;id&amp;gt;id1&amp;lt;/id&amp;gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Leider kann man für das Id-Tag keine einfache Schreibweise verwenden wie z.B.:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;executions&amp;gt;&lt;br /&gt;       &amp;lt;execution id="id1" &amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Das wäre aus meiner Sicht übersichtlicher und platzsparender. Aber es geht nicht.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-2490339751246049644?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/2490339751246049644/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/mehrere-ant-schnipsel-in-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2490339751246049644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/2490339751246049644'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/mehrere-ant-schnipsel-in-maven.html' title='Mehrere Ant-Schnipsel in Maven'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6677164136983810647</id><published>2009-04-14T13:55:00.000+02:00</published><updated>2009-04-14T14:22:46.948+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Interactive Maven</title><content type='html'>In Ant ist es möglich zur Ausführungszeit via &lt;span style="font-weight: bold;"&gt;input&lt;/span&gt; Variablenwerte durch den Benutzer setzen zu lassen.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;input message="Please enter project name:"&lt;br /&gt;           addproperty="project"&lt;br /&gt;           defaultvalue="ewindtech"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wenn ich jetzt versuche diesen Ant-Schnipsel in Maven zu integrieren schlägt dies leider fehl. Auf diese Weise kann Maven nicht interakiv gestaltet werden. Schade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6677164136983810647?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6677164136983810647/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/interactive-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6677164136983810647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6677164136983810647'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/interactive-maven.html' title='Interactive Maven'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-7908201150597594686</id><published>2009-04-09T09:24:00.000+02:00</published><updated>2009-04-09T09:31:37.131+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Neue Maven Version</title><content type='html'>Seit dem 21.3.2009 ist die Maven Version 2.1.0 verfügbar. Dabei handelt es sich primär um eine Bug-Fix-Version. Aus Performancesicht ist die parallele Auflösung von Artefakten hinzugekommen. Dies sollte in der Regel die Performance steigern. Die komplette Liste ist unter &lt;a href="http://maven.apache.org/release-notes.html"&gt;http://maven.apache.org/release-notes.html&lt;/a&gt; zu finden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-7908201150597594686?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/7908201150597594686/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/neue-maven-version.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7908201150597594686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/7908201150597594686'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/neue-maven-version.html' title='Neue Maven Version'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4857001750149162827</id><published>2009-04-08T14:09:00.000+02:00</published><updated>2009-04-21T09:25:59.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Integration von Ant in Maven</title><content type='html'>Oft ensteht der Eindruck, dass man sich für ein Build-Werkzeug entscheiden müsste. Dies ist falsch. Richtig ist, dass sich Ant auch in Maven integrieren lässt und es dafür schon passendes Plugin gibt.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;maven-antrun-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;  &amp;lt;executions&amp;gt;&lt;br /&gt;  &amp;lt;execution&amp;gt;&lt;br /&gt;         &amp;lt;phase&amp;gt;generate-resources&amp;lt;/phase&amp;gt;&lt;br /&gt;     &amp;lt;goals&amp;gt;&lt;br /&gt;          &amp;lt;goal&amp;gt;run&amp;lt;/goal&amp;gt;&lt;br /&gt;     &amp;lt;/goals&amp;gt;&lt;br /&gt;     &amp;lt;configuration&amp;gt;&lt;br /&gt;   &amp;lt;tasks&amp;gt;&lt;br /&gt;    &amp;lt;echo&amp;gt;Hello World&amp;lt;/echo&amp;gt;&lt;br /&gt;    &amp;lt;buildnumber file="src/main/webapp/WEB-INF/build.number"/&amp;gt;&lt;br /&gt;   &amp;lt;/tasks&amp;gt;&lt;br /&gt;    &amp;lt;/configuration&amp;gt;&lt;br /&gt;  &amp;lt;/execution&amp;gt;            &lt;br /&gt;   &amp;lt;/executions&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ant gibt in der Console bei der Ausführung den Satz &lt;span style="font-weight:bold;"&gt;Hello World&lt;/span&gt; aus und edswird die Build-Nummer hochgezählt. Beides sind Ant Core Tasks (siehe &lt;a href="http://ant.apache.org/manual/index.html"&gt;Ant Manual&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;In der Console sieht das dann wie folgt aus:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;...&lt;br /&gt;[INFO] [antrun:run]&lt;br /&gt;[INFO] Executing tasks&lt;br /&gt;     [echo] Hello World&lt;br /&gt;[INFO] Executed tasks&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Zu beachten ist, dass die Ant-Tasks am Ende der mit ihr assoziierten Phase ausgeführt werden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4857001750149162827?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4857001750149162827/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/integration-von-ant-in-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4857001750149162827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4857001750149162827'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/integration-von-ant-in-maven.html' title='Integration von Ant in Maven'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4911985347015358089</id><published>2009-04-08T09:32:00.000+02:00</published><updated>2009-04-08T10:45:26.129+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><title type='text'>Interaktivität mit Ant</title><content type='html'>Ant kann sehr einfach Benutzereingaben während der Ausführung entgegennehmen. Hier das Beispiel:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;input message="Please enter project name:"&lt;br /&gt;       addproperty="project"&lt;br /&gt;       defaultvalue="ewindtech"&lt;br /&gt;/&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bei der Ausfürung geht eine Dialogbox auf in der der Benutzer einen Test eingeben kann, dieser wird dann der Variable &lt;span style="font-style:italic;"&gt;projekt&lt;/span&gt; zugewiesen. Diese Variable wird durch diesen Ausdruck gleichzeitig erzeugt. Der Default-Wert der Variable ist in diesem Beispiel &lt;span style="font-style:italic;"&gt;ewindtech&lt;/span&gt;. Mit &lt;span style="font-style:italic;"&gt;message&lt;/span&gt; wird der Text der Dialogbox vorgegeben.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9ca3NMTRST4/Sdxj_kzB1tI/AAAAAAAAAGY/eQGOEwDgQ7M/s1600-h/Bildschirmfoto+2009-04-08+10-45-45.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://2.bp.blogspot.com/_9ca3NMTRST4/Sdxj_kzB1tI/AAAAAAAAAGY/eQGOEwDgQ7M/s320/Bildschirmfoto+2009-04-08+10-45-45.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5322238803505698514" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4911985347015358089?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4911985347015358089/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/interaktivitat-mit-ant.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4911985347015358089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4911985347015358089'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/interaktivitat-mit-ant.html' title='Interaktivität mit Ant'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_9ca3NMTRST4/Sdxj_kzB1tI/AAAAAAAAAGY/eQGOEwDgQ7M/s72-c/Bildschirmfoto+2009-04-08+10-45-45.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-3395987756032577727</id><published>2009-04-07T09:21:00.000+02:00</published><updated>2009-04-07T09:39:16.120+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Variablen</title><content type='html'>Variablen sind sowohl in Ant als auch Maven ein nützliche Sache. In Maven werden sie folgt definiert:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;    &amp;lt;compileSource&amp;gt;1.5&amp;lt;/compileSource&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hier wir eine Variable namens &lt;span style="font-style:italic;"&gt;compileSource&lt;/span&gt; definiert und mit dem Wert &lt;span style="font-weight:bold;"&gt;1.5&lt;/span&gt; versehen. Diese kann denn z.B. im Compiler-Plugin eingesetzt werden:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;source&amp;gt;${compileSource}&amp;lt;/source&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In Ant sieht das ähnlich aus:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;property name="classes" value="WebContent/WEB-INF/classes" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hier wurde eine Variable mit dem Namen &lt;span style="font-style:italic;"&gt;classes&lt;/span&gt; erstellt und ihr der Wert &lt;span style="font-style:italic;"&gt;WebContent/WEB-INF/classes&lt;/span&gt; zugewiesen. Benutzt werden kann dann die Variable wie folgt:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;target name="prepare" depends=""&amp;gt;&lt;br /&gt;    &amp;lt;mkdir dir="${classes}"/&amp;gt;&lt;br /&gt;&amp;lt;/target&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-3395987756032577727?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/3395987756032577727/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/variablen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3395987756032577727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/3395987756032577727'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/variablen.html' title='Variablen'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-6942075825247516527</id><published>2009-04-06T12:44:00.002+02:00</published><updated>2010-05-26T13:23:07.144+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven Compiler Plugin konfigurieren</title><content type='html'>Leider wird der Java-Compiler von Maven per &lt;span style="font-style: italic;"&gt;default&lt;/span&gt; sehr konservativ mit Parametern beschickt. So das es fast immer notwendig ist die Einstellungen anzupassen. Dies passt aus meiner Sicht eigentlich nicht zur Maven-Philosophie.&lt;br /&gt;So muss man die Sprachversion und Encoding des Quelltextes  und die Zielsprachversion in fast allen Fällen explizit angeben. Hier ein Beispiel: &lt;br /&gt;&lt;pre&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;   &amp;lt;source&amp;gt;1.6&amp;lt;/source&amp;gt;&lt;br /&gt;   &amp;lt;target&amp;gt;1.6&amp;lt;/target&amp;gt;&lt;br /&gt;   &amp;lt;encoding&amp;gt;UTF-8&amp;lt;/encoding&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/pre&gt;Wichtig ist die korrekte Schreibung der XML-Tags, so sind die &lt;b&gt;i&lt;/b&gt; der &lt;b&gt;Id&lt;/b&gt;s gross geschrieben.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-6942075825247516527?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/6942075825247516527/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-compiler-plugin-konfigurieren.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6942075825247516527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/6942075825247516527'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-compiler-plugin-konfigurieren.html' title='Maven Compiler Plugin konfigurieren'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-4317105696171861818</id><published>2009-04-06T09:13:00.000+02:00</published><updated>2009-04-08T14:34:52.424+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>Maven 2</title><content type='html'>Wer mit Maven arbeitet, kommt nicht umhin Jar's zu ins eigenen Projekt zu integrieren, die nicht im zentralen Repository zu finden sind. Um solche &lt;span style="font-style: italic;"&gt;fremden&lt;/span&gt; Pakete (Jar's) in eigene Repository (&lt;span style="font-weight: bold;"&gt;/Users/ebert/.m2&lt;/span&gt;) zu integrieren benötigt man nicht eine eigene Maven-Installation. Klassischer Wiese braucht man eine Maven-Installation und führt dann in der Shell folgenden Befehl aus: &lt;span style="font-weight: bold;"&gt;mvn install:install-file -DgroupId=java.plugin -DartifactId=plugin -Dversion=jre-1.5 -Dpackaging=jar -Dfile=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home/lib/plugin.jar &lt;/span&gt;-- jetzt ist das betreffende Jar registriert.&lt;br /&gt;Wenn man mit Eclipse arbeitet kann man das auch ohne zweite Maven-Installation machen. Eclipse bringt Maven schon mit. So kann man z.B: &lt;span style="font-weight: bold;"&gt;install:install-file -DgroupId=java.plugin -DartifactId=plugin -Dversion=jre-1.5 -Dpackaging=jar -Dfile=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home/lib/plugin.jar&lt;/span&gt; direkt im Run-Dialog unter Goals von Maven eingeben. Dieser Dialog ist eigentlich nicht für diese Verwendung gedacht, funktioniert aber.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9ca3NMTRST4/SdmuPOLIL8I/AAAAAAAAAGQ/LsNvTDLy1Rw/s1600-h/Bildschirmfoto+2009-04-06+09-24-59.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 258px;" src="http://4.bp.blogspot.com/_9ca3NMTRST4/SdmuPOLIL8I/AAAAAAAAAGQ/LsNvTDLy1Rw/s320/Bildschirmfoto+2009-04-06+09-24-59.jpg" alt="" id="BLOGGER_PHOTO_ID_5321476011240992706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-4317105696171861818?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/4317105696171861818/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-2.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4317105696171861818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/4317105696171861818'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/maven-2.html' title='Maven 2'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9ca3NMTRST4/SdmuPOLIL8I/AAAAAAAAAGQ/LsNvTDLy1Rw/s72-c/Bildschirmfoto+2009-04-06+09-24-59.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4722905579699085960.post-558639064266789568</id><published>2009-04-03T09:00:00.000+02:00</published><updated>2009-04-06T13:55:31.460+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiences'/><title type='text'>Ant vs. Maven</title><content type='html'>Die Frage nach den richtigen Build-Tool. Ja gibt es da überhaupt? Ich habe jetzt über viele Jahre mit Ant gearbeitet und damit auch komplexe Projekte gebaut. Einige Highlights: Integration von C++, Deployment zu verschiednen Tomcat-Instancen, automatische Adaptation an Kunden und parallele Ausführung von Build-Teilen. Ich habe ein gutes Verständinis von dem was Ant kann und wie Ant funkioniert. Etwas was immer wiederkehrte war, das ich zwischen den verschiednen build.xml Dateien Code hin und her kopierte und das ich gleichzeitig begann die Projektstruktur und den Build-Prozess zu vereinheitlichen. Dann kam Maven. Die ersten frühen Versuche schlugen fehl. Die Gründe dafür waren die andere Philosophie von Maven (&lt;i&gt;&lt;span class="lang" lang="en"&gt;Convention over Configuration&lt;/span&gt;&lt;/i&gt;), die Intrasparenz was wann passiert und die Integration in Eclipse erschien mir nich so hilfreich. Ich blieb erst mal bei Ant.&lt;br /&gt;Das nächste Erlebnis war auch nicht viel Besser, trotzdem versuchte ich es noch ein mal. Ich migrierte ein größeres Projekt von Ant zu Maven. Ja es funktionierte. Dafür benutzte ich das Eclipse-Plugin &lt;a href="http://m2eclipse.codehaus.org/"&gt;m2eclipse&lt;/a&gt;. Alles gut? Ja, aber ich hätte da noch ein paar kleine Wünsche:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Einfachere Integration fremder Jar's in das Projekt&lt;/li&gt;&lt;li&gt;Einfache Übernahme der Maven-Konfiguration zwischen verschiedenen Rechnern&lt;/li&gt;&lt;li&gt;Bessere, einfachere Suche nach Jar's (Dependencies)&lt;/li&gt;&lt;li&gt;Automatische Mirror-Konfiguration&lt;/li&gt;&lt;li&gt;Verbinden der Konsolenausgaben (Fehler) mit Eclipse&lt;/li&gt;&lt;li&gt;Automatisches Deployment von War's via Tomcat Manager&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Mein Fazit, ich werde weiter auf Maven setzen und spezielle Dinge (Projekt-Adaptation) mit Ant erledigen.&lt;br /&gt;&lt;br /&gt;Hier noch eine kleine Ant-Referenz:&lt;br /&gt;&lt;iframe src="http://rcm-de.amazon.de/e/cm?t=p0cf-21&amp;o=3&amp;p=8&amp;l=as1&amp;asins=3897215195&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4722905579699085960-558639064266789568?l=programming-2.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://programming-2.blogspot.com/feeds/558639064266789568/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://programming-2.blogspot.com/2009/04/ant-vs-maven.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/558639064266789568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4722905579699085960/posts/default/558639064266789568'/><link rel='alternate' type='text/html' href='http://programming-2.blogspot.com/2009/04/ant-vs-maven.html' title='Ant vs. Maven'/><author><name>Mirko Ebert</name><uri>http://www.blogger.com/profile/14029003405055594429</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://3.bp.blogspot.com/_9ca3NMTRST4/SlcNXk0D9-I/AAAAAAAAAHE/3t1cI_qRQuE/S220/Bildschirmfoto+2009-07-10+11-39-08.jpg'/></author><thr:total>0</thr:total></entry></feed>
