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

<channel>
	<title>caracasa.de &#187; Programmieren</title>
	<atom:link href="http://www.caracasa.de/category/programmieren/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.caracasa.de</link>
	<description>You may say I&#039;m a dreamer</description>
	<lastBuildDate>Sun, 05 Feb 2012 10:51:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tool: Fluoreszenz-Mikroskopie</title>
		<link>http://www.caracasa.de/2009/09/29/tool-fluoreszenz-mikroskopie/</link>
		<comments>http://www.caracasa.de/2009/09/29/tool-fluoreszenz-mikroskopie/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 15:47:10 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=1695</guid>
		<description><![CDATA[Andrea hat mir vor zwei Tagen über ICQ drei Aufnahmen einer gefärbten Zelle geschickt, die sie mit einem Fluoreszenz-Mikroskop aufgezeichnet hatte. Alles Aufnahmen der selben Probe bei UV-Licht, bei unterschiedlichen Filtern, wenn ich es richtig verstanden habe. Während sie mir noch erklärte, was ich genau man auf den unterschiedlichen Bildern erkennen konnte, bastelte ich die [...]]]></description>
			<content:encoded><![CDATA[<p>Andrea hat mir vor zwei Tagen über ICQ drei Aufnahmen einer gefärbten Zelle geschickt, die sie mit einem Fluoreszenz-Mikroskop aufgezeichnet hatte. Alles Aufnahmen der selben Probe bei UV-Licht, bei unterschiedlichen Filtern, wenn ich es richtig verstanden habe. Während sie mir noch erklärte, was ich genau man auf den unterschiedlichen Bildern erkennen konnte, bastelte ich die Bilder schnell als eingefärbte Ebenen in GIMP zusammen. </p>
<p>Auf dem Ergebnis aufbauend, hab ich Quick &#038; Dirty ein PHP-Script geschrieben, das diese Aufgabe automatisiert über das Modul <a href="http://pecl.php.net/imagick/">php_imagick</a> erledigt &#8211; eine Wrapper-Klasse für die bekannte <a href="http://www.imagemagick.org/script/index.php">ImageMagick Kommandozeilen-Suite</a> und wohl eines der am schlechteste dokumentierten Module ever. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Einige kurze Beispiele gibt es bei <a href="http://valokuva.org/?cat=1">Mikko</a> und im extrem rudimentären <a href="http://us2.php.net/manual/en/book.imagick.php">Manual</a>. Den Rest muss man sich aus der normalen Doku für die Kommandozeile suchen.</p>
<p>Da die einzelnen Fluoreszenz-Farbstoffe ganz markante Maxima bei einem oder wenigen Wellenlängen haben, wollte ich die Ebenen auch mit der entsprechenden Farbe einfärben. Die Zuordnung Wellenlänge zu RGB Farbe ist allerdings alles andere als trivial. Dabei spielt die Farbwahrnehmung des menschlichen Augen ein große Rolle und schon nach ein paar gelesenen Seiten auf Wikipedia steht man knietief in Farbprofilen und ähnlichem. Das war mir dann doch etwas zu krass.<br />
Dafür habe ich auf der <a href="http://www.midnightkite.com/color.html">Homepage von Dan Bruton</a> einen Quelltext (in Fortan) gefunden, in dem er über eine einfache Approximation (Geraden) dem sichtbaren Spektrum RGB Farben zugeordnet hat. Das Modell habe ich 1:1 in eine PHP-Funktion übertragen (hoffentlich fehlerfrei) und zur Umrechnung benutzt.</p>
<p>Die Verarbeitungskette habe ich so aufgebaut:</p>
<ol>
<li>Die Aufnahmen (Graustufe) als Maske mit einem entsprechend einfarbig gefüllten Bild mit <em>Imagick::COMPOSITE_MULTIPLY</em> verbinden.</li>
<li>Die Ergebnisse mit <em>Imagick::COMPOSITE_PLUS</em> vor einem schwarzen Hintergrund zusammenfügen.</li>
</ol>
<p>Meinen ersten Ansatz, die Aufnahmen als Alphachannel zu benutzen, konnte ich mit der spärlichen Doku bisher nicht umsetzen. Das Ergebnis ist so aber auch recht ansehnlich. Vorschläge zur Optimierung sind sehr willkommen. =)</p>
<p>So entsteht aus drei Aufnahmen folgendes Ergebnis:</p>
<p><a href="/media/2009/09/29/MCherry-800.jpg"><img src="/media/2009/09/29/MCherry-160.jpg" alt="Ebene 1" /></a><a href="/media/2009/09/29/DAPI-800.jpg"><img src="/media/2009/09/29/DAPI-160.jpg" alt="Ebene 2" /></a><a href="/media/2009/09/29/Phall-800.jpg"><img src="/media/2009/09/29/Phall-160.jpg" alt="Ebene 3" /></a></p>
<p><a href="/media/2009/09/29/result-800.jpg"><img src="/media/2009/09/29/result-500.jpg" alt="Ergebnis" /></a></p>
<p>Hübsch oder? ^^ Die blauen Flecken im Zellkern sind übrigens ein Indiz dafür, dass Irgendwas™ geklappt hat. Die Veränderung eines Proteins, wenn ich mich recht erinnere.<br />
 <span id="more-1695"></span><br />
Das sieht für eine einzelne Ebene im Quellcode dann in etwa so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;class.Wavelength2RGB.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$w2rgb</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Wavelength2RGB<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* calculate color for wavelength */</span>
<span style="color: #000088;">$color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w2rgb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">wav2rgb</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">600</span><span style="color: #339933;">,</span> <span style="color:#800080;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//600 nm</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Maske laden */</span>
<span style="color: #000088;">$mask1</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Imagick<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mask1'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tmp_name'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* read width and height */</span>
<span style="color: #000088;">$o_width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mask1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getImageWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$o_height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mask1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getImageHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* process layer */</span>
<span style="color: #000088;">$layer1</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Imagick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$layer1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">newImage</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$o_width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$o_height</span><span style="color: #339933;">,</span>  <span style="color: #000000; font-weight: bold;">new</span> ImagickPixel<span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #000088;">$layer1</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compositeImage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$mask1</span> <span style="color: #339933;">,</span>Imagick<span style="color: #339933;">::</span><span style="color: #004000;">COMPOSITE_MULTIPLY</span> <span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">,</span>Imagick<span style="color: #339933;">::</span><span style="color: #004000;">CHANNEL_ALL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* create image */</span>
<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Imagick<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">newImage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$o_width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$o_height</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> ImagickPixel<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;black&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setImageColorspace</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 1 - RGBColorspace</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* merge layer */</span>
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compositeImage</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$layer1</span> <span style="color: #339933;">,</span>Imagick<span style="color: #339933;">::</span><span style="color: #004000;">COMPOSITE_PLUS</span> <span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">,</span>Imagick<span style="color: #339933;">::</span><span style="color: #004000;">CHANNEL_ALL</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;">/* output */</span>
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setImageFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jpg'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCompressionQuality</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">writeImage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;test.jpg&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Inzwischen ist Andrea von ihrer Mentorin auch in die Weiterverarbeitung der Bilder eingeweiht worden. Offensichtlich werden die drei eingesetzten Farbstoffe ganz <del datetime="2009-09-29T14:49:50+00:00">langweilig</del> einfach den drei Grundkanälen zugeordnet und noch ein wenig an Helligkeit und Kontrast gespielt. Ein Großteil davon geschieht mit zwei Klicks über ein Photoshop-Plugin und somit ist mein Programm nach zwei Tagen schon wieder obsolete. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>Auf diesem Webspace kann ich es leider auch nicht laufen lassen, da <em>php_imagick</em> hier (wie wohl bei den meisten Providern) <strong>nicht zur Verfügung</strong> steht. So ein Ressourcen-Fresser wäre wohl ein zu großes Risiko für die Performance &#8211; eigener Server 4tw.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2009/09/29/tool-fluoreszenz-mikroskopie/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stapelrechner Milestone 3</title>
		<link>http://www.caracasa.de/2009/06/26/stapelrechner-milestone-3/</link>
		<comments>http://www.caracasa.de/2009/06/26/stapelrechner-milestone-3/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 22:58:44 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Studium]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=1346</guid>
		<description><![CDATA[Heute war der letzte Präsentationstermin für unseren Stapelrechner-Simulator. Schon nächsten Donnerstag geben wir das fertige Programm, den Code und die Dokumentation beim betreuenden Professor ab. Damit ist dann unser Softwareprojekt für dieses Semester abgeschlossen. Alle Kann- und Soll-Anforderungen sich erfüllt &#8211; was will man mehr. Na hoffentlich ist auch im nächsten Semester etwas Interessantes mit [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war der letzte Präsentationstermin für unseren Stapelrechner-Simulator. Schon nächsten Donnerstag geben wir das fertige Programm, den Code und die Dokumentation beim betreuenden Professor ab. Damit ist dann unser Softwareprojekt für dieses Semester abgeschlossen. Alle Kann- und Soll-Anforderungen sich erfüllt &#8211; was will man mehr. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Na hoffentlich ist auch im nächsten Semester etwas Interessantes mit dabei.</p>
<p>Für mich kann ich auf jeden Fall abschließend sagen, dass ich in den letzten Monaten unglaublich viel über SWING, Java-Threads, Exceptions und das Event-Konzept gelernt habe, was mir in Zukunft sicher helfen wird. Am einfachsten wäre natürlich, auch im nächsten Jahr wieder eine GUI-Applikation zu entwickeln. Solange das Zielsystem nicht Matlab heißt, bin ich natürlich auch für alles Andere offen, immerhin habe ich noch die &#8220;freie Wahl&#8221; (der Sprache). C oder C++ würden mich z.B. auch freuen, da Pointer dieses Semester etwas kurz gekommen sind und uns die Vorlesung &#8220;Betriebssysteme und verteilte Systeme&#8221; eigentlich alle Werkzeuge in die Hand gegeben hat, um auch auf primitivsten C-Umgebungen mit mehreren Prozessen zu jonglieren.</p>
<p>Jaja, Softwareentwicklung ist schon ne feine Sache &#8211; vielleicht sollte ich überlegen, das später mal beruflich zu machen.  <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2009/06/26/stapelrechner-milestone-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stapelrechner Milestone 1</title>
		<link>http://www.caracasa.de/2009/05/08/stapelrechner-milestone-1/</link>
		<comments>http://www.caracasa.de/2009/05/08/stapelrechner-milestone-1/#comments</comments>
		<pubDate>Fri, 08 May 2009 17:21:03 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Studium]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=1279</guid>
		<description><![CDATA[Heute war der erste Tag der Wahrheit für unser Semesterprojekt. Abgabe der Dokumente war schon diesen Mittwoch &#8211; heute folgte eine Präsentation über 15 Minuten + 5 Minuten Fragenteil, um den Stand der Entwicklung festzustellen und sich dem abschließenden Urteil des Auftraggebers bzw. des Managers zu stellen. Kein Projektabbruch, keine gelbe Karte oder sonstige Ermahnungen. [...]]]></description>
			<content:encoded><![CDATA[<p>Heute war der erste Tag der Wahrheit für unser<a href="http://www.caracasa.de/2009/04/03/projektarbeit/"> Semesterprojekt</a>. Abgabe der Dokumente war schon diesen Mittwoch &#8211; heute folgte eine Präsentation über 15 Minuten + 5 Minuten Fragenteil, um den Stand der Entwicklung festzustellen und sich dem abschließenden Urteil des Auftraggebers bzw. des Managers zu stellen.</p>
<p>Kein Projektabbruch, keine gelbe Karte oder sonstige Ermahnungen. Offensichtlich haben wir wohl alles ordentlich vorgestellt, die Präsentationszeit fast bis auf die Sekunde eingehalten und auch alle notwendigen Projekte fristgerecht eingereicht. Einzig eine kleine Formsache in unseren Aktivitätsdiagramm muss geändert werden und die Aufteilung der Module auf die Team-Mitglieder so angepasst werden, dass alle Bezeichnungen aus der Grobarchitektur darin zu finden sind.</p>
<p>Heute morgen hatte ich noch 2,50€ in einen dieser Billig-Laserpointer investiert. Mal sehen, ob der bis zum Projektabschluss durchhält &#8211; ich kann es einfach nicht lassen damit herumzuspielen.</p>
<p>In den nächsten Wochen bis zum Milestone 2 darf endlich auch Code produziert werden. Die ersten Versuche mit Javadoc habe ich schon gemacht. Hübsch ist das Ergebnis zwar nicht, aber noch einfacher kommt man wohl nicht an eine Schnittstellen-Beschreibung seiner Klassen. Ein UML-Klassendiagramm steht dem Ganzen natürlich auch noch vorweg.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2009/05/08/stapelrechner-milestone-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projektarbeit</title>
		<link>http://www.caracasa.de/2009/04/03/projektarbeit/</link>
		<comments>http://www.caracasa.de/2009/04/03/projektarbeit/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 11:57:02 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Studium]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=1238</guid>
		<description><![CDATA[Vor ein paar Monaten habe ich in der FH-Bibliotek einen Kommilitionen aus Gummersbach kennengelernt, der gerade an seiner Master- oder Diplomarbeit (bin nicht mehr ganz sicher)  saß und in diesem Rahmen einen Instant-Messenger für die mobile Plattform &#8220;Openmoko&#8221; entwickelte. Da hoffte er noch auf die Anschaffung eines DevKit-Smartphones durch seine Fakultät, um die Anwendung auch [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Monaten habe ich in der FH-Bibliotek einen Kommilitionen aus Gummersbach kennengelernt, der gerade an seiner Master- oder Diplomarbeit (bin nicht mehr ganz sicher)  saß und in diesem Rahmen einen Instant-Messenger für die mobile Plattform &#8220;Openmoko&#8221; entwickelte. Da hoffte er noch auf die Anschaffung eines DevKit-Smartphones durch seine Fakultät, um die Anwendung auch mal außerhalb seines Emulators zu testen zu können &#8211; Googles Android war grade erst durch die Presse gegangen.</p>
<p>Hm, <a href="http://www.golem.de/0904/66307.html">das OpenMoko nun wohl neben Android auf der Strecke bleibt</a> hat ihn bestimmt nicht allzu erfreut. Vor allem, wenn sich der &#8220;Plan B&#8221; als Oberfläche für ein Navigationsgerät oder ähnliches entpuppt. Da arbeitet man über Monate an einer Software, die nun mit ein wenig Pech nie von jemanden benutzt werden wird &#8211; hoffentlich bleibt mir sowas erspart.</p>
<p>Themawechsel:</p>
<p>Seit Anfang der Woche kennen wir mit Sicherheit unser Projekt des Softwarepraktikums in diesem Semester: Es soll ein <strong>Simulator für einen Stapelrechner</strong> werden, der später in den Vorlesungen Digitaltechnik, rechnernahe Hardware-Programmierung oder Rechnerarchitektur eingesetzt werden kann, um die Funktionsweise einer <strong>registerlosen Rechenmaschine</strong> zu visualisieren. Diese soll dann Anweisungen (Addition, Multiplikation, Sprünge,  Funktionsaufrufe, &#8230;) in einer Assembler-ähnlichen Sprache verarbeiten können.  Ich würde behaupten, das auch leichtere Projekte zu Wahl standen. Ganz gemäß dem Motto: Jetzt auswählen &#8211; später fluchen! <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Nächsten Dienstag haben wir die erste Besprechung mit unserem &#8220;Auftraggeber&#8221;, um die Funktionalität abzustecken. Java als Programmiersprache steht aufgrund der gewünschten Plattform-Unabhängigkeit und Verzicht auf proprietäre Technologien eigentlich schon fest.</p>
<p>Am liebsten wäre es mir, wenn ich gleich hier und jetzt anfangen könnte zu programmieren, aber nach den Grundregeln des Software Engineering wäre das wohl mehr als nur falsch. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Planung, Analyse, Entwurf, <em>Programmierung</em>, &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2009/04/03/projektarbeit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eve &#8211; data export / toolkit</title>
		<link>http://www.caracasa.de/2008/12/21/eve-data-export-toolkit/</link>
		<comments>http://www.caracasa.de/2008/12/21/eve-data-export-toolkit/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 14:14:12 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Spiele]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Eve online]]></category>
		<category><![CDATA[Konvertierung]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=993</guid>
		<description><![CDATA[CCP bietet auf der Webseite einen ziemlich umfassenden Dump ihrer Datenbank an, der etliche Megabyte Informationen über Agenten, Gegenstände und die Sonnensysteme enthält. Ich hab mir in den Kopf gesetzt, diese Information brauchbar und hübsch für das Web aufzubreiten, wie es schon unzählige andere Fanseiten seit Jahren machen. CCP selbst liefert eine Liste, unter welchen [...]]]></description>
			<content:encoded><![CDATA[<p>CCP bietet auf der <a href="http://www.eve-online.com/">Webseite</a> einen ziemlich umfassenden <a href="http://www.eve-online.com/community/toolkit.asp">Dump ihrer Datenbank</a> an, der etliche Megabyte Informationen über Agenten, Gegenstände und die Sonnensysteme enthält. Ich hab mir in den Kopf gesetzt, diese Information brauchbar und hübsch für das Web aufzubreiten, wie es schon unzählige andere Fanseiten seit Jahren machen. CCP selbst liefert <a href="http://www.eve-online.com/community/fansites.asp">eine Liste</a>, unter welchen Adressen ihre Datensammlung bereits verfügbar ist.</p>
<p>Meine ersten Versuche werde ich &#8211; mit den Einschränkungen meines Webspaces &#8211; in PHP auf einer MYSQL-Datenbank machen. Die Daten liegen auf der offiziellen Webseite aber <strong>in Form eines Backups für MSSQL-Server</strong> + zugehöriger Tabellen-Definition vor. Die erste Hürde ist also groß, wenn man sich damit beschäftigen möchte.</p>
<p>MYSQL bietet als einzige mir bekannte funktionierende freie Möglichkeit ein &#8220;<a href="http://dev.mysql.com/downloads/gui-tools/5.0.html"><strong>Migration Toolkit</strong></a>&#8221; an, das eine MSSQL Datenbank (online/ nicht als backup) in eine MYSQL-Datenbank übersetzen kann. Vor der Konvertierung steht also zunächst die Installation eines Microsoft SQL Servers 2008 (in der <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;FamilyID=58ce885d-508b-45c8-9fd3-118edd8e6fff">kostenlosen Express-Variante</a>) an, um das Backup dort zunächst einzuspielen und ihn als Quelle für die Migration zu verwenden.</p>
<p>Auf meinem (in diesem Bereich) unbelasteten Windows Vista musste ich vor der Installation das .Net-Framework, einen aktuellen Windows-Installer und die PowerShell manuell nach installieren. Hat man dieses Abhängigkeitsfeuerwerk gemeistert, ist die Installation zwar langwierig aber genauso problemlos, wie das anschließende Einspielen der Sicherungsdatei.</p>
<p>Um den frisch aufgesetzten Server im Folgenden zur Mitarbeit bewegen zu können, muss man zunächst<strong> </strong>im <em>Konfigurationsmanager</em><strong> den TCP/IP Zugriff erlauben</strong>. (SQL Server Netzwerkkonfiguration-&gt; Protokolle -&gt; TCP/IP aktivieren und in den Einstellungen den Port 1433 bei IPALL eintragen).</p>
<p>Da mir die Benutzerverwaltung von Windows nicht sonderlich liegt, habe ich im <em>Managment Studio</em> noch einen <strong>neuen Benutzer mit MSSQL-Authenifizierung</strong> erstellt, ihm die <strong>Rolle &#8220;public&#8221;/&#8221;sysadmin</strong>&#8221; verpasst und <strong>die entsprechende Datenbank zugewiesen</strong>. Danach funktionierte auch die Anmeldung aus der Migrations Toolkit.</p>
<p>Die Migration direkt auf den Server schlug aber fehl, da der Namen der Zieldatenbank fest aus Datenbanknamen und Schemanamen generiert wird und mir zum Erstellen einer neuen Datenbank die Rechte fehlen. Eine Option dieses Verhalten zu ändern, habe ich auch nach langer Suche im Netz nicht finden können. Das bestes Suchergebnis war <a href="http://forums.mysql.com/read.php?104,38223,38223#msg-38223">dieses</a>, mit dem ich aber auch nicht weiter kam.</p>
<p>Als letzten Ausweg habe ich eine <strong>lokale XAMPP Installation</strong> eingerichtet, in der Hoffnung die Daten nach der Migration auf den richtigen Server kopieren zu können. Um beide Systeme zur Zusammenarbeit zu überreden, musste ich in der my.cnf im Abschnitt &#8220;<em>[mysqld]</em>&#8221; noch die Zeile &#8220;<em>character-set-server = utf8</em>&#8221; ergänzen.</p>
<p>Die Anwendung lief anschließend ohne Fehlermeldung durch, so dass ich endlich die 242,7   MiB Daten im mySQL Format vorliegen hatte!</p>
<p>Zu diesem Zeitpunkt hatte mich schon dafür entschieden, mein Glück nicht auf die Probe zu stellen und die Datenbank zunächst lokal zu verwenden, da ich doch inzwischen eh alles Nötige auf der Festplatte installiert hatte.</p>
<p><strong>Der Vollständigkeit halber aber doch noch der Versuch, die Daten auf den Webserver zu kopieren:</strong></p>
<p>Die <strong>Datenbank umbennen</strong>, damit der Namen der Vorgabe meines Providers entspricht. Phpmyadmin brach nach der Hälfte ab und hinterließ großes Chaos, so dass ich ein &#8211; in weiser Voraussicht &#8211; erstelltes Backup mit MYSQL-Administrator einspielen musste. Generell scheint mySQL nämlich das Umbenennen einer Datenbank nicht zu unterstützen und PHP verschluckt sich an der Menge der Daten.</p>
<p><strong>Besser:</strong></p>
<p>Das MySQL-Backup gleich <strong>in ein Schema mit dem richtigen Namen einspielen</strong> und das Alte löschen.</p>
<p>Die Prozedur lief sowohl lokal (~2m), als auch auf meinem Webserver (~35m bei DSL 16000) ohne Fehler durch. Ich hoffe nur, dass ich mit meinen zahlreichen Fehlversuchen die Mitbenutzer meines Shared-Servers nicht zu sehr gestört habe. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Los gehts!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2008/12/21/eve-data-export-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Art of Coding</title>
		<link>http://www.caracasa.de/2008/05/20/the-art-of-coding/</link>
		<comments>http://www.caracasa.de/2008/05/20/the-art-of-coding/#comments</comments>
		<pubDate>Tue, 20 May 2008 21:14:34 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Fegefeuer]]></category>
		<category><![CDATA[Index]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=599</guid>
		<description><![CDATA[Folgender Tipp wurde uns heute in einer Vorlesung mit auf den Weg gegeben: Damit man bei umfangreichen Algorithmen nicht den &#8220;Arrayindex&#8221; mit der &#8220;Position im Array&#8221; verwechseln kann, einfach etwas mehr Speicher als nötig deklarieren und Index 0 gepflegt ignorieren! Okay. Ich bin noch ein junger angehender Informatiker mit einem Kopf voller Träume und Ideale, [...]]]></description>
			<content:encoded><![CDATA[<p>Folgender Tipp wurde uns heute in einer Vorlesung mit auf den Weg gegeben:</p>
<blockquote><p>Damit man bei umfangreichen Algorithmen nicht den &#8220;Arrayindex&#8221; mit der &#8220;Position im Array&#8221; verwechseln kann, einfach etwas mehr Speicher als nötig deklarieren und Index 0 gepflegt ignorieren!</p></blockquote>
<p>Okay. Ich bin noch ein junger angehender Informatiker mit einem Kopf voller Träume und Ideale, aber dafür kommt man 100% ins Informatiker-Fegefeuer &#8211; und in der wird einem bekanntlich jede einzelne übergangene Speicherzelle als Hex-Adresse ins Zahnfleisch gelasert!</p>
<p>Selbst bei 2GB Arbeitsspeicher bekomme ich &#8220;<em>i = p &#8211; 1&#8243;</em> noch gerade eben so hin &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2008/05/20/the-art-of-coding/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Horner Newton Intervalle</title>
		<link>http://www.caracasa.de/2008/05/06/horner-newton-intervalle/</link>
		<comments>http://www.caracasa.de/2008/05/06/horner-newton-intervalle/#comments</comments>
		<pubDate>Tue, 06 May 2008 11:38:54 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Bisektion]]></category>
		<category><![CDATA[Horner-Schema]]></category>
		<category><![CDATA[Intervall-Schachtelung]]></category>
		<category><![CDATA[Newton-Verfahren]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/?p=588</guid>
		<description><![CDATA[Das heutige Praktikum in &#8220;Programmierung Numerischer Verfahren&#8221; hatte es wirklich in sich. In 45 Minuten musste man seine Vorbereitungen in den Rechner hacken: Lösung eines Polynoms mittels Horner-Schema Nullstellensuche mit Intervallschachtelung Nullstellensuche mit Newton-Verfahren Dafür habe ich mir gestern noch die halbe Nacht um die Ohren gehauen, weil gerade letzter Algorithmus einfach nicht laufen wollte. [...]]]></description>
			<content:encoded><![CDATA[<p>Das heutige Praktikum in &#8220;Programmierung Numerischer Verfahren&#8221; hatte es wirklich in sich. In 45 Minuten musste man seine Vorbereitungen in den Rechner hacken:</p>
<ul>
<li>Lösung eines Polynoms mittels Horner-Schema</li>
<li>Nullstellensuche mit Intervallschachtelung</li>
<li>Nullstellensuche mit Newton-Verfahren</li>
</ul>
<p>Dafür habe ich mir gestern noch die halbe Nacht um die Ohren gehauen, weil gerade letzter Algorithmus einfach nicht laufen wollte. Meine Lösung stelle ich hier (noch) nicht öffentlich ein, weil noch einige Praktikumstermine ausstehen &#8211; aber eigentlich handelt es sich dabei ja <span style="text-decoration: line-through;">nur</span> um numerische Standardverfahren, die man als Informatiker einfach mal gemacht haben muss.</p>
<p>Folgende Links waren mir beim Programmieren sehr hilfreich:</p>
<ul>
<li><a href="http://www.arndt-bruenner.de/mathe/java/newton.htm">Java-Applet zum Newton-Verfahren</a></li>
<li><a href="http://www.arndt-bruenner.de/mathe/scripts/polynome.htm">Nullstellen in Polynomen bis Grad 4 übersichtlich berechnen</a></li>
<li><a href="http://de.wikipedia.org/wiki/Bisektion">Bisektion</a> (Nullstellen mittels Intervall-Schachtelung)</li>
</ul>
<p>Vielleicht hilft es ja jemandem, der auch keine Lust hat nur fremde Lösungen auswendig zu lernen. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2008/05/06/horner-newton-intervalle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fehlersuche</title>
		<link>http://www.caracasa.de/2007/11/07/fehlersuche/</link>
		<comments>http://www.caracasa.de/2007/11/07/fehlersuche/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 20:15:39 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/2007/11/07/fehlersuche/</guid>
		<description><![CDATA[Bis zum Beginn des Praktikums &#8220;Praktische Informatik&#8221; durfte ich heute stundenlang im Rechner-Pool die Zeit totschlagen. Das vorzuzeigende Java-Programm wurde mit &#8220;Exception-Behandlung&#8221; gepimpt &#8211; kleine Spielereien mit PHP in einer schnell installierten WAMP-Umgebung und ein ganz klein wenig heimliches Siedler 2 in einer virtuellen FreeDOS-Maschine brachten die Stunden auch irgendwie rum. Bei der Besprechung waren [...]]]></description>
			<content:encoded><![CDATA[<p>Bis zum Beginn des Praktikums &#8220;Praktische Informatik&#8221; durfte ich heute stundenlang im Rechner-Pool die Zeit totschlagen. Das vorzuzeigende Java-Programm wurde mit &#8220;Exception-Behandlung&#8221; gepimpt &#8211; kleine Spielereien mit PHP in einer schnell installierten WAMP-Umgebung und ein ganz klein wenig heimliches Siedler 2 in einer virtuellen FreeDOS-Maschine brachten die Stunden auch irgendwie rum.</p>
<p>Bei der Besprechung waren die Erläuterungen zu Java-Code auch kein Problem. Bei der Übersetzung des Java-Codes in C(++) habe ich mich allerdings etwas schwer getan. Das schnell hingeschriebene Programm kompilierte, lieferte  aber konsequent das Wertepaar (0,0) als Ergebnis zweier simpler Rechentherme. Ich probierte diverse Zahlenkombinationen der Eingabeparameter aus und konnte mir das Ganze einfach nicht erklären. Auch der zur Hilfe gerufene Mitarbeiter  suchte den kurzen Quellcode nach Fehlern ab und schien ebenso ratlos. Sogar der Debugger wurde für den 6-Zeiler gestartet und der Ablauf in Einzelschritten abgegangen. Kein Fehler.</p>
<p>Erst als ich mein Programm dem meines Nachbarn angeglichen und auch exakt die selben Schritte wie er ausgeführt hatte, um ein Fehlverhalten meiner IDE oder des Compilers auszuschließen, wurde mir klar, dass ich in der vergangenen halben Stunde wohl <strong>sämtliche Kombinationen von Parametern als Test</strong> eingegeben hatte, die als<strong> absolut richtiges Ergebnis</strong> eben jene (0,0) ergaben.</p>
<p>Manches muss man wohl einfach auf die harte Tour lernen. *kopfschüttel*</p>
<p><strong>Merke:</strong><br />
1. Wenn es keine Fehler gibt, sie diese besonders schwer zu finden.<br />
2. Die richtige Auswahl geeigneter Testvektoren bedarf einer gewissen Sorgfalt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2007/11/07/fehlersuche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ungewöhnliche Binärbäume</title>
		<link>http://www.caracasa.de/2007/11/01/ungewoehnliche-binaerbaeume/</link>
		<comments>http://www.caracasa.de/2007/11/01/ungewoehnliche-binaerbaeume/#comments</comments>
		<pubDate>Thu, 01 Nov 2007 18:16:42 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Binärbaum]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Katzen]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/2007/11/01/ungewoehnliche-binaerbaeume/</guid>
		<description><![CDATA[In einer freien Minute habe ich Andrea heute (versucht), das Konzept von einfach/doppelt verketteten Listen und Binärbäumen zu erklären. Damit die Materie nicht so trocken ist, habe ich die Ausgangsituation in einen neuen Kontext gepackt: Fünf Katzen stehen auf einer Wiese und grasen. (Anmerkung: Meine gemalten Katzen und Schafe sehen sich recht ähnlich) Nun suchen [...]]]></description>
			<content:encoded><![CDATA[<p>In einer freien Minute habe ich Andrea heute (versucht), das Konzept von einfach/doppelt verketteten Listen und Binärbäumen zu erklären. Damit die Materie nicht so trocken ist, habe ich die Ausgangsituation in einen neuen Kontext gepackt:</p>
<p>Fünf Katzen stehen auf einer Wiese und grasen. (Anmerkung: Meine gemalten Katzen und Schafe sehen sich recht ähnlich) Nun suchen wir einen Algorithmus, der uns möglichst schnell die Katze &#8220;Gustav&#8221; aus der Gruppe sucht. Habe ich erwähnt, dass die Katzen von Weitem fast identisch aussehen und sich nach kurzem Anlernen nicht nur ihren Namen, sondern auch die Position ihrer Nebenkatze(n) merken kann.  ^^</p>
<p class="Fotos"> <img src="/media/2007-11-01/DSC01381_w300.jpg" alt="Schmierzettel" /></p>
<p>Zugegeben: Für meine absurden Beispiele bin ich manchmal bekannt. Aber trotz aller Widrigkeiten, hat Andrea die Problematik wohl verstanden &#8211; was wohl weniger mein Verdienst ist.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2007/11/01/ungewoehnliche-binaerbaeume/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batchdateien</title>
		<link>http://www.caracasa.de/2007/10/22/batchdateien/</link>
		<comments>http://www.caracasa.de/2007/10/22/batchdateien/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 17:25:00 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[batch]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.caracasa.de/2007/10/22/batchdateien/</guid>
		<description><![CDATA[Erste Regel beim Schreiben von Batchdateien in der cmd-Shell von WindowsXP: Niemals nie benenne deine Batchdatei nach einer Shell-Funktion! Ein &#8220;sort&#8221; an der falschen Stelle kann dir schlaflose Nächte bescheren.]]></description>
			<content:encoded><![CDATA[<p>Erste Regel beim Schreiben von Batchdateien in der cmd-Shell von WindowsXP:</p>
<p><strong>Niemals nie benenne deine Batchdatei nach einer Shell-Funktion! </strong></p>
<p>Ein &#8220;<em>sort</em>&#8221; an der falschen Stelle kann dir schlaflose Nächte bescheren. <img src='http://www.caracasa.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.caracasa.de/2007/10/22/batchdateien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

