<?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>Henrik W H</title><link>http://blogs.msdn.com/b/henrikwh/</link><description /><dc:language>da</dc:language><generator>Telligent Community 5.6.583.19431 (Build: 5.6.583.19431)</generator><item><title>Kinect SDK og Reactive Extensions</title><link>http://blogs.msdn.com/b/henrikwh/archive/2011/11/07/reactive-extensions-og-kinect-sdk.aspx</link><pubDate>Mon, 07 Nov 2011 12:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10234542</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10234542</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2011/11/07/reactive-extensions-og-kinect-sdk.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Det er f&amp;oslash;rste gang at n&amp;oslash;rderne p&amp;aring; arbejdet har sprunget rundt i kontorlandskabet n&amp;aring;r de debugger, og s&amp;aelig;lgerne springer for livet n&amp;aring;r algoritmerne hit, slide og high-kick testes &lt;img alt="" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-61-15-metablogapi/8463.wlEmoticon_2D00_winkingsmile_5F00_68406B09.png" /&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Det har v&amp;aelig;ret en sjov udfordring. Med &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/" target="_blank"&gt;Kinect SDK'et&lt;/a&gt; kan du efterh&amp;aring;nden det meste fra C#. Jeg har taget udgangspunkt i &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx" target="_blank"&gt;Skeletal Viewer Walkthrough&lt;/a&gt; demoen og bygget videre p&amp;aring; det. Det sjove ved den demo er, at man hurtigt kan begynde at arbejde med de data som repr&amp;aelig;senterer skelettet af den eller de personer, som st&amp;aring;r foran Kinect'en (det der kr&amp;aelig;ver mest er den visuelle repr&amp;aelig;sentation). Data er groft sagt en liste af koordinater (x,y,z) hvor hvert koordinat h&amp;oslash;rer til et givent led i kroppen. Lidt afh&amp;aelig;ngig af PC'en, s&amp;aring; modtager jeg 30 frames (s&amp;aelig;t data) i sekundet. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;St&amp;oslash;rste udfordring har v&amp;aelig;ret: &lt;em&gt;hvordan behandler man mest effektivt alle de data man modtager fra Kinect'en.&lt;/em&gt; &lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: #2b91af; font-size: 10pt;"&gt;Runtime&lt;span style="color: black;"&gt; nui = &lt;span style="color: blue;"&gt;new&lt;span style="color: black;"&gt; &lt;span style="color: #2b91af;"&gt;Runtime&lt;span style="color: black;"&gt;(); &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;nui.SkeletonFrameReady += &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;new&lt;span style="color: black;"&gt; &lt;span style="color: #2b91af;"&gt;EventHandler&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonFrameReadyEventArgs&lt;span style="color: black;"&gt;&amp;gt;(nui_SkeletonFrameReady); &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt; &lt;br /&gt;Ovenst&amp;aring;ende er fint, hvis man bare skal kigge p&amp;aring; en frame af gangen. Der kommer en kontinuerlig str&amp;oslash;m af SkeletonFrameReady events, hvor man i eventargs har data om det eller de skeletter der er i sysfeltet. &lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Udfordringen kommer, n&amp;aring;r man gerne vil kigge p&amp;aring; en sekvens af frames/eventargs og m&amp;aring;ske endda have et sliding window, for at kigge p&amp;aring; sidste sekunds frames. Behovet opst&amp;aring;r, n&amp;aring;r man gerne vil kigge efter bev&amp;aelig;gelser (gestures og positurer).&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/data/gg577609" target="_blank"&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Reactive Extensions&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt; (Rx) har jeg i denne forbindelse stirret mig fuldst&amp;aelig;ndig blind p&amp;aring;. For en god gennemgang af Rx, s&amp;aring; kan jeg anbefale klart &lt;a href="http://channel9.msdn.com/Series/Rx-Workshop" target="_blank"&gt;Rx Workshoppen p&amp;aring; Channel9&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Men kort sagt, s&amp;aring; kan man betragte Rx som en omvendt Enumerable, en Observable. En Enumerable skal du foreach'e over, for at f&amp;aring; (pull) data. Med en Observable f&amp;aring;r du skubbet (push) data ud. Lidt en omvendt tankegang. Desuden er Rx, modsat events, en &lt;a href="http://en.wikipedia.org/wiki/First-class_object" target="_blank"&gt;first-class citizen&lt;/a&gt; i .NET! &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: blue; font-size: 10pt;"&gt;var&lt;span style="color: black;"&gt; o = &lt;span style="color: #2b91af;"&gt;Observable&lt;span style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;.FromEventPattern&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonFrameReadyEventArgs&lt;span style="color: black;"&gt;&amp;gt;(nui, &lt;span style="color: #a31515;"&gt;"SkeletonFrameReady"&lt;span style="color: black;"&gt;) &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;.Buffer(&lt;span style="color: #2b91af;"&gt;TimeSpan&lt;span style="color: black;"&gt;.FromSeconds(1)); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&lt;span style="color: #2b91af;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;o.Subscribe(&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;a =&amp;gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;{&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;this&lt;span style="color: black;"&gt;.Title = &lt;span style="color: #2b91af;"&gt;String&lt;span style="color: black;"&gt;.Format(&lt;span style="color: #a31515;"&gt;"FPS: {0}"&lt;span style="color: black;"&gt;, a.Count());&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;}); &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Ovenst&amp;aring;ende abonnerer p&amp;aring; SkeletonFrameReady eventet &amp;ndash; man laver eventet til en observable. Med .Buffer() f&amp;aring;r jeg samlet events op i 1 sekund. Med Subscribe begynder jeg at observere og lambda'en bliver eksekveret n&amp;aring;r jeg har 1 sekunds data. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;I nedenst&amp;aring;ende bruger jeg sammen m&amp;oslash;nster, for at subscribe p&amp;aring; "nye skeletter" (groupby TrackingID). &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Resultatet er, at jeg f&amp;aring;r en ny observable p&amp;aring; et skelet, hver gang der kommer et nyt i synsfeltet. &lt;/span&gt;&lt;span style="font-family: verdana; color: white; font-size: 10pt;"&gt;&lt;strong&gt;Code Snippet &lt;br /&gt; &lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: #2b91af; font-size: 10pt;"&gt;IObservable&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;EventPattern&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonFrameReadyEventArgs&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; o = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Observable&lt;span style="color: black;"&gt;.FromEventPattern&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonFrameReadyEventArgs&lt;span style="color: black;"&gt;&amp;gt;(nui, &lt;span style="color: #a31515;"&gt;"SkeletonFrameReady"&lt;span style="color: black;"&gt;); &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: #2b91af; font-size: 10pt;"&gt; &lt;br /&gt;IObservable&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonData&lt;span style="color: black;"&gt;&amp;gt; q =&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; o.SelectMany(s =&amp;gt; s.EventArgs.SkeletonFrame.Skeletons) &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(w =&amp;gt; w.TrackingState == &lt;span style="color: #2b91af;"&gt;SkeletonTrackingState&lt;span style="color: black;"&gt;.Tracked); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="font-family: courier new; color: #2b91af; font-size: 10pt;"&gt; &lt;br /&gt;IObservable&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;IGroupedObservable&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;span style="color: black;"&gt;, &lt;span style="color: #2b91af;"&gt;SkeletonData&lt;span style="color: black;"&gt;&amp;gt;&amp;gt; qg =&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; q.GroupBy(g =&amp;gt; g.TrackingID); &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;qg.Select(s =&amp;gt; s.AsObservable()).Subscribe(&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; userObserver =&amp;gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObserveUser(userObserver);&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Vi kan arbejde lidt videre med det, for at begynde at analysere p&amp;aring; data og finde simple gestures. ObserveUser kaldes med en Observable. &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;S&amp;aring; hvis jeg vil tracke h&amp;oslash;jre h&amp;aring;nd, kigge p&amp;aring; data fra de sidste 250 milisekunder, slide vinduet 100 milisekunder s&amp;aring; kan det skrives med nedenst&amp;aring;ende. Der bliver push'et data ud til min subscribe lambda, hvis predikaterne (where) er true. &lt;/span&gt;&lt;span style="font-family: verdana; color: white; font-size: 10pt;"&gt;&lt;strong&gt;Code Snippet &lt;br /&gt; &lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: blue; font-size: 10pt;"&gt;public&lt;span style="color: black;"&gt; &lt;span style="color: #2b91af;"&gt;IDisposable&lt;span style="color: black;"&gt; ObserveUser(&lt;span style="color: #2b91af;"&gt;IObservable&lt;span style="color: black;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SkeletonData&lt;span style="color: black;"&gt;&amp;gt; user) &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;{&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;span style="color: black;"&gt; o = user&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(j =&amp;gt; &lt;span style="color: blue;"&gt;new&lt;span style="color: black;"&gt; { J = j.Joints[&lt;span style="color: #2b91af;"&gt;JointID&lt;span style="color: black;"&gt;.HandRight], ID = j.TrackingID })&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(s =&amp;gt; s.J.TrackingState == &lt;span style="color: #2b91af;"&gt;JointTrackingState&lt;span style="color: black;"&gt;.Tracked)&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Buffer(&lt;span style="color: #2b91af;"&gt;TimeSpan&lt;span style="color: black;"&gt;.FromMilliseconds(250), &lt;span style="color: #2b91af;"&gt;TimeSpan&lt;span style="color: black;"&gt;.FromMilliseconds(100)); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;span style="color: black;"&gt; dis = o&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(w =&amp;gt; w.Count() &amp;gt; 3) &lt;span style="color: green;"&gt;//require at least 3 in sample&lt;span style="color: black;"&gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Subscribe(&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; u =&amp;gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//Logic that analyses (hold, move, slide, kick etc)&lt;span style="color: black;"&gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; color: black; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;Nu er det s&amp;aring; man skal tilbage og hive matematikb&amp;oslash;gerne frem. Der g&amp;aring;r lynhurtigt en masse algoritmik i det;-) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;&lt;/span&gt;&lt;span style="font-family: times new roman; font-size: 12pt;"&gt;God forn&amp;oslash;jelse! &lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10234542" width="1" height="1"&gt;</description></item><item><title>Sådan virker Azure. Deep dive.</title><link>http://blogs.msdn.com/b/henrikwh/archive/2011/09/20/s-229-dan-virker-azure-deep-dive.aspx</link><pubDate>Tue, 20 Sep 2011 14:25:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10214085</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10214085</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2011/09/20/s-229-dan-virker-azure-deep-dive.aspx#comments</comments><description>&lt;p&gt;I dette webcast fra Build fortæller Mark Russinovich hvad der foregår i maskinrummet. Du får et deep dive i hvordan Windows Azure virker.   &lt;br /&gt;Mark kommer igennem detaljerne omkring fabric controller, clustering, provisionering, hard og soft constraints og meget mere. Videoen kan &lt;a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-853T"&gt;downloades her&lt;/a&gt;. &lt;/p&gt; &lt;iframe style="width: 960px; height: 544px" src="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-853T/player?w=960&amp;amp;h=544" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10214085" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item><item><title>Introduktion til Windows Azure: cloud operativsystemet</title><link>http://blogs.msdn.com/b/henrikwh/archive/2011/09/16/introduktion-til-windows-azure-cloud-operativsystemet.aspx</link><pubDate>Thu, 15 Sep 2011 23:45:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10212102</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10212102</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2011/09/16/introduktion-til-windows-azure-cloud-operativsystemet.aspx#comments</comments><description>&lt;p&gt;Mark Russinovich gennemgår Windows Azure i denne session fra Build. Det er en rigtig god introduktion. Du kan downloade videoen &lt;a href="http://video.ch9.ms/build/2011/wmv-hq/852-HD.wmv" target="_blank"&gt;her&lt;/a&gt;.&lt;/p&gt; &lt;iframe style="width: 960px; height: 544px" src="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-852F/player?w=960&amp;amp;h=544" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10212102" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item><item><title>SQL Azure Federations, et kig på hvad der kommer</title><link>http://blogs.msdn.com/b/henrikwh/archive/2011/05/17/sql-azure-federations-et-kig-p-229-hvad-der-kommer.aspx</link><pubDate>Tue, 17 May 2011 15:12:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10165400</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10165400</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2011/05/17/sql-azure-federations-et-kig-p-229-hvad-der-kommer.aspx#comments</comments><description>&lt;p&gt;Hidtil har man brugt &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/sharding-with-sql-azure.aspx" target="_blank"&gt;Sharding&lt;/a&gt; på SQL Azure for at partitionere data ud i forskellige databaser. Det tjerner primært to formål:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Skalerbarhed. Rent fysisk er der grænser for hvor meget IO man kan få gennem til en databaser. Derfor partitionering af database. På Azure har man typisk gjort det med et sharding-lag, man selv har skrevet.&lt;/li&gt;    &lt;li&gt;Seperation af data. I en multi-tenant løsningen, kan det være en fordel at kunne tilbyde en database til hver tenant.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Men SQL Azure Federations får du mulighed for at partitionere dine data i forskellige databaser. På PDC10 var der faktisk en session der temmelig godt beskrev hvad der kommer med SQL Azure Federations. Men sessionen gemte sig bag den titlen “Building Scale-Out Database Solutions on SQL Azure”.&lt;/p&gt;  &lt;p&gt;Sessionen kan ses online eller downloades &lt;a href="http://channel9.msdn.com/Events/PDC/PDC10/CS02" target="_blank"&gt;her&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 960px; height: 540px" src="http://channel9.msdn.com/Events/PDC/PDC10/CS02/player?w=960&amp;amp;h=540" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Der er en række andre interessante artikler som beskriver hvad der kommer:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/b/cbiyikoglu/archive/2010/10/30/building-scalable-database-solution-in-sql-azure-introducing-federation-in-sql-azure.aspx" target="_blank"&gt;Intro to SQL Azure Federations: SQL Azure Federations Overview&lt;/a&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/b/cbiyikoglu/archive/2010/11/22/sql-azure-federations-sampling-of-scenarios-where-federations-will-help.aspx" target="_blank"&gt;Perfect scenarios and typical applications that highlight the power of SQL Azure Federations technology&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/b/cbiyikoglu/archive/2010/12/11/how-to-scale-out-an-app-with-sql-azure-federations-the-quintessential-sales-db-with-customer-and-orders.aspx" target="_blank"&gt;How to scale out an app with SQL Azure Federations – quick walk through of building and app with SQL Azure Federations.&lt;/a&gt;&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/b/cbiyikoglu/archive/2011/01/18/sql-azure-federations-robust-connectivity-model-for-federated-data.aspx" target="_blank"&gt;Robust Connectivity model for SQL Azure Federations&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://blogs.msdn.com/b/cbiyikoglu/archive/2011/03/23/moving-to-multi-tenant-model-made-easy-with-sql-azure-federations.aspx" target="_blank"&gt;Moving to Multi-Tenant Database Model Made Easy with SQL Azure Federations&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;En af de interessante aspekter bliver naturligvis hvilken indflydelse det vil få på applikationer der ønsker at gøre brug af Federations. Der skrives lidt om det &lt;a href="http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/fa2532d7-dbfe-4d18-b5b3-361cfcd610f2" target="_blank"&gt;her&lt;/a&gt;. Det betyder at Federations ikke bliver helt transperant, men at man vil skulle angive hvilken federation man vil hente data fra. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10165400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Cloud/">Cloud</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item><item><title>Identity og single sign-on med Access Control Service</title><link>http://blogs.msdn.com/b/henrikwh/archive/2011/05/09/identity-og-single-sign-on-med-access-control-service.aspx</link><pubDate>Mon, 09 May 2011 08:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10162368</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10162368</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2011/05/09/identity-og-single-sign-on-med-access-control-service.aspx#comments</comments><description>&lt;p&gt;Access control servicen V2 har f&amp;aring;et en ordenligt overhaling. ACS sidder som et mellemlag/abstraktion mellem din applikation og andre identitetsudbydere som feks OpenID, LiveID, ADFS2, Facebook. &lt;/p&gt;
&lt;p&gt;For at komme hurtig (og smertefrit) igennem videoen s&amp;aring; har jeg et par bookmarks der er v&amp;aelig;rd at spole frem til&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20:00&lt;/strong&gt; Pr&amp;aelig;sentation af hvordan ACS virker. Det gennemg&amp;aring;s ret godt med et &amp;ldquo;sekvensdiagram&amp;rdquo;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;33:30&lt;/strong&gt; En demo, hvor ACS s&amp;aelig;ttes op og WIF konfigureres til en ASP.NET MVC applikation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;43:00 &lt;/strong&gt;Her vises hvordan man bruger ACS fra Silverlight (Windows Phone 7). &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;49:00 &lt;/strong&gt;Her er en ret god gennemgang af, hvordan du kan f&amp;aring; ACS til at udstede claims baseret p&amp;aring; regler. &lt;/p&gt;
&lt;p&gt;&lt;iframe scrolling="no" frameborder="0" src="http://channel9.msdn.com/Events/MIX/MIX11/SVC03/player?w=960&amp;amp;h=544" style="width: 960px; height: 544px;"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;Du kan downloade videoen &lt;a target="_blank" href="http://channel9.msdn.com/Events/MIX/MIX11/SVC03" title="her"&gt;her&lt;/a&gt;. &lt;/p&gt;
&lt;div class="wlWriterHeaderFooter" style="margin: 0px; padding: 0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;
&lt;script type="text/javascript"&gt;// &lt;![CDATA[
tweetmeme_source = 'henrikwh';
// ]]&gt;&lt;/script&gt;
&lt;script src="http://tweetmeme.com/i/scripts/button.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10162368" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Cloud/">Cloud</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item><item><title>Anbefalinger fra PDC2010</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/11/29/anbefalinger-fra-pdc2010.aspx</link><pubDate>Mon, 29 Nov 2010 09:54:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10097657</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10097657</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/11/29/anbefalinger-fra-pdc2010.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://microsoftpdc.com"&gt;&lt;strong&gt;http://microsoftpdc.com&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; – &lt;/strong&gt;har du været der? Jeg har blandt andet set følgende sessions, som bestemt er værd at se:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://bit.ly/bBGOfV"&gt;The Future of C# and Visual Basic&lt;/a&gt;&lt;/strong&gt;&amp;#160; &lt;br /&gt;Næste generation af C# og Visual Basic har fokus på at gøre asynkron programmering nemmere og mere effektiv. Der introduceres nogle nye keywords, async og await. Meget af det bygger videre på task parallel library, som kom med .NET 4.0. Du kan selv prøvekøre dette ved at downloade &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=18712f38-fcd2-4e9f-9028-8373dc5732b2&amp;amp;displaylang=en"&gt;Visual Studio Async CTP&lt;/a&gt;. Sidst i sessionen får vi en statusupdate på &amp;quot;compiler as a service&amp;quot;.    &lt;br /&gt;Når nu har har set Anders, så tag også lige at se “&lt;a href="http://player.microsoftpdc.com/Session/bfa72307-6534-41ad-bcf7-0f4fb9280515"&gt;LINQ, Take Two – Realizing the LINQ to Everything Dream&lt;/a&gt;”.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://bit.ly/cMvw2O"&gt;Sharepoint in the Cloud: Developing Solutions for Sharepoint Online&lt;/a&gt; &lt;/strong&gt;    &lt;br /&gt;Endelig er der mere information ude omkring udviklingshistorien for Sharepoint 2010 i skyen. Chris Mayo kommer rundt om udvikling, deployment og administration af tilpassede løsninger på Sharepoint. Sandboxed solutins - det er svaret. Der er ud over gode demoer også mange &lt;a href="http://az8714.vo.msecnd.net/presentations/CS65-Mayo.pptx"&gt;slides&lt;/a&gt;, som giver et godt overblik.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://bit.ly/977D0A"&gt;Inside Windows Azure&lt;/a&gt; &lt;/strong&gt;    &lt;br /&gt;Dette er en rigtig god gennemgang af Windows Azure. Du kommer igennem alle forkortelserne (TBF'er og FBF'er) og får et rigtig godt indblik i hvordan Fabric controlleren virker. Selv om du har arbejdet med Azure, så syntes jeg faktisk også denne er god, fordi man kommer lidt &amp;quot;behind the scenes&amp;quot;. &lt;/p&gt;  &lt;p&gt;Har du nogle anbefalinger? tweet me: @henrikwh &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10097657" width="1" height="1"&gt;</description></item><item><title>Dynaway viser lagerstyringsprodukt vha Lego Mindstorms</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/07/19/dynaway-viser-lagerstyringsprodukt-vha-lego-mindstorms.aspx</link><pubDate>Mon, 19 Jul 2010 08:50:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10039727</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10039727</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/07/19/dynaway-viser-lagerstyringsprodukt-vha-lego-mindstorms.aspx#comments</comments><description>&lt;p&gt;På &lt;a href="http://www.digitalwpc.com/"&gt;Worldwide partner conference&lt;/a&gt; var der flere danske virksomheder som udstillede. Den mest opsigtsvækkende var klart den fra &lt;a href="http://www.dynaway.dk"&gt;Dynaway&lt;/a&gt;. Kort sagt, så laver Dynaway bl.a. &lt;a href="http://en.wikipedia.org/wiki/Warehouse_management_system"&gt;lagerstyring&lt;/a&gt; på toppen af AX. For at visualiserer hvordan deres system virker har Dynaway, i samarbejde med AAU, bygget en lager-robot i Lego Mindstorms. Jeg syntes det er en god måde at illustrerer hvordan systemet virker. Der er for 18.000 kr klodser i modellen, hvilket ikke helt fremgår af videoen, men jeg vil skyde på at modellen er 1,2m*1,2m. &lt;/p&gt; &lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/m8BkGegD29Q&amp;amp;hl=da_DK&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/m8BkGegD29Q&amp;amp;hl=da_DK&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;Hvis der var flere timer i døgnet, så brugte jeg dem på Lego Mindstorms! Nøj, det må have været sjovt.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10039727" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Partner/">Partner</category></item><item><title>Forretningsmæssige udfordringer i skyen</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/07/16/forretningsm-230-ssige-udfordringer-i-skyen.aspx</link><pubDate>Thu, 15 Jul 2010 23:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10038882</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10038882</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/07/16/forretningsm-230-ssige-udfordringer-i-skyen.aspx#comments</comments><description>&lt;p&gt;Anders Trolle-Schultz (&lt;a href="http://www.saasit.net/"&gt;SaaS-IT&lt;/a&gt;)&amp;nbsp;og jeg snakker om de forretningsm&amp;aelig;ssige udfordringer og muligheder der ligger i cloud. Anders har v&amp;aelig;ret v&amp;aelig;rt og deltaget p&amp;aring; mange interactive sessions p&amp;aring; WPC.&lt;/p&gt;
&lt;p&gt;
&lt;object height="30" width="650" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="pcm_player_episode26407" style="height: 30px;"&gt;
&lt;param value="http://podcastmachine.com/swf/player.swf" name="movie" /&gt;
&lt;param value="true" name="allowFullScreen" /&gt;
&lt;param value="always" name="allowScriptAccess" /&gt;
&lt;param value="high" name="quality" /&gt;
&lt;param value="transparent" name="wmode" /&gt;
&lt;param value="file=http://podcastmachine.com/podcasts/5470/episodes/26407.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" name="flashvars" /&gt;
&lt;/object&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10038882" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Cloud/">Cloud</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/SaaS/">SaaS</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Forretning/">Forretning</category></item><item><title>Podcast fra WPC – Perspektiver på cloud, samt udfordringer</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/07/14/podcast-fra-wpc-perspektiver-p-229-cloud-samt-udfordringer.aspx</link><pubDate>Wed, 14 Jul 2010 20:18:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10038275</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10038275</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/07/14/podcast-fra-wpc-perspektiver-p-229-cloud-samt-udfordringer.aspx#comments</comments><description>&lt;p&gt;Cloud, cloud, cloud. Skyen fylder stadig meget i snakken. Hør hvordan nyhederne bliver modtaget, samt perspektiver på hvilke udfordringer partnere og Microsoft har. Med på podcast er Rasmus Foged (&lt;a href="http://www.exare.dk"&gt;Exare&lt;/a&gt;), Heine Krog Iversen (&lt;a href="http://www.timextender.com"&gt;timeXtender&lt;/a&gt;), Niels Flensted-Jensen (&lt;a href="http://www.safewhere.net/"&gt;Safewhere&lt;/a&gt;).&lt;/p&gt; &lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="650" height="111" id="pcm_player_episode26328"&gt; &lt;param name="movie" value="http://podcastmachine.com/swf/player.swf" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="quality" value="high" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;param name="flashvars" value="file=http://podcastmachine.com/podcasts/5470/episodes/26328.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" /&gt; &lt;embed src="http://podcastmachine.com/swf/player.swf" allowFullScreen="true" allowScriptAccess="always" quality="high" width="650" height="111" wmode="transparent" name="pcm_player_episode26328" type="application/x-shockwave-flash" flashvars="file=http://podcastmachine.com/podcasts/5470/episodes/26328.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt; &lt;/object&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10038275" width="1" height="1"&gt;</description></item><item><title>Sitecore extends to the cloud on Windows Azure</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/07/13/sitecore-extends-to-the-cloud-on-windows-azure.aspx</link><pubDate>Tue, 13 Jul 2010 20:54:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10037779</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10037779</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/07/13/sitecore-extends-to-the-cloud-on-windows-azure.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.sitecore.net"&gt;Sitecore&lt;/a&gt; has &lt;a href="http://www.sitecore.net/News/Press-releases/2010/Cloud-Computing.aspx"&gt;announced&lt;/a&gt; that they now extends into the cloud, fully embracing Azure and leveraging the power of cloud computing. I am very happy, that I caught Co Founder Lars F. Nielsen in this informal podcast, where he tells Sitecore’s innovation story, moving to the cloud.&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt; &lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="650" height="111" id="pcm_player_episode26280"&gt; &lt;param name="movie" value="http://podcastmachine.com/swf/player.swf" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="quality" value="high" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;param name="flashvars" value="file=http://podcastmachine.com/podcasts/5470/episodes/26280.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" /&gt; &lt;embed src="http://podcastmachine.com/swf/player.swf" allowFullScreen="true" allowScriptAccess="always" quality="high" width="650" height="111" wmode="transparent" name="pcm_player_episode26280" type="application/x-shockwave-flash" flashvars="file=http://podcastmachine.com/podcasts/5470/episodes/26280.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt; &lt;/object&gt;  &lt;p&gt;If you want visuals on the solution, please look at the video that I got my hands on. It will give you an idea of what Sitecore delivers. I will we worth your while to look it through. There’s no sound on the video and some of the UI is not finalized yet.&lt;/p&gt; &lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/seqszJ-_Mn0&amp;amp;hl=da_DK&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/seqszJ-_Mn0&amp;amp;hl=da_DK&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;I wish I had &lt;em&gt;that&lt;/em&gt; eye for making UI. No Silverlight, no flash. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10037779" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/ISV/">ISV</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Cloud/">Cloud</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/WPC/">WPC</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Sitecore/">Sitecore</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/SaaS/">SaaS</category></item><item><title>Dag 1: Podcast fra WPC</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/07/12/dag-1-podcast-fra-wpc.aspx</link><pubDate>Mon, 12 Jul 2010 18:34:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10037238</guid><dc:creator>henrikwh</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10037238</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/07/12/dag-1-podcast-fra-wpc.aspx#comments</comments><description>&lt;p&gt;Dette har klart været en af de bedste keynotes jeg har været til. Specielt syntes jeg at Bob Muglia’s var god. Jeg kan klart anbefale at se keynote online. Den vil snart være tilgængelig på &lt;a href="http://www.digitalwpc.com"&gt;www.digitalwpc.com&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Jeg regner med en daglig podcast fra WPC, hvor partnere giver deres meninger og perspektiver på nyhederne. &lt;/p&gt; &lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="650" height="111" id="pcm_player_episode26239"&gt; &lt;param name="movie" value="http://podcastmachine.com/swf/player.swf" /&gt; &lt;param name="allowFullScreen" value="true" /&gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="quality" value="high" /&gt; &lt;param name="wmode" value="transparent" /&gt; &lt;param name="flashvars" value="file=http://podcastmachine.com/podcasts/5470/episodes/26239.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" /&gt; &lt;embed src="http://podcastmachine.com/swf/player.swf" allowFullScreen="true" allowScriptAccess="always" quality="high" width="650" height="111" wmode="transparent" name="pcm_player_episode26239" type="application/x-shockwave-flash" flashvars="file=http://podcastmachine.com/podcasts/5470/episodes/26239.json&amp;amp;width=650&amp;amp;height=111&amp;amp;skin=http://podcastmachine.com/swf/skin_pcm1.swf&amp;amp;fullscreen=true&amp;amp;bgcolor=#000000&amp;amp;playlist=bottom&amp;amp;subscribebutton=false&amp;amp;downloadbutton=false&amp;amp;playlistcolumns=1&amp;amp;playlistrows=1&amp;amp;autostart=false&amp;amp;playlistsize=80" pluginspage="http://www.macromedia.com/go/getflashplayer" /&gt; &lt;/object&gt;  &lt;p&gt;Stay tuned. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10037238" width="1" height="1"&gt;</description></item><item><title>Fuld virtualisering på Azure klar inden nytår</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/04/26/fuld-virtualisering-p-azure-klar-inden-nyt-r.aspx</link><pubDate>Mon, 26 Apr 2010 12:45:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10002497</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10002497</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/04/26/fuld-virtualisering-p-azure-klar-inden-nyt-r.aspx#comments</comments><description>&lt;p&gt;Så er nyheden ude. Det har den faktisk været et stykke tid hvis man læser &lt;a href="http://blogs.msdn.com/usisvde/archive/2010/03/29/vm-support-in-windows-azure.aspx"&gt;blogposten&lt;/a&gt;. Jeg &lt;em&gt;har&lt;/em&gt; slået op i AD’et og min amerikanske kollega står der stadig. &lt;a href="http://blogs.msdn.com/usisvde/archive/2010/03/29/vm-support-in-windows-azure.aspx"&gt;VM support på Windows Azure&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Siden annonceringen af Azure på PDC 08, er diskussionen omkring “Cloud” ofte gået på &lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/a&gt; vs. &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing#Infrastructure"&gt;IaaS&lt;/a&gt;. Mange har gerne ville have en IaaS, altså en fuld virtualisering af et OS i skyen, fordi det er den nemmeste måde at flytte eksisterende systemer på. PaaS kræver noget mere og har andre egenskaber end en IaaS. PaaS kræver ofte at man designer systemet derefter.&lt;/p&gt;  &lt;p&gt;Jeg vil tro at der står meget mere Azure på menuen til &lt;a href="http://www.digitalwpc.com"&gt;WPC&lt;/a&gt; konferencen 11. til 15. juli. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10002497" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item><item><title>Using the Sensor API from Silverlight</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/04/22/using-the-sensor-api-from-silverlight.aspx</link><pubDate>Thu, 22 Apr 2010 09:23:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10000592</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=10000592</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/04/22/using-the-sensor-api-from-silverlight.aspx#comments</comments><description>&lt;p&gt;In this screen cast you will get a short introduction to the new sensor and location API’s in Windows 7 and how to use these API’s from Visual Studio 2010 with .NET framework 4.0 as well as from Silverlight 4 using COM interop from Silverlight’s the new out-of-browser (OOB) application model. You will also get brief information on developing a sensor for Windows 7 and a link from where you can download a &lt;a href="http://www.matchride.net/Win7Sensor.aspx"&gt;free ready-to-use sensor&lt;/a&gt; that can translate your IP address to a geographical location (latitude/longitude).&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/1/9/3/5/4/5/VS2010Win7SL4LocationAPI_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://ecn.channel9.msdn.com/o9/ch9/1/9/3/5/4/5/VS2010Win7SL4LocationAPI_512_ch9.png, postid=545391" /&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;Looking forward to play with these APIs, the sensor, and &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=beb29d27-6f0c-494f-b028-1e0e3187e830"&gt;Silverlight BingMaps SDKs&lt;/a&gt; ;-)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10000592" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Silverlight/">Silverlight</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Sensor/">Sensor</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Location/">Location</category></item><item><title>Programmatisk adgang til UI elementer på skrivebordet gennem UI Automation</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/04/14/programtisk-adgang-til-ui-elementer-p-desktoppen-gennem-ui-automation.aspx</link><pubDate>Wed, 14 Apr 2010 09:14:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9995696</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9995696</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/04/14/programtisk-adgang-til-ui-elementer-p-desktoppen-gennem-ui-automation.aspx#comments</comments><description>&lt;p&gt;Med &lt;a href="http://msdn.microsoft.com/en-us/library/ms747327.aspx"&gt;UI automation&lt;/a&gt; APIerne kan du få fat i og interagere med UI Elementer på desktoppen og i andre programmer. UI Elementet (kontrollen) skal understøtte UI Automation, hvilket langt de fleste gør. UI automatisering har, som jeg ser der, to overordnede anvendelser, Accessibility og UI Interoperability. &lt;/p&gt;  &lt;p&gt;Et lille eksempel kunne være at jeg gerne lære mine børn matematik, velvidende at de sikkert får lyst til mere, så jeg vil ikke selv lave en calculator, men bare genbruge den Calculator (calc.exe) der kommer med Windows. Tænk selv et sjovere UI ind med æbler, bananer og pærer ;-).&lt;/p&gt;  &lt;p&gt;Anyways, jeg skal have fat i Calculator programmet, samt fat i de knapper jeg vil bruge og resultatfeltet (UI Elementer). Det gør jeg nedenfor:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;Process &lt;/span&gt;calcInstance = &lt;span style="color: #2b91af"&gt;Process&lt;/span&gt;.Start(&lt;span style="color: #a31515"&gt;&amp;quot;calc.exe&amp;quot;&lt;/span&gt;);
&lt;span style="color: green"&gt;&lt;br /&gt;&lt;br /&gt;//Window handle is initialized asynchronously, so let wait until we have a handle&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;while &lt;/span&gt;(calcInstance.MainWindowHandle == &lt;span style="color: #2b91af"&gt;IntPtr&lt;/span&gt;.Zero)
{
    System.Threading.&lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;.SpinWait(1000000);
}
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;calculator = &lt;span style="color: #2b91af"&gt;AutomationElement&lt;/span&gt;.FromHandle(calcInstance.MainWindowHandle);
            
&lt;span style="color: green"&gt;// Get all buttons        
&lt;/span&gt;&lt;span style="color: #2b91af"&gt;AutomationElementCollection &lt;/span&gt;buttons = calculator.FindAll(&lt;span style="color: #2b91af"&gt;TreeScope&lt;/span&gt;.Descendants,
    &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCondition&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AutomationElement&lt;/span&gt;.ControlTypeProperty, &lt;span style="color: #2b91af"&gt;ControlType&lt;/span&gt;.Button));
            
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnOne = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnPlus = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnEquals = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnClear = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnFour = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;btnMaximize = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;resultPane = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
            
&lt;span style="color: green"&gt;//get reference to buttons – Use “UI Spy” to get names and Automation IDs from applications
&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;button &lt;span style="color: blue"&gt;in &lt;/span&gt;buttons)
{
    &lt;span style="color: blue"&gt;switch &lt;/span&gt;(button.Current.Name)
    {
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;:
            btnOne = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Maximize&amp;quot;&lt;/span&gt;:
            btnMaximize = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;:
            btnFour = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt;:
            btnPlus = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Clear&amp;quot;&lt;/span&gt;:
            btnClear = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;case &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;Equals&amp;quot;&lt;/span&gt;:
            btnEquals = button;
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
        &lt;span style="color: blue"&gt;default&lt;/span&gt;:
            &lt;span style="color: blue"&gt;break&lt;/span&gt;;
    }
}                 
&lt;span style="color: blue"&gt;try
&lt;/span&gt;{
    &lt;span style="color: green"&gt;//invoke buttons
    &lt;/span&gt;InvokeControl(btnClear);
    InvokeControl(btnOne);
    InvokeControl(btnOne);
    InvokeControl(btnOne);
    InvokeControl(btnPlus);
    InvokeControl(btnFour);
    InvokeControl(btnEquals);
}
&lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex)
{
    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;E: &amp;quot; &lt;/span&gt;+ ex.Message);
}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green"&gt;//find all text controls &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;AutomationElementCollection &lt;/span&gt;txt= calculator.FindAll(&lt;span style="color: #2b91af"&gt;TreeScope&lt;/span&gt;.Descendants,
    &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;PropertyCondition&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AutomationElement&lt;/span&gt;.ControlTypeProperty, &lt;span style="color: #2b91af"&gt;ControlType&lt;/span&gt;.Text));
&lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;t &lt;span style="color: blue"&gt;in &lt;/span&gt;txt)
{       
    &lt;span style="color: green"&gt;//the automation id of the result pane is 150
&lt;/span&gt;    &lt;span style="color: blue"&gt;if &lt;/span&gt;(t.Current.AutomationId.Equals(&lt;span style="color: #a31515"&gt;&amp;quot;150&amp;quot;&lt;/span&gt;))
        resultPane = t;

}
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;=&amp;quot; &lt;/span&gt;+ resultPane.Current.Name);
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.ReadKey();
}&lt;/pre&gt;

&lt;p&gt;På MSDN fandt jeg lidt kode, til at få eksekveret kommandoen der ligger bag mit AutomationElement. Det interessante i nedenstående er at der bruges invokepattern. Der findes en række &lt;a href="http://msdn.microsoft.com/en-us/library/ms752362.aspx"&gt;forskellige patterns&lt;/a&gt; man kan bruge, alt afhængig af hvad du ønsker at gøre med AutomationElementet.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;static void &lt;/span&gt;InvokeControl(&lt;span style="color: #2b91af"&gt;AutomationElement &lt;/span&gt;targetControl)
{
    &lt;span style="color: #2b91af"&gt;InvokePattern &lt;/span&gt;invokePattern = &lt;span style="color: blue"&gt;null&lt;/span&gt;;
    &lt;span style="color: blue"&gt;try
    &lt;/span&gt;{
        invokePattern =
            targetControl.GetCurrentPattern(
            &lt;span style="color: #2b91af"&gt;InvokePattern&lt;/span&gt;.Pattern) &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;InvokePattern&lt;/span&gt;;
    }
    &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;ElementNotEnabledException&lt;/span&gt;)
    {
        &lt;span style="color: blue"&gt;return&lt;/span&gt;;
    }
    &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;InvalidOperationException&lt;/span&gt;)
    { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }
    invokePattern.Invoke();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;For at identificere de enkelte UI elementer, kan man bruge “UI Spy”, som kommer sammen med Visual Studio. Nedenfor har jeg startet UI Spy og en Calculator. Ved at holde ctrl nede, så fokuserer UI Spy på det UI element der er under musens cursor. Når der er fokuseret, så kan jeg se properties på UI elementet. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/henrikwh/WindowsLiveWriter/UIAutomationnemmdeatf_5236/clip_image001_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/henrikwh/WindowsLiveWriter/UIAutomationnemmdeatf_5236/clip_image001_thumb.png" width="563" height="640" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9995696" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category></item><item><title>Danske Composite i Parallel Computing case study</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/04/13/danske-composite-i-parallel-computing-case-study.aspx</link><pubDate>Tue, 13 Apr 2010 18:11:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9995287</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9995287</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/04/13/danske-composite-i-parallel-computing-case-study.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.composite.net/"&gt;Composite&lt;/a&gt; har det sidste års tid været med i Microsofts Technology Adoption Program (TAP) omkring &lt;a href="http://blogs.msdn.com/henrikwh/archive/tags/Parallel+Extensions/default.aspx"&gt;parallel computing&lt;/a&gt;. Mange af teknologierne som Composite har anvendt, blev &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/04/12/visual-studio-2010-and-net-4-released.aspx"&gt;frigivet i går&lt;/a&gt;, et år efter Composite begyndte at arbejde med dem. I forløbet har Composite arbejdet tæt sammen med produktgruppen i Redmond for at forbedre teknologinerne i .NET 4.0 og parallelisere &lt;a href="http://www.composite.net/C1/CMS.aspx"&gt;CompositeC1&lt;/a&gt; CMS produktet.&lt;/p&gt;  &lt;p&gt;Du kan læse hele &lt;a href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?casestudyid=4000006833"&gt;case study her&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Det har været fornøjelse at være med på sidelinien under forløbet! Professionelt, entusiastisk, ambitiøst os sjovt. &lt;/p&gt;  &lt;p&gt;Tak Composite.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9995287" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/ISV/">ISV</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Metro/">Metro</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Parallel+Extensions/">Parallel Extensions</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category></item><item><title>Tænker du holistisk på innovation?</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/04/06/t-nker-du-holistisk-p-innovation.aspx</link><pubDate>Tue, 06 Apr 2010 12:14:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9991095</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9991095</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/04/06/t-nker-du-holistisk-p-innovation.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;{Nedenstående er til diskussion på twitter #dk2020} &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hvor ligger din virksomheds innovationsfokus? I løsningen? I salgsprocessen? I udviklingsprocessen? I partnerkanalen? I kundeoplevelsen? De fleste af de virksomheder jeg snakker med vil svare i løsningen.&lt;/p&gt;  &lt;p&gt;Erhvervs- og Byggelstyrelsen har skrevet “&lt;a href="http://www.ebst.dk/publikationer/innovation/Innovation_i_Danmark/index.htm#download"&gt;Innovation i Danmark&lt;/a&gt;” i 2008, som indeholder forskellige perspektiver på innovation. Rapporten deler overordnet innovation ind i 4 kategorier: produkt, proces, organisatorisk og markedsføringsinnovation. &lt;/p&gt;  &lt;p&gt;Fra “&lt;a href="http://www.ebst.dk/publikationer/innovation/Innovation_i_Danmark/index.htm#download"&gt;Innovation i Danmark&lt;/a&gt;” har jeg følgende citat:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Det kan være vanskeligt at sætte sig i en førerposition på markedet alene på baggrund af udvikling af ny teknologi. Og der er risiko for et lavt afkast af teknologiske innovationsproceser, fordi virksomhedens konkurrenter hurtigt kan lancere lignende eller bedre løsningsmuligheder.”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Hvorfor nu det citat? Virksomheder der formår at tænke mere holistisk på innovation, har langt større chancer for at få succes. Det handler om mere end et godt produkt, god arkitektur, godt teknologivalg, lækkert UI etc. Det kommer formentlig ikke som nogen overraskelse. Overraskelsen ligger måske i at jeg siger det ;-) &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.startvaekst.dk"&gt;Væksthuset&lt;/a&gt; har udarbejdet &lt;a href="http://www.startvaekst.dk/innovationstesten/0/8/0"&gt;en innovationstest&lt;/a&gt;, som jeg kan anbefale dig at tage, for at blive inspireret, men også for at kigge konstruktivt på egen virksomhed. Citat fra siden: “Du vil blive bedt om at svare på en række forskellige spørgsmål, som er delt op i 4 overordnede emner; &lt;em&gt;Innovationsrammer&lt;/em&gt;, &lt;em&gt;målopfyldelse&lt;/em&gt;, &lt;em&gt;marked&lt;/em&gt; og &lt;em&gt;interne processer&lt;/em&gt;”. &lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9991095" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/BizSpark/">BizSpark</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Innovation/">Innovation</category></item><item><title>Er vi innovative, eller er vi bare kreative?</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/03/25/er-vi-innovative-eller-er-vi-bare-kreative.aspx</link><pubDate>Thu, 25 Mar 2010 14:26:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9985036</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9985036</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/03/25/er-vi-innovative-eller-er-vi-bare-kreative.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;{Nedenstående er til diskussion på twitter #dk2020} &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Innovation. Alle snakker om det. Det er vejen frem for Danmark. Det er vejen ud af krisen. Det er vejen til succes. Det er det vi skal leve af. Det er det vi er gode til.&lt;img style="margin: 5px 0px 0px 5px; display: inline" align="right" src="http://4.bp.blogspot.com/_qY4_LzZYkB0/SoRkuQUk9DI/AAAAAAAABHA/dQGEJN7kYo8/s400/medium_dilbert.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Men er IT branchen i Danmark innovativ eller er vi “bare” kreative?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Innovation og kreativitet nævnes ofte som to nærmest identiske eller i hvert fald nært sammenbundne begreber. Imidlertid kan man adskille de to ved at se kreativitet som det at skabe nye ideer, mens innovation er at implementere dem i verden. Den kreative idé eller det kunstneriske værk har således en værdi i sig selv, og vurderes (i hvert fald i første omgang) primært af dets skaber. Til forskel for dette, så må noget, for at kunne tælle som en innovation, have vist sig at skabe værdi enten som profit eller på en anden måde. Innovation er, når den gode idé er iværksat.” [&lt;a href="http://www.antropologerne.com/upl/9529/INNOVATIONhvadermeningen.LK.pdf"&gt;INNOVATION – hvad er meningen&lt;/a&gt;]&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Sagt på en anden måde, så er innovation implementeringen af en kreativ ide, der giver værdi. Kreativitet/nytænkning er en forudsætning for innovation.&lt;/p&gt;  &lt;p&gt;Det betyder alt, når man starter virksomhed (eller udviklingsprojekter for den sags skyld), at man ved om organisationen både har kreative og innovative kompetencer. Hvis ikke, så må man indgå partnerskaber, rekruttere eller outsource.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9985036" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Innovation/">Innovation</category></item><item><title>Programmering med Tasks</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/03/11/programmering-med-tasks.aspx</link><pubDate>Thu, 11 Mar 2010 12:28:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9976802</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9976802</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/03/11/programmering-med-tasks.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: verdana"&gt;Jeg brugt lidt tid på at &lt;a href="http://blogs.msdn.com/henrikwh/archive/2008/07/24/m-debooking-med-vsto-wpf-og-clickonce.aspx"&gt;besøge noget kode som jeg har skrevet i .NET 3.0&lt;/a&gt;. Tanken gik på, om ikke jeg kunne optimere applikationen med nogle af de nye parallel muligheder i .NET 4.0. Det første der sprang i øjnene var, at jeg lavede en del asynkrone kald til webservices, for at sikre responsive UI på WPF applikationen. Jeg syntes ikke de mønstre der er for asynkron programmering i .NET. er nemme at forstå, eller at læse. Har jeg ret? Se nu følgende stykke &amp;quot;gammel&amp;quot; asynkron kode: &lt;/span&gt;&lt;/span&gt;    &lt;p&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;public delegate &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;DTO.&lt;span style="color: #2b91af"&gt;MeetingRoom&lt;/span&gt;&amp;gt; &lt;span style="color: #2b91af"&gt;GetRoomDelegate&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Period &lt;/span&gt;p);           &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: #2b91af"&gt;GetRoomDelegate &lt;/span&gt;myDelegate = dataaccesslayer.GetMeetingRoomsAtLocation;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;myDelegate.BeginInvoke(p, &lt;span style="color: blue"&gt;new &lt;/span&gt;System.&lt;span style="color: #2b91af"&gt;AsyncCallback&lt;/span&gt;(ResultsReturned), myDelegate);         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: verdana"&gt;         &lt;br /&gt;Når så BeginInvoke returnere, så kaldes ResultsReturned:&lt;/span&gt;&lt;span style="font-family: courier new"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;ResultsReturned(&lt;span style="color: #2b91af"&gt;IAsyncResult &lt;/span&gt;iar)         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;{        &lt;br /&gt;&amp;#160; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;MeetingRoom&lt;/span&gt;&amp;gt; result;         &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: #2b91af"&gt;GetRoomDelegate &lt;/span&gt;del = (&lt;span style="color: #2b91af"&gt;GetRoomDelegate&lt;/span&gt;)iar.AsyncState;         &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;try          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;result = del.EndInvoke(iar);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.Invoke(&lt;span style="color: blue"&gt;new &lt;/span&gt;System.Windows.Forms.&lt;span style="color: #2b91af"&gt;MethodInvoker&lt;/span&gt;(&lt;span style="color: blue"&gt;delegate          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;{ &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.uc.UpdateMeetingRooms(result);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;}));        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: courier new; font-size: 10pt"&gt;} ... &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: verdana"&gt;Først skal jeg have fat i GetRoomDelegaten fra AsyncState'en der initielt er ført med kaldet i BeginInvoke, så kalde EndInvoke for at få resultatet. Efterfølgende skal jeg lave nogle besværgelser for at få fat i UI-threaden. Og så er der ikke engang noget error/exception-handling kode indkluderet. &lt;/span&gt;&lt;span style="font-family: courier new"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: verdana"&gt;Det bliver pænere med System.Threading.Tasks. Nedenstående eksempel indeholder fejlhåndtering, cancellation og update af UI.&lt;/span&gt;&lt;span style="font-family: courier new"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: verdana"&gt;Først skal jeg have fat i en &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/09/22/9898090.aspx"&gt;TaskScheduler&lt;/a&gt;. Ved at kalde FromCurrentSynchronizationContext, får jeg fat i UI-thread. Dvs at jeg kan bruge den context når jeg skal opdatere UI. &lt;/span&gt;&lt;span style="font-family: courier new; color: blue"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; ui = &lt;span style="color: #2b91af"&gt;TaskScheduler&lt;/span&gt;.FromCurrentSynchronizationContext(); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;For at håndtere cancellation af tasks, så initierer jeg et par &lt;a href="http://blogs.msdn.com/pfxteam/archive/2009/06/22/9791840.aspx"&gt;CancellationTokenSources&lt;/a&gt;. Første source (cts) bruger jeg at annulere alle tasks, på nær cancel. Anden source, bruger jeg stort set ikke, men ville kunne bruges hvis man vil annullere en cancel. &lt;/span&gt;&lt;span style="font-family: consolas; color: blue; font-size: 9pt"&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; cts = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CancellationTokenSource&lt;/span&gt;();         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; cts2 = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;CancellationTokenSource&lt;/span&gt;(); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; ct = cts.Token;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; ct2 = cts2.Token; &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Så laver jeg en ny task gennem Factory metoden. Det eneste interessante er, at jeg giver en cancellationtoken (ct) med. Det betyder at jeg kan kalde cts.Cancel(), og så få annuleret alle tasks der bruger ct token. &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; getRooms = &lt;span style="color: #2b91af"&gt;Task&lt;/span&gt;.Factory.StartNew(() =&amp;gt;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;{        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: green"&gt;//Call a long running method&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;var&lt;/span&gt; r = dal.GetMeetingRoomsAtLocation(p);         &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;ct.ThrowIfCancellationRequested();        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; r;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;}, ct &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Ved kalde&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt; ct.ThrowIfCancellationRequested()&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt; ovenfor, få jeg smidt en OperationCanceledException, hvis &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;cts.Cancel()&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt; er blevet kaldt. På den vis kan jeg afbryde en task sikkert. Jeg mangler (tror jeg nok) en getRooms.&amp;quot;Abort()&amp;quot;, da jeg ikke i denne situation behøver kontrol over hvordan denne task afbrydes. Problemet er at &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;dal.GetMeetingRoomsAtLocation(p) &lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;kan være lang tid om at retunere – hvad nu hvis metoden tog 10 min, og krævede en masse CPU? &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Nedenfor begynder jeg at bygge min '&lt;em&gt;kæde'&lt;/em&gt; af tasks op. Næste statment eksekveres, når forgående task afsluttes, men kun, når foregående task er afsluttet med en status der cancelled – deraf TaskContinuaitonOptions. Sidste parameter der er med, er ui sync context. Det betyder at denne task kører på UI-thread'en, og jeg frit kan opdatere UI. Bemærk at jeg bruger en anden cancellationtoken, da jeg ikke ønsker at nedenstående task annulleres sammen med de andre. &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;getRooms.ContinueWith(cancel =&amp;gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;{        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: green"&gt;//cleanup&lt;/span&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;}, ct2, &lt;span style="color: #2b91af"&gt;TaskContinuationOptions&lt;/span&gt;.OnlyOnCanceled, ui); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Når der sker en fejl, så gør jeg det samme som ved cancel, bare med &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: #2b91af"&gt;TaskContinuationOptions&lt;/span&gt;.OnlyOnFaulted&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;.&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;getRooms.ContinueWith(error =&amp;gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;{        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: green"&gt;//handel error, and notify user&lt;/span&gt;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;}, ct, &lt;span style="color: #2b91af"&gt;TaskContinuationOptions&lt;/span&gt;.OnlyOnFaulted, ui); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Hvis alt er gået godt, så opdater UI. Bemærk at det gennem typeinferens er udledt at update.Result er en List&amp;lt;MeetingRoom&amp;gt;. &lt;/span&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;getRooms.ContinueWith(update =&amp;gt;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;{        &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: green"&gt;//update UI&lt;/span&gt;         &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.msmeet.UpdateMeetingRooms(update.Result);         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;}, ct, &lt;span style="color: #2b91af"&gt;TaskContinuationOptions&lt;/span&gt;.NotOnFaulted, ui); &lt;/span&gt;&lt;/p&gt;    &lt;p&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Jeg syntes det er elegant og nemmere at læse. Det er let at opdatere ui ved hjælp af &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: #2b91af"&gt;TaskScheduler&lt;/span&gt;.FromCurrentSynchronizationContext(). &lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;Ved brug af &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 9pt"&gt;&lt;span style="color: #2b91af"&gt;CancellationTokenSource&lt;/span&gt;() &lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt;har jeg en god måde af afbryde tasks på, da jeg har kontrol over hvordan og hvornår de afbrydes. Gennem &lt;/span&gt;&lt;span style="font-family: consolas; color: #2b91af; font-size: 9pt"&gt;TaskContinuationOptions&lt;/span&gt;&lt;span style="font-family: verdana; font-size: 10pt"&gt; har jeg mulighed for at fortsætte en task, baseret på status af foregående task.&lt;/span&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9976802" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Parallel+Extensions/">Parallel Extensions</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category></item><item><title>Webcast: Demointensiv gennemgang af Entity Framework 4</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/02/04/webcast-demointensiv-gennemgang-af-entity-framework-4.aspx</link><pubDate>Thu, 04 Feb 2010 22:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9957454</guid><dc:creator>henrikwh</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9957454</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/02/04/webcast-demointensiv-gennemgang-af-entity-framework-4.aspx#comments</comments><description>&lt;p&gt;Under tesen “How many new features can we demo in one session?” gennemføres denne PDC09 session. Klart den bedste gennemgang jeg har set.&amp;#160; &lt;/p&gt;  &lt;p&gt;Følgende nye features bliver gennemgået:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;&lt;strong&gt;Model first &amp;amp; generate database from model&lt;/strong&gt;&lt;/em&gt;. Hidtil har det været rimelig ubrugbart at starte ud med en ny Entity Model (Empty Model). Det er det ikke længere. Nu kan du lave modellen ved at starte med en “Empty Model” og derefter generere databaseskemaet. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Lazyloading&lt;/strong&gt;&lt;/em&gt;. Du slipper nu for fortælle at din query, hvor meget af objekthierakiet der skal loades med .Include(“path”). Ved at have enabled layzloading vil der, vil relationerne i din model bliver loadet på det tidspunkt du forsøger at tilgå dem. Lækker feature. Men mon ikke der kunne sidde en DBA eller to, som ville få grå hår grundet mange roundtrips til databasen? &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;POCO. Plain Old CLR Objects&lt;/strong&gt;. &lt;/em&gt;POCOs kan nu mappes af EF. Det vil sige, at man kan have helt rene klasser, som ikke indeholder referencer, metoder, attributter etc fra EF.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/henrikwh/archive/2010/02/01/kodegenerering-med-t4-templates-i-vs-2010.aspx"&gt;&lt;em&gt;T4 kodegenerering&lt;/em&gt;&lt;/a&gt;. Context og dataklasser bliver genereret med &lt;a href="http://blogs.msdn.com/henrikwh/archive/2010/02/01/kodegenerering-med-t4-templates-i-vs-2010.aspx"&gt;T4 templates&lt;/a&gt;. Du kan selv ændre i templaten, hvis du vil have et andet output. Super fleksibilitet at have. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;context.ObjectStateManager&lt;/strong&gt;&lt;/em&gt;. Nu kan man arbejde direkte med ObjectStateManageren og direkt fortælle den hvilke objekter der har ændret tilstand.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;em&gt;context.ExecuteStoreQuery&lt;/em&gt;&amp;lt;MyResultSet&amp;gt;(“select name, address from Person”)&lt;/strong&gt;. Der er åbnet op for, at man gennem entity frameworket kan eksekvere queries. Klart brugbart. Men der er tilgengæld også åbnet op for SQL injection. Det kan også være DBA’en kommer efter dig - igen.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Få en stored procedure ind i modellen, brug den typestrækt i din query&lt;/strong&gt;&lt;/em&gt;. Gå ca 34 minutter ind i videoen og se det. Ret elegant at du kan mappe en “dummy” klasse til en stored procedure, og derefter bruge den i dine queries. Godt extension point.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Code only&lt;/strong&gt;&lt;/em&gt;. Til sidst viser de nogle post beta 2 features omkring Code only. Code only betyder at du ikke behøves nogen EDMX, men at du klare dig igennem helt imperativt. &lt;/li&gt; &lt;/ul&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="800" height="450"&gt; &lt;param name="source" value="http://microsoftpdc.com/Skins/PDC09/Styles/players/VideoPlayer2009_03_27.xap" /&gt; &lt;param name="initParams" value="m=http://ecn.channel9.msdn.com/o9/pdc09/wmvhigh/FT10.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://microsoftpdc.com/Skins/PDC09/Styles/images/DefaultPlayerBackground.png, postid=0" /&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;Videoen kan downloades i forskellige formater &lt;a href="http://microsoftpdc.com/Sessions/FT10"&gt;her&lt;/a&gt;.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9957454" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Entity+Framework/">Entity Framework</category></item><item><title>Kodegenerering med T4 templates i VS 2010</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/02/01/kodegenerering-med-t4-templates-i-vs-2010.aspx</link><pubDate>Mon, 01 Feb 2010 07:59:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9956187</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9956187</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/02/01/kodegenerering-med-t4-templates-i-vs-2010.aspx#comments</comments><description>&lt;p&gt;Siden VS 2008 har det været muligt at lave kodegenerering med T4 templates og er en af de godt bevarede hemmeligheder.&amp;#160; &lt;/p&gt;  &lt;p&gt;Men med 2010 bliver T4 meget synlig. Entity Framework bruger i stor stil T4 templates til at generere typerne og context’en. Fordelen er, at man selv kan ændre i T4 templates, hvis man ønsker et andet output. &lt;/p&gt;  &lt;p&gt;Prøv selv at lave en Entity Model og højreklik på designeren og vælg “Add Code Generation Item”. Så bliver T4 templates tilføjet til dit projekt.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/henrikwh/WindowsLiveWriter/KodegenereringmedT4templates_7CC1/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/henrikwh/WindowsLiveWriter/KodegenereringmedT4templates_7CC1/image_thumb.png" width="272" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Der ligger et &lt;a href="http://channel9.msdn.com/posts/VSIPMarketing/VSX206-Code-Generation-with-T4/"&gt;webcast på Channel 9&lt;/a&gt;, som først gennemgår T4 ret fint. Efterfølgende vises hvordan man kan tage et UML klassediagram (fra VS2010 Beta 1) og generere klasser. &lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/9/2/6/7/0/5/VSX206_ch9.wmv,autostart=false,autohide=true,showembed=true, postid=507629" /&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;/p&gt;  &lt;p&gt;Bruger du T4 til noget interessant?&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956187" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category></item><item><title>Webcast: Entity Framework 4, samt lidt WCF dataservices, M og Quadrant</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/01/28/webcast-entity-framework-4-samt-lidt-wcf-dataservices-m-og-quadrant.aspx</link><pubDate>Thu, 28 Jan 2010 13:34:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9954653</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9954653</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/01/28/webcast-entity-framework-4-samt-lidt-wcf-dataservices-m-og-quadrant.aspx#comments</comments><description>&lt;p&gt;Don Box og Chris Anderson har leveret en ret god præstentation på PDC09, som giver et god overblik over Entity Framework 4. Der bliver gennemgået 3 senarier&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;em&gt;Start med databasen&lt;/em&gt;. Hvordan kommer man fra at have en database til også at have en EDM model (før EF 4 er det nok det 99% har gjort, ved at lave en ny Entity Model, og så vælge “Generate from database”). &lt;/li&gt;    &lt;li&gt;&lt;em&gt;Start med modellen&lt;/em&gt;. En af de nye features er, at man kan starte med en Entity Data Model, og så generere databasen ud fra modellen. For at genererer &lt;a href="http://en.wikipedia.org/wiki/Data_Definition_Language"&gt;DDL’en&lt;/a&gt; bruges T4 templates. Pr default genereres DDL der har en tabel pr type. Der findes andre muligheder. Der er et &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/df3541c3-d833-4b65-b942-989e7ec74c87"&gt;plugin&lt;/a&gt;, som giver dig en række nye templates til generering af DDL.&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Start med .NET klasser&lt;/em&gt;. Den puristiske tilgang med &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO&lt;/a&gt;. Med POCO opnår man persistance ignorance, altså nogle klasser der ingen binding har til nogen &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;ORM&lt;/a&gt;.&amp;#160; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Desuden viser Don tilsidst hvordan man (snart) vil kunne bruge M til at beskrive sin EDM model.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="800" height="450"&gt; &lt;param name="source" value="http://microsoftpdc.com/Skins/PDC09/Styles/players/VideoPlayer2009_03_27.xap" /&gt; &lt;param name="initParams" value="m=http://ecn.channel9.msdn.com/o9/pdc09/wmvhigh/FT02.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://microsoftpdc.com/Skins/PDC09/Styles/images/DefaultPlayerBackground.png, postid=0" /&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;Hvis du vil downloade videoen, så kan den hentes &lt;a href="http://microsoftpdc.com/Sessions/P09-04"&gt;her&lt;/a&gt;. &lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9954653" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Entity+Framework/">Entity Framework</category></item><item><title>Webcast omkring PLINQ, Static Parallel samt Task Parallel Library</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/01/21/webcast-omkring-plinq-static-parallel-samt-task-parallel-library.aspx</link><pubDate>Thu, 21 Jan 2010 13:58:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9951417</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9951417</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/01/21/webcast-omkring-plinq-static-parallel-samt-task-parallel-library.aspx#comments</comments><description>&lt;p&gt;Har du ikke se/læst “&lt;a href="http://blogs.msdn.com/henrikwh/archive/2010/01/13/overblik-over-parallel-computing-i-net-4-0.aspx"&gt;Overblik over Parallel Computing i .NET 4.0&lt;/a&gt;”, så kan jeg anbefale det. Når det så er sagt, så er der ikke nogen demoer. Det retter jeg op på her.&lt;/p&gt;  &lt;p&gt;Jeg viser PLINQ, Static Parallel samt Task Parallel library.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/3/5/7/1/2/5/parallelextensions_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, postid=521753" /&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;Videoen kan downloades fra &lt;a href="http://channel9.msdn.com/posts/martinesmann/Parallel-Computing/"&gt;Channel 9&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Desuden er der en flere gode eksempler på Channel 9, under vores &lt;a href="http://channel9.msdn.com/learn/courses/VS2010/Parallel/ParallelExtensions/"&gt;courses&lt;/a&gt;.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9951417" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Parallel+Extensions/">Parallel Extensions</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category></item><item><title>Simplificeret config i WCF4</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/01/19/simplificeret-config-i-wcf4.aspx</link><pubDate>Tue, 19 Jan 2010 09:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9950235</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9950235</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/01/19/simplificeret-config-i-wcf4.aspx#comments</comments><description>&lt;p&gt;Ron Jacobs har lavet en god intro til nyhederne i WCF4 i forbindelse med konfigurering. Specielt syntes jeg at protokolmappingen til scheme&amp;#160; ser elegant ud.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/ch9/6/7/3/9/1/5/104Episode38WCFConfig_ch9.wmv,autostart=false,autohide=true,showembed=true, postid=519376" /&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;Det er 10 minutter godt brugt.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9950235" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET+4-0/">.NET 4.0</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/WCF/">WCF</category></item><item><title>Overblik over Parallel Computing i .NET 4.0</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/01/13/overblik-over-parallel-computing-i-net-4-0.aspx</link><pubDate>Wed, 13 Jan 2010 08:10:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9947615</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9947615</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/01/13/overblik-over-parallel-computing-i-net-4-0.aspx#comments</comments><description>&lt;p&gt;Parallel Computing er noget som vi er nødsaget til at tage stilling til. Den software vi udvikler i dag, vil blive afviklet på maskiner med mange kerner/CPU’er. Man kan ikke længere sætte sin lid til, at når man køber en ny PC, så kører applikationerne hurtigere, grundet flere GHz. Grunden er, at GHz sættes lidt ned i nye CPU’er, for at undgå overophedning. Til gengæld kommer der flere kerner i CPU’erne. Hvis ikke man bruger de nye muligheder for parallelisering i udviklingen af software, så vil hardwaren ikke blive udnyttet ordentligt og brugeren vil ikke opleve at softwaren kører hurtigere på en ny PC.&lt;/p&gt;  &lt;p&gt;Det samme gør sig gældende i Cloud computing. En &lt;a href="http://channel9.msdn.com/learn/courses/Azure/WindowsAzure/"&gt;Compute enhed i Azure&lt;/a&gt; fås i flere forskellige &lt;a href="http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&amp;amp;locale=en-US&amp;amp;offer=MS-AZR-0003P"&gt;størrelser&lt;/a&gt;, fra Small til X-Large, hvor en Small instance har 1 CPU og en X-Large har 8 CPUer. Alle størrelser kører 1.6 GHz. Så selv om man starter ud med en small, er man nødsaget til at tænke på parallelisering ind.&lt;/p&gt;  &lt;p&gt;Jeg kan klart anbefale at du ser følgende webcast på channel 9. &lt;em&gt;&lt;a href="http://channel9.msdn.com/learn/courses/VS2010/Parallel/ParallelComputing/"&gt;I et webcast uden kode gennemgås&lt;/a&gt;&lt;/em&gt; ret godt hvad det nye muligheder gennemgås. 11 min.&lt;/p&gt; &lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/vp09_11_30.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://ecn.channel9.msdn.com/o9/learn/videos/VS2010-Parallel-ParallelComputing/VS2010-Parallel-ParallelComputing_kit.wmv,autostart=false,autohide=true,showembed=true, postid=500772" /&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;Hvis du vil se lidt kodeeksempler, så ligger der også &lt;a href="http://channel9.msdn.com/learn/courses/VS2010/Parallel/ParallelExtensions/Exercise-1-Parallelize-an-Existing-Algorithm-using-the-Static-Parallel-Helper-Class/"&gt;nogle opgaver&lt;/a&gt;, som du formentlig kan nøjes med at læse igennem. Kodestumperne er bestemt et kig værd.&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;
tweetmeme_source = 'henrikwh';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9947615" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Parallel+Extensions/">Parallel Extensions</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Guide/">Guide</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/VS2010/">VS2010</category></item><item><title>Introduktion til Cloud Computing</title><link>http://blogs.msdn.com/b/henrikwh/archive/2010/01/09/introduktion-af-cloud-computing.aspx</link><pubDate>Sat, 09 Jan 2010 08:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9946061</guid><dc:creator>henrikwh</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/henrikwh/rsscomments.aspx?WeblogPostID=9946061</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2010/01/09/introduktion-af-cloud-computing.aspx#comments</comments><description>&lt;P&gt;Min kollega &lt;A href="http://www.version2.dk/blogs/renelohde" mce_href="http://www.version2.dk/blogs/renelohde"&gt;Rene Løhde&lt;/A&gt; har lavet en super pædagogisk, ikke teknisk, introduktion til cloud computing. Han taler ud fra en case og nævner mange af de betragtninger som man normalt har i forhold til at flytte til cloud, når forretningen udvikler sig. Specielt er jeg glad for beskrivelsen af &lt;A href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service" mce_href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service"&gt;IaaS&lt;/A&gt; og &lt;A href="http://en.wikipedia.org/wiki/Platform_as_a_service" mce_href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/A&gt;. Det er efter min mening de begreber man først skal have styr på, når man overvejer cloud og skal vælge platform.&lt;/P&gt;
&lt;OBJECT width=400 height=300&gt;&lt;PARAM NAME="allowfullscreen" VALUE="true"&gt;&lt;PARAM NAME="allowscriptaccess" VALUE="always"&gt;&lt;PARAM NAME="movie" VALUE="http://vimeo.com/moogaloop.swf?clip_id=8615080&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;
&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=8615080&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" mce_src="http://vimeo.com/moogaloop.swf?clip_id=8615080&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/OBJECT&gt;
&lt;P&gt;&lt;A href="http://vimeo.com/8615080" mce_href="http://vimeo.com/8615080"&gt;Hvad er Cloud Computing?&lt;/A&gt; from &lt;A href="http://vimeo.com/user2932720" mce_href="http://vimeo.com/user2932720"&gt;Rene Lohde&lt;/A&gt; on &lt;A href="http://vimeo.com/" mce_href="http://vimeo.com"&gt;Vimeo&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9946061" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Cloud/">Cloud</category><category domain="http://blogs.msdn.com/b/henrikwh/archive/tags/Azure/">Azure</category></item></channel></rss>
