<?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>.Net 4 Fun &#187; Coding</title>
	<atom:link href="http://blog.2moveit.de/index.php/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.2moveit.de</link>
	<description></description>
	<lastBuildDate>Thu, 02 Dec 2010 00:21:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Windows Phone 7 Globalisierung</title>
		<link>http://blog.2moveit.de/index.php/2010/12/windows-phone-7-globalisierung/</link>
		<comments>http://blog.2moveit.de/index.php/2010/12/windows-phone-7-globalisierung/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 00:03:24 +0000</pubDate>
		<dc:creator>Kai</dc:creator>
				<category><![CDATA[Windows Phone 7]]></category>
		<category><![CDATA[Globalisierung]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/index.php/2010/12/windows-phone-7-globalisierung/</guid>
		<description><![CDATA[Eine gute Anleitung zur Globalisierung von Windows Phone 7 Apps findet man in der MSDN Library. Für Schnell-über-leser hier das wichtigste zusammen gefast. Ressourcen Dateien der Solution hinzufügen (MyResources.resx, MyResources.resx.de-DE, MyResources.es-ES). Ressourcen Dateien öffnen und den AccessModifier auf Public stellen. &#8230; <a href="http://blog.2moveit.de/index.php/2010/12/windows-phone-7-globalisierung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eine gute Anleitung zur Globalisierung von Windows Phone 7 Apps findet man in der <a href="http://msdn.microsoft.com/en-us/library/ff637520%28v=VS.92%29.aspx">MSDN Library</a>. Für Schnell-über-leser hier das wichtigste zusammen gefast.</p>
<ol style="text-align: left;">
<li>Ressourcen Dateien der Solution hinzufügen (MyResources.resx, MyResources.resx.de-DE, MyResources.es-ES).</li>
<li>Ressourcen Dateien öffnen und den <em>AccessModifier</em> auf <em>Public</em> stellen.</li>
<li>Zum Test einen Eintrag erzeugen. Der Key muss dabei in allen Ressourcendateien der selbe sein. Der Value beinhaltet die Übersetzungen.</li>
<li>Default Sprache in den Eigenschaften des Projektes unter Assembly Information –&gt;Neutral Language einstellen. Dieses definiert die Sprache in der Ressourcen Datei ohne Culture-Zusatz (MyResources.resx)</li>
<li>Die Projektdatei (.csproj) mit einem Editor öffnen und die zusätzlich unterstützten Sprachen dem Tag &lt;SupportedCultures&gt; hinzufügen. &lt;SupportedCultures&gt;de-DE;es-ES;&lt;SupportedCultures&gt;</li>
<li>Ein Property erzeugen, dass My<em>Resources</em> bereitstellt:</li>
<pre class="brush: csharp;">
public class LocalizedStrings
{
    public LocalizedStrings()
    {
    }

    private static var localizedResources = new MyNamespace.MyResources();

    public MyNamespace.MyResources LocalizedResources
    { get { return localizedResources; } }
}
</pre>
</ol>
<p>6. In der App.xaml die eben erstellte Klasse bereitstellen:</p>
<pre class="brush: xml;">
&amp;lt;Application.Resources&amp;gt;
   &amp;lt;local:LocalizedStrings xmlns:local = &amp;quot;clr-namespace:MyNamespace&amp;quot; x:Key=&amp;quot;LocalizedStrings&amp;quot; /&amp;gt;
&amp;lt;/Application.Resources&amp;gt;
</pre>
<p>7. Nun fehlt nur noch das Binding</p>
<pre class="brush: xml;">
&amp;lt;TextBlock Text=&amp;quot;{Binding Path=LocalizedResources.KeyInMyResources, Source={StaticResource LocalizedStrings}}&amp;quot; /&amp;gt;
</pre>
<p><strong>Hinweis zur ApplicationBar:</strong></p>
<p>Da die ApplicationBar keine Silverlight-Komponente ist, wird dynamisches DataBinding nicht unterstützt. Also nicht wundern warum beim Kompilieren eine XamlParseException “AG_E_PARSER_BAD_PROPERTY_VALUE” bekommt. Im Xaml wird die entsprechende Zeile markiert mit dem Hinweis “Text cannot be empty”. Die Lösung lautet: code behind…</p>
<pre class="brush: csharp;">
public MainPage()
{
   InitializeComponent()
   BuildApplicationBar()
}
private void BuildApplicationBar()
{
   ApplicationBar = new ApplicationBar();
   var appBarButton = new ApplicationBarIconButton(new Uri(&amp;quot;/Images/ApplicationIcon.png&amp;quot;,UriKind.Relative)){Text = MyResources.MyAppBarButtonKey};
   ApplicationBar.Buttons.Add(appBarButton);

   var appBarMenuItem = new ApplicationBarMenuItem(MyResources.MyMenuItemTextKey);
   ApplicationBar.MenuItems.Add(appBarMenuItem);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/12/windows-phone-7-globalisierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anything goes</title>
		<link>http://blog.2moveit.de/index.php/2010/08/anything-goes-2/</link>
		<comments>http://blog.2moveit.de/index.php/2010/08/anything-goes-2/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 17:12:31 +0000</pubDate>
		<dc:creator>Veit</dc:creator>
				<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Boy Scout Rule]]></category>
		<category><![CDATA[Pfadfinderregel]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/?p=453</guid>
		<description><![CDATA[Als Gast(autor) ziemt es sich ja eigentlich nicht gegenüber dem Gastgeber in irgendeiner Form mäkelig zu sein. Zumal es sich bei dem Gastgeber um ein von mir über die Maßen geschätzten und respektierten Software-Architekten und -Entwickler handelt. Doch sein zuletzt &#8230; <a href="http://blog.2moveit.de/index.php/2010/08/anything-goes-2/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Als Gast(autor) ziemt es sich ja eigentlich nicht gegenüber dem Gastgeber  in irgendeiner Form mäkelig zu sein. Zumal es sich bei dem Gastgeber um  ein von mir über die Maßen geschätzten und respektierten  Software-Architekten und -Entwickler handelt. Doch sein zuletzt hier  veröffentlicher Aufruf <a href="../index.php/2010/06/time-to-go-back-to-basics/">“Time to go back to the basics”</a> erregte doch in mir Widerspruch, den ich auf diesem Wege loswerden möchte.</p>
<p style="text-align: justify;">In seinem Aufruf kritisierte mein Gastgeber das Verwenden von  Workarounds bei der Software-Entwicklung. D. h., das Verwenden von  kleinen Quelltext-Fragmenten, mit denen Probleme nur auf die Schnelle  und nur vordergründig gelöst werden sollen. Stattdessen soll man wie ein  guter Pfadfinder bei jeder Gelegenheit die Workarounds wegräumen und Ordnung im Quelltext  schaffen — selbst dann, wenn man die Unordnung nicht verursacht hat.</p>
<p style="text-align: justify;">Doch hier regt sich bei mir Widerspruch, so daß ich meinem Gastgeber im Sinne Feyerabends (1997) entgegenrufen möchte: <em>No, anything goes! </em>Denn,  um es mit den Worten Paul Feyerabends zu formulieren, kein Programmcode  ist “so alt oder so absurd, daß er nicht unser Wissen verbessern  könnte. (Feyerabend, 1997, S. 55). Denn woher weiß man den, daß der  Workaround, den man da gerade beseitigen will, das Problem ist? Kann es  denn nicht auch so sein, daß die Idee, die hinter dem Workaround steckt,  die eigentlich bessere ist, als die hinter dem vermeintlich ordentlichen  Quelltext? Kann man das vor allem dann wissen, wenn der Quelltext nicht von einem selber ist?</p>
<p style="text-align: justify;">Denn dies setzt voraus, daß man die Absichten und die Ideen des  Urhebers richtig erkannt und verstanden hat, was nicht immer der Fall sein muß. Und  Aufräumen würde dann die Unordnung, die man dort beseitigen will, erst  schaffen. Hier versagt daher die Metapher der  Pfadfinderregel. Im Wald mag jeder leicht erkennen, daß ein Faß mit  Giftmüll dort nicht hingehört. Aber ein vermeintlicher Workaround, ist am  Ende gar keiner, da er nämlich nur das Ergebnis unkonventionellem und unorthodoxem Denken ist, zu  dem man vielleicht selbst aufgrund der ganzen  Pfadfinderregeln nicht mehr fähig ist. Denn dies sollte nicht vergessen werden, wenn man nach Ordnung und Clean Code ruft. Software-Entwicklung ist ein kreativer Akt, bei der es auch &#8212; wenn nicht sogar primär &#8212; um die Entwicklung von Ideen und nicht nur um die sture Produktion von Quelltext.</p>
<p style="text-align: justify;">Wenn ich in diesem Sinne rufe: &#8220;Anything goes!&#8221;, heißt dies aber auch, daß ich meinem Gastgeber in einem Punkt zustimme. Denn mit  die Software-Entwicklung soll dadurch nicht der Beliebigkeit anheim gestellt werden. Hierfür bedarf es schon einige grundlegender Regeln und Prinzipien, um die Software-Entwicklung zu einem erfolgreichen Abschluß zu bringen. Doch die Regeln und Prinzipen sind abhängig vom Kontext, d. h. von der Anwendungsdomäne und dem Zweck der Software, der Entwicklungsumgebung, den eingesetzte Techniken usw. Und die Regeln und Prinzipien, die in der einen Situation zum Erfolg führten, können in der nächsten versagen. Ein beliebiges und stures anwenden der immer gleichen Regeln und Prinzipien kann genauso schädlich sein, wie eine regel- und prinzipienlose Beliebigkeit.</p>
<p><strong>Literatur<br />
</strong>Feyerabend, P. (1997). <em>Wider den Methodenzwang</em> (6. Aufl.). Frankfurt am Main: Suhrkamp.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/08/anything-goes-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stopwatch Snippet</title>
		<link>http://blog.2moveit.de/index.php/2010/07/stopwatch-snippet/</link>
		<comments>http://blog.2moveit.de/index.php/2010/07/stopwatch-snippet/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 10:59:22 +0000</pubDate>
		<dc:creator>Kai</dc:creator>
				<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[Stopwatch]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/?p=393</guid>
		<description><![CDATA[Natürlich kann man eine Anwendung mit mächtigen Profiling Tools auf Engpässe testen, doch häufig reicht schon eine kleine Stopwatch. Um diese schnell in den Code einbauen zu können gibt es hier ein Stopwatch Snippet für Visual Studio. Es wird automatisch &#8230; <a href="http://blog.2moveit.de/index.php/2010/07/stopwatch-snippet/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Natürlich kann man eine Anwendung mit mächtigen Profiling Tools auf Engpässe testen, doch häufig reicht schon eine kleine Stopwatch. Um diese schnell in den Code einbauen zu können gibt es hier ein <a href="http://blog.2moveit.de/wp-content/uploads/2010/07/Stopwatch.vsi">Stopwatch Snippet für Visual Studio</a>.</p>
<p><a href="http://blog.2moveit.de/wp-content/uploads/2010/07/StopwatchSnippet.jpg"><img class="size-full wp-image-395 alignnone" title="Stopwatch Snippet" src="http://blog.2moveit.de/wp-content/uploads/2010/07/StopwatchSnippet.jpg" alt="Anwendung des Snippets mit &quot;Sourround With...&quot;" width="544" height="111" /></a></p>
<p style="text-align: justify;">Es wird automatisch eine Stopwatch erstellt, deren Namen man bei mehreren Stopwatches kurz anpasst. Schnell noch zur Identifizierung im Output-Fenster den Funktionsnamen angeben und fertig ist das Miniprofiling.</p>
<p style="text-align: justify;">Um dieses Snippet nutzen zu können muss es nicht extra mit dem Code Snippets Manager von Visual Studio importiert werden, sondern ist dank des <a href="http://snippeteditor.codeplex.com/" target="_blank">Snippet Editor</a> mit einem Installer ausgestattet.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/07/stopwatch-snippet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time to go back to basics</title>
		<link>http://blog.2moveit.de/index.php/2010/06/time-to-go-back-to-basics/</link>
		<comments>http://blog.2moveit.de/index.php/2010/06/time-to-go-back-to-basics/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 12:29:41 +0000</pubDate>
		<dc:creator>Kai</dc:creator>
				<category><![CDATA[Clean Code]]></category>
		<category><![CDATA[Boy Scout Rule]]></category>
		<category><![CDATA[KISS]]></category>
		<category><![CDATA[Pfadfinderregel]]></category>
		<category><![CDATA[Root Cause Analysis]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/?p=383</guid>
		<description><![CDATA[Viel zu häufig wird versucht ein Problem durch Workarounds und ausprobieren in den Griff zu bekommen. Insbesondere unter Zeitdruck neigen viele Softwareentwickler dazu schnell ein paar kleine Hacks einzubauen. Aber das rächt sich. Ist die erste Scheiben eingeschlagen, dauert es &#8230; <a href="http://blog.2moveit.de/index.php/2010/06/time-to-go-back-to-basics/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Viel zu häufig wird versucht ein Problem durch Workarounds und ausprobieren in den Griff zu bekommen. Insbesondere unter Zeitdruck neigen viele Softwareentwickler dazu schnell ein paar kleine Hacks einzubauen. Aber das rächt sich. Ist die erste Scheiben eingeschlagen, dauert es nicht lange bis Weitere folgen und der Code immer unübersichtlicher wird. Ändert sich eine Anforderung, dann wird es schwer sich an die Hacks und denn damit häufig einhergehenden Seiteneffekte zu erinnern und so sind weitere Probleme vorprogrammiert.</p>
<p>Time to go back to basics!</p>
<p style="text-align: justify;">Nicht umsonst gehören die &#8220;<a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule" target="_blank">Boy Scout Rule</a>&#8221; und &#8220;Root Cause Analysis&#8221; zu den Basics der Softwareentwicklung. Häufig stolpert man selbst im eigenen Code über ungewöhnlich Variablennamen, Schleifenkonstrukte, &#8220;Managerklassen&#8221; oder Workarounds. Es genügen häufig kleine Änderungen und der Code wird übersichtlicher und erspart einige Kopfschmerzen beim Debuggen. Insbesondere Workarounds sind gefährlich. Sie erscheinen einem das Leben schnell zu erleichtern und das Problem aus der Welt zu schaffen. Besonders wenn wieder einmal der Chef im Nacken sitzt. Doch die hier gewonnene Zeit wird mit hohen Zinsen erkauft. Wer hat nicht schon einmal ein komplettes Modul neu schreiben müssen? Wird unter die Oberfläche des Problems gesehen und das Übel an der Wurzel gepackt, stellt man zudem oft fest, dass sich ein Problem nicht nur sauberer, sondern viel einfacher lösen läßt als gedacht. Die genannten Prinzipien lassen auch in vielen anderen Bereichen gut nutzen oder wie gut ist euer Schreibtisch aufgeräumt? Oder wiederspricht eurer Meinung nach gar alles dem &#8220;Keep It Simple, Stupid&#8221;-Prinzip und Prokratinationsstapel sind der beste Weg Ordnung zu halten?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/06/time-to-go-back-to-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Binding a Dictionary to  a ComboBox</title>
		<link>http://blog.2moveit.de/index.php/2010/06/binding-a-dictionary-to-a-combobox/</link>
		<comments>http://blog.2moveit.de/index.php/2010/06/binding-a-dictionary-to-a-combobox/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 06:27:49 +0000</pubDate>
		<dc:creator>Kai</dc:creator>
				<category><![CDATA[Windows Presentation Foundation]]></category>
		<category><![CDATA[ComboBox]]></category>
		<category><![CDATA[DataBinding]]></category>
		<category><![CDATA[Dictionary]]></category>
		<category><![CDATA[Snippet]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/?p=278</guid>
		<description><![CDATA[View code (XAML): &#60;ComboBox ItemsSource=&#34;{Binding Items}&#34; DisplayMemberPath=&#34;Value&#34; SelectedValuePath=&#34;Key&#34; SelectedValue=&#34;{Binding SelectedItemCode}&#34;/&#62; ViewModel code: // Key = ItemCode, Value = Name public IDictionary&#60;string, string&#62; Items{get; private set;} public string SelectedItemCode { get { return Settings.Default.SelectedItemCode; } set { if (Settings.Default.SelectedItemCode != value) &#8230; <a href="http://blog.2moveit.de/index.php/2010/06/binding-a-dictionary-to-a-combobox/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>View code (XAML):</p>
<pre class="brush: xml;">&lt;ComboBox ItemsSource=&quot;{Binding Items}&quot;
  DisplayMemberPath=&quot;Value&quot;
  SelectedValuePath=&quot;Key&quot;
  SelectedValue=&quot;{Binding SelectedItemCode}&quot;/&gt;
</pre>
<p>ViewModel code:</p>
<pre class="brush: csharp;">// Key = ItemCode, Value = Name
public IDictionary&lt;string, string&gt; Items{get; private set;}  

public string SelectedItemCode
{
 get
 {
  return Settings.Default.SelectedItemCode;
 }
 set
 {
  if (Settings.Default.SelectedItemCode != value)
  {
   Settings.Default.SelectedItemCode = value;
   OnPropertyChanged(&quot;SelectedItemCode&quot;);
  }
 }
}
</pre>
<p>A settings file is used to store the user selection. Of cause you have to save the settings e.g. if your view is closed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/06/binding-a-dictionary-to-a-combobox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DateTime formatieren in yyyymmdd</title>
		<link>http://blog.2moveit.de/index.php/2010/06/datetime-formatieren-in-yyyymmdd/</link>
		<comments>http://blog.2moveit.de/index.php/2010/06/datetime-formatieren-in-yyyymmdd/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 16:55:32 +0000</pubDate>
		<dc:creator>Kai</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[DateTime]]></category>
		<category><![CDATA[Format]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://blog.2moveit.de/?p=283</guid>
		<description><![CDATA[return string.Format(&#34;{0}{1:D2}{2:D2}&#34;, Date.Year, Date.Month, Date.Day); &#62;&#62; 20100618 string Format(String, Object) ermöglicht es ein Text-Pattern zu erstellen in welches die Variablenwerte an den Indexpositionen mit geschweiften Klammern eingefügt werden. Um aus den Integerwerten Datum und Tag immer eine zweistellige Zahl zu &#8230; <a href="http://blog.2moveit.de/index.php/2010/06/datetime-formatieren-in-yyyymmdd/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<pre class="brush: csharp; gutter: false;">return string.Format(&quot;{0}{1:D2}{2:D2}&quot;, Date.Year, Date.Month, Date.Day);</pre>
<pre class="brush: bash; light: true;">&gt;&gt; 20100618</pre>
<p style="text-align: justify;">string Format(String, Object) ermöglicht es ein Text-Pattern zu erstellen in welches die Variablenwerte an den Indexpositionen mit geschweiften Klammern eingefügt werden. Um aus den Integerwerten Datum und Tag immer eine zweistellige Zahl zu erstellen besteht die Möglichkeit durch einen Doppelpunkt ein Format zu spezifizieren. Es gibt Formate für Währung, Exponenten und viele <a href="http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx" target="_blank">mehr</a>. Das hier benötigte Format ist D, wie  Dezimal gefolgt von der Anzahl der Stellen, die eine Zahl einnehmen soll. Auf das Pattern folgend werden die Variablen übergeben. Im oben gezeigten Beispiel ist Date vom Typ DateTime.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.2moveit.de/index.php/2010/06/datetime-formatieren-in-yyyymmdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

