<?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>Nerd writing about nerdy things</description>
	<lastBuildDate>Thu, 13 Oct 2011 16:36:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<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>0</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>
		<item>
		<title>Verified by FAIL</title>
		<link>http://xlkstyle.com/2011/02/verified-by-fail/</link>
		<comments>http://xlkstyle.com/2011/02/verified-by-fail/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 18:37:27 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Kurz]]></category>
		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=402</guid>
		<description><![CDATA[Musste mich soeben beim Onlineeinkauf für das &#8220;Verified by VISA&#8221; Programm anmelden. Nachdem mich zuvor bereits einige Shops mit Zwangsanmeldungen nervten (ja, das ist für mich ein Grund einen anderen Shop zu bevorzugen &#8211; auch wenn ich dafür 1-2€ mehr Zahle) hat VISA den Vogel abgeschossen. Soll mir DAS ein Gefühl von Sicherheit vermitteln? Ehrlich? [...]]]></description>
			<content:encoded><![CDATA[<p>Musste mich soeben beim Onlineeinkauf für das &#8220;Verified by VISA&#8221; Programm anmelden. Nachdem mich zuvor bereits einige Shops mit Zwangsanmeldungen nervten (ja, das ist für mich ein Grund einen anderen Shop zu bevorzugen &#8211; auch wenn ich dafür 1-2€ mehr Zahle) hat VISA den Vogel abgeschossen.</p>
<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/02/verifiedbyfail.png"><img class="aligncenter" title="verifiedbyfail" src="http://xlkstyle.com/wp-content/uploads/2011/02/verifiedbyfail-655x282.png" alt="" width="620" /></a></p>
<p>Soll mir DAS ein Gefühl von Sicherheit vermitteln? Ehrlich? Ich habe eher das Gefühl, dass hier jemand versucht sich bei möglichem Kreditkartenmissbrauch geschickt aus jeglicher Verantwortung zu ziehen: &#8220;Sie haben Ihre Identität ja authentifiziert&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/02/verified-by-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>inb4 speed limit</title>
		<link>http://xlkstyle.com/2011/01/inb4-speed-limit/</link>
		<comments>http://xlkstyle.com/2011/01/inb4-speed-limit/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 21:39:23 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Kurz]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=396</guid>
		<description><![CDATA[Ab 5GB im Monat wird gedrosselt. In 6 Tagen habe ich bisher circa 2GB versurft, verdammtes YouTube. Eventuell sollte ich mein Surfverhalten an meinen derzeitigen Internetzugang anpassen. Ich freue mich schon auf die 64kb.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://xlkstyle.com/wp-content/uploads/2011/01/o2-Internet.png"><img class="aligncenter size-medium wp-image-397" title="o2-Internet" src="http://xlkstyle.com/wp-content/uploads/2011/01/o2-Internet-300x277.png" alt="" width="270" height="249" /></a></p>
<p>Ab 5GB im Monat wird gedrosselt. In 6 Tagen habe ich bisher circa 2GB versurft, verdammtes YouTube. Eventuell sollte ich mein Surfverhalten an meinen derzeitigen Internetzugang anpassen. Ich freue mich schon auf die 64kb.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2011/01/inb4-speed-limit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mod_rewrite</title>
		<link>http://xlkstyle.com/2010/12/mod_rewrite/</link>
		<comments>http://xlkstyle.com/2010/12/mod_rewrite/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 19:54:09 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Webdesign]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=389</guid>
		<description><![CDATA[Allem voran möchte ich erstmal festhalten, dass ich Software die in irgendeiner Form mit Apache zu tun hat immer sehr geschätzt habe. Nach meinem zweiten Anlauf in Sachen mod_rewrite, bei dem es wieder nicht so funktioniert wie man erwarten könnte, bin ich aber schon etwas über die verschwendete Zeit verärgert. Ähnlich ging es mir vorgestern [...]]]></description>
			<content:encoded><![CDATA[<p>Allem voran möchte ich erstmal festhalten, dass ich Software die in irgendeiner Form mit Apache zu tun hat immer sehr geschätzt habe. Nach meinem zweiten Anlauf in Sachen mod_rewrite, bei dem es wieder nicht so funktioniert wie man erwarten könnte, bin ich aber schon etwas über die verschwendete Zeit verärgert. Ähnlich ging es mir vorgestern beim ersten Anlauf, als ich feststellen musste, dass ich mich doch noch sehr über Software ärgern kann. Viel grüner Tee und eine Prise Anger-Management retteten dabei die umliegenden Gegenstände.</p>
<p>Heute bin ich systematischer an die Sache rangegangen. Mein Ziel besteht lediglich darin, eine Seitenaufrufe ohne www auf URIs mit www umzuleiten, fehlende &#8220;/&#8221; ans Ende der URIs zu kleben und www.domain.com/var1/var2/&#8230;/varn/ auf www.domain.com/index.php?args=var1/var2/&#8230;/varn/ umzuleiten. Also schnell ein Testsetup geschrieben, dass mir anzeigt was im PHP-Skript ankommt</p>
<div class="codesnip-container" >&lt;?php echo $_GET['args']; ?&gt;</div>
<p>und ran an die .htaccess. Die einzige Rahmenbedingung ist, dass im Ordner &#8220;static&#8221; nichts umgeschrieben werden soll, da lagern Bilder, CSS und JavaScript Dateien.</p>
<div class="codesnip-container" >RewriteCond %{REQUEST_URI} !static/<br />RewriteRule <strong>^(.*)$</strong> index.php?args=$1<br />Aufruf: www.domain.com/arg1/arg2/<br />Ergebnis: index.php</div>
<p>Was zur Hölle? Verstehe ich hier etwas essentielles nicht oder warum &#8211; zur Hölle :) &#8211; matcht ^(.*)$ nicht arg1/arg2/? Und wieso -zur Hölle &#8211; matcht es index.php? Das ist doch gar nicht in meiner URI?</p>
<p>Nach vielem rumspielen versuchte ich es dann mit dem folgenden:</p>
<div class="codesnip-container" >RewriteCond %{REQUEST_URI} !static/<br />RewriteRule <strong>^(.*)/$</strong> index.php?args=$1<br />Aufruf: www.domain.com/arg1/arg2/<br />Ergebnis: arg1/arg2</div>
<p>Natürlich ist das aber schlecht für URIs die nicht mit / enden. Erschwerend kommt hinzu, dass das Mischen mit den Regeln für die Weiterleitung zu URIs mit &#8220;/&#8221; noch weniger nachvollziehbare Ergebnisse liefert.</p>
<p>Der Punkt matcht definitiv auch &#8220;/&#8221;, warum geht das im ersten Beispiel also nicht? Auch wenn man ihn reinzieht geht es:</p>
<div class="codesnip-container" >RewriteCond %{REQUEST_URI} !static/<br />RewriteRule <strong>^(.*/)$</strong> index.php?args=$1<br />Aufruf: www.domain.com/arg1/arg2/<br />Ergebnis: arg1/arg2<strong>/</strong></div>
<p>Zum diesem Zeitpunkt war ich bereits verwirrt, es wurde aber noch besser, denn</p>
<div class="codesnip-container" >RewriteCond %{REQUEST_URI} !static/<br />RewriteRule ^(.*)[/]<strong>{0,1}</strong>$ index.php?args=$1<br />Aufruf: www.domain.com/arg1/arg2/<br />Ergebnis: index.php</div>
<p>aber</p>
<div class="codesnip-container" >RewriteCond %{REQUEST_URI} !static/<br />RewriteRule ^(.*)[/]<strong>{1,1}</strong>$ index.php?args=$1<br />Aufruf: www.domain.com/arg1/arg2/<br />Ergebnis: arg1/arg2</div>
<p>Das gilt auch für alle anderen denkbaren Schreibweisen der Quantoren: * (0 bis n mal matchen) geht nicht ? (0 oder 1 mal matchen) geht nicht und + (1 bis n mal) geht.</p>
<p>Warum &#8211; zur Hölle &#8211; muss ich in diesem regulären Ausdruck also mindestens ein mal &#8220;/&#8221; explizit am Ende der URI matchen? Und warum kommt ansonsten &#8220;index.php&#8221; raus?</p>
<p>Am besten lernt man indem man sich anderen Code anschaut. In diesem Fall bei WordPress, der .htaccess Inhalt sieht dort wie Folgt aus:</p>
<div class="codesnip-container" >RewriteRule ^index\.php$ &#8211; [L]<br />RewriteCond %{REQUEST_FILENAME} !-f<br />RewriteCond %{REQUEST_FILENAME} !-d<br />RewriteRule . /index.php [L]</div>
<p>Was hier im Endeffekt passiert ist folgendes: falls die URI nicht auf ein tatsächlich existierendes Verzeichnis oder auf eine tatsächlich existierende Datei zeigt wird die index.php (ohne Argumente) ausgeführt. Vermutlich greift WordPress dann auf $_SERVER['REQUEST_URI'] zurück, was ich jetzt auch tun werde. Und damit zurück zu einer Sprache bei der man mit regulären Ausdrücken auch arbeiten kann.</p>
<p>PS: Wenn man nach mod_rewrite googelt findet man häufig folgendes Zitat:</p>
<blockquote><p><cite>Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.</cite></p></blockquote>
<p>Ich bin sicherlich nicht der Erste der der Meinung ist, dass Voodoo nichts in Software zu suchen hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2010/12/mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defcon 18: What happens when you steal a hackers computer</title>
		<link>http://xlkstyle.com/2010/12/defcon-18-what-happens-when-you-steal-a-hackers-computer/</link>
		<comments>http://xlkstyle.com/2010/12/defcon-18-what-happens-when-you-steal-a-hackers-computer/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 13:10:50 +0000</pubDate>
		<dc:creator>Paul Rupek</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://xlkstyle.com/?p=386</guid>
		<description><![CDATA[Here&#8217;s your Christmas present :) (Thanks to Nine99 for the link) I&#8217;ve changed the category name from &#8220;TED&#8221; to &#8220;Talks&#8221;, for obvious reasons.]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s your Christmas present :)</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="655" height="393" 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/U4oB28ksiIo?fs=1&amp;hl=en_US" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="655" height="393" src="http://www.youtube.com/v/U4oB28ksiIo?fs=1&amp;hl=en_US" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>(Thanks to <a href="http://twitter.com/Nin_99" target="_blank">Nine99</a> for the link)</p>
<p>I&#8217;ve changed the category name from &#8220;TED&#8221; to &#8220;Talks&#8221;, for obvious reasons.</p>
]]></content:encoded>
			<wfw:commentRss>http://xlkstyle.com/2010/12/defcon-18-what-happens-when-you-steal-a-hackers-computer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

