<?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>XLKSTYLE.com</title>
	<atom:link href="http://xlkstyle.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://xlkstyle.com</link>
	<description></description>
	<lastBuildDate>Tue, 20 Mar 2012 16:02:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Elliot Jay Stocks &#8211; Destroying the Web 2.0 Look</title>
		<link>http://xlkstyle.com/2012/03/elliot-jay-stocks-destroying-the-web-2-0-look/</link>
		<comments>http://xlkstyle.com/2012/03/elliot-jay-stocks-destroying-the-web-2-0-look/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 16:01:43 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=581</guid>
		<description><![CDATA[Video Slides]]></description>
			<content:encoded><![CDATA[<h3>Video</h3>
<p><!--[if IE]><object width="655" height="469" id="viddlerOuter-9b7e9501" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="//www.viddler.com/player/9b7e9501/0/"><param name="allowScriptAccess" value="always"><param name="allowNetworking" value="all"><param name="allowFullScreen" value="true"><param name="flashVars" value="f=1&#038;openURL=83791611&#038;autoplay=f&#038;disablebranding=f"><object id="viddlerInner-9b7e9501"><video id="viddlerVideo-9b7e9501" src="//www.viddler.com/file/9b7e9501/html5mobile?openURL=83791611" type="video/mp4" width="655" height="427" poster="//www.viddler.com/thumbnail/9b7e9501/" controls="controls" x-webkit-airplay="allow"></video></object></object><![endif]--> <!--[if !IE]> <!--> <object id="viddlerOuter-9b7e9501" width="655" height="469" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><param name="allowFullScreen" value="true" /><param name="flashVars" value="f=1&amp;openURL=83791611&amp;autoplay=f&amp;disablebranding=f" /><param name="src" value="//www.viddler.com/player/9b7e9501/0/" /><param name="allowscriptaccess" value="always" /><param name="allownetworking" value="all" /><param name="allowfullscreen" value="true" /><param name="flashvars" value="f=1&amp;openURL=83791611&amp;autoplay=f&amp;disablebranding=f" /><embed id="viddlerOuter-9b7e9501" width="655" height="469" type="application/x-shockwave-flash" src="//www.viddler.com/player/9b7e9501/0/" allowScriptAccess="always" allowNetworking="all" allowFullScreen="true" flashVars="f=1&amp;openURL=83791611&amp;autoplay=f&amp;disablebranding=f" allowscriptaccess="always" allownetworking="all" allowfullscreen="true" flashvars="f=1&amp;openURL=83791611&amp;autoplay=f&amp;disablebranding=f" /></object></p>
<h3>Slides</h3>
<p><object id="__sse160068" width="655" height="497" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fowd-november-2007-1194556763131314-1&amp;rel=0&amp;stripped_title=fowd-november-2007&amp;userName=elliotjaystocks" /><param name="allowscriptaccess" value="always" /><param name="allowfullscreen" value="true" /><embed id="__sse160068" width="655" height="497" type="application/x-shockwave-flash" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fowd-november-2007-1194556763131314-1&amp;rel=0&amp;stripped_title=fowd-november-2007&amp;userName=elliotjaystocks" allowFullScreen="true" allowScriptAccess="always" wmode="transparent" allowscriptaccess="always" allowfullscreen="true" /> </object></p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2012/03/elliot-jay-stocks-destroying-the-web-2-0-look/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Boilerplates</title>
		<link>http://xlkstyle.com/2012/02/web-boilerplates/</link>
		<comments>http://xlkstyle.com/2012/02/web-boilerplates/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 16:07:44 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=564</guid>
		<description><![CDATA[Um ohne große Kopfschmerzen ans Ziel zu kommen, und oft um überhaupt ans Ziel zu kommen, muss man sich als Entwickler irgendwann von dem Gedanken befreien alles selbst zu machen. Grade das Web ist inzwischen ein so heterogenes Spielfeld, dass man es sich gar nicht mehr leisten kann das Rad ständig neu zu erfinden. Klar, [...]]]></description>
			<content:encoded><![CDATA[<p>Um ohne große Kopfschmerzen ans Ziel zu kommen, und oft um überhaupt ans Ziel zu kommen, muss man sich als Entwickler irgendwann von dem Gedanken befreien alles selbst zu machen. Grade das Web ist inzwischen ein so heterogenes Spielfeld, dass man es sich gar nicht mehr leisten kann das Rad ständig neu zu erfinden.</p>
<p>Klar, ein eigenes CMS wird kaum noch jemand aufziehen, außer man hat Gründe die ganz klar dafür sprechen. Aber selbst die scheinbar grundlegenden Gebiete wie beispielsweise das Gestalten der HTML Grundstruktur sind nicht so einfach: die verschiedenen IE-Versionen wollen ja unterstützt werden; Firefox, Opera, Safari und Chrome in all ihren Versionen auch; und wie wär&#8217;s mit Smartphones und Tablets? Ganz zu schweigen von den ganzen internetfähigen TVs und Spielekonsolen. Außerdem will man ja die neusten Errungenschaften aktueller Browser verwenden: Schatten, runde Boxen, eigene Schriftarten, HTML5-Video und alle anderen interessanten Spielereien.</p>
<p>Ich verwende seit einer ganzen Weile schon 960.gs und andere Frameworks wenn ich eine neue Seite entwerfe, das ist so selbstverständlich wie ein JavaScript-Framework (hat eigentlich noch jemand Lust auf JS ohne jQuery, DOJO und dergleichen?). Allerdings hat sich die Erde seit ich dieses Grundgerüst ausgewählt habe ein wenig weitergedreht und es gibt deutlich bessere Grundgerüste. Alle der folgenden Boilerplates sind nicht nur gute Startpunkte, sondern stellen auch jeweils best practices dar und steigern die eigene Produktivität ungemein.</p>
<div><a href="http://html5boilerplate.com/" target="_blank"><img class="size-full wp-image-567 aligncenter" title="html5boilerplate" src="http://xlkstyle.com/wp-content/uploads/2012/02/html5boilerplate.png" alt="HTML5 Boilerplate" width="655" height="97" /></a></div>
<h3>HTML5 Boilerplate</h3>
<p>Hierbei handelt es sich um das derzeit ultimative Grundgrüst für HTML5 Websites, die mit den meisten Browsern kompatibel sein sollen. Es liefert alles was man für einen soliden Start benötigt. Darunter auch Features die man typischerweise erst bemerkt wenns kracht. Beispielsweise wenn das HTML5 Video nicht abspielt, hier würde die Boilerplate Serverkonfiguration greifen, welche die benötigten korrekten Mime-Types setzt. Ferner sind Standardbibliotheken wie jQuery und Modernizr bereits über ein CDN eingebunden, mitsamt lokalem Fallback (ja auch das macht Sinn, die Skripte im CDN sind mit gewisser Wahrscheinlichkeit bereits im Cache des Besuchers, der lokale Fallback greift falls das CDN mal nicht online sein sollte).</p>
<div><a href="http://www.getskeleton.com" target="_blank"><img class="size-full wp-image-566 aligncenter" title="skeleton" src="http://xlkstyle.com/wp-content/uploads/2012/02/skeleton.png" alt="" width="655" height="97" /></a></div>
<h3>Skeleton</h3>
<p>Im Vergleich zum oben genannten HTML5 Boilerplate konzentriert Skeleton sich rein auf die Darstellung in unterschiedlichen Medientypen. So wird das Grid beispielsweise in Abhängigkeit von der Fensterbreite ausgerichtet und ist somit auch für die vergleichsweise kleinen Displays auf Smartphones geeignet. Ferner können die <em>media queries</em> dafür verwendet werden, um in Abhängigkeit von der Fläche Schriftarten und weitere Stile entsprechend anzupassen. Hinzu kommen einige UI Elemente, welche ebenfalls mit verschiedenen Gerätearten funktionieren.</p>
<div><a href="http://htmlemailboilerplate.com" target="_blank"><img class="size-full wp-image-565 aligncenter" title="htmlemailboilerplate" src="http://xlkstyle.com/wp-content/uploads/2012/02/htmlemailboilerplate.png" alt="HTML eMail Boilerplate" width="655" height="97" /></a></div>
<h3>HTML Email Boilerplate</h3>
<p>Gerne vergessen, aber nicht weniger wichtig im E-Commerce: die HTML-Mail. Hier gelten leicht andere Spielregeln als im Browser, die Clients können auch durchaus selbst Webservices sein, beispielsweise GMail. Dieses Grundgerüst dient als recht solider Startpunkt um mit den verschiedenen Systemen klar zu kommen.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2012/02/web-boilerplates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML &amp; CSS: Vollbild Hintergrund</title>
		<link>http://xlkstyle.com/2012/02/html-css-vollbild-hintergrund/</link>
		<comments>http://xlkstyle.com/2012/02/html-css-vollbild-hintergrund/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 12:46:28 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=561</guid>
		<description><![CDATA[Das Web ist ja bekanntlich voll mit Tipps zu HTML &#38; CSS, und für gewöhnlich gibt es zu einer Problemstellung auch viele verschiedene Lösungswege. Meistens probiert man einige davon aus und verwendet dann den einen der am besten funktioniert oder am einfachsten eingebaut ist. Ich bin da kein Stückchen anders und habe in meiner Sammlung [...]]]></description>
			<content:encoded><![CDATA[<p>Das Web ist ja bekanntlich voll mit Tipps zu HTML &amp; CSS, und für gewöhnlich gibt es zu einer Problemstellung auch viele verschiedene Lösungswege. Meistens probiert man einige davon aus und verwendet dann den einen der am besten funktioniert oder am einfachsten eingebaut ist.</p>
<p>Ich bin da kein Stückchen anders und habe in meiner Sammlung von Snippets eine Methode um einer Seite ein Hintergrundbild zu verpassen und es auf die gesamte verfügbare Fläche des Fensters zu strecken (in diesem Fall leider mit unbekannter Quelle).</p>
<pre>
<div class="codesnip-container" >html
{
    background: url(pic.jpg) no-repeat center center fixed;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader
	    (src='pic.jpg', sizingMethod='scale');
    -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader
	    (src='pic.jpg', sizingMethod='scale')";
}</div>
</pre>
<p>Die Vorteile sind schnell erzählt:</p>
<ul>
<li>Kommt ohne JavaScript aus</li>
<li>Funktioniert bei ausreichend vielen Browsern, selbst ältere InternetExplorer Versionen kommen durch den <em>filter</em>-Fallback damit klar</li>
<li>Das Seitenverhältnis des Bildes bleibt erhalten, überhängende Abschnitte am Rand sind einfach nicht sichtbar</li>
<li>Die Lösung ist leicht erklärt, schnell eingebaut und nur wenige Zeilen lang</li>
</ul>
<p>Doch ist leider nicht alles Gold was glänzt. Ja, das Bild wird auch in älteren IE Versionen korrekt dargestellt. Das stand auch so am Fundort und da ich mich nicht nur auf geschriebenes verlasse sondern auch gerne selber teste, ab ins Adobe BrowserLab damit &amp; zu paar anderen Diensten die mir einen Screenshot der Page mit einer gegebenen Browserversion erstellen.</p>
<p>Alles wird korrekt dargestellt, so weit so gut. Bis die Seite live war und ich darauf hingewiesen wurde, dass im IE8 die Links nicht funktionieren. Klasse, live getestet hatte ich wegen Zeitdruck nur mit dem bei mir installierten IE10 und der ist ein wunderbares Beispiel dafür, dass die ganze Emulierung älterer IE-Versionen nicht taugt.</p>
<p>Nach einigem Testen stellte sich heraus, dass eben die <em>filter/-ms-filter</em> Fallbacks bewirken, dass sich das Hintergrundbild scheinbar über die gesamte Page legt und die Klicks deswegen nicht an den Links ankommen. <a href="http://www.sitepoint.com/forums/showthread.php?668286-Clickable-link-area-in-Horiz-Menu-IE-problem" target="_blank">Ähnliche Probleme</a> gibt es auch an <a href="http://www.sitepoint.com/forums/showthread.php?751014-clickable-links-behind-the-fixed-div-on-top-of-website" target="_blank">anderen Ecken</a> mit <em>filter</em>.</p>
<p>Da geht sie hin, die schöne heile <em>„ich funktioniere in allen Browsern“</em>-Lösung. Die filter-Fallbacks sind nun verschwunden, zusätzlich sorgt ein <em>&lt;!&#8211;[if lt IE 9]&gt;</em> dafür, dass alle InternetExplorer bis zur Version 8 einen ganz normalen Hintergrund angezeigt bekommen. Schade :/</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2012/02/html-css-vollbild-hintergrund/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zombie Prozesse abschießen</title>
		<link>http://xlkstyle.com/2012/02/zombie-prozesse-abschiesen/</link>
		<comments>http://xlkstyle.com/2012/02/zombie-prozesse-abschiesen/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 20:16:14 +0000</pubDate>
		<dc:creator>Paweł Rupek</dc:creator>
				<category><![CDATA[Kurz]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=547</guid>
		<description><![CDATA[Komisch, dass es mir bisher nicht passiert ist, aber ich musste Heute zum ersten Mal unter Linux einen „Zombie“ Prozess abschießen. Auf den Servern habe ich solche Prozesse noch nicht gesehen und auf dem Desktop höchstens 1-2 Mal, ohne aber dass es sonderlich gestört hätte, denn beim nächsten Reboot sind sie ja weg. Heute kam [...]]]></description>
			<content:encoded><![CDATA[<p>Komisch, dass es mir bisher nicht passiert ist, aber ich musste Heute zum ersten Mal unter Linux einen „<a title="Zombie process - Wikipedia" href="http://en.wikipedia.org/wiki/Zombie_process" target="_blank">Zombie</a>“ Prozess abschießen. Auf den Servern habe ich solche Prozesse noch nicht gesehen und auf dem Desktop höchstens 1-2 Mal, ohne aber dass es sonderlich gestört hätte, denn beim nächsten Reboot sind sie ja weg.</p>
<p>Heute kam der Neustart allerdings nicht in Frage, und bevor ich nochmal nach einer besseren Lösung als kill -9 PID suchen muss, hier der (fast) 100%ige Weg zur Erinnerung.</p>
<ol>
<li>Mit ps x die PID des Prozesses ausfindig machen</li>
<li>Den Prozessbaum nach dieser PID durchsuchen: ps -ef &#8211;forest | less</li>
<li>Mit kill PID‘ den Prozess des darüberliegenden Elternknotens beenden</li>
</ol>
<p>Das dürfte einen Großteil der Zombies erledigen, ansonsten ist es immer einge gute Idee sich die Mounts und die laufenden Dienste nochmal anzuschauen. Eine vergleichbare Lösung gibt es <a title="How to kill a defunct process (most of the time)" href="http://www.cts.wustl.edu/~allen/kill-defunct-process.html" target="_blank">am Fundort</a> im übrigen auch  für Solaris. Nicht vergessen, dass dieser Spaß root-Rechte erfordert, sprich sudo voranstellen oder anderweitig Administrationsrechte organisieren. Wobei gegen <a title="Killing a defunct process on UNIX system" href="http://stackoverflow.com/questions/356722/killing-a-defunct-process-on-unix-system" target="_blank">manche Zombies</a> aber noch kein Kraut gewachsen ist.</p>
<p>PS: totgesagte Blogs leben länger :)</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2012/02/zombie-prozesse-abschiesen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8 Preview: Stocks &amp; DAX</title>
		<link>http://xlkstyle.com/2011/10/windows-8-preview-stocks-dax/</link>
		<comments>http://xlkstyle.com/2011/10/windows-8-preview-stocks-dax/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 16:34:28 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=525</guid>
		<description><![CDATA[Derzeit teste ich die Developer Preview von Windows 8 und VisualStudio 11. Da beide Vorabversionen sehr stabil laufen verbringe ich praktisch keine Zeit mehr in Windows 7. Wozu auch, denn es wäre aus meiner Sicht ein unnötiger Reboot um zu Win7 oder Linux zu wechseln. Außerdem möchte ich auf das ein oder andere Feature nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Derzeit teste ich die Developer Preview von Windows 8 und VisualStudio 11. Da beide Vorabversionen sehr stabil laufen verbringe ich praktisch keine Zeit mehr in Windows 7. Wozu auch, denn es wäre aus meiner Sicht ein unnötiger Reboot um zu Win7 oder Linux zu wechseln. Außerdem möchte ich auf das ein oder andere Feature nicht mehr verzichten.</p>
<p>Eines dieser Features ist die Stocks genannte Metro App. Diese hat allerdings noch keine Suche, und so war ich vorerst nicht in der Lage den DAX als Index hinzuzufügen. Beim Hinzufügen einfach <strong>DAX</strong> zu schreiben funktioniert leider nicht, es wird &#8220;Unable to find that symbol&#8221; gemeldet.</p>
<p>Im Kopf hatte ich noch das Symbol <strong>^GDAXI</strong>. Und tatsächlich, das wurde akzeptiert. Nur werden hierfür leider keine Werte geliefert. Auch google konnte mir nicht weiterhelfen. Die Idee war nun das gleiche Symbol zu verwenden wie MSN auf der Finance Seite. Das klappte auch.</p>
<p><strong>Um also den DAX hinzuzufügen:</strong></p>
<ol>
<li>Rechtsklick in der Metro App</li>
<li>Auf das + Klicken: &#8220;Add Stock&#8221;</li>
<li>Als Symbol <span style="color: #000000;"><strong>$DE:DAX</strong></span> eintippen und auf Add klicken</li>
<li>Optional: wieder ein Rechtsklick, gefolgt von einem Klick auf die Stecknadel &#8220;Pin Stock&#8221;. Im darauffolgenden Dialog eine beliebige Bezeichnung eintippen und der DAX erscheint im Metro-Menü</li>
</ol>
<p>Hoffe damit irgendwem ein wenig zu helfen. Meine ersten Eindrücke von Windows 8 werde ich demnächst zusammenfassen, möchte das ganze erst noch ein wenig einwirken lassen. Die ersten Eindrücke zu VS11 und den neuen C# &amp; .NET Features wird es auch geben.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/10/windows-8-preview-stocks-dax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s Code: StructLayout</title>
		<link>http://xlkstyle.com/2011/07/lets-code-structlayout/</link>
		<comments>http://xlkstyle.com/2011/07/lets-code-structlayout/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 19:49:17 +0000</pubDate>
		<dc:creator>Paweł Rupek</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=499</guid>
		<description><![CDATA[Und weiter geht&#8217;s mit der kleinen Serie. Analog zu Let&#8217;s Play Serien, in denen Personen spontan drauf los spielen und sich dabei aufnehmen, code ich einfach einige Zeilen C#, mit offenem Ziel. Im vergangenen Beitrag habe ich gezeigt wie man mit yield return ein IEnumerable&#60;T&#62; als eine Art Stream erzeugen kann. Bevor ich aber die [...]]]></description>
			<content:encoded><![CDATA[<p>Und weiter geht&#8217;s mit der kleinen Serie. Analog zu <a href="http://www.youtube.com/results?search_query=lets+play&#038;aq=f" target="_blank">Let&#8217;s Play</a> Serien, in denen Personen spontan drauf los spielen und sich dabei aufnehmen, code ich einfach einige Zeilen C#, mit offenem Ziel.</p>
<p>Im <a href="http://xlkstyle.com/2011/07/lets-code-yield-in-c/" title="Let’s Code: “yield” in C#" target="_blank">vergangenen Beitrag</a> habe ich gezeigt wie man mit <strong>yield return</strong> ein IEnumerable&lt;T&gt; als eine Art Stream erzeugen kann. Bevor ich aber die Vorteile davon aufzeige, muss noch das IShortTuple Interface implementiert werden. Als zusätzliche Einschränkung wählen wir noch, dass diese Implementierung sich in einem Dictionary gut verhalten soll. Das heißt wir wollen möglichst wenige Kollisionen der Hashwerte. Falls es doch zu Kollisionen kommt muss die Equals-Methode herhalten. Gleichheit definieren wir als Wertgleichheit der beiden Properties.</p>
<pre>
<div class="codesnip-container" >interface IShortTuple
{
    ushort A { get; set; }
    ushort B { get; set; }
}</div>
</pre>
<p>Nun gibt es im <a href="http://msdn.microsoft.com/en-us/library/dd268536%28VS.100%29.aspx" target="_blank">.NET Framework bereits ein Tupel</a>, jedoch verhält es sich eher grottig in Dictionaries (<a href="http://msdn.microsoft.com/en-us/magazine/dd942829.aspx" target="_blank">warum sich Tuple&lt;&#8230;&gt; so und nicht anders verhält erklärt Microsoft mit dem Einsatzzweck</a>). Jedenfalls scheint das .NET Tuple die Hashcodes der einzelnen Elemente zu nehmen und mit folgender Funktion zu verwursteln (<a href="http://reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/Tuple@cs/1305376/Tuple@cs" target="_blank">die Macht der Reflection möge mit uns sein</a>)</p>
<pre>
<div class="codesnip-container" >// Yepp, this is why you should not use tuples of numeric values as dictionary keys
internal static int CombineHashCodes(int h1, int h2)
{
    return (((h1 << 5) + h1) ^ h2);
}</div>
</pre>
<p>Das Taugt für unseren Einsatzzweck natürlich wenig. Also schreiben wir eine eigene Implementierung, welche bei einem so kleinen Interface kaum der Rede wert ist. GetHashCode() gibt einen Integer zurück und da wir nur zwei shorts haben, können wir eindeutige (im Sinne von &#8220;ohne Kollisionen&#8221;) Hash-Codes für unsere Implementierung berechnen. Hierzu verschieben wir einen der beiden Werte um 16 Bit und &#8220;ver<em>oder</em>n&#8221; (sorry für das Wort) die Beiden zu einem Integer.</p>
<pre>
<div class="codesnip-container" >struct BitShiftTuple : IShortTuple
{
    public ushort A { get; set; }
    public ushort B { get; set; }

    public override int GetHashCode()
    {
        return A | (B &lt;&lt; 16);
    }
}</div>
</pre>
<p>Mit einer vergleichbaren Implementierung war ich jetzt eine ganze Weile lang zufrieden. Um ehrlich zu sein, war ich gar nicht auf der Suche nach einer besseren Lösung. Beim Stöbern in der MSDN Doku bin ich jedoch auf das <a href="http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx" target="_blank">StructLayout Attribut</a> gestoßen. Hierdurch kann die Anordnung der Felder in einem Struct explizit angegeben werden, wobei auch Überlappungen möglich sind. Perfekt, so können wir beispielsweise ein Struct definieren, welches Felder für A und B sowie für den Hash hat. Dabei legen wir A und B so in dem Struct aus, dass A den ersten 16 Bit des Structs und B den zweiten 16 Bit entspricht:</p>
<pre>
<div class="codesnip-container" >[StructLayout(LayoutKind.Explicit)]
internal struct LayoutTuple : IShortTuple
{
    [FieldOffset(0)]
    private int hash;

    [FieldOffset(0)]
    private ushort a;

    [FieldOffset(2)]
    private ushort b;

    public override int GetHashCode()
    {
        return this.hash;
    }

    public ushort A
    {
        get { return this.a; }
        set { this.a = value; }
    }

    public ushort B
    {
        get { return this.b; }
        set { this.b = value; }
    }
}</div>
</pre>
<p>Den Hash müssen wir demnach gar nicht mehr berechnen. Die Frage die sich nun stellt ist ob uns dies tatsächlich einen Performance-Vorteil gibt. Ebenso muss das mit einer Implementierung verglichen werden, die sich vergleichbar verhält, aber ohne das explizite Layout des Structs auskommt. Das Thema für den nächsten Teil ist also ein 1&#215;1 des Profilings, ich freue mich schon :)</p>
<p>Um die obigen Methoden abzurunden sollte noch Equals überschrieben oder besser IEquatable implementiert werden, wobei der Code einfach nur die Hash-Werte vergleichen muss, falls die zu vergleichenden Objekte unser Interface implementieren (Vorsicht: das Interface gibt ansich nicht vor wie GetHashCode implementiert ist. CodeContracts sind als zukünftiges Thema aber bereits vorgemerkt).</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/07/lets-code-structlayout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s Code: &#8220;yield&#8221; in C#</title>
		<link>http://xlkstyle.com/2011/07/lets-code-yield-in-c/</link>
		<comments>http://xlkstyle.com/2011/07/lets-code-yield-in-c/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 20:23:32 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=490</guid>
		<description><![CDATA[C# gehört, so wie ich es erlebt habe, leider zu den Sprachen, die an Universitäten zu kurz kommen. Die Gründe hierfür (einer ist sicherlich Microsoft) sind vielseitig, sollen aber nicht Thema dieses Artikels sein. Ist man dann einmal fertig, wird man schnell feststellen, dass man ohne C# Kenntnisse leider einen recht großen Teil der Arbeitgeber [...]]]></description>
			<content:encoded><![CDATA[<p>C# gehört, so wie ich es erlebt habe, leider zu den Sprachen, die an Universitäten zu kurz kommen. Die Gründe hierfür (einer ist sicherlich Microsoft) sind vielseitig, sollen aber nicht Thema dieses Artikels sein. Ist man dann einmal fertig, wird man schnell feststellen, dass man ohne C# Kenntnisse leider einen recht großen Teil der Arbeitgeber nicht zufrieden stellen können wird. Ich selbst komme (aufgrund der Inhalte an der Uni) aus der Java Ecke, habe mich aber seit .NET 1.1 auch mit C# beschäftigt; seit einer ganzen Weile nun auch beruflich.</p>
<p>Ich möchte nun in einer kleinen Serie &#8211; mit offenem Ziel &#8211; kleine, coole und eventuell nicht jedem bekannte C# Features vorstellen. In mundgerechten Häppchen die in einen Feierabend passen: <strong>Let&#8217;s code</strong> :)</p>
<p>Nehmen wir nun kurz an wir wollen eine Liste erstellen. Der Inhalt spielt vorerst keine Rolle, wir müssen ihn nur irgendwie berechnen können. Um in diesem Beispiel mit irgendwas arbeiten zu können, erzeugen wir eine Reihe von Objekten, die durch folgendes Interface definiert sind</p>
<pre>
<div class="codesnip-container" >internal interface IShortTuple
{
    ushort A {get;set;}
    ushort B {get;set;}
}</div>
</pre>
<p>Sehr kreativ, ja. Wir erzeugen die Objekte wie folgt:</p>
<pre>
<div class="codesnip-container" >internal static IEnumerable&lt;T&gt; CreateTestCollection&lt;T&gt;(ushort size)
    where T : IShortTuple, new()
{
    IList&lt;T&gt; tmp = new List&lt;T&gt;();

    for (ushort i = 0; i &lt; size; i++)
    {
        for (ushort j = 0; j &lt; size; j++)
        {
            tmp.Add(new T() { A = i, B = j });
        }
    }

    return tmp;
}</div>
</pre>
<p>Die Einschränkung bezüglich der Größe ist willkürlich. Wer will aber schon bei solchen Beispielen lange auf Ergebnisse warten? Nun ist die Art wie die Objekte erzeugt werden nicht grade optimal. Wir erzeugen eine Liste, füllen diese von A bis Z und geben sie anschließend an einem Stück zurück. Sprich: der gesamte Thread wartet auf unsere Berechnung. Wenn wir für dieses Beispiel ferner annehmen, dass diese Daten einfach in die Konsole geschrieben werden sollen, wird klar, warum das Vorgehen ungeschickt ist: die erste Ausgabe erfolgt nachdem alles berechnet wurde obwohl wir die ersten Teile bereits kennen.</p>
<p>Nun steht in der Methodensignatur IEnumerable&lt;T&gt;, wir könnten also dieses Interface implementieren und dann auch gleich noch IEnumerator&lt;T&gt; um unser gewünschtes Verhalten zu erreichen. Insgesamt etwas aufwändig, denn es geht viel einfacher:</p>
<pre>
<div class="codesnip-container" >internal static IEnumerable&lt;T&gt; CreateDebugCollection&lt;T&gt;(ushort size)
    where T : IShortTuple, new()
{
    for (ushort i = 0; i &lt; size; i++)
    {
        for (ushort j = 0; j &lt; size; j++)
        {
            yield return new T() { A = i, B = j };
        }
    }
}</div>
</pre>
<p>Durch das <strong>yield</strong> Keyword wird dem Compiler mitgeteilt, dass es sich bei dieser Funktion um einen Iterator-Block handelt. Hierbei werden die einzelnen Werte zurückgegeben sobald sie verfügbar sind, in etwa wie in einem Stream. Iteriert man nun über dieses IEnumerable und schreibt dabei alle Werte in die Konsole wird man merken, dass es keine merkbare Wartezeit gibt bis die ersten Zeilen erscheinen.</p>
<p>In den folgenden Artikeln werde ich verschiedene Aspekte dieser Code-Snippets detailierter betrachten. Unter anderem wie man das Interface IShortTuple am geschicktesten implementiert, einige Messungen mit dem Profiler und einer Priese PLINQ.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/07/lets-code-yield-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DSL Speedtest</title>
		<link>http://xlkstyle.com/2011/05/dsl-speedtest/</link>
		<comments>http://xlkstyle.com/2011/05/dsl-speedtest/#comments</comments>
		<pubDate>Sun, 29 May 2011 13:28:49 +0000</pubDate>
		<dc:creator>Paweł Rupek</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=480</guid>
		<description><![CDATA[Seiten auf denen man die Geschwindigkeit des eigenen Internetanschlusses testen kann gibt es bekanntlich wie Sand am Meer. Das diese Ergebnisse nicht immer aussagekräfig sind dürfte auch bekannt sein, spätestens wenn ein Internetanbieter die Ergebnisse seines eigenen Tests gegenüber seinen Kunden schönredet (ja soll es alles schon gegeben haben :)). Es scheint zwar gar nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Seiten auf denen man die Geschwindigkeit des eigenen Internetanschlusses testen kann gibt es bekanntlich wie Sand am Meer. Das diese Ergebnisse nicht immer aussagekräfig sind dürfte auch bekannt sein, spätestens wenn ein Internetanbieter die Ergebnisse seines eigenen Tests gegenüber seinen Kunden schönredet (ja soll es alles schon gegeben haben :)). Es scheint zwar gar nicht erwähnenswert, aber ich bin Heute auf zwei besonders abgefahrene Tests gestoßen, der erste aus dem Hause <a href="http://www.unitymedia.de/produkte/speedtest.html" target="_blank">Unitymedia</a> und der zweite aus dem Hause <a href="http://www.kabeldeutschland.de/" target="_blank">Kabel Deutschland</a>.</p>
<p>Aber zuerst ein paar Worte zu meiner Leitung. Ich surfe mit &#8220;bis zu 18Mbit/s&#8221;, wenn ich 14 bis 16Mbit/s behaupte ist das aber realistischer. Besonders in Anbetracht der Tatsache, dass gute 16000er Leitungen auch 1-2Mbit hinter dieser Höchstmarke zurückbleiben (nicht gute Leitungen um ein ganzes Stückchen mehr). Wie testet man das aber wenn Speedtests nicht akkurat sind? Ein guter Anhaltspunkt ist die Geschwindigkeit die sich einpendelt wenn man eine etwas größere Datei läd. Und bitte nicht die größte Zahl aussuchen die kurzfristig angezeigt wird sondern mit dem Selbstbetrug aufhören und an das glauben was sich nach einer ganzen Weile einpendelt. So sieht man auf dem ersten Screenshot wie die Übertragung bei 3,1MB/s (= 24,8Mbit/s) einen Peak hat, was aber weit über den Möglichkeiten meiner Leitung liegt und sich später bei 1,7-1,8MB/s einpendelt (= 13,6 bis 14,4Mbit/s).</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/05/1.png"><img class="aligncenter size-full wp-image-481" title="Downstream" src="http://xlkstyle.com/wp-content/uploads/2011/05/1.png" alt="Download Geschwindigkeit: Transfer von neutralem Server via SFTP" width="405" height="88" /></a></p>
<p>Ferner wird gerne angezeigt wie hoch (bzw. niedrig) der Ping ist. Gemeint ist damit die Latenz zwischen Absenden eines Pakets und dem Empfang der Antwort. Hier gilt je weniger desto besser. Dieser Wert lässt sich mit praktisch jedem PC nachmessen indem der Befehl ping gefolgt von einem Ziel eingetragen wird. Dies funktioniert mit Windows Systemen genau so, hierzu wird die Eingabeaufforderung gestartet (Visa/7: Windows-Taste -&gt; cmd -&gt; Enter; XP: Start -&gt; Ausführen -&gt; cmd.exe). Als Ziele eignen sich &#8220;google.de&#8221; oder die Domain des Internetanbieters oder jede größere Website. Mein Ping schwankt, je nach Ziel, zwischen 15ms und 30ms (außerhalb Deutschlands durchaus mal mehr).</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/05/2.png"><img class="aligncenter size-full wp-image-482" title="Ping zu google.de und rupek.net" src="http://xlkstyle.com/wp-content/uploads/2011/05/2.png" alt="Ping zu google.de und rupek.net" width="430" height="206" /></a></p>
<p>Aber nun zu unseren Speedtests. Die beiden Tests decken zwei Extremfälle ab, der erste nimmt eine zu geringe Datenmenge für die Übertragung, das Ergebnis ist stark nach Oben verfälscht. Dem Zweiten möchte ich fast vorsätzliche Täuschung unterstellen, das ist aber meine persönliche Meinung und die Messgruppe ist mit einer Person auch relativ gering. Es kann natürlich auch irgendwo anders ein Problem bestehen.</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/05/3.png"><img class="aligncenter size-full wp-image-483" title="Unitymedia Speedtest" src="http://xlkstyle.com/wp-content/uploads/2011/05/3.png" alt="Unitymedia Speedtest" width="431" height="256" /></a></p>
<p>Der Speedtest von Unitymedia zeigt mir im Schnitt um die 50Mbit/s an, das wären um die 6MB/s. Würde ich dies glauben sollte ich gleich mal eine Packung Merci an meinen ISP versenden, ein sensationelles Ergebnis. Natürlich aber leider falsch. Die anderen Werte sehen realistisch aus bei nomalen Servern in Deutschland.</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/05/4.png"><img class="aligncenter size-full wp-image-484" title="Speedtest KabelDeutschland" src="http://xlkstyle.com/wp-content/uploads/2011/05/4.png" alt="Speedtest KabelDeutschland" width="404" height="195" /></a></p>
<p>Bei Kabel Deutschland sehen wir ein deutlich anderes Ergebnis. 3,135Mbit/s (hier würden Programme schon kB/s als Einheit wählen). So viel schafft sogar mein Handy, nein es schafft sogar mehr. Der Wert für die Upload-Geschwindigkeit ist ebenfalls etwas arg schlecht. Vom Ping müssen wir gar nicht reden, vor wenigen Tagen hatte ich einen besseren Wert zum Rechner meines Bruders (und der hat sicherlich eine schlechtere Anbindung als ein Server bei Kabel Deutschland). In anderen Worten: M-Net zu Vodafone/Arcor-Anwender war konstant unter 50ms, Kabel Deutschland zeigt mir über 60ms.</p>
<p>Unrealistische Werte? Messen wir doch mal selbst nach:</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/05/5.png"><img class="aligncenter size-full wp-image-485" title="Ping zu KabelDeutschland" src="http://xlkstyle.com/wp-content/uploads/2011/05/5.png" alt="Ping zu KabelDeutschland" width="445" height="109" /></a></p>
<p>Hört hört, 28ms. Und auch beim Download bekomme ich auf Kabel Deutschland Servern deutlich mehr hin als beim Speedtest. Im Endeffekt bleibt es jeder Person selbst überlassen ob sie den Messergebnissen und Studien derjenigen glaubt die im gleichen Atemzug ein entsprechendes Produkt verkaufen wollen. Ich bin mir aber sicher, dass Kabel Deutschland eine ganze Stange an Faktoren aufzählen kann die solche Ergebnisse rechtfertigen (und warum ich unrecht habe und sie hier einfach nur schlechtmachen will, oder so).</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/05/dsl-speedtest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grundlagen: i++ &amp; ++i</title>
		<link>http://xlkstyle.com/2011/04/grundlagen-iplusplus-plusplusi/</link>
		<comments>http://xlkstyle.com/2011/04/grundlagen-iplusplus-plusplusi/#comments</comments>
		<pubDate>Mon, 11 Apr 2011 18:57:20 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=466</guid>
		<description><![CDATA[Was ist eigentlich der Unterschied zwischen i++ und ++i? So gesehen gehört das ja zum Grundwissen eines Programmierers. Ich bin mir jedoch recht sicher, dass zumindest der ein oder andere es bis vor Kurzem noch nicht wusste ;) Informatik Anfänger müssen sich zumindest nicht dafür schämen die Antwort gegooglet zu haben. Die folgenden Beispiele sind [...]]]></description>
			<content:encoded><![CDATA[<p>Was ist eigentlich der Unterschied zwischen <strong>i++</strong> und <strong>++i</strong>? So gesehen gehört das ja zum Grundwissen eines Programmierers. Ich bin mir jedoch recht sicher, dass zumindest der ein oder andere es bis vor Kurzem noch nicht wusste ;)</p>
<p>Informatik Anfänger müssen sich zumindest nicht dafür schämen die Antwort gegooglet zu haben. Die folgenden Beispiele sind in C# geschieben, gelten jedoch im Prinzip auch für Java.</p>
<p>Sowohl <strong>++i</strong> als auch <strong>i++</strong> inkrementieren i um 1. Der Unterschied ist das &#8220;<em>Ergebnis</em>&#8221; dieser Auswertung. Damit meine ich nicht das Ergebnis, dass i um eins größer geworden ist, sondern den Rückgabewert. Man könnte ja auf die Idee kommen <em>x = ++i</em> zu schreiben und <em>y = i++</em>. In diesem Fall wären x und y nicht gleich. <strong>++i</strong> inkrementiert zuerst <strong>i </strong>und wird dann zugewiesen,<strong> i++</strong> wird zuerst zugewiesen und dann inkrementiert. Die Variable <em>x </em>wäre in diesem Beispiel also um eins größer als <em>y</em>.</p>
<p>Als Funktion kann man sich das in etwa so vorstellen für <strong>i++</strong></p>
<pre>
<div class="codesnip-container" >static int VarPlusPlus(ref int variable)
{
    int tmp = variable;
    variable += 1;
    return tmp;
}</div>
</pre>
<p>und wie folgt für <strong>++i</strong>.</p>
<pre>
<div class="codesnip-container" >static int PlusPlusVar(ref int variable)
{
    variable += 1;
    return variable;
}</div>
</pre>
<p>Das <strong>ref</strong> bedeutet übrigens, dass i als Referenz übergeben wird und Änderungen in der Funktion an i auch außerhalb gültig sein werden (so wie man es von Objekten gewohnt ist). Aber das zu erklären ist ein anderes Thema.</p>
<p>Falls der Unterschied weiterhin nicht klar sein sollte, kann man es sich an einem kleinen Test verbildlichen. Unser Code:</p>
<pre>
<div class="codesnip-container" >Console.WriteLine("i++");
int i = 0;
Console.WriteLine("A: " + i++);
Console.WriteLine("B: " + i);

Console.WriteLine("++i");
i = 0;
Console.WriteLine("A: " + ++i);
Console.WriteLine("B: " + i);</div>
</pre>
<p>und für die beiden Funktionen von oben</p>
<pre>
<div class="codesnip-container" >Console.WriteLine("VarPlusPlus");
i = 0;
Console.WriteLine("A: " + VarPlusPlus(ref i));
Console.WriteLine("B: " + i);

Console.WriteLine("PlusPlusVar");
i = 0;
Console.WriteLine("A: " + PlusPlusVar(ref i));
Console.WriteLine("B: " + i);</div>
</pre>
<p>Und wie wirkt sich das auf Schleifen aus? Die kurze Antwort lautet: in C# kein bischen. Die lange Antwort braucht etwas mehr Platz. Zuerst der einfache Teil. Das Ergebnis der beiden folgenden Schleifen ist gleich, da der dritte Block der for-Schleife separat ausgewertet wird und die inkrementierte Variable verwendet wird, nicht der oben erwähnte Rückgabewert (es könnte dort ja auch x += 4 stehen). </p>
<pre>
<div class="codesnip-container" >Console.Write("i++ loop");
for (i = 0; i < 5; i++)
{
    Console.Write(" " + i);
}

Console.WriteLine();
Console.Write("++i loop");
for (i = 0; i < 5; ++i)
{
    Console.Write(" " + i);
}</div>
</pre>
<p>Man wird trotzdem häufiger über Menschen stolpern, die ++i in for-Schleifen bevorzugen. Die Gründe hierfür sind verschieden, es fängt mit der persönlichen Preferenz an und endet mit Performance-Argumenten. So wird es hier und da heißen, dass i++ über ++i implementiert wird und i++ intern eine Kopie benötigt (vergleichbar mit den beiden oben erwähnten Funktionen).</p>
<p>Betrachtet man C# so ist dies allerdings keine wahre Aussage, <a href="http://www.moserware.com/2008/02/for-loops-using-i-i-enumerators-or-none.html">zumindest nachdem der C# Compiler drübergelaufen ist</a>. Denn das Resultat ist in C# völlig identisch und ich würde behaupten, dass dies auch für die meisten anderen Hochsprachen gelten wird.</p>
<p>Woher kommt dieser &#8220;Mythos&#8221; also? Lässt man den Personenkreis der einfach &#8220;anders&#8221; sein möchte mal außen vor, so werden es meistens ehemalige C++ Programmierer sein die (beim Namen C++ ausgerechnet) ++i bevorzugen. Denn gerade dort gehört es zum guten Ton die Präfix-Schreibweise zu verwenden. Ohne es zu wissen, würde ich zwar kurzerhand behaupten, dass die zusätzliche Kopie bei einem Integer auch bei C++ vom Compiler &#8220;wegoptimiert&#8221; wird, jedoch muss man ein wichtiges Detail beachten. C++ unterstüzt das Überschreiben von Operatoren und im Vergleich zu C# kann dort eben auch das ++ überschrieben werden. Und dafür, dass diese zusätzliche Kopie auch bei komplexen Klassen und in allen Fällen wegoptimiert wird, würde ich meine Hand nicht ins Feuer legen. Erst recht nicht wenn es um die Compiler vor 10, 20 oder mehr Jahren geht.</p>
<p>Lasst euch in C# oder Java also nicht von i++ oder ++i in for-Schleifen verwirren, da passiert nichts magisches. Der Programmierer hat sich einfach über Jahre an die Prefix-Schreibweise gewöhnt, oder möchte einfach ein wenig besonders sein :)</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/04/grundlagen-iplusplus-plusplusi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Von Plagiaten und anderem Übel</title>
		<link>http://xlkstyle.com/2011/02/von-plagiaten-und-anderem-ubel/</link>
		<comments>http://xlkstyle.com/2011/02/von-plagiaten-und-anderem-ubel/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 12:06:42 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=410</guid>
		<description><![CDATA[Ja, ich bin der Meinung, dass zu Guttenberg zu unrecht den Doktortitel vor seinem Namen getragen hat und ja er sollte sich meiner Meinung nach aus der Politik verabschieden. Die CDU und das Label &#8220;zu Guttenberg&#8221; haben sich allerdings schon mit ganz anderen Themen unwählbar gemacht, da fällt die Doktorarbeit des Barons gar nicht mehr [...]]]></description>
			<content:encoded><![CDATA[<p>Ja, ich bin der Meinung, dass zu Guttenberg zu unrecht den Doktortitel vor seinem Namen getragen hat und ja er sollte sich meiner Meinung nach aus der Politik verabschieden. Die <a title="STOPP" href="http://knowyourmeme.com/memes/zensursula" target="_blank">CDU</a> und das Label &#8220;<a href="http://www.netzpolitik.org/2010/tatort-internet-kinderschanderjagd-auf-rtl2/" target="_blank">zu Guttenberg</a>&#8221; haben sich allerdings schon mit ganz anderen Themen unwählbar gemacht, da fällt die Doktorarbeit des Barons gar nicht mehr so sehr ins Gewicht.</p>
<p>Es geht mir aber um etwas ganz anderes, denn zu Guttenberg wird derzeit zum alleinigen Sündenbock gemacht. Und obwohl die derzeitige Diskussion für viele Personen und Institutionen der Anlass hätte sein können mal ordentlich vor der eigenen Tür zu fegen, scheinen genau diese Personen jetzt nochmal ordentlich &#8211; zu gut Deutsch &#8211; „auf die Kacke zu hauen“. Selbst die katholische Kirche hat im Jahr 2010 mehr Willen zur Aufdeckung von Missständen gezeigt. Geschichten von Doktoranden, die nach 4 Jahren Nichtstun trotzdem ihren PhD bekommen oder von solchen, die ohne Hiwis keine Zeile Code hinbekommen hätten gibt es zu genüge, einige davon kenne ich aus erster Hand.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="655" height="398" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/6cDZuQBtpVA?fs=1&amp;hl=de_DE" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="655" height="398" src="http://www.youtube.com/v/6cDZuQBtpVA?fs=1&amp;hl=de_DE" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Heute früh sah ich ein Video das in der Kategorie „Wer im Glashaus sitzt&#8230;“ ganz weit oben rangiert. Es ist das Statement von Prof. Oliver Lepsius, seines Zeichens Staatsrechtler in Bayreuth, zur Causa Guttenberg. Prof. Lepsius geht mit dem Baron sehr scharf ins Gericht:</p>
<blockquote><p>„Für mich steht außer Frage, dass – Herr zu Guttenberg ein Betrüger ist. Er hat planmäßig plagiiert, er hat eine Kollage von Plagiaten angefertigt.“</p></blockquote>
<p>Gut(t) (sorry), <a href="http://de.guttenplag.wikia.com/wiki/GuttenPlag_Wiki" target="_blank">der Aktuelle Stand des GuttenPlag Wikis scheint das erstmal zu bestätigen</a>. Und auch sonst könnte dieses Interview &#8211; beim am Sonntag Morgen zugegeben recht müden Zuschauer &#8211; den Eindruck hinterlassen, dass hier endlich mal einer das sagt was gesagt werden muss.</p>
<p>Aber Moment mal, Bayreuth? Staatsrecht? Stimmt ja, da war der Baron, und grade aus Bayreuth kommt dann eine solche Antwort auf die Frage: &#8220;<cite>Wenn ein Student bei Ihnen eine solche Arbeit abliefern würde, mit den objektiven Passagen die von Anderen abgeschrieben worden sind, was würden Sie dem sagen wenn er sagen würde das hätte er gar nicht bemerkt?</cite>&#8220;:</p>
<blockquote><p>„Ich würde ihn auslachen. [...] Wir reden [über] jemanden, der eine Arbeit abgibt am Ende eines langjährigen Promotionsverhältnisses, am Ende von jahrelangen Gesprächen mit dem Betreuer.“</p></blockquote>
<p>Die Frage ist doch, warum wurde Guttenberg nicht ausgelacht? Hat in diesem Fall nicht das gesamte System versagt? Wie kann jemand eine „<em>Kollage von Plagiaten</em>“ abgeben, nachdem er jahrelang in engem Kontakt mit seinem Doktorvater stand? Noch bitterer wird die Geschichte <a href="http://www.forschungsmafia.de/blog/2011/02/21/kriminelle-zitierpraktiken-deutscher-professoren/" target="_blank">wenn man auch die Abgründe der „Scientific Community“ in Deutschland kennt</a>. Ich weiß, dass sich der Text dort anfangs so liest als hätte ein böser Professor dem Autor den Lolli geklaut, trotz aller Skepsis gehe ich mittlerweile aber davon aus, dass die dort geschilderten Sachverhalte der Wahrheit entsprechen (ich würde zumindest nicht behaupten, dass soetwas unmöglich erscheint).</p>
<p>In einer Randnotiz sagt Prof. Lepsius noch, dass ihn ein psychologisches Gutachten interessieren würde. Mich interessiert wie man sich so weit aus dem Fenster lehnen kann, wenn das eigene Nest grade ziemlich mies riecht. Ich bin zwar kein Psychologe, aber es sieht für mich auf allen Seiten (Guttenberg, Uni, Politik) nach genau dem selben Verhalten aus wie es der ein oder andere Banker vor nicht all zu langer Zeit an den Tag gelegt hat. Besonders wenn man sich noch folgende Aussage auf der Zunge zergehen lässt (zusammen mit meinem leckeren Sonntagsfrühstück):</p>
<blockquote><p>Ich glaube aber, dass [...] aus dieser Situation gestärkt hervorgehen wird. [...] Und es werden die Konsequenzen gezogen. Die Gremien [...] haben schnell und solide gehandelt. Insofern können Sie auch sagen, ist die Welt auch wieder in Ordnung. Ich meine wo Menschen handeln, passieren Fehler.</p></blockquote>
<p>&#8230; und sorry nochmal wegen der Milliarden an Steuergeldern mit denen wir gerettet werden mussten. Schuld waren aber eh die anderen.</p>
<p>Und bevor mir ein peinlicher Fehler unterläuft und ich <span style="text-decoration: line-through;">temporär</span> für immer auf meinen MSc oder mein Blog verzichten muss, möchte ich noch <a href="http://twitter.com/Nin_99" target="_blank">Nine99</a> als Quelle des Videos und des Links zum Artikel auf forschungsmafia.de nennen.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/02/von-plagiaten-und-anderem-ubel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

