<?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>jt_&#187; jan-teumer.de</title>
	<atom:link href="http://jan-at-work.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://jan-at-work.de</link>
	<description>Jan Teumer über &#34;code adventures&#34; und das Leben.</description>
	<lastBuildDate>Wed, 16 Feb 2011 19:57:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	<div id='fb-root'></div>
					<script>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/de_DE/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>VHS Kurs: Sicherheit im Internet und im priv. Netzwerk</title>
		<link>http://jan-at-work.de/2010/10/05/vhs-kurs-sicherheit-im-internet-und-im-priv-netzwerk/</link>
		<comments>http://jan-at-work.de/2010/10/05/vhs-kurs-sicherheit-im-internet-und-im-priv-netzwerk/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 16:47:11 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[VHS Gettorf]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=101</guid>
		<description><![CDATA[Vielen Dank für die Teilnahme, es hat mir sehr viel Spaß gemacht. Wie versprochen hier die Präsentation im PDF Format. -&#62; Praesentation downloaden. Sollten Sie noch Fragen haben, können Sie mir gerne eine E-Mail schicken an jan.teumer@googlemail.com]]></description>
			<content:encoded><![CDATA[<p>Vielen Dank für die Teilnahme, es hat mir sehr viel Spaß gemacht. Wie versprochen hier die Präsentation im PDF Format.</p>
<p><a href="http://jan-at-work.de/wp-content/uploads/2010/10/Praesentation.zip">-&gt; Praesentation</a> downloaden.</p>
<p>Sollten Sie noch Fragen haben, können Sie mir gerne eine E-Mail schicken an jan.teumer@googlemail.com</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/10/05/vhs-kurs-sicherheit-im-internet-und-im-priv-netzwerk/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/10/05/vhs-kurs-sicherheit-im-internet-und-im-priv-netzwerk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft Outlook Kalender 2010 &amp; Googlemail Kalender syncronisieren</title>
		<link>http://jan-at-work.de/2010/09/10/microsoft-outlook-kalender-2010-googlemail-kalender-syncronisieren/</link>
		<comments>http://jan-at-work.de/2010/09/10/microsoft-outlook-kalender-2010-googlemail-kalender-syncronisieren/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 16:36:33 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[Nützlich]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=97</guid>
		<description><![CDATA[Es ist endlich da! Das Sync-Tool von google für Outlook 2010 (nur 32 Bit Fassung). Das Tool gibt es hier.]]></description>
			<content:encoded><![CDATA[<p>Es ist endlich da! Das Sync-Tool von google für Outlook 2010 (nur 32 Bit Fassung). Das Tool gibt es <a href="http://www.google.com/support/calendar/bin/answer.py?hl=de&amp;answer=89955" target="_blank">hier</a>.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/09/10/microsoft-outlook-kalender-2010-googlemail-kalender-syncronisieren/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/09/10/microsoft-outlook-kalender-2010-googlemail-kalender-syncronisieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7 &#8211; GUI Design: Controls an den Wert einer Checkbox binden.</title>
		<link>http://jan-at-work.de/2010/08/31/windows-phone-7-gui-design-controls-an-den-wert-eine-checkbox-binden/</link>
		<comments>http://jan-at-work.de/2010/08/31/windows-phone-7-gui-design-controls-an-den-wert-eine-checkbox-binden/#comments</comments>
		<pubDate>Tue, 31 Aug 2010 12:58:55 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=91</guid>
		<description><![CDATA[Heute ein kleiner Mini-Snippet, der aber sehr hilfreich sein kann. Es dreht sich um das binden von der visibility Eigenschaft bei Controls auf bspw. einer Checkbox bzw. deren Wert. Dies brauchte ich nun häuftiger bei der Windows Phone 7 Entwicklung, da der Platz recht knapp bemessen ist . Jedoch ist diese Methode genauso in Silverlight [...]]]></description>
			<content:encoded><![CDATA[<p>Heute ein kleiner Mini-Snippet, der aber sehr hilfreich sein kann. Es dreht sich um das binden von der visibility Eigenschaft bei Controls auf bspw. einer Checkbox bzw. deren Wert. Dies brauchte ich nun häuftiger bei der Windows Phone 7 Entwicklung, da der Platz recht knapp bemessen ist <img src='http://jan-at-work.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . Jedoch ist diese Methode genauso in Silverlight oder WPF lauffähig.</p>
<p><span id="more-91"></span><br />
Als erstes benötigen wir eine kleine Helfer Klasse:</p>
<pre class="brush: csharp; title: ;">
public class BooleanVisibilityValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value != null)
        {
            if (((bool)value) == true)
                return Visibility.Visible;
            else
                return Visibility.Collapsed;
        }

        return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {

        throw new Exception(&quot;The method or operation is not implemented.&quot;);

    }
}
</pre>
<p>Diese Klasse müssen wir im der entsprechenden xaml Datei per clr-namespace import verfügbar machen.</p>
<p>Danach setzen wir dies als Resource in einer unseren Controls/Window/Page/UserControl(whatever), hier zum Beispiel ein Grid.</p>
<pre class="brush: xml; title: ;">
&lt;Grid.Resources&gt;
    &lt;helper:BooleanVisibilityValueConverter x:Key=&quot;BoolToVisible&quot; /&gt;
&lt;/Grid.Resources&gt;
</pre>
<p>Nun können wir diesen Helfer verwenden:</p>
<pre class="brush: xml; title: ;">
&lt;CheckBox Name=&quot;EMailNotification&quot; Content=&quot;E-Mail benutzen&quot; /&gt;
&lt;TextBox Visibility=&quot;{Binding ElementName=EMailNotification, Path=IsChecked, Converter={StaticResource BoolToVisible}}&quot; /&gt;
</pre>
<p>Sollte die Checkbox nicht gesetzt sein, wird die Textbox nicht angezeigt. Sollte die Checkbox nun angeklickt werden wird auch die Textbox angezeigt.</p>
<p>Ich wünsche viel Spaß damit <img src='http://jan-at-work.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/31/windows-phone-7-gui-design-controls-an-den-wert-eine-checkbox-binden/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/31/windows-phone-7-gui-design-controls-an-den-wert-eine-checkbox-binden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3 Möglichkeiten zur Navigation in Windows Phone 7 Apps.</title>
		<link>http://jan-at-work.de/2010/08/25/3-moglichkeiten-zur-navigationen-in-windows-phone-7-apps/</link>
		<comments>http://jan-at-work.de/2010/08/25/3-moglichkeiten-zur-navigationen-in-windows-phone-7-apps/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 07:22:24 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=73</guid>
		<description><![CDATA[Die SDK rund um das Windows Phone 7 arbeitet bekanntweiser mit Silverlight 3 und dem .NET Framework. Diese Kombination bietet uns nun von Haus aus 3 Möglichkeiten um in einer App zu navigieren. statische Links (nicht geroutet) Navigation mittels Routen Navigation mittels NavigationService Die ersten beiden Varianten sind nur für Hyperlinks verfügbar. 1. Statische Links [...]]]></description>
			<content:encoded><![CDATA[<p>Die SDK rund um das Windows Phone 7 arbeitet bekanntweiser mit Silverlight 3 und dem .NET Framework. Diese Kombination bietet uns nun von Haus aus 3 Möglichkeiten um in einer App zu navigieren.</p>
<ol>
<li>statische Links (nicht geroutet)</li>
<li>Navigation mittels Routen</li>
<li>Navigation mittels NavigationService</li>
</ol>
<p>Die ersten beiden Varianten sind nur für Hyperlinks verfügbar.</p>
<p><span id="more-73"></span></p>
<p><strong>1. Statische Links (auf das wesentliche gekürtzt, Quellcode ist selbsterklährend)</strong></p>
<pre class="brush: xml; title: ;">
&lt;HyperlinkButton NavigateUri=&quot;/Verzeichnis/meinWindow.xaml&quot; /&gt;
</pre>
<p>Wie kann ich nun Paramter übergeben?</p>
<pre class="brush: xml; title: ;">
&lt;HyperlinkButton NavigateUri=&quot;/Verzeichnis/meinWindow.xaml?ParamterKey=ParanterValue&quot; /&gt;
</pre>
<p>Alt bekannt oder? Das auslesen dieses Paramters in der aufgerufenen View könnte so aussehen:</p>
<pre class="brush: csharp; title: ;">
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var paramter = NavigationContext.QueryString[&quot;ParamterKey&quot;];

// Do something
}
</pre>
<p>Wir überschreiben einfach <em>OnNavigatedTo. </em> Danach könnnen wir auf den NavigatedContext zugreifen.</p>
<p><strong>2. Navigation über Routen.</strong></p>
<p>Dies kennt man eigentlich schon aus anderen Webprojekten wie CakePHP, RoR etc pp. Wir benötigen als sowas wie ein UriMapping. Dieses wird überlichweise in der App.xaml angelegt. Was wir in der App.xaml jedoch als erstes anlegen müssen ist ein Namespace der auf System.Windows.Navigation gesetzt wird.</p>
<pre class="brush: xml; title: ;">
xmlns:nav=&quot;clr-namespace:System.Windows.Navigation;assembly=Microsoft.Phone&quot;
</pre>
<p>Und hier das Mapping, ist eigentlich selbsterklährend und man könnte es natürlich noch ein bisschen aufbohren <img src='http://jan-at-work.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<pre class="brush: xml; title: ;">
&lt;Application.RootVisual&gt;
&lt;phone:PhoneApplicationFrame x:Name=&quot;RootFrame&quot; Source=&quot;/MainPage.xaml&quot;&gt;
    &lt;phone:PhoneApplicationFrame.UriMapper&gt;
        &lt;nav:UriMapper&gt;
            &lt;nav:UriMapper.UriMappings&gt;
                &lt;nav:UriMapping Uri=&quot;/Verzeichnis/{MyParamterKey}&quot;
                                MappedUri=&quot;/Verzeichnis/MeineView.xaml?MyParameterKey={MyParamterKey}&quot; /&gt;
            &lt;/nav:UriMapper.UriMappings&gt;
        &lt;/nav:UriMapper&gt;
    &lt;/phone:PhoneApplicationFrame.UriMapper&gt;
&lt;/phone:PhoneApplicationFrame&gt;
&lt;/Application.RootVisual&gt;
</pre>
<p>Nun können wir den Hyperlink etwas umschreiben und unsere Route benutzen.</p>
<pre class="brush: xml; title: ;">
&lt;HyperlinkButton NavigateUri=&quot;/Verzeichnis/MeinParaterValue&quot; /&gt;
</pre>
<p><strong>3. Navigation über den NavigationService</strong></p>
<p>Dies ist ziemlich easy, als beispiel dient mir hier ein Button aus der ApplicationBar der ein event auslöst.</p>
<pre class="brush: csharp; title: ;">
private void appbar_AddWishList_Click(object sender, System.EventArgs e)
{
    NavigationService.Navigate(new Uri(&quot;/View/WishListView.xaml&quot;, UriKind.Relative));
}
</pre>
<p>Das war es auch schon.<br />
Weiterhin viel Erfolg beim entwickeln <img src='http://jan-at-work.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/25/3-moglichkeiten-zur-navigationen-in-windows-phone-7-apps/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/25/3-moglichkeiten-zur-navigationen-in-windows-phone-7-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erstellung einer Singleton Klasse mit C#, die Thread Safe ist.</title>
		<link>http://jan-at-work.de/2010/08/20/erstellung-einer-singleton-klasse-mit-c-die-thread-safe-ist/</link>
		<comments>http://jan-at-work.de/2010/08/20/erstellung-einer-singleton-klasse-mit-c-die-thread-safe-ist/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 20:49:43 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=69</guid>
		<description><![CDATA[Was ist ein Singleton? Singleton beschreibt ein Pattern (Entwurfsmuster) vom Typ Creational Pattern. Die Aufgabe dieses Pattern ist es, dass es nicht möglich sein soll mehr als ein Objekt einer (Singleton)Klasse zu erzeugen. Prinzipiell arbeitet diese Klasse wir eine statische Klasse, jedoch vereinfacht dieses Pattern die Entwicklung eben dieser statischen Klasse. Üblicherweise sind diese Klassen [...]]]></description>
			<content:encoded><![CDATA[<p>Was ist ein Singleton? Singleton beschreibt ein Pattern (Entwurfsmuster) vom Typ Creational Pattern. Die Aufgabe dieses Pattern ist es, dass es nicht möglich sein soll mehr als ein Objekt einer (Singleton)Klasse zu erzeugen. Prinzipiell arbeitet diese Klasse wir eine statische Klasse, jedoch vereinfacht dieses Pattern die Entwicklung eben dieser statischen Klasse. Üblicherweise sind diese Klassen global verfügbar.</p>
<p>Wo findet man denn bspw. soche Singletons? Besonders häufig wird diese Pattern in den UnitOfWork Klassen, die für den DataAccess verwendet werden. Wenn wir für eine Anwendung bspw. das Entity Framework verwerden würden, könnte eine solche Methode ein read only Context handeln, denn der Context selbst ist nicht Thread Safe.</p>
<p>Wie sieht ein Singleton Pattern überlichweise aus?</p>
<ol>
<li>private / protected Konstruktor</li>
<li>Getter für Instance.</li>
</ol>
<p>In C# hat man mehrere Möglichkeiten, eine Stelle ich euch hier vor. Diese Variante ist Thread Safe.</p>
<pre class="brush: csharp; title: ;">
public sealed class MySingleton
{
    // Thread safe!
    static readonly MySingleton instance = new MySingleton();

    static MySingleton() { }

    // use private or protected
    private MySingleton() { }

    // Gets the instance of MySingleton class
    public static MySingleton Instance
    {
        get
        {
            return instance;
        }
    }

    // Return the hashcode of the instance
    public int GetSingletonHashCode
    {
        get
        {
            return this.GetHashCode();
        }
    }
}
</pre>
<p>Protected Konstruktor macht in diesem Beispiel eigentlich keine Sinn, da die Klasse &#8220;sealed&#8221; ist (kann nicht weiter abgeleitet werden).<br />
Vielleicht kann das ja der eine oder andere gebrauchen</p>
<p>Viel Spaß damit</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/20/erstellung-einer-singleton-klasse-mit-c-die-thread-safe-ist/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/20/erstellung-einer-singleton-klasse-mit-c-die-thread-safe-ist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF Window automatisch an die Größe seiner Child-Elemente anpassen.</title>
		<link>http://jan-at-work.de/2010/08/20/wpf-window-automatisch-an-die-groser-seiner-elemente-anpassen/</link>
		<comments>http://jan-at-work.de/2010/08/20/wpf-window-automatisch-an-die-groser-seiner-elemente-anpassen/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 11:34:49 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=44</guid>
		<description><![CDATA[Also ich muss zugeben, ich bin kein Designer. Außerdem kann ich sagen, dass WPF mir eigentlich vom Aufbau und den Möglichkeiten die es bietet sehr antut, sodass ich auch selbst mal was bauen kann . Nichts desto trotz haben mich die Height/Witdh Angaben bei den Windows-Elementen teilweise nahe einem Nervenzusammenbruch gebracht. Eigentlich sollte man annehmen, [...]]]></description>
			<content:encoded><![CDATA[<p>Also ich muss zugeben, ich bin kein Designer. Außerdem kann ich sagen, dass WPF mir eigentlich vom Aufbau und den Möglichkeiten die es bietet sehr antut, sodass ich auch selbst mal was bauen kann <img src='http://jan-at-work.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p>Nichts desto trotz haben mich die Height/Witdh Angaben bei den Windows-Elementen teilweise nahe einem Nervenzusammenbruch gebracht. Eigentlich sollte man annehmen, dass „auto“ Breite/Weite das Window automatisch auf die Größe des Fenster in Bezug auf die Child-Elemente anpasst. Dem ist jedoch nicht so. Das Attribut „SizeToContent“ hilft dann einem dabei.</p>
<pre class="brush: xml; title: ;">
&lt;Window x:Class=&quot;HardwareStoreGui.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;auto&quot; Width=&quot;auto&quot;
        SizeToContent=&quot;WidthAndHeight&quot;&gt;

    &lt;Grid /&gt;

&lt;/Window&gt;
</pre>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/20/wpf-window-automatisch-an-die-groser-seiner-elemente-anpassen/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/20/wpf-window-automatisch-an-die-groser-seiner-elemente-anpassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET 3.5 SP1 und Entity Framework in eigener Assembly</title>
		<link>http://jan-at-work.de/2010/08/18/net-3-5-sp1-und-entity-framework-in-eigener-assembly/</link>
		<comments>http://jan-at-work.de/2010/08/18/net-3-5-sp1-und-entity-framework-in-eigener-assembly/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 16:25:30 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
		
		<guid isPermaLink="false">http://jan-at-work.de/?p=40</guid>
		<description><![CDATA[Manche haben Probleme das Entity Framework (1er Version aus .NET 3.5 SP1) in einer eigenen Assembly laufen zu lassen. Das Problem ist ein leerer ConnectionString im Konstruktor des Context-Objectes. Das Problem resultiert daraus, dass der Connection String aus der App.Config von dem Projekt wo auch die Entity Framework Implementierung sich befindet, nicht in die App.Config [...]]]></description>
			<content:encoded><![CDATA[<p>Manche haben Probleme das Entity Framework (1er Version aus .NET 3.5 SP1) in einer eigenen Assembly laufen zu lassen. Das Problem ist ein leerer ConnectionString im Konstruktor des Context-Objectes. Das Problem resultiert daraus, dass der Connection String aus der App.Config von dem Projekt wo auch die Entity Framework Implementierung sich befindet, nicht in die App.Config der Main Methode(Exe Projekt) geschrieben wird.</p>
<p>Lösung?</p>
<ol>
<li>Entweder die beiden App.Configs mergen oder den ConnectionString in eine App.Config schreiben die sich bei der .exe befindet.</li>
<li>Schönere Methode ist wohl das intitialisieren des Context mit einem ConnectionString.</li>
</ol>
<p>Bermerkung zur 2. Variante:  Netterweise bietet Microsoft für das erstellen des ConnectionString schon was an. Im Namespace &#8220;System.Data.EntityClient&#8221; in der .dll System.Data.Entity bietet &#8220;EntityConnectionStringBuilder&#8221; Klasse an.</p>
<p>Genaures wie immer auf<a title="MSDN EntityConnectionStringBuilder Klasse" href="http://msdn.microsoft.com/de-de/library/system.data.entityclient.entityconnectionstringbuilder.aspx" target="_blank"> MSDN</a>.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/18/net-3-5-sp1-und-entity-framework-in-eigener-assembly/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/18/net-3-5-sp1-und-entity-framework-in-eigener-assembly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teil1 : Multi-Threading in .NET und mit C# &#8211; Einführung</title>
		<link>http://jan-at-work.de/2010/08/18/teil1-multi-threading-in-net-und-mit-c-einfuhrung/</link>
		<comments>http://jan-at-work.de/2010/08/18/teil1-multi-threading-in-net-und-mit-c-einfuhrung/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 09:09:54 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=21</guid>
		<description><![CDATA[In den nächsten Wochen starte ich eine kleine Serie über das Thema Multi-Threading. Dieses Serie soll einen einfachen Einstieg in das Thema bieten und die wichtigsten Aspekte erläutern. Im ersten Teil Heute geht es um das theoretische Wissen und unsere erste Multi-Threading Anwendung. Was ist Multithreading? Dazu müssen wir erst einmal wissen, was ein Prozess [...]]]></description>
			<content:encoded><![CDATA[<p>In den nächsten Wochen starte ich eine kleine Serie über das Thema Multi-Threading. Dieses Serie soll einen einfachen Einstieg in das Thema bieten und die wichtigsten Aspekte erläutern.</p>
<p>Im ersten Teil Heute geht es um das theoretische Wissen und unsere erste Multi-Threading Anwendung.</p>
<p><span id="more-21"></span></p>
<p>Was ist Multithreading? Dazu müssen wir erst einmal wissen, was ein Prozess und was ein Thread ist.</p>
<p>Einen Prozess kennen wir alle, zumindest wenn wir mal einen Blick in den Taskmanager von Windows geschaut haben oder den Befehl „ps“ in einer Unix Shell ausgeführt haben.</p>
<p><a href="http://jan-at-work.de/wp-content/uploads/2010/08/taskmgr.png"><img class="size-medium wp-image-22 alignleft" title="taskmgr" src="http://jan-at-work.de/wp-content/uploads/2010/08/taskmgr-269x300.png" alt="" width="269" height="300" /></a></p>
<p>Ein Prozess ist also nichts weiter als die laufende Instanz einer Anwendung. Jeder Prozess verfügt über seinen eigenen Adressraum und Ressourcen. Der Prozess selbst führt kein Code aus, denn er besitzt eine Menge &gt;= 1 von Threads. Sollte der letzte Thread abgeschlossen sein, dann wird der Prozess beendet.  Das bedeutet natürlich, dass ein Prozess mindestens einen Thread besitzt.</p>
<p>Als einen Thread bezeichnet man im Grunde einen Ausführungsstrom innerhalb eines Prozesses. Er arbeitet Code ab und hat er das abgeschlossen, wird er beendet.</p>
<p>In .NET gibt es immer einen ganz besonderen Thread. Der sogenannte Main-Thread. Diesen Thread können wir uns nicht entziehen. Für jede Anwendung mit einer Main Methode wird ein Main- Thread erstellt. Sollte die Main Methode abgearbeitet sein, dann endet im Normalfall nicht nur unsere Anwendung sondern natürlich als erstes der Main-Thread -&gt; und dann der Prozess in dem der Thread zugewiesen war.</p>
<p><a href="http://jan-at-work.de/wp-content/uploads/2010/08/simplePs.png"><img class="size-full wp-image-24 alignleft" title="simplePs" src="http://jan-at-work.de/wp-content/uploads/2010/08/simplePs.png" alt="" width="143" height="290" /></a></p>
<p>Bei einem Singel-Thread Anwendung war es oftmals so, dass der Anwender nicht genau wusste was die Anwendung denn nun gerade genau tat? Lebt die Anwendung noch?  Vielleicht ist die Instanz der Anwendung ja schon tot. Wenn wir nun mehrere Threads hätten, könnten wir einen „Observer“ Thread dem Prozess hinzufügen, dieser überwacht und beobachtet die Aktionen des Main-Threads und Informiert den Anwender.</p>
<p>Kommen wir zu eigentlichen Frage zurück, was ist Multithreading denn nun? Ist Multithreading = Multitasking? Nein ist es nicht. Multitasking bezeichnet eigentlich die Fähigkeit, mehrere Tasks <em>gleichzeitig</em> auszuführen. Dies kann natürlich bei einem <strong>1 Kern </strong>Prozessor nicht funktionieren, da dort die Rechenleistung nicht so einfach geteilt werden kann. Deswegen wechselt die CPU jeweils von Task zu Task um den User das Gefühl zu geben es würde gleichzeitig passieren.</p>
<p>Multithreading hingegen, ist die &#8220;gleichzeitige&#8221; Abarbeitung von Ausführungsströmen (wie oben schon beschrieben).</p>
<p>Kommen wir nun aber mal zum lustigen Teil des ersten Workshops. Fangen wir also mit unseren ersten Multithread Anwendung. Zuerst benötigen wir natürlich theoretisches Wissen über die Werkzeuge die wir benötigen.  Da macht es uns das .NET Framework recht einfach, denn alles was wir vorerst an Werkzeugen benötigen liegt im Namensraum / Namespace von „System.Threading“.</p>
<p>Wir erstellen also als erstes eine &#8220;Consolen Application&#8221; und fügen den Namespace &#8220;System.Threading&#8221; ein.</p>
<pre class="brush: csharp; title: ;">

using System;
using System.Threading;
</pre>
<p>Im nächsten Schritt bauen wir uns 2 Methoden die uns helfen soll, die Threading Funktionalität zu visualisieren.</p>
<pre class="brush: csharp; title: ;">

static void Incrementer()
{
 for (int i = 0; i &lt;= 1000; i++)
Console.WriteLine(&quot;Increment to:{0}&quot;, i);
}

static void Decrementer()
{
 for (int i = 1000; i &gt;= 0; i--)
Console.WriteLine(&quot;Decrement to:{0}&quot;, i);
}
</pre>
<p>In der Main Methode erstellen wir nun unsere Threads. Beim Initialisieren der Threads müssen wir dem Thread mitteilen, welche die Start-Funktion  ist. Danach können wir mit &#8220;Start()&#8221; die Threads starten lassen, zum Schluss wird einfach nochmal einen ReadKey Commando ausgeführt, weil sonst der Main-Thread beendet wird. Und was das bedeutet wissen wir ja jetzt, der Prozess würde ebenfalls beendet und wir würden unsere Ausgaben auf der Konsole verlieren.</p>
<pre class="brush: csharp; title: ;">

static void Main(string[] args)
 {
Thread th1 = new Thread(new ThreadStart(Incrementer));
Thread th2 = new Thread(new ThreadStart(Decrementer));

th1.Start();
th2.Start();

Console.ReadKey();
 }
</pre>
<p>Vielleicht wird sich der einer oder andere Gedacht haben, dass sich die Ausgabe vom Incrementer und Decrementer immer (nach jeder Operation) abwechselt. Aber wie wir sehen ist das nicht so. Unser Betriebssystem gewährt jedem Thread eine unterschiedlich lange Rechenzeit auf der CPU. Der Scheduler ist im Endeffekt der Entscheider. Er entscheidet anhand von freien Ressourcen wie lange der Thread die CPU nutzen darf.</p>
<p>Das war es auch schon mit dem ersten Teil der Serie. Ich denke wir haben nun schon mal ein gewisses Fundament und damit im 2. Teil weiter zumachen. Dort erwartet euch dann wesentlich mehr Entwicklung. Es dreht sich um die einzelnen &#8220;States&#8221; eines Threads, außerdem müssen wir über Paramater und ParamterizedThreads sprechen.</p>
<p>Mehr dazu dann in ca. 1 Woche.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/18/teil1-multi-threading-in-net-und-mit-c-einfuhrung/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/18/teil1-multi-threading-in-net-und-mit-c-einfuhrung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Datenbanken auf dem Microsoft SQL Server suchen und finden.</title>
		<link>http://jan-at-work.de/2010/08/17/datenbanken-auf-dem-microsoft-sql-server-suchen-und-finden/</link>
		<comments>http://jan-at-work.de/2010/08/17/datenbanken-auf-dem-microsoft-sql-server-suchen-und-finden/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 12:41:16 +0000</pubDate>
		<dc:creator>Jan Teumer</dc:creator>
				<category><![CDATA[C# / .NET]]></category>

		<guid isPermaLink="false">http://jan-at-work.de/?p=8</guid>
		<description><![CDATA[Heute mal ein kleines &#8220;code snippet&#8221; im Zusammenhang mit dem Microsoft SQL Server. Problemstellung: Wir müssen (hochperformant) herausfinden ob eine bestimmte Instanz die gesuchte Datenbank verwaltet oder nicht. Es gibt für dieses Problem dutzende von Möglichkeiten, eine recht performante Methode möchte ich gerne hier vorstellen. Jede Instanz auf einem MS SQL Server hat eine sogenannte [...]]]></description>
			<content:encoded><![CDATA[<p>Heute mal ein kleines &#8220;code snippet&#8221; im Zusammenhang mit dem Microsoft SQL Server.</p>
<p><span id="more-8"></span><strong>Problemstellung:</strong> Wir müssen (hochperformant) herausfinden ob eine bestimmte Instanz die gesuchte Datenbank verwaltet oder nicht.</p>
<p>Es gibt für dieses Problem dutzende von Möglichkeiten, eine recht performante Methode möchte ich gerne hier vorstellen. Jede Instanz auf einem MS SQL Server hat eine sogenannte &#8220;Master Datenbank&#8221;. Diese enthält unter anderem Schema-Informationen über die verwalteten Datenbanken auf ihrer zugeordneten Instanz. Darüber hinaus findet man super praktische Stored Procedures für die Datenbankverwaltung. Kurz: Jeder sollte sich mal diese Datenbank und deren Funktionen genauer anschauen, es lohnt sich.</p>
<p>Zurück zu unserem eigentlich Aufgabestellung. Wir missen nun also, dass die Master Datenbank eine Tabelle besitzt, die voll mit Schema-/Meta- Informationen über die verwalteten Datenbanken besitzt. Wir müssen also nur noch prüfen, ob es diese Informationen für die gesuchte Datenbank gibt, wenn ja existiert die Datenbank, wenn nein existiert Sie nicht.</p>
<p>Der Knackpunkt hier ist, dass wir uns nicht auf die gesuchte Datenbank verbinden, sondern auf die Master Datenbank. Wenn wir das nicht täten und uns auf die gesuchte Datenbank verbinden würden und diese dann nicht vorhanden wäre, hätten wir unter anderem einen ConnectionTimeout von 15 Sekunden (default). Diesen ConnectionTimeout können wir recht einfach mit der Verbindung zu Master Datenbank umgehen. Daraus holen wir also unsere Performance.</p>
<p>Hier das Listings 1.</p>
<pre class="brush: csharp; title: ;">
// Connection string beinhaltet als initialCatalog die master Datenbank
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = connection.CreateCommand();
    command.CommandText = &quot;SELECT COUNT(sid) From sysdatabases where name = N'@CatalogName'&quot;;

    SqlParameter param = command.CreateParameter();
    param.ParameterName = &quot;@CatalogName&quot;;
    param.Value = &quot;Meine_Datenbankname&quot;;

    if (Convert.ToInt32(command.ExecuteScalar()) == 1)
        Console.WriteLine(&quot;Datenbank exestiert&quot;);
    else
        Console.WriteLine(&quot;Datenbank ist nicht vorhanden&quot;);
}
</pre>
<p>Das war es auch schon, wie man sieht heißt diese Tabelle &#8220;sysdatabases&#8221;. Am besten man testet mal das Query im SSMS (SQL Server Management Studio).</p>
<p>Viel Spaß beim benutzen.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://jan-at-work.de/2010/08/17/datenbanken-auf-dem-microsoft-sql-server-suchen-und-finden/' layout='button_count' show_faces='true' width='400' action='like' colorscheme='light' /></div>]]></content:encoded>
			<wfw:commentRss>http://jan-at-work.de/2010/08/17/datenbanken-auf-dem-microsoft-sql-server-suchen-und-finden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

