<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>programmieren &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/programmieren/</link>
	<description>Feed of posts on WordPress.com tagged "programmieren"</description>
	<pubDate>Wed, 10 Feb 2010 12:07:01 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Pixelmanipulation in C++ mit openFrameworks]]></title>
<link>http://netzwelten.wordpress.com/2009/11/30/pixelmanipulation-in-c-mit-openframeworks/</link>
<pubDate>Mon, 30 Nov 2009 20:18:12 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/30/pixelmanipulation-in-c-mit-openframeworks/</guid>
<description><![CDATA[Grundsätzlich eignet sich C++ mit den openFrameworks-Bibliotheken wunderbar, um Pixel von Bildern au]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Grundsätzlich eignet sich C++ mit den <a href="http://netzwelten.wordpress.com/tag/openframeworks/">openFrameworks</a>-Bibliotheken wunderbar, um Pixel von Bildern auszulesen oder zu manipulieren.</p>
<p>Das geht wie folgt:</p>
<pre class="brush: cpp;">

ofImage picture;
picture.loadImage(&#34;name_of_picture.xxx&#34;);
unsigned char *pixels = picture.getPixels();
</pre>
<p>Jetzt hat man alle Pixel, jeweils mit den drei RGB Farbwerten in pixels, z.b. pixels[0] = (255,255,255). Diese kann man jetzt mit zwei Schleifen zeilen- und spaltenweise durchlaufen, man muss lediglich darauf achten, dass immer drei hintereinanderliegende Werte eine Farbe definieren (RGB). Das könnte wie folgt aussehen:</p>
<pre class="brush: cpp;">

for (int i = 0; i &#60; picture.height * 3; i ++)
    {
        for (int j = 0; j &#60; picture.width * 3; j ++)
        {
            for (int k = 0; k &#60; 3; k++)
            {
                z = pixels[i * picture.width + j + k];   // z is now a value between 0 and 255
                // Do something with z
            }
        }
    }
</pre>
<p>Was kann man nun damit anfangen? Meine Kreativität hat jetzt dazu gereicht, ein kleines Programm zu schreiben, dass die Farbe jedes Pixels ausliest und eine HTML-Datei erstellt, die pro Pixel den Buchstaben &#8220;a&#8221; in der jeweiligen RGB-Codierung enthält. Leider wird so eine HTML-Datei bei einem 5 Megapixel zig Megabyte groß, was dem Firefox nicht wirklich gut bekommt. Also Bild runterskaliert und nur jeden dritten Pixel beachten.</p>
<p>Dann wird aus: (640&#215;480 Pixel)</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/coffee.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/coffee.jpg" alt="" title="coffee" width="500" height="375" class="aligncenter size-full wp-image-580" /></a></p>
<p>diese vom Programm generierte, knapp 10 Megabyte große HTML Datei: (Strg+ lässt das Bild schrumpfen, die Markierung der &#8220;a&#8221;s soll zeigen, dass es sich um Text handel)</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/coffee_html.png"><img src="http://netzwelten.wordpress.com/files/2009/11/coffee_html.png" alt="" title="coffee_html" width="500" height="375" class="aligncenter size-full wp-image-580" /></a></p>
<p>Hier noch das ganze Programm, inklusive einer Funktion zur Kreierung des Hex-RGB-Wertes für das HTML font-Tag:</p>
<pre class="brush: cpp;">

#include &#34;testApp.h&#34;
#include &#34;stdio.h&#34;
#include &#60;fstream&#62;

ofImage picture;
fstream output;

string int2hex(int decimal)
{
        if (decimal == 0)
        {
            return &#34;00&#34;;
        }

        string hex = &#34;&#34;;
        int tmp;

        for (int i = 0; i &#60;= 2 * sizeof(int) - 1; i++)
        {
          tmp = decimal &#62;&#62; i*4;
          if (tmp == 0)
            break;
                hex = &#34;0123456789ABCDEF&#34;[(tmp &#38; 0xF)] + hex;
        }

        if (hex.length() == 1) {
            hex = &#34;0&#34; + hex;
        }

        return hex;
}

//--------------------------------------------------------------

void testApp::setup(){

    string color = &#34;&#34;;
    picture.loadImage(&#34;coffee.jpg&#34;);
    output.open(&#34;output.html&#34;, ios::out);
    int z = 0;
    unsigned char *pixels = picture.getPixels();

    output &#60;&#60; &#34;&#60;html&#62;&#60;body&#62;&#60;small&#62;&#60;small&#62;&#60;small&#62;&#34; &#60;&#60; endl;

    for (int i = 0; i &#60; picture.height * 3; i += 3)
    {
        output &#60;&#60; &#34;&#60;nobr&#62;&#60;code&#62;&#34; &#60;&#60; endl;
        for (int j = 0; j &#60; picture.width * 3; j += 3)
        {
            color = &#34;&#34;;
            for (int k = 0; k &#60; 3; k++)
            {
                z = pixels[i * picture.width + j + k];
                color += int2hex(z);
            }

            output &#60;&#60; &#34;&#60;font color=\&#34;#&#34; &#60;&#60; color &#60;&#60; &#34;\&#34;&#62;a&#60;/font&#62;&#34; &#60;&#60; endl;

        }

        output &#60;&#60; &#34;&#60;/code&#62;&#60;\/nobr&#62;&#34; &#60;&#60; endl;
        output &#60;&#60; &#34;&#60;br&#62;&#34; &#60;&#60; endl;

    }

    output &#60;&#60; &#34;&#60;\/small&#62;&#60;\/small&#62;&#60;\/small&#62;&#60;\/body&#62;&#60;\/html&#62;&#34; &#60;&#60; endl;

    output.close();
}
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Conway's Game of Life in C++ (openFrameworks)]]></title>
<link>http://netzwelten.wordpress.com/2009/11/29/conways-game-of-life-in-c-openframeworks/</link>
<pubDate>Sun, 29 Nov 2009 09:20:58 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/29/conways-game-of-life-in-c-openframeworks/</guid>
<description><![CDATA[Homepage moved to: www.netzwelten.net Conway&#8217;s Game of Life in C++ (openFrameworks)]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Homepage moved to: <a href="http://www.netzwelten.net">www.netzwelten.net</a></p>
<p><a href="http://www.netzwelten.net/?p=575">Conway&#8217;s Game of Life in C++ (openFrameworks)</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Es kann YouTube]]></title>
<link>http://nkreipke.wordpress.com/2009/11/25/es-kann-youtube/</link>
<pubDate>Wed, 25 Nov 2009 21:25:43 +0000</pubDate>
<dc:creator>nkreipke</dc:creator>
<guid>http://nkreipke.wordpress.com/2009/11/25/es-kann-youtube/</guid>
<description><![CDATA[TubeFlect kann ab heute doch tatsächlich schon mal das Grundlegende, was es können muss: YouTube-Vid]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>TubeFlect kann ab heute doch tatsächlich schon mal das Grundlegende, was es können muss: YouTube-Videos abspielen. Das soll vorerst nur als Test laufen, weshalb das Layout auch noch nicht perfekt aussieht. Wie es funktioniert: Man nehme einen handelsüblichen YouTube-Link, kopiere ihn in das Textfeld und klickt auf &#8220;Load Video&#8221;. TubeFlect schnappt sich daraufhin den Flashplayer aus der YouTube-Seite und lädt ihn im Fenster. Das beste daran: Da er die Elemente rund um den Flash-Player nicht laden muss, geht der Ladeprozess schneller als auf konventionelle Methode &#8211; ein Pluspunkt für Leute mit schwachen Internetleitungen.</p>
<p>Somit haben wir schon mal einen Grundstein gelegt für eines der Prioritäten von TubeFlect: Das schnelle Laden von Videos. Den Text und vor allen Dingen die Werbung drumherum, die immer zuerst geladen werden, werden jetzt elegant übersprungen.</p>
<p><a href="http://nkreipke.wordpress.com/files/2009/11/bildschirmfoto-2009-11-25-um-22-00-18.png"><img class="aligncenter size-full wp-image-513" title="Bildschirmfoto 2009-11-25 um 22.00.18" src="http://nkreipke.wordpress.com/files/2009/11/bildschirmfoto-2009-11-25-um-22-00-18.png" alt="" width="600" height="469" /></a>Zum ersten Mal kann man jetzt schon die Grundidee von TubeFlect sehen: Das Video im Mittelpunkt. Wie gesagt, alles erstmal nur ein Test, das Layout des Videobrowsers gefällt uns auch nicht <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Zum Screenshot: Die YouTube-Suche funktioniert noch nicht, die Buttons in der Menüleiste auch nicht. Die letzten Probleme mit der Navigationsleiste sind behoben, so wird sie vorerst bleiben. Der Vollbildmodus vom VouTube-Video funktioniert selbstverständlich und auch maximieren kann man die Geschichte schon. Die 4 Favoritenordner hab ich mit dem Plusbutton hinzugefügt, das funktioniert also auch schon gut.</p>
<p><a href="http://nkreipke.wordpress.com/files/2009/11/bildschirmfoto-2009-11-25-um-22-03-01-2.png"><img class="aligncenter size-full wp-image-514" title="Bildschirmfoto 2009-11-25 um 22.03.01 (2)" src="http://nkreipke.wordpress.com/files/2009/11/bildschirmfoto-2009-11-25-um-22-03-01-2.png" alt="" width="600" height="480" /></a>Wir haben heute zusätzlich zum Browser auch unter der Haube ein paar Sachen geändert. Der Quelltext ist insgesamt kleiner geworden, es wird nicht mehr durch unnötige Variablen Speicher verbraucht. Auf dem Screenshot seht ihr übrigens FileMerger, ein Hilfsprogramm mit dem man 2 Dateien miteinander vergleichen kann. Rechts ist die alte Version des FolderListControllers, links die neue Version.</p>
<p>Zum Schluss noch 2 Sachen: Erstens sieht man, dass wir wirklich nur träge weiterkommen. Das liegt daran, dass wir täglich wegen dem Schulstress momentan nur maximal 2 Stunden pro Tag Zeit für TubeFlect haben. Außerdem bin ich noch nicht gerade der Profi in Sachen Cocoa-Programmierung und Obi versteht nur Bahnhof vom Quelltext <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Außerdem möchte ich demnächst einen zweiten Blog eröffnen, der sich nur um TubeFlect kümmert. Ich möchte diesen Blog weiterhin als Privatblog behandeln und nicht mit Changelogs vollstopfen. Ich sage euch bezüglich der Änderung rechtzeitig bescheid.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Recoding]]></title>
<link>http://nkreipke.wordpress.com/2009/11/24/recoding/</link>
<pubDate>Tue, 24 Nov 2009 21:32:17 +0000</pubDate>
<dc:creator>nkreipke</dc:creator>
<guid>http://nkreipke.wordpress.com/2009/11/24/recoding/</guid>
<description><![CDATA[Wie es der Teufel so wollte, habe ich gemeinsam mit Obi das Grundgerüst von TubeFlect neugeschrieben]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Wie es der Teufel so wollte, habe ich gemeinsam mit Obi das Grundgerüst von TubeFlect neugeschrieben. Also kompletter Neustart mit neuer, leerer Projektdatei. Durch das Recoding haben wir einige Probleme behoben und solche, die noch kommen sollten, direkt verhindert:</p>
<ul>
<li>Alle Controls wurden getaggt und ausreichend mit Identifiers versehen.</li>
<li>Copy-Paste ist wieder möglich.</li>
<li>Wir haben direkt mit 2 TableViews angefangen, und so konnten wir das bestehende Problem mit dem Löschen und Editieren der Hauptkategorien beheben.</li>
</ul>
<p>Ansonsten sind wir eigentlich auf dem Stand von gestern. Dafür gibbet auch noch mal eine größere Auswahl von momentanen Screenshots:</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[openFrameworks]]></title>
<link>http://netzwelten.wordpress.com/2009/11/21/openframeworks/</link>
<pubDate>Sat, 21 Nov 2009 14:30:59 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/21/openframeworks/</guid>
<description><![CDATA[Heute ist endlich mein über Amazon.de bei einem englischen Händler bestelltes Buch &#8220;Programmin]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://netzwelten.wordpress.com/files/2009/11/programming_interactivity.png"><img src="http://netzwelten.wordpress.com/files/2009/11/programming_interactivity.png?w=114" alt="" title="programming_interactivity" width="114" height="150" class="alignleft size-thumbnail wp-image-549" /></a></p>
<p>Heute ist endlich mein über <a href="http://www.amazon.de/">Amazon.de</a> bei einem englischen Händler bestelltes Buch &#8220;<strong><a href="http://www.oreilly.de/catalog/9780596154141/index.html">Programming Interactivity</a></strong>&#8221; von Joshua Noble gekommen <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Der Untertitel des über 700 Seiten schweren Buches lautet &#8220;<strong>A Designer&#8217;s Guide to <a href="http://netzwelten.wordpress.com/tag/processing/">Processing</a>, <a href="http://netzwelten.wordpress.com/tag/arduino/">Arduino</a>, and openFrameworks</strong>&#8220;, also genau das, womit ich mich zur Zeit befasse. Schon beim Stöbern bei Amazon viel mir das äußerst <a href="http://www.oreilly.de/catalog/9780596154141/toc.html">vielversprechende Inhaltsverzeichnis</a> sofort auf.</p>
<p>Aber hier soll es erstmal um die Einrichtung von <strong>openFrameworks</strong> gehen. Was ist das überhaupt? <a href="http://www.openframeworks.cc/">openframeworks.cc</a> titelt selbst: <cite>openFrameworks is an open source C++ toolkit for creative coding</cite>. Hört sich schon mal ganz interessant an. Dann wollen wir uns das mal ansehen.</p>
<p>Zuerst benötigen wir einen C++ Compiler für Windows. openFrameworks.cc und &#8220;Programming Interactivity&#8221; nennen u.a. <a href="http://www.codeblocks.org/">Code::Blocks</a> (Open Source). Dieser ist schnell runtergeladen (10,8 + 19,3 MB) und installiert. Zusätzlich werden die <a href="http://www.openframeworks.cc/content/files/codeblocks_additions.zip">Code::Blocks Additions für openFrameworks</a> benötigt. Die <tt>includes</tt> und <tt>libs</tt> des ZIP-Files kopieren wir nach <tt>C:\Program Files (x86)\CodeBlocks\MinGW</tt>.</p>
<p>Nun geht es weiter mit dem eigentlichen openFrameworks. Dieses wird von der <a href="http://www.openframeworks.cc/download">openFrameworks Downloadseite</a> heruntergeladen. Damit der Compiler die entsprechenden Dateien auch finden und zuordnen kann, sollte der Inhalt des openFrameworks nach <tt>C:\Users</tt> kopiert werden.</p>
<p>Das wars, nun kann der Spaß beginnen. Am einfachsten beginnt man immer mit dem Leer-Beispiel, was openFrameworks mitliefert. Das würde sich dann in <tt>C:\Users\apps\examples\emptyExample</tt> befinden. Ordner z.B. auf den Desktop kopieren und <tt>emptyExample.cbp</tt> starten (im Regelfall sollte diese Dateiendung dann mit Code::Blocks verknüpft sein). Im Programm werden wir hauptsächlich in der <tt>TestApp.cpp</tt> programmieren:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/testapp.png"><img src="http://netzwelten.wordpress.com/files/2009/11/testapp.png" alt="" title="testapp" width="500" height="291" class="aligncenter size-full wp-image-550" /></a></p>
<p>Wir sehen verschiedene Funktionen. setup() ist vergleichbar mit der setup() aus <a href="http://netzwelten.wordpress.com/2009/10/30/kurze-einfuhrung-in-die-die-programmiersprache-processing/">Processing</a> oder der <a href="http://netzwelten.wordpress.com/2009/03/21/experimentierboard-arduino-duemilanove/">Arduino-Umgebung</a>. update() wird vor draw() aufgerufen &#8211; draw() ist die Dauerfunktion in openFrameworks, so wie loop() bei Arduino und die gleiche draw() bei Processing. Dann sind noch die häufig benutzten Funktionen zum Abfangen von Tastatur- und Mauseingaben deklariert.</p>
<p>Unser Hallo-Welt-Programm soll einen Kreis darstellen:</p>
<pre class="brush: cpp;">

#include &#34;testApp.h&#34;
#include &#34;stdio.h&#34;

//--------------------------------------------------------------
testApp::testApp(){

}

//--------------------------------------------------------------
void testApp::setup(){

}

//--------------------------------------------------------------
void testApp::update(){
}

//--------------------------------------------------------------
void testApp::draw(){
    ofSetColor(0,0,0);
    ofFill();
    ofCircle(400,400,200);
}

//--------------------------------------------------------------
void testApp::keyPressed  (int key){
}

//--------------------------------------------------------------
void testApp::keyReleased(int key){

}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y ){
}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){
}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){

}
//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::resized(int w, int h){

}
</pre>
<p>Das Ergebnis ist eine 1.226kb große EXE-Datei, die dieses Ergebnis ausgibt:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/openframeworks-circle.png"><img src="http://netzwelten.wordpress.com/files/2009/11/openframeworks-circle.png?w=150" alt="" title="openframeworks-circle" width="150" height="115" class="alignleft size-thumbnail wp-image-551" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Buch-Rezension zu "Systemarchitekturen für Verteilte Anwendungen"]]></title>
<link>http://graberj.wordpress.com/2009/11/19/buch-rezension-zu-systemarchitekturen-fur-verteilte-anwendungen/</link>
<pubDate>Thu, 19 Nov 2009 19:30:21 +0000</pubDate>
<dc:creator>Johnny Graber</dc:creator>
<guid>http://graberj.wordpress.com/2009/11/19/buch-rezension-zu-systemarchitekturen-fur-verteilte-anwendungen/</guid>
<description><![CDATA[Die steigenden Anforderungen an aktuelle Software benötigen entsprechend flexible Lösungen. Herausfo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.hanser.de/buch.asp?isbn=978-3-446-41321-4"><img src="http://graberj.wordpress.com/files/2009/11/systemarchitekturenverteilteanwendungen1.jpg" alt="" title="Systemarchitekturen für verteilte Anwendungen" width="150" height="190" class="alignleft size-full wp-image-322" /></a>Die steigenden Anforderungen an aktuelle Software benötigen entsprechend flexible Lösungen. Herausforderungen wie Skalierbarkeit oder Ausfallsicherheit hofft man mit verteilten Systemen lösen zu können. Doch wo soll man starten? Was für Möglichkeiten gibt es und wie kann man die unzähligen Begriffe und Konzepte einordnen?<br />
<br />
Diese und weitere Fragen versucht das Buch &#8220;Systemarchitekturen für Verteilte Anwendungen&#8221;  von Jürgen Dunkel, Andreas Eberhart, Stefan Fischer, Carsten Kleiner und Arne Koschel zu beantworten. Eine kurze Einführung über Software-Architektur und eine Erklärung der grundlegenden Begriffe dient als Start in die Welt der verteilten Anwendungen.<br />
<br />
Diese Konzepte werden im 2. Teil vorgestellt:</p>
<ul>
<li><a href="http://de.wikipedia.org/wiki/Client-Server-Modell">Client-Server</a></li>
<li><a href="http://en.wikipedia.org/wiki/Multitier_architecture">3- und N-Tier</a></li>
<li><a href="http://de.wikipedia.org/wiki/Serviceorientierte_Architektur">SOA</a></li>
<li><a href="http://de.wikipedia.org/wiki/Ereignisgesteuerte_Architektur">Event-Driven Architecture</a> (EDA)</li>
<li><a href="http://de.wikipedia.org/wiki/Peer-to-Peer">Peer-to-Peer</a> (P2P)</li>
<li><a href="http://de.wikipedia.org/wiki/Grid-Computing">Grid</a></li>
<li><a href="http://de.wikipedia.org/wiki/Web_2.0">Web 2.0</a></li>
</ul>
<p>Um ein Gefühl dafür zu bekommen wird jeweils eine Erklärung des Architekturkonzepts, eine Übersicht zu den Realisierungsplattformen und Code-Beispiele geliefert.</p>
<p>Teil 3 behandelt die Auswahl einer konkreten Architektur. Die im zweiten Teil vorgestellten Konzepte werden wieder aufgenommen und auf die Anforderungen aus dem Softwarelebenszyklus hin untersucht. Dies umfasst die Problemanalyse, das Design, die Implementierung und Test, sowie den Betrieb und die Wartung.<br />
Die Fallbeispiele aus der Praxis reichen vom <a href="http://de.wikipedia.org/wiki/LAMP">LAMP</a>-Stack über den <a href="http://java.sun.com/developer/releases/petstore/">PetStore</a> von Java EE bis hin zum Grid des <a href="http://public.web.cern.ch/public/">CERN</a> für den LHC (<a href="http://lhc.web.cern.ch/lhc/">Large Hadron Collider</a>).</p>
<p>Als Abschluss dient ein Ausblick auf Software as a Service (<a href="http://de.wikipedia.org/wiki/Software_as_a_Service">SaaS</a>), Virtualisierung und <a href="http://de.wikipedia.org/wiki/Cloud_Computing">Cloud Computing</a>.</p>
<p>&#160;<br />
<strong>Stärken und Schwächen</strong><br />
Ein so komplexes und grosses Thema auf weniger als 300 Seiten näher zu bringen ist eine grosse Herausforderung. Es gelingt den Autoren einem einen guten Überblick zu verschaffen und hilft dabei, die unzähligen Begriffe einordnen zu können. Die Stärken des Buches liegen eindeutig bei den allgemeinen Erklärungen.<br />
<br />
Bei den konkreten technischen Umsetzungen fällt die Qualität aber stark ab. Die Code-Beispiele sollen zeigen wie das Beschriebene konkret umgesetzt wird. Allerdings sind diese viel zu kurz und wenn man sich nicht bereits mit dem Thema auseinander gesetzt hat wird man kaum verstehen, was da nun gezeigt wird. Die Seitenlangen XML-Dokumente helfen da auch nicht weiter.</p>
<p>Die Formatierung ist sehr gewöhnungsbedürftig. Alle Leerzeichen in den Strings werden konsequent markiert &#8211; auch dann wenn diese nur zum einrücken dienen und über die halbe Seite gehen. Dafür fehlt bei Befehlszeilen der Hinweis, dass der Zeilenumbruch dem Layout geschuldet ist und man den Befehl als eine Zeile eingeben muss.</p>
<p>Auch sehr gewöhnungsbedürftig ist die Art, wie auf weiterführende Literatur verwiesen wird. Als Beispiel die Einleitung des Architekturkonzepts der Grid Architekturen:</p>
<blockquote><p>Als Geburtsstunde des Grid Computing wird üblicherweise das Jahr 1998 mit dem Erscheinen des Werkes [25] genannt.</p></blockquote>
<p>Möchte man wissen welches Buch gemeint ist, bleibt einem nichts anderes übrig als zum Literaturverzeichnis zu blättern. Dies ist leider kein Einzelfall.</p>
<p>Die grosse Anzahl der Autoren bemerkt man bei den Erklärungen der Begriffe. Teilweise wird sehr grosszügig damit umgegangen und dann wiederum werden Abgrenzungen gemacht, die mit der Praxis kaum noch etwas zu tun haben.</p>
<p>Die Fallbeispiele sind eine Enttäuschung. Der LHC an sich ist spannend, doch wer braucht eine vergleichbare Lösung? Und ist die Demo-Applikation PetShop wirklich erwähnenswert? Mehr Beispiele aus der Praxis die einer grösseren Leserschaft bekannt sind (wie Amazon) hätten da besser gepasst. </p>
<p>&#160;<br />
<strong>Fazit</strong><br />
Das Buch ist gut geeignet um einen Überblick über das Thema der verteilten Anwendungen zu bekommen. Wer allerdings an der technischen Umsetzung interessiert ist, sollte sich nach einem anderen Buch umschauen.</p>
<p>&#160;<br />
<strong>Zum Buch</strong><br />
<a href="http://www.hanser.de/buch.asp?isbn=978-3-446-41321-4">Systemarchitekturen für Verteilte Anwendungen</a>, von Jürgen Dunkel, Andreas Eberhart, Stefan Fischer, Carsten Kleiner und Arne Koschel, 2008 HANSER, ISBN 978-3-446-41321-4, 293 Seiten</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Tutorial]TI89Titanium: Programmieren eines Spiels |Teil 2|]]></title>
<link>http://6eek.wordpress.com/2009/11/17/tutorialti89titanium-programmieren-eines-spiels-teil-2/</link>
<pubDate>Tue, 17 Nov 2009 19:04:14 +0000</pubDate>
<dc:creator>ceecilion</dc:creator>
<guid>http://6eek.wordpress.com/2009/11/17/tutorialti89titanium-programmieren-eines-spiels-teil-2/</guid>
<description><![CDATA[Teil 1|- TEIL 2: Das Grundgerüst Wir müssen erstmal eine &#8220;Oberfläche&#8221; Herstellen. Ein In]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://6eek.wordpress.com/2009/11/17/tutorial-ti89titanium-programmieren-eines-spielsteil-1/">Teil 1</a>&#124;-</p>
<h1><em><strong>TEIL 2: Das Grundgerüst</strong></em></h1>
<ol>
<li>Wir müssen erstmal eine &#8220;Oberfläche&#8221; Herstellen. Ein Inhaltsloses Programm, das sich immer wieder wiederholt, bis es den Endbefehl vom Benutzer bekommt.Die einfachste Art, das hinzukriegen, ist es zuerst eine Variable für die Tasten zu Definieren und das Programm in einer While-schleife laufen lassen, bis Escape registriert wird. Das sollte dann so aussehen:<br />
<blockquote><p>Spiel1()<br />
Prgm<br />
o➝key<br />
While key≠264[Escape]<br />
Getkey➝key<br />
Endwhile<br />
Endprgm</p></blockquote>
<p>Dieses Programm läuft nun in einer endlosschleife, bis wir Escape drücken.</li>
<li>Als vereinfachte Version eines Chars nehmen wir einfach mal einen Kreis. Dazu DEfinieren wir seine Y- und seine X-Position in Variablen und zeichnen ihn.<br />
<blockquote><p>Spiel2()<br />
Prgm<br />
o➝key<br />
15➝Cy<br />
17➝Cx<br />
While key≠264[Escape]<br />
Getkey➝key<br />
Pxlcircle Cy,Cx,15<br />
Endwhile<br />
Endprgm</p></blockquote>
</li>
<li>nun soll sich unser Char aber auch bewegen können. Da die Tasten schon abgefragt werden, müssen wir also nurnoch die veränderung der Variabeln einsetzen.<br />
<blockquote><p>Spiel3()<br />
Prgm<br />
o➝key<br />
15➝Cy<br />
17➝Cx<br />
While key≠264[Escape]<br />
Getkey➝key<br />
Pxlcircle Cy,Cx,15<br />
if key=344 then<br />
Cy+5➝Cy<br />
Endif<br />
if key=338 then<br />
Cy-5➝Cy<br />
Endif<br />
if key=340<br />
Cx+5➝Cx<br />
Endif<br />
if key=337 then<br />
Cx-5➝Cx<br />
Endif<br />
Endwhile<br />
Endprgm</p></blockquote>
<p>Das geht natürlich sehr viel eleganter, aber dazu kommen wir später.</li>
<li>Jetzt bewegt sich unser Kreis zwar, aberer zieht eine Lange Spur hinter sich her. um die Verschwinden zu lassen, reinigen wir einfach den Screen bei jedem Durchlauf.<br />
<blockquote><p>Spiel4()<br />
Prgm<br />
o➝key<br />
15➝Cy<br />
17➝Cx<br />
While key≠264[Escape]<br />
ClrDraw<br />
Getkey➝key<br />
Pxlcircle Cy,Cx,15<br />
if key=344 then<br />
Cy+5➝Cy<br />
Endif<br />
if key=338 then<br />
Cy-5➝Cy<br />
Endif<br />
if key=340 then<br />
Cx+5➝Cx<br />
Endif<br />
if key=337 then<br />
Cx-5➝Cx<br />
Endif<br />
Endwhile<br />
Endprgm</p></blockquote>
</li>
</ol>
<p>So. Das Grundgerüst des Spiels steht.<br />
beim nächstem mal behandeln wir die grobere Spielmechanik</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Sequel Pro - MySQL Management]]></title>
<link>http://ablogonzo.wordpress.com/2009/11/17/sequel-pro-mysql-management/</link>
<pubDate>Tue, 17 Nov 2009 17:56:41 +0000</pubDate>
<dc:creator>Allan</dc:creator>
<guid>http://ablogonzo.wordpress.com/2009/11/17/sequel-pro-mysql-management/</guid>
<description><![CDATA[Da war ich wieder mal auf der Suche nach allem und finde ganz was besonderes. Ich hatte schon ein an]]></description>
<content:encoded><![CDATA[Da war ich wieder mal auf der Suche nach allem und finde ganz was besonderes. Ich hatte schon ein an]]></content:encoded>
</item>
<item>
<title><![CDATA[Processing-Spielerei]]></title>
<link>http://netzwelten.wordpress.com/2009/11/14/processing-spielerei/</link>
<pubDate>Sat, 14 Nov 2009 20:09:09 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/14/processing-spielerei/</guid>
<description><![CDATA[Das Bild im Kopfbereich dieses Blogs ist ja bekannt: Jetzt habe ich mal an einem kleinen Processing-]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Das Bild im Kopfbereich dieses Blogs ist ja bekannt:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/avatar_main.png"><img src="http://netzwelten.wordpress.com/files/2009/11/avatar_main.png" alt="avatar_main" title="avatar_main" width="500" height="124" class="aligncenter size-full wp-image-529" /></a></p>
<p>Jetzt habe ich mal an einem kleinen <a href="http://netzwelten.wordpress.com/2009/10/30/kurze-einfuhrung-in-die-die-programmiersprache-processing/">Processing-Sketch</a> gearbeitet, um mir ein neues Bild zu erstellen:</p>
<pre class="brush: cpp;">

PFont font;
String[] data = new String[40]; // Array of 40 strings
int i = 0;

void setup()
{
  noStroke();
  size(800, 200);
  randomSeed(0);
  int zero_or_one = 0;
  for (int h = 0; h &#60; 39; h++) {
    String zero_one_string = &#34;&#34;;
    for (int number = 0; number &#60; 100; number++) {
      zero_or_one = int(random(0,2)); // 0 or 1
      zero_one_string = zero_one_string + str(zero_or_one); // create string of 0s and 1s
    }
    data[h] = zero_one_string; // fill array
  }
  font = loadFont(&#34;CourierNewPSMT-48.vlw&#34;);
  textFont(font);
  textSize(18);
}

void draw()
{
  fill(255 - i*0.25, 255 - i*0.25, 255 - i*0.25);
  rect(i,0,i,height);
  fill(0,0,120);
  int k = 15;
  for (int lines = 0; lines &#60; height/20; lines++) {
    text(data[lines],lines,k);
    k += 20;
  }
  i++;
  for (int z=0; z&#60;5; z++) {
    fill(155-z*10,224-z*30,220+z*10,18);
    ellipse(0,height/2-height/4+z*4,200,200);
  }
}
</pre>
<p>Der Sketch erstellt ein paar zufällige Strings aus Nullen und Einsen, stellt sie untereinander dar und lässt Weiß- bis Schwarztöne horizontal darüberlaufen. Heraus kommt das hier:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/blog_title_neu.png"><img src="http://netzwelten.wordpress.com/files/2009/11/blog_title_neu.png" alt="blog_title_neu" title="blog_title_neu" width="500" height="124" class="aligncenter size-full wp-image-534" /></a></p>
<p>Das nehme ich jetzt auch erstmal als neues Bild im Kopfbereich.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arduino²: Zwei Arduinos verbinden]]></title>
<link>http://netzwelten.wordpress.com/2009/11/14/arduino%c2%b2-zwei-arduinos-verbinden/</link>
<pubDate>Sat, 14 Nov 2009 12:21:28 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/14/arduino%c2%b2-zwei-arduinos-verbinden/</guid>
<description><![CDATA[Neue Blog-Url: www.netzwelten.net Artikel ist hier verfügbar]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Neue Blog-Url: <a href="http://www.netzwelten.net">www.netzwelten.net</a></p>
<p>Artikel ist <a href="http://www.netzwelten.net/?p=520">hier verfügbar</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arduino im Netz]]></title>
<link>http://netzwelten.wordpress.com/2009/11/12/arduino-im-netz/</link>
<pubDate>Thu, 12 Nov 2009 19:10:41 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/12/arduino-im-netz/</guid>
<description><![CDATA[Heute kam per Post mein bei Watterott.com bestelltes Arduino Shield &#8211; Ethernet. Hierbei handel]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Heute kam per Post mein bei <a href="http://www.watterott.com/Arduino-Shield-Ethernet">Watterott.com</a> bestelltes <strong>Arduino Shield &#8211; Ethernet</strong>. Hierbei handelt es sich um ein zusätzliches Shield für den <a href="http://netzwelten.wordpress.com/2009/03/21/experimentierboard-arduino-duemilanove/">Arduino Duemilanove</a>, das man einfach auf den Arduino steckt. Auf dem Shield befindet sich ein Netzwerkkabelanschluss (RJ45):</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-ethernet-shield.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-ethernet-shield.jpg" alt="arduino-ethernet-shield" title="arduino-ethernet-shield" width="500" height="375" class="aligncenter size-full wp-image-510" /></a></p>
<p>Shield also draufgesteckt und erstmal angeschlossen. Dann <a href="http://www.arduino.cc/en/Main/ArduinoEthernetShield">Arduino.cc &#8211; EthernetShield</a> angesehen und die <a href="http://arduino.cc/en/Reference/Ethernet">Referenz zur Bibliothek</a> studiert.</p>
<p>Herausgekommen ist ein kleiner Sketch, der dem Arduino die IP 192.168.2.20 im lokalen Netzwerk zuordnet und den Arduino als Server fungieren lässt:</p>
<pre class="brush: cpp;">

#include &#60;Ethernet.h&#62;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 20 };

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    server.print(&#34;Und der Arduino ist im Netz...&#34;);
  }
  delay(10);
  client.stop();
}
</pre>
<p>Bei der Wahl der MAC- und IP-Adresse sollte man darauf achten, keine Konflikte im lokalen Netz zu erzeugen. Also erstmal auf &#8220;Upload&#8221; gedrückt. Dieser dauert gefühlt ein wenig länger als bei Offline-Sketches.</p>
<p>Arduino pingt jedenfalls schon mal zurück:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-ping.png"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-ping.png" alt="arduino-ping" title="arduino-ping" width="500" height="144" class="aligncenter size-full wp-image-511" /></a></p>
<p>Nun mal schauen, ob auch im Browser was zu sehen ist:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-browser.png"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-browser.png" alt="arduino-browser" title="arduino-browser" width="499" height="187" class="aligncenter size-full wp-image-512" /></a></p>
<p>Um den Arduino mit der dem Heimnetzwerk von dessen Provider im Internet zugewiesenen IP-Adresse anpingen und -surfen zu können, muss jetzt noch je nach Router ein NAT (=Network Address Translation) eingerichtet werden, so sieht das z.B. beim <a href="http://netzwelten.wordpress.com/2009/02/13/speedport-w-701v-passwort-vergessen/">Telekom-Speedport</a> aus:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/nat.png"><img src="http://netzwelten.wordpress.com/files/2009/11/nat.png" alt="NAT" title="NAT" width="500" height="200" class="aligncenter size-full wp-image-513" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ Temperatur messen mit Arduino Teil 2]]></title>
<link>http://netzwelten.wordpress.com/2009/11/10/temperatur-messen-mit-arduino-teil-2/</link>
<pubDate>Tue, 10 Nov 2009 20:04:31 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/10/temperatur-messen-mit-arduino-teil-2/</guid>
<description><![CDATA[Homepage moved to: www.netzwelten.net Temperatur messen mit Arduino Teil 2]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Homepage moved to: <a href="http://www.netzwelten.net">www.netzwelten.net</a></p>
<p><a href="http://www.netzwelten.net/?p=494"> Temperatur messen mit Arduino Teil 2</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arduino: Testen der RGB-LED]]></title>
<link>http://netzwelten.wordpress.com/2009/11/09/arduino-testen-der-rgb-led/</link>
<pubDate>Mon, 09 Nov 2009 20:27:18 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/09/arduino-testen-der-rgb-led/</guid>
<description><![CDATA[Das fleißige Bauelemente-Testen geht weiter. Heute muss die RGB-LED &#8211; auch die gabs bei Conrad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://netzwelten.wordpress.com/files/2009/11/rgb-led1.png"><img src="http://netzwelten.wordpress.com/files/2009/11/rgb-led1.png" alt="rgb-led" title="rgb-led" width="87" height="197" class="alignleft size-full wp-image-487" /></a></p>
<p>Das fleißige Bauelemente-Testen geht weiter. Heute muss die RGB-<a href="http://de.wikipedia.org/wiki/Leuchtdiode">LED</a> &#8211; auch die gabs bei <a href="http://www.conrad.de/">Conrad</a> (2,98 €) &#8211; dran glauben.</p>
<p>Eine RGB-LED hat drei LED-Kristalle, Rot, Grün und Blau. Die Anschlüsse habe ich dieser recht undeutlichen Zeichnung entnommen, die ich irgendwo gefunden habe:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/rgb-led-schema.png"><img src="http://netzwelten.wordpress.com/files/2009/11/rgb-led-schema.png" alt="rgb-led-schema" title="rgb-led-schema" width="500" height="176" class="aligncenter size-full wp-image-488" /></a></p>
<p>Nun bauen wir die Schaltung und schreiben einen kleinen Sketch:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/rgb-led-schaltung.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/rgb-led-schaltung.jpg" alt="rgb-led-schaltung" title="rgb-led-schaltung" width="500" height="666" class="aligncenter size-full wp-image-489" /></a></p>
<p>Da ich nur ein Potentiometer zur Hand habe, entscheide ich mich, Grün auf 127 und Blau auf 255 zu setzen und nur Rot mittels Potentiometer zu steuern.</p>
<pre class="brush: cpp;">

int sensorPin = 0;
int ledPinRot = 4;
int ledPinBlau = 5;
int ledPinGruen = 6;
int sensorValue = 0;  

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.print(sensorValue);  // Debug

  analogWrite(ledPinRot, sensorValue/4);
  analogWrite(ledPinGruen, 127);
  analogWrite(ledPinBlau, 255);  

  delay(10);
}
</pre>
<p>Das Ergebnis ist eine nette Stimmungsleuchte, die blau/lila-rotes Licht erzeugt:</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/QjYYrZbM3hk&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/QjYYrZbM3hk&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Arduino: Erste Versuche mit dem Servomotor ]]></title>
<link>http://netzwelten.wordpress.com/2009/11/08/arduino-erste-versuche-mit-dem-servomotor/</link>
<pubDate>Sun, 08 Nov 2009 19:10:05 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/11/08/arduino-erste-versuche-mit-dem-servomotor/</guid>
<description><![CDATA[Homepage moved to: www.netzwelten.net Arduino: Erste Versuche mit dem Servomotor]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Homepage moved to: <a href="http://www.netzwelten.net">www.netzwelten.net</a></p>
<p><a href="http://www.netzwelten.net/?p=474">Arduino: Erste Versuche mit dem Servomotor</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Buch-Rezension zu "The Art of Unit Testing"]]></title>
<link>http://graberj.wordpress.com/2009/11/08/buch-rezension-zu-the-art-of-unit-testing/</link>
<pubDate>Sun, 08 Nov 2009 12:45:32 +0000</pubDate>
<dc:creator>Johnny Graber</dc:creator>
<guid>http://graberj.wordpress.com/2009/11/08/buch-rezension-zu-the-art-of-unit-testing/</guid>
<description><![CDATA[&#8220;The Art of Unit Testing&#8221; von Roy Osherove ist im Mai 2009 bei Manning erschienen. Das B]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.manning.com/osherove/"><img src="http://graberj.wordpress.com/files/2009/10/artunittesting.jpg" alt="The Art of Unit Testing" title="The Art of Unit Testing" width="150" height="186" class="alignleft size-full wp-image-160" /></a>&#8220;The Art of Unit Testing&#8221; von <a href="http://weblogs.asp.net/ROsherove/">Roy Osherove</a> ist im Mai 2009 bei Manning erschienen. Das Buch behandelt Unit Testing in C#. </p>
<p>&#160;<br />
<strong>Zum Inhalt</strong><br />
<strong>Kapitel 1</strong> zeigt die Basis von Unit Tests. Diese umfasst eine Definition der Begriffe, eine kurze Einführung zu Test-Driven Development (TDD) und eine Abgrenzung gegen Integrationstests. Den nicht alles, was sicht Unit Test nennt, ist auch wirklich einer.</p>
<p><strong>Kapitel 2</strong> hilft einem durch den ersten Unit Test. Nach der Auflistung der Vorteile die ein entsprechendes Test-Framework bringen folgt ein Rundgang durch NUnit. Dieser reicht von der Installation über die Einrichtung eines Test-Projekts zu Namenskonventionen bis hin zur Ausführung der Tests.</p>
<p>Wie man mit <a href="http://de.wikipedia.org/wiki/Stub_%28Programmierung%29">Stubs </a>die Abhängigkeiten aufbrechen kann wird in <strong>Kapitel 3</strong> gezeigt. Das Beispielprojekt hat zu beginn eine direkte Abhängigkeit zum Dateisystem. In 2 Schritten wird der Code so umgebaut, dass die Abhängigkeit aufgelöst werden kann. Mit einer kleinen Hilfsklasse, dem Stub, kann man dann genau die Antwort zurück liefern, die man für den Test der Übergeordneten Klasse benötigt. Dies kann in dem Beispiel sowohl ein Boolean sein wie auch eine Exception des Dateisystems.<br />
Es folgt ein Abstecher ins Thema <a href="http://de.wikipedia.org/wiki/Dependency_Injection">Dependency Injection</a>. Denn der Stub, aber auch die konkrete Klasse mit der Logik, muss ja mit der aufrufenden Klasse verbunden werden. Es werden die Vor- und Nachteile der jeweiligen Ansätze dargelegt, damit man selber das zu seinem Problem passende auswählen kann. </p>
<p><strong>Kapitel 4</strong> zeigt wie man mit Mock Objekten die Interaktion mit der zu testenden Klasse prüfen kann. Mit einem selbst geschriebenen Mock wird das Prinzip erklärt, bevor in <strong>Kapitel 5</strong> das Mock-Framework <a href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a> erklärt wird. Eine Übersicht der anderen verbreiteten Frameworks (wie <a href="http://learn.typemock.com/">TypeMock</a>, <a href="http://www.nmock.org/">NMock </a>und <a href="http://www.nunit.org/index.php">NUnit.Mocks</a>) rundet das Kapitel ab. </p>
<p>Die Organisation von Tests, Test Patterns und Continuous Integration bilden das <strong>Kapitel 6</strong>, während  <strong>Kapitel 7</strong> die Qualität der Tests behandelt. Lesbarkeit und Verständlichkeit sind Dinge, die auch bei Tests bedacht werden müssen. </p>
<p><strong>Kapitel 8</strong> hilft bei der Integration von Unit Tests in die Firma. Hierbei geht es nicht um die technische, sondern um die organisatorische Ebene. Osherove berichtet über seine Erfahrungen und liefert Antworten zu häufig aufkommenden Fragen und Problemen. </p>
<p>Wie man mit Legacy Code arbeiten kann zeigt <strong>Kapitel 9</strong>. Grosse Projekte ohne wirkliche Unit Tests benötigen spezifische Vorgehensweise. Auch hier werden Vor- und Nachteile der Ansätze aufgezeigt. Der Einsatz von Tools kann einem auch hier das Leben erleichtern. Depender oder NDepend können Abhängigkeiten anzuzeigen, was als Ausgangslage für Unit Tests dienen kann. Für Java Entwickler werden die Tools <a href="https://jmockit.dev.java.net/">JMockit </a>(vergleichbar mit TypeMock) und Vise erwähnt. </p>
<p>Design und Testbarkeit werden noch einmal ausführlich im <strong>Anhang A</strong> behandelt. <strong>Anhang B</strong> bietet eine kompakte Auflistung von Tools und Frameworks aus allen Bereichen von Tests.</p>
<p>&#160;<br />
<strong>Fazit</strong><br />
Ein sehr gutes Buch zur Kunst des Unit Testings. Auf rund 300 Seiten erfährt man unzählige Möglichkeiten zum sauberen testen. Das Buch richtet sich eher an Leser mit Erfahrungen im Bereich Unit Testing. Für Anfänger mag sich nicht immer erschliessen, worin die Vorteile der jeweiligen Ansätze liegen. Hat man sich aber mit den Problemen selber herumgeschlagen, braucht es nicht mehr viele Worte. Ich fand das Buch eine ideale Ergänzung zu <a href="http://graberj.wordpress.com/2009/09/15/buch-rezension-zu-test-driven/">Test Driven</a>.<br />
Der Anhang A hätte ein eigenes, „richtiges“ Kapitel verdient und einige Grafiken hätte man nochmals überarbeiten können. Davon abgesehen ist das Buch sehr gut.</p>
<p>&#160;<br />
<strong>Zum Buch</strong><br />
<a href="http://www.manning.com/osherove/">The Art of Unit Testing with Examples in .NET</a> von Roy Osherove, 2009 Manning, ISBN 978-1-933988-27-6, 320 Seiten</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Übersicht über Java Collections]]></title>
<link>http://myminutes.wordpress.com/2009/11/06/ubersicht-uber-java-collections/</link>
<pubDate>Fri, 06 Nov 2009 11:27:43 +0000</pubDate>
<dc:creator>dedeibel</dc:creator>
<guid>http://myminutes.wordpress.com/2009/11/06/ubersicht-uber-java-collections/</guid>
<description><![CDATA[Ein Kollege hat heute einen Link zu einer schönen Übersicht über die Standard Java Collections herum]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ein Kollege hat heute einen Link zu einer schönen Übersicht über die Standard Java Collections herumgeschickt.</p>
<p><a href="http://www.torsten-horn.de/techdocs/java-collections.htm">http://www.torsten-horn.de/techdocs/java-collections.htm</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Unreal Engine 3 - Kostenlos]]></title>
<link>http://ablogonzo.wordpress.com/2009/11/05/unreal-engine-3-kostenlos/</link>
<pubDate>Thu, 05 Nov 2009 18:44:27 +0000</pubDate>
<dc:creator>Allan</dc:creator>
<guid>http://ablogonzo.wordpress.com/2009/11/05/unreal-engine-3-kostenlos/</guid>
<description><![CDATA[Einfach nur toll. Unreal Engine 3 kostenlos. Das muss man sich mal auf der Zunge zergehen lassen. In]]></description>
<content:encoded><![CDATA[Einfach nur toll. Unreal Engine 3 kostenlos. Das muss man sich mal auf der Zunge zergehen lassen. In]]></content:encoded>
</item>
<item>
<title><![CDATA[Java arrived!]]></title>
<link>http://r0mi.wordpress.com/2009/11/04/java-arrived/</link>
<pubDate>Wed, 04 Nov 2009 13:42:07 +0000</pubDate>
<dc:creator>r0m</dc:creator>
<guid>http://r0mi.wordpress.com/2009/11/04/java-arrived/</guid>
<description><![CDATA[Hallo zusammen, es ist eine Zeit her, dass das letzte Mal hier im Blog von mir was veröffentlicht wu]]></description>
<content:encoded><![CDATA[Hallo zusammen, es ist eine Zeit her, dass das letzte Mal hier im Blog von mir was veröffentlicht wu]]></content:encoded>
</item>
<item>
<title><![CDATA[Macheist 4 - Countdown Widget]]></title>
<link>http://ablogonzo.wordpress.com/2009/10/31/macheist-4-countdown-widget/</link>
<pubDate>Sat, 31 Oct 2009 09:49:02 +0000</pubDate>
<dc:creator>Allan</dc:creator>
<guid>http://ablogonzo.wordpress.com/2009/10/31/macheist-4-countdown-widget/</guid>
<description><![CDATA[&nbsp; Dann will ich mal mein Countdown Widget vorstellen. Nichts besonderes nur damit man nichts ve]]></description>
<content:encoded><![CDATA[&nbsp; Dann will ich mal mein Countdown Widget vorstellen. Nichts besonderes nur damit man nichts ve]]></content:encoded>
</item>
<item>
<title><![CDATA[Kurze Einführung in die die Programmiersprache Processing]]></title>
<link>http://netzwelten.wordpress.com/2009/10/30/kurze-einfuhrung-in-die-die-programmiersprache-processing/</link>
<pubDate>Fri, 30 Oct 2009 19:41:03 +0000</pubDate>
<dc:creator>netzwelten</dc:creator>
<guid>http://netzwelten.wordpress.com/2009/10/30/kurze-einfuhrung-in-die-die-programmiersprache-processing/</guid>
<description><![CDATA[Neue Adresse: http://www.netzwelten.net Kurze Einführung in die die Programmiersprache Processing]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.netzwelten.net/">Neue Adresse: http://www.netzwelten.net</a></p>
<p><a href="http://www.netzwelten.net/?p=341">Kurze Einführung in die die Programmiersprache Processing</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Unity 2.6 - Kostenlos]]></title>
<link>http://ablogonzo.wordpress.com/2009/10/30/unity-2-6-kostenlos/</link>
<pubDate>Fri, 30 Oct 2009 14:21:57 +0000</pubDate>
<dc:creator>Allan</dc:creator>
<guid>http://ablogonzo.wordpress.com/2009/10/30/unity-2-6-kostenlos/</guid>
<description><![CDATA[Unity 2.6 &#8211; True cross-platform game development, optimized. SAN FRANCISCO, CA &#8211; October]]></description>
<content:encoded><![CDATA[Unity 2.6 &#8211; True cross-platform game development, optimized. SAN FRANCISCO, CA &#8211; October]]></content:encoded>
</item>
<item>
<title><![CDATA[Endlich mal wieder was tippseln!]]></title>
<link>http://r00thome.wordpress.com/2009/10/26/endlich-mal-wieder-was-tippseln/</link>
<pubDate>Mon, 26 Oct 2009 19:48:45 +0000</pubDate>
<dc:creator>wint0r</dc:creator>
<guid>http://r00thome.wordpress.com/2009/10/26/endlich-mal-wieder-was-tippseln/</guid>
<description><![CDATA[Für die Leute die meinen Blog verfolgt haben tut es mir wirklich leid,dass so lange nichts kam ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Für die Leute die meinen Blog verfolgt haben tut es mir wirklich leid,dass so lange nichts kam &#8211; jede Menge Stress in der Schule,dann privat einiges was sich verändert hat,und wenn ich dann Zeit hatte war ich einfach zu müde,euch was schönes zu tippen.Das vor einiger Zeit versprochene Bashskript reiche ich hiermit nach,und danach werde ich mich der neuen Version von Ubuntu,9.10 oder auch &#8220;Karmic Koala&#8221;,zuwenden.(Dessen Release ich als religiösen Feiertag zelebrieren werde!)<br />
Wie in meinem letzten  Kurzartikel erwähnt gibt euch dieses Script genaue Informationen über Prozesse,deren Speicherbelastung und über angeschlossene USB Geräte.</p>
<p><code>#!/bin/bash<br />
chmod 755<br />
echo "Na dann sehen wir uns mal an,was wir an Speicherplatz haben:"<br />
df -m -T<br />
echo "So,und nun noch einige kleine Infos,was alles an Arbeitsspeicher belegt wird:"<br />
ps -a -m<br />
echo "Angeschlossene USB-Geräte:"<br />
lsusb<br />
echo "Verbaute PCI - Slots:"<br />
lspci</code></p>
<p>Einfach per Konsole ausführen;wer möchte kann sich das ganze auch als Cronjob umschreiben &#8211; Hilfestellung hierzu kann ich leider keine bieten,da ich mich nur spielerisch mit der Programmierung in Bash beschäftigt habe und selbst nur mit Mühe einen selbigen hinbekommen konnte.Nun widme ich mich allerdings einem Blick auf Ubuntu 9.10 dass am 29.10 erscheinen wird.Ich kann es jetzt kaum noch erwarten (und lade mir deshalb gerade das Daily Release herunter,aber gehen wir einfach davon aus,dass ich es noch nicht teste!) und drum schaue ich mal,was sich seit 9.04 so getan hat.Ganz sicher ist schon einmal,dass Ubuntu in der neuen Version Änderungen aller Größenordnungen mit sich bringt.Die drei wichtigsten Ziele wurden stellvertretend von der Ubuntu Foundation zusammengefasst.(Bezieht sich auf die Desktopedition!):</p>
<ul>
<li>Verbesserte Nutzerfreundlichkeit</li>
<li>Mehr Informationen für den Benutzer</li>
<li>Geschwindigkeitsverbesserungen bei alltäglichen Arbeiten</li>
</ul>
<p>Diese Nutzerfreundlichkeit soll vor allem durch die erweiterte Dokumentation der Programme sowie einer intuitiveren Menüführung erreicht werden &#8211; doch einen wirklich großen Fehler begingen die Entwickler,in dem sie alle Icons aus dem Menü entfernten,&#8221;to increase the overview for normal users&#8221;.Das ganze sorgte für einen ziemlichen Aufschrei in der deutschssprachigen &#8211; und sicherlich auch über dem Ärmelkanal und dem Atlantik &#8211; Gemeinde,da niemand die Logik hinter dem ganzen Verstand.Es ist zwar möglich die Icons nachträglich zu aktivieren,aber mal ehrlich &#8211; wer ausser Textfetischisten die die Konsole trotzdem nicht mögen würde soetwas wollen &#8230; ?!</p>
<p>Folgendes Zitat von <a href="http://www.ubuntu.com/news/ubuntu-910" target="_blank">hier</a> finde ich sehr interessant:</p>
<blockquote><p>“<strong>Ubuntu 9.10 gives users more reasons than ever to seriously consider Linux at a time when many are thinking again about their operating system options.</strong> We are delivering a platform for users interested in an easy-to-use, great-looking, web-friendly operating system,&#8221; says Jane Silber, COO at Canonical. “A faster, more beautiful boot and login sequence, file and contact synchronisation through online services and great experiences on the most popular notebook, desktop and netbook models continue to drive Ubuntu into the mainstream of computing choices.&#8221;</p></blockquote>
<p>Ich finde es einerseits toll dass sich Entwickler die Mühe machen,ihr Betriebssystem so Benutzerfreundlich wie nur möglich zu gestalten,aber andererseits &#8230; hatte Linux immer diesen Touch etwas &#8220;besonderes&#8221; zu sein.Bitte missversteht mich nicht,ich war immer ein absoluter Gegner dieser,&#8221;Wir sind 3l1t3&#8243; &#8211; Mentalita,doch die meisten Linuxuser die ich kennenlernen durfte waren in der Lage und auch willig,logisch zu denken und nicht gleich Gott und die Welt zu verfluchen,falls etwas nicht nach dem ersten Anlauf klappte.Ich mache mir irgendwie ernsthafte Sorgen darüber,dass die Linxuwelt von DAUs überrannt wird &#8230; aber das sind nur meine Gedanken! Wünsche einen schönen Restabend und viel Spaß beim warten auf den 29.10! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[LINQ to SQL vs ADO.NET Entity Framework]]></title>
<link>http://nostandardblog.wordpress.com/2009/10/26/linq-to-sql-vs-ado-net-entity-framework/</link>
<pubDate>Mon, 26 Oct 2009 14:45:22 +0000</pubDate>
<dc:creator>depaule</dc:creator>
<guid>http://nostandardblog.wordpress.com/2009/10/26/linq-to-sql-vs-ado-net-entity-framework/</guid>
<description><![CDATA[So habe jetzt mal LINQ to SQL ausprobiert. Ist auch soetwas wie ein OR-MAPPER. Hat auf jedenfall ein]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>So habe jetzt mal LINQ to SQL ausprobiert. Ist auch soetwas wie ein OR-MAPPER. Hat auf jedenfall einen besseren Wizzard als ADO.NET EF und ist bei der Laufzeituntersuchung von über 100.000 Datensätzen (mit über 100 Spalten) mit 20 sec 5 sec schneller als das EF</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ADO.NET Entity Framework mit Oracle]]></title>
<link>http://nostandardblog.wordpress.com/2009/10/26/ado-net-entity-framework-mit-oracle/</link>
<pubDate>Mon, 26 Oct 2009 10:34:05 +0000</pubDate>
<dc:creator>depaule</dc:creator>
<guid>http://nostandardblog.wordpress.com/2009/10/26/ado-net-entity-framework-mit-oracle/</guid>
<description><![CDATA[Habe heute mal das ADO.NET Entity Framework (ein OR-Mapper) von Microsoft ausprobiert. Für den Zugri]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Habe heute mal das ADO.NET Entity Framework (ein OR-Mapper) von Microsoft ausprobiert. Für den Zugriff auf die Objekte habe ich LINQ verwendet. IMHO hat es eine sehr schöne Syntax.<br />
Leider bietet Microsoft keinen Treiber für Oracle also habe ich diesen von http://www.devart.com/ verwendet.<br />
Schein ziemlich schnell zu sein&#8230;<br />
Werde noch weitere Testes machen. Praktisch finde ich auch die Graphische Darstellung des Datenmodells</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
