<?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>Mumpitz! &#187; IT</title>
	<atom:link href="http://www.p-shuttle.de/joh/category/it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.p-shuttle.de/joh</link>
	<description>rief die Katze und sprang aus dem Sack.</description>
	<lastBuildDate>Wed, 25 Feb 2009 01:36:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>STYLE!</title>
		<link>http://www.p-shuttle.de/joh/2009/01/11/style/</link>
		<comments>http://www.p-shuttle.de/joh/2009/01/11/style/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 17:03:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Coding style]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[stil]]></category>
		<category><![CDATA[ungarische notation]]></category>

		<guid isPermaLink="false">http://www.p-shuttle.de/joh/?p=171</guid>
		<description><![CDATA[Ich muss ja sagen dass ich codetechnisch ein sehr aufgeräumter Mensch bin.
Was wahrscheinlich daran liegt dass ich hauptsächlich in C++ programmiere und unsauberer oder undurchgängiger Stil dort unglaublich schnell die Lesbarkeit beeinträchtigt.
Aus gegebenem Anlass (mein Projekt wird immer größer) möchte ich nochmal betonen wie wichtig es für jeden Programmierer es ist sich eine praktikable Variante [...]]]></description>
			<content:encoded><![CDATA[<p>Ich muss ja sagen dass ich codetechnisch ein sehr aufgeräumter Mensch bin.<br />
Was wahrscheinlich daran liegt dass ich hauptsächlich in C++ programmiere und unsauberer oder undurchgängiger Stil dort unglaublich schnell die Lesbarkeit beeinträchtigt.</p>
<p>Aus gegebenem Anlass (mein Projekt wird immer größer) möchte ich nochmal betonen wie wichtig es für jeden Programmierer es ist sich eine praktikable Variante der <a class="previewlink" href="http://de.wikipedia.org/wiki/Ungarische_Notation">ungarischen Notation </a>anzugewöhnen.</p>
<p>Natürlich gibt es noch einiges mehr Optimierungsraum:</p>
<ul>
<li><strong>Achtet darauf eure </strong><strong>Deklarationsdateien </strong>(Sprich headerfiles) nicht für Definitionen zu missbrauchen (mit der Ausnahme von Template-Definitionen), dazu gehören Macros: Wenn ihr solche verwenden müsst, achtet darauf dass der Code kurz bleibt, wie gesagt, Deklarationsdatei und so.</li>
<li><strong>Globale Variablen </strong>sind zuallererst einmal als Designfehler zu sehen. Berechtigung haben sie nur sehr selten, und mit OOP hat das Ganze nichts mehr am Hut.<br />
Falls man doch meinen sollte sie zu brauchen: Zugriff sollte in C++ durch <span style="color: #808080;"><em>::name</em></span> umgesetzt werden.</li>
<li><strong>Lasst die </strong><strong>Unterstriche </strong>aus Variablenbezeichnungen raus! Klar, ungarisch für Präfixe und so, aber: Innerhalb der Bezeichnung haben die Dinger nichts verloren. <span style="color: #808080;"><em><br />
my_map_start_iterator = m_mp_my_map.begin()</em> </span> kann keiner lesen,<span style="color: #808080;"> <em>itStart = m_mp.begin(); </em><span style="color: #000000;">genügt völlig.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Intelligente Namen geben. </strong>Zum Beispiel ist die Bezeichnung <span style="color: #808080;"><em>strText </em></span>ziemlich sinnfrei.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Stress sparen kann man </strong>sich auch in Funktionsaufrufen. Wird ein benutzerdefinierter Typ übergeben ist es am klarsten den Parameternamen gleich dem Typ zu setzen:<br />
<span style="color: #808080;"><em>LoadModel(Model* toLoad) </em></span>ist pfui, </span></span><span style="color: #808080;"><span style="color: #000000;">ebenso <em><span style="color: #808080;">LoadModel(Model* model3ds) </span></em>und </span></span><em><span style="color: #808080;"><span style="color: #000000;"><span style="color: #808080;">LoadModel(Model* reference) </span> </span></span></em><span style="color: #808080;"><span style="color: #000000;">auch, </span></span><em><span style="color: #808080;"><span style="color: #000000;"><span style="color: #808080;">LoadModel(Model* model) </span></span></span></em><span style="color: #808080;"><span style="color: #000000;">dagegen hui.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Abkürzungen </strong>bitte nicht konsequent großschreiben: <em><span style="color: #808080;">getHTMLPage() </span></em>wird zu <span style="color: #808080;"><em>getHtmlPage()</em></span>. </span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Redundanzen vermeiden </strong>was Namen angeht. Eine Matrix-Klasse  benötigt keine Funktion <span style="color: #808080;"><em>InvertMatrix()</em></span> und eine Klasse <span style="color: #808080;"><em>Gui </em></span>(man bemerke: G groß, Rest klein) benötigt keine Methode <span style="color: #808080;"><em>ShowGui()</em></span>. Der Aufruf <span style="color: #808080;"><em>gui.show(); </em></span>ist schneller und angenehmer zu lesen.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Private Variablen </strong>sollten mit einem Unterstrich gekennzeichnet werden.<span style="color: #808080;"><em> _transformationMatrix</em></span> oder <span style="color: #808080;"><em>transformationMatrix_ </em></span>geht gleichermaßen &#8211; Beides lässt keinen Zweifel darüber aufkommen dass die Variable extern niemanden zu interessieren hat.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Meine Klassen erweitere ich mit einem Präfix </strong>als Indikator um welches Design Pattern es sich handelt:<br />
<span style="color: #808080;"><em>C</em></span> &#8211; Normale Implementierung<br />
<span style="color: #808080;">I</span> &#8211; Interface<br />
<em><span style="color: #808080;">S</span></em> &#8211; Singleton<br />
<em><span style="color: #808080;">T </span></em>- Template<br />
Dass dies Standard ist glaube ich nicht, aber mir hiflt es wirklich sehr.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Nutzt kluge Umbrüche </strong>wenn die Zeile nicht reicht! Rechnungen nach dem nächsten Operator umbrechen, <span style="color: #808080;"><em>couts</em></span> nach dem nächsten <span style="color: #808080;"><em>&lt;&lt; </em></span>und so weiter. Horizontale Scrollbalken haben im Editor nichts zu suchen. Achtet dabei auch darauf dass nicht jeder einen 24&#8243; </span></span><span style="color: #808080;"><span style="color: #000000;">Bildschirm mit </span></span><span style="color: #808080;"><span style="color: #000000;">16:10 Verhältnis besitzt und brecht dementsprechend früh um.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Nutzt Boolean-Variablen </strong>um bedingte Ausdrücke zu vereinfachen:</span><span style="color: #000000;"><br />
<span style="color: #808080;"><em>if ( (lstToDo.size() = 0 &amp;&amp; !IsCalculation) || lstErrorCodes.size() !=0){</em></span> ist sehr, sehr schlecht.<br />
Besser ist:<br />
<span style="color: #808080;"><em>bool isDone = lstToDo.size() == 0 &amp;&amp; !isCalculating;<br />
bool isError = lstErrorCodes.size() = 0;<br />
if (isDone || isError){</em></span></span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Benutzt die Leertaste!</strong><br />
</span><span style="color: #000000;"><span style="color: #808080;"><em>for(int i=0;i&lt;arr.length();i++)<br />
arr[i]+=(newPos+thisPos)*1/2;</em></span><br />
Grauenhaft.<br />
<span style="color: #808080;"><em>for  (int i = 0;  i &lt; arr.length();  i++)<br />
arr[i]  +=  (newPos + thisPos)  /  2;</em></span><br />
Besser.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Der Raum Zwischen Methoden und Klassen </strong>kann nicht unterschätzt werden. Ich persönlich lasse zwischen Methoden 2 Leerzeilen, zur nächsten Klasse 4.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Kommentare sollte es viele geben</strong>, allerdings sollten sie auch eine Aussage haben.<br />
<span style="color: #808080;"><em>coords.x++;                            //  increment x by 1</em></span><br />
ist dumm.<br />
<span style="color: #808080;"><em>coords.x++;                           // move player to the right</em></span><br />
ist besser.</span></span></li>
<li><span style="color: #808080;"><strong><span style="color: #000000;">Kommentare sind englisch.</span></strong><span style="color: #000000;"><br />
Immer.</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Rückt Kommentare bündig ein. </strong>Selbsterklärend. Kommentare sollten nicht die Sicht nehmen weil sie kreuz und quer im Code liegen. Dazu gehört auch, ganz wichtig:</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Soweit möglich, Kommentare hinter den Zeilen postieren</strong>, nicht über dem zu kommentierenden </span></span><span style="color: #808080;"><span style="color: #000000;">Code</span></span><span style="color: #808080;"><span style="color: #000000;">. Letzteres ist vor Methoden und Klassen schön übersichtlich, nicht jedoch im fließenden Code.<br />
Außnahme: Man erläutert die Aufgabe eines kompletten Codeblock. </span><span style="color: #000000;">Das macht man dann natürlich vor dem Block.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Achtet als generelle Regel darauf </strong>dass die Kommentare den Codefluss nicht stören oder unterbrechen, jedoch schnell zu sehen sind wenn man etwas vom Code nicht versteht.<br />
</span></span></li>
<li><span style="color: #808080;"><span style="color: #000000;"><strong>Über Klassen kommt bei mir zusätzlich </strong>eine Kommentarlinie die den Namen enthält, darunter eine kleine Definition:<br />
<span style="color: #808080;"><em>//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;CVec3f&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
// Data structure holding three floating point coordinates and allowing all necessary vector operations<br />
// through its&#8217; overloaded operators.</em></span><br />
Darunter (zu den 4 Leeren Zeilen darüber!) nochmals eine Leerzeile und dann der Klassenrumpf.</span></span></li>
</ul>
<p>Es gibt der Regeln sicherlich noch hunderte mehr, aber soviel sprang mir gerade in den Kopf. Wer noch was wichtiges auf dem Herzen hat der sei Willkommen in den Kommentaren noch was zu schreiben <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2009/01/11/style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ Problemchen</title>
		<link>http://www.p-shuttle.de/joh/2008/12/28/c-problemchen/</link>
		<comments>http://www.p-shuttle.de/joh/2008/12/28/c-problemchen/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 04:50:21 +0000</pubDate>
		<dc:creator>Klabautermann</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[glLightfv]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://krabbelbabbel.wordpress.com/?p=153</guid>
		<description><![CDATA[Ein Problem über dass ich stolperte, erinnerte mich wieder daran wie wichtig es ist über die Sprache und die Bibliotheken mit denen man arbeitet Bescheid zu wissen. Diese Erfahrung möchte ich euch natürlich nicht vorenthalten:]]></description>
			<content:encoded><![CDATA[<p>Ich arbeite ja im Moment sehr fleißig an meiner Grafikengine. Ein Problem über dass ich stolperte, erinnerte mich wieder daran wie wichtig es ist über die Sprache und die Bibliotheken mit denen man arbeitet Bescheid zu wissen. Diese Erfahrung möchte ich euch natürlich nicht vorenthalten <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Schauen wir uns mal folgenden Versuchsaufbau an:</p>
<p style="padding-left:30px;"><em>class Drawable{<br />
public:<br />
float position3f[3];<br />
}</em></p>
<p>Irgendwo rufe ich nun auf: <em>glLightfv(GL_LIGHT+light.index,GL_POSITION,light.position)</em>, wobei <em>light </em>natürlich von <em>Drawable </em>abgeleitet wird.</p>
<p>Das alles funktioniert so lange, wie ich den Code nicht folgendermaßen erweitere:</p>
<p style="padding-left:30px;"><em>class Drawable{<br />
public:<br />
float position3f[3];<br />
bool active;<br />
}</em></p>
<p>Die Änderung führt dazu dass die OpenGL-Beleuchtung nicht mehr funktioniert. Idee warum?<br />
Ein kleiner Tipp: Die Beleuchtung funktionierte wieder wenn ich <em>active </em><strong>vor </strong><em>position </em>deklariere.</p>
<p>Gelöst? Nicht schlimm, auch ich kam nicht auf Anhieb darauf.<br />
Die Lösung des Ganzen erfordert Hintergrundwissen sowohl in OpenGL als auch in Speicherverwaltung:</p>
<ol>
<li>OpenGL arbeitet wenn es um Positionierung (= Verschiebung) geht mit affinen Abbildungen (3&#215;3 Matrix + Verschiebung), was durch die Nutzung von 4&#215;4 Matrizen umgesetzt wird. Jetzt schnackelts. Ich nutze einen Vektor mit 3 Komponenten, OpenGL will aber 4. Die Vierte (sogenannte <em>w</em>-)Komponente ist eigentlich überflüssig, kann aber als Flag genutzt werden(wie in diesem Fall). Ich gehe mal davon aus dass openGL auf irgendeine Art eine 0 aus dem bad-pointer machte, so genau <em>will </em>ich das gar nicht wissen.</li>
<li>Die Variable <em>position3f </em>liegt auf dem Stack. Durch das übergeben des Pointers an <em>glLightfv </em>wurde für das vierte Element &#8220;ins Leere gegriffen&#8221;. Sicher warf dies irgendwo intern eine Exception, aber openGL verzichtet in solchen Fällen vollständig auf Funktionsrückgaben &#8211; Warum auch immer o.O</li>
<li>Jedenfalls. Durch Erstellen einer zweiten Variable auf dem Stack war der Bereich nach der 3. Float-Komponente nicht mehr leer, ganz fatal: Er war sogar von einem anderen Datentyp belegt. Und OpenGL liefert keinen Fehlercode, nein, die ganze Beleuchtung schaltet sich einfach aus.</li>
</ol>
<p>Ich behob das Ganze natürlich damit dass ich <em>position </em>um eins vergrößerte. Kudos an Prof. Hahn und Prof. Kriha für die 1A-Vorlesungen in dem Bereich. An solchen Fehlern wird man ohne eingehendes Wissen über Kompiler und Sprache verzweifeln. Darum mein Aufruf:</p>
<p>Leute guckt euch gut an mit was ihr arbeitet!  Im Java-Sandkasten mag man sich austoben können, aber gerade in C hat man kaum eine Chance sauber zu programmieren, wenn man die Konzepte nicht versteht!</p>
<p>PS.: Bevor Missverständnisse aufkommen: C ist natürlich trotzdem (oder gerade deshalb) viel cooler als Java <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2008/12/28/c-problemchen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unsere Tastatur</title>
		<link>http://www.p-shuttle.de/joh/2008/10/18/unsere-tastatur/</link>
		<comments>http://www.p-shuttle.de/joh/2008/10/18/unsere-tastatur/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 13:45:34 +0000</pubDate>
		<dc:creator>Klabautermann</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Druck]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Pause]]></category>
		<category><![CDATA[Rollen]]></category>
		<category><![CDATA[Tastatur]]></category>
		<category><![CDATA[Taste]]></category>

		<guid isPermaLink="false">http://krabbelbabbel.wordpress.com/?p=91</guid>
		<description><![CDATA[Als ich mich heute auf mein Projekt einstellen wollte, mich reflektierend in meiner mitgenommenen schwarzen Cherry Tastatur verlor und nachsinnend in einer Welt von Templates, Makros und Funktionspointern zu driften drohte, fiel mein Blick auf einige unauffällige Tasten auf eben jener Tastatur. Wie wunderlich, waren diese doch nahezu unberührt von der vielzahl von Ablagerungen, welche sich doch sonst überall auf den Tasten breit machten. Nur eine dezente Staubschicht hatte sich sanft um die Objekte meiner Aufmerksamkeit gelegt:]]></description>
			<content:encoded><![CDATA[<p>Als ich mich heute auf mein Projekt einstellen wollte, mich reflektierend in meiner mitgenommenen schwarzen Cherry Tastatur verlor und nachsinnend in einer Welt von Templates, Makros und Funktionspointern zu driften drohte, fiel mein Blick auf einige unauffällige Tasten auf eben jener Tastatur. Wie wunderlich, waren diese doch nahezu unberührt von der vielzahl von Ablagerungen, welche sich doch sonst überall auf den Tasten breit machten. Nur eine dezente Staubschicht hatte sich sanft um die Objekte meiner Aufmerksamkeit gelegt:</p>
<p><a href="http://www.p-shuttle.de/joh/wp-content/uploads/2008/10/imgp1138-copy.jpg"><img class="alignnone size-medium wp-image-97" title="imgp1138-copy" src="http://www.p-shuttle.de/joh/wp-content/uploads/2008/10/imgp1138-copy.jpg?w=300" alt="" width="300" height="225" /></a></p>
<p>Das man mit der PRINT-Taste unter Windows Screenshots erzeugt gilt als Common Knowledge, aber wusstet ihr dass die Kombination [ALT]+[PRINT] einen Screenshot des aktiven Fensters erzeugt? Sehr geschickt für Blogger.</p>
<p>Die SCROLL-LOCK-Taste, (oder einfach Rollen) erfüllte in längst vergangenen Zeiten die Funktion des Scroll-Rades, man konnte also den Bildausschnitt mit [ROLLEN]+[PFEIL OBEN/UNTEN] bewegen ohne den Cursor verschieben zu müssen. Die gleiche Funktion unterstützt das Visual Studio, allerdings nicht mehr mit der ROLLEN-Taste, sondern mit [STRG], sehr geschickt wenn man beim Programmieren keine Lust hat immer zwischen Tastatur und Maus zu wechseln.</p>
<p>Heute ist diese Taste unter Windows im Grunde völlig unsinnig geworden.  Mit [STRG]+2x[ROLLEN] <a title="Memory Dump function" class="previewlink" href="http://support.microsoft.com/kb/244139">lässt sich unter Windows XP zwar noch ein Memory Dump generieren</a>, allerdings ist dies nur für Fehleranalysen nötig und die Funktion standardmäßig deaktiviert, in Vista soll diese Funktion gar nicht mehr existieren.</p>
<p>Jemand sollte sich die Mühe machen auszurechnen wieviel Geld gespart würde wenn die Taste mitsamt der damit verbundenen LED von den Tastaturen verbannt würde.</p>
<p>Die PAUSE/UNTBR-Taste war einmal dafür da das laufende Programm abzuschießen.</p>
<p>Ich erinnere mich an meine VB-Zeit (hach ja, als Programmierung noch so einfach war&#8230;), damals ließ sich mit [STRG]+[PAUSE] die Ausführung abbrechen, ein Relikt aus der DOS-Basic Zeit. Heute funktioniert das nur noch bei der Ausführung von Batches.<br />
Gemeinerweise wird diese Abschießen-Funktion unter Linux durch die Kombination [STRG]+[C] erfüllt, ein hinterhältiger Kniff um Windows-User zu verwirren.</p>
<p>Für alle interessant: der BIOS-Start lässt sich noch heute mit einem Druck auf [PAUSE] pausieren und mit erneutem Druck wieder fortgesetzt werden.</p>
<p>Damit ist auch dieses Thema abgehandelt und der geneigte Leser hoffentlich wieder ein wenig klüger geworden <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2008/10/18/unsere-tastatur/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Das Urheberrecht</title>
		<link>http://www.p-shuttle.de/joh/2008/09/16/das-urheberrecht/</link>
		<comments>http://www.p-shuttle.de/joh/2008/09/16/das-urheberrecht/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 17:27:01 +0000</pubDate>
		<dc:creator>Klabautermann</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Recht]]></category>
		<category><![CDATA[Abmahnung]]></category>
		<category><![CDATA[Erklärung]]></category>
		<category><![CDATA[Filesharing]]></category>
		<category><![CDATA[Geistiges Eigentum]]></category>
		<category><![CDATA[IP-Adresse]]></category>
		<category><![CDATA[Privatkopie]]></category>
		<category><![CDATA[Urheberrecht]]></category>

		<guid isPermaLink="false">http://krabbelbabbel.wordpress.com/?p=63</guid>
		<description><![CDATA[Es gibt kaum einen Rechtsbereich der für eine so breite Masse relevant ist und über den gleichzeitig so viel halbwissen herumschwirrt: Das deutsche Urheberrecht, kopieren von Medien und Nutzung von Tauschbörsen.

Da ich mir selbst über einige Sachen nicht klar war (und mich ein wenig von den anstehenden Klausuren ablenken musste) habe ich mir einige Zeit genommen und das Internetz nach Informationen von offizieller Seite durchsucht. Um ein wenig Klarheit in das Rechtsgewuschel zu bringen hier einige Erkenntnisse.]]></description>
			<content:encoded><![CDATA[<p>Es gibt kaum einen Rechtsbereich der für eine so breite Masse relevant ist und über den gleichzeitig so viel halbwissen herumschwirrt: Das deutsche Urheberrecht, kopieren von Medien und Nutzung von Tauschbörsen.</p>
<p>Da ich mir selbst über einige Sachen nicht klar war (und mich ein wenig von den anstehenden Klausuren ablenken musste) habe ich mir einige Zeit genommen und das Internetz nach Informationen von offizieller Seite durchsucht. Um ein wenig Klarheit in das Rechtsgewuschel zu bringen hier einige Erkenntnisse:</p>
<ul>
<li><strong>Generell</strong><br />
liegt Recht liegt auf der Seite des Urhebers, das heißt: Wenn es zu irgendetwas noch keine gesetzliche Schrankenbestimmung gibt ist es verboten. Diese Schrankenbestimmungen interessieren den Bürger natürlich am meisten.</li>
</ul>
<ul>
<li><strong>Privatkopie</strong><br />
Da die Verbreitung von urheberrechtlich geschützten Inhalten in Haushalten irgendwann nicht mehr kontrollierbar war, wurde das Recht auf Privatkopien eingeführt, dafür allerdings die Urheberabgaben eingeführt (das heißt für euren Brenner habt ihr ca. 10€ an die Musik-, Film- und Verlagsindustrie abgegeben).  Der Bundesgerichtshof legt die Privatkopie so aus dass bis zu 7 Kopien im kleinen privaten Kreis herrumschwirren dürfen, im digitalen Umfeld jedoch weniger.<br />
Verboten sind Kopien aus offensichtlich rechtswidrig hergestellten Vorlagen und neuerdings auch aus offensichtlich rechtswidrig öffentlich zugänglich gemachten Vorlagen. Letzterer Zusatz wird allerdings kaum Auswirkungen haben, da sich sowas im Internet nur sehr schwer nachvollziehen lässt.<br />
Die Privatkopie darf sowohl analog <strong>als auch digital </strong>angefertigt werden.</li>
<li><strong>Gemeinsam genutzter Anschluss</strong><br />
Auch wenn die Medienindustrie versucht zu verunsichern:<br />
Es besteht keine Störhaftung. Das heißt wenn ein Mitnutzer illegal Musik verbreitet besteht in der Regel keine Haftung, auch wenn die Abmahnung an den Eigner adressiert ist.</li>
<li><strong>Kopierschutz</strong><br />
Kopiergeschützte Medien dürfen nicht kopiert werden. Das betrifft einige im Umlauf befindlichen Audio-CDs und fast alle DVDs.<br />
Allerdings(1): Interessanterweise gilt diese Regelung nicht für Computerprogramme(!).<br />
Das bedeutet: Von Computerspielen darf man trotz SecureRom und SaveDisk Sicherungen erstellen.<a class="previewlink" href="http://www.gesetze-im-internet.de/urhg/__69a.html"><span id="more-44"></span></a>Allerdings(2): Falls man die Kopie nur für private Zwecke, also für sich selbst oder für eine &#8220;persönlich verbundene Person&#8221; macht, handelt es sich zumindest nicht mehr um eine Straftat.<a class="previewlink" href="http://www.gesetze-im-internet.de/urhg/__108b.html"><!--more--></a></li>
<li><strong>Musiknoten</strong><br />
dürfen <strong>nicht </strong>kopiert werden, nur abgeschrieben. Darunter fallen auch mit einem Notensatzprogramm abgetippte Noten.</li>
<li><strong>Öffentliche Zugänglichmachung </strong>nennt man das, wenn man urheberrechtlich geschützte Dateien auf einen offenen Server hochlädt oder auch nur in seinem Shared-Ordner hält. Das Ganze fällt rechtlich etwa auf eine Ebene mit aus-der-Videothek-Filme-klauen.</li>
</ul>
<p><strong>Verfahrensgrundlagen</strong></p>
<ul>
<li><strong>IP-Adresse</strong><br />
Grundlage für Abmahnung und Gerichtsverfahren ist in den meisten Fällen die Zuordnung von IP-Adressen zu Anbietern von geschützten Dateien im Internet. Seit das Gesetz zur Datenvorratsspeicherung in Kraft ist werden die ISPs dazu angehalten die Zuordnungstabellen ein halbes Jahr lang zu speichern. Ab 2009 wird dies sogar Pflicht(!). In letzter Zeit sieht das Ganze meist so aus: Abmahnung, Strafverfahren (meist aussichtslos), Zivilverfahren.<br />
Das Strafverfahren diente dabei nur als Sprungbrett um an die IP-Adresse zu kommen, alles weitere wird zivilrechtlich verfolgt.<br />
Weil das auch den Strafverfolgern gewaltig auf den Sack ging im März die Entscheidung des BVerfG dass die Adressdaten nur herausgegeben werden dürfen wenn eine schwere Straftat vorliegt.<br />
Wer sich jetzt freut: Seit dem ersten Dezember müssen auch in Zivilprozessen Adressen herausgegeben werden. Das erspart den Verwertern nun den Gang über das Strafverfahren, die Zahl der Abmahnungen <a class="previewlink" href="http://www.golem.de/0809/62251-rss.html">steigt dadurch schon jetzt</a>.</li>
<li><strong>Hausdurchsuchung</strong><br />
Bedarf eines gerichtlichen Beschlusses und hat im Zusammenhang mit Urheberrechtsverletzungen keine wirkliche Relevanz mehr (auch aufgrund der Entscheidung des BVerG). Tipps für den Umgang mit einer Hausdurchsuchung gibt es <a class="previewlink" href="http://www.gulli.com/szene/hausdurchsuchung/">hier</a>.</li>
</ul>
<p>die Einzige Verurteilung in einem Verfahren wegen Filesharing in Deutschland stammt übrigens von 2004.<br />
Die Verfolgung des <strong>Downloads </strong>von Dateien steht sogar auf einer so wackeligen Grundlage dass in Deutschland noch keine Fälle bekannt sind in denen es eine Abmahnung deswegen gab.</p>
<p>Damit jeder auch weiß was er tut trotzdem noch einmal die <strong>Rechtlichen Folgen:</strong></p>
<ul>
<li><strong>Strafverfahren</strong><br />
Nur noch in sehr schwerwiegenden Fällen, unnötig geworden seit September 2008 (Die IP gibts auch so). Die meisten Verfahren betreffen Bagatelldelikte und werden eingestellt.</li>
</ul>
<ul>
<li><strong>Abmahnungen</strong><br />
Werden von den Rechtseignern verschickt um einem Gerichtsstreit vorzubeugen. Sollte man eine Abmahnung bekommen, ist es das Beste die Situation mit einem Rechtsanwalt zu besprechen.<br />
Ziel ist es mit Unterschrift und Kontonummer den Täter aussergerichtlich zu Schadensersatz und Unterlassung zu zwingen. Üblich sind Forderungen zwischen 5.000 und 30.000€.  Auf <strong>keinen Fall</strong> sollte man die Mitgeschickten Unterlassungs- und Schadensersatzeingeständnisse unterschreiben ohne einen Rechtsanwalt konsultiert zu haben.</li>
<li><strong>Zivilverfahren</strong><br />
Wenn man gegen die Abmahnung (Unterlassung oder Schadensersatzforderung) Wiederspruch einlegt kommt es zum Zivilprozess.<br />
Es sei geraten die Unterlassung zu akzeptieren (sonst droht eine Verfügung, der Kosten im fünfstelligen Bereich folgen).<br />
Die Schadensersatzforderungen sind jedoch ein anderes Bier. Es ist für die Verwerter eigentlich unmöglich den angerichteten Schaden korrekt zu beziffern, was bisher in allen bekannten Fällen zu einem fallen lassen des Schadensersatzanspruches führte. Die Verwerter haben dann theoretisch 3 Jahre Zeit ihre Ansprüche gelten zu machen, bevor die Sache verjährt ist.</li>
</ul>
<p>Weiterführende Informationen und Links zu den Gesetzestexten gibt es hier:</p>
<p><a class="previewlink" href="http://www.gulli.com/tutorials/abmahnung-faq/abmahnung-faq-allgemeine-fragen/">Rechtsanwalt auf Gulli über Abmahnungen<br />
</a></p>
<p><a class="previewlink" href="http://de.wikipedia.org/wiki/Filesharing">Wikipedia über Filesharing</a></p>
<p><a class="previewlink" href="http://de.wikipedia.org/wiki/Privatkopie">Wikipedia</a><a class="previewlink" href="http://de.wikipedia.org/wiki/Filesharing"> über </a><a class="previewlink" href="http://de.wikipedia.org/wiki/Privatkopie">Privatkopie</a></p>
<p><a class="previewlink" href="http://www.e-recht24.de/artikel/urheberrecht/">Urheberrecht auf e-Recht24.de</a></p>
<p>So, das wars für heute, jetzt werde ich noch ein bisschen Mathe lernen <img src='http://www.p-shuttle.de/joh/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2008/09/16/das-urheberrecht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Willkommen in der Java Paket-Hölle.</title>
		<link>http://www.p-shuttle.de/joh/2008/07/25/jre-versionen/</link>
		<comments>http://www.p-shuttle.de/joh/2008/07/25/jre-versionen/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 23:00:38 +0000</pubDate>
		<dc:creator>Klabautermann</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://krabbelbabbel.wordpress.com/?p=32</guid>
		<description><![CDATA[Vor kurzem kam ich bei einem Java-Projekt zum ersten Mal in die Situation externe Pakete einbinden zu müssen. Das sollte eigentlich auch gar kein so großes Problem sein, jedoch machten die zusätzlichen entstandenen Abhängigkeiten Probleme. Genau genommen musste ich letztendlich 4 zusätzliche Pakete finden und herunterladen, wobei innerhalb dieser Pakete wiederum probleme mit den unterschiedlichen [...]]]></description>
			<content:encoded><![CDATA[<p>Vor kurzem kam ich bei einem Java-Projekt zum ersten Mal in die Situation externe Pakete einbinden zu müssen. Das sollte eigentlich auch gar kein so großes Problem sein, jedoch machten die zusätzlichen entstandenen Abhängigkeiten Probleme. Genau genommen musste ich letztendlich 4 zusätzliche Pakete finden und herunterladen, wobei innerhalb dieser Pakete wiederum probleme mit den unterschiedlichen Versionen entstanden. Man kann sich das Chaos also gut vorstellen.</p>
<p>Es sei X Anbieter eines freien Java-Paketes zum Automatisieren von Webseitenzugriffen. Y sei Anbieter eines extern Abhängigen Pakets zum verarbeiten der Log-Ströme. Nun stellt X die Entwicklung ein, während in Y eine revolutionäre Neuerung implementiert wird, die die Hälfte der Klassen des Pakets überflüssig macht. Ab Version 1.3.24 werden diese Klassen also einfach gelöscht. Noch besser: X nutzt in einigen seiner Klassen das com.*-package, in dem der Programmierer wohl wundersame und aufregende Klassen fand.</p>
<p>Fakt ist dass eben dieses Paket von Sun NICHT für den öffentlichen Gebrauch bestimmt ist, es enthält nur Klassen die sich in der Testphase befinden. Durchlaufen besagte Klassen diese Testphase erfolgreich, werden sie in die bekannten java.* bzw javax.*-Pakete geschoben. Wer das com.*-Paket nutzt kann also darauf wetten dass früher oder später die genutzte Klasse weg ist. Das selbst Entwickler wie Apache dies nicht kapieren, ist traurig.</p>
<p>Warum schreibe ich diesen Artikel?</p>
<ol>
<li>Wenn offene Klassen verwendet werden, bindet diese in euer fertiges Paket ein!</li>
<li>Falls ihr doch nicht im Stande sein solltet externe Abhängigkeiten einzubinden bzw. falls lizenzielle Einschränkungen vorliegen, packt die VERSIONSNUMMER der externen Abhängigkeiten in die Dokumentation. Und betet dass der Hersteller der Abhängigkeiten ein Archiv früherer Versionen führt.</li>
<li>Schmeißt nicht einfach eine releaste Klassenstruktur um, und wenn dann dokumentiert das richtig.</li>
<li>Verwendet keine com.* Klassen. Falls das doch nötig sein sollte, siehe unten.</li>
</ol>
<p>Da ich in einem anderen Projekt eben doch auf eine com.*-Klasse zurückgreifen musste (durchsichtige Fenster in AWT), hier ein Tipp falls ihr auch in so eine Situation kommt:</p>
<p>system.getProperty(&#8220;java.version&#8221;)</p>
<p>&#8230;gibt einen String mit der Version der JRE zurück. Nutzt ihr ein com.*-Paket, so checkt die Version und packt das Ganze in eine Bedingung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2008/07/25/jre-versionen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtual Reality im neuen Jahrtausend</title>
		<link>http://www.p-shuttle.de/joh/2008/06/21/ocz-nia/</link>
		<comments>http://www.p-shuttle.de/joh/2008/06/21/ocz-nia/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 13:44:58 +0000</pubDate>
		<dc:creator>Klabautermann</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Eingabegerät]]></category>
		<category><![CDATA[NIA]]></category>
		<category><![CDATA[OCZ]]></category>

		<guid isPermaLink="false">http://krabbelbabbel.wordpress.com/?p=21</guid>
		<description><![CDATA[Für alle die noch nichts davon mitbekommen haben:
Der &#8220;Neural Impuls Actuator&#8221;, kurz NIA ist &#8220;the new Thing&#8221; in der Spiele-HW und soll es ermöglichen Spiele mit den Gedanken zu steuern. Maus und Tastatur wären damit überflüssig. Klingt abstrus,  ist aber durchaus ernst gemeint und, man kann es kaum glauben, preislich massenkompatibel (ca. 170€).
Das ganze erinnert [...]]]></description>
			<content:encoded><![CDATA[<p>Für alle die noch nichts davon mitbekommen haben:<img class="alignright" style="float:right;margin:20px 10px;" src="http://image.ebuyer.com/UK/R0143036-01.jpg" alt="http://image.ebuyer.com/UK/R0143036-01.jpg" width="189" height="144" /></p>
<p>Der &#8220;Neural Impuls Actuator&#8221;, kurz NIA ist &#8220;the new Thing&#8221; in der Spiele-HW und soll es ermöglichen Spiele mit den Gedanken zu steuern. Maus und Tastatur wären damit überflüssig. Klingt abstrus,  ist aber durchaus ernst gemeint und, man kann es kaum glauben, preislich massenkompatibel (ca.<a title="Mindfactory OCZ NIA kaufen" class="previewlink" href="http://www.mindfactory.de/product_info.php/info/p424818/pid/google"> 170€</a>).</p>
<p>Das ganze erinnert ein Wenig an die Mitte 90er, als viele bunte bewegte Bilder auf den Röhrenmonitor fanden und die IT-Welt ein bisschen zukunftsgeil war, ihr wisst schon, Virtual Reality und so, handliche <a class="previewlink" href="http://de.wikipedia.org/wiki/Cave_Automatic_Virtual_Environment">Caves</a>, kopfwehschwangere<a title="Shutterbrille" class="previewlink" href="http://de.wikipedia.org/wiki/Shutterbrille">3D-Brillen</a> und, Klassiker, der Cyberhelm:</p>
<p><img style="vertical-align:middle;" src="http://img.stern.de/_content/57/52/575239/helm_500.jpg" alt="" width="397" height="297" /></p>
<p>Wundervoll, oder? Wär hätte damals gedacht dass wir 15 Jahre später immer noch nicht unseren Cyberhelm zur LAN-Party nehmen würden? o.O</p>
<p>Naja ist ja auch egal, jetzt haben wir ja NIA. Um den begeisterten Leser wieder runterzuholen: Die Maus benutzt man besser doch noch, der Einstieg kann wohl etwas deprimierend sein und mit Gedankensteuerung hat das Ganze wenig zu tun. Vielmehr werden Muskel- und Nervenimpulse auf der Haut überwacht. Dadurch werden Unterhaltungen während man Spielt sehr kompliziert, ein riesen Problem da parallel zum Spiel meist <a title="Teamspeak" class="previewlink" href="http://de.wikipedia.org/wiki/TeamSpeak">TS</a> genutzt wird.<br />
Ach ja, ein Kontra noch, beim Spielen sieht man selten bescheuert aus, siehe die Videos unten.</p>
<p>Potential hat das Ganze sicherlich nichtsdestotrotz:<br />
In einem Testmatch gegen Klaus Widmann, dem aktuellen UT3-Weltmeister erzielte NIA-Entwickler Klaus Schuetten immerhin ein respektables Ergebnis von 5:12.<br />
Ohne eine Ahnung von Shootern zu haben (sein Argument für NIA war er käme beim Spielen mit den vielen Tasten einfach nie zurecht o.O )</p>
<p>Wer sich gerne selbst ein Bild machen möchte, möge <a title="Nia Test Match Teil 1" class="previewlink" href="http://www.game-tv.com/videos/mode/4/chID/1/vID/3625/hl/NIA/Spieletest/NIA-Showmatch-1/3.html">hier</a>, <a title="Nia Test Match Teil 2" class="previewlink" href="http://www.game-tv.com/videos/mode/4/chID/1/vID/3626/hl/NIA/Spieletest/NIA-Showmatch-2/3.html">hier</a> und <a title="Nia Test Match Teil 3" class="previewlink" href="http://www.game-tv.com/videos/mode/4/chID/1/vID/3627/hl/NIA/Spieletest/NIA-Showmatch-3/3.html">hier</a> klicken.<br />
Ein Interview gibts auch <a title="Nia Test" class="previewlink" href="http://www.game-tv.com/videos/mode/4/chID/1/vID/3624/hl/NIA/Spieletest/NIA-Vorstellung.html">hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.p-shuttle.de/joh/2008/06/21/ocz-nia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

