<?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>welt-held.de</title>
	<atom:link href="http://www.welt-held.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.welt-held.de</link>
	<description>Sind wir nicht alle Welt Held?</description>
	<lastBuildDate>Thu, 02 Aug 2012 13:46:08 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>TFS Alerts</title>
		<link>http://www.welt-held.de/2012-tfs-alerts.html</link>
		<comments>http://www.welt-held.de/2012-tfs-alerts.html#comments</comments>
		<pubDate>Wed, 23 Nov 2011 09:14:36 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[alert]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[tfs]]></category>
		<category><![CDATA[visual studio 201]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=2012</guid>
		<description><![CDATA[Der Team Foundation Server bringt ein sehr nettes Feature mit, er informiert mich über bestimmte Änderungen per Email.
Finden tut ihr den &#8220;Alert Explorer&#8221; in Visual Studio 2010 unter &#8220;Team&#8221; - &#8220;Alert Explorer&#8221;. 

 Ich habe hier ein Alert auf meine Work Items und Tasks sowie wenn jemand bestimmte  [...]]]></description>
				<content:encoded><![CDATA[<p>Der Team Foundation Server bringt ein sehr nettes Feature mit, er informiert mich über bestimmte Änderungen per Email.<br />
Finden tut ihr den &#8220;Alert Explorer&#8221; in Visual Studio 2010 unter &#8220;Team&#8221; -> &#8220;Alert Explorer&#8221;. </p>
<p><a href="http://welt-held.de/files/AlertExplorer.jpg"><img src="http://welt-held.de/files/AlertExplorer.jpg" alt="Alert Explorer Visual Studio 2010" title="Alert Explorer" width="665" height="201" class="aligncenter size-full wp-image-2013" /></a></p>
<p><a href="http://welt-held.de/files/NewAlert.jpg"><img src="http://welt-held.de/files/NewAlert-150x150.jpg" alt="Alert hinzufügen in Visual Studio 2010" title="New Alert" width="150" height="150" class="alignright size-thumbnail wp-image-2014" /></a> Ich habe hier ein Alert auf meine Work Items und Tasks sowie wenn jemand bestimmte Dateien eincheckt. Möglich sind aber auch noch Meldungen über Builds.<br />
Mit einem Klick auf &#8220;New Alert&#8221; findet ihr Vorlagen für die verschiedenen Alert-Arten sowie einige vordefinierten Templates.<br />
Wenn ihr eine Vorlage auswählt, seid ihr automatisch als Empfänger vorbelegt. Ihr könnt allerdings auch mehrere Benutzer informieren lassen. Der Name dient ledeglich zur Organisation im Alert Explorer, den Betreff oder den Inhalt der Emails kann man leider nicht weiter beeinflussen. Dies wäre durchaus praktisch um in Outlook spezielle Regeln greifen zu lassen.<br />
Unterhalt der &#8220;Alert Definition&#8221; werden die gewünschten Filterkreterien angegeben, hier mal ein Beispiel um mich über alle Änderungen an meinen Workpackages / Tasks / Bugs / etc. informieren zu lassen, die nicht ich gemacht habe.</p>
<p><a href="http://welt-held.de/files/WorkItemChanged.jpg"><img src="http://welt-held.de/files/WorkItemChanged-150x150.jpg" alt="" title="Work Item Changed" width="150" height="150" class="aligncenter size-thumbnail wp-image-2018" /></a></p>
<p>Wer über Änderungen an Dateien informiert werden will, hat über den Source Control Explorer zusätzlich die Möglichkeit mit einem Rechtsklick auf die gewünschte Datei oder Ordner einen Alert zu erstellen. Hier bei wird nur eine Datei in die Alert Definition hinzugefügt. Markiert man mehrere Dateien im SCE, so bleibt der Punkt disabled. Allerdings kann man die Defintition logisch mit OR verknüpfen und so mehrer Dateien mit einer Defintition traken.<br />
<a href="http://welt-held.de/files/AlertInSourceControl.jpg"><img src="http://welt-held.de/files/AlertInSourceControl-150x150.jpg" alt="" title="Alert In Source Control Explorer" width="150" height="150" class="aligncenter size-thumbnail wp-image-2019" /></a></p>
<p>Meiner Meinung nach ein großartiges Feature. Nicht selten kommt es vor, dass Workpackages angelegt oder geändert werden, ich dies aber erst spät mitbekomme. Oder aber ich kann verfolgen, ob die Kollegen in den getrakten Dateien auch nur die Zeilen ändern, die sie ändern dürfen <img src='http://welt-held.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=2012&amp;md5=6d55c74ee6fce7ba0e472172a2033ca6" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/2012-tfs-alerts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F2012-tfs-alerts.html&amp;language=de_DE&amp;category=text&amp;title=TFS+Alerts&amp;description=Der+Team+Foundation+Server+bringt+ein+sehr+nettes+Feature+mit%2C+er+informiert+mich+%C3%BCber+bestimmte+%C3%84nderungen+per+Email.+Finden+tut+ihr+den+%26%238220%3BAlert+Explorer%26%238221%3B+in+Visual+Studio+2010+unter+%26%238220%3BTeam%26%238221%3B...&amp;tags=alert%2CC%23%2Csource+control%2Ctfs%2Cvisual+studio+201%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Lego Harry Potter 2 &#8211; Die Jahre 5 &#8211; 7 &#8211; Der Kampf gegen den Tod</title>
		<link>http://www.welt-held.de/2027-lego-harry-potter-2-die-jahre-5-7-der-kampf-gegen-den-tod.html</link>
		<comments>http://www.welt-held.de/2027-lego-harry-potter-2-die-jahre-5-7-der-kampf-gegen-den-tod.html#comments</comments>
		<pubDate>Tue, 22 Nov 2011 07:44:24 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[harry potter]]></category>
		<category><![CDATA[lego]]></category>
		<category><![CDATA[wii]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=2027</guid>
		<description><![CDATA[Achtung: Spoilergefahr!!
Mal ein kleiner Quicktipp, welcher mich gestern doch eine ordentliche Anzahl an Nervenenden gekostet hat.
Wenn man die Geschichte mit den Heiligtümern des Todes nachspielt, kommt man an eine Stelle, bei der man sich mit dem Umhang am Tod vorbeischleichen muss und ihn mit  [...]]]></description>
				<content:encoded><![CDATA[<p>Achtung: Spoilergefahr!!</p>
<p>Mal ein kleiner Quicktipp, welcher mich gestern doch eine ordentliche Anzahl an Nervenenden gekostet hat.<br />
Wenn man die Geschichte mit den Heiligtümern des Todes nachspielt, kommt man an eine Stelle, bei der man sich mit dem Umhang am Tod vorbeischleichen muss und ihn mit Kürbissen bewerfen muss. Dazu lasst ihr sie schweben und fangt an sie zu drehen. Allerdings müsst ihr den Stick vom Nunchuck nach <strong>links</strong> und nicht nach oben drücken. Die drehen sich zwar auch aber kommen nicht an.</p>
<p>Muss man erstmal darauf kommen <img src='http://welt-held.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ansonsten, gutes Spiel!</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=2027&amp;md5=f9dc1131e71b4749f1f2e413b8a75275" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/2027-lego-harry-potter-2-die-jahre-5-7-der-kampf-gegen-den-tod.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F2027-lego-harry-potter-2-die-jahre-5-7-der-kampf-gegen-den-tod.html&amp;language=de_DE&amp;category=text&amp;title=Lego+Harry+Potter+2+%26%238211%3B+Die+Jahre+5+%26%238211%3B+7+%26%238211%3B+Der+Kampf+gegen+den+Tod&amp;description=Achtung%3A+Spoilergefahr%21%21+Mal+ein+kleiner+Quicktipp%2C+welcher+mich+gestern+doch+eine+ordentliche+Anzahl+an+Nervenenden+gekostet+hat.+Wenn+man+die+Geschichte+mit+den+Heiligt%C3%BCmern+des+Todes+nachspielt%2C+kommt+man+an...&amp;tags=harry+potter%2Clego%2Cwii%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Google Nexus S</title>
		<link>http://www.welt-held.de/2029-google-nexus-s.html</link>
		<comments>http://www.welt-held.de/2029-google-nexus-s.html#comments</comments>
		<pubDate>Thu, 17 Nov 2011 10:59:31 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[handy]]></category>
		<category><![CDATA[nexus s]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[telefon]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=2029</guid>
		<description><![CDATA[Vor einigen Monaten habe ich im Blog mal ein wenig Dampf abgelassen und mich über mein Palm Pre aufgeregt. Mittlerweile habe ich mich davon getrennt und es gammelt in der Schublade vor sich hin und habe mir auf Empfehlung eines Kollegen und meines Cousins ein Google Nexus S zugelegt. Es hat zwar  [...]]]></description>
				<content:encoded><![CDATA[<p>Vor einigen Monaten habe ich im Blog mal ein wenig Dampf abgelassen und mich über mein Palm Pre <a href="http://www.welt-held.de/1980-uber-ein-jahr-mit-dem-palm-pre.html">aufgeregt</a>. Mittlerweile habe ich mich davon getrennt und es gammelt in der Schublade vor sich hin und habe mir auf Empfehlung eines Kollegen und meines <a href="http://wap.ecw.de/archives/1606">Cousins</a> ein Google Nexus S zugelegt. Es hat zwar schon ein paar Tage auf dem Buckel, war für aber rund 230€ auch verhältnismäßig günstig in der Anschaffung.</p>
<h3>Android?</h3>
<p>Was mich ja immer ein wenig abgeschreckt hat, mir ein Android Smartphone zuzulegen ist die Updatepolitik mancher Hersteller / Anbieter. Google bringt eine neue Version rum, Motorola (beispielsweise) macht ihr Logo rein, spielt hier noch ein wenig, da noch ein wenig rum. Dann kommt noch T-Mobile und will auch noch ein bischen was ändern. Wenn es glatt läuft habe ich nach rund 6 Monaten die neue Version auf meinem Telefon. Das Nexus S hingegen ist im Prinzip das Google Entwickler Phone, so dass dort die Updates als erstes erscheinen.<br />
Sehr gut finde ich auch die Einbindung sämtlicher Google Dienste. Über Mails werde ich Just in Time benachrichtigt und ich aber immer und überall Zugriff auf meine Daten bei Google Docs oder den Kalender.</p>
<h3>Fast wunschlos glücklich</h3>
<p>Wenn ich mal die ganzen Kritikpunkte in meinem alten <a href="http://www.welt-held.de/1980-uber-ein-jahr-mit-dem-palm-pre.html" title="Beitrag">Beitrag</a> durchgehe, so wurden sie alle mit dem Geräte- und Betriebssystemwechsel gelöst.<br />
Der Desktop hat mehrere Seiten, fünf an der Zahl. Auf der Hauptseite habe ich meinen Kalender und Verknüpfungen zu den wichtigsten Anwendungen, wie Mail oder SMS. Auf einer weiteren Seite habe ich noch ein paar Verknüpfungen, die ich eher selten benötige, 3 Seiten sind praktisch leer.</p>
<p>In ca. 2 1/2 Monaten ist mein Telefon erst einmal komplett abgestürzt, während mein Pre damals sicherlich zig Fehlermeldungen geschmissen hätte, weil kein Speicher mehr frei war.<br />
Probleme mit der SIM-Karte gehören der Vergangenheit an, ab und an gibt es aber Empfangsschwierigkeiten, die ich allerdings auf o2 schiebe (Stichwort: &#8220;Einzelfall&#8221;). Beim Pre waren die Probleme öfter und ausgeprägter. </p>
<p>Sehr nervig war damals die Akkulaufzeit. Ich hatte alles deaktiviert, dennoch hat der Akku nicht lange gehalten. Beim Nexus habe ich alles aktiviert, spiele viel mehr mit rum und dennoch ist der Akku abends noch halb voll. Wenn ich 3G und WLan deaktivieren würde, hält der Akku problemlos mehrere Tage.</p>
<h3>Was konnte das Pre besser?</h3>
<p>Es gibt doch tatsächlich etwas, was mir am Pre richtig gut gefiel und mir jetzt leider fehlt. Das Pre hatte unter dem Display einen Button (wie der Home-Button beim iPhone), welcher leuchtete wenn man eine Nachricht empfangen oder einen Anruf verpasst hat. Wäre ein nettes Feature, wenn beim Nexus S der Hardware-Home-Button sporadisch aufleuchten würde o.ä. Lässt sich allerdings wohl mit Android 4.0 nicht umsetzen, da die neuren Telefone wohl keine Hardware-Tasen mehr besitzen.</p>
<h3>Fazit</h3>
<p>Auch wenn das Nexus S ein paar Tage alt ist, der Nachfolger Nexus Galaxy mittlerweile auf dem Markt ist, habe ich mir ein sehr robustes und nutzbares Smartphone zugelegt, mit dem ich noch einige Zeit meine Freude haben werde.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=2029&amp;md5=a262d33a18df6cdc940a9208680a2c7e" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/2029-google-nexus-s.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F2029-google-nexus-s.html&amp;language=de_DE&amp;category=text&amp;title=Google+Nexus+S&amp;description=Vor+einigen+Monaten+habe+ich+im+Blog+mal+ein+wenig+Dampf+abgelassen+und+mich+%C3%BCber+mein+Palm+Pre+aufgeregt.+Mittlerweile+habe+ich+mich+davon+getrennt+und+es+gammelt+in+der...&amp;tags=google%2Chandy%2Cnexus+s%2Csmartphone%2Ctelefon%2Cblog" type="text/html" />
	</item>
		<item>
		<title>StringWriter mit anderem Encoding</title>
		<link>http://www.welt-held.de/2008-stringwriter-mit-anderem-encoding.html</link>
		<comments>http://www.welt-held.de/2008-stringwriter-mit-anderem-encoding.html#comments</comments>
		<pubDate>Thu, 03 Nov 2011 05:43:53 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[serialize]]></category>
		<category><![CDATA[stringwriter]]></category>
		<category><![CDATA[utf16]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=2008</guid>
		<description><![CDATA[Vor einer ganzen Weile habe ich mal die StringWriter-Klasse empfohlen.
Die StringWriter-Klasse nutzt intern UTF-16, wodurch zum Beispiel bei der Xml-Serialisierung von Klassen auch das Ergebnis in UTF-16 vorliegt. Dies ist nicht zwangsläufig gewünscht, bei mir hat dadurch ein Backend-Service  [...]]]></description>
				<content:encoded><![CDATA[<p>Vor einer ganzen Weile habe ich mal die <a href="http://www.welt-held.de/1964-tipp-stringreader-und-stringwriter.html">StringWriter</a>-Klasse empfohlen.<br />
Die StringWriter-Klasse nutzt intern UTF-16, wodurch zum Beispiel bei der Xml-Serialisierung von Klassen auch das Ergebnis in UTF-16 vorliegt. Dies ist nicht zwangsläufig gewünscht, bei mir hat dadurch ein Backend-Service gestreikt.<br />
Um trotzdem den StringWriter weiter zu verwenden, muss man sich eine eigene Klasse schreiben, welche von der StringWriter ableitet und das Encoding-Property überschreibt:</p>
<pre class="brush: csharp; title: ; notranslate">using System;
using System.IO;
using System.Text;

namespace Utilities.IO
{

	/// &lt;summary&gt;
	/// 	A simple class derived from StringWriter, but which allows
	/// 	the user to select which Encoding is used. This is most
	/// 	likely to be used with XmlTextWriter, which uses the Encoding
	/// 	property to determine which encoding to specify in the XML.
	/// &lt;/summary&gt;
	public class StringWriterWithEncoding : StringWriter
	{
		private Encoding _encoding;

		/// &lt;summary&gt;
		/// 	Initializes a new instance of the StringWriterWithEncoding class
		/// 	with the specified encoding.
		/// &lt;/summary&gt;
		/// &lt;param name = &quot;encoding&quot;&gt;The encoding to report.&lt;/param&gt;
		public StringWriterWithEncoding(Encoding encoding)
			: base()
		{
			this._encoding = encoding;
		}

		/// &lt;summary&gt;
		/// 	Initializes a new instance of the StringWriter class with the 
		/// 	specified format control and encoding.
		/// &lt;/summary&gt;
		/// &lt;param name = &quot;encoding&quot;&gt;The encoding to report.&lt;/param&gt;
		/// &lt;param name = &quot;formatProvider&quot;&gt;An IFormatProvider object that controls formatting.&lt;/param&gt;
		public StringWriterWithEncoding(Encoding encoding, IFormatProvider formatProvider)
			: base(formatProvider)
		{
			this._encoding = encoding;
		}

		/// &lt;summary&gt;
		/// 	Initializes a new instance of the StringWriter class that writes to the
		/// 	specified StringBuilder, and reports the specified encoding.
		/// &lt;/summary&gt;
		/// &lt;param name = &quot;encoding&quot;&gt;The encoding to report.&lt;/param&gt;
		/// &lt;param name = &quot;sb&quot;&gt;The StringBuilder to write to. &lt;/param&gt;
		public StringWriterWithEncoding(Encoding encoding, StringBuilder sb)
			: base(sb)
		{
			this._encoding = encoding;
		}

		/// &lt;summary&gt;
		/// 	Initializes a new instance of the StringWriter class that writes to the specified 
		/// 	StringBuilder, has the specified format provider, and reports the specified encoding.
		/// &lt;/summary&gt;
		/// &lt;param name = &quot;encoding&quot;&gt;The encoding to report.&lt;/param&gt;
		/// &lt;param name = &quot;sb&quot;&gt;The StringBuilder to write to. &lt;/param&gt;
		/// &lt;param name = &quot;formatProvider&quot;&gt;An IFormatProvider object that controls formatting.&lt;/param&gt;
		public StringWriterWithEncoding(Encoding encoding, StringBuilder sb, IFormatProvider formatProvider)
			: base(sb, formatProvider)
		{
			this._encoding = encoding;
		}

		/// &lt;summary&gt;
		/// 	Gets the Encoding in which the output is written.
		/// &lt;/summary&gt;
		public override Encoding Encoding
		{
			get { return this._encoding; }
		}
	}
}
</pre>
<p><strong>Update:</strong><br />
Habe die Klasse mal um Kommentare erweitert.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=2008&amp;md5=67cf5eb483bf133c953176986f619a70" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/2008-stringwriter-mit-anderem-encoding.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F2008-stringwriter-mit-anderem-encoding.html&amp;language=de_DE&amp;category=text&amp;title=StringWriter+mit+anderem+Encoding&amp;description=Vor+einer+ganzen+Weile+habe+ich+mal+die+StringWriter-Klasse+empfohlen.+Die+StringWriter-Klasse+nutzt+intern+UTF-16%2C+wodurch+zum+Beispiel+bei+der+Xml-Serialisierung+von+Klassen+auch+das+Ergebnis+in+UTF-16+vorliegt.+Dies...&amp;tags=code%2Cserialize%2Cstringwriter%2Cutf16%2Cutf8%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>XML serialisierbares Dictionary</title>
		<link>http://www.welt-held.de/2002-xml-serialisierbares-dictionary-tkey-tvalue.html</link>
		<comments>http://www.welt-held.de/2002-xml-serialisierbares-dictionary-tkey-tvalue.html#comments</comments>
		<pubDate>Mon, 17 Oct 2011 14:24:08 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[generic]]></category>
		<category><![CDATA[serialize]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=2002</guid>
		<description><![CDATA[Ich verstehe zwar nicht, warum es standardmäßig nicht im .NET Framework implementiert ist, allerdings ist es ohne Hilfsmittel nicht möglich, eine Klasse mit einem Dictionary mittels XmlSerializer zu serialisieren! Mit folgender Hilfsklasse funktioniert es dahin anstandslos, vorausgesetzt sowohl  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich verstehe zwar nicht, warum es standardmäßig nicht im .NET Framework implementiert ist, allerdings ist es ohne Hilfsmittel nicht möglich, eine Klasse mit einem Dictionary<tkey ,TValue> mittels <a href="http://msdn.microsoft.com/de-de/library/system.xml.serialization.xmlserializer(v=vs.80).aspx">XmlSerializer</a> zu serialisieren! Mit folgender Hilfsklasse funktioniert es dahin anstandslos, vorausgesetzt sowohl TKey und TValue sind Xml-serialisierbar.</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Collections.Generic;
using System.Xml.Serialization;

namespace Utilities.Generic
{
	[XmlRoot(&quot;dictionary&quot;)]
	public class SerializableDictionary&lt;TKey, TValue&gt; : Dictionary&lt;TKey, TValue&gt;, IXmlSerializable
	{
		#region Constructors

		public SerializableDictionary():base() {}

		public SerializableDictionary(IDictionary&lt;TKey, TValue&gt; dictionary) : base(dictionary) { }

		public SerializableDictionary(IDictionary&lt;TKey, TValue&gt; dictionary, IEqualityComparer&lt;TKey&gt; comparer) : base(dictionary, comparer) {}

		public SerializableDictionary(int capacity, IEqualityComparer&lt;TKey&gt; comparer) : base(capacity, comparer) { }

		public SerializableDictionary(IEqualityComparer&lt;TKey&gt; comparer) : base(comparer) { }

		public SerializableDictionary(int capacity) : base(capacity) { }

		#endregion

		private const string ItemTagName = &quot;item&quot;;
		private const string KeyTagName = &quot;key&quot;;
		private const string ValueTagName = &quot;value&quot;;

		/// &lt;summary&gt;
		/// Diese Methode ist reserviert und sollte nicht verwendet werden. Wenn Sie die IXmlSerializable-Schnittstelle implementieren, sollten Sie null (Nothing in Visual Basic) von der Methode zurückgeben und stattdessen das &lt;see cref=&quot;T:System.Xml.Serialization.XmlSchemaProviderAttribute&quot;/&gt; auf die Klasse anwenden, wenn ein benutzerdefiniertes Schema erforderlich ist.
		/// &lt;/summary&gt;
		/// &lt;returns&gt;
		/// Ein &lt;see cref=&quot;T:System.Xml.Schema.XmlSchema&quot;/&gt; zur Beschreibung der XML-Darstellung des Objekts, das von der &lt;see cref=&quot;M:System.Xml.Serialization.IXmlSerializable.WriteXml(System.Xml.XmlWriter)&quot;/&gt;-Methode erstellt und von der &lt;see cref=&quot;M:System.Xml.Serialization.IXmlSerializable.ReadXml(System.Xml.XmlReader)&quot;/&gt;-Methode verwendet wird.
		/// &lt;/returns&gt;
		public System.Xml.Schema.XmlSchema GetSchema()
		{
			return null;
		}

		/// &lt;summary&gt;
		/// Generiert ein Objekt aus seiner XML-Darstellung.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;reader&quot;&gt;Der &lt;see cref=&quot;T:System.Xml.XmlReader&quot;/&gt;-Stream, aus dem das Objekt deserialisiert wird.&lt;/param&gt;
		public void ReadXml(System.Xml.XmlReader reader)
		{
			XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
			XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

			bool wasEmpty = reader.IsEmptyElement;
			reader.Read();

			if (wasEmpty)
			{
				return;
			}

			while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
			{
				reader.ReadStartElement(ItemTagName);

				reader.ReadStartElement(KeyTagName);
				TKey key = (TKey)keySerializer.Deserialize(reader);
				reader.ReadEndElement();

				reader.ReadStartElement(ValueTagName);
				TValue value = (TValue)valueSerializer.Deserialize(reader);
				reader.ReadEndElement();

				this.Add(key, value);

				reader.ReadEndElement();
				reader.MoveToContent();
			}
			reader.ReadEndElement();
		}

		/// &lt;summary&gt;
		/// Konvertiert ein Objekt in seine XML-Darstellung.
		/// &lt;/summary&gt;
		/// &lt;param name=&quot;writer&quot;&gt;Der &lt;see cref=&quot;T:System.Xml.XmlWriter&quot;/&gt;-Stream, in den das Objekt serialisiert wird.&lt;/param&gt;
		public void WriteXml(System.Xml.XmlWriter writer)
		{
			XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
			XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));

			foreach (TKey key in this.Keys)
			{
				writer.WriteStartElement(ItemTagName);

				writer.WriteStartElement(KeyTagName);
				keySerializer.Serialize(writer, key);
				writer.WriteEndElement();

				writer.WriteStartElement(ValueTagName);
				TValue value = this[key];
				valueSerializer.Serialize(writer, value);
				writer.WriteEndElement();

				writer.WriteEndElement();
			}
		}
	}
}</pre>
<p>Den ursprünglichen Code habe ich <a href="http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx">hier</a> her.</tkey></p>
<p><strong>Update:</strong><br />
Habe die Klasse mal um die Standardkonstruktoren der Basis-Klasse erweitert um ein bestehendes Dictionary einfach umwandeln zu können.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=2002&amp;md5=a29081684b9356ba8ec932604d93c0c8" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/2002-xml-serialisierbares-dictionary-tkey-tvalue.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F2002-xml-serialisierbares-dictionary-tkey-tvalue.html&amp;language=de_DE&amp;category=text&amp;title=XML+serialisierbares+Dictionary&amp;description=Ich+verstehe+zwar+nicht%2C+warum+es+standardm%C3%A4%C3%9Fig+nicht+im+.NET+Framework+implementiert+ist%2C+allerdings+ist+es+ohne+Hilfsmittel+nicht+m%C3%B6glich%2C+eine+Klasse+mit+einem+Dictionary+mittels+XmlSerializer+zu+serialisieren%21+Mit...&amp;tags=C%23%2Ccsharp%2Cdictionary%2Cgeneric%2Cserialize%2Cxml%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Verschiedene ContextMenues bei einem NotifyIcon</title>
		<link>http://www.welt-held.de/1996-verschiedene-contextmenues-bei-einem-notifyicon.html</link>
		<comments>http://www.welt-held.de/1996-verschiedene-contextmenues-bei-einem-notifyicon.html#comments</comments>
		<pubDate>Mon, 25 Jul 2011 20:31:14 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[contextmenu]]></category>
		<category><![CDATA[notifyicon]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1996</guid>
		<description><![CDATA[In einer kleinen Applikation mit NotifyIcon in der Taskbar wollte ich unterschiedliche ContextMenues öffnen, je nachdem, ob man mit der linken oder rechten Maustaste auf das Icon klickt.
Die erste Hürde, welche es zu nehmen gilt, ist es, dass ContextMenü auch bei einem Links-Klick zu öffnen. Man  [...]]]></description>
				<content:encoded><![CDATA[<p>In einer kleinen Applikation mit NotifyIcon in der Taskbar wollte ich unterschiedliche ContextMenues öffnen, je nachdem, ob man mit der linken oder rechten Maustaste auf das Icon klickt.</p>
<p>Die erste Hürde, welche es zu nehmen gilt, ist es, dass ContextMenü auch bei einem Links-Klick zu öffnen. Man kann zwar eine entsprechende Methode nutzen, jedoch gibt es damit <a href="http://stackoverflow.com/questions/2208690/invoke-notifyicons-context-menu/2208910#2208910">Probleme</a>. Daher sollte man hier Reflection nutzen:</p>
<pre class="brush: csharp; title: ; notranslate">
// constructor..
this._trayIcon.MouseDown += this.TrayIconMouseDown;

private void TrayIconMouseDown(object sender, MouseEventArgs e)
{
	if (e.Button == MouseButtons.Left)
	{
		MethodInfo mi = typeof (NotifyIcon).GetMethod(&quot;ShowContextMenu&quot;, BindingFlags.Instance | BindingFlags.NonPublic);
		mi.Invoke(this._trayIcon, null);
	}
}
</pre>
<p>Nun öffnet sich schon mal das Kontextmenü auch beim Linksklick. Und hier kann man ansetzen, um das Menü entweder zu manipulieren oder zu ersetzen. Ich selbst habe mir einfach zwei Objekte vorbereitet, welche ich je nach Mausklick austausche:</p>
<pre class="brush: csharp; title: ; notranslate">
private void TrayIconMouseDown(object sender, MouseEventArgs e)
{
	if (e.Button == MouseButtons.Left)
	{
		this._trayIcon.ContextMenu = this._leftClickMenu;
		MethodInfo mi = typeof (NotifyIcon).GetMethod(&quot;ShowContextMenu&quot;, BindingFlags.Instance | BindingFlags.NonPublic);
		mi.Invoke(this._trayIcon, null);
	}
	else if (e.Button == MouseButtons.Right)
	{
		this._trayIcon.ContextMenu = this._rightClickMenu;
		MethodInfo mi = typeof(NotifyIcon).GetMethod(&quot;ShowContextMenu&quot;, BindingFlags.Instance | BindingFlags.NonPublic);
		mi.Invoke(this._trayIcon, null);
	}
}
</pre>
<p>Beim Testen ist mir aufgefallen, dass es mehrere Events gibt, an die man sich hängen könnte, etwa &#8220;MouseUp&#8221;, &#8220;MouseClick&#8221; usw. Beim Testen hat bei mir allerdings nur &#8220;MouseDown&#8221; korrekt funktioniert, bei den anderen hatte ich das Problem, dass zum Teil das Menü erst angezeigt wurde und dann der Eventhandler durchlaufen wurde (ich glaube sogar immer, wenn ich mit der linken Maustaste geklickt habe). Erklären konnte ich es mir allerdings nicht.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1996&amp;md5=13599e4f664332ff77c98333f55ca252" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1996-verschiedene-contextmenues-bei-einem-notifyicon.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1996-verschiedene-contextmenues-bei-einem-notifyicon.html&amp;language=de_DE&amp;category=text&amp;title=Verschiedene+ContextMenues+bei+einem+NotifyIcon&amp;description=In+einer+kleinen+Applikation+mit+NotifyIcon+in+der+Taskbar+wollte+ich+unterschiedliche+ContextMenues+%C3%B6ffnen%2C+je+nachdem%2C+ob+man+mit+der+linken+oder+rechten+Maustaste+auf+das+Icon+klickt.+Die+erste...&amp;tags=contextmenu%2Cnotifyicon%2Csource%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Kindle</title>
		<link>http://www.welt-held.de/1991-kindle.html</link>
		<comments>http://www.welt-held.de/1991-kindle.html#comments</comments>
		<pubDate>Sat, 23 Jul 2011 21:20:26 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1991</guid>
		<description><![CDATA[Vor gut einem Monat habe ich zu meinem Geburtstag einen Kindle geschenkt bekommen. Ich muss sagen, ich bin echt begeistert. Ich besitze nur die kleine Version, welche nur WLAN beinhaltet. Die andere Version besitzt eine integrierte Sim-Karte, mit der man in ca. 100 Ländern kostenlos auf den  [...]]]></description>
				<content:encoded><![CDATA[<p>Vor gut einem Monat habe ich zu meinem Geburtstag einen <a href="http://www.amazon.de/gp/product/B003DZ1Y8Q/ref=as_li_ss_tl?ie=UTF8&amp;tag=phpundperlde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B003DZ1Y8Q">Kindle</a> geschenkt bekommen. Ich muss sagen, ich bin echt begeistert. Ich besitze nur die kleine Version, welche nur WLAN beinhaltet. Die andere Version besitzt eine integrierte Sim-Karte, mit der man in ca. 100 Ländern kostenlos auf den Amazon-Kindle Shop zugreifen kann, um dort Bücher zu kaufen oder herunterzuladen. Wer nicht dauernd unterwegs oder nicht bereit ist, 40€ mehr zu bezahlen, für den sollte, wie mir, die kleine Version reichen. Ansonsten unterscheiden sie sich nicht.</p>
<h2>Das Display</h2>
<p>Als ich den Kindle ausgepackt habe, war ein englischer Hinweis auf dem Display, dass ich den Kindle mit dem USB Kabel an den PC anschließen solle, um ihn aufzuladen. Ich habe mit meinen Fingern versucht, die Hinweisfolie zu entfernen. Von vielen Geräten wie dem Handy oder Monitoren ist man gewohnt, dass auf dem Display eine Schutzfolie geklebt ist. Bei mir dauerte es einige Sekunden, bis ich bemerkt habe, dass diese gestochen scharfe Schrift keine Folie sondern der richtige Display war. Mir ist die Kinnlade praktisch schon vor der Inbetriebnahme heruntergefallen.</p>
<h2>Der Kindle Shop</h2>
<p>Nachdem ich den Kindle mit meinem WLAN verbunden und mit meinem Amazonkonto verknüpft hatte, ging ich erstmal im Kindle-Shop auf Büchersuche. Für einen Test lud ich mir erstmal ein kostenloses Buch herunter, Amazon bietet sehr viele <a href="http://www.amazon.de/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.de%2Fkostenlose-ebooks-kindle%2Fb%3Fie%3DUTF8%26node%3D594725031%26ref_%3Damb_link_159690867_5%23&amp;site-redirect=de&amp;tag=phpundperlde-21&amp;linkCode=ur2&amp;camp=1638&amp;creative=19454">kostenlose Klassiker</a> an (u.a. Jule Vernes oder Max und Moritz). Die Steuerung im Shop erfolgt mit dem 5-Way-Knopf (heißt er so?), praktisch ein Steuerkreuz in alle vier Richtungen sowie dem &#8220;Enter&#8221;-Knopf in der Mitte. Man navigiert durch die Links und will man einen auswählen, bestätigt man mit Enter. Für einzelne Bücher, welche man sich mal eben schnell kaufen möchte, ist die Navigation per Kindle vollkommen ausreichen. Nervig wird es erst, wenn man ein wenig schmökert und mehrere Bücher kaufen möchte. Denn nach jedem Einkauf landet man wieder auf der Startseite des Kindle-Shops. Da ist der (Massen-)Kauf am PC doch deutlich komfortabler.</p>
<h2>Formatdschungel</h2>
<p>Die Ebooks aus dem Kindle-Shop kommen in eigenen Kindleformat namens AZW. Zudem wird noch MOBI und PDF unterstützt. Das weit verbreitete ePub-Format wird leider nicht unterstützt. Dies ist natürlich sehr unpraktisch, da andere Webshops wie etwa buch.de nur ePub anbieten. Es gibt zwar Tools (etwa <a title="Calibre" href="http://calibre-ebook.com/">Calibre</a>) um ePub in Mobi und somit für den Kindle umzuwandeln, dies geht allerdings nur, solange das eBook nicht mit einem DRM geschützt ist. Sollte man das Glück haben, kopierschutzfreie eBooks umwandeln zu können, weiß ich nicht, ob es hier Verluste geben kann. Ich habe zwar gelesen, dass MOBI und ePub technisch fast identisch sein sollen, bestätigen kann ich dies aber nicht.<br />
Einen gewaltigen Nachteil hat man, wenn man PDFs nutzt. Ich hatte hier noch einige EBooks rumliegen, die sich im Laufe der Jahre angesammelt haben (Gratisdinger zu Weihnachten usw.). Während man bei AZW bzw. MOBI die Schriftgröße ändern kann und sich das Buch entsprechend auf dem Kindle anpasst, kann man bei PDFs nur zoomen. D.h. man muss dann nach rechts scrollen (sofern man den Kindle hochkant verwendet). Ich komme zwar mit der Schriftgröße der PDFs gut aus, meine Schwiegereltern hatten hier aber erhebliche Probleme. Eine Konvertierung vom PDF in MOBI ist zwar möglich, sah bei meinem Vorlagen aber nicht so schön aus, da mitten im Text die Seitenzahlen standen oder Bilder auf einmal spiegelverkehrt waren, Nach- oder Vorarbeit wäre also von Nöten gewesen (für einen Test aber zu viel). Zudem ist es nicht möglich, sich den Text vorlesen zu lassen (was allerdings auch nur in Englisch möglich ist).</p>
<h2>Zubehör</h2>
<p>Eigentlich braucht man nicht viel Zubehör, ich habe mir nur eine passende <a href="http://www.amazon.de/gp/product/B003DZ165W/ref=as_li_ss_tl?ie=UTF8&amp;tag=phpundperlde-21&amp;linkCode=as2&amp;camp=1638&amp;creative=19454&amp;creativeASIN=B003DZ165W">Ledertasche</a> dazugekauft, damit mein Kindle besser geschützt ist, vor allem wenn ich ihn nicht benutze. Es gibt noch eine Version mit Lampe, welche über den Kindle-Akku mit Strom versorgt wird. Zuhause bin ich persönlich allerdings ganz gut mit Lampen ausgestattet.</p>
<h2>Fazit</h2>
<p>Also ich bin sehr begeistert von meinem Kindle und will ihn nicht mehr hergeben. Ich habe in den letzten vier Wochen soviel gelesen wie in den letzten 3 Jahren davor! Der Akku hält lange, sofern man WLAN und 3G deaktivert hat und ihn nur zum Lesen verwendet. Man kann den Kindle theoretisch auch zum Browsen oder Musik hören nutzen, dafür ist er allerdings nicht gedacht und daher ist hier auch nicht so komfortabel wie ein iPad o.ä. Leider muss man sowas auch immer wieder anderen erklären, ein eBook-Reader ist zum Bücher lesen da und nicht um Videos bei Youtube, Mails bei Google oder Nachrichten bei Facebook anzuschauen. Desweiteren stört mich ein wenig, dass das ganze Betriebssystem nur auf Englisch verfügbar ist, dies stellt gerade für ältere Leute (wie etwa meine Schwiegeeltern) eine unnötige Hürde da. Aber in den wichtigsten Punkt, dem Lesen, ist der Kindle einfach grandios. Ich habe zwar keine anderen eBook-Reader zum Vergleichen, jedoch kann ich sagen, dass man mit ihm ohne Probleme mehrere Stunden lesen kann, ohne dass die Augen oder Arme müden werden (was ja bei dicken Wälzern gern mal vorkommen kann). Auch ist die Schrift dank der <a href="http://de.wikipedia.org/wiki/Elektronisches_Papier">elektronischen Tinte</a> scharf ohne Ende. Die fehlende Hintergrundbeleuchtung (das muss man den Youtube und Facebookleuten auch jedes mal erklären) entspannt die Augen ungemein im Vergleich zu einem PC.<br />
Mich stört eigentlich nur eine Tatsache, an der kann Amazon leider nicht viel ändern. Der deutsche Kindle-Shop ist im Vergleich zum amerikanischen winzig. Und die Preise sind dank Buchbindungspreis (annähernd) identisch zu den gedruckten Exemplaren. Ich würde mir hier wünschen, dass die elektronischen Versionen deutlich günstiger werden, da sie ja auch für die Verlage günstiger sind und / oder man bekommt eine eBook-Version gratis zum echten Buch. </p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1991&amp;md5=5441bf55ddbc84e8f574acd8d735638b" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1991-kindle.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1991-kindle.html&amp;language=de_DE&amp;category=text&amp;title=Kindle&amp;description=Vor+gut+einem+Monat+habe+ich+zu+meinem+Geburtstag+einen+Kindle+geschenkt+bekommen.+Ich+muss+sagen%2C+ich+bin+echt+begeistert.+Ich+besitze+nur+die+kleine+Version%2C+welche+nur+WLAN+beinhaltet....&amp;tags=kindle%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Signieren einer XML-Datei in C#</title>
		<link>http://www.welt-held.de/1983-signieren-einer-xml-datei-in-c.html</link>
		<comments>http://www.welt-held.de/1983-signieren-einer-xml-datei-in-c.html#comments</comments>
		<pubDate>Mon, 20 Jun 2011 18:03:54 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[asymmetrische verschlüsselung]]></category>
		<category><![CDATA[rsa]]></category>
		<category><![CDATA[signatur]]></category>
		<category><![CDATA[signieren]]></category>
		<category><![CDATA[xml signatur]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1983</guid>
		<description><![CDATA[Vielleicht haben sich schon einige von euch mit Lizenzen beschäftigt. Man erstellt eine Software, verkauft sie und möchte natürlich nicht, dass sie einfach von anderen kostenlos genutzt wird. Ich möchte daher heute eine Möglichkeit vorstellen. Sie ist recht simpel aber dennoch sehr flexibel  [...]]]></description>
				<content:encoded><![CDATA[<p>Vielleicht haben sich schon einige von euch mit Lizenzen beschäftigt. Man erstellt eine Software, verkauft sie und möchte natürlich nicht, dass sie einfach von anderen kostenlos genutzt wird. Ich möchte daher heute eine Möglichkeit vorstellen. Sie ist recht simpel aber dennoch sehr flexibel gestaltet.</p>
<p>Um meinen Ansatz zu verstehen, muss man wissen, was eine <a href="http://de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem">asymmetrische Verschlüsselung</a> funktioniert. Während bei einer symmetrischen Verschlüsselung mit einem Passwort sowohl ver- als auch entschlüsselt wird, gibt es bei der asymmetrischen Verschlüsselung zwei Schlüssel. Den Private und den Public Key. Während der Private und der Public Key verschlüsseln können, ist nur der Private Key in der Lage wieder zu entschlüsseln. Will man hingegen wissen, ob eine Nachricht wirklich vom Besitzer des Private Keys kommt, spricht man von Signierung. Signieren kann nur der Besitzer des Privaten Schlüssels, während jeder Public Key Besitzer dies verifizieren kann.</p>
<p>Dieses Verhalten kann man ausnutzen, der Hersteller der Software ist im Besitz des Private Keys und signiert Dateien, welche von der Software, welche den Public Key kennt, verifiziert. Sollte die Signatur nicht gültig sein, verweigert die Software ihren Dienst. Sollte jemand den Inhalt der Datei manipulieren, so muss sie wieder mit dem Private Key neu signiert werden.</p>
<p>Ich habe mir daher eine kleine, aber feine Klasse erstellt, welche entweder ein XML-Dokument oder eine Klasse, welche per XmlSerializer serialisierbar ist, signieren kann. So kann man theoretisch jede Information in eine XML-Lizenz-Datei hinterlegen, etwa wie lange die Lizenz gültig ist. Die nötigen Klassen befinden sich alle im .NET-Framework ab Version 2.0. Der Code ist zum Teil aus der MSDN (siehe Links am Ende des Beitrages).</p>
<p>Diese Möglichkeit bietet keinen absoluten Schutz. Leute könnten mit Programmen wie <a href="http://www.jetbrains.com/decompiler/">dotPeek</a> an den SourceCode gelangen und die Prüfung ausbauen. Mit einem <a href="http://de.wikipedia.org/wiki/Obfuscator">Obfuscator</a> kann dies erschwert werden. Zudem dürft ihr niemals den privaten Schlüssel herausgeben, da dieser sowohl signieren als auch einen Public Key erstellen kann.</p>
<h3>Beispielapplikation:</h3>
<p><a href='http://welt-held.de/files/XmlSign.zip'>Hier</a> findet ihr eine kleine Beispielanwendung. Die Form ist sehr trivial, erstellt erst die Keys, dann die Dummy-Klasse, signieren und zum Schluss validieren.</p>
<h4>Links:</h4>
<p><a href="http://msdn.microsoft.com/en-us/library/ms229745%28v=VS.85%29.aspx">How to: Sign XML Documents with Digital Signatures </a><br />
<a href="http://msdn.microsoft.com/en-us/library/ms229950(v=VS.85).aspx">How to: Verify the Digital Signatures of XML Documents </a><br />
<a href='http://welt-held.de/files/XmlSign.zip'>Beispielanwendung</a></p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1983&amp;md5=f5b9245bc323013a844eb016241d056b" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1983-signieren-einer-xml-datei-in-c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1983-signieren-einer-xml-datei-in-c.html&amp;language=de_DE&amp;category=text&amp;title=Signieren+einer+XML-Datei+in+C%23&amp;description=Vielleicht+haben+sich+schon+einige+von+euch+mit+Lizenzen+besch%C3%A4ftigt.+Man+erstellt+eine+Software%2C+verkauft+sie+und+m%C3%B6chte+nat%C3%BCrlich+nicht%2C+dass+sie+einfach+von+anderen+kostenlos+genutzt+wird.+Ich+m%C3%B6chte...&amp;tags=asymmetrische+verschl%C3%BCsselung%2CC%23%2Crsa%2Csignatur%2Csignieren%2Cxml+signatur%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Über ein Jahr mit dem Palm Pre</title>
		<link>http://www.welt-held.de/1980-uber-ein-jahr-mit-dem-palm-pre.html</link>
		<comments>http://www.welt-held.de/1980-uber-ein-jahr-mit-dem-palm-pre.html#comments</comments>
		<pubDate>Tue, 07 Jun 2011 08:52:27 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[erfahrungen]]></category>
		<category><![CDATA[palm pre]]></category>
		<category><![CDATA[probleme]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1980</guid>
		<description><![CDATA[Seit über einem Jahr besitze ich nun ein Palm Pre. Vorher besaß ich ein Nokia E65, welches zwar gute Dienste leistete, es war aber kein Smart-Phone. Ich hatte damals eigentlich nicht so viele Anforderungen, ich wollte eigentlich ein Handy, mit dem ich meine Emails lesen und meine Termine und evtl.  [...]]]></description>
				<content:encoded><![CDATA[<p>Seit über <a href="http://www.welt-held.de/1645-palm-pre.html">einem Jahr</a> besitze ich nun ein Palm Pre. Vorher besaß ich ein Nokia E65, welches zwar gute Dienste leistete, es war aber kein Smart-Phone. Ich hatte damals eigentlich nicht so viele Anforderungen, ich wollte eigentlich ein Handy, mit dem ich meine Emails lesen und meine Termine und evtl. auch noch Kontakte verwalten kann. Das iPhone war mir einfach zu teuer, zudem hab ich ganz große Probleme mit dieser Politik die Apple veranstaltet, ich möchte doch schon gewisse Freiheiten haben. Ob ich sie nutze, ist die andere Frage aber ich könnte es theoretisch.</p>
<p>So wurde ich damals von <a href="http://mbiebusch.de/">Marc</a> auf das Palm Pre aufmerksam gemacht. Es hat eine gute Integration von Googles Diensten, ein offenes System und eine riesige Community, welche mich mit allen möglichen Extras versorgen kann. Mit der App-Anzahl eines Apple AppStores kann es zwar nicht mithalten, aber ein gutes Handy bringt ja das wichtigste an Software bereits mit. Also wurde es das gute Ding. </p>
<p>Doch nun, nach einiger Zeit gibt es ein Paar Dinge, die mich dermaßen stören, dass ich drauf und dran bin, mir ein neues Telefon zuzulegen. Vor einiger Zeit erschien webOS 2.1, welches offiziell für mein Palm Pre nicht erschien, aber mit ein <a href="http://www.webos-blog.de/2011-02-24-webos-2-1-auf-dem-palm-pre-so-gehts/">paar Tricks</a> war auch das kein Problem. Allerdings löste das Update nicht wirklich meine Probleme oder Dinge, die mich (mittlerweile) nerven.</p>
<p>Fangen wir mal an. Der &#8220;Desktop&#8221; vom Pre, er ist riesig, ich kann mir einen schönen Hintergrund anzeigen lassen und sonst nichts. Warum kann ich dort nicht einfach eine Liste mit Terminen oder Notizen hinterlegen oder sonst was? Also ich habe eigentlich nicht ständig irgendwelche Programme laufen, die mir die Sicht versperren. Selbst mein altes Nokia konnte das besser.</p>
<p>Oder häufig habe ich das Problem, dass der Speicher nicht ausreichend ist. Obwohl kein Programm läuft, bekomme ich beim Programmstart die &#8220;Zuviele Karten&#8221;-Fehlermeldung. Unter webOS 1.x war es so schlimm, dass ich praktisch NIE Angry Birds spielen konnte. Dies hat sich glücklicherweise mit webOS 2.1 deutlich verbessert, tritt aber dennoch ab und an noch auf. Ist schon nett, wenn man jemanden anrufen will, aber das Anrufprogramm nicht starten kann.</p>
<p>Seit dem Update auf 2.1 meckerte mir meine Email / Kalender Synchronisation ab und an die Ohren voll, dass die Zugangsdaten nicht stimmen würden. Warum auch immer, trat sowohl bei Google als auch beim dienstlichen Exchange-Server auf. Manchmal ging es einfach wieder, manchmal musste ich die Daten neu eingeben oder im schlimmsten Fall das Handy neustarten. Direkt nach dem Update trat der Fehler praktisch mehrmals täglich auf, mittlerweile auch eher nur sporadisch (obwohl ich nichts gemacht habe).</p>
<p>Wie auch <a href="http://twitter.com/#!/schakko/status/77820046478540800">meine</a> <a href="http://twitter.com/#!/DeeJayKenny/status/77820602559381505">Kollegen</a> habe ich ab und an das Problem, dass das Pre die Verbindung zur Sim-Karte verliert. Sehr ärgerlich, da mein Handy meistens nur rumliegt und ich es daher erst spät mitbekomme. Man ist also nicht erreichbar.<br />
Allerdings habe ich auch sehr häufig das Phänomen, dass mein Handy Empfang hat und auf einmal bekomme ich eine SMS von wegen mich hätte jemand versucht anzurufen. Mein Handy hat aber nicht geklingelt. Ich kann hierbei aber nicht genau sagen, ob es an o2 oder am Pre liegt, mir fehlte bis jetzt die Motivation, es mit anderen Karten zu testen.</p>
<p>Und dann die Akkulaufzeit. Ich habe auf dem Handy selten irgendwas laufen, meistens werden also nur Email, Kalender und Kontakte abgerufen / synchronisiert. Auch habe ich unterwegs eigentlich G3 und WLan ausgeschaltet, um die Akkulaufzeit zu verlängern. Sollte ich dennoch einmal Abends vergessen, mein Telefon aufzuladen (oder ich lege es nicht korrekt auf den TouchStone), kann ich es nächsten Tag auch zu Hause lassen. Ab und an hab ich auch das Problem, dass das Handy mir einen Akkustand von 50% anzeigt, aber es bereits komplett aus ist, wenn ich rund eine halbe Stunde später wieder nach schaue. Ohne Grund, ohne Warnton ohne alles.</p>
<p>Dann zu meinem Lieblingsthema, die Uhr. Wie jedes Moderne Telefon kann sich das Handy die Zeit aus dem Mobilnetz holen. Nur leider scheint o2 dort nach zu gehen, ich weiß es nicht. Ich hatte sehr häufig unterschiede zur &#8220;realen&#8221; Zeit bis zu einer Stunde. Auch ein aktualisieren brachte nichts. Dann hab ich das Synchronisieren mit der Netzzeit deaktiviert und manuell gestellt. Sollte nun aber das Telefon einfach ausgehen (wie oben beschrieben z.B.), zählt die Uhr nicht weiter. Ich lade es nun wieder auf und vergesse die Uhr nachzustellen, dann sitze ich halt nachts um drei auf Arbeit, also laut meinem Pre. Da ich keine Armbanduhr trage, muss ich mich auf mein Handy verlassen können, was ich aber augenscheinlich nicht kann.</p>
<p>Mal abgesehen vom verschenkten Desktop-Platz sind das alles Anforderungen, welche ein modernes Telefon erfüllen sollte. Und das Palm Pre tut es leider nicht.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1980&amp;md5=7c6673b7e16cfcf00032a87d0a4b8f6c" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1980-uber-ein-jahr-mit-dem-palm-pre.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1980-uber-ein-jahr-mit-dem-palm-pre.html&amp;language=de_DE&amp;category=text&amp;title=%C3%9Cber+ein+Jahr+mit+dem+Palm+Pre&amp;description=Seit+%C3%BCber+einem+Jahr+besitze+ich+nun+ein+Palm+Pre.+Vorher+besa%C3%9F+ich+ein+Nokia+E65%2C+welches+zwar+gute+Dienste+leistete%2C+es+war+aber+kein+Smart-Phone.+Ich+hatte+damals+eigentlich...&amp;tags=erfahrungen%2Cpalm+pre%2Cprobleme%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Steam lässt sich nicht starten</title>
		<link>http://www.welt-held.de/1976-steam-lasst-sich-nicht-starten.html</link>
		<comments>http://www.welt-held.de/1976-steam-lasst-sich-nicht-starten.html#comments</comments>
		<pubDate>Sat, 04 Jun 2011 18:10:12 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[steam]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1976</guid>
		<description><![CDATA[Ich hatte eben das Problem, dass sich Steam nicht starten lassen wollte. In der Steam.log stand nur etwas wie 
CsComm        Session               Jun-04-2011  20:02:44.582  [5612]  ReconnectThread (5612) Starting
Dieser Eintrag im offiziellen Forum hat mir geholfen, einfach die Datei  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich hatte eben das Problem, dass sich Steam nicht starten lassen wollte. In der Steam.log stand nur etwas wie </p>
<blockquote><p>CsComm        Session               Jun-04-2011  20:02:44.582  [5612]  ReconnectThread (5612) Starting</p></blockquote>
<p>Dieser <a href="http://forums.steampowered.com/forums/showthread.php?t=662366">Eintrag</a> im offiziellen Forum hat mir geholfen, einfach die Datei &#8220;ClientRegistry.blob&#8221; im Steam ordner löschen.<br />
Danach ging es wieder.</p>
<p>Update: oder wir starten einfach den Router neu.. Weiß der Geier, was da wieder los war..</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1976&amp;md5=55b843a59fbf84fdf65efbeef77bbfc2" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1976-steam-lasst-sich-nicht-starten.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1976-steam-lasst-sich-nicht-starten.html&amp;language=de_DE&amp;category=text&amp;title=Steam+l%C3%A4sst+sich+nicht+starten&amp;description=Ich+hatte+eben+das+Problem%2C+dass+sich+Steam+nicht+starten+lassen+wollte.+In+der+Steam.log+stand+nur+etwas+wie+CsComm+Session+Jun-04-2011+20%3A02%3A44.582+%5B5612%5D+ReconnectThread+%285612%29+Starting+Dieser+Eintrag+im...&amp;tags=problem%2Csteam%2Cblog" type="text/html" />
	</item>
		<item>
		<title>My Book World Edition</title>
		<link>http://www.welt-held.de/1973-my-book-world-edition.html</link>
		<comments>http://www.welt-held.de/1973-my-book-world-edition.html#comments</comments>
		<pubDate>Tue, 24 May 2011 20:30:27 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[mbwe]]></category>
		<category><![CDATA[my book world edition]]></category>
		<category><![CDATA[nas]]></category>
		<category><![CDATA[wake on lan]]></category>
		<category><![CDATA[wol]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1973</guid>
		<description><![CDATA[Ich nutze ja schon seit einiger Zeit das Western Digital My Book World Edition als NAS.
Heute wollte ich herausfinden, ob es Wake-On-Lan (WOL) unterstützt.
Dabei bin ich auf diese Seite hier gestoßen, die viele Erweiterungen für das MBWE bietet. Sehr zu empfehlen, vor allem die Backup-Strategien.  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich nutze ja schon seit einiger Zeit das Western Digital My Book World Edition als NAS.<br />
Heute wollte ich herausfinden, ob es Wake-On-Lan (WOL) unterstützt.</p>
<p>Dabei bin ich auf diese Seite <a href="http://mybookworld.wikidot.com/hacks-and-howto">hier</a> gestoßen, die viele Erweiterungen für das MBWE bietet. Sehr zu empfehlen, vor allem die Backup-Strategien. Ich werde sie mir wohl im Urlaub mal genauer anschauen und entsprechend umsetzen.</p>
<p>PS: WOL wird im Moment nicht unterstützt, soll aber zukünftig kommen, schreibt zumindest der <a href="http://community.wdc.com/t5/Network-Drive-Ideas/Wake-On-Lan-WOL-support-for-My-Book-Live/idc-p/147930#M75">WDTony</a>.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1973&amp;md5=3f982221db8dbd5a3a07b9b7cbc5d535" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1973-my-book-world-edition.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1973-my-book-world-edition.html&amp;language=de_DE&amp;category=text&amp;title=My+Book+World+Edition&amp;description=Ich+nutze+ja+schon+seit+einiger+Zeit+das+Western+Digital+My+Book+World+Edition+als+NAS.+Heute+wollte+ich+herausfinden%2C+ob+es+Wake-On-Lan+%28WOL%29+unterst%C3%BCtzt.+Dabei+bin+ich+auf+diese...&amp;tags=mbwe%2Cmy+book+world+edition%2Cnas%2Cwake+on+lan%2Cwol%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Webseite in diversen Versionen testen</title>
		<link>http://www.welt-held.de/1969-webseite-in-diversen-versionen-testen.html</link>
		<comments>http://www.welt-held.de/1969-webseite-in-diversen-versionen-testen.html#comments</comments>
		<pubDate>Sun, 01 May 2011 17:46:01 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[ie tester]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[testen]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1969</guid>
		<description><![CDATA[Vor einigen Tagen wollte ich eine Webseite in einer älteren Version vom IE testen. Dies stellte sich allerdings schwieriger raus als gedacht. Auf meinem Rechner (dienstlich) läuft Windows Server 2003 mit dem Internet Explorer 8, testen musste ich die Seite aber im IE7. Nun hat man folgende Optionen  [...]]]></description>
				<content:encoded><![CDATA[<p>Vor einigen Tagen wollte ich eine Webseite in einer älteren Version vom IE testen. Dies stellte sich allerdings schwieriger raus als gedacht. Auf meinem Rechner (dienstlich) läuft Windows Server 2003 mit dem Internet Explorer 8, testen musste ich die Seite aber im IE7. Nun hat man folgende Optionen zur Auswahl:</p>
<p><strong><a href="http://browsershots.org/">BrowserShots </a>und ähnliches:</strong><br />
Diese Seiten haben den Vorteil, eine Vielzahl an Browsern in den unterschiedlichsten Versionen abzudecken. Sind nur leider vorrangig für visuelle Tests gedacht. Da es in meinem Test rein um JavaScriptfunktionalität ging, war es leider ungeeignet. Da man zudem nur eine URL angeben kann, schied diese Option auch aus, da die Testversion der Seite nur auf meinem lokalen Rechner lief.</p>
<p><strong>Internet Explorer 7 Standalone installieren:</strong><br />
Es gibt im Netz einige Installer, die einen vollwerten Internet Explorer 7 auf dem Rechner versprechen. Meine Erfahrungen waren leider nicht so gut, mal abgesehen, dass &#8220;meine&#8221; Version nur Fehlermeldungen verursacht hat, sie hat auch dafür gesorgt, dass ich meine Favoriten nicht mehr im 8er Client öffnen konnte. Erst eine Deinstallation des 7er Clients, die Deinstallation des 8er Clients sowie anschließende Neuinstallation des 8er Clients haben mein System wieder in den Ursprungszustand versetzt. Absolut nicht akzeptabel.</p>
<p><strong>Virtuelle Maschinen:</strong><br />
Microsoft bietet bereits fertig konfigurierte <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&#038;displaylang=en">virtuelle Maschinen</a>, diverse Windows Version mit unterschiedlichen Versionen des Internet Explorers. Die Windows Versionen sind nur eine begrenzte Zeit lauffähig, daher ist keine Lizenz notwendig.</p>
<p><strong><a href="http://www.my-debugbar.com/wiki/IETester/HomePage">IETester</a></strong><br />
Ein kleines aber feines Programm. Es simuliert alle IE Versionen seit der Version 5.5. Sogar die aktuelle 10er Preview (sofern man es installiert hat). </p>
<p>Für mich hat sich das letzte Tool bewährt, zumindest für meine kleinen Funktionstests, ob ich separate Fallbacks für Javascript-Funktionen benötige.</p>
<p>(ich bezog mich nur auf den IE, da man sonst eigentlich alle Browser separat installieren kann, der IE ist dafür allerdings zu stark im System verankert, gerade bei Windows 2003)</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1969&amp;md5=5a04d43d0ab425db678f4168cd4cc200" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1969-webseite-in-diversen-versionen-testen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1969-webseite-in-diversen-versionen-testen.html&amp;language=de_DE&amp;category=text&amp;title=Webseite+in+diversen+Versionen+testen&amp;description=Vor+einigen+Tagen+wollte+ich+eine+Webseite+in+einer+%C3%A4lteren+Version+vom+IE+testen.+Dies+stellte+sich+allerdings+schwieriger+raus+als+gedacht.+Auf+meinem+Rechner+%28dienstlich%29+l%C3%A4uft+Windows+Server+2003...&amp;tags=ie+tester%2Cinternet+explorer%2Cjavascript%2Ctesten%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Tipp: StringReader und StringWriter</title>
		<link>http://www.welt-held.de/1964-tipp-stringreader-und-stringwriter.html</link>
		<comments>http://www.welt-held.de/1964-tipp-stringreader-und-stringwriter.html#comments</comments>
		<pubDate>Wed, 23 Mar 2011 21:05:09 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[.net 3.5]]></category>
		<category><![CDATA[.net 4]]></category>
		<category><![CDATA[stringreader]]></category>
		<category><![CDATA[stringwriter]]></category>
		<category><![CDATA[tipp]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1964</guid>
		<description><![CDATA[Ein kleiner Tipp für die Leute, die .NET Version 3.5 oder höher einsetzen:
Wer Text an Methoden / Klassen weitergeben will, die mit Streams arbeiten, sollte dies nicht umständlich über den MemoryStream lösen, sondern sich lieber mal die beiden Klassen StringReader und StringWriter anschauen. Geht  [...]]]></description>
				<content:encoded><![CDATA[<p>Ein kleiner Tipp für die Leute, die .NET Version 3.5 oder höher einsetzen:</p>
<p>Wer Text an Methoden / Klassen weitergeben will, die mit Streams arbeiten, sollte dies nicht umständlich über den <a href="http://msdn.microsoft.com/de-de/library/system.io.memorystream(v=vs.80).aspx">MemoryStream</a> lösen, sondern sich lieber mal die beiden Klassen <a href="http://msdn.microsoft.com/en-us/library/system.io.stringreader.aspx">StringReader</a> und <a href="http://msdn.microsoft.com/en-us/library/system.io.stringwriter.aspx">StringWriter</a> anschauen. Geht deutlich einfacher und man braucht nicht umständlich mit irgendwelchen Encodings / Bytes / Stream-Positionen rumspielen.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1964&amp;md5=d8ac50cc28ac33490d759ceb2addf30a" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1964-tipp-stringreader-und-stringwriter.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1964-tipp-stringreader-und-stringwriter.html&amp;language=de_DE&amp;category=text&amp;title=Tipp%3A+StringReader+und+StringWriter&amp;description=Ein+kleiner+Tipp+f%C3%BCr+die+Leute%2C+die+.NET+Version+3.5+oder+h%C3%B6her+einsetzen%3A+Wer+Text+an+Methoden+%2F+Klassen+weitergeben+will%2C+die+mit+Streams+arbeiten%2C+sollte+dies+nicht+umst%C3%A4ndlich+%C3%BCber...&amp;tags=.net+3.5%2C.net+4%2CC%23%2Cstringreader%2Cstringwriter%2Ctipp%2Cblog" type="text/html" />
	</item>
		<item>
		<title>XSLT Transformation in C#</title>
		<link>http://www.welt-held.de/1960-xslt-transformation-in-c.html</link>
		<comments>http://www.welt-held.de/1960-xslt-transformation-in-c.html#comments</comments>
		<pubDate>Wed, 23 Mar 2011 20:58:24 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[short end tag]]></category>
		<category><![CDATA[transform]]></category>
		<category><![CDATA[xslcompiledtransform]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1960</guid>
		<description><![CDATA[Ich hatte ein recht umfangreiches Xml-Schema. Dieses wird ständig mal erweitert und eine andere Applikation benötigt nur einen Teil dieses Schemas. Dazu wurde es immer von Hand für die andere Applikation geändert. Um mir das Leben einfacher zu machen, wollte ich dies über eine XSLT-Transformation  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich hatte ein recht umfangreiches Xml-Schema. Dieses wird ständig mal erweitert und eine andere Applikation benötigt nur einen Teil dieses Schemas. Dazu wurde es immer von Hand für die andere Applikation geändert. Um mir das Leben einfacher zu machen, wollte ich dies über eine XSLT-Transformation lösen, schließlich ist ein Schema auch nur eine XML-Datei. Ein großer Teil wurde einfach nur kopiert, dennoch sah die Ausgabe anders aus als die Eingabe. Mein Kopiertemplate sah folgendermaßen aus:</p>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
    xmlns:msxsl=&quot;urn:schemas-microsoft-com:xslt&quot; exclude-result-prefixes=&quot;msxsl&quot;
&gt;
    &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot;/&gt;
    &lt;xsl:template match=&quot;@* | node()&quot;&gt;
        &lt;xsl:copy&gt;
            &lt;xsl:apply-templates select=&quot;@* | node()&quot;/&gt;
        &lt;/xsl:copy&gt;
    &lt;/xsl:template&gt;
&lt;/xsl:stylesheet&gt;
</pre>
<p>Einfach alle Nodes und Attribute kopieren, also nichts wildes. Dennoch wurde aus:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;xs:element name=&quot;comment&quot; type=&quot;xs:string&quot; minOccurs=&quot;0&quot; /&gt;
</pre>
<p>folgendes:</p>
<pre class="brush: xml; title: ; notranslate">&lt;xs:element name=&quot;comment&quot; type=&quot;xs:string&quot; minOccurs=&quot;0&quot;&gt;&lt;/xs:element&gt;</pre>
<p>Das Schema ist noch valide und funktioniert tadellos, nur sieht es nicht wirklich schön aus. Nachdem ich im Netz nach einen bestimmten Parameter im C#-Code und ähnliches gesucht hatte, wurde ich doch noch fündig. Das .NET-Framework bietet zwei verschiedene Methoden zur Transformation.<br />
<a href="http://msdn.microsoft.com/de-de/library/system.xml.xsl.xsltransform.aspx">XslTransform</a> und <a href="http://msdn.microsoft.com/de-de/library/system.xml.xsl.xslcompiledtransform.aspx">XslCompiledTransform</a>. Der Kommentar in der MSDN sagt eigentlich alles:</p>
<blockquote><p>Die XslCompiledTransform-Klasse ist ein XSLT-Prozessor, der die XSLT 1.0 Syntax unterstützt. Dies ist eine neue Implementierung, die im Vergleich zur veralteten XslTransform-Klasse die Leistung verbessert. Die Struktur der XslCompiledTransform-Klasse ist der XslTransform-Klasse sehr ähnlich.</p></blockquote>
<p>Nebenbei werden auch noch das ShortEndTag unterstützt, womit mein Problem gelöst wäre. Der Vollständigkeit halber sollte noch auf diesen Blogeintrag hingewiesen werden: <a href="http://blogs.msdn.com/b/antosha/archive/2006/07/16/xslcompiledtransform-slower-than-xsltransform.aspx">XslCompiledTransform Slower than XslTransform?</a>, denn auch noch die veraltete XslTransform-Klasse scheint noch ihre Daseinsberechtigung zu haben.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1960&amp;md5=cc06b2a782246bed56510c97502e9971" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1960-xslt-transformation-in-c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1960-xslt-transformation-in-c.html&amp;language=de_DE&amp;category=text&amp;title=XSLT+Transformation+in+C%23&amp;description=Ich+hatte+ein+recht+umfangreiches+Xml-Schema.+Dieses+wird+st%C3%A4ndig+mal+erweitert+und+eine+andere+Applikation+ben%C3%B6tigt+nur+einen+Teil+dieses+Schemas.+Dazu+wurde+es+immer+von+Hand+f%C3%BCr+die+andere...&amp;tags=C%23%2Cshort+end+tag%2Ctransform%2Cxslcompiledtransform%2Cxslt%2Cblog" type="text/html" />
	</item>
		<item>
		<title>WiiMC &#8211; Steuerung</title>
		<link>http://www.welt-held.de/1957-wiimc-steuerung.html</link>
		<comments>http://www.welt-held.de/1957-wiimc-steuerung.html#comments</comments>
		<pubDate>Sat, 12 Mar 2011 07:53:23 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[dokumentation]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[wiimc]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1957</guid>
		<description><![CDATA[Falls noch wer WiiMC nutzt, der sollte sich mal die Dokumentationsseite ansehen. Dort ist schön aufgelistet, welche Knöpfe auf der WiiMote welche Bedeutung haben, grade im Videomodus. Habe mir den wichtigen Teil ausgedruckt und liegt nun unterm Tisch, so kann ich im Film zum Beispiel zwischen den  [...]]]></description>
				<content:encoded><![CDATA[<p>Falls noch wer WiiMC nutzt, der sollte sich mal die <a href="http://www.wiimc.org/documentation/">Dokumentationsseite</a> ansehen. Dort ist schön aufgelistet, welche Knöpfe auf der WiiMote welche Bedeutung haben, grade im Videomodus. Habe mir den wichtigen Teil ausgedruckt und liegt nun unterm Tisch, so kann ich im Film zum Beispiel zwischen den Sprachen hin- und herschalten.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1957&amp;md5=1d159c79448f4c63f74a3b89eedb055f" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1957-wiimc-steuerung.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1957-wiimc-steuerung.html&amp;language=de_DE&amp;category=text&amp;title=WiiMC+%26%238211%3B+Steuerung&amp;description=Falls+noch+wer+WiiMC+nutzt%2C+der+sollte+sich+mal+die+Dokumentationsseite+ansehen.+Dort+ist+sch%C3%B6n+aufgelistet%2C+welche+Kn%C3%B6pfe+auf+der+WiiMote+welche+Bedeutung+haben%2C+grade+im+Videomodus.+Habe+mir+den...&amp;tags=dokumentation%2Chomebrew%2Cwii%2Cwiimc%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Wii Homebrew: WiiMC</title>
		<link>http://www.welt-held.de/1954-wii-homebrew-wiimc.html</link>
		<comments>http://www.welt-held.de/1954-wii-homebrew-wiimc.html#comments</comments>
		<pubDate>Sat, 12 Mar 2011 06:44:00 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[homebrew]]></category>
		<category><![CDATA[wii]]></category>
		<category><![CDATA[wiimc]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1954</guid>
		<description><![CDATA[Ich nutze auf meiner Wii eine Homebrew namens WiiMC, das Programm macht aus einer Wii eine doch nette Multimedia-Station. So kann ich meine DVDs schauen, Filme übers Netzwerk oder USB-Stick. Aber auch Musik oder Bilder kann ich mir anschauen. Einzig mit HD-Material kommt die Wii nicht klar, dazu  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich nutze auf meiner Wii eine Homebrew namens <a href="http://www.wii-homebrew.com/download/nintendo-wii-downloads/multimedia/wiimc/">WiiMC</a>, das Programm macht aus einer Wii eine doch nette Multimedia-Station. So kann ich meine DVDs schauen, Filme übers Netzwerk oder USB-Stick. Aber auch Musik oder Bilder kann ich mir anschauen. Einzig mit HD-Material kommt die Wii nicht klar, dazu ist der CPU einfach zu langsam. </p>
<p>Also die App WiiMC ist eigentlich nur ein grafischer Aufsatz für den <a href="http://www.wii-homebrew.com/download/nintendo-wii-downloads/multimedia/mplayer-ce/">MPlayer</a>. MPlayer ist zwar sehr mächtig, doch absolut nicht bedienbar. Einstellungen müssen umständlich am PC gemacht werden usw. Bei WiiMC kann man alle Einstellungen direkt an der Wii über eine virtuelle Tastatur machen. Nun habe ich dort eine SMB-Freigabe eingerichtet. Diese hat allerdings den Nachteil, dass man dort nur eine IP und keinen DNS-Namen angeben kann. Leider kam es schon ein paar mal vor, dass die IP geändert werden musste. Also erstmal am PC schauen, wie lautet die IP und dann nachpflegen. Das ging mir auf den Keks, mithilfe eines Computers geht auch ein qualifizierter DNS-Name.</p>
<p>Dazu greift per PC auf die SD-Karte zu und schaut mal in den Ordner <strong>/apps/WiiMC/</strong>. Dort befindet sich eine <strong>settings.xml</strong>. In der Sektion &#8220;Network&#8221; könnt ihr nun die IP finden:</p>
<pre class="brush: xml; title: ; notranslate">&amp;lt;section name=&amp;quot;Network&amp;quot; description=&amp;quot;Network Settings&amp;quot;&amp;gt;
	&amp;lt;smbshare name=&amp;quot;0&amp;quot;&amp;gt;
		&amp;lt;variable name=&amp;quot;ip&amp;quot; value=&amp;quot;192.168.0.10&amp;quot; description=&amp;quot;SMB Share IP&amp;quot; /&amp;gt;
		&amp;lt;variable name=&amp;quot;share&amp;quot; value=&amp;quot;MyShareName&amp;quot; description=&amp;quot;SMB Share Name&amp;quot; /&amp;gt;
		&amp;lt;variable name=&amp;quot;user&amp;quot; value=&amp;quot;username&amp;quot; description=&amp;quot;SMB Share Username&amp;quot; /&amp;gt;
		&amp;lt;variable name=&amp;quot;pwd&amp;quot; value=&amp;quot;password&amp;quot; description=&amp;quot;SMB Share Password&amp;quot; /&amp;gt;
		&amp;lt;variable name=&amp;quot;displayname&amp;quot; value=&amp;quot;displayName&amp;quot; description=&amp;quot;SMB Display Name&amp;quot; /&amp;gt;
	&amp;lt;/smbshare&amp;gt;
&amp;lt;/section&amp;gt;</pre>
<p>Nun einfach unter &#8220;ip&#8221; den DNS-Namen eintragen, speichern, fertig. Klappt ohne Probleme, jedoch konnt ihr den Namen nicht auf der Wii anpassen. Ich vermute mal, der DNS-Name funktioniert auch bei FTP-Verbindungen, getestet habe ich es aber nicht.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1954&amp;md5=0c91f535c391f300319d923a20d1ce2a" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1954-wii-homebrew-wiimc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1954-wii-homebrew-wiimc.html&amp;language=de_DE&amp;category=text&amp;title=Wii+Homebrew%3A+WiiMC&amp;description=Ich+nutze+auf+meiner+Wii+eine+Homebrew+namens+WiiMC%2C+das+Programm+macht+aus+einer+Wii+eine+doch+nette+Multimedia-Station.+So+kann+ich+meine+DVDs+schauen%2C+Filme+%C3%BCbers+Netzwerk+oder+USB-Stick....&amp;tags=homebrew%2Cwii%2Cwiimc%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Löschen von Nodes in einem XML-Dokument</title>
		<link>http://www.welt-held.de/1951-loschen-von-nodes-in-einem-xml-dokument.html</link>
		<comments>http://www.welt-held.de/1951-loschen-von-nodes-in-einem-xml-dokument.html#comments</comments>
		<pubDate>Mon, 07 Mar 2011 20:43:21 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[deleteself]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmldocument]]></category>
		<category><![CDATA[xpathnavigator]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1951</guid>
		<description><![CDATA[Ich hatte letztens ein XML-Dokument, welches ich etwas verschlanken wollte. Das Format war in etwa folgendes:
Ich wollte nur die &#8220;node1&#8243; &#8211; Node behalten, sprich alle anderen entfernen. Daher mein erster Ansatz:
Funktioniert und gut.
Nun wollte ich den Ansatz umdrehen, und alle Nodes entfernen, die  [...]]]></description>
				<content:encoded><![CDATA[<p>Ich hatte letztens ein XML-Dokument, welches ich etwas verschlanken wollte. Das Format war in etwa folgendes:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;root&gt;
  &lt;node1&gt;Content&lt;/node1&gt;
  &lt;node2&gt;Content&lt;/node2&gt;
  &lt;node3&gt;Content&lt;/node3&gt;
  &lt;node4&gt;Content&lt;/node4&gt;
&lt;/root&gt;
</pre>
<p>Ich wollte nur die &#8220;node1&#8243; &#8211; Node behalten, sprich alle anderen entfernen. Daher mein erster Ansatz:</p>
<pre class="brush: csharp; title: ; notranslate">
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(&quot;&lt;root&gt;&lt;node1&gt;Content&lt;/node1&gt;&lt;node2&gt;Content&lt;/node2&gt;&lt;node3&gt;Content&lt;/node3&gt;&lt;node4&gt;Content&lt;/node4&gt;&lt;/root&gt;&quot;);
XPathNavigator navigator = xmlDocument.CreateNavigator();
			
string[] nodesToRemove = new[] {&quot;//node2&quot;, &quot;//node3&quot;, &quot;//node4&quot;};

foreach (var nodeName in nodesToRemove)
{
	XPathNavigator node = navigator.SelectSingleNode(nodeName);
	if (node != null)
	{
		node.DeleteSelf();
	}
}

Console.WriteLine(xmlDocument.OuterXml);</pre>
<p>Funktioniert und gut.</p>
<p>Nun wollte ich den Ansatz umdrehen, und alle Nodes entfernen, die nicht den Namen &#8220;node1&#8243; haben. </p>
<pre class="brush: csharp; title: ; notranslate">XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(&quot;&lt;root&gt;&lt;node1&gt;Content&lt;/node1&gt;&lt;node2&gt;Content&lt;/node2&gt;&lt;node3&gt;Content&lt;/node3&gt;&lt;node4&gt;Content&lt;/node4&gt;&lt;/root&gt;&quot;);
XPathNavigator navigator = xmlDocument.CreateNavigator();

string xpath = &quot;/root/node()[name()!='node1']&quot;;

XPathNodeIterator nodes = navigator.Select(xpath);
while(nodes.MoveNext())
{
	if(nodes.Current != null)
	{
		nodes.Current.DeleteSelf();
	}
}

Console.WriteLine(xmlDocument.OuterXml);</pre>
<p>Leider war das Ergebnis nicht so wie erwartet, obwohl der XPath korrekt ist und die anderen Nodes selektiert. Es wurde nur &#8220;node2&#8243; gelöscht, sprich die erste Node, welche mit dem NodeIterator angesprochen wird. Durch das DeleteSelf() liefert MoveNext() automatisch false zurück, wenn es wieder aufgerufen wird. Ähnliche Probleme gibt es etwa auch, wenn in einer foreach()-Schleife der Enumerator geändert wird. Eine mögliche Lösung wäre folgendes:</p>
<pre class="brush: csharp; title: ; notranslate">while(nodes.MoveNext())
{
	if(nodes.Current != null)
	{
		nodes.Current.DeleteSelf();
		nodes = navigator.Select(xpath);
	}
}</pre>
<p>Nach dem Löschen wird der XPath einfach noch mal ausgeführt. Meiner Meinung nach keine wirklich schöne Lösung, leider aber die einzige die ich gefunden habe, welche auch funktioniert.</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1951&amp;md5=3f4299721257612a493b4e792875198d" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1951-loschen-von-nodes-in-einem-xml-dokument.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1951-loschen-von-nodes-in-einem-xml-dokument.html&amp;language=de_DE&amp;category=text&amp;title=L%C3%B6schen+von+Nodes+in+einem+XML-Dokument&amp;description=Ich+hatte+letztens+ein+XML-Dokument%2C+welches+ich+etwas+verschlanken+wollte.+Das+Format+war+in+etwa+folgendes%3A+Ich+wollte+nur+die+%26%238220%3Bnode1%26%238243%3B+%26%238211%3B+Node+behalten%2C+sprich+alle+anderen+entfernen.+Daher+mein...&amp;tags=C%23%2Cdeleteself%2Cxml%2Cxmldocument%2Cxpathnavigator%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Random() = 2</title>
		<link>http://www.welt-held.de/1948-random-2.html</link>
		<comments>http://www.welt-held.de/1948-random-2.html#comments</comments>
		<pubDate>Thu, 03 Mar 2011 22:12:56 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[lustig]]></category>
		<category><![CDATA[sony]]></category>
		<category><![CDATA[walkman]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1948</guid>
		<description><![CDATA[Aktuell geht ja Sony gegen Hacker vor, wie lange schon kein Unternehmen mehr. Auch verlangen sie Daten von Twitter, Youtube und co. Bei so einem Verhalten freu ich mich ja ein wenig über das Importverbot der PS3. Ich verfolge gespannt das Geschehen rund um den PS3-Jailbreak (obwohl ich gar keine  [...]]]></description>
				<content:encoded><![CDATA[<p>Aktuell geht ja Sony gegen Hacker vor, wie lange schon kein Unternehmen mehr. Auch verlangen sie Daten von Twitter, Youtube und co. Bei so einem Verhalten freu ich mich ja ein wenig über das <a href="http://www.golem.de/showhigh2.php?file=/1103/81782.html&#038;wort[]=playstation">Importverbot </a>der PS3. Ich verfolge gespannt das Geschehen rund um den PS3-Jailbreak (obwohl ich gar keine PS3 habe), da ich HomeBrews befürworte. So interessiert mich natürlich auch, wie die Hacker das Sicherheitssystem der PS3 geknackt haben. So kann man bei <a href="http://www.golem.de/showhigh2.php?file=/1012/80381.html">Golem</a> nachlesen:</p>
<blockquote><p>[..] dass Sony bei der Verschlüsselung auf einen Zufallsparameter verzichtet hat und stattdessen immer die gleiche Zahl verwendet.</p></blockquote>
<p>(ich bin der Meinung, dass ich mal irgendwo gelesen habe, dass eine Zufallsfunktion im System immer den selben Wert zurückgab, das würde meine Geschichte ungemein lustiger machen aber auf die schnelle fand ich den Artikel nicht mehr im Netz).<br />
Das ist also ziemlich doof und selbst Schuld.<br />
Nun gibt es von Sony noch viele anderen elektronischen Schnickschnack. Unter anderem den <a href="http://www.amazon.de/gp/product/B0041KN642?ie=UTF8&#038;tag=phpundperlde-21&#038;linkCode=as2&#038;camp=1638&#038;creative=19454&#038;creativeASIN=B0041KN642">Sony WalkMan</a>, ein MP3-Player mit Radio und was halt so alles dazugehört. Dort habe ich mir halt ein paar Lieder drauf gespielt, alle in einen Ordner geklatscht und jeden Tag von vorne angehört. Irgendwann fing es an langweilig zu werden, man hörte sich die ersten Lieder immer wieder an, bis ans Ende hab ich meistens nicht geschafft. Also habe ich den Zufallsmodus für den Ordner eingestellt. Tja zufällig ist doch sehr relativ. Während eigentlich alle Lieder zufällig durcheinander gewürfelt sind, weiß ich ganz genau, welches Lied als zweites gespielt wird. Nämlich genau jenes, welches im normalen Abspielmodus an erster Stelle steht. Schon mit div. Liedern ausprobiert, es bewahrheitet sich jedes Mal. Ein Kollege musste mir schon einen Kaffee ausgeben, da er mir dies nicht geglaubt hat.<br />
Also, man kann random() auch definieren <img src='http://welt-held.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1948&amp;md5=deacf8acb0bf66008c34264a996fcbd9" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1948-random-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1948-random-2.html&amp;language=de_DE&amp;category=text&amp;title=Random%28%29+%3D+2&amp;description=Aktuell+geht+ja+Sony+gegen+Hacker+vor%2C+wie+lange+schon+kein+Unternehmen+mehr.+Auch+verlangen+sie+Daten+von+Twitter%2C+Youtube+und+co.+Bei+so+einem+Verhalten+freu+ich+mich+ja...&amp;tags=fail%2Clustig%2Csony%2Cwalkman%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Mein persönlicher Coding Style Horror</title>
		<link>http://www.welt-held.de/1942-mein-persoenlicher-coding-style-horro.html</link>
		<comments>http://www.welt-held.de/1942-mein-persoenlicher-coding-style-horro.html#comments</comments>
		<pubDate>Mon, 28 Feb 2011 22:07:08 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[kollegen]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[team programming]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1942</guid>
		<description><![CDATA[Seit ich bei meinem neuem Arbeitgeber tätig bin, refactore ich viel Code von meinem Vorgänger. Er hat leider nur sehr funktionell gedacht, selbe Funktionen mehrfach implementiert anstatt ordentliche Überladungen oder ähnliches zu nutzen und sich leider auch nicht an vorgegebene Coding Styles  [...]]]></description>
				<content:encoded><![CDATA[<p>Seit ich bei meinem neuem Arbeitgeber tätig bin, refactore ich viel Code von meinem Vorgänger. Er hat leider nur sehr funktionell gedacht, selbe Funktionen mehrfach implementiert anstatt ordentliche Überladungen oder ähnliches zu nutzen und sich leider auch nicht an vorgegebene Coding Styles gehalten. Mittlerweile habe ich hier schon sehr viel Zeit investiert, finde jedoch immer wieder Stellen, bei denen ich einfach nur die Hände über den Kopf zusammenschlagen kann. Einige Dinge passieren mir auch gerne mal, was ich dann aber doch viel schlimmer finde, ist die Tatsache, dass es andere Kollegen kopieren, den Variablennamen ändern und sich den Mist nicht einmal anschauen. Und sich so natürlich Fehler einschleichen können, welche sich durch die ganze Anwendung ziehen. Und das bereits seit einigen produktiven Versionen. Hier mal ein paar fiktive Beispiele:</p>
<pre class="brush: csharp; title: ; notranslate">
if(!string.IsNullOrEmpty(groupName) &amp;&amp; (groupName != &quot;Wert1&quot; || groupName != &quot;Wert2&quot;)) { .. }
</pre>
<p>So eine Code-Stelle war bereits seit 2 1/2 Jahren implementiert. Die if-Bedingung ist immer wahr, sobald <em>groupName</em> gesetzt ist. Die hinteren beiden Bedingungen waren total sinnfrei. Glück im Unglück, in der if-Bedingung wurde zufällig noch mal gefiltert, so dass es hinhaute.<br />
Oder das hier:</p>
<pre class="brush: csharp; title: ; notranslate">
public bool MyProperty {
    get { 
         bool myProperty = MethodeSowieso(..);
         return myProperty;
    }
}
</pre>
<p>Warum erst in eine Variable packen?</p>
<pre class="brush: csharp; title: ; notranslate">
if(irgendeineTrueFalseBedingung) {
      return true;
}
else {
       return false;
}
</pre>
<p>Brauch ich ja nicht weiter zu erläutern oder?<br />
Einen kleinen Trieb bekomme ich persönlich beim Klammern. Nehmen wir noch mal das Beispiel von ganz oben, diesmal korrekt aber ohne Klammern:</p>
<pre class="brush: csharp; title: ; notranslate">
if(!string.IsNullOrEmpty(groupName) &amp;&amp; groupName == &quot;Wert1&quot; || groupName == &quot;Wert2&quot;) { .. }
</pre>
<p>Ich muss erstmal genau Nachdenken, um zu sagen, bei welchen Werten die Bedingung erfüllt ist. Mit zwei Klammern wird dieses Problem sofort gelöst und man kann es als Entwickler nicht mal falsch interpretieren. Ein anderer Kollege klammert auch gern zu viel:</p>
<pre class="brush: csharp; title: ; notranslate">
return (variable);
</pre>
<p>Es stört meiner Meinung nach nur beim Lesen und Sinn erkenne ich hier absolut nicht.</p>
<p>Ich erwarte ja keinen perfekten Code, sicherlich habe ich auch einige Coding Styles an mir, welche andere zum Würgen bringen. Aber ist es zu viel verlangt, zwei mal darüber nachzudenken, was man grade programmiert hat? Und das es auch andere verstehen müssen? </p>
<p>JM2C</p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1942&amp;md5=535d57bfc6e3656d224af33af942b318" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1942-mein-persoenlicher-coding-style-horro.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1942-mein-persoenlicher-coding-style-horro.html&amp;language=de_DE&amp;category=text&amp;title=Mein+pers%C3%B6nlicher+Coding+Style+Horror&amp;description=Seit+ich+bei+meinem+neuem+Arbeitgeber+t%C3%A4tig+bin%2C+refactore+ich+viel+Code+von+meinem+Vorg%C3%A4nger.+Er+hat+leider+nur+sehr+funktionell+gedacht%2C+selbe+Funktionen+mehrfach+implementiert+anstatt+ordentliche+%C3%9Cberladungen+oder...&amp;tags=C%23%2Ckollegen%2Cprogrammierung%2Cteam+programming%2Cblog" type="text/html" />
	</item>
		<item>
		<title>HowTo: C# Programm nur mit NotifyIcon ohne Form starten</title>
		<link>http://www.welt-held.de/1935-howto-c-programm-nur-mit-notifyicon-ohne-form-starten.html</link>
		<comments>http://www.welt-held.de/1935-howto-c-programm-nur-mit-notifyicon-ohne-form-starten.html#comments</comments>
		<pubDate>Sat, 08 Jan 2011 11:32:23 +0000</pubDate>
		<dc:creator>Björn</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[notifyicon]]></category>
		<category><![CDATA[winforms]]></category>

		<guid isPermaLink="false">http://www.welt-held.de/?p=1935</guid>
		<description><![CDATA[Für den Fall, dass ihr eine Anwendung erstellen wollt, welche (zum Start) nur ein NotifyIcon (also ein Symbol in der Taskleiste besitzt), müsst ihr den Standardprogrammaufruf etwas abändern.
Der standardmäßig erstellte Code von VisualStudio startet automatisch eine Form. Diese könnte man nun  [...]]]></description>
				<content:encoded><![CDATA[<p>Für den Fall, dass ihr eine Anwendung erstellen wollt, welche (zum Start) nur ein NotifyIcon (also ein Symbol in der Taskleiste besitzt), müsst ihr den Standardprogrammaufruf etwas abändern.<br />
Der standardmäßig erstellte Code von VisualStudio startet automatisch eine Form. Diese könnte man nun ausblenden (WindowState = Minimized, ShowInTaskBar = false) aber es geht auch eleganter. Erstellt einfach ein NotifyIcon mit Icon und Visible = true und ruft Application.Run() ohne Parameter auf.</p>
<pre class="brush: csharp; title: ; notranslate">		/// &lt;summary&gt;
		/// 	Der Haupteinstiegspunkt für die Anwendung.
		/// &lt;/summary&gt;
		[STAThread]
		private static void Main()
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);

			_trayIcon = new NotifyIcon {Icon = Icon.FromHandle(new Bitmap(&quot;Gear.png&quot;).GetHicon()), Visible = true};
			_trayIcon.Click += TrayIconClick;

			Application.Run();
			_trayIcon.Dispose();
		}</pre>
<p>Im Anhang findet ihr eine Beispielsolution. Wichtig ist, dass ihr euch selbst ums Dispose() kümmern müsst, damit etwa das NotifyIcon aus der Taskleiste verschwindet, sobald die Applikation beendet wird. Das Beispiel öffnet beim Klick auf das NotifyIcon eine leere Form. Wird diese geschlossen, wird das ganze Programm beendet.</p>
<p>Download: <a href='http://welt-held.de/files/StartWithNotifyIcon.zip'>Beispiel Solution &#8211; Start App With Notify Icon</a></p>
 <p><a href="http://welt-held.de/?flattrss_redirect&amp;id=1935&amp;md5=786e015a4eb30ec008b2a77ab6ccc0c5" title="Flattr" target="_blank"><img src="http://welt-held.de/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.welt-held.de/1935-howto-c-programm-nur-mit-notifyicon-ohne-form-starten.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" title="Flattr this!" href="https://flattr.com/submit/auto?user_id=12006&amp;popout=1&amp;url=http%3A%2F%2Fwww.welt-held.de%2F1935-howto-c-programm-nur-mit-notifyicon-ohne-form-starten.html&amp;language=de_DE&amp;category=text&amp;title=HowTo%3A+C%23+Programm+nur+mit+NotifyIcon+ohne+Form+starten&amp;description=F%C3%BCr+den+Fall%2C+dass+ihr+eine+Anwendung+erstellen+wollt%2C+welche+%28zum+Start%29+nur+ein+NotifyIcon+%28also+ein+Symbol+in+der+Taskleiste+besitzt%29%2C+m%C3%BCsst+ihr+den+Standardprogrammaufruf+etwas+ab%C3%A4ndern.+Der+standardm%C3%A4%C3%9Fig...&amp;tags=application%2CC%23%2Chowto%2Cnotifyicon%2Cwinforms%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>
