<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WebApp-Blogger</title>
	<atom:link href="http://www.webapp-blogger.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webapp-blogger.de</link>
	<description>Entwicklung von Web-Applikationen</description>
	<lastBuildDate>Mon, 06 May 2013 12:51:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Mac OS X als Entwicklungsumgebung</title>
		<link>http://www.webapp-blogger.de/2013/05/mac-os-x-als-entwicklungsumgebung/</link>
		<comments>http://www.webapp-blogger.de/2013/05/mac-os-x-als-entwicklungsumgebung/#comments</comments>
		<pubDate>Mon, 06 May 2013 12:51:00 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=686</guid>
		<description><![CDATA[Ich möchte heute einen kleinen Einblick geben mit welchen Werkzeugen ich so tagtäglich arbeite. Bei meiner Arbeit geht es hauptsächlich um die Entwicklung von Webapplikationen und wie es dem Titel zu entnehmen ist arbeite ich unter Mac-OS-X. Ich bewege mich dabei im Java- und Javascript-Ökosystem, also Grails, Groovy, Tomcat, JQuery und AngularJS sind so einige [...]]]></description>
				<content:encoded><![CDATA[<p>Ich möchte heute einen kleinen Einblick geben mit welchen Werkzeugen ich so tagtäglich arbeite. Bei meiner Arbeit geht es hauptsächlich um die Entwicklung von Webapplikationen und wie es dem Titel zu entnehmen ist arbeite ich unter Mac-OS-X. Ich bewege mich dabei im Java- und Javascript-Ökosystem, also Grails, Groovy, Tomcat, JQuery und AngularJS sind so einige Stichwörter.</p>
<p>Aber jetzt zur Auflistung meiner wichtigsten Werkzeuge:<span id="more-686"></span></p>
<h2>Forklift</h2>
<p>Forklift ist ein klassischer Dateimanager mit mehreren Ansichten. Er unterstützt die Tastenkombination des uralten Norton Commanders (oder Midnight Commanders), die in meinem Gehirn immer noch fest verdrahtet sind. Und was mir eigentlich noch wichtiger ist, er unterstützt alle wichtigen Remote-Protokolle (FTP, SFTP, SMB, usw.). Beim Kopieren werden alle Dateien in einer Warteschlange eingereiht und man kann weiterarbeiten. Zum Hin- und Herschieben von Dateien zwischen verschiedenen Rechnern genau das Richtige.</p>
<p>Kostenpflichtig (20$) unter <a title="Forklift homepage" href="http://www.binarynights.com/" target="_blank">http://www.binarynights.com/</a></p>
<h2>IntelliJ IDEA</h2>
<p>IDEA ist meine zentrale Entwicklungsumgebung, in der ich meine Webapplikationen programmiere. Solange man nicht zu viele Projekte geöffnet hat und die Quellcodedateien nicht zu groß werden ist IDEA auch eine recht flotte Umgebung. Beeindruckend an IDEA ist der Funktionsumfang. Man muss nicht 20 Plugins installieren, wie es bei Eclipse notwendig ist, um ordentlich arbeiten können. Beispielsweise gibt es eine ordentliche und umfangreiche Unterstützung für Groovy, GIT und Grails.</p>
<p>Kostenlos in der Community-Edition oder kostenpflichtig in der Ultimate-Edition (89€ Academic, 179€ Personal License) unter <a title="Intellij IDEA" href="http://www.jetbrains.com/idea/" target="_blank">http://www.jetbrains.com/idea/</a></p>
<h2>Sublime 2</h2>
<p>Man muss nicht immer eine Gigabyte große IDE starten, um eine kleine HTML-Datei zu bearbeiten. Dafür gibt es kleine schlanke Texteditoren. Man Favorit für solche Aufgaben ist Sublime 2. Der Editor startet sehr schnell und bietet Syntax-Highlighting für jede erdenkliche Sprache an. Beachtenswert ist die dicke Scrollbar auf der rechten Seite. Sie zeigt das Gesamtdokument stark verkleinert an und erleichtert so die Navigation. Die Funktionalität lässt durch Plugins stark erweitern.</p>
<p>Sublime 2 zum Testen (später 70$) unter <a title="Sublime 2" href="http://www.sublimetext.com/2" target="_blank">http://www.sublimetext.com/2</a></p>
<h2>Parallels Desktop</h2>
<p>Als Entwickler von Webapplikationen muss man nach wie vor seine Anwendung auf unterschiedlichen Browsern, Versionen und Betriebssystemen testen. Anstatt mehrere Rechner zu nutzen greift man lieber zu einer Virtualisierungssoftware. Ich habe mich für Parallels Desktop entschieden. Egal welches Betriebssystem (WinXP bis Windows 8 oder Ubuntu Desktop / Server)  es hat bis jetzt alles funktioniert. Es gibt sicherlich auch kostenlose Alternativen, die ähnlich gut funktionieren.</p>
<p>Kostenpflichtig (80€) unter <a title="Parallels Desktop" href="http://www.parallels.com/de/products/desktop/" target="_blank">http://www.parallels.com/de/products/desktop/</a></p>
<p>(Es gibt manchmal Aktionen oder andere Online-Shops, bei denen es wesentlich günstiger angeboten wird)</p>
<h2>Gimp</h2>
<p>Einfache Bildbearbeitungsfunktionen macht der Entwickler auch mal selbst und da ich unter Windows bereits mit Gimp gearbeitet habe bin auch auch dabei geblieben. Die Installation auf einem Mac ist zum Glück auch seit der Version 2.8.2 einfacher geworden, d.h. es ist keine X11-Umgebung mehr notwendig.</p>
<p>Mac-Download kostenlos (Open source) unter <a title="Gimp für Mac" href="http://gimp.lisanet.de/" target="_blank">http://gimp.lisanet.de</a></p>
<h2>Dropbox</h2>
<p>Um Dateien auf verschiedenen Rechnern synchron zu halten nutze ich Dropbox. Dieses Programm (bzw. Online-Dienst) bietet 2GB kostenlosen Speicherplatz in der Cloud und funktioniert bei mir auf allen Rechnern (Mac, Windows und Ubuntu) extrem zuverlässig. Man kann Dateien und Ordner auch für andere zum Lesen oder zum Schreiben freigeben.</p>
<p>Preise und Download unter <a title="Dropbox-Onlinespeicher" href="https://www.dropbox.com">https://www.dropbox.com</a></p>
<h2>BoxCryptor</h2>
<p>Dropbox speichert alle Dateien in der Amazon-Cloud. Wie sicher die Dateien vor Fremdzugriffen sind oder wie gut deutsche und europäische Datenschutzrichtlinien unterstützt werden sind schwierige Fragen. Ich habe mich jedenfalls entschieden wichtige Daten in meiner Dropbox zu verschlüsseln und nutze dafür BoxCryptor.</p>
<p>Kostenlos bei privater Nutzung unter <a title="BoxCryptor" href="https://www.boxcryptor.com/?lang=de" target="_blank">https://www.boxcryptor.com/?lang=de</a></p>
<h2>Google Chrome</h2>
<p>Einen Browser hat jeder auf seinem Rechner. Aber den Google Chrome möchte ich trotzdem erwähnen, da ich mit den Entwicklertools am besten zurechtkomme. Egal, ob man ein paar Styles testen möchte, sich die übertragenen Dateien mit HTTP-Header anschauen möchte, die gesetzten Cookies überprüfen möchte oder Logausgaben prüfen möchte, es geht alles irgendwie sehr einfach und intuitiv.</p>
<p>Download unter <a title="Google Chrome Browser" href="http://www.google.de/intl/de/chrome/browser/" target="_blank">http://www.google.de/intl/de/chrome/browser/</a></p>
<h2>Werkzeuge des Betriebssystems</h2>
<p>Mac-OS X bietet selbst viele Werkzeuge, die zu meinem Werkzeugkasten gehören:</p>
<ul>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Mail</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Kontakte</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Erinnerungen (Hiermit verwalte ich meine ToDo-Listen)</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Notizen (für Gedankensammlungen)</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Terminal</span></li>
<li><span style="line-height: 1.714285714; font-size: 1rem;">Screenshot (Shift-⌘-3 oder Shift-⌘-4 für Ausschnitt auswählen)</span></li>
</ul>
<p>Es gibt sicherlich noch viele andere Programme, die alles besser, günstiger und schneller erledigen. Aber vielleicht konnten sie ja ein paar Anregungen für Ihren Arbeitsalltag mitnehmen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2013/05/mac-os-x-als-entwicklungsumgebung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Full-Featured Webapplikation mit Grails</title>
		<link>http://www.webapp-blogger.de/2013/03/full-featured-webapplikation-mit-grails/</link>
		<comments>http://www.webapp-blogger.de/2013/03/full-featured-webapplikation-mit-grails/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 08:33:00 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=690</guid>
		<description><![CDATA[Ich möchte heute den Technologie-Stack einer umfangreicheren Webapplikation vorstellen, die ich entwickle und betreibe. Die Applikation heißt Nickels5 und ist eine E-Learning-Plattform mit integriertem Marktplatz für Kurse. Schaut einfach mal selbst vorbei. Mit den drei kostenlosen Beispielkursen kann man die Plattform gut erkunden. Aber nun ein Blick hinter die Kulissen von Nickels5. Vielleicht entdecken Sie [...]]]></description>
				<content:encoded><![CDATA[<p>Ich möchte heute den Technologie-Stack einer umfangreicheren Webapplikation vorstellen, die ich entwickle und betreibe. Die Applikation heißt <a href="http://www.nickels5.de" target="_blank">Nickels5</a> und ist eine E-Learning-Plattform mit integriertem Marktplatz für Kurse. Schaut einfach mal selbst vorbei. Mit den drei kostenlosen Beispielkursen kann man die Plattform gut erkunden.</p>
<p>Aber nun ein Blick hinter die Kulissen von Nickels5. <span id="more-690"></span>Vielleicht entdecken Sie ja für sich ein paar interesante Projekte. Mit der folgenden Auflistung und Beschreibung zeige ich alle am Betrieb beteiligten Technologien:</p>
<ul>
<li><span style="line-height: 14px;"><strong>Linux-Root-Server</strong> (Einen Root-Server gibt es bereits ab 50€ pro Monat. Wenn man eine Applikation lediglich testen möchte, dann reicht sicherlich auch ein virtueller Server aus. Diese gibt es bereits für unter 10€ pro Monat. Als Betriebsystem habe ich mich für eine Ubuntu-Version mit Long Term Support entscheiden.)</span></li>
<li><strong>MySQL</strong> (Trotz des ganzen Hypes um NoSQL benutze ich MySQL. Das ist eine ausgereifte Technologie, die man getrost einsetzen kann.)</li>
<li><strong>Apache und mod_jk</strong> (Die HTTP-Anfragen nimmt eine Apache-Server entgegen und kommuniziert mit dem Tomcat mittels mod_jk. Durch den vorgeschaltenen Apache ergeben sich vor allem Vorteile in der Konfiguration, beispielsweise für virtuelle Hosts oder SSL)</li>
<li><strong>Tomcat</strong> (Als Servlet-Container kommt Tomcat zum Einsatz. Es gibt aber auch andere, wie z.B. Jetty, die sich genauso eignen würden.)</li>
<li><strong>Grails</strong> (Das ist das eigentliche Webapplikation-Framework und auch der wichtigste Teil des Technologie-Stacks. Mit der Wahl des Frameworks entscheidet man sich für ein bestimmtes Programmiermodell und meist auch für eine bestimmte Programmiersprache. Auch die Art der Webapplikation ist damit grob festgelegt, damit ich meine ich z.B. Single-page vs. Multi-page application. Mit Grails haben wir also Groovy als Programmiersprache, ein Framework nach dem Prinzip &#8216;Coding by convention&#8217; und eine klassische Multi-page application.)</li>
<li><strong>Grails-Plugins</strong>:
<ul>
<li><span style="font-size: 1rem; line-height: 1.714285714;"><strong>resources</strong> (Das Resources-Plugin ist seit Grails 2 fester Bestandteil des Frameworks. Es sorgt dafür, dass CSS- und JS-Ressourcen optimiert werden. Bei der richtigen Verwendung kann man mit dem Plugin einen enormen Performance-Gewinn bei Seitendarstellung erreichen, insbesondere durch die Zusammenfassung von JS-Dateien)</span></li>
<li><strong>quartz</strong> (Quasi der Standard zur Ausführung von zeitgesteuerten Jobs. Ich verwende es auch häufig, um bestimmte Funktionen asynchron auszuführen um die Requestverarbeitung zu verkürzen.)</li>
<li><strong>mail</strong> (Das Plugin bietet eine super einfache DSL zum Versenden von E-Mail)</li>
<li><strong>jquery</strong> (Bereitstellung der JQuery-Bibliothek)</li>
<li><strong>bcrypt</strong> (Funktionen zum Verschlüsseln von Passwörtern)</li>
<li><strong>asynchronous-mail</strong> (Das Plugin bietet eine Queue zum Versenden vom Mails. Man kann beispielsweise festlegen, wie viele Mails pro Minute versendet werden dürfen und wann nach einem Fehlerfall versucht wird die Mail erneut zu senden.)</li>
</ul>
</li>
<li><strong><a href="http://twitter.github.com/bootstrap/index.html">Twitter Bootstrap</a></strong> (Bootstrap ist wohl zur Zeit das bekannteste HTML-CSS-Framework. Der große Vorteil ist, dass man auch ohne Designer von Anfang an optisch ordentliche Ergebnisse hat.)</li>
<li><strong>Javascript-Bibliotheken</strong>:
<ul>
<li><strong><a href="http://fgnass.github.com/spin.js/" target="_blank">spin.js</a></strong> (Optisches Feedback bei AJAX-Operationen)</li>
<li><strong><a href="http://tpgblog.com/cutetime/" target="_blank">CuteTime</a></strong> (Schönere Datumsangaben, wie &#8216;vor 2 Tagen&#8217;)</li>
<li><strong><a href="http://www.eyecon.ro/bootstrap-datepicker" target="_blank">DatePicker for Bootstrap</a></strong> (Schöne Datumskomponente)</li>
<li><strong><a href="http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html" target="_blank">highlight</a></strong> (Suchergebnisse hervorheben)</li>
<li><strong><a href="http://imsky.github.com/holder/" target="_blank">Holder.js</a></strong> (Platzhalter für Bilder)</li>
<li><strong><a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" target="_blank">JQuery-Plugin: Validation</a></strong> (Clientseitige Validierung von Formularen)</li>
<li><strong><a href="http://jqueryui.com/" target="_blank">JQueryUI</a></strong> (Nur wegen &#8216;sortable&#8217;, zum Festlegen der Reihenfolge von Elementen)</li>
<li><strong><a href="http://datatables.net/" target="_blank">DataTables</a></strong> (Sehr mächtige Bibliothek für HTML-Tabellen, beispielsweise spaltenweises Sortieren oder Suchfunktion)</li>
<li><strong><a href="https://github.com/blueimp/jQuery-File-Upload" target="_blank">jQuery-File-Upload</a></strong> (Ein Uploader für moderne Browser mit Fortschrittsanzeige)</li>
<li><strong><a href="http://imperavi.com/redactor/" target="_blank">Redactor</a></strong> (Ein einfacher HTML-Editor)</li>
</ul>
</li>
</ul>
<p>Zur Vollständigkeit möchte ich noch kurz die wichtigsten Entwicklungswerkzeuge vorstellen:</p>
<ul>
<li><span style="line-height: 14px;"><strong>IntelliJ IDEA</strong> (Die Ultimate-Version besitzt eine gute Grails-Unterstützung und Git und Groovy sind bereits in der Community-Edition enthalten)</span></li>
<li><strong>GIT</strong> als Versionskontrollsystem</li>
<li><strong>Redmine</strong> als Bugtracker</li>
<li><strong>Entwicklerkonsole</strong> des Google Chrome Browsers</li>
</ul>
<p>Das war der Blick hinter die Kulissen, vielleicht waren ein paar Anregungen für Ihre eigenen Projekte dabei.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2013/03/full-featured-webapplikation-mit-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Most forked GitHub Repositories &#8211; Infographic!</title>
		<link>http://www.webapp-blogger.de/2012/08/most-forked-github-repositories-infographic/</link>
		<comments>http://www.webapp-blogger.de/2012/08/most-forked-github-repositories-infographic/#comments</comments>
		<pubDate>Fri, 31 Aug 2012 07:06:16 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=655</guid>
		<description><![CDATA[Unter http://www.moretechtips.net/2012/08/most-forked-github-repositories.html findet man eine schöne Infografik mit den am meisten geteilten Repositories. Mir hat die Auflistung sehr gut gefallen, da man einen netten Überblick hat, welche Technologien und Frameworks am beliebtesten sind. Die Repositories auf Infografik sind leider nicht verlinkt, aber unter https://github.com/popular/forked findet man ordentlich verlinkt die originale Auflistung.]]></description>
				<content:encoded><![CDATA[<p>Unter <a href="http://www.moretechtips.net/2012/08/most-forked-github-repositories.html">http://www.moretechtips.net/2012/08/most-forked-github-repositories.html</a> findet man eine schöne Infografik mit den am meisten geteilten Repositories. Mir hat die Auflistung sehr gut gefallen, da man einen netten Überblick hat, welche Technologien und Frameworks am beliebtesten sind. </p>
<p>Die Repositories auf Infografik sind leider nicht verlinkt, aber unter <a href="https://github.com/popular/forked">https://github.com/popular/forked</a> findet man ordentlich verlinkt die originale Auflistung. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/08/most-forked-github-repositories-infographic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Logging-Frameworks in Java ein kleiner Überblick</title>
		<link>http://www.webapp-blogger.de/2012/08/logging-frameworks-in-java-ein-kleiner-uberblick/</link>
		<comments>http://www.webapp-blogger.de/2012/08/logging-frameworks-in-java-ein-kleiner-uberblick/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 11:44:46 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Logging]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=642</guid>
		<description><![CDATA[Wer die Wahl hat hat die Qual. Vor einigen Tagen wollte ich in einem kleineren Projekt Logging-Funktionalität einbauen und stand vor der Wahl eines Logging-Framworks. Das war ein willkommener Anlass sich einen Überblick aktueller Logging-Frameworks zu verschaffen. Das Ergebnis möchte ich natürlich nicht vorenthalten: log4j Das ist wohl der Klassiker schlechthin und ist wohl die [...]]]></description>
				<content:encoded><![CDATA[<p>Wer die Wahl hat hat die Qual. Vor einigen Tagen wollte ich in einem kleineren Projekt Logging-Funktionalität einbauen und stand vor der Wahl eines Logging-Framworks. Das war ein willkommener Anlass sich einen Überblick aktueller Logging-Frameworks zu verschaffen. Das Ergebnis möchte ich natürlich nicht vorenthalten:<br />
<span id="more-642"></span></p>
<h2>log4j</h2>
<p>Das ist wohl der Klassiker schlechthin und ist wohl die am weitesten verbreitete Logging-Bibliothek. Die Portierung zu anderen Programmiersprachen zeigt auch, dass das Konzept (Logger, Level, Appender, Layout) entsprechend erfolgreich ist. Fast jedes Projekt kommt mit dieser Bibliothek in Berührung, da irgendeine beteiligte Bibliothek diese verwendet.<br />
Allerdings wird Log4j nicht mehr weiterentwickelt. Selbsternannte Nachfolger, wie Logback oder Log4J 2, argumentieren oftmals mit der Performance.<br />
Ich denke, dass man log4j getrost auch in aktuellen Projekten einsetzen kann. Performanceunterschiede im einstelligen Nanosekundenbereich sollten in den meisten Projekte keine entscheidende Rolle spielen. Wer die Wahl hat sollte allerdings einen Blick auf Logback und SLF4J werfen.<br />
<a href="http://logging.apache.org/log4j/1.2/">logging.apache.org/log4j/1.2/</a></p>
<h2>Log4j 2</h2>
<p>Die Version 2 von log4j ist nicht API-kompatibel mit der ersten Version und ob Entwickler den Schritt zu dieser Version wagen oder zu einem anderen Framework wechseln wird sich in Zukunft zeigen. Das Projekt ist ambitioniert und die Entwicklung ist derzeit noch im Alpha-Stadium.<br />
<a href="http://logging.apache.org/log4j/2.x/">logging.apache.org/log4j/2.x/</a></p>
<h2>Apache Commons Logging</h2>
<p>JCL (da früher Jakarta Commons Logging) ist kein echtes Logging-Framework, sondern eine generalisierte Logging-Schnittstelle, die mit beliebigen anderen Logging-Frameworks zusammen arbeitet. Gerade diese Zusammenarbeit hat anscheinend große Probleme bereitet, so das JCL immer mehr an Bedeutung verloren hat. Auch die Tatsache, dass die letzte Version von 2007 ist unterstreicht den veralteten Status.<br />
<a href="http://commons.apache.org/logging/">commons.apache.org/logging/</a></p>
<h2>SLF4J</h2>
<p>Das &#8220;Simple Logging Facade for Java&#8221; beschreibt sich selbst im Namen schon sehr gut. Es handelt sich hier ebenfalls um eine generalisierte Logging-Schnittstelle, die mit beliebigen anderen Logging-Frameworks zusammen arbeitet. Die Probleme von JCL scheinen bei SLF4J nicht zu existieren. Durch das einfache Hinzufügen von JAR-Dateien entscheidet man sich für die spezielle Implementierung. Mit dem Bridging wird die Migration von anderen Logging-Frameworks vereinfacht.<br />
<a href="http://www.slf4j.org/">www.slf4j.org</a></p>
<h2>JUL</h2>
<p>Das &#8220;java.util.logging&#8221; (JUL) ist seit Java 1.4 fester Bestandteil der Klassenbibliothek und bietet ein einfaches Logging-Framework, das sich allerdings nicht mit den Features von Log4j oder Logback messen kann. Für kleinere Projekte oder Projekte, die auf externe Bibliotheken möglichst verzichten möchten, bietet sich JUL an.<br />
<a href="http://docs.oracle.com/javase/6/docs/technotes/guides/logging/overview.html">docs.oracle.com</a></p>
<h2>Logback</h2>
<p>Dieses Framework ist vom gleichen Autor wie log4j und beansprucht dessen Nachfolger zu sein. Insbesondere mit dem Argument bis zu 10mal schneller zu sein und weniger Speicher zu verbrauchen wird für das Framework geworben. Logback verwendet dabei die SLF4J-Schnittstelle, so dass ein Wechsel des Logging-Frameworks generell möglich ist. Das Changelog des Proejktes offenbart rege Entwicklungstätigkeit. Die Verwendung von Logback scheint derzeit die beste Wahl zu sein.<br />
<a href="http://logback.qos.ch/">logback.qos.ch</a></p>
<p>Eine schöne Einführung in die Thematik gibt das Buch &#8220;Java 7 Mehr als eine Insel&#8221; (<a href="http://openbook.galileocomputing.de/java7/1507_20_001.html">openbook.galileocomputing.de/java7/</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/08/logging-frameworks-in-java-ein-kleiner-uberblick/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>XML-Generierung in Grails</title>
		<link>http://www.webapp-blogger.de/2012/08/xml-generierung-in-grails/</link>
		<comments>http://www.webapp-blogger.de/2012/08/xml-generierung-in-grails/#comments</comments>
		<pubDate>Mon, 06 Aug 2012 11:54:54 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=618</guid>
		<description><![CDATA[In Grails gibt es verschiedene Möglichkeiten XML zu erzeugen. Ich möchte in diesem Beitrag vier verschiedene Methoden vorstellen. String-Generierung Die wohl einfachste Methode XML zu erzeugen und zu senden ist es, die XML-Tags einfach als String zu deklarieren. In einem Grails-Controller sieht das dann so aus: Diese Methode mag für kleine XML-Schnipsel geeignet sein, aber [...]]]></description>
				<content:encoded><![CDATA[<p>In Grails gibt es verschiedene Möglichkeiten XML zu erzeugen. Ich möchte in diesem Beitrag vier verschiedene Methoden vorstellen.</p>
<p><span id="more-618"></span></p>
<h2>String-Generierung</h2>
<p>Die wohl einfachste Methode XML zu erzeugen und zu senden ist es, die XML-Tags einfach als String zu deklarieren. In einem Grails-Controller sieht das dann so aus:</p>
<pre class="brush: groovy; title: ; notranslate">
String xml = 
  &quot;&lt;books&gt;&lt;book title=\&quot;Der alte Mann und das Meer\&quot;&gt;&lt;/book&gt;&lt;/books&gt;&quot;

render text: xml, contentType: &quot;text/xml&quot;
</pre>
<p>Diese Methode mag für kleine XML-Schnipsel geeignet sein, aber für größere XML-Dateien ist sie nicht zu gebrauchen. Das Quoten der Gänsefüßchen ist mühsam und macht den Code weniger lesbar. Da die XML-Tags nicht wirklich generiert werden ist Wahrscheinlichkeit eines Tippfehler eher hoch.</p>
<p>Also schauen wir nach anderen eleganteren Methoden.</p>
<h2>Encoding von Objekten</h2>
<p>Grails bietet uns die Möglichkeit an beliebige Objekte nach XML zu konvertieren. Dabei werden die Namen der Objekte (Klassen- und Variablennamen) als XML-Tags verwendet. Die ist besonders beim Kodieren von Domainobjekten sinnvoll:</p>
<pre class="brush: groovy; title: ; notranslate">
import grails.converters.XML

render Books.list() as XML
</pre>
<p>Ohne viel Aufwand hat man so alle Eigenschaften der Objekte kodiert. Möchte man etwas mehr Kontrolle über das entstehende XML haben, dann bieten sich die nächsten Methoden an:</p>
<h2>Groovy-MarkupBuilder</h2>
<p>Mit dem Groovy-MarkupBuilder können wir XML auf eine sehr einfach Art und Weise deklarieren:</p>
<pre class="brush: groovy; title: ; notranslate">
import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.books() {
  book(title: &quot;Der alte Mann und das Meer&quot;)
}

render(text: writer.toString(), contentType: &quot;text/xml&quot;)
</pre>
<p>Jeder XML-Tag wird als ein Methodenaufruf deklariert, wobei die Methodenparameter gleichzeitig die zu erzeugenden XML-Attribute sind. Geschachtelt wird mit den entsprechenden Closures (siehe <a href="http://groovy.codehaus.org/Creating+XML+using+Groovy's+MarkupBuilder">Groovy-Dokumentation</a>).</p>
<p>Der große Vorteil dieser Methode liegt in der dynamischen Verwendung, also die Verwendung von ganz normalen Groovy-Code innerhalb der Deklaration. Z.B. die Verwendung einer FOR-Schleife:</p>
<pre class="brush: groovy; title: ; notranslate">
...
xml.books() {
  for (book in bookList) {
    book(title: book.title)
  }
}
...
</pre>
<p>Zwei Fallstricke sollte man jedoch beachten. Methodennamen dürfen nicht alle Zeichen enthalten. Um beispielsweise ein XML-Tag mit einen Bindestrich zu erzeugen, muss man den Methodenaufruf in Gänsefüßchen setzen.</p>
<pre class="brush: groovy; title: ; notranslate">
...
xml.books() {
  &quot;book-item&quot; (title: &quot;Der alte Mann und das Meer&quot;)
}
...
</pre>
<p>Außerdem kann es zu Namenskonflikten kommen. Hat man bereits eine Variable &#8216;book&#8217; deklariert sollte man zur XML-Deklaration &#8216;book&#8217; ebenfalls in Gänsefüßchen setzen.</p>
<h2>Markup-Builder der &#8216;render&#8217;-Methode</h2>
<p>Der Groovy-MarkupBuilder kann auch direkt mit der &#8216;render&#8217;-Methode von Grails verwendet werden:</p>
<pre class="brush: groovy; title: ; notranslate">
render {
  books() {
    book (title: &quot;Der alte Mann und das Meer&quot;)
  }
}
</pre>
<p>Man spart sich etwas Tipparbeit, muss aber auf die gleichen Fallstricke achten.</p>
<h2>GSP-Rendering</h2>
<p>Möchte man bei der XML-Generierung Controller und View ordentlich trennen, so kann man auch das GSP-Rendering verwenden. GSP&#8217;s werden normalerweise als HTML gerendert, aber das geht auch als XML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ page contentType=&quot;text/xml&quot; %&gt;
&lt;books&gt;
  &lt;book title=&quot;Der alte Mann und das Meer&quot;&gt;&lt;/book&gt;
&lt;/books&gt;
</pre>
<p>Die Daten können wie immer im Controller bereitgestellt werden und in der GSP können die gewohnten Grails-Tags verwendet werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/08/xml-generierung-in-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Re-Designing the classic email client</title>
		<link>http://www.webapp-blogger.de/2012/07/re-designing-the-classic-email-client/</link>
		<comments>http://www.webapp-blogger.de/2012/07/re-designing-the-classic-email-client/#comments</comments>
		<pubDate>Thu, 12 Jul 2012 08:26:06 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Prototyp]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=603</guid>
		<description><![CDATA[Gestern bin ich über einen Designentwurf zu einem neuen E-Mail-Client gestolpert. Ich finde diesen Entwurf sehr gelungen, vor allem weil er einfach und klar strukturiert ist. Ein paar Ähnlichkeiten zum Mailclient von MacOS oder &#8220;Sparrow&#8221; sind natürlich nicht zu übersehen. Das Layout und ein paar Hover-Effekte des Designentwurf habe ich mal mit HTML/CSS und Javascript/JQuery/Google-Webfont [...]]]></description>
				<content:encoded><![CDATA[<p>Gestern bin ich über einen <a href="http://www.vanschneider.com/work/mail/">Designentwurf</a> zu einem neuen E-Mail-Client gestolpert. Ich finde diesen Entwurf sehr gelungen, vor allem weil er einfach und klar strukturiert ist. Ein paar Ähnlichkeiten zum Mailclient von MacOS oder &#8220;Sparrow&#8221; sind natürlich nicht zu übersehen.</p>
<p>Das Layout und ein paar Hover-Effekte des Designentwurf habe ich mal mit HTML/CSS und Javascript/JQuery/Google-Webfont nachgebildet (<a href="http://www.dels-it.de/mail/" title="Designentwurf Mail Client">Entwurf öffnen</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/07/re-designing-the-classic-email-client/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Projekt Euler in Groovy</title>
		<link>http://www.webapp-blogger.de/2012/07/projekt-euler-in-groovy/</link>
		<comments>http://www.webapp-blogger.de/2012/07/projekt-euler-in-groovy/#comments</comments>
		<pubDate>Fri, 06 Jul 2012 08:31:00 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Algorithmen]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Mathematik]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=595</guid>
		<description><![CDATA[Das Projekt Euler ist eine Webseite auf der mathematische Probleme gestellt werden, die mit Hilfe des Computers gelöst werden sollen. Die Probleme sind meist so, dass man mit einem trivialen Ansatz zu viel Rechenzeit benötigt. Die Herausforderung ist es nun, ein Algorithmus zu implementieren der weniger als 1 Minute benötigt. Um die Programmiersprache Groovy genauer [...]]]></description>
				<content:encoded><![CDATA[<p>Das <a href="http://projecteuler.net">Projekt Euler</a> ist eine Webseite auf der mathematische Probleme gestellt werden, die mit Hilfe des Computers gelöst werden sollen. Die Probleme sind meist so, dass man mit einem trivialen Ansatz zu viel Rechenzeit benötigt. Die Herausforderung ist es nun, ein Algorithmus zu implementieren der weniger als 1 Minute benötigt.</p>
<p>Um die Programmiersprache Groovy genauer kennenzulernen und den Umgang zu üben habe ich mal ein paar Aufgaben des Projekts Euler gelöst. Die <a href="http://www.webapp-blogger.de/project-euler-with-groovy/" title="Project Euler with Groovy (Solution)">Lösungen</a> habe ich aufgeschrieben und Besonderheiten von Groovy mit dokumentiert.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/07/projekt-euler-in-groovy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linktipp: Grails best practices 2</title>
		<link>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices-2/</link>
		<comments>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices-2/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 11:01:23 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Grails]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=571</guid>
		<description><![CDATA[Als Ergänzung zum letzten Post ein Diskussion auf Stackoverflow: http://stackoverflow.com/questions/6226759/best-practices-to-be-followed-while-developing-grails-application]]></description>
				<content:encoded><![CDATA[<p>Als Ergänzung zum letzten Post ein Diskussion auf Stackoverflow:<br />
<a href="http://stackoverflow.com/questions/6226759/best-practices-to-be-followed-while-developing-grails-application">http://stackoverflow.com/questions/6226759/best-practices-to-be-followed-while-developing-grails-application</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linktipp: Grails Best Practices</title>
		<link>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices/</link>
		<comments>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 12:46:24 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=565</guid>
		<description><![CDATA[Kein Grails-Tutorial, sondern einfach eine Best-Practices-Liste. http://www.infoq.com/articles/grails-best-practices]]></description>
				<content:encoded><![CDATA[<p>Kein Grails-Tutorial, sondern einfach eine Best-Practices-Liste.</p>
<p><a href="http://www.infoq.com/articles/grails-best-practices" title="Grails Best-Pracices">http://www.infoq.com/articles/grails-best-practices</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/04/linktipp-grails-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Textmate-Bundle für CoffeeScript</title>
		<link>http://www.webapp-blogger.de/2012/01/textmate-bundle-fur-coffeescript/</link>
		<comments>http://www.webapp-blogger.de/2012/01/textmate-bundle-fur-coffeescript/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 08:34:21 +0000</pubDate>
		<dc:creator>Stefan Urbansky</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://www.webapp-blogger.de/?p=552</guid>
		<description><![CDATA[Nachdem wir gestern CoffeeScript auf dem Mac installiert haben, schaffen wir uns heute eine nette Arbeitsumgebung in dem beliebten Texteditor Textmate. Das CoffeeScript-Bundle gibt es als Projekt auf GitHub. Mit folgenden Befehlen im Terminal wird das Bundle installiert. Dabei wird die Versionsverwaltung git vorausgesetzt, die z.B. bei XCode mit installiert wird. Dieses Bundle möchte natürlich [...]]]></description>
				<content:encoded><![CDATA[<p>Nachdem wir gestern CoffeeScript auf dem Mac <a href="http://www.webapp-blogger.de/2012/01/coffeescript-installation-auf-einem-mac/" title="CoffeeScript Installation auf einem Mac">installiert</a> haben, schaffen wir uns heute eine nette Arbeitsumgebung in dem beliebten Texteditor <a href="http://macromates.com/" title="Textmate - Texteditor">Textmate</a>.<br />
<span id="more-552"></span></p>
<p>Das CoffeeScript-Bundle gibt es als <a href="https://github.com/jashkenas/coffee-script-tmbundle" title="CoffeeScript-Bundle für Textmate">Projekt auf GitHub</a>. Mit folgenden Befehlen im Terminal wird das Bundle installiert.</p>
<pre class="brush: bash; title: ; notranslate">
cd ~/Library/Application\ Support/TextMate/Bundles
git clone git://github.com/jashkenas/coffee-script-tmbundle CoffeeScriptBundle.tmbundle
</pre>
<p>Dabei wird die Versionsverwaltung <code>git</code> vorausgesetzt, die z.B. bei XCode mit installiert wird.</p>
<p>Dieses Bundle möchte natürlich auch das Kommando <code>coffee</code> aufrufen. Da Textmate eine eigene PATH-Variable besitzt muss man noch überprüfen, ob dort (Textmate-Einstellungen / Advanced / Shell Variables) der Pfad <code>/usr/local/bin</code> eingetragen ist.</p>
<p>Mehr ist nicht zu tun. Nur auf die beiden Tastenkürzel <code>⌘R</code> und <code>⌘B</code> möchte ich hinweisen. Mit denen kann man die aktuelle Coffee-Datei ausführen bzw. sich das Kompilierte JS anschauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webapp-blogger.de/2012/01/textmate-bundle-fur-coffeescript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
