<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Dariusz quatscht</title><link>http://blogs.msdn.com/dparys/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Verschenke…</title><link>http://blogs.msdn.com/dparys/archive/2009/07/09/verschenke.aspx</link><pubDate>Thu, 09 Jul 2009 10:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9826262</guid><dc:creator>dparys</dc:creator><slash:comments>42</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9826262.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9826262</wfw:commentRss><description>&lt;P&gt;…jeweils 4 x 1 &lt;A href="http://www.video2brain.com/de/products-330.htm" mce_href="http://www.video2brain.com/de/products-330.htm"&gt;Video2Brain Silverlight 2 Training DVD&lt;/A&gt; an 4 zufällig ermittelte Kommentare zu diesem Blog Post. Berücksichtigt werden nur Kommentare die eine Email Adresse hinterlassen (kann ruhig mit at (at) oder wie auch immer geschrieben sein).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Verschenke_A958/silverlight_2_tutorial_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Verschenke_A958/silverlight_2_tutorial_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title=silverlight_2_tutorial border=0 alt=silverlight_2_tutorial src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Verschenke_A958/silverlight_2_tutorial_thumb.jpg" width=181 height=273 mce_src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Verschenke_A958/silverlight_2_tutorial_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Bin gerade am Ausmisten von meinem Büro, wer weiß was ich noch so alles finde.&lt;/P&gt;
&lt;P&gt;Update: Teilnahmeschluß ist Montag, der 13.07.09 (End of Day GMT + 1)&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9826262" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Dies+und+Das/default.aspx">Dies und Das</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Resultate aus Task Objekten ermitteln</title><link>http://blogs.msdn.com/dparys/archive/2009/07/07/resultate-aus-task-objekten-ermitteln.aspx</link><pubDate>Tue, 07 Jul 2009 13:36:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9822544</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9822544.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9822544</wfw:commentRss><description>&lt;p&gt;Mit der Task Parallel Library hält die Klasse &lt;em&gt;Task&lt;/em&gt; ins Framework Einzug. In der Beta 1 hat man die API zur CTP verändert, so das die &lt;em&gt;Future&lt;/em&gt; Klasse nicht mehr vorhanden ist und diese Funktionalität über &lt;em&gt;Task&lt;/em&gt; abgebildet wird. In einem kurzen Screencast auf Channel 9 zeige ich wie man die Klasse Task mit Rückgabewerten benutzt.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/7/1/2/7/7/4/tpltaskresults_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/7/1/2/7/7/4/tpltaskresults_large_ch9.png, postid=477217" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;Eine Sache ist hierbei zu beachten. In der momentanen Visual Studio 2010 Beta 1 kommt Intellisense nicht ganz klar mit der Definition der übergebenen Werte in einer Lambda wenn der Typ nicht spezifiziert ist wie im folgenden Beispiel&lt;/p&gt;  &lt;div&gt;   &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;( previousTask ) =&amp;gt; { &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; result = previousTask.Result; }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;erkennt Visual Studio nicht das das Objekt &lt;em&gt;Task&amp;lt;T&amp;gt;&lt;/em&gt; benutzt wird, statt &lt;em&gt;Task&lt;/em&gt; und demzufolge keine &lt;em&gt;Result &lt;/em&gt;Eigenschaft anbietet. Man kann das explizit definieren dann funktioniert Intellisense auch sauber:&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;( Task&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt; previousTask ) =&amp;gt; { &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; result = previousTask.Result; }&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Ich habe im Screencast zwar von einem Bug gesprochen, nach einigen Überlegungen bin ich mir gar nicht sicher ob es einer ist. Woran soll Intellisense denn die Verwendung der Variable erkennen?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9822544" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item><item><title>BesserWeb</title><link>http://blogs.msdn.com/dparys/archive/2009/07/06/besserweb.aspx</link><pubDate>Mon, 06 Jul 2009 07:53:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9819109</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9819109.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9819109</wfw:commentRss><description>&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/8/0/8/6/7/4/internetexplained1_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/8/0/8/6/7/4/internetexplained1_large_ch9.png, postid=476808" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9819109" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Video/default.aspx">Video</category></item><item><title>Lizenzierung der Microsoft Concurrency Runtime</title><link>http://blogs.msdn.com/dparys/archive/2009/07/03/lizenzierung-der-microsoft-concurrency-runtime.aspx</link><pubDate>Fri, 03 Jul 2009 05:53:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9816100</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9816100.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9816100</wfw:commentRss><description>&lt;p&gt;Seit längerem verfolge ich die Verwendung der Microsoft Concurrency Runtime. Für mich war die CCR immer ein Bestandteil von Microsoft Robotics Studio. Gestern habe ich dann einfach mal meinen Kollegen Frank Prengel angesprochen, wie man denn die CCR Lizenztechnisch in seine eigenen Projekte einbinden kann. Muss man hierzu Microsoft Robotics Studio besitzen?&lt;/p&gt;  &lt;p&gt;Nein, es gibt ein dediziertes Lizenzierungsmodell. Auf der Seite “&lt;a href="http://www.microsoft.com/ccrdss/#GetIt"&gt;Get Microsoft CCR &amp;amp; DSS Toolkit&lt;/a&gt;” stehen die Lizenzbedingungen und es gibt auch die Möglichkeiten die Lizenz online zu kaufen.&lt;/p&gt;  &lt;p&gt;Weitere Information auf der Seite &lt;a href="http://www.microsoft.com/ccrdss"&gt;Introducing “Microsoft CCR and DSS Toolkit 2008 R2”&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9816100" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category></item><item><title>Webcast: Windows Azure Services Beispielanwendung</title><link>http://blogs.msdn.com/dparys/archive/2009/06/29/webcast-windows-azure-services-beispielanwendung.aspx</link><pubDate>Mon, 29 Jun 2009 13:17:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808582</guid><dc:creator>dparys</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9808582.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9808582</wfw:commentRss><description>&lt;p&gt;Endlich geschafft. Die Serie zu &lt;a href="http://www.microsoft.com/germany/msdn/webcasts/serien/MSDNWCS-0901-01.mspx"&gt;Windows Azure Services&lt;/a&gt; hat sich länger hingezogen als gedacht, verschiedene Faktoren waren hierfür Ausschlaggebend. Zum einen wollte ich die Serie flexibel halten, werde ich bei Webcasts allerdings nicht mehr machen. Die Zeit von der Produktion bis zur Publikation und somit zum Feedback ist einfach zu groß. Da überschneiden sich einfach die Produktionsphasen. Vielmehr versuche ich das flexible Screencasten momentan mit dem &lt;a href="http://blogs.msdn.com/dparys/archive/2009/06/15/projekt-blog-poll-entity-framework-revisited-und-die-folgen-bisher.aspx"&gt;Projekt Blog Poll&lt;/a&gt;. Zum anderen wollte ich noch einen Webcast zum .NET Service Bus – Routers und Queues reinnehmen, da diese Änderung während der Serie kam, doch ist momentan schon der .NET Service Bus bei vielen ein Buch mit Sieben Siegeln, insofern habe ich mir den Teil erspart. Auch die SQL Data Services sind geändert worden, eine neue technische Implementierung ist allerdings der Öffentlichkeit noch nicht zugänglich. Also konnte ich hierzu auch keinen Teil machen. &lt;/p&gt;  &lt;p&gt;Eine Beispielanwendung ist nun also der letzte Teil. Ursprünglich wollte ich hier eine von Microsoft Corporation nehmen, von meinen Kollegen drüben, doch die Azure Issue Tracker Anwendung ist mir dann doch zu umfangreich gewesen, ganz zu schweigen von der Installation. Also habe ich eines meiner CeBIT Projekte genommen: Blabber. &lt;/p&gt;  &lt;p&gt;Was ist Blabber? Eine einfache Dispatching Anwendung die Nachrichten an verschiedene Empfänger verteilt. Hierzu benutze ich die Windows Azure Table und Queue Storage Möglichkeiten und für einen Empfänger auch einmal den .NET Service Bus.&lt;/p&gt;  &lt;p&gt;Nicht kompliziert, auch nicht etwas was man unbedingt braucht, aber doch mal eine Demo die über “Hello, world.” hinausgeht – eh – ne, eigentlich nicht, ist auch nur ein “Hello, world.” anders verpackt. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032419282"&gt;Link zum Webcast: Windows Azure Services Beispielanwendung&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808582" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Webcasts/default.aspx">Webcasts</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Azure+Services/default.aspx">Azure Services</category></item><item><title>Am Anfang war ein Band…</title><link>http://blogs.msdn.com/dparys/archive/2009/06/25/am-anfang-war-ein-band.aspx</link><pubDate>Thu, 25 Jun 2009 07:33:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9803058</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9803058.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9803058</wfw:commentRss><description>&lt;p&gt;…oder wie alles Anfing. In diesem Video erzählt Bill Gates die Entstehung von ALTAIR BASIC. Ein interessanter Beitrag von &lt;a href="https://blogs.msdn.com/vbteam/"&gt;Lisa Feigenbaum&lt;/a&gt; aus der Reihe &lt;a href="http://channel9.msdn.com/shows/History/"&gt;The History of Microsoft&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_22.xap" /&gt; &lt;param name="initParams" value="m=mms://mschnlnine.wmod.llnwd.net/a1809/d1/ch9/8/1/3/5/5/4/HistoryofMicrosoftFinalNHDMusic_s_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/8/1/3/5/5/4/HistoryMicrosoft1975HDMusicbed_large_ch9.jpg, postid=455318" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9803058" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Dies+und+Das/default.aspx">Dies und Das</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding/default.aspx">Coding</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Video/default.aspx">Video</category></item><item><title>Entity Framework 4.0 Feature CTP1</title><link>http://blogs.msdn.com/dparys/archive/2009/06/23/entity-framework-4-0-feature-ctp1.aspx</link><pubDate>Tue, 23 Jun 2009 03:16:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9798716</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9798716.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9798716</wfw:commentRss><description>&lt;p&gt;Wer sich die Visual Studio 2010 Beta 1 installiert hat wird sich vielleicht gewundert haben wo denn die versprochenen Features vom Entity Framework 4.0 sind z.B., der POCO Support oder das Entity Tracking bei N-Tier Anwendungen. Das &lt;a href="http://blogs.msdn.com/adonet/default.aspx"&gt;Entity Framework Team&lt;/a&gt; hat es nicht ganz in die Erstellung der Beta 1 geschafft, doch nun haben Sie über einen seperaten CTP die fehlenden Features nachgeliert. &lt;/p&gt;  &lt;p&gt;Das &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=7fd7164e-9e73-43f7-90ab-5b2bf2577ac9"&gt;Entity Framework 4.0 Feature CTP1&lt;/a&gt; für Visual Studio 2010 Beta 1 lässt sich von &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=7fd7164e-9e73-43f7-90ab-5b2bf2577ac9"&gt;hier&lt;/a&gt; herunterladen und installieren. Passend zum Release gibt es vom Entity Framework Team auch entsprechende Walkthrough Code Beispiele in den folgenden Blog Posts veröffentlicht:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://blogs.msdn.com/adonet/archive/2009/06/22/feature-ctp-walkthrough-self-tracking-entities-for-entity-framework.aspx"&gt;Self Tracking Entities for Entity Framework&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/adonet/archive/2009/06/22/feature-ctp-walkthrough-poco-templates-for-entity-framework.aspx"&gt;POCO Templates for Entity Framework&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/adonet/archive/2009/06/22/feature-ctp-walkthrough-code-only-for-entity-framework.aspx"&gt;Code Only for Entity Framework&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Aus &lt;a href="http://www.my-msdn.de"&gt;MSDN Deutschland&lt;/a&gt; werden wir im Laufe der nächsten Wochen auch ein paar neue Webcasts zu dem Thema Datenzugriff mit dem Entity Framework 4.0 veröffentlichen.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9798716" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item><item><title>Tech-Ed 2009 vom 09.11 – 13.11 in Berlin</title><link>http://blogs.msdn.com/dparys/archive/2009/06/22/tech-ed-2009-vom-09-11-13-11-in-berlin.aspx</link><pubDate>Mon, 22 Jun 2009 14:54:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9797738</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9797738.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9797738</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/TechEd2009vom09.1113.11inBerlin_EDB7/banner-home1_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="banner-home1" border="0" alt="banner-home1" src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/TechEd2009vom09.1113.11inBerlin_EDB7/banner-home1_thumb.jpg" width="729" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nach langer Pause dürfen wir die Tech-Ed endlich wieder in Deutschland begrüßen. Dieses Mal ist Berlin Gastgeber. Es werden zahlreiche neue Technologien vorgestellt und nach Jahrelanger Trennung von IT-Pros und Developern wieder ein einwöchiger Event für beide veranstaltet. Themen werden unter anderem Windows 7, Windows Server 2008 R2, Windows Azure und Visual Studio 2010 sein.&lt;/p&gt;  &lt;p&gt;Frühbucherrabatte gibt es auf der entsprechenden Webseite&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/europe/teched/" href="http://www.microsoft.com/europe/teched/"&gt;http://www.microsoft.com/europe/teched/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9797738" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/VSTS_2F00_TFS/default.aspx">VSTS/TFS</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dev+Tools/default.aspx">Dev Tools</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Conference/default.aspx">Conference</category><category domain="http://blogs.msdn.com/dparys/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://blogs.msdn.com/dparys/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Live/default.aspx">Windows Live</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Virtualization/default.aspx">Virtualization</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Dynamic+Languages/default.aspx">Dynamic Languages</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category><category domain="http://blogs.msdn.com/dparys/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+Azure/default.aspx">Windows Azure</category><category domain="http://blogs.msdn.com/dparys/archive/tags/.NET+Services/default.aspx">.NET Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Azure+Services/default.aspx">Azure Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Live+Services/default.aspx">Live Services</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item><item><title>Task Parallel Library Screencasts</title><link>http://blogs.msdn.com/dparys/archive/2009/06/18/task-parallel-library-screencasts.aspx</link><pubDate>Thu, 18 Jun 2009 08:47:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9774447</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9774447.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9774447</wfw:commentRss><description>&lt;p&gt;Ich habe gestern ein paar Screencasts zur Task Parallel Library aufgenommen und heute frisch auf Channel 9 publiziert. Ich werde bei Gelegenheit noch mehr machen, immer Scheibchenweise. Die Screencasts selbst sind recht kurz gehalten zwischen 4-6 Minuten und sollen nur einzelne Elemente der API kurz vorstellen.&lt;/p&gt;  &lt;p&gt;Folgende Screencasts habe ich publiziert:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Tasks/"&gt;Task Parallel Library: Tasks&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Task-Continuations/"&gt;Task Parallel Library: Task Continuations&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/Dariusz/Task-Parallel-Library-Exception-Handling/"&gt;Task Parallel Library: Exception Handling&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Viel Spaß beim reinschauen.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9774447" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Screencast/default.aspx">Screencast</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Parallel+Computing/default.aspx">Parallel Computing</category></item><item><title>C# Lambdas und die Lesbarkeit von Source Code</title><link>http://blogs.msdn.com/dparys/archive/2009/06/16/c-lambdas-und-die-lesbarkeit-von-source-code.aspx</link><pubDate>Tue, 16 Jun 2009 06:43:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9759238</guid><dc:creator>dparys</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9759238.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9759238</wfw:commentRss><description>&lt;p&gt;Auf dem heutigen TechTalk in Köln zum Thema Parallel Computing ist eine rege Diskussion zum Thema Lambdas in C# entstanden. Beim Vorstellen der .NET Klasse &lt;em&gt;Parallel&lt;/em&gt; aus dem &lt;em&gt;System.Threading&lt;/em&gt; Namespace in .NET 4.0 habe ich neben den einfachen Parallel.Invoke Beispiel auch eine Monte Carlo PI Simulation gezeigt. Dabei wurde die Funktion &lt;em&gt;Parallel.For&amp;lt;T&amp;gt;&lt;/em&gt; benutzt.&lt;/p&gt;  &lt;p&gt;Mit dieser Funktion lassen sich Schleifen parallelisieren und entsprechend die Ergebnisse der einzelnen Tasks zusammenfassen. Zum Beispiel kann man diese For Schleife&lt;/p&gt;  &lt;div&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; total = 0;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 10; i++)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     total += 1;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;folgendermaßen mittels der Klasse &lt;em&gt;Parallel&lt;/em&gt; auf mehrere Prozessorkerne verteilen:&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; Parallel.For&amp;lt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;(0, 10, () =&amp;gt; 0, (i, pls, subtotal) =&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;         subtotal += 1;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; subtotal;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     },&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     (x) =&amp;gt; { Interlocked.Add(&lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; total, x); });&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;(Hinweis: Das ist nur ein Beispiel und ist den Aufwand nicht wert parallel verarbeitet zu werden!)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nun ist der parallelisierte Code nicht so leicht lesbar. Was für hitzige Diskussionen sorgte. Ich habe auch ein wenig provoziert und auch darauf hingewiesen das der Code nicht unbedingt gleich zu verstehen ist. Was passiert da eigentlich?&lt;/p&gt;

&lt;p&gt;Die &lt;em&gt;Parallel.For&amp;lt;T&amp;gt;&lt;/em&gt; Methode so wie ich sie oben benutze bekommt 3 Lambda Ausdrücke mit. Einmal die Initialisierung des einzelnen Threads mittels der Funktion &lt;em&gt;() =&amp;gt; 0&lt;/em&gt;. Diese Lambda Schreibweise ist die Abkürzung für &lt;em&gt;Action&lt;/em&gt; ohne Parameter. Der zweite Lambda Ausdruck hat gleich 3 Parameter, einmal die Laufvariable &lt;em&gt;&lt;strong&gt;i&lt;/strong&gt;&lt;/em&gt;, dann eine Variable mit dem Namen &lt;em&gt;&lt;strong&gt;pls &lt;/strong&gt;&lt;/em&gt;und schliesslich die letzte Variable &lt;em&gt;&lt;strong&gt;subtotal&lt;/strong&gt;&lt;/em&gt;. Interessant ist, das man nicht anhand des Codes erkennen kann was diese einzelnen Variablen darstellen. Vielmehr muss man mittels Intellisense oder Dokumentation nachschauen um welche Typen es sich hier genau handelt. &lt;em&gt;&lt;strong&gt;i&lt;/strong&gt;&lt;/em&gt; ist ein &lt;em&gt;int&lt;/em&gt;, &lt;em&gt;&lt;strong&gt;pls&lt;/strong&gt;&lt;/em&gt; ist &lt;em&gt;ParallelLoopState&lt;/em&gt; und &lt;em&gt;&lt;strong&gt;subtotal&lt;/strong&gt;&lt;/em&gt; wieder ein &lt;em&gt;int &lt;/em&gt;und ein Rückgabewert! Letztlich mapped diese Lambda auf die Deklaration &lt;em&gt;Func&amp;lt;int,ParallelLoopState,out int&amp;gt;&lt;/em&gt;. Ist schon gewöhnungsbedürftig. Die dritte Lambda ist schliesslich für die Reduktion zuständig, das Zusammenführen der einzelnen Ausführungspfade zur Gesamtvariable &lt;strong&gt;&lt;em&gt;total&lt;/em&gt;&lt;/strong&gt;. Die Variable &lt;em&gt;&lt;strong&gt;x&lt;/strong&gt;&lt;/em&gt; an dieser Stelle ist der Rückgabewert der zweiten Lamdba &lt;em&gt;&lt;strong&gt;subtotal&lt;/strong&gt;&lt;/em&gt;. Eigentlich recht einfach wenn man weiss wie &lt;em&gt;Paralle.For&amp;lt;T&amp;gt;&lt;/em&gt; implementiert ist. &lt;/p&gt;

&lt;p&gt;Genau hier liegt das Problem. So mächtig Lambda Ausdrücke auch sein mögen, Sie bergen auch viele Risiken. Wenn Klassen Funktionen implementieren die vor lauter &lt;em&gt;Action &lt;/em&gt;und &lt;em&gt;Func &lt;/em&gt;Parameter nur so strotzen, so darf man sicher sein dass Lambdas an dieser Stelle eingesetzt werden. Das wiederrum macht den Code nicht gleich intuitiv lesbar. Beschäftigt man sich gerade mit der API so ist es ein leichtes zu verstehen was die Implementierung bedeutet. Aber wie sieht es aus wenn man sich eine Weile nicht mit dieser API beschäftigt und dann nach 2-3 Monaten mal wieder drauf schaut? Ich wette man muss dann kurz inne halten und sich vielleicht sogar die Dokumentation nochmals lesen. &lt;/p&gt;

&lt;p&gt;Insofern ist der Einwand der zwei Teilnehmer heute irgendwie schon berechtigt, auf der anderen Seite ist eine anderen Lösung womöglich gar nicht so trivial. Natürlich könnte man das ganze auch in einem Fluent Interface Ansatz als API zur Verfügung stellen, vielleicht so,&lt;/p&gt;

&lt;div&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; FluentParallel.For&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt;     .From(0)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     .To(10)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     .ExecuteLoopBody(&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         (subtotal) =&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt;             subtotal += 1; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; subtotal;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   8:&lt;/span&gt;         })&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;   9:&lt;/span&gt;     .Reduce(&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  10:&lt;/span&gt;         (subtotal) =&amp;gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  11:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  12:&lt;/span&gt;             Interlocked.Add(&lt;span style="color: #0000ff"&gt;ref&lt;/span&gt; total, subtotal);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  13:&lt;/span&gt;         })&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060"&gt;  14:&lt;/span&gt;     .Wait();&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;doch wirklich etwas gewonnen hat man hier nicht unbedingt. Die API könnte ein paar allgemeine Annahmen einfach implementieren, trotzdem wird beim Einsatz der Lambdas die Problematik mit den Übergabeparametern nicht gelöst. Man erkennt den Typen nach wie vor nicht und bei komplexeren Loop Bodies wäre damit auch dieser Ansatz nicht unbedingt lesbarer. &lt;/p&gt;

&lt;p&gt;Lambdas bergen Risiken was die Lesbarkeit des Codes angeht und damit Hand in Hand auch dessen Wartbarkeit. Wie seht Ihr den Einsatz von Lambdas?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9759238" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding/default.aspx">Coding</category></item><item><title>Bing that head that doesn’t bing</title><link>http://blogs.msdn.com/dparys/archive/2009/06/15/bing-that-head-that-doesn-t-bing.aspx</link><pubDate>Mon, 15 Jun 2009 13:51:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9753239</guid><dc:creator>dparys</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9753239.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9753239</wfw:commentRss><description>&lt;p&gt;Tausende von Blog &lt;a href="http://blogs.msdn.com/officeoffline/archive/2009/06/11/bing-decisions-engines.aspx"&gt;Posts&lt;/a&gt; darüber, verschiedene Vermutungen über &lt;a href="http://blogs.msdn.com/stevecla01/archive/2009/06/15/hooking-on-bing.aspx"&gt;Namen&lt;/a&gt; und Bedeutungen, &lt;a href="http://tomicic.de/2009/06/04/HeuteSchonGebingt.aspx"&gt;Erfahrungsberichte&lt;/a&gt;, usw…&lt;/p&gt;  &lt;p&gt;Für mich mittlerweile annehmbare Ergebnisse.&lt;/p&gt;  &lt;p&gt;Insofern:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.bing.com"&gt;Bing&lt;/a&gt; that head that doesn’t &lt;a href="http://www.bing.com"&gt;bing&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9753239" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Mein+Senf/default.aspx">Mein Senf</category></item><item><title>Xtopia [kompakt] 09 – Videos und Vorträge als Download verfügbar</title><link>http://blogs.msdn.com/dparys/archive/2009/06/15/xtopia-kompakt-09-videos-und-vortr-ge-als-download-verf-gbar.aspx</link><pubDate>Mon, 15 Jun 2009 09:02:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9752474</guid><dc:creator>dparys</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9752474.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9752474</wfw:commentRss><description>&lt;p&gt;Dieser Post ist &lt;a href="http://blogs.msdn.com/steffenr/"&gt;Steffen Ritter&lt;/a&gt; gewidmet!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx"&gt;Die erste &lt;b&gt;Xtopia [kompakt]&lt;/b&gt;-Roadshow rund um die Themen &lt;b&gt;Web/UX und Rich Internet Applications&lt;/b&gt; war ein voller Erfolg&lt;/a&gt;. Von April bis Mai 2009 war Microsoft mit hochkarätigen Partnern auf der Xtopia im Kleinformat unterwegs: In München, Karlsruhe, Hamburg, Köln, Berlin und Frankfurt erlebten jeweils bis zu 100 Teilnehmer Vorträge und Demos zu den Themen Web, User Experience und Silverlight/Rich Internet Applications. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Xtopiakompakt09VideosundVortrgealsDownlo_9B4B/shot1_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="shot1" border="0" alt="shot1" src="http://blogs.msdn.com/blogfiles/dparys/WindowsLiveWriter/Xtopiakompakt09VideosundVortrgealsDownlo_9B4B/shot1_thumb.jpg" width="298" height="109" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Wenn Sie in diesem Jahr keine Zeit hatten, bei Xtopia [kompakt] dabei zu sein, finden Sie auf der Website der Xtopia [kompakt] ab sofort (fast) &lt;b&gt;alle Vorträge als PDF, viele Videos und umfangreiche Informationen &lt;/b&gt;rund um die Inhalte der vergangenen Roadshow. Im Mittelpunkt stehen &lt;b&gt;Microsoft Surface, Windows 7, Silverlight 3&lt;/b&gt; und &lt;b&gt;Internet Explorer 8&lt;/b&gt;. Partner wie PC-Ware und das deutsche RIA-Forum begleiteten uns auf der Roadshow. &lt;b&gt;Agenturen aus der Design- und Webbranche ergänzten die Vorträge mit Erfahrungsberichten&lt;/b&gt; zu Design, User Experience, Rich Internet Applications und Webentwickung. Beispielsweise zeigte CRM-Spezialist CAS in einem Vortrag die &lt;b&gt;Vorteile von Silverlight gegenüber AJAX und Flash&lt;/b&gt; bei der Entwicklung professioneller Unternehmensanwendungen auf. Weitere Erfahrungsberichte kamen von &lt;b&gt;Quark, Ergosign, maximago, Pixelpark AG, T-Systems MMS, UID, Perun.net&lt;/b&gt; und &lt;b&gt;Sensory Minds&lt;/b&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx"&gt;Hier entlang zu den gesammelten Präsentationen der XTOPIA&lt;/a&gt; [kompakt] 09&amp;#160; und den Session-Videos: &lt;a href="http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx"&gt;http://blogs.msdn.com/riablog/archive/2009/06/09/xtopia-kompakt-09-videos-und-vortr-ge-jetzt-als-download-verf-gbar.aspx&lt;/a&gt; bzw.&amp;#160; &lt;a href="http://snipurl.com/jtiex"&gt;http://snipurl.com/jtiex&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9752474" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/Conference/default.aspx">Conference</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Events/default.aspx">Events</category></item><item><title>Projekt Blog Poll – Entity Framework Revisited und die Folgen bisher</title><link>http://blogs.msdn.com/dparys/archive/2009/06/15/projekt-blog-poll-entity-framework-revisited-und-die-folgen-bisher.aspx</link><pubDate>Mon, 15 Jun 2009 08:23:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9752395</guid><dc:creator>dparys</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9752395.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9752395</wfw:commentRss><description>&lt;p&gt;Das Projekt Blog Poll ist nun wieder beim Entity Framework angekommen. Dieses mal werden die Entitäten auf die eigenen Objekte gemapped. Jetzt werden sich vermutlich einige Leute fragen, warum mappe ich auf eigene Objekte? Dann lässt sich doch das ADO.NET Data Services Framework nicht so einfach nutzen. Bei einem eigenen Objekt Modell muss man zusätzliche Schnittstellen implementieren! Stimmt. Aber ich werde im folgenden Projekt die ADO.NET Data Services auch nicht final benutzen. Ich habe in meinem Test Prototypen ein Problem festgestellt das ich noch nicht so hundertprozentig eingrenzen konnte. Das Problem ist beim Hosten von Silverlight Anwendungen über Cross-Domain Grenzen mit dem Zugriff auf die ADO.NET Data Services. Der Datenzugriff funktioniert in dem Szenario nicht so wie er soll. Insofern werde ich das Repository durch eine WCF Service Schicht kapseln, diese hat kein Probleme mit der Cross-Domain Verteilung der Anwendung. &lt;/p&gt;  &lt;p&gt;Für alle die, die noch nicht so richtig ins Projekt reingeschaut haben, gibt es hier nochmal die komplette Serie verlinkt.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/05/14/projekt-blog-poll-anforderungen.aspx"&gt;Projekt Blog Poll – Anforderungen (Teil 1)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/05/15/projekt-blog-poll-technisches-design.aspx"&gt;Projekt Blog Poll – Technisches Design (Teil 2)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/05/20/projekt-blog-poll-datenbankschema.aspx"&gt;Projekt Blog Poll – Datenbankschema (Teil 3)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/05/25/projekt-blog-poll-entity-framework-repository.aspx"&gt;Projekt Blog Poll – Entity Framework Repository (Teil 4)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/05/27/projekt-blog-poll-domain-model.aspx"&gt;Projekt Blog Poll – Domain Model (Teil 5)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/06/08/mein-blog-und-das-projekt-blog-poll-und-widescreen.aspx"&gt;Projekt Blog Poll – Specification (Teil 6)&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://blogs.msdn.com/dparys/archive/2009/06/15/projekt-blog-poll-mock-repository.aspx"&gt;Projekt Blog Poll – Mock Repository (Teil 7)&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So, viel Spaß beim 8. Teil.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_09.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/4/4/1/6/6/4/pbpteil8_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/4/4/1/6/6/4/pbpteil8_large_ch9.png, postid=466144" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;Update: Jetzt müsste das Video auch in besserer Qualität zu sehen sein.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9752395" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding4Fun/default.aspx">Coding4Fun</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding/default.aspx">Coding</category></item><item><title>Projekt Blog Poll – Mock Repository</title><link>http://blogs.msdn.com/dparys/archive/2009/06/15/projekt-blog-poll-mock-repository.aspx</link><pubDate>Mon, 15 Jun 2009 08:10:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9752369</guid><dc:creator>dparys</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9752369.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9752369</wfw:commentRss><description>&lt;p&gt;Damit die Tests zusammen mit dem Domänen Modell wieder kompilieren, schreibe ich in dieser Folge ein Mock Repository.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_06_09.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/3/4/1/6/6/4/pbpteil7_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/3/4/1/6/6/4/pbpteil7_large_ch9.png, postid=466143" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9752369" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding4Fun/default.aspx">Coding4Fun</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Coding/default.aspx">Coding</category></item><item><title>Mein Blog und das Projekt Blog Poll und Widescreen</title><link>http://blogs.msdn.com/dparys/archive/2009/06/08/mein-blog-und-das-projekt-blog-poll-und-widescreen.aspx</link><pubDate>Mon, 08 Jun 2009 07:38:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9707650</guid><dc:creator>dparys</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/dparys/comments/9707650.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dparys/commentrss.aspx?PostID=9707650</wfw:commentRss><description>&lt;p&gt;Es ist immer gut einen Plan zu haben, doch wie das Leben so spielt, ist deren Ausführung an verschiedene Rahmenbedingungen geknüpft. Manchmal erschweren diese einem Pläne umzusetzen. Insofern ist es auch in den letzten Wochen eine wenig ruhiger auf meinem Blog gewesen. Speziell zum Projekt Blog Poll wollte ich eigentlich noch erklärendere Posts schreiben was mir bisher leider nicht möglich war. Trotzdem möchte ich den nächsten Teil einfach mal publizieren. &lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="240"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_04_23.xap" /&gt; &lt;param name="initParams" value="m=http://mschnlnine.vo.llnwd.net/d1/ch9/2/4/1/6/6/4/pbpteil6_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/2/4/1/6/6/4/pbpteil6_large_ch9.png, postid=466142" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt;  &lt;p&gt;Ist eigentlich schon jemandem aufgefallen das die Screencasts in 16:10 aufgenommen sind? Ich habe nämlich diesbezüglich noch gar kein Feedback bekommen ob das vom Format her in Ordnung ist. Ich selbst habe den Eindruck das viele Leute über Widescreen Monitore verfügen, insofern dachte ich mir es wäre vielleicht sinnvoll alles auf Widescreen aufzunehmen.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9707650" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dparys/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/dparys/archive/tags/Architecture/default.aspx">Architecture</category></item></channel></rss>