<?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>www.christian-rehn.de</title>
	<atom:link href="http://www.christian-rehn.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.christian-rehn.de</link>
	<description>Ein Blog über Informatik und Anderes...</description>
	<lastBuildDate>Sat, 12 May 2012 21:23:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Wie man Software entwirft</title>
		<link>http://www.christian-rehn.de/2012/05/12/wie-man-software-entwirft/</link>
		<comments>http://www.christian-rehn.de/2012/05/12/wie-man-software-entwirft/#comments</comments>
		<pubDate>Sat, 12 May 2012 21:23:16 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Daumenregeln]]></category>
		<category><![CDATA[OOD]]></category>
		<category><![CDATA[SEP]]></category>
		<category><![CDATA[Studium]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1050</guid>
		<description><![CDATA[Wie schreibt man eigentlich Software? &#8211; Nun, man tippt einfach den Code. Und wie weiß man welchen Code man schreiben muss? &#8211; Äh&#8230; &#8211; Also, wenn man plangetrieben entwickelt, hat man ein Modell der Software, die man implementiert. Und wie kommt man zu dem Modell? &#8211; Man schreibt es auf, z.B. mit UML. Und wie [...]]]></description>
			<content:encoded><![CDATA[<p><em>Wie schreibt man eigentlich Software? </em><br />
 &#8211; Nun, man tippt einfach den Code.<br />
<em>Und wie weiß man welchen Code man schreiben muss?</em><br />
 &#8211; Äh&#8230;</p>
<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<tr>
<td>
 &#8211; Also, wenn man plangetrieben entwickelt, hat man ein Modell der Software, die man implementiert.<br />
<em>Und wie kommt man zu dem Modell?</em><br />
 &#8211; Man schreibt es auf, z.B. mit <acronym title='Unified Modelling Language'>UML</acronym>.<br />
<em>Und wie weiß man, was man aufschreiben muss?</em><br />
 &#8211; Äh&#8230;
</td>
<td>
 &#8211; Also, wenn man agil entwickelt, entwickelt man i.d.R. testgetrieben, d.h. man schreibst zuerst Tests und aus den Tests kann man ersehen, welches Design man zu verwenden hat.<br />
<em>Und wie weiß man, wie man den Testcode schreibt?</em><br />
 &#8211; Man benutzt ein Unittest-Framework und testet damit die zukünftige Schnittstelle.<br />
<em>Und wie weiß man, wie die zu testende Schnittstelle aussehen muss?</em><br />
 &#8211; Äh&#8230;
</td>
</tr>
</table>
<p>OK, die Antwort auf diese Frage wird etwas länger. <span id="more-1050"></span></p>
<p>In diesem Semester betreue ich mal wieder das Softwareentwicklungsprojekt bzw. Modellierungspraktikum. Dieses Jahr bieten wir erstmals Saalübungen an und in einer solchen hab ich versucht, genau die oben stark vereinfacht hergeleitete Frage etwas aufzuklären. </p>
<p>Letztendlich liegt hier das, was Softwareentwicklung manchmal zu einer Art &#8220;Kunst&#8221; werden lässt. Ein scheinbar undefiniertes Wissen, das einfach aus &#8220;Erfahrung&#8221; zu kommen scheint. Aber ganz so undefiniert ist dieses Wissen gar nicht. Viel davon lässt sich in einfachen Prinzipien, Heuristiken oder &#8220;Daumenregeln&#8221; zusammenfassen, was ein gewisses Maß an Wissenstransfer ermöglicht. Ich habe darüber schon <a href="http://www.christian-rehn.de/tag/daumenregeln/" class="liinternal">das ein- oder andere Mal</a> geschrieben. Leider wird so etwas nur selten wirklich gelehrt, auch, wenn es machbar wäre. Man kann damit problemlos ganze Vorlesungen füllen. Ich hab versucht, das in eine 90-minütige &#8220;Saalübung&#8221; zu quetschen. Und vielleicht war es sogar ein bisschen hilfreich.</p>
<p>Ich habe diesmal neben den eigentlichen Folien ein separates Handout gemacht. Das hat den Vorteil, dass die Folien nicht selbsterklärend sein müssen und deshalb knapper und übersichtlicher sein können. Auf der anderen Seite kann das Handout ausführlicher und beschreibender sein. Das Handout ist damit zwar noch kein ausführliches Tutorial, aber zumindest mal ne kurze Einführung in die Problematik und sollte auch verständlich sein, wenn man meinen Vortrag nicht gehört hat.</p>
<p>Das ist das erste Mal, dass ich das so gemacht habe. Feedback ist also herzlich willkommen. insbesondere weil ich mir überlege, ob ich das für meinen Vortrag auf den nächsten Delphi-Tagen auch so machen soll.</p>
<p>Hier ist also das Handout: Download: <a href="http://www.christian-rehn.de/downloads/architektur.handout.pdf">Wie man Software entwirft -- Handout</a> (Größe: 4.13 MB; bisher 16 mal heruntergeladen)<br />
Hier die Folien: Download: <a href="http://www.christian-rehn.de/downloads/architektur.folien.pdf">Wie man Software entwirft -- Folien</a> (Größe: 4.05 MB; bisher 11 mal heruntergeladen)<br />
Und hier der Source: Download: <a href="http://www.christian-rehn.de/downloads/architektur.tar.gz">Wie man Software entwirft -- Source</a> (Größe: 3.9 MB; bisher 9 mal heruntergeladen)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/05/12/wie-man-software-entwirft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration</title>
		<link>http://www.christian-rehn.de/2012/04/02/continuous-integration/</link>
		<comments>http://www.christian-rehn.de/2012/04/02/continuous-integration/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 15:15:33 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Martin Fowler]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1043</guid>
		<description><![CDATA[Letztens hab ich als kleine Seminararbeit in der Uni was über Continuous Integration geschrieben. Hier meine Seminararbeit: Und hier die zugehörige Präsentation: Wer sich für CI interessiertn sollte aber vielleicht eher den einschlägigen Artikel von Martin Fowler und/oder das Buch von Paul Duvall lesen.]]></description>
			<content:encoded><![CDATA[<p>Letztens hab ich als kleine Seminararbeit in der Uni was über <a href="http://de.wikipedia.org/wiki/Continuous_Integration" rel="nofollow" class="liwikipedia">Continuous Integration</a> geschrieben. </p>
<p>Hier meine Seminararbeit:<br />
Download: <a href="http://www.christian-rehn.de/downloads/seminar_ci.pdf">Continuous Integration: Aspects in Automation and Configuration Management</a> (Größe: 355.51 kB; bisher 33 mal heruntergeladen)</p>
<p>Und hier die zugehörige Präsentation:<br />
Download: <a href="http://www.christian-rehn.de/downloads/presentation_ci.pdf">Continuous Integration (Präsentation)</a> (Größe: 1.4 MB; bisher 31 mal heruntergeladen)</p>
<p>Wer sich für CI interessiertn sollte aber vielleicht eher <a href="http://martinfowler.com/articles/continuousIntegration.html" class="liexternal">den einschlägigen Artikel von Martin Fowler</a> und/oder <a href="http://martinfowler.com/books.html#duvall" class="liexternal">das Buch von Paul Duvall</a> lesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/04/02/continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wenn das Quietscheentchen Probleme löst</title>
		<link>http://www.christian-rehn.de/2012/03/19/wenn-das-quietscheentchen-probleme-lost/</link>
		<comments>http://www.christian-rehn.de/2012/03/19/wenn-das-quietscheentchen-probleme-lost/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 22:03:50 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Anderes]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1032</guid>
		<description><![CDATA[Kann ein Quietscheentchen bei der Softwareentwicklung helfen? Kann es Probleme lösen, die man alleine nicht lösen konnte? Wäre eine ausgestopfte Ente besser geeignet? OK, Spaß beiseite. Ob die Ente aus Gummi ist oder ausgestopft, spielt keine Rolle. Hauptsache sie ist tot. Wobei eine lebende Ente vielleicht auch&#8230; Nein, ich hab keine Rauschmittel zu mir genommen. [...]]]></description>
			<content:encoded><![CDATA[<p>Kann ein Quietscheentchen bei der Softwareentwicklung helfen? Kann es Probleme lösen, die man alleine nicht lösen konnte? Wäre eine ausgestopfte Ente besser geeignet? </p>
<p>OK, Spaß beiseite. Ob die Ente aus Gummi ist oder ausgestopft, spielt keine Rolle. Hauptsache sie ist tot. Wobei eine lebende Ente vielleicht auch&#8230;</p>
<p>Nein, ich hab keine Rauschmittel zu mir genommen. <img src='http://www.christian-rehn.de/wp-includes/images/smilies/icon_mrgreen.gif' alt=':mrgreen:' class='wp-smiley' />  Ich will damit tatsächlich etwas Ernsthaftes sagen: Manchmal ist es hilfreich, ein Problem einfach nur mal detailliert zu erklären; und auf einmal löst es sich wie von selbst. </p>
<p>Mir ist das des öfteren schon selbst passiert. Ich stand vor irgend nem Problem und mir wollte die Lösung partout nicht einfallen. Also hab ich mich entschlossen, die Frage anderen zu stellen und auf ne hilfreiche Antwort zu hoffen. Sowas tue ich gerne auch in Webforen. Und in solchen Webforen muss man sein Problem genau erläutern:</p>
<p> &#8211; Was ist der Kontext?<br />
 &#8211; Was ist das Problem?<br />
 &#8211; Was hab ich gemacht?<br />
 &#8211; Was hätte passieren sollen?<br />
 &#8211; Was ist stattdessen passiert?</p>
<p>Dazu noch ein paar schöne Zeilen Code oder ein Beispiel und dann weiß jeder was mein Problem ist. So werden die anderen User in die Lage versetzt, hilfreich zu antworten. Und manchmal versetzt man sich so auch selbst in die Lage, das Problem zu lösen. In so einem Fall ist es gar nicht mehr nötig, die Frage auch wirklich zu posten. Man hätte die Frage genauso gut ner ausgestopften Ente stellen können.</p>
<p>Oftmals sitze ich auch auf der anderen Seite. Ich lese Fragen und beantworte sie. Manchmal lese ich Fragen, bei denen sich der Fragensteller augenscheinlich keine große Mühe bei der Formulierung gegeben hat. Das ist nicht nur unhöflich (jemand erwartet eine kostenlose Antwort, die mitunter Mühe kostet, will sich aber selbst keine Mühe machen), sondern erschwert auch die Hilfe. Und auch das Quietscheentchen wird einem nicht weiter helfen, wenn man es nicht erst nimmt und das Problem nicht genau erläutert.</p>
<p>Dazu fällt mir noch ein Erlebnis aus meiner Schulzeit ein: Im Physikunterricht hatten wir den Druck in Flüssigkeiten durchgenommen. Ich hatte mir schon einige Zeit vorher vorgenommen, bei Gelegenheit ne Frage zu stellen: Druck hat man ja früher in &#8220;<a href="http://de.wikipedia.org/wiki/Millimeter-Quecksilbersäule" rel="nofollow" class="liwikipedia">Millimeter-Quecksilbersäule</a>&#8221; gemessen. Warum geht das? Müsste das nicht von der Bauart des Barometers abhängen?</p>
<p>Ich stellte also meine Frage. Der Lehrer wiederholte die Frage und auf einmal schoss mir die Antwort durch den Kopf. Ich konnte die Frage ja mit meinem eigenen Physikwissen beantworten! Des Rätsels Lösung ist das <a href="http://de.wikipedia.org/wiki/Hydrostatisches_Paradoxon" rel="nofollow" class="liwikipedia">Hydrostatische Paradoxon</a>, das wir schon kennen gelernt hatten. Ich hatte die Frage gestellt ohne selbst nochmal darüber nachzudenken. Kaum hatte ich die Frage gehört, war die Antwort sonnenklar. Hätte ich die Frage vorher ner Gummiente erzählt, wär mir ne kleine Peinlichkeit erspart geblieben.</p>
<p>Zu den Quietscheentchen:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Rubber_duck_debugging" rel="nofollow" class="liwikipedia">Wikipedia: Rubber duck debugging</a></li>
<li><a href="http://www.codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html" class="liexternal">Coding Horror: Rubber Duck Problem Solving</a></li>
</ul>
<p>(<a href="http://feedproxy.google.com/~r/NickHodges/~3/9O6T43zinpc/post.aspx" class="liexternal">via</a>)</p>
<p>Aaaalso, liebes Entchen, ich hab da mal ne Frage&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/03/19/wenn-das-quietscheentchen-probleme-lost/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Joel on Software</title>
		<link>http://www.christian-rehn.de/2012/03/01/joel-on-software/</link>
		<comments>http://www.christian-rehn.de/2012/03/01/joel-on-software/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 21:23:55 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Das Netz]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1024</guid>
		<description><![CDATA[Ich blogge hier jetzt schon seit mehr als zweieinhalb Jahren. Und manchmal scheint es tatsächlich Leute zu geben, die das lesen, was ich hier dank meiner Überheblichkeit so altklug von mir gebe. Ja, wirklich. Auf der anderen Seite gibts aber auch Blogs, die es viel mehr wert sind, gelesen zu werden. Ins Internet schreiben auch [...]]]></description>
			<content:encoded><![CDATA[<p>Ich blogge hier jetzt schon seit mehr als zweieinhalb Jahren. Und manchmal scheint es tatsächlich Leute zu geben, die das lesen, was ich hier dank meiner Überheblichkeit so altklug von mir gebe. Ja, wirklich. Auf der anderen Seite gibts aber auch Blogs, die es viel mehr wert sind, gelesen zu werden. Ins Internet schreiben auch Leute, die wirklich Ahnung haben. Und einer dieser ist <a href="http://en.wikipedia.org/wiki/Joel_Spolsky" rel="nofollow" class="liwikipedia">Joel Spolsky</a>.</p>
<p>Ich hab ja schon mal <a href="http://www.joelonsoftware.com/" class="liexternal">sein Blog</a> <a href="http://www.christian-rehn.de/tag/joel-spolsky/" class="liinternal">verlinkt</a>, aber jetzt will ich doch noch mal etwas mehr dazu schreiben. </p>
<p>Joel Spolsky ist Software-Entwickler, <a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html" class="liexternal">ehemaliger Teig-Schieber in einer Großbäckerei</a>, hat mal bei Microsoft gearbeitet und ist Mitgründer von <a href="http://stackoverflow.com/" class="liexternal">StackOverfow</a>. Und er kann wirklich interessantes Zeug schreiben. Wenn ich sein Blog lese, merke ich, wie langweilig und trocken meine Blog-Posts manchmal doch sind. Allein schon durch seinen Schreibstil kann ich einiges lernen, denke ich.</p>
<p>Aber was kann man da nun eigentlich lesen? Viel. Hier mal ein Ausschnitt dessen, was ich in letzter Zeit von ihm gelesen hab: <span id="more-1024"></span></p>
<ul>
<li>Etwas, worüber ich bisher zu wenig gelesen hab, ist UI Design. Wie erstellt man eine wirklich benutzbare Schnittstelle? Eine die effizient ist, leicht zu lernen und Spaß macht zu benutzen. Ein bisschen was Grundlegendes kriegt man in der Uni beigebracht, aber da fehlt meiner Meinung nach noch einiges. Spolsky hat dazu was geschrieben und bisher hab ich auch nur einen Teil davon gelesen. Das, was ich bisher gelesen hab, ist jedenfalls empfehlenswert. Die Artikelserie beginnt mit &#8220;<a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html" class="liexternal">Controlling Your Environment Makes You Happy</a>&#8220;.</li>
<li>Über <a href="http://www.christian-rehn.de/2009/10/11/unicode-und-co/" title="Unicode &#038; Co" class="liinternal">Unicode und Co.</a> hatte ich ja auch schonmal was geschrieben. Und Spolsky tut das auch: <a href="http://www.joelonsoftware.com/articles/Unicode.html" class="liexternal">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)</a> Sein Artikel ist inhaltlich etwas oberflächlicher als meiner. Es macht aber trotzdem Spaß ihn zu lesen. Wahrscheinlich mehr als meinen.</li>
<li>Ich hab nicht vor, irgendwann mal ein &#8220;Manager&#8221; zu werden. Ich will lieber kreativ bleiben und Software entwickeln. Ob als &#8220;Programmierer&#8221;, &#8220;Architekt&#8221; oder &#8220;Mach-alles-Selber-Entwickler&#8221;, ob agil oder plangetrieben &#8212; das ist ne andere Frage. Ich hab auch so schöne Entwicklungsmöglichkeiten (Ich mag das Wort &#8220;Karriere&#8221; nicht. Ich entwickele nicht nur Software, ich entwickele <em>mich</em>; Das ist <acronym title='In My Humble Opinion - Meiner bescheidenen Meinung nach'>IMHO</acronym> die schönere Sichtweise.) Was ich damit sagen will: Ich hab nicht vor, der Technik den Rücken zuzukehren und Manager-Kram interessiert mich nicht sonderlich. Spolsky schafft es aber trotzdem, über solche Themen so zu schreiben, dass auch ich sie interessant finde. Beispiel: <a href="http://www.joelonsoftware.com/articles/DevelopmentAbstraction.html" class="liexternal">The Development Abstraction Layer</a>.</li>
<li>Wie man ein Büro auch planen kann: <a href="http://www.joelonsoftware.com/articles/BionicOffice.html" class="liexternal">Bionic Office</a></li>
<li>Kann sich irgendjemand vorstellen, warum man sich ernsthaft(!) seinen eigenen C-Compiler schreiben sollte? Kann sich irgendjemand vorstellen, dass das Excel-Team bei Microsoft einen eigenen C-Compiler hatte? Kann sich irgendjemand vorstellen, warum das *keine* absolut bescheuerte Idee ist? Joel Spolsy kann es: <a href="http://www.joelonsoftware.com/articles/fog0000000007.html" class="liexternal">In Defense of Not-Invented-Here Syndrome</a></li>
</ul>
<p>Ich hab noch ein paar Texte, die ich empfehlen möchte. Aber dazu gibts wohl separate Blog-Posts von mir, weil Spolsky so viel darin sagt oder mich so zum Nachdenken anregt, dass ich da noch mehr drüber erzählen will.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/03/01/joel-on-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Star Wreck</title>
		<link>http://www.christian-rehn.de/2012/02/22/star-wreck/</link>
		<comments>http://www.christian-rehn.de/2012/02/22/star-wreck/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 20:40:59 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Anderes]]></category>
		<category><![CDATA[Das Netz]]></category>
		<category><![CDATA[Filme]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1021</guid>
		<description><![CDATA[Fanfilme gibt es im Netz massenweise. Die meisten sind &#8212; objektiv betrachtet &#8212; schlecht. Andere sind sehr schlecht. Betrachtet man die Rahmenbedingungen sind manche davon vielleicht gut gemacht, aber gut ist etwas anderes. Eine rühmliche Ausnahme, die wahrscheinlich schon jeder außer mir kennt, aber über die ich trotzdem mal was schreiben will, ist Star Wreck. [...]]]></description>
			<content:encoded><![CDATA[<p>Fanfilme gibt es im Netz massenweise. Die meisten sind &#8212; objektiv betrachtet &#8212; schlecht. Andere sind sehr schlecht. Betrachtet man die Rahmenbedingungen sind manche davon vielleicht gut gemacht, aber gut ist etwas anderes.</p>
<p>Eine rühmliche Ausnahme, die wahrscheinlich schon jeder außer mir kennt, aber über die ich trotzdem mal was schreiben will, ist <a href="http://de.wikipedia.org/wiki/Star_Wreck" rel="nofollow" class="liwikipedia">Star Wreck</a>. Wie unschwer am Titel zu erkennen ist, handelt es sich um eine Star-Trek-Parodie. Genau genommen um mehrere.</p>
<p>Angefangen hat alles nämlich schon 1992 mit <del>einem Fanfilm</del> einer Fan-Animation, ohne wirkliche Handlung und ohne alles, was irgendwie erwähnenswert wäre. Die folgenden Filme hatten zumindest mal pixelige Animationen, die Personen zeigen. Die letzten haben dann aber wirklich menschliche Schauspieler, eine Handlung, Spezialeffekte etc. Insbesondere &#8220;Star Wreck: In the Pirkinning&#8221; <span id="more-1021"></span> ist wirklich aufwändig gemacht und hat wohl auch einiges an Geld gekostet. Die schauspielerische Leistung ist akzeptabel (was bei Fanfilmen ne große Ausnahme ist), Sound und Effekte wirklich gut und die Story ist auch OK. </p>
<p>Man darf natürlich nicht zu viel erwarten, aber insbesondere, wenn man die ersten &#8220;Filme&#8221; gesehen hat (sind ja meist recht kurz), sieht man wie enorm sich die Qualität verbessert hat. Ich könnte jetzt auch bei &#8220;In the Pirkinning&#8221; anfangen rumzunörgeln, könnte beklagen, dass der Plot vorhersehbar ist, etc. Aber dennoch: Mir hat der Film gefallen und ich finde ihn sehenswert.</p>
<p>Die Filme stehen unter einer Creative-Commons-Lizenz und können hier runtergeladen werden: http://lame.lut.fi/starwreck/<br />
Die offizielle Seite ist diese hier: http://www.starwreck.com/</p>
<p>Die Filme sind auf Finnisch gedreht und haben englische Untertitel. Für &#8220;In the Pirkinning&#8221; gibts auch deutsche. Dabei ist mir aufgefallen, wie viel schöner es eigentlich ist, wenn man die Sprache versteht, die da gesprochen wird. Untertitel sind zwar schön und gut, aber man ist immer aufs Lesen fokussiert und kann nur mit nem halben Auge sehen, was passiert. Englisch würde ich ja noch verstehen, aber Finnisch kann ich leider nicht. </p>
<p>Wir können uns hier in Deutschland also noch glücklich schätzen, dass bei uns die Filme i.d.R. synchronisiert werden. In anderen Ländern ist das oft ja nicht der Fall. Da gibts nur Untertitel. Ich glaube, ich bin also froh, dass ich, wenn ich im Kino sitze, keine Untertitel lesen muss&#8230;</p>
<p>Nochmal kurz zurück zu Star Wreck: Die Macher haben mittlerweile einen weiteren Film gemacht. <a href="http://de.wikipedia.org/wiki/Iron_Sky" rel="nofollow" class="liwikipedia">Iron Sky</a> ist wohl schon recht bekannt, wurde auf der Berlinale gezeigt und läuft ab April im Kino. Ich glaube, den guck ich mir an.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/02/22/star-wreck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Von unproduktivem Arbeiten, schlechtem Code, Astronauten und Klebeband</title>
		<link>http://www.christian-rehn.de/2012/02/22/von-unproduktivem-arbeiten-schlechtem-code-astronauten-und-klebeband/</link>
		<comments>http://www.christian-rehn.de/2012/02/22/von-unproduktivem-arbeiten-schlechtem-code-astronauten-und-klebeband/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 10:50:04 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[Lesbarkeit]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[worse is better]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1016</guid>
		<description><![CDATA[In diesem Blog-Post will ich mich darüber auslassen&#8230; &#8230; warum unproduktives Arbeiten manchmal gut ist. &#8230; warum schlechter Code manchmal gut ist. &#8230; was Astronauten und Klebeband nicht gemeinsam haben. Warum unproduktives Arbeiten manchmal gut ist Code muss wartbar sein. Wenn ein Stück Code nicht wartbar ist, ist die Wahrscheinlichkeit hoch, dass mir das später [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem Blog-Post will ich mich darüber auslassen&#8230;</p>
<ul>
<li>&#8230; warum unproduktives Arbeiten manchmal gut ist.</li>
<li>&#8230; warum schlechter Code manchmal gut ist.</li>
<li>&#8230; was Astronauten und Klebeband nicht gemeinsam haben.</li>
</ul>
<p><span id="more-1016"></span></p>
<h3>Warum unproduktives Arbeiten manchmal gut ist</h3>
<p>Code muss wartbar sein. Wenn ein Stück Code nicht wartbar ist, ist die Wahrscheinlichkeit hoch, dass mir das später Probleme bereiten wird. Fast alles, was man so schreibt, muss man später nochmal anfassen, es ändern, erweitern und vielleicht auch wiederverwenden. Und da mir noch niemand über den Weg gelaufen ist, der behaupten konnte, bug-freien Code zu schreiben (selbst Knuth soll ja <a href="http://en.wikipedia.org/wiki/Knuth_reward_check" rel="nofollow" class="liwikipedia">Fehler gemacht haben</a>), ist jedes Stück Code ein potentieller Kandidat für &#8220;Wartungsarbeiten&#8221;. Deshalb interessiere ich mich dafür, wie man Code wartbar machen kann. Wenn man wartbaren Code schreiben kann, kann man sich nervige Nacharbeiten ersparen &#8212; nicht alle, aber doch einige.</p>
<p>Mir macht es Spaß, Code anzugucken und mich zu fragen, ob man das hätte besser machen können. Entsprechende Diskussionen findet man zu Hauf im Forum. Gerade letztens wieder: <a href="http://forum.delphi-treff.de/showthread.php?31322-Implementation-des-SML-Protokolls" class="lidt">eine Diskussion über 7 Tage und 27 Beiträge</a>, die letztendlich nur zu kleinen Verbesserungen geführt hat. Man kann auch 48-Forenbeiträge darauf verwenden, <a href="http://forum.delphi-treff.de/showthread.php?24443-Algorithmen-Lottozahlen-generieren/page5" class="lidt">einen Lottozahlen-Code zu diskutieren</a>. Ich hab auch keine Probleme damit, eine Viertelstunde über eine Zeile Code zu grübeln und zu überlegen, wie man diese am lesbarsten gestaltet.</p>
<p>Das ist *extrem* unproduktiv. In einem realen Kontext, bei dem es wirklich darum geht, in vorgegebener Zeit eine Software zu schreiben, wäre so etwas absolut unwirtschaftlich. Code, den ich unter realen Bedingungen erstellte, ist also längst nicht so bis aufs Kleinste herausgeputzt, wie man das bei meiner Leidenschaft für Codeästhetik vermuten mag. Wenn es &#8220;ernst wird&#8221;, hab ich schlicht und einfach keine Zeit, ne Viertelstunde über eine Zeile Code nachzudenken, um dadurch ein halbes Jahr später bei irgendwelchen Wartungsarbeiten zwei Sekunden zu sparen. Denn mal ehrlich: So viel schlechter lesbar war die alternative Schreibweise der Zeile nun auch wieder nicht. Lesbarkeit ist zwar wichtig, übertriebener Fokus auf Lesbarkeit ist aber unwirtschaftlich.</p>
<p>Wenn ich aber die Chance dazu habe, bin ich auch gerne unwirtschaftlich. Das kann ich im Studium machen (wobei da auch nur begrenzt) oder im Forum. Und bei dem, was ich so für mich aus Spaß an der Freude schreibe. Dabei ist das nicht nur Spinnerei: Ich lerne daraus. Und ich merke immer wieder, dass ich immer noch mehr dazu lernen kann. Und das hilft dann auch in den realen Kontexten, bei denen man keine Zeit hat, ewig über eine einzige Zeile zu philosophieren.</p>
<p>Wer also lernen will, lesbaren und wartbaren Code zu schreiben, dem kann ich also nur raten, unproduktiv zu sein.</p>
<h3>Warum schlechter Code manchmal gut ist</h3>
<p>Wenn man also wirklich Software schreibt &#8212; im Beruf oder auch nur für die Uni &#8212; ist man manchmal gezwungen, schlechten Code zu schreiben. Wenn die Uhr tickt, programmiert es sich anders als, wenn man das nur aus Spaß an der Freude macht. Und manchmal wird man da ein gewisses ungutes Gefühl nicht los. Der Code scheint irgendwie &#8220;unvollkommen&#8221; zu sein. Ich denke, das Gefühl bewahrt einen davor, schlimme Fehler zu begehen, von daher ist es gut, das es da ist. Aber das ist nur die eine Seite&#8230;</p>
<p>Joel Spolsky beschreibt in <a href="http://www.joelonsoftware.com/articles/fog0000000069.html" class="liexternal">Things You Should Never Do, Part I</a> genau so eine Situation. Man sagt ja oft, dass man, wenn man etwas fertig gestellt hat, am besten nochmal alles wegwirft und neu anfängt, weil man dann weiß, wie es richtig geht und die ganzen blöden Fehler nicht mehr macht. Ich hab das bisweilen auch schon behauptet. Spolsky zeigt auf, dass gerade das ein blöder Fehler wäre. Dabei gibt er folgendes Beispiel:</p>
<blockquote><p>
[Y]ou can ask almost any programmer today about the code they are working on. &#8220;It&#8217;s a big hairy mess,&#8221; they will tell you. &#8220;I&#8217;d like nothing better than to throw it out and start over.&#8221;</p>
<p>Why is it a mess?</p>
<p>&#8220;Well,&#8221; they say, &#8220;look at this function. It is two pages long! None of this stuff belongs in there! I don&#8217;t know what half of these <acronym title='Application Programming Interface'>API</acronym> calls are for.&#8221;</p>
<p>[...]</p>
<p>Back to that two page function. Yes, I know, it&#8217;s just a simple function to display a window, but it has grown little hairs and stuff on it and nobody knows why. Well, I&#8217;ll tell you why: those are bug fixes. One of them fixes that bug that Nancy had when she tried to install the thing on a computer that didn&#8217;t have Internet Explorer. Another one fixes that bug that occurs in low memory conditions. Another one fixes that bug that occurred when the file is on a floppy disk and the user yanks out the disk in the middle. That LoadLibrary call is ugly but it makes the code work on old versions of Windows 95.
</p></blockquote>
<p>Ich fand das wirklich&#8230; erhellend. Natürlich ist das nicht immer so. Manchmal ist Code wirklich&#8230; verbesserungswürdig. Aber im Grunde genommen hat Spolsky wohl recht. Echter Code in echter Software, die wirklich benutzt wird, ist manchmal doch etwas anders, als die schönen kleinen Lehrbeispiele aus der Uni. Solche &#8220;Bugfixes&#8221; gibt es überall. Und so hab ich das bisher noch gar nicht gesehen. Ich kann Spolskys Text (nicht nur diesen, sondern auch diverse andere von ihm) also nur wärmstens empfehlen. Es ist gut, manchmal die Dinge auch aus einem anderen Blickwinkel zu sehen.</p>
<p>Auf der anderen Seite wäre es natürlich gut, wenn die Bugfixes den Code nicht unnötig unleserlich machen würden. Mit ein paar Kommentaren im Code und am besten noch einem automatisierten Test pro gefixtem Bug, könnte man wohl die Lesbarkeit entsprechend verbessern und das Vertrauen der Entwickler in die Qualität des Codes erhöhen. Wenn man direkt sieht, warum die ganzen <acronym title='Application Programming Interface'>API</acronym>-Calls nun notwendig sind, tut man sich mit späteren weiteren Bugfixes leichter, man macht weniger kaputt und hat ne bessere Meinung vom Code (und ist damit wohl auch motivierter bei der Arbeit).</p>
<p>Aber Spolsky will noch auf etwas anderes hinaus:</p>
<p>Manchmal wurde es tatsächlich gemacht: Alles weggeworfen und neu angefangen. Und oft ist das nicht gut gegangen. Der verlinkte Artikel nennt mehrere Beispiele. Man verliert viel, wenn man wirklich alles wegwirft. Und man braucht sehr viel Zeit, das alles wieder aufzuholen. Zeit, die in einem marktwirtschaftlichen Umfeld tödlich sein kann. Auch das hab ich bisher noch nicht so bedacht. Zumindest nicht so genau wie Spolsky.</p>
<p>Vielleicht gibt es manchmal wirklich keinen besseren Weg als alles neu zu machen, aber das besagte ungute Gefühl sollte uns eigentlich davor bewahren, dass es so weit kommt. Viel besser ist es, wenn man klein anfängt und langsam besser wird. &#8220;Klein&#8221; kann dabei heißen, nur 50% der angedachten Funktionalität zu haben und das auch noch bei inkonsistenten Interfaces und verbesserungswürdiger Architektur. Und durch Refactoring und stetige Verbesserung kommt man dann irgendwann da hin, wo man hin will.</p>
<p>Auf die Spitze getrieben nennt sich dieses Prinzip <a href="http://www.jwz.org/doc/worse-is-better.html" class="liexternal">worse is better</a>.</p>
<blockquote>
<ul>
<li>Simplicity-the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.</li>
<li>Correctness-the design must be correct in all observable aspects. It is slightly better to be simple than correct.</li>
<li>Consistency-the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.</li>
<li>Completeness-the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.</li>
</ul>
</blockquote>
<p>Irgendetwas in mir sträubt sich gegen diese Denkweise, aber man kann ihr einen gewissen Erfolg nicht absprechen. Ich finde gerade gut durchdachte Schnittstellen wichtig, weil sie helfen, Fehler zu vermeiden. Gerade was Reihenfolge von Parametern, Bezeichner und generelle Funktionsweise betrifft. Wenn ich mir aber ansehe, wie viele  schlechte oder zumindest verbesserungswürdige APIs es gibt, scheinen die doch einigen Erfolg zu haben. Ich bin aber trotzdem noch nicht davon überzeugt, dass &#8220;worse is better&#8221; als generelles Prinzip eine gute Idee ist. Aber zumindest erinnert es mich daran, dass schlechter manchmal doch besser sein kann.</p>
<h3>Was Astronauten und Klebeband nicht gemeinsam haben</h3>
<p>Das bringt mich zu zwei weiteren Artikeln, die ich bei joelonsoftware gelesen habe:</p>
<ul>
<li><a href="http://www.joelonsoftware.com/articles/fog0000000018.html" class="liexternal">Don&#8217;t Let Architecture Astronauts Scare You</a></li>
<li><a href="http://www.joelonsoftware.com/items/2009/09/23.html" class="liexternal">The Duct Tape Programmer</a></li>
</ul>
<p>Ich mag Architektur, Patterns, Objektorientierung und was man damit alles schönes tun kann. Leider habe ich deshalb auch manchmal die Tendenz zum Overengineering. Manchmal mache ich etwas unnötig kompliziert, weil es aus theoretischen Überlegungen heraus besser ist. Manchmal sind diese theoretischen Überlegungen in der Praxis aber weniger relevant. Spolsky nennt Leute, die solche Probleme haben &#8220;Architecture Astronauts&#8221;. </p>
<p>Ich weiß, dass ich das Problem hab und ich arbeite daran. Es hat sich auch schon deutlich gebessert, aber ganz zufrieden bin ich trotzdem noch nicht. Einfachheit ist wichtig. Wenn der Code einfach ist, lässt er sich auch leicht lesen und leicht ändern. Einfacher Code ist weniger anfällig für Bugs. Kraft meiner Arroganz hab ich mich sogar schon erdreistet, darüber Vorträge zu halten. Etwas verstanden zu haben (und demnach Vorträge drüber halten zu können) und etwas wirklich verinnerlicht zu haben sind aber zwei verschiedene Dinge. Ich kann also noch einiges dazu lernen und deshalb sollte ich mir den Satz von Tony Hoare, den ich so gerne zitiere, auch des öfteren mal vor Augen halten:</p>
<blockquote><p>
<cite>Tony Hoare</cite><br />
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. It demands the same skill, devotion, insight, and even inspiration as the discovery of the simple physical laws which underlie the complex phenomena of nature.
</p></blockquote>
<p>Die zweite Gruppe von Entwicklern, die Spolsky benennt (im Gegensatz zu ersteren aber lobt), sind die &#8220;Duct Tape Programmers&#8221;. Das sind die, die sich nicht um Objektorientierung, Vererbung, Architektur, Unittests und ähnliches stören, sondern lieber mit einfachen Mitteln (eben mit &#8220;Klebeband&#8221; wie Integers und Pointer) erstaunliche Dinge leisten können. Das Resultat mag nicht schön sein, aber es funktioniert und nach ein paar Iterationen wird der Code auch besser.</p>
<p>In einer Weise sind die &#8220;Duct Tape Programmers&#8221; also das genaue Gegenteil der &#8220;Architecture Astronauts&#8221;. Sie machen lieber alles zu Fuß und kümmern sich nicht um Frameworks, Architektur und Sauberkeit, sind dafür aber schnell und effektiv. Man könnte fast meinen, sie hätten im Sinne von Tony Hoare die Einfachheit zu ihrem Grundsatz erhoben, aber das stimmt auch nicht so ganz. Sie sind eher Anhänger von &#8220;worse is better&#8221;. Aber auch das stimmt nicht ganz. Spolsky schreibt dazu:</p>
<blockquote><p>
<cite>Joel Spolsky</cite><br />
They have to be good enough programmers to ship code, and we’ll forgive them if they never write a unit test, or if they xor the “next” and “prev” pointers of their linked list into a single DWORD to save 32 bits, because they’re pretty enough, and smart enough, to pull it off.
</p></blockquote>
<p>In meinen Augen haben &#8220;Duct Tape Programmers&#8221; das Problem, dass sie die Komplexität von der Architektur in den Code verlagern, anstatt sie zu reduzieren. Und ich weiß nicht, ob ich das generell für eine gute Idee halten soll. Ich will also eher nicht lernen, mit Klebeband zu programmieren. Viel eher will ich lernen, einfachen, geradezu langweiligen Code zu schreiben. Langweiliger Code ist leicht zu verstehen und man kann sich dann besser auf die Stellen konzentrieren, die nicht langweilig sein können, weil sie echte Komplexität enthalten, die sich nicht einfach reduzieren lässt. Lieber den Code klar und sauber schreiben und dafür die ganzen tollen Features [1], mit denen man eigentlich so schön hätte angeben können, nur dann nutzen, wenn sie wirklich nötig sind. Das ist nicht leicht, aber das ist es, was ich lernen will.</p>
<p>[1] mögen es nun Architektur-Tricks, Patterns oder Pointerspielereien sein</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/02/22/von-unproduktivem-arbeiten-schlechtem-code-astronauten-und-klebeband/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gefangen, nicht gefunden! #21</title>
		<link>http://www.christian-rehn.de/2012/02/13/gefangen-nicht-gefunden-21/</link>
		<comments>http://www.christian-rehn.de/2012/02/13/gefangen-nicht-gefunden-21/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 10:11:00 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Gefangen, nicht gefunden!]]></category>
		<category><![CDATA[ALM]]></category>
		<category><![CDATA[Joel Spolsky]]></category>
		<category><![CDATA[Kryptographie]]></category>
		<category><![CDATA[Qualität]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=980</guid>
		<description><![CDATA[Informatik Wer ein paar kryptographische Grundlagen leicht verständlich und ohne viel Mathe erklärt kriegen möchte, kann sich mal bei Isotopp vorbeigucken. Wer die einschlägigen Vorlesungen gehört hat, wird da zwar nicht viel Neues erfahren, für den Rest sollte es aber sehr lesenswert sein. Alle Welt beklagt sich über Bananensoftware &#8212; und nicht ganz zu unrecht. [...]]]></description>
			<content:encoded><![CDATA[<h3>Informatik</h3>
<ul>
<li>Wer ein paar kryptographische Grundlagen leicht verständlich und ohne viel Mathe erklärt kriegen möchte, kann sich mal <a href="http://blog.koehntopp.de/archives/3081-Einige-kryptographische-Grundlagen.html" class="liexternal">bei Isotopp vorbeigucken</a>. Wer die einschlägigen Vorlesungen gehört hat, wird da zwar nicht viel Neues erfahren, für den Rest sollte es aber sehr lesenswert sein.</li>
<li>Alle Welt beklagt sich über <a href="http://de.wikipedia.org/wiki/Bananensoftware" rel="nofollow" class="liwikipedia">Bananensoftware</a> &#8212; und nicht ganz zu unrecht. Meist geht es dabei um ungewollt schlechte Qualität. Man kann sowas aber auch absichtlich machen: <a href="http://blog.koehntopp.de/archives/3164-Testing-in-Production.html" class="liexternal">Testing in Production</a>. Ich denke aber, man sollte mit sowas sehr vorsichtig umgehen.</li>
<li>Ein interessantes Testkonzept für verteilte Systeme: <a href="http://www.codinghorror.com/blog/2011/04/working-with-the-chaos-monkey.html" class="liexternal">Chaos Monkey</a> &#8212; ein Prozess, der willkürlich irgendwelche Systemkomponenten killt.</li>
<li>Drei Buchstaben, die (aus firmenpolitischen Gründen) in der Delphi-Welt unbeliebt sind, (aus welchen Gründen auch immer) in der Uni kaum vorkommen, aber dennoch praxisrelevant sind: <a href="http://en.wikipedia.org/wiki/Application_lifecycle_management" rel="nofollow" class="liwikipedia">ALM</a>. Heise Developer hat interessante Artikel dazu. So kriegt man zumindest mal nen groben Überblick:
<ul>
<li><a href="http://www.heise.de/developer/artikel/ALM-Prognosen-1-Open-Source-Tools-gewinnen-weiterhin-Marktanteile-1413029.html/from/related" class="liexternal">ALM-Prognosen #1: Open-Source-Tools gewinnen weiterhin Marktanteile</a></li>
<li><a href="http://www.heise.de/developer/artikel/ALM-Prognosen-2-ALM-aus-einer-Hand-stirbt-aus-1430689.html" class="liexternal">ALM-Prognosen #2: ALM aus einer Hand stirbt aus</a></li>
</ul>
</li>
<li>Darüber wollte ich eigentlich nen ganzen Blogpost verfassen. Da ich aber momentan mit Prüfungsvorbereitungen beschäftigt bin, komme ich nicht so schnell dazu, wie ich das gerne wollte. Deshalb hier erstmal nur der Link: <a href="http://www.heise.de/developer/artikel/Hommage-a-Tim-Toady-1428214.html" class="liexternal">TIMTOWTDI</a></li>
<li>Und weil wir grad dabei sind: Noch ein Artikel von Heise Developer: <a href="http://www.heise.de/developer/meldung/Studie-Nachholbedarf-bei-Software-Qualitaetssicherung-1430907.html" class="liexternal">Studie: Nachholbedarf bei Software-Qualitätssicherung</a>. Titel und Artikel sagen zwar kaum was anderes, als das, was man eh schon weiß, aber insbesondere die Diskussionen in den Kommentaren sind lesenswert, um einen Eindruck von der Situation und den unterschiedlichen Meinungen Thema zu kriegen.</li>
<li><a href="http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html" class="liexternal">Warum User keine Dialoge lesen. Und schon gar keine Handbücher.</a> Sehr lesenswerter Artikel über Usability.</li>
</ul>
<h3>Anderes</h3>
<ul>
<li>Irgendwie denk ich da nie dran, was unter &#8220;Anderes&#8221; zu bloggen. Die Fachthemen kommen meist aus meinem RSS-Reader oder offenen Tabs im Browser. Das lässt sich leicht rekonstruieren. Mal sehen, ob ich es schaffe, hier öfter auch mal über anderes zu reden&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/02/13/gefangen-nicht-gefunden-21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restklassenringe</title>
		<link>http://www.christian-rehn.de/2012/01/17/restklassenringe/</link>
		<comments>http://www.christian-rehn.de/2012/01/17/restklassenringe/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 21:45:46 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Kryptographie]]></category>
		<category><![CDATA[Mathe]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=1002</guid>
		<description><![CDATA[Im ersten Semester lernt man im Informatikstudium Restklassenringe kennen. Diese bilden die mathematische Basis für diverse Kryptographie (beispielsweise RSA), aber auch anderes Zeug wie CRC. Gestern hatte ich im Forum mal ne oberflächliche Einführung in das Thema gegeben. Und damit das nicht verloren geht, will ich das hier nochmal posten. Wer also kein Informatik studiert, [...]]]></description>
			<content:encoded><![CDATA[<p>Im ersten Semester lernt man im Informatikstudium Restklassenringe kennen. Diese bilden die mathematische Basis für diverse Kryptographie (beispielsweise <a href="http://de.wikipedia.org/wiki/RSA-Kryptosystem" rel="nofollow" class="liwikipedia">RSA</a>), aber auch anderes Zeug wie <a href="http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check" rel="nofollow" class="liwikipedia">CRC</a>. <a href="http://forum.delphi-treff.de/showthread.php?31218-1-mod-N&#038;p=225265&#038;viewfull=1#post225265" class="lidt">Gestern</a> hatte ich im Forum mal ne oberflächliche Einführung in das Thema gegeben. Und damit das nicht verloren geht, will ich das hier nochmal posten. Wer also kein Informatik studiert, aber aus welchen Gründen auch immer wissen will, was modulare Arithmetik ist und wie man in Restklassenringen rechnet, hier eine knappe Einführung. <span id="more-1002"></span></p>
<h3>Höhere Mathematik für programmierende Nicht-Akademiker &#8212; Heute: Restklassenringe</h3>
<h4>Grundlagen: Algebraische Strukturen</h4>
<p>In der Mathematik basiert alles auf Mengen (Mengenlehre, Schnittmenge, Teilmenge, Vereinigungsmenge und so). Mit den Elementen einer Menge kann man rechnen, d.h. es gibt verschiedene Operationen, die auf der Menge definiert sind.</p>
<p>Aus der Schule kennen wir die Menge der Reellen Zahlen: <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-a6e421454947c585b8fb5ae10299f873_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#82;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/>. Aus der Menge der Reellen Zahlen <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-a6e421454947c585b8fb5ae10299f873_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#82;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> machen wir eine algebraische Struktur, indem wir ihr Operationen spendieren: <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-d39e16378674f11e80b94f96840998ea_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#82;&#125;&#44;&#32;&#43;&#44;&#32;&#92;&#99;&#100;&#111;&#116;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/></p>
<p>Wendet man eine der Operationen auf ein Element der Menge an, erhält man als Ergebnis wieder ein Element der Menge. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b4b9de55a58b31ecf62b96650f553528_l3.png" class="ql-img-inline-formula" alt="&#50;&#43;&#51;&#32;&#61;&#32;&#53;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/> und <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-8a0860fa2a79839e8c6052cea0390a6c_l3.png" class="ql-img-inline-formula" alt="&#50;&#32;&#92;&#99;&#100;&#111;&#116;&#32;&#51;&#32;&#61;&#32;&#54;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> (5 und 6 sind wieder reelle Zahlen). Das nennt man Abgeschlossenheit.</p>
<p>Es gibt verschiedene Arten von algebraischen Strukturen für die jeweils andere Anforderungen gelten. So gibt es beispielsweise Gruppen, Ringe und Körper. Die Unterschiede sind hier erstmal nicht weiter wichtig.</p>
<h4>Beispiel</h4>
<p>Man kann nicht nur mit den Reellen Zahlen rechnen, sondern beispielsweise auch mit Natürlichen Zahlen (<img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-bc8e16cdad5408a0b540d2bc0098bcfb_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#78;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/>). Das haben wir in der Grundschule gelernt. Wir haben da erfahren, dass <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b37ec0173c89eafccc93899c81c56a61_l3.png" class="ql-img-inline-formula" alt="&#53;&#45;&#55;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> &#8220;nicht geht&#8221;. Später haben wir negative Zahlen kennen gelernt und auf einmal ging das doch. Trotzdem haben uns unsere Lehrer in der Grundschule nicht angelogen. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b37ec0173c89eafccc93899c81c56a61_l3.png" class="ql-img-inline-formula" alt="&#53;&#45;&#55;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> geht wirklich nicht &#8212; in der Halbgruppe <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-69a9b2b54926609b61c878264b524905_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#78;&#125;&#44;&#32;&#43;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/>.</p>
<p>In der Programmierung begegnen uns ständig solche algebraischen Strukturen. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-5c3faf943c52a2d069f6358a0e8c66d6_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#116;&#101;&#120;&#116;&#116;&#116;&#123;&#83;&#116;&#114;&#105;&#110;&#103;&#125;&#44;&#32;&#43;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/> ist z.B. auch eine Halbgruppe. Wir können Strings konkatenieren und erhalten wieder Strings (String ist abgeschlossen bezüglich der Operation <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-47d6b18a339be8f5213c6c01ed051045_l3.png" class="ql-img-inline-formula" alt="&#43;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/>) und <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-47d6b18a339be8f5213c6c01ed051045_l3.png" class="ql-img-inline-formula" alt="&#43;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/> ist assoziativ: <code class="codecolorer text mac-classic"><span class="text">('a' + 'b') + 'c' = 'a' + ('b' + 'c')</span></code>. Diese zwei Eigenschaften brauchen wir um <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-f3a14a102bd4e89944c317c67c8f689e_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#105;&#116;&#101;&#120;&#116;&#116;&#116;&#123;&#83;&#116;&#114;&#105;&#110;&#103;&#125;&#44;&#32;&#43;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/> Halbgruppe nennen zu können. Außerdem haben wir noch den Leerstring als neutrales Element. <code class="codecolorer text mac-classic"><span class="text">'a' + '' = 'a'</span></code>. Wir dürfen <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-5c3faf943c52a2d069f6358a0e8c66d6_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#116;&#101;&#120;&#116;&#116;&#116;&#123;&#83;&#116;&#114;&#105;&#110;&#103;&#125;&#44;&#32;&#43;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/> deshalb sogar einen &#8220;Monoid&#8221; nennen.</p>
<h4>Inverse Elemente</h4>
<p>Die Operationen <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-4d9521b52a5c0a70956f069f1dbcd50e_l3.png" class="ql-img-inline-formula" alt="&#45;" title="Rendered by QuickLaTeX.com" style="vertical-align: 4px;"/> und <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b3a8c7971ac58d360789cab357572369_l3.png" class="ql-img-inline-formula" alt="&#47;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/> haben wir oben nicht etwa vergessen. Sie ergeben sich quasi automatisch aus <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-47d6b18a339be8f5213c6c01ed051045_l3.png" class="ql-img-inline-formula" alt="&#43;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/> und <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-109d503c9f8a740d7eb085ef5842be2c_l3.png" class="ql-img-inline-formula" alt="&#92;&#99;&#100;&#111;&#116;" title="Rendered by QuickLaTeX.com" style="vertical-align: 3px;"/>. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-980b5c0aa5802ad18551249169497b0d_l3.png" class="ql-img-inline-formula" alt="&#55;&#32;&#45;&#32;&#53;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> ist nämlich nichts anderes als <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b000a0b9186dcd6a4d5efb55e79aa42f_l3.png" class="ql-img-inline-formula" alt="&#55;&#32;&#43;&#32;&#40;&#45;&#53;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/>, wobei <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-7b5b9d9f382b11767d19f257afca0019_l3.png" class="ql-img-inline-formula" alt="&#45;&#53;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> das inverse Element (bezüglich der Addition) von <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-8995e2084120c1c1f4b53f490d281bc4_l3.png" class="ql-img-inline-formula" alt="&#53;" title="Rendered by QuickLaTeX.com" style="vertical-align: 0px;"/> ist. Das inverse Element bezüglich der Multiplikation wäre <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-e174a73678f6bd6f70d7aaec8f911349_l3.png" class="ql-img-inline-formula" alt="&#92;&#102;&#114;&#97;&#99;&#123;&#49;&#125;&#123;&#53;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -6px;"/>, d.h. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-81e05a1c530c931c88aa57c297773b02_l3.png" class="ql-img-inline-formula" alt="&#48;&#44;&#50;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/>. Ein Element verknüpft mit seinem inversen ergibt immer das neurale Element (bezüglich der Operation). <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-9168b3d067e6cc1e95e61dbe9c474d91_l3.png" class="ql-img-inline-formula" alt="&#53;&#32;&#43;&#32;&#40;&#45;&#53;&#41;&#32;&#61;&#32;&#48;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/> (additiv inverses) <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-e28c1f31e552823b4c6f03f7df45d424_l3.png" class="ql-img-inline-formula" alt="&#53;&#32;&#92;&#99;&#100;&#111;&#116;&#32;&#48;&#44;&#50;&#32;&#61;&#32;&#49;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/> (multiplikativ inverses).</p>
<h4>Restklassenringe</h4>
<p>Ein Restklassenring ist eine algebraische Struktur, bei der die Menge Restklassen sind. Eine Restklasse ist z.B. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-304e8fdf1a19589a934c86bea03c985a_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#47;&#50;&#52;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/>. <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-304e8fdf1a19589a934c86bea03c985a_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#47;&#50;&#52;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/> hat genau <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-762747d84dc941b4e4b85f0d3d4eb09e_l3.png" class="ql-img-inline-formula" alt="&#50;&#52;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/> Elemente, nämlich die Zahlen 0 bis 23. Definiert man noch Addition und Multiplikation, erhält man einen Restklassenring: <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-b17b19616231fede5b25a5c5c5eb0162_l3.png" class="ql-img-inline-formula" alt="&#40;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#47;&#50;&#52;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#44;&#32;&#43;&#44;&#32;&#92;&#99;&#100;&#111;&#116;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/>.</p>
<p>In einem Restklassenring rechnet es sich in etwa so, wie mit Uhrzeiten. Nach 23 Uhr kommt wieder 0 Uhr:</p>
<p> 20 (Uhr) + 7 (Stunden) = 27 (Uhr) = 3 (Uhr)</p>
<p> oder mathematisch geschrieben:</p>
<p><img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-524ac816b85aabc0748c922c3a9a449b_l3.png" class="ql-img-inline-formula" alt="&#32;&#50;&#48;&#32;&#43;&#32;&#55;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;&#32;&#61;&#32;&#50;&#55;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;&#32;&#61;&#32;&#51;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/></p>
<p> Die Modulooperation gibt also an, in welchem Restklassenring du dich befindest. Hier in <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-304e8fdf1a19589a934c86bea03c985a_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#47;&#50;&#52;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/>. Alle &#8220;Zahlen&#8221; die den selben Rest beim Teilen durch 24 aufweisen sind in der selben Restklasse und damit &#8220;gleich&#8221;. Also:</p>
<p><img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-96eddb60c5806a9e29030b0dbe6dfdef_l3.png" class="ql-img-inline-formula" alt="&#50;&#55;&#32;&#61;&#32;&#51;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/></p>
<p> Um entsprechend einfacher rechnen zu können, benutzt du die Modulo-Operation und erhältst immer eine Zahl zwischen 0 und 23:</p>
<p><img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-db56b2c410e3ecad9f3435a0aa5a0b7e_l3.png" class="ql-img-inline-formula" alt="&#50;&#55;&#32;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#32;&#61;&#32;&#51;" title="Rendered by QuickLaTeX.com" style="vertical-align: -1px;"/></p>
<p> Genau so ist es mit den negativen Zahlen:</p>
<p> 0 (Uhr) &#8211; 1 (Stunde) = -1 (Uhr) = 23 Uhr</p>
<p> oder mathematisch:</p>
<p><img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-9044b28a7b4321f2d324426fb0c3850f_l3.png" class="ql-img-inline-formula" alt="&#48;&#32;&#45;&#32;&#49;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;&#32;&#61;&#32;&#45;&#49;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;&#32;&#61;&#32;&#50;&#51;&#32;&#40;&#92;&#109;&#111;&#100;&#32;&#50;&#52;&#41;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/></p>
<h4>Achtung</h4>
<p>Die Modulo-Operation ist nicht in jeder Programmiersprache gleich definiert. Manchmal entspricht sie der oben verwendeten mathematischen Definition, manchmal ist es anders. Will man in Restklassenringen rechnen, muss man das für negative Zahlen bedenken und ggf. Korrekturen vornehmen. http://en.wikipedia.org/wiki/Modulo_operation#Common_pitfalls</p>
<h4>Ausblick</h4>
<p>Alle Restklassenringe <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-4e21a346fe8d19cc344e5184c63d242c_l3.png" class="ql-img-inline-formula" alt="&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;&#47;&#112;&#92;&#109;&#97;&#116;&#104;&#98;&#98;&#123;&#90;&#125;" title="Rendered by QuickLaTeX.com" style="vertical-align: -5px;"/> mit einer Primzahl <img src="http://www.christian-rehn.de/wp-content/ql-cache/quicklatex.com-3bf85f1087e9fbed3a319341134ac1a2_l3.png" class="ql-img-inline-formula" alt="&#112;" title="Rendered by QuickLaTeX.com" style="vertical-align: -4px;"/>, sind nicht nur Ringe, sondern Körper, d.h. jedes Element hat ein multiplikatives inverses Element. Das ist in der Kryptographie wichtig und wird u.a. bei RSA verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2012/01/17/restklassenringe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie behandelt man eigentlich Akkus?</title>
		<link>http://www.christian-rehn.de/2011/12/14/wie-behandelt-man-eigentlich-akkus/</link>
		<comments>http://www.christian-rehn.de/2011/12/14/wie-behandelt-man-eigentlich-akkus/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 17:15:37 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Anderes]]></category>
		<category><![CDATA[Akkus]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=996</guid>
		<description><![CDATA[Die Frage hab ich mir grad letztens mal wieder gestellt. Man will ja die Lebensdauer seiner Akkus nicht unnötig verkürzen. Dass es den berüchtigten Memory-Effekt bei den aktuellen Lithium-Akkus nicht mehr gibt, ist ja mehr oder weniger bekannt. Was aber nun wirklich zu beachten ist, ist gar nicht so leicht heraus zu finden. Im Netz [...]]]></description>
			<content:encoded><![CDATA[<p>Die Frage hab ich mir grad letztens mal wieder gestellt. Man will ja die Lebensdauer seiner Akkus nicht unnötig verkürzen. Dass es den berüchtigten Memory-Effekt bei den aktuellen Lithium-Akkus nicht mehr gibt, ist ja mehr oder weniger bekannt. Was aber nun wirklich zu beachten ist, ist gar nicht so leicht heraus zu finden. Im Netz findet man teilweise widersprüchliche Informationen. Auch kann sich durch den technischen Fortschritt so einiges geändert haben (und so wie ich das sehe, hat es das auch). So findet man massig Material aus zweifelhaften Quellen und weiß hinterher nicht mehr so richtig, was man denken soll. Und weils so schön ist, spendiere ich dem Netz eine weitere fragwürdige Quelle. <img src='http://www.christian-rehn.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Hier erstmal zwei Links, die vielleicht ganz interessant sind:</p>
<ul>
<li><a href="http://www.tecchannel.de/pc_mobile/notebook/432097/akkus_notebook_lebensdauer_kapazitaet_ladezyklen_lithium_ionen_laufzeit/" class="liexternal">http://www.tecchannel.de/pc_mobile/notebook/432097/akkus_notebook_lebensdauer_kapazitaet_ladezyklen_lithium_ionen_laufzeit/</a></li>
<li><a href="http://de.wikipedia.org/wiki/Lithium-Ionen-Akkumulator#Hinweise_zum_Umgang_mit_Li-Ionen-Akkus" rel="nofollow" class="liwikipedia">http://de.wikipedia.org/wiki/Lithium-Ionen-Akkumulator#Hinweise_zum_Umgang_mit_Li-Ionen-Akkus</a></li>
</ul>
<p>Folgendes meine ich, herausgefunden zu haben: <span id="more-996"></span></p>
<ul>
<li>Die Ladeelektronik moderner Akkus verhindert das Überladen. Das ist auch sehr wichtig.</li>
<li>Ebenso verhindert die (Ent-)Ladeelektronik das Tiefentladen. Das heißt, dass der Verbraucher sich lieber vorher abschaltet bzw. die Akkuelektronik die Leistungsabnahme verweigert, bevor der Akku wegen Tiefentladung kaputt geht. Man kann da also fast nichts falsch machen.</li>
<li>Dieses &#8220;fast&#8221; bezieht sich auf die Lagerung. Ein Lithium-Akku hat eine Selbstentladungsrate von etwa 1-2% pro Monat. Ein fast leerer Akku kann sich also trotz der intelligentesten Elektronik bei langer Lagerung langsam weiter entladen (d.h. Tiefentladen werden) und damit Schaden nehmen.</li>
<li>Längere Zeit mit voller Spannung tut dem Akku wohl auch nicht gut (aufgrund irgendwelcher chemischer Degenerierungs-Prozesse, die durch die hohe Spannung begünstigt werden oder so).</li>
<li>Ähnliche oder andere lebensdauerverringernde Prozesse gibt es wohl auch irgendwie bei niedrigem Akkustand.</li>
<li>Man lagert einen Lithium-Akku also am besten in etwa halb-vollem Zustand. Ob &#8220;halb-voll&#8221; 40%, 50%, 60% oder 75% heißt, ist wohl strittig. Ich hab auch schon die Empfehlung gelesen, den Akku leer zu lagern. Diese Empfehlung kann ich aber nicht logisch nachvollziehen.</li>
<li>Ein weiterer limitierender Faktor ist die Zahl der Ladezyklen. Akkus verkraften nur eine endliche Zahl an Ladezyklen und gehen danach langsam kaputt. Das sind bei Lithium-Akkus so irgendwas zwischen 300 und 800 Zyklen.</li>
<li>Daraus ergibt sich, dass man je nach Nutzung an nem Akku hoffentlich mindestens ein Jahr Spaß haben sollte und Lebensdauern von mehr als eins-zwei Jahrzehnten utopisch sind.</li>
<li>Darüber, inwieweit sich halbe Ladezyklen anteilig anrechnen lassen, herrscht wohl irgendwie Uneinigkeit. Auch ist mir nicht ganz klar, ab welchem Ladezustand die unvorteilhaften Prozesse nun wirklich eine Rolle spielen. Ob man jetzt also besser regelmäßig von 50% auf 100%, von 10% auf 100%, von 50% auf 90% oder anders laden soll, ist mir immer noch unklar.</li>
<li>Mini-Ladezyklen, wie sie z.B. auftreten können, wenn man ein Notebook ständig am Netz betreibt ohne den Akku zu entfernen, sind wohl eher weniger gut.</li>
<li>Ein weiterer wichtiger Punkt ist die Temperatur. Die ideale Betriebstemperatur liegt wohl zwischen 20 und 40°C. Das ist für Handys ziemlich problemlos, bei Notebooks aber nur selten erreichbar. Auch das ist wohl der Gesundheit der Akkus abträglich. Und natürlich sollte man Akkus (Handys&#8230;) nicht nachts im kalten Auto lassen (oder im Sommer im heißen Auto).</li>
<li>Über Lagertemperatur liest man unterschiedliches. Von Kühlschrank bis Zimmertemperatur.</li>
<li>Lithium-Akku ist nicht gleich Lithium-Akku. Es können unterschiedliche Materialien verwendet werden und diese können auch noch in unterschiedlicher Qualität verarbeitet sein und von unterschiedlicher Reinheit sind. Und das hat wohl einen bedeutenden Effekt auf die Lebensdauer. Und man sieht das den Akkus nicht an.</li>
<li>Lithium-Polymer-Akkus haben eine höhere Energiedichte (sind also bei gleicher Kapazität kompakter und eignen sich deshalb besonders für Mobilgeräte. Allerdings verkraften sie etwas weniger Ladezyklen als &#8220;normale&#8221; Lithium-Ion-Akkus.</li>
<li>Zudem ist die Leistungsabnahme des Gerätes bzw. die Dimensionierung des verwendeten Akkus entscheidend für die Akkulebensdauer. Unterdimensionierte Akkus altern auch schneller.</li>
<li>Alles in Allem ist eine gewisse Alterung also gar nicht zu vermeiden. Da Akkus vor dem Kauf u.U. ja auch noch ne Zeit lang gelagert werden und der Alterungsprozess da natürlich auch schon läuft, muss man hoffen, dass man keine allzu alten Akkus kauft. Das Herstellungsdatum steht da nur sehr selten drauf.</li>
<li>Aufgrund der generellen Alterung macht es also wohl auch wenig Sinn, gleich ein Ersatzakku mit dem Gerät mitzukaufen. Außer vielleicht man benutzt beide Akkus alternierend.</li>
</ul>
<p>Mein Fazit:</p>
<ul>
<li>Ich werde Akkus in halb-vollem Zustand bei Zimmertemperatur lagern und alle zwei, drei Monate den Akku ggf. wieder auf halb-voll bringen.</li>
<li>Als Kompromisslösung versuche ich Akkus von 25 auf 100% zu laden.</li>
<li>Bei längerem Netzbetrieb werde ich den Akku entfernen und wie oben beschrieben &#8220;lagern&#8221;.</li>
<li>Ich gehe mal davon aus, dass unter realen Bedingungen ein häufig genutzter Akku auch bei guter Pflege nicht viel länger als 3-4 Jahre hält.</li>
</ul>
<p>So richtig sicher bin ich mir aber irgendwie immer noch nicht, ob das das Richtige ist. Ich könnte natürlich beim jeweiligen Hersteller nachfragen. Ob ich da aber jemanden kriege, der a) Ahnung hat (und nicht nur einen 08-15-geschulten Support-Mitarbeiter) und mir b) auch die ungeschönte Wahrheit erzählen will, ist fraglich. Bis auf weiteres werde ich also wohl meinem gepflegten Halbwissen vertrauen müssen&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2011/12/14/wie-behandelt-man-eigentlich-akkus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Daemon&#8221; und &#8220;Darknet&#8221;</title>
		<link>http://www.christian-rehn.de/2011/12/12/daemon-und-darknet/</link>
		<comments>http://www.christian-rehn.de/2011/12/12/daemon-und-darknet/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 16:50:47 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Anderes]]></category>
		<category><![CDATA[Bücher]]></category>

		<guid isPermaLink="false">http://www.christian-rehn.de/?p=992</guid>
		<description><![CDATA[&#8220;Wie ich sehe, sind Sie mit den Mordfällen Pavlos und Singh befasst. Um Ihnen unnötigen Aufwand zu ersparen, sage ich Ihnen: Ich habe beide getötet. Warum, werden Sie bald erfahren. Allerdings haben Sie ein Problem. Sie können mich nicht verhaften. Sie können mich nicht aufhalten. Denn ich bin tot.&#8221; Vor einiger Zeit habe ich Neuromancer [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
&#8220;Wie ich sehe, sind Sie mit den Mordfällen Pavlos und Singh befasst. Um Ihnen unnötigen Aufwand zu ersparen, sage ich Ihnen: Ich habe beide getötet. Warum, werden Sie bald erfahren. Allerdings haben Sie ein Problem. Sie können mich nicht verhaften. Sie können mich nicht aufhalten. Denn ich bin tot.&#8221;
</p></blockquote>
<p>Vor einiger Zeit habe ich <a href="http://de.wikipedia.org/wiki/Neuromancer" rel="nofollow" class="liwikipedia">Neuromancer</a> von William Gibson gelesen. Ein bekanntes, viel gelobtes Buch. Und um ehrlich zu sein, war ich enttäuscht. Mal davon abgesehen, dass es manchmal unnötig schwer zu verstehen ist und wirr erscheint (insbesondere am Anfang; wird später besser; so richtig in Fahrt kommt die Geschichte aber nie), ist dort alles, was Technik betrifft&#8230; merkwürdig bzw. unrealistisch. Gut, das Buch stammt aus den 80er Jahren, aber dennoch: Mir hat das Buch nicht sonderlich gefallen udn so hab ich die beiden Folgebände gar nicht erst gelesen.</p>
<p>Ganz anders ist es mit dem, was ich jetzt gelsen habe: <a href="http://de.wikipedia.org/wiki/Daniel_Suarez" rel="nofollow" class="liwikipedia">Daemon und Darknet von Daniel Suarez</a>. Suarez ist Softwareentwickler und das merkt man. Technisch gesehen hat das, was er schreibt, im Großen und Ganzen Hand und Fuß. Und für einen Informatik-Studenten ist es ausgesprochen angenehm, wenn man einen Roman liest, in dem Begriffe wie &#8220;IP-Adresse&#8221;, &#8220;Formatstring-Hack&#8221; und &#8220;Quellcode&#8221; in einem technisch nachvollziehbaren Zusammenhang stehen. Man kann die Bücher auch lesen ohne diese Begriffe zu verstenen. Wenn man sie aber kennt und sieht, dass sie richtig verwendet werden, ist der Roman nochmal so gut. Auch die deutsche Übersetzung macht das nicht kaputt (im Gegensatz zu Fachliteratur lese ich Romane lieber in der deutschen Übersetzung). Es gibt zwar ein paar Stellen, bei denen ich vermute, dass die Übersetzung etwas Merkwürdiges gemacht hat. Das ist eindeutig im Rahmen und tut dem Lesegenuss keinen Abbruch.</p>
<p>Nun, worum gehts? Matthew Sobol ist Chef einer großen Computerspielefirma. Und er ist totsterbenskrank. Er leidet an einer Krankheit, an der er langsam aber sicher stirbt. Kurz nachdem aber die Meldung über seinen Tod durch die Medien geht, geschehen merkwürdige Dinge. Der Daemon, eine verteilte KI, die Sobol auf Basis seiner Computerspiele entwickelt hat, erwacht zum Leben und verfolgt düstere Pläne. Der Daemon wirbt Leute an, begeht Morde und infiltriert Firmennetze. Der Daemon übernimmt die Welt. Und gewisse Leute versuchen das zu verhindern.</p>
<p>Das hört sich ziemlich nach schwarz/weiß-Malerei mit vorhersehbarem Plot an, aber genau das ist es nicht. überhaupt nicht. Diverse <a href="http://de.wikipedia.org/wiki/Plot_point" rel="nofollow" class="liwikipedia">Plot Points</a> erzeugen nicht nur Spannung, sondern weichen auch die zu Anfang scheinbar noch herrschende schwarz/weiß- bzw. gut/böse-Trennung auf.</p>
<p>Wie von einem Thriller kaum anders zu erwarten, gehen massenweise Autos kaputt und an Toten mangelt es auch nicht. Und wie von Science-Fiction zu erwarten gibt es immer mal wieder (oder andauernd) Technik die so (noch) nicht existiert. Aber Daemon ist mehr als nur ein Thriller mit starkem Technikanteil. Manche Teile lesen sich wie ein Computerspiel, andere sind in hohem Maße gesellschaftskritisch. Es ist ein intelligenter Roman, der nachdenklich stimmt. Gerade auch, weil er sehr real wirkt. Viel tennt uns nicht von der Welt des Romans &#8212; sowohl gesellschaftlich als auch technologisch.</p>
<p>Ich könnte jetzt noch in den Krümeln suchen. Ich könnte erklären, was technisch so nicht funktioniert (z.B. das Portieren einer Computerspiel-Auto-KI auf ein richtiges Auto) und warum die Features des Daemon übertrieben gut sind und kaum Bugs zu haben scheint. Oder ich könnte mich fragen, warum sich ein hochgradig verteiltes System zumindest an einer Stelle (kurz vor Schluss) wie ein zentralisiertes zu verhalten scheint. Ich könnte auch aufzählen, welche Kleinigkeiten man meiner Meinung nach an der Geschichte verbessern könnte. Das würde dem Roman aber nicht gerecht. Im Vergleich zu dem, was andere Romanschreiber fabrizieren, ist das lächerlicher Kleinkram. &#8220;Daemon&#8221; ist ein guter Roman. Die Geschichte erschafft im wahrsten Sinne des Wortes eine eigene Welt; sie ist spannend, gut erzählt und regt sogar zum Nachdenken an. </p>
<p>Kurz: Ein intelligenter Roman, der mir viel Spaß gemacht hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christian-rehn.de/2011/12/12/daemon-und-darknet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

