<?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>CODEDOM</title>
	<atom:link href="http://www.codedom.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.codedom.de</link>
	<description>THE SOURCE OF CODE DOMINATION</description>
	<lastBuildDate>Thu, 03 May 2012 13:50:01 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<item>
		<title>Wie sicher ist mein Passwort?</title>
		<link>http://www.codedom.de/wie-sicher-ist-mein-passwort</link>
		<comments>http://www.codedom.de/wie-sicher-ist-mein-passwort#comments</comments>
		<pubDate>Wed, 14 Mar 2012 21:43:58 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1272</guid>
		<description><![CDATA[Nach dem letzten Mozilla Firefox Update auf Version 11 kam ein bekanntes Thema auf: Wie sicher sind meine Passwörter und wie alt sind diese? Generell ist es immer sinnvoll auf Passwort-Richtlinien hinzuweisen.]]></description>
			<content:encoded><![CDATA[<p>Nach dem letzten Mozilla Firefox Update auf Version 11 kam ein bekanntes Thema auf: Wie sicher sind meine <strong>Passwörter</strong> und wie alt sind diese? Mozilla hat hier in seinen Labs ein Projekt namens <a title="Mozilla Projekt: Watchdog" href="https://mozillalabs.com/blog/2012/03/watchdog-visualize-how-old-your-passwords-are/" target="_blank">Watchdog</a> eingerichtet, welches euch visuell darstellt, wie alt eure Passwörter sind. Generell ist es auch immer sinnvoll auf <strong>Passwort-Richtlinien</strong> hinzuweisen. Und da viele gerne leicht merkbare Passwörter verwenden, ist es sicherlich auch nicht verkehrt, sein Passwort in regelmäßigen Abständen zu ändern. Dennoch halte ich persönlich nichts davon. Warum? Weil es einfachere Möglichkeiten gibt, sich sein Passwort zu merken und dabei für jede Seite ein individuelles Passwort zu pflegen.</p>
<p><span id="more-1272"></span></p>
<h3>Erster Ansatz</h3>
<p>Was macht ein Passwort sicher? Bestimmt nicht die Hinzunahme von Sonderzeichen und Zahlen in Kombination mit Groß- und Kleinschreibung. Das ist mittlerweile ein Standard, den jeder bei einer Bruteforce-Attacke mit einplant. Doch wie verhelfen wir solchen Bruteforce-Attacken zu nicht mehr lohnenswerten Laufzeiten? Viele denken eben hier an eine Kombination von Klein- und Großschreibung sowie Zahlen und Sonderzeichen. Doch halt! Bevor wir unser Passwort unnötig kompliziert machen: Es gibt bessere Methoden!</p>
<h3>Grundsicherheit</h3>
<p>Die Basis eines jeden Passwortes bildet der Zeichensatz. Haben wir nur Kleinbuchstaben beläuft sich dieser auf 26 Zeichen. Bei Klein- und Großbuchstaben sind es bereits 52 Zeichen und so weiter. Mit der Wahl von Zahlen und Sonderzeichen erhöhen wir diese Basis nur minimal. Wichtig bei der Komplexität von Passwörtern ist der Exponent!</p>
<p>Dieser berechnet sich aus der Länge des Passwortes, also der Formel: Vefügbarer Zeichensatz (hoch) Länge des Passworts. Diese Gegebenheit gehen wir auch gleich noch an Hand eines Beispiels an. Aber erstmal zur erweiterten Sicherheit.</p>
<h3>Erweiterte Sicherheit</h3>
<p>Wenn wir unser Grundpasswort festgelegt haben, zum Beispiel eine Phrase oder einen ganzen Satz wie &#8220;IchHabeAm19.01.1999Geburtstag&#8221; und versehen ein solches Passwort noch am Anfang mit dem 2. und 4. Buchstaben, sowie am Ende mit dem 3. und 5. Buchstaben der Website, dann haben wir ein individuelles Passwort für jede Seite. Die ersten und letzten beiden Ziffern lassen sich erst dann entziffern, wenn man mindestens zwei Accounts gehackt hat. Ansonsten wäre dieser &#8220;Salt&#8221; nur geraten.</p>
<p>Das Ganze lässt sich natürlich nach Belieben ändern, wichtig ist nur, dass man Grundlage und den &#8220;Salt&#8221;, also die seitenspezifische Kombination geheim hält. Hat man einmal ein solches Verfahren entwickelt, braucht man sich keine Passwörter mehr merken. Ebenso kann das System so erweitert werden, dass man beispielsweise die Anzahl der Konsonanten der URL noch mit einbezieht. Es gibt genug Möglichkeiten, also seid kreativ!</p>
<p>Ein weiteres kreatives Beispiel wäre, aus jedem Passwort einen SHA512 Hash zu generieren. Damit kann das Passwort auch nicht mehr zurückgerechnet werden. Wenn diese Passwörter zu lang sind, kann mal alternativ auch SHA256 oder MD5 nutzen. Allerdings aufpassen bei MD5, dieser Algorithmus zur Berechnung von Hashes hat schon seit geraumer Zeit Schwachstellen. Mit Passwort-Managern lassen sich diese auch gut speichern und wenn man sich mal einloggen möchte, braucht man sein Passwort für die gewünschte Seite nur in einen üblichen Online-Hash-Generator eingeben.</p>
<h3>Beispiel</h3>
<p>Wir haben einen Zeichensatz von 26 Ziffern und eine Passwortlänge von 6 Zeichen. Zum Vergleich haben wir ein Passwort mit einem Zeichensatz von 52 Ziffern und einer Passwortlänge von ebenfalls 6 Zeichen. Zum Schluss nutzen wir einen Zeichensatz von 26 Zeichen bei einer Passwort Länge von 10 Zeichen. Dadurch erhalten wir folgende Rechnung:</p>
<p>26 ^ 5 = 11881376 Kombinationen<br />
52 ^ 5 = 380204032 Kombinationen<br />
26 ^ 10 = 141167095653376 Kombinationen</p>
<h3>Fazit</h3>
<p>Wir sehen also, dass eine Erhöhung der Basis durch das Hinzunehmen von Zahlen und Sonderzeichen zwar hilft, aber wir durch ein längeres Passwort eine wesentlich größere Anzahl an Kombinationen erreichen. Diese beiden Eigenschaften stehen in keinerlei Konkurrenz. Bevor ihr also das nächste Mal überlegt, welches Sonderzeichen ihr benutzen könnt, nutzt lieber 5 Zeichen mehr für das Passwort und lasst dem Bruteforce keine Chance!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/wie-sicher-ist-mein-passwort/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caschys Blog &#8211; Das verflixte 7. Jahr</title>
		<link>http://www.codedom.de/caschys-blog-das-verflixte-7-jahr</link>
		<comments>http://www.codedom.de/caschys-blog-das-verflixte-7-jahr#comments</comments>
		<pubDate>Tue, 13 Mar 2012 09:18:03 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Dies & Das]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1268</guid>
		<description><![CDATA[Es ist geschafft! Der Blog www.stadt-bremerhaven.de hat das verflixte 7. Jahr überstanden und das wird gefeiert. Wie immer beglückt uns Caschy mit spektakulären Gadgets.]]></description>
			<content:encoded><![CDATA[<p>Es ist geschafft! Der <strong>Blog</strong> <a title="Cashys Blog" href="http://www.stadt-bremerhaven.de" target="_blank">www.stadt-bremerhaven.de</a> hat das verflixte 7. Jahr überstanden und das wird gefeiert. Wie immer beglückt uns Caschy mit spektakulären <strong>Gadgets</strong>. Mit dabei sind diesmal:</p>
<ul>
<li>Motorola Xoom Tablet</li>
<li>Nokia Lumia 800</li>
<li>Xperia Pro</li>
<li>Samsung Galaxy Tab 7.0</li>
<li>HTC Radar</li>
<li>DELL Streak 7</li>
<li>BlackBerry Curve 9360</li>
<li>Feature-Phone XCover 2</li>
<li>AM405 SlimPack Akku</li>
<li>Bluetooth Headset HS3000</li>
</ul>
<p>Weiteres könnt ihr <a title="7 Jahre Caschys Blog" href="http://bit.ly/wmDzr1" target="_blank">hier</a> in Erfahrung bringen. Viel Spaß an alle, die mitmachen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/caschys-blog-das-verflixte-7-jahr/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8 Consumer Preview &#8211; Erster Eindruck</title>
		<link>http://www.codedom.de/windows-8-consumer-preview-erster-eindruck</link>
		<comments>http://www.codedom.de/windows-8-consumer-preview-erster-eindruck#comments</comments>
		<pubDate>Wed, 29 Feb 2012 20:40:31 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1250</guid>
		<description><![CDATA[Ich nutze schon seit Erscheinen die Windows 8 Developer Preview auf einem meiner Notebooks, welches&#8230;]]></description>
			<content:encoded><![CDATA[<p>Ich nutze schon seit Erscheinen die Windows 8 Developer Preview auf einem meiner Notebooks, welches ich auch jeden Tag im Einsatz habe. Bis auf ein paar Kleinigkeiten funktioniert dort alles tadellos. Ich muss zugeben, nach Windows 7 war ich eigentlich schon begeistert und hatte höchstens noch mit kleinen Überarbeitungen gerechnet, aber als ich dann Windows 8 zu Gesicht bekam, war ich erstaunt. Es mag zwar am Anfang etwas gewöhnungsbedürftig sein, aber mittlerweile habe ich dieses Betriebssystem lieben gelernt.</p>
<p><span id="more-1250"></span></p>
<h3>Die Installation</h3>
<p>Eigentlich ist es mit Windows 8 ein Kinderspiel das System selbst aufzusetzen &#8211; und das nicht nur für den ambitionierten Windows Tüftler! DVD einlegen, auf den Installationsbildschirm warten und installieren klicken &#8211; schon kann es losgehen! Nach der Eingabe der Seriennummer <strong>DNJXJ-7XBW8-2378T-X22TX-BKG7J</strong> kam man dann auch schon zum Installationsprogress.</p>
<p><a href="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-059-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox.png" rel="lightbox1250" title="Vollbild" target="_blank"><div id="attachment_1251" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1251" title="Windows 8 CP - Installation" src="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-059-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox-300x244.png" alt="Windows 8 CP - Installation" width="300" height="244" /><p class="wp-caption-text">Der Windows 8 Installationsvorgang</p></div></a></p>
<p>Dieser brauchte in meiner virtuellen Maschine nicht wirklich lang und kurz darauf gelangt ihr zum Konfigurationsmenü. Dort können nochmal diverse Einstellungen vorgenommen werden, oder aber ihr nutzt den von Windows vorgeschlagenen Standard.</p>
<h3>Metro UI</h3>
<p>Ja, die Metro UI. Wohl die umstrittenste Neuerung an Windows 8. Diese ersetzt quasi euer Startmenü. Ihr findet hier alle installierten Anwendungen, ähnlich wie bei Windows Mobile als Kacheln angeordnet. Diese könnt ihr natürlich nach belieben sortieren und in der Größe anpassen.</p>
<p><a href="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-065-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox.png" rel="lightbox1250" title="Vollbild" target="_blank"><div id="attachment_1252" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1252" title="Windows 8 CP - Metro UI" src="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-065-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox-300x244.png" alt="Windows 8 CP - Metro UI" width="300" height="244" /><p class="wp-caption-text">Die neue Metro UI</p></div></a></p>
<p>Fangt ihr in diesem Bildschirm an zu tippen, so öffnet sich eine Suchseite, die euch, ähnlich wie bei der Suche im Startmenü, alle Programme, Funktionen, Einstellungen usw. anzeigt, die zu eurem Suchbegriff passen.</p>
<p><a title="Vollbild" href="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-068-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox.png" rel="lightbox1250" target="_blank"><img class="aligncenter size-medium wp-image-1253" title="Windows 8 CP - Die Metro UI Suchfunktion" src="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-068-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox-300x244.png" alt="Windows 8 CP - Die Metro UI Suchfunktion" width="300" height="244" /></a></p>
<p>Es gibt auch hier Kritiker, die sich gerade erst mit dem aufgemotzten Windows 7 Startmenü angefreundet haben und nun Gruppierungen u.ä. vermissen. Aber wie bei allem Neuen gilt auch hier, dass man sich mit der Zeit daran gewöhnt und die alten Features vermutlich garnicht mehr vermisst. Auch wenn der Schritt, das Startmenü aus Windows zu verbannen, ein sehr radikaler ist.</p>
<h3>Der Windows Store</h3>
<p>Er wurde groß und breit angekündigt und auch schon auf der Build Konferenz gezeigt. Richtig nutzen, Erfahrungen sammeln und ausprobieren kann man ihn aber erst mit der Consumer Preview. Ich muss sagen, ich finde den Store sehr schön schlicht, mit Blick auf das Wesentliche &#8211; Die Apps.</p>
<p><a href="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-061-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox.png" rel="lightbox1250" title="Vollbild" target="_blank"><div id="attachment_1254" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1254" title="Windows 8 CP - Der Store" src="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-061-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox-300x244.png" alt="Windows 8 CP - Der Store" width="300" height="244" /><p class="wp-caption-text">Der Windows Store mit den ersten Apps</p></div></a></p>
<p>Neben den Apps der Gewinner des Microsoft App-Contest, gibt es auch schon professionelle Applikationen im Store. Und das laut Microsoft im Rahmen der Consumer Preview vorläufig kostenfrei! Da freut sich doch bestimmt der ein oder andere Beta-Tester.</p>
<h3>Die Apps</h3>
<p>Neben den Programmen, die ihr aus dem Store herunterladen könnt, vermittel uns die Consumer Preview auch schon einen ersten Eindruck, wie Mail, Kalender, Messenger, Reader und SkyDrive auf dem kommenden Windows wohl aussehen könnten. Zwar sind die Apps ganz klar mit &#8220;APP-VORSCHAU&#8221; gekennzeichnet, aber vielleicht wird das ein oder andere ja doch übernommen. Allerdings sind die Apps aus der Developer Preview auch verschwunden oder wurden optisch überarbeitet.</p>
<h3>Der Desktop</h3>
<p>Bevor jetzt die ersten schreien &#8220;Metro UI? Ich will meinen Desktop&#8221; &#8211; ich kann euch beruhigen, vom Desktop hat sich Microsoft nicht verabschiedet. Diesen könnt ihr in der Metro UI starten und habt anschließend den gewohnten Windows Desktop vor euch. Gewohnt? Naja, fast. Wie ich ja schon sagte, gibt es kein Startmenü mehr. Die untere linke Ecke hat in der Developer Preview noch ein neues Menü hervorgerufen, mit welchem man den PC herunterfahren oder Einstellungen vornehmen konnte. Doch auch dieses ist in dem neuen Release verschwunden. Stattdessen zeigt sich nur die Metro UI nach einem Klick.</p>
<p>Die Ribbob-Bar die seit der Developer Preview die klassische Datei-Leiste abgelöst hat, wurde auch nochmal etwas überarbeitet. So sind die Bedienungsmöglichkeiten erstmal zugeklappt und erst nach einem Klick auf den gewünschten Tab öffnet sich dann das bereits aus Word und Co. bekannte Ribbon.</p>
<p><a href="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-066-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox.png" rel="lightbox1250" title="Vollbild" target="_blank"><div id="attachment_1255" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-1255" title="Windows 8 CP - Ribbon Bar" src="http://www.codedom.de/wp-content/uploads/2012/02/ScreenShot-066-Development-Windows-8-64-Bit-wird-ausgeführt-Oracle-VM-VirtualBox-300x244.png" alt="Windows 8 CP - Ribbon Bar" width="300" height="244" /><p class="wp-caption-text">Die neue Ribbon Menü Leiste</p></div></a></p>
<p>Wählt man ein Laufwerk, ein Verzeichnis oder eine Datei, so erscheinen die Standard Funktionen im Ribbon. Spezielle Funktionalitäten, zum Beispiel das Freigabe oder Datenträger Menü erscheinen erst bei einem Klick auf ein Verzeichnis bzw. zweiteres nach einem Klick auf ein Laufwerk. Dort sind Funktionen untergebracht, die nur für das aktuell gewählte Element gedacht sind. Diese Funktionen haben auch Fotos, Video und Audio Dateien.</p>
<h3>Mein Résumé</h3>
<p>Vielleicht ist es an dieser Stelle noch ein wenig zu früh zu sagen, wie viel Potential in dem neuen Betriebssystem aus dem Hause Kleinweich steckt, aber in meinen Augen sind die Redmonder auf dem richtigen Weg. Es scheint als werde endlich das lang ersehnte All-In-One Windows entwickelt, welches auf allen Geräten lauffähig ist und ein einheitliches Design mit sich bringt. Ich konnte zwar noch nicht alles testen, dazu muss ich das OS von meiner VirtualBox auf mein Produktivgerät übertragen (dann wird es auch noch ein Update des Berichtes geben), aber ich fühle mich auf Anhieb wohl &#8211; und das ist bei der Vielfalt an Betriebssystemen und Arbeitsumgebungen heutzutage garnicht mal so leicht!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/windows-8-consumer-preview-erster-eindruck/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8 Consumer Preview</title>
		<link>http://www.codedom.de/windows-8-consumer-preview</link>
		<comments>http://www.codedom.de/windows-8-consumer-preview#comments</comments>
		<pubDate>Wed, 29 Feb 2012 15:14:45 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1244</guid>
		<description><![CDATA[So langsam macht es überall die Runde: Die Windows 8 Consumer Preview ist öffentlich zugänglich! Nachdem Microsoft angekündigt hatte, eine Vorab-Version noch im Februar zur Verfügung zu stellen, ist es am letzten Tag des Monats nun endlich soweit. Neben der Consumer Preview gibt es auch eine erste Beta zu Windows 8 Server. Für alle Neugierigen und Beta-Fans gibt es nun hier die Download Links zu den diversen Versionen!]]></description>
			<content:encoded><![CDATA[<p>So langsam macht es überall die Runde: Die <strong>Windows 8 Consumer Preview</strong> ist öffentlich zugänglich! Nachdem <strong>Microsoft</strong> angekündigt hatte, eine Vorab-Version noch im Februar zur Verfügung zu stellen, ist es am letzten Tag des Monats nun endlich soweit. Neben der Consumer Preview gibt es auch eine erste Beta zu <strong>Windows 8 Server</strong>. Für alle Neugierigen und Beta-Fans gibt es nun hier die <strong>Download</strong> <strong>Links</strong> zu den diversen Versionen!</p>
<p><span id="more-1244"></span></p>
<p>Also viel Spaß beim Testen in einer virtuellen Maschine oder auf einem Echt-Gerät. Ich habe bisher privat übrigens die Windows Developer Preview genutzt und konnte bis auf ein paar Unverträglichkeiten mit meinen HDMI Treibern und einigen Abstürzen im Firefox keine größeren Probleme feststellen und werde daher nun auch die Consumer Preview im Echtbetrieb einsetzen!</p>
<p><a href="https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=43355A4E-3982-4E24-956C-49BDF587FC73&amp;lcid=1031" target="_blank">Download Windows 8 Server Beta 64 Bit (ISO)</a><br />
<a href="https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=43355A4E-3982-4E24-956C-49BDF587FC73&amp;lcid=1031" target="_blank">Download Windows 8 Server Beta 64 Bit (VHD, english)</a><br />
<a href="http://iso.esd.microsoft.com/WCPDL/BD1B8A49393E30CC9C4E5C88457D73E964F1F3B18/Windows8-ConsumerPreview-32bit-German.iso" target="_blank">Download Windows 8 Consumer Preview 32 Bit (ISO, deutsch)</a><br />
<a href="http://iso.esd.microsoft.com/WCPDL/BD1B8A49393E30CC9C4E5C88457D73E964F1F3B18/Windows8-ConsumerPreview-64bit-German.iso">Download Windows 8 Consumer Preview 64 Bit (ISO, deutsch)</a></p>
<p>Wer noch eine Seriennummer braucht, kann diese hier benutzen, solange die Consumer Preview gültig ist: <strong>DNJXJ-7XBW8-2378T-X22TX-BKG7J</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/windows-8-consumer-preview/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#: Buffered FTP Upload</title>
		<link>http://www.codedom.de/c-sharp-buffered-ftp-upload</link>
		<comments>http://www.codedom.de/c-sharp-buffered-ftp-upload#comments</comments>
		<pubDate>Wed, 29 Feb 2012 14:26:10 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1224</guid>
		<description><![CDATA[Ich habe ja bereits ein Tutorial über einen einfachen FTP Upload mittels C# geschrieben und dort gezeigt, mit wie wenigen Zeilen Quellcode dies möglich ist. Das ist natürlich nur ein Einstieg in die Materie und kann auch noch weiter verfeinert werden. Anstatt die Datei in einem Stück hochzuladen, wollen wir nun einen Buffer benutzen.

]]></description>
			<content:encoded><![CDATA[<p>Ich habe ja bereits ein Tutorial über einen einfachen FTP Upload mittels C# <a href="http://www.codedom.de/c-datei-via-ftp-hochladen" target="_blank">geschrieben</a> und dort gezeigt, mit wie wenigen Zeilen Quellcode dies möglich ist. Das ist natürlich nur ein Einstieg in die Materie und kann auch noch weiter verfeinert werden. Im ersten Tutorial wurde die komplette Datei in einen Stream geschrieben, was natürlich den Vorteil hat, dass sich Windows um alles weitere kümmert und wir eine recht hohe Upload-Geschwindigkeit erreichen. Das hat allerdings auch Nachteile. Wir können beispielsweise keine Informationen über den aktuellen Upload-Status bereitstellen.</p>
<p><span id="more-1224"></span></p>
<p>Nun zeige ich, wie wir mit Hilfe eines Buffers den Upload steuern können und somit die Datei Stück für Stück hochladen. Als erstes brauchen wir eine Funktion, die den Upload-Vorgang mit einem Buffer bereitstellt. Dieser übergeben wir die Adresse zum FTP, sowie den Pfad zur Datei, die wir hochladen möchten.</p>
<pre>public void BufferedUpload(string ftpAddress, string file) { }</pre>
<p>&nbsp;</p>
<h3>Der Anfang</h3>
<p>Was wir nun noch brauchen, ist ein <a title="MSDN: FtpWebRequest" href="http://msdn.microsoft.com/de-de/library/system.net.ftpwebrequest%28v=vs.80%29.aspx" target="_blank">FtpWebRequest</a>, eine <a title="MSDN: WebResponse" href="http://msdn.microsoft.com/de-de/library/system.net.webresponse.aspx" target="_blank">WebResponse</a> und einen <a title="MSDN: Stream" href="http://msdn.microsoft.com/de-de/library/system.io.stream.aspx" target="_blank">Stream</a>. Der FtpRequestStream dient dazu, eine parameterisierte Verbindung zu unserem FTP aufzubauen und liefert uns eine WebResponse zurück, welche wir zur Auswertung nutzen könnten. Ich habe hier allerdings darauf verzichtet. Der Stream ist letztenendes das Objekt, welches wir mit der Funktion GetRequestStream() aus der Klasse FtpWebRequest befüllen.</p>
<pre>FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpAddress));
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Credentials = new NetworkCredential("username", "password");

// Verbindung herstellen
WebResponse ftpResponse = ftpRequest.GetResponse();

// Datei einlesen
byte[] fileContents = File.ReadAllBytes(file);

// Stream zum FTP aufbauen
Stream ftpRequestStream = ftpRequest.GetRequestStream();</pre>
<p>&nbsp;</p>
<h3>Der Buffer</h3>
<p>Soweit, so gut! Nun haben wir einen offenen Stream, mit dem wir die Daten nun schon schreiben könnten. Aber wir wollten ja noch einen Buffer implementieren. Dazu brauchen wir neben einer Variable für den Buffer auch noch eine für die aktuelle Position an der sich der Stream gerade befindet. Für den Buffer nutze ich üblicherweise 64 KB. Ich habe die Erfahrung gemacht, dass die Upload-Geschwindigkeit hier noch sehr gut ist und wir genug Rückmeldungen für größere Dateien abfangen können.</p>
<pre>int position = 0;
int buffer = 65536;</pre>
<p>Weiter geht&#8217;s. Der Buffer hat seinen Initialwert erhalten und wir können nun mit Hilfe einer While-Schleife unsere Daten Stück für Stück in die Stream schieben. hierbei müssen wir aber daran denken, dass wir auch die aktuelle Position im Stream erhöhen, da wir unsere Daten sonst immer wieder an die gleiche Stelle schreiben würden:</p>
<pre>while (position != fileContents.Length)
{
    ftpRequestStream.Write(fileContents, position, buffer);
    position += buffer;
}</pre>
<p>Im Großen und Ganzen wäre es das schon gewesen, oder? Nicht ganz! Was viele Leute bei einem gepufferten Stream vergessen ist, dass das letzte Stück bei einer Dateiübertragung auch kleiner sein kann, also die von uns angegeben 64 KB. Daraus würde folgen, dass wir über das eigentlich Ende der Datei hinausschreiben könnten. Daher müssen wir noch eine kleine Abfrage in unsere While-Schleife integrieren:</p>
<pre>while (position != fileContents.Length)
{
    // Prüfen, ob Rest kleiner ist als der Buffer
    if (buffer &gt; fileContents.Length - position)
        buffer = fileContents.Length - position;

    ftpRequestStream.Write(fileContents, position, buffer);
    position += buffer;
}</pre>
<p>&nbsp;</p>
<h3>Das Fazit</h3>
<p>Nun haben wir alle Bestandteile unseren gepufferten FTP Uploads zusammen. Durch die While-Schleife haben wir nun die Möglichkeit nach jedem Upload eines Teilstückes Informationen zum Gesamt-Upload auszuwerten. So können wir eine Prozentangabe zeigen oder mit Hilfe der StopWatch-Klasse die aktuelle Upload-Geschwindigkeit ermitteln. Verlagern wir diese Methode nun in einen eigenen Thread, können wir die nach jedem Durchlauf der Schleife unsere GUI mit Informationen aufwerten, ohne dass diese regungslos stehen bleibt und wartet, bis der gesamte Upload fertig ist.</p>
<p>Hier nochmal die gesamte Methode:</p>
<pre>///
&lt;summary&gt; /// Lädt eine Datei mit Hilfe eines Buffers hoch. /// &lt;/summary&gt;

///FTP Adresse
///Dateiname inklusive Pfad
public void BufferedUpload(string ftpAddress, string file)
{
    // ftpAddress = @"ftp://meinserver.de/pfad/datei.zip";
    // file = @"C:\test.zip";

    int position = 0;
    int buffer = 65536;

    try
    {
        FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpAddress));
        ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
        ftpRequest.Credentials = new NetworkCredential("username", "password");

        // Verbindung herstellen
        WebResponse ftpResponse = ftpRequest.GetResponse();

        // Datei einlesen
        byte[] fileContents = File.ReadAllBytes(file);

        // Stream zum FTP aufbauen
        Stream ftpRequestStream = ftpRequest.GetRequestStream();

        while (position != fileContents.Length)
        {
            // Prüfen, ob Rest kleiner ist als der Buffer
            if (buffer &gt; fileContents.Length - position)
                buffer = fileContents.Length - position;

            ftpRequestStream.Write(fileContents, position, buffer);
            position += buffer;
        }

        // Verbindungen schließen
        ftpRequestStream.Close();
        ftpResponse.Close();
        ftpRequest.Abort();
    }

    catch (WebException webEx)
    {
        Console.WriteLine("Es ist ein Fehler aufgetreten: " + webEx.Message);
    }
}</pre>
<p>Wie immer wünsche ich viel Spaß beim Ausprobieren. Den Code könnt ihr natürlich frei benutzen und verändern!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/c-sharp-buffered-ftp-upload/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fokus auf dem Inhalt &#8211; Content statt Commercial</title>
		<link>http://www.codedom.de/fokus-inhalt-content-statt-commercial</link>
		<comments>http://www.codedom.de/fokus-inhalt-content-statt-commercial#comments</comments>
		<pubDate>Tue, 28 Feb 2012 16:41:03 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Dies & Das]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Inhalt]]></category>
		<category><![CDATA[Werbung]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1200</guid>
		<description><![CDATA[Ich streife während meiner täglichen Arbeit viele Kilometer - oder eher Kilobyte - durch das World Wide Web. Dabei ist mir, gerade bei den uns so ans Herz gewachsenen Blogs ein mittlerweile weit verbreiteter Umstand aufgefallen: Die Werbung dominiert fast den Inhalt.]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Ich streife während meiner täglichen Arbeit viele Kilometer &#8211; oder eher Kilobyte &#8211; durch das World Wide Web. Dabei ist mir, gerade bei den uns so ans Herz gewachsenen <strong>Blogs</strong> ein mittlerweile weit verbreiteter Umstand aufgefallen: Die <strong>Werbung</strong> dominiert fast den <strong>Inhalt</strong>. Nicht nur, dass Werbung an statischen Positionen wie Header oder in der Navigation geschaltet wird, es ist heute Trend Werbung auch zwischen Postings, mittem im Text und am Besten nochmal im Footer zu schalten. In meinen Augen geht dabei das Wesen des Blogs abhanden &#8211; nämlich der <strong>Content</strong>!</p>
<p><span id="more-1200"></span>Es ist oft das gleiche Bild: Man surft auf einen Blog, um eine Meinung einzuholen, eine Antwort auf eine Frage zu finden oder sich einfach über die neusten Trends zu informieren. Leider stolpere ich, neben den unverhältnismäßig langen Ladezeiten durch externe Werbung auch immer wieder über ein AdvertismentOverflow. Soll heißen, dass ich auf einen Blick mehr Shopping-Angebote, Fernstudiengänge oder GoogleAds sehe, als das, weswegen ich eigentlich diesen Blog angesurft habe. Schlimmer noch: Ich sehe nicht mehr das, was als Grundprinzip der Blogs gedacht war.</p>
<p>Natürlich muss und soll es jedem einzelnen möglich sein, seinen Blog und damit auch seine Arbeit die er dort hinein gesteckt hat zu monetarisieren. Das darf aber nicht Hauptaugenmerk werden. Zu den Anfängen der Blogs, habe ich hier auch mal ein GoogleAd platziert, bin aber mittlerweile ohne Werbung glücklich &#8211; und ich hoffe meine Leser auch&#8230;</p>
<p>Langsam aber sicher wird der Aufschrei laut, sich lieber wieder auf den Inhalt zu besinnen und auf übermäßige Werbung zu verzichten. Im Web lassen sich auch Alternativ-Konzepte finden, darunter natürlich auch die alten Bekannten <strong>PayPal</strong> und <strong>Flattr</strong>. Ein gesunder Mittelweg, wodurch sich der Aufwand für den Blog lohnt, die Leser aber gleichzeitig nicht verstimmt werden ist hier genau die richtige Lösung. Doch diesen korrekt einzuschlagen, ist nicht ganz so leicht.</p>
<p>Ich für meinen Teil habe dieses Problem momentan zum Glück nicht &#8211; kann aber trotzdem zu einer Maßnahme raten: Schaltet ein A/B Testing und testet parallel, wo sich Werbung am ehesten auszahlt. Vielleicht erhaltet ihr diese Erkenntnis auch schon aus bisherigen Erfahrungen durch Werbung. Wie auch immer: Sucht euch den besten Platz und den besten Inhalt für eure Werbung und beschränkt euch darauf. Das hat den Vorteil, dass eure Besucher wirklich Inhalts-abhängige und gut platzierte Werbung erhalten, ohne dass sie den Überblick über <strong>Commercial und Content</strong> verlieren!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/fokus-inhalt-content-statt-commercial/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein Lebenszeichen</title>
		<link>http://www.codedom.de/ein-lebenszeichen</link>
		<comments>http://www.codedom.de/ein-lebenszeichen#comments</comments>
		<pubDate>Thu, 16 Feb 2012 16:17:24 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1177</guid>
		<description><![CDATA[Es hat mal wieder gedauert, doch nun will ich den Blog mal mit Leben füllen.&#8230;]]></description>
			<content:encoded><![CDATA[<p>Es hat mal wieder gedauert, doch nun will ich den Blog mal mit Leben füllen. Ein neuer Kern braucht auch eine neue Hülle, also habe ich auch direkt ein neues Theme aufgesetzt. Ich hoffe man liest sich hier bald wieder!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/ein-lebenszeichen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Facade</title>
		<link>http://www.codedom.de/design-patterns-facade</link>
		<comments>http://www.codedom.de/design-patterns-facade#comments</comments>
		<pubDate>Tue, 05 Jul 2011 09:30:33 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1133</guid>
		<description><![CDATA[Nach Singleton, Memento und Prototype folgt auch schon der nächste Part der Design Patterns: Die Fassade. Sie ist das erste Entwurfsmuster aus dem Bereich der Structural Patterns (Strukturmuster) und dient als einheitliche und vereinfachte Schnittstellen zu einer beliebigen Menge von Schnittstellen eines Untersystems (Subsystems).]]></description>
			<content:encoded><![CDATA[<p>Nach <a title="Design Patterns: Singleton" href="http://www.codedom.de/design-patterns-singleton">Singleton</a>, <a title="Design Patterns: Memento" href="http://www.codedom.de/design-patterns-memento">Memento</a> und <a title="Design Patterns: Prototype" href="http://www.codedom.de/design-patterns-prototype">Prototype</a> folgt auch schon der nächste Part der Design Patterns: Die <strong>Fassade</strong>. Sie ist das erste Entwurfsmuster aus dem Bereich der <strong>Structural Patterns</strong> (Strukturmuster) und dient als einheitliche und vereinfachte Schnittstellen zu einer beliebigen Menge von <strong>Schnittstellen</strong> eines <strong>Untersystems</strong> (Subsystems).</p>
<p>Die Fassade sollte also immer dann genutzt werden, wenn ein Untersystem viele Klassen enthält, die aber einzeln selten bzw. garnicht verwendet werden. Statt nun für eine gewisse Funktionalität sehr viele kleine Klassen ansprechen zu müssen, verwendet man eine Fassade, die diese Klassen vereint und Funktionalitäten weiter deligiert. Somit kann eine Fassade die Komplexität einer Implementierung erheblich senken, da das benutzte Untersystem nicht direkt sichtbar ist.</p>
<p><img class="aligncenter size-full wp-image-1139" title="Design Patterns: Facade" src="http://www.codedom.de/wp-content/uploads/2011/07/ScreenShot-235-DoFactory.GangOfFour-Microsoft-Visual-Studio-Administrator.png" alt="Design Patterns: Facade" width="588" height="273" /></p>
<p>Um die Fassade korrekt zu implementieren benötigen wir als allererstes Subklassen. Diese Klassen enthalten jeweils Teil-Strukturen unserer Fassade, hier am Beispiel eines Kunden. Ein Kunde hat bei einer Bank ein Konto, ein Darlehen und eventuell eine Kreditkarte. Nun möchte er eine Hypothek abschließen. Dazu müssen wir prüfen, ob der Kunde kreditwürdig für eine solche Hypothek ist. Zuerst erstellen wir also unseren Kunden. Dazu dient folgende, sehr vereinfachte Klasse:</p>
<p><span id="more-1133"></span></p>
<pre>class Kunde
{
    public string Name { get; set; }
}</pre>
<p>Diese dient nur der Veranschaulichung, denn die wichtigen Subklassen erstellen wir jetzt. Dazu gehören die Klassen Konto, Darlehen und Kreditkarte, welche später in der Fassade vereint werden:</p>
<pre>class Konto
{
    public bool HatGenugGuthaben(Kunde k, int betrag)
    {
        Console.WriteLine(string.Format("Prüfe Guthaben für Kunde {0} {1}", k.Name));
        return true;
    }
}

class Darlehen
{
    public bool HatDarlehen(Kunde k)
    {
        Console.WriteLine(string.Format("Prüfe Darlehen für Kunde {0} {1}", k.Name));
        return false;
    }
}

class Kreditkarte
{
    public bool HatNichtUeberzogen(Kunde k)
    {
        Console.WriteLine(string.Format("Prüfe Dispo für Kunden {0} {1}", k.Name));
        return true;
    }
}</pre>
<p>Nun stellen wir uns die Klasse Hypothek zusammen, welche aus den 3 Subklassen Konto, Darlehen und Kreditkarte besteht, auf die wir aber später von außen nicht mehr zugreifen möchten / brauchen.</p>
<pre>class Hypothek
{
    private Konto _konto = new Konto();
    private Darlehen _darlehen = new Darlehen();
    private Kreditkarte _kreditkarte = new Kreditkarte();

    public bool IstGeeignet(Kunde k, int betrag)
    {
        Console.WriteLine("{0} möchte ein Darlehen über {1:C} haben", k.Name, betrag);

        bool geeignet = true;

        // Prüfe kreditwürdigkeit des Kunden
        if (!_konto.HatGenugGuthaben(k, betrag))
        {
            geeignet = false;
        }
        else if (_darlehen.HatDarlehen(k))
        {
            geeignet = false;
        }
        else if (!_kreditkarte.HatNichtUeberzogen(k))
        {
            geeignet = false;
        }

        return geeignet;
    }
}</pre>
<p>Diese Fassade kann nun dazu benutzt werden, um die kreditwürdigkeit des Kunden zu prüfen, ohne dabei selbst auf die Subklassen zugreifen zu müssen. Das bietet den immensen Vorteil, dass die Prüfung nun in den jeweiligen Subklassen erweitert werden kann, ohne dass die Fassade oder die explizite Prüfung des Kunden an mehreren Stellen geändert werden muss. So können wir nun prüfen:</p>
<pre>static void Main()
{
    var k = new Kunde { Name = "Max Mustermann" };
    var h = new Hypothek();

    bool geeignet = h.IstGeeignet(k, 250000);
    Console.WriteLine(k.Name + " wurde " + (geeignet ? "angenommen" : "abgelehnt"));
}</pre>
<p>Und wie immer dürft ihr den Code verwenden und ändern wie ihr lustig seid!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-facade/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Patterns: Prototype</title>
		<link>http://www.codedom.de/design-patterns-prototype</link>
		<comments>http://www.codedom.de/design-patterns-prototype#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:00:41 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1093</guid>
		<description><![CDATA[Der Prototype ist ein Entwurfsmuster aus der Kategorie der Erzeugungsmuster (Creational Patterns), ähnlich wie der bereits beschriebene Singleton. Dabei erzeugt der Prototyp neue Instanzen eines Objektes bzw. einer Klasse auf Basis einer bereits definierten Vorlage, die für neue Instanzen schlichtweg geklont werden, statt alle Felder und Eigenschaften neu zu setzen.]]></description>
			<content:encoded><![CDATA[<p>Der <strong>Prototype</strong> ist ein <strong>Entwurfsmuster</strong> aus der Kategorie der <strong>Erzeugungsmuster</strong> (Creational Patterns), ähnlich wie der bereits beschriebene <a title="Design Patterns: Singleton" href="http://www.codedom.de/design-patterns-singleton">Singleton</a>. Dabei erzeugt der Prototype neue Instanzen eines Objektes bzw. einer Klasse auf Basis einer bereits definierten <strong>Vorlage</strong>, die für neue Instanzen schlichtweg geklont werden, statt alle Felder und Eigenschaften neu zu setzen.</p>
<p>In den meisten Fällen kommt immer dann ein Prototype zum Einsatz, wenn das Erzeugen neuer Instanzen von Klassen sehr kostspielig ist, die Instanzen sich aber grundsätzlich sehr ähnlich sind. Es gibt hier noch eine Reihe von anderen Gründen die ich gerne zitieren möchte:</p>
<blockquote><p><em>&#8220;Ein Prototyp findet Anwendung, wenn die Erzeugung weiterer Instanzen einer Klasse teuer ist und sich die Objekte ähneln, die zu instanziierenden Klassen erst zur Laufzeit bekannt sind, eine Hierarchie von Fabriken parallel zu einer Hierarchie von Produkten vermieden werden soll oder wenn die Objekte einer Klasse nur wenige Zustandskombinationen annehmen können; oder wenn die Bearbeitung von Vorlagen sehr ähnlich oder gleich der von Objekten ist.&#8221;</em> &#8211; Quelle: <a title="Wikipedia - Entwurfsmuster Prototype" href="http://de.wikipedia.org/wiki/Prototyp_%28Entwurfsmuster%29" target="_blank">wikipedia.de</a></p></blockquote>
<p><img class="aligncenter size-full wp-image-1100" title="Design Patterns: Prototype" src="http://www.codedom.de/wp-content/uploads/2011/06/ScreenShot-231-DoFactory.GangOfFour-Microsoft-Visual-Studio-Administrator.png" alt="Design Patterns: Prototype" width="532" height="317" /></p>
<p>Um den Prototype in Aktion sehen zu können, benötigen wir zuerst ein passendes Beispiel, welches wir uns überlegen müssen. Im Internet bin ich häufig über einen Farbenmanager gestolpert, der entweder nicht korrekt implementiert oder schlecht kommentiert wurde, daher möchte in an einem solchen Beispiel einmal die Funktionsweise des Prototypes erklären.</p>
<p><span id="more-1093"></span></p>
<p>Als Erstes brauchen wir hier eine Klasse, welche von ICloneable abgeleitet ist, damit wir die Clone() Methoden nutzen können. Die Klasse enthält die Grundbausteine einer jeden Farbe, die RGB Werte, sowie die oben bereits genannte Methode.</p>
<pre>class Farbe : ICloneable
{
    // Roten Anteil der Farbe holen oder setzen
    public byte R { get; set; }

    // Grünen Anteil der Farbe holen oder setzen
    public byte G { get; set; }

    // Blauen Anteil der Farbe holen oder setzen
    public byte B { get; set; }

    // Die Clone() Methode
    public object Clone()
    {
        return this.MemberwiseClone();
    }
}</pre>
<p>Das ist nun zunächst unsere Basis-Klasse, welche die grundlegenden Farbeigenschaften enthält, die wir für jede neue Farbe brauchen. Als Nächstes definieren wir uns eine ENUM, welche bestimmte Farben bereits enthält. Hier einmal die Basis-Farben rot, grün, blau sowie eigene, selbst zu definierene Farben.</p>
<pre>enum FarbTyp
{
    Rot,
    Gruen,
    Blau,
    Eigene1,
    Eigene2,
    Eigene3
}</pre>
<p>Um das Ganze nun einfacher und sauberer handhaben zu können, basteln wir uns noch eine FarbManager Klasse, welche mit Hilfe eines Dictionary unsere Farbtypen und unsere Farben beinhaltet.</p>
<pre>class FarbManager
{
    private Dictionary&lt;FarbTyp, Farbe&gt; _farben = new Dictionary&lt;FarbTyp, Farbe&gt;();

    // Holt oder setzt die Farbe
    public Farbe this[FarbTyp typ]
    {
        get { return _farben[typ]; }
        set { _farben.Add(typ, value); }
    }
}</pre>
<p>(Achtung, an dieser Stelle werden &lt; als &amp;lt; und &gt; als &amp;gt; dargestellt!)</p>
<p>Und schon steht unser Grundgerüst für den Prototype! Jetzt können wir in der Main() Methode unseren FarbManager initialisieren und unsere Farbe hinzufügen. Zum Schluss sehen wir, wie wir mit der Clone() Methode einzelne Farben kopieren können.</p>
<pre>static void Main()
{
    var farbmanager = new FarbManager();

    // Standardfarben
    farbmanager[FarbTyp.Rot] = new Farbe { R = 255, G = 0, B = 0 };
    farbmanager[FarbTyp.Gruen] = new Farbe { R = 0, G = 255, B = 0 };
    farbmanager[FarbTyp.Blau] = new Farbe { R = 0, G = 0, B = 255 };

    // Eigene Farben
    farbmanager[FarbTyp.Eigene1] = new Farbe { R = 54, G = 90, B = 20 };
    farbmanager[FarbTyp.Eigene2] = new Farbe { R = 128, G = 128, B = 128 };
    farbmanager[FarbTyp.Eigene3] = new Farbe { R = 80, G = 120, B = 230 };

    // Farben aus dem FarbManager benutzen
    var farbe1 = farbmanager[FarbTyp.Rot].Clone() as Farbe;
    var farbe2 = farbmanager[FarbTyp.Eigene2].Clone() as Farbe;
}</pre>
<p>Hier haben wir nun in den Objekten farbe1 und farbe2 die Eigenschaften R, G und B. In diesen sind die vorher durch den FarbManager festgelegten Bytes gespeichert, die unsere eigentlichen Farben darstellen. Möchte ich nun im späteren Verlauf meiner Anwendung eine Farbe benutzen, so muss ich diese nicht immer komplett neu implementieren, sondern kann über die Clone() Methode des FarbManagers mir meine Objekte jederzeit definieren. Zusätzlich hat diese Vorgehensweise den Vorteil, dass ich Farben und deren Eigenschaften, zentral an einer Stelle definieren kann ohne jederzeit im gesamten Quellcode nach neuen Farben suchen zu müssen.</p>
<p>Wie immer an dieser Stelle wünsche ich viel Spaß beim Testen und Tüfteln!</p>
<address>Quellen: Inspiration des Prototypes, <a title=".NET Design Patterns and Architectures in C# and VB" href="http://www.dofactory.com/" target="_blank">dofactory</a></address>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/design-patterns-prototype/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LulzSec: Wurde mein Account gehackt?</title>
		<link>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt</link>
		<comments>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt#comments</comments>
		<pubDate>Tue, 28 Jun 2011 09:30:07 +0000</pubDate>
		<dc:creator>Dustin Klein</dc:creator>
				<category><![CDATA[Aktuelles]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.codedom.de/?p=1088</guid>
		<description><![CDATA[Da die Hackergruppe LulzSec in den letzten 50 Tagen sehr aktiv war und sich somit in den Besitz von hunderttausenden Accounts bringen konnte stellt sich dem Ein oder Anderen die Frage: "Ist mein Account denn nun auch betroffen?".]]></description>
			<content:encoded><![CDATA[<p>Da die Hackergruppe <strong>LulzSec</strong> in den letzten 50 Tagen sehr aktiv war und sich somit in den Besitz von hunderttausenden <strong>Accounts</strong> bringen konnte stellt sich dem Ein oder Anderen die Frage: &#8220;Ist mein Account denn nun auch betroffen?&#8221;. Auch wenn man <strong>Passwörter</strong> immer in einem festdefinierten Zeitfenster ändern sollte, so möchte der vorsichtige <strong>User</strong> ja nicht gleich alle seine Accounts umstellen. Genau für diese Benutzer gibt es nun gleich zwei <strong>Tools</strong> mit denen sich feststellen lässt, ob sich ihr Account unter den Opfern der LulzSec Bewegung befindet.</p>
<p><span id="more-1088"></span></p>
<p><img class="aligncenter" title="LulzSec" src="http://static.gulli.com/media/2011/06/thumbs/370/lulzsec.jpg" alt="LulzSec" width="369" height="388" /></p>
<p>Nachdem die LulzSec Mitglieder nun zu Anonymous abgewandert sind, besteht wohl erstmal keine größere Gefahr mehr für den normalen Nutzer. Anonymous hat sich nämlich im Gegensatz zur LulzSec Gruppe eher dem Hacken von Regierungsmaterial verschrieben ist somit Vorreiter der #AntiSec Bewegung. Dennoch kann man rückwirkend sagen, dass die Jungs von LulzSec doch sehr motiviert bei der Sache waren. Hier ein kleiner Überblick über die neusten Hacks:</p>
<ul>
<li>50 Days of Lulz.txt 2.64 KiB</li>
<li>AOL internal data.txt 63.6 KiB</li>
<li>AT&amp;T internal data.rar 314.59 MiB</li>
<li>Battlefield Heroes Beta (550k users).csv 24.67 MiB</li>
<li>FBI being silly.txt 3.82 KiB</li>
<li>Hackforums.net (200k users).sql 111.2 MiB</li>
<li>Nato-bookshop.org (12k users).csv 941.8 KiB</li>
<li>Office networks of corporations.txt 3.87 KiB</li>
<li>Private Investigator Emails.txt 2.52 KiB</li>
<li>Random gaming forums (50k users).txt 6.08 MiB</li>
<li>Silly routers.txt 67.7 KiB</li>
<li>navy.mil owned.png 240.51 KiB</li>
</ul>
<p>Um nun sicherzugehen, dass man selbst nicht in diesen Dokumenten auftaucht, bietet die Seite &#8220;<a title="Should I Change My Password?" href="https://shouldichangemypassword.com/" target="_blank">Should I Change My Password</a>&#8221; einen Check an, der die meisten Dokumente nach E-Mail Adressen oder Nicknames überprüft und euch Bescheid gibt, sofern diese Daten in den Dokumenten bzw. Datenbanken gefunden wurde.</p>
<p>Im gleichen Atemzug hat Gizmodo ebenfalls eine <a title="Gizmodo: Online Check" href="http://gizmodo.com/5815551/find-out-if-your-personal-data-is-part-of-lulzsecs-grand-finale" target="_blank">Prüfung online gestellt</a>. Hier werden nochmals andere Dokumente nach E-Mails und Co. durchforstet. Sollten eure E-Mail Adressen bei einem dieser Checks gefunden werden, ist dringend zur Änderung eurer Passwörter zu raten! Ich jedenfalls schien diesmal verschont geblieben zu sein&#8230;</p>
<pre>Quellen: Liste der Dokumente, &lt;a title="Gizmodo" href="http://gizmodo.com/5815551/find-out-if-your-personal-data-is-part-of-lulzsecs-grand-finale" target="_blank"&gt;Gizmodo&lt;/a&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.codedom.de/lulzsec-wurde-mein-account-gehackt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
