<?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>Fri, 25 Dec 2009 23:48:24 +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[Conway&#8217;s Game of Life ist eine 1970 entwickelte Simulation eines zellulären Automaten. Auf ein]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Conway&#8217;s Game of Life ist eine 1970 entwickelte Simulation eines zellulären Automaten. Auf einer zweidimensionalen Fläche leben Zellen (Pixel) vor sich hin, deren Fort- oder Ableben durch vier Regeln bestimmt wird. Jede Zelle hat acht Nachbarzellen.</p>
<p>1. Tod durch Isolation: Hat eine Zelle weniger als zwei lebende Nachbarzellen, stirbt sie in der nächsten Generation an Einsamkeit.</p>
<p>2. Tod durch Überbevölkerung: Jede Zelle mit vier oder mehr lebenden Nachbarn stirbt in folge von Überpopulation.</p>
<p>3. Neugeburt einer Zelle: Jede tote Zelle (leeres Feld) mit genau drei lebenden Nachbarn wird in der nächsten Generation wiedergeboren.</p>
<p>4. Überleben einer Zelle: Jede Zelle mit zwei lebenden Nachbarn überlebt in die nächste Generation.</p>
<p>Simulieren will ich das ganze mit einem 1024 x 768 Pixel großen Feld und der Programmiersprache C++ in der <a href="http://netzwelten.wordpress.com/2009/11/21/openframeworks/">openFrameworks-Umgebung</a>. Zuerst brauchen wir drei Variablen, die das Feld darstellen. Eine für das aktuelle Feld, eine für das Feld der nächsten Generation und eine temporäre Variable, die für Kopierzwecke benötigt wird. Alle drei Felder sind zweidimensional:</p>
<pre class="brush: cpp;">

const int width = 1024;
const int height = 768;
int gitter[width][height], gitter_next[width][height], gitter_temp[width][height];
</pre>
<p>Als nächstes soll das Basisfeld generiert werden. Das mache ich in der setup() Funktion. Die Gesamtanzahl aller Pixel ist 1024 mal 768. Für die Anfangsbevölkerung soll ca. jedes dritte Feld auf 1 (= lebende Zelle) gesetzt werden. Dann wird das Feld durchlaufen und alle auf 1 gesetzten Felder werden gezeichnet. Das mache ich mit ofCircle(x,y,1), da ich das mit dem Pixelsetzen in openFrameworks noch nicht ganz durchschaut habe. ofCircle(x,y,1) setzt also einen Kreis auf die Postion (x,y) mit Radius 1 (= 1 Pixel).</p>
<pre class="brush: cpp;">

void testApp::setup(){

    float dichte = 0.3 * width * height;

    for (int i = 0; i &#60; dichte; i++)
    {
        gitter[int(rand() % width)][int(rand() % height)] = 1;
    }

    ofBackground(255,255,255);

    for (int x = 0; x &#60; width; x++)
    {
        for (int y = 0; y &#60; height; y++)
        {
            if (gitter[x][y] == 1) {
                ofSetColor(0,0,0);
                ofCircle(x,y,1);
            }
        }
    }
}
</pre>
<p>Jetzt zur draw() Funktion, die in einer Endlosschleife läuft. Zuerst sollen für jede Zelle alle lebenden Nachbarn ermittelt werden. Dazu schreibe ich eine kleine Funktion:</p>
<pre class="brush: cpp;">

int zaehle_nachbarn(int x, int y)
{
    int nachbarn = 0;

    if(gitter[x-1][y+1] == 1)
    {
        nachbarn++;
    }
    if(gitter[x-1][y] == 1)
    {
        nachbarn++;
    }
    if(gitter[x+1][y] == 1)
    {
        nachbarn++;
    }
    if(gitter[x+1][y+1] == 1)
    {
        nachbarn++;
    }
    if(gitter[x+1][y-1] == 1)
    {
        nachbarn++;
    }
    if(gitter[x-1][y-1] == 1)
    {
        nachbarn++;
    }
    if(gitter[x][y+1] == 1)
    {
        nachbarn++;
    }
    if(gitter[x][y-1] == 1)
    {
        nachbarn++;
    }
    return nachbarn;
}
</pre>
<p>Zurückgegeben wird die Anzahl der lebenden Nachbarn. Nun die Hauptengine der Simulation, die draw() Funktion:</p>
<pre class="brush: cpp;">

void testApp::draw(){

    for (int x = 0; x &#60; width; x++)
    {
        for (int y = 0; y &#60; height; y++)
        {
            int nachbarn = zaehle_nachbarn(x, y);

            if ((gitter[x][y] == 1) &#38;&#38; (nachbarn &#60; 2))
            {
                gitter_next[x][y] = 0; // Tod durch Isolation
                ofSetColor(0,0,0);
                ofCircle(x,y,1);
            }
            else if ((gitter[x][y] == 1) &#38;&#38; (nachbarn &#62; 3))
            {
                gitter_next[x][y] = 0; // Tod durch Überbevölkerung
                ofSetColor(0,0,0);
                ofCircle(x,y,1);
            }
            else if ((gitter[x][y] == 0) &#38;&#38; (nachbarn == 3))
            {
                gitter_next[x][y] = 1; // Drei Nachbarn = Zelle wird geboren
                ofSetColor(255,255,255);
                ofCircle(x,y,1);
            }
            else
            {
                gitter_next[x][y] = gitter[x][y]; // Überlebt
            }
        }
    }

    for (int x = 0; x &#60; width; x++)
    {
        for (int y = 0; y &#60; height; y++)
        {
            gitter_temp[x][y] = gitter[x][y];
            gitter[x][y] = gitter_next[x][y];
            gitter_next[x][y] = gitter_temp[x][y];
        }
    }

}
</pre>
<p>Für jede Zelle werden die lebenden Nachbarn ermittelt. Dann werden die Regeln angewendet. Zum Schluss wird das aktuelle Feld (gitter) in die temporäre Variable kopiert, das aktuelle Feld mit dem zukünftigen Feld besetzt und das Zukünftige Feld wird das aktuelle Feld.</p>
<p>Fertig!</p>
<p>Das Video zeigt einige Sekunden aus dem Leben der Zellen:</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/mR6dqwb9Xbw&#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/mR6dqwb9Xbw&#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>
<p><strong>Links:</strong></p>
<p><a href="http://netzwelt.sdf-eu.org/download/GameOfLife.zip">Quellcode und ausführbare Datei</a></p>
<p>Es gibt einen sehr schönen <a href="http://de.wikipedia.org/wiki/Game_of_Life">Conways Spiel des Lebens Wikipedia-Artikel</a>, der noch ein paar Hintergründe beleuchtet und ein paar sich aus den Zellen entwickelnde Objekte zeigt.</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[Da ich ja mittlerweile zwei Arduinos besitze, einen Arduino Mega sowie den Arduino Duemilanove, lieg]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Da ich ja mittlerweile zwei Arduinos besitze, einen Arduino Mega sowie den Arduino Duemilanove, liegt es ja nahe, diese einmal miteinander zu verbinden und sie über <a href="http://de.wikipedia.org/wiki/I2C">I²C</a> miteinander kommunizieren zu lassen. Im Sketch wird dazu die <a href="http://www.arduino.cc/en/Reference/Wire">Wire.h library</a> benutzt: <cite>This library allows you to communicate with I2C / TWI devices. On most Arduino boards, SDA (data line) is on analog input pin 4, and SCL (clock line) is on analog input pin 5. On the Arduino Mega, SDA is digital pin 20 and SCL is 21.</cite></p>
<p>Aber zunächst müssen die beiden Arduinos miteinander vernetzt werden. Das geht wie folgt: Zuerst braucht man einen &#8220;Master&#8221; und einen &#8220;Slave&#8221;, d.h. ein Arduino ist das &#8220;Gehirn&#8221;, der andere der ausführende &#8220;Sklave&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . Weil der <a href="http://arduino.cc/en/Main/ArduinoBoardMega">Arduino Mega</a> mit seinen 54 digitalen In- und Output Pins, seinen 128kb Speicher sowie sonst auch ziemlich aufgemotzt daherkommt, lassen wir diesen mal den Slave spielen. Er ist an meinem <a href="http://netzwelten.wordpress.com/tag/eee-pc/">eee PC</a> angeschlossen, während der <a href="http://netzwelten.wordpress.com/2009/03/21/experimentierboard-arduino-duemilanove/">Arduino Duemilanove</a> an meinem Desktop PC hängt.</p>
<p>Nun werden die beiden Arduinos gemäß diesem Schema miteinander verbunden:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk-schema.gif"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk-schema.gif" alt="arduino-netzwerk-schema" title="arduino-netzwerk-schema" width="388" height="306" class="aligncenter size-full wp-image-521" /></a></p>
<p>Es ist wichtig, dass die beiden Arduinos ihre Stromkreise teilen, deshalb verbindet man jeweils 5V sowie GND (Ground, Erde) miteinander und setzt zwei Widerstände dazwischen, sonst funktioniert die Kommunikation zwischen den Arduinos nicht. Dann verbindet man die beiden SDA und SCL Pins der Boards miteinander, d.h. Analog In 4 des Duemilanoves mit 20 des Megas sowie Pin 5 des Duamilanoves mit Pin 21 des Megas. Es ergibt sich folgendes Bild:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk1.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk1.jpg" alt="arduino-netzwerk1" title="arduino-netzwerk1" width="500" height="375" class="aligncenter size-full wp-image-522" /></a></p>
<p>Ziel des ganzen ist es, ein kleines Netzwerk zwischen den beiden Arduinos aufzubauen, wobei am Duemilanove ein Lichtsensor arbeitet und den jeweils ermittelten Sensorwert an den Arduino Mega sendet. Dieser soll je nach Höhe des Wertes eine LED unterschiedlich hell aufleuchten lassen. Die in die eine Richtung (Duemilanove, Master &#8211;&#62; Mega, Slave) übertragenen und vom Lichtsensor ermittelten Werte sollen außerdem im Serial-Fenster angezeigt werden. Die komplette Schaltung sieht dann so aus:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk2.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/arduino-netzwerk2.jpg" alt="arduino-netzwerk2" title="arduino-netzwerk2" width="500" height="375" class="aligncenter size-full wp-image-523" /></a></p>
<p>Nun müssen noch zwei kleine Sketche für die beiden Arduinos geschrieben werden. Wie oben bereits erwähnt, bedient man sich dabei der Wire.h-Bibliothek. Zuerst der Master:</p>
<pre class="brush: cpp;">

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

void setup()
{
  Serial.begin(9600);
  Wire.begin(); // join i2c bus
}

int sensorPin = 0;
int sensorValue = 0;

void loop()
{
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue);
  Wire.beginTransmission(4); // transmit to device #4
  Wire.send(sensorValue);
  Wire.endTransmission();
  delay(500);
}
</pre>
<p>Die Datenübertragung läuft über device #4. Dasselbe wird auch im Slave aufgesetzt:</p>
<pre class="brush: cpp;">

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

int led_status = 0;
int ledPin = 13;

void setup()
{
  Wire.begin(4);                // join i2c bus with address #4
  Wire.onReceive(receiveEvent); // register event
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  analogWrite(ledPin, led_status);
  delay(500);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
  led_status = Wire.receive();
  Serial.println(led_status);
} 
</pre>
<p>Die Quellcodes der Sketche sind leicht zu verstehen: Im loop() des Masters wird am Analog-Input der helligkeitsabhängige Widerstand des Lichtsensors gemessen, im Serial-Fenster ausgegeben sowie über die Funktion send() der Wire-Bibliothek verschickt. Der Slave bekommt diesen Wert, gibt ihn ebenfalls aus und benutzt den Wert für die analogWrite-Funtkion an die LED.</p>
<p>Abschließend zeigt dieses kurze und wackelige Video, dass das auch tatsächlich funktioniert:</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/OcRRWhURX5U&#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/OcRRWhURX5U&#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>
<ul><strong>Links</strong></p>
<li><a href="http://hacknmod.com/hack/how-to-connect-multiple-arduino-microcontrollers-using-i2c/">Connect multiple Arduino microcontrollers using I²C</a></li>
<li><a href="http://www.arduino.cc/playground/Learning/I2C">I2C / TWI (Two-Wire Interface)</a></li>
<li><a href="http://www.arduino.cc/en/Reference/Wire">Die Wire-Library</a></li>
<li><a href="http://www.neufeld.newton.ks.us/electronics/?p=241">Arduino I2C Expansion I/O</a></li>
</ul>
</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[Nachdem ich in diesem Artikel ausführlich beschrieben habe, wie man mit dem Arduino Temperaturen mes]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://netzwelten.wordpress.com/files/2009/11/lm35-anschlusse2.png"><img src="http://netzwelten.wordpress.com/files/2009/11/lm35-anschlusse2.png?w=110" alt="lm35-anschlüsse" title="lm35-anschlüsse" width="110" height="150" class="alignleft size-thumbnail wp-image-503" /></a></p>
<p>Nachdem ich in <a href="http://netzwelten.wordpress.com/2009/04/05/temperatur-messen-mit-dem-arduino-und-einem-heisleiter-ntc/">diesem Artikel</a> ausführlich beschrieben habe, wie man mit dem Arduino Temperaturen messen kann, habe ich heute, nach dem ich freudig die neuen Bauteile vom Postboten gebracht bekommen habe, eine neue Möglichkeit ausprobiert.</p>
<p>Bestellt habe ich bei <a href="http://www.watterott.com">Watterott.com</a> einen <a href="http://www.watterott.com/index.php?a=863&#38;">LM35 CZ Temperatursensor TO92</a>. Schnell ins <a href="http://www.watterott.com/download/LM35.pdf">Datenblatt</a> geschaut und die Anschlüsse herausgefunden.</p>
<ul>Die Features:</p>
<li>Calibrated directly in ° Celsius (Centigrade)</li>
<li>Linear + 10.0 mV/°C scale factor</li>
<li>0.5°C accuracy guaranteeable (at +25°C)</li>
<li>Rated for full −55° to +150°C range</li>
<li>Suitable for remote applications</li>
<li>Low cost due to wafer-level trimming</li>
<li>Operates from 4 to 30 volts</li>
<li>Less than 60 μA current drain</li>
<li>Low self-heating, 0.08°C in still air</li>
<li>Nonlinearity only ±1⁄4°C typical</li>
<li>Low impedance output, 0.1 W for 1 mA load</li>
</ul>
<p>Unter &#8220;Typical Applications&#8221; ist als einfachste eine Anwendung zu finden, bei der man Vs mit dem 5V-Anschluss am Arduino, Ground mit GND und den mittleren Output-Pin am LM35 mit einem Analog-In am Arduino verbindet.</p>
<p>Nun zur Theorie:</p>
<p>Der Arduino liefert laut Hersteller 5V. Mit dem Multimeter habe ich <a href="http://netzwelten.wordpress.com/2009/04/05/temperatur-messen-mit-dem-arduino-und-einem-heisleiter-ntc/">damals</a> ja 4,76V gemessen, so dass ich einfach mal mit beidem rechne.</p>
<p>5/1023 oder 4,76/1023 (denn 1023 entspricht vollen 5 bzw. 4,76 Volt) ergibt 0,0048875855327468 bzw. 0,004652981427175. D.h. ein Messwert von 1 liefert ca. 5mV. Bei einem Sensor-Wert von 13  sind das 63,53 bzw. 60,48 Millivolt, was der Temperatur von 6,35 oder 6,05 Grad Celsius entspricht &#8211; je nach Messansatz.</p>
<p>Hier die Arduino-Schaltung:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/lm35-schaltung.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/lm35-schaltung.jpg" alt="lm35-schaltung" title="lm35-schaltung" width="500" height="375" class="aligncenter size-full wp-image-496" /></a></p>
<p>Das Bild ist draußen auf meinem Balkon aufgenommen und die Temperatur zeigt ca. 8° Grad Celsius an. Und hier der Serial-9600 Output aus meinem Arduino-Sketch:<br />
<tt><br />
Messwert:       17<br />
Grad:	          8.31<br />
Grad genau:  7.91<br />
</tt></p>
<p>Und hier noch der Sketch:</p>
<pre class="brush: cpp;">

const int analogInPin = 0;
int sensorValue = 0;
float Volt = 0.0;
float Volt_genau = 0.0;

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

void loop() {
  sensorValue = analogRead(analogInPin);
  Serial.print(&#34;Messwert:\t&#34;);
  Serial.println(sensorValue);
  Volt = sensorValue * 0.48875855327468;
  Volt_genau = sensorValue * 0.4652981427174976;
  Serial.print(&#34;Grad:\t&#34;);
  Serial.println(Volt);
  Serial.print(&#34;Grad genau:\t&#34;);
  Serial.println(Volt_genau);
  delay(500);
}
</pre>
<p>Die Tage werde ich dann mal eine schöne 24h-Temperaturkurve mit dem Output und <a href="http://www.openoffice.org">OpenOffice</a> erstellen. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </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[Ich habe mir schon vor einiger Zeit einen Servomotor bei Conrad gekauft. Jetzt bin ich endlich mal d]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ich habe mir schon vor einiger Zeit einen <a href="http://de.wikipedia.org/wiki/Servomotor">Servomotor</a> bei <a href="http://www.conrad.de/">Conrad</a> gekauft. Jetzt bin ich endlich mal dazu gekommen, das Teil auszuprobieren.</p>
<p>Dazu habe ich das Beispiel aus Arduino genommen:</p>
<pre class="brush: cpp;">

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

Servo myservo;  // create servo object to control a servo 

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
} 

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
} 
</pre>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/servomotor.png"><img src="http://netzwelten.wordpress.com/files/2009/11/servomotor.png?w=150" alt="servomotor" title="servomotor" width="150" height="118" class="alignleft size-thumbnail wp-image-475" /></a></p>
<p>Kurz gesagt wird vom Analag-Pin 0, der mit einem Potientiometer verbunden ist, ausgelesen. Der hier erhaltene Wert zwischen 0 und 1023 wird auf die 0 bis 180, die der Servomotor nutzt, umgerechnet. Den Servomotor schließt man wie folgt an: GND (braun oder schwarz) wird mit GND auf dem Arduino verbunden, VDD (rot) mit 5V und SIGNAL mit Pin9 (PWM).</p>
<p>Hier die Schaltung:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/11/servomotor-schaltung.jpg"><img src="http://netzwelten.wordpress.com/files/2009/11/servomotor-schaltung.jpg" alt="servomotor-schaltung" title="servomotor-schaltung" width="500" height="375" class="aligncenter size-full wp-image-476" /></a></p>
<p>Wenn man nun am Potentiometer dreht, bewegt sich die am Servomotor befestigte Fahne hin und her. Fein! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/xv21d7s5f9s&#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/xv21d7s5f9s&#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>
<p>Anwendungsbeispiel: Die Fahne soll sich hin und her bewegen, sobald eine E-Mail erhalten wurde o.ä.. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Links:</p>
<ul>
<li><a href="http://www.heise.de/ct/projekte/machmit/processing/wiki/AufbauArduino#ZuDiensten">Arduino Artikel aus der c&#8217;t, der sich auch mit Servomotoren beschäftigt</a></li>
</ul>
</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[Processing is an open source programming language and environment for people who want to program ima]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><cite>Processing is an open source programming language and environment for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. It is created to teach fundamentals of computer programming within a visual context and to serve as a software sketchbook and professional production tool.</cite> (Quelle: <a href="http://www.processing.org">processing.org</a>) <a href="http://netzwelten.wordpress.com/files/2009/10/processing-icon.png"><img class="alignright size-full wp-image-342" title="processing-icon" src="http://netzwelten.wordpress.com/files/2009/10/processing-icon.png" alt="processing-icon" width="129" height="122" /></a></p>
<p>Mehr will ich dazu vorerst gar nicht sagen. Processing macht jedenfalls Spaß &#8211; eine Menge Spaß. Processing ist auch die &#8211; der Syntax nach C ähnliche &#8211; Programmiersprache der <a href="http://netzwelten.wordpress.com/2009/03/21/experimentierboard-arduino-duemilanove/">Arduino-Umgebung</a>. Es ist eine recht einfach zu erlernende Sprache für Leute, die ihre Entwürfe (<cite>Sketches</cite>) schnell ausprobieren und sich so z.B. durch Bilder, Animationen oder kurzen Programmen ausdrücken und verwirklichen wollen.</p>
<p>Die hier vorgestellte Einführung richtet sich an Menschen mit wenig (aber vorhandener) Programmiererfahrung. Begriffe wie Variablen oder Schleifen sollten bekannt sein.</p>
<p><strong>1. Download, Installation und Entwicklungsumgebung</strong></p>
<p>Processing kann auf der <a href="http://www.processing.org/download/">Processing Homepage</a> runtergeladen werden. Verfügbar ist es im Moment in der Version 1.0.9 für Windows, Linux und Mac OSX.</p>
<p>Zur Installation muss nicht viel gesagt werden. ZIP-Datei laden und entpacken, eine Installation an sich ist nicht notwendig. Einfach die Anwedungsdatei <tt>processing.exe</tt> starten. Es erscheint die IDE (Integrated Development Environment &#8211; Entwicklungsumgebung):</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/10/processing-ide.png"><img class="aligncenter size-medium wp-image-343" title="processing-IDE" src="http://netzwelten.wordpress.com/files/2009/10/processing-ide.png?w=249" alt="processing-IDE" width="249" height="300" /></a></p>
<p>Die Symbole sind auch selbsterklärend. Den (halb-)fertigen Sketch startet man mit dem &#8220;Play&#8221;-Button, das Quadrat symbolisiert &#8220;Stop&#8221;, dann gibt es noch &#8220;New&#8221;, &#8220;Open&#8221;, &#8220;Save&#8221; und &#8220;Export&#8221;. Zu der Export-Funktion gibt es noch einen Satz zu sagen: Klickt man auf den Button wird eine HTML-Seite mit eingebettetem Java-Applet generiert, das den Sketch enthält.</p>
<p><strong>2. Hallo Welt</strong></p>
<pre class="brush: cpp;">

line(10,20,30,40);  // Eine Linie
</pre>
<p>Das obligatorische &#8220;Hallo Welt&#8221;-Programm erstellen wir in Processing mit dem line() Befehl, der eine Linie zeichnet. Diese verläuft von den Koordination (10,20) nach (30,40). Die Koordinate (0,0) ist übrigens links oben.</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/10/processing-hallo-welt.png"><img class="aligncenter size-medium wp-image-346" title="processing-hallo-welt" src="http://netzwelten.wordpress.com/files/2009/10/processing-hallo-welt.png?w=300" alt="processing-hallo-welt" width="300" height="272" /></a></p>
<p>Auf &#8220;Run&#8221; klicken und wenige Millisekunden später erscheint das Programm, dass eine simple Linie zeichnet, auf dem Desktop <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><tt>//</tt> leitet übrigens, wie in vielen anderen Programmiersprachen, einen Kommentar ein. Alles was danach kommt, wird von Processing ignoriert. Multi-Line-Comments werden mit /* eingeleitet und mit */ abgeschlossen.</p>
<p><strong>3. Programmstruktur</strong></p>
<p><a href="http://netzwelten.wordpress.com/files/2009/10/processing-lines-background.png"><img class="alignright size-medium wp-image-347" title="processing-lines-background" src="http://netzwelten.wordpress.com/files/2009/10/processing-lines-background.png?w=276" alt="processing-lines-background" width="166" height="180" /></a></p>
<p>In Processing gibt es zwei Hauptfunktionen: setup() und draw(). Der Code in der setup()-Funktion wird beim Starten des Programms ausgeführt (z.B. um Variablen zu initialisieren), der Code in draw() läuft kontinuierlich.</p>
<p>Beispiel:</p>
<pre class="brush: cpp;">

void setup() {
  size(300,300);
}

void draw() {
  background(105);
  float x = mouseX;
  float y = mouseY;
  line(x,y,x+40,y-80);
}
</pre>
<p>Kommentare habe ich mal weggelassen, hier die Erklärung:</p>
<p>In setup() wird mit size() die Bildgröße von 300 mal 300 Pixeln festgesetzt.</p>
<p>Der draw()-Teil läuft kontinuierlich. Hier werden die float-Variablen x und y mit der aktuellen Mauscursorposition geladen. Dann wird die Linie gezeichnet. Bewegt man die Maus, verschiebt sich die Linie. Der Grund, wieso die background()-Farbe immer wieder neugesetzt wird, leuchtet ein, wenn man den Befehl in die setup()-Funktion läd und sich obigen Screenshot vor Augen führt.</p>
<p><strong>4. Die Variablen</strong></p>
<p>In Processing gibt es verschiedene Datentypen, wie: int (Integer), float (Fließkommazahl) oder boolean (true/false).</p>
<p>int[] feld = new int[20] deklariert und kreiert ein Feld (Array) von [0..19].</p>
<p><strong>5. Die Konsole, oder: &#8220;Hallo Welt 2&#8243;</strong></p>
<p>Im unteren Bereich der Processing-IDE sieht man die Konsole. Hier schreibt man mittels print() oder println() Werte rein, um z.B. nichtgrafische Rückmeldungen vom Programm auszugeben:</p>
<p><a href="http://netzwelten.wordpress.com/files/2009/10/processing-hallo-welt2.png"><img class="aligncenter size-medium wp-image-350" title="processing-hallo-welt2" src="http://netzwelten.wordpress.com/files/2009/10/processing-hallo-welt2.png?w=294" alt="processing-hallo-welt2" width="294" height="300" /></a></p>
<p><strong>6. Weitere Grafikbefehle zum Ausprobieren</strong></p>
<ul>
<li>point(x, y)</li>
<li>triangle(x1, y1, x2, y2, x3, y3)</li>
<li>quad(x1, y1, x2, y2, x3, y3, x4, y4)</li>
<li>rect(x, y, width, height)</li>
<li>ellipse(x, y, width, height)</li>
<li>bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2)</li>
</ul>
<p><strong>7. Formen Eigenschaften geben</strong></p>
<p>fill() setzt die Füllfarbe für Formen, stroke() die Außenlinienfarbe. Ein zweiter Parameter gibt die Transparenz an. smooth() aktiviert Antialiasing, noSmooth deaktiviert es wieder.</p>
<p><strong>8. Rechnen mit Processing</strong></p>
<p>Wie auch in anderen Programmiersprachen gibt es verschiedene Wege Werte zu verändern. +, -, *, /, % (modulo). ++ erhöht die Variable um 1, &#8212; verkleinert sie um 1. += addiert einen Wert zu einer Variablen hinzu und weist der Variable dann den neuen Wert zu. Äquivalent dazu -=, *=, /=.</p>
<p><strong>9. Entscheidungen</strong></p>
<p>Will man den Kontrollfluss überprüfen, gibt es folgendes Konstrukt:</p>
<pre class="brush: cpp;">

if (test) {
code;
}
</pre>
<p>Beispiel:</p>
<pre class="brush: cpp;">

int y = 3;
int x = 5;
if (x &#38;gt; y) {
  wird erfüllt;
} else {
  sonst-Bedingung. Wird hier nicht erfüllt
}
</pre>
<p>Um Werte zu Vergleichen gibt es Operatoren wie , =, AND, OR, NOT, !.</p>
<p><strong>10. Schleifen</strong></p>
<p>Hier ähnelt Processing C ebenso. Beispiel:</p>
<pre class="brush: cpp;">

for (int i = 10; i &#38;lt; 100; i += 2) {
  tue etwas;
}
</pre>
<p><strong>11. Hüpfe, Ball!</strong></p>
<p>Mit dem vorhandenen Wissen wollen wir nun etwas experimentieren:</p>
<pre class="brush: cpp;">

int window_size_x = 1024;
int window_size_y = 768;

boolean circle_direction = false; // 0 = left, 1 = right
float circle_point_x = 140;
float circle_point_y = 140;
int circle_d = 50;
float speed_x = 10.0;
float speed_y = 10.0;
float direction_x = 1;
float direction_y = -1;

void setup() {
  randomSeed(millis());
  size(window_size_x,window_size_y);
}

void draw() {

  frameRate(50);
  background(204);

  ellipse(circle_point_x,circle_point_y,circle_d,circle_d); // Kreis zeichnen

  circle_point_x += speed_x * direction_x;
  circle_point_y += speed_y * direction_y;

  if (direction_x &#62; 0) {
    circle_point_x--;
  }
  else {
    circle_point_x++;
  }

  // Kollisionen

  if ((circle_point_x &#62;= window_size_x - circle_d/2) &#124;&#124; (circle_point_x &#60;= circle_d/2)) {
    direction_x = -direction_x;
  }

  if ((circle_point_y &#62;= window_size_y - circle_d/2)  &#124;&#124; (circle_point_y &#60;= circle_d/2)) {
    direction_y = -direction_y;
  }
}
</pre>
<p>Und hier das Ergebnis:</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/uiV3di81rjQ&#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/uiV3di81rjQ&#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>
<p><strong>12. Schlusswort</strong></p>
<p><a href="http://netzwelten.wordpress.com/files/2009/10/processing-buch.png"><img class="alignright size-medium wp-image-352" title="processing-buch" src="http://netzwelten.wordpress.com/files/2009/10/processing-buch.png?w=234" alt="processing-buch" width="234" height="300" /></a></p>
<p>Das ist natürlich längst nicht alles, was Processing bietet. Ich wollte hiermit auch nur kurz eine Einführung und einen kleinen Überblick über einige Möglichkeiten geben. Wer tiefer in die Materia einsteigen will (lohnt allein schon wegen <a href="http://netzwelten.wordpress.com/tag/arduino/">Arduino</a>), dem empfehle ich die Processing Website sowie dieses Buch:</p>
<p><strong>Processing: A Programming Handbook for Visual Designers and Artists</strong><br />
von Casey Reas und Ben Fry</p>
<p>Gebundene Ausgabe: 736 Seiten, gebunden<br />
Verlag: The Mit Press<br />
Sprache: Englisch<br />
ISBN-10: 0262182629</p>
<p>Preis: Ca. 45 Euro</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>
