<?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 Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Breaking news: Så kom der IaaS på Azure!</title><link>http://blogs.msdn.com/b/henrikwh/archive/2012/06/07/breaking-news-s-229-kom-der-iaas-p-229-azure.aspx</link><pubDate>Thu, 07 Jun 2012 20:19:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10316939</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=10316939</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2012/06/07/breaking-news-s-229-kom-der-iaas-p-229-azure.aspx#comments</comments><description>&lt;p&gt;Det er ikke så tit jeg får lov til at lave en breaking news – so here goes &lt;img class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-61-15-metablogapi/5483.wlEmoticon_2D00_winkingsmile_5F00_08CC7240.png" /&gt;&lt;/p&gt;  &lt;p&gt;På &lt;a href="http://www.meetwindowsazure.com/"&gt;meetwindowsazure.com&lt;/a&gt; har vi netop annonceret næste generation af Azure som bla. indeholder IaaS – altså muligheden for at hoste virtuelle maskiner på Azure. Det betyder at man nu kan lave ”&lt;i&gt;Lift and drop&lt;/i&gt;”, fra on-premise til Azure og omvendt. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;u&gt;Det er stort!&lt;/u&gt;&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Set ud fra et platformsperspektiv, så har IaaS manglet. PaaS kræver at man designer applikationen til scale-out, hvilket medfører at tilstand gemmes centalt i en database eller Azure Storage. Ikke alle applikationer kan umiddelbart skrives om til PaaS (f.eks. Sharepoint).&lt;/p&gt;  &lt;p&gt;Men nu har du mulighed for at lave dit eget image, eller anvende nogle af de images der ligger i kataloget på Azure. I selv samme katalog ligger blandt andet images med: &lt;i&gt;Windows Server 2008 R2, Windows Server 2008 R2 med SQL Server 2012, Windows Server 8, OpenSuse, SUSE Linux Enterprise, Ubunto og CentOs.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Vil du f.eks. hoste Sharepoint så kunne du vælge en Windows Server 2008 R2 fra kataloget og installere Sharepoint ovenpå, eller lave dit eget image og uploade det.&lt;/p&gt;  &lt;p&gt;Når vi kender priserne vil &lt;a href="http://www.windowsazure.com/da-dk/pricing/calculator/"&gt;prisberegningssiden&lt;/a&gt; blive opdateret.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://bit.ly/KXpIhm"&gt;Tilmeld dig DevCamps for at få hands-on&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10316939" width="1" height="1"&gt;</description></item><item><title>Heads up: Azure begivenheder i juni</title><link>http://blogs.msdn.com/b/henrikwh/archive/2012/05/31/heads-up-azure-begivenheder-i-juni.aspx</link><pubDate>Thu, 31 May 2012 10:44:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10312285</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=10312285</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2012/05/31/heads-up-azure-begivenheder-i-juni.aspx#comments</comments><description>&lt;p&gt;Vi nærmer os med hastige skridt det stort anlagte &lt;a href="http://www.meetwindowsazure.com/"&gt;meetwindowsazure.com&lt;/a&gt; event i San Fransico 7/6, hvor Scott Guthrie er klar til at fortælle meget mere om nyhederne Azure. Du kan følge med online fra kl 22:00. Det er en god ide at &lt;a href="http://register.meetwindowsazure.com/"&gt;registrere sig&lt;/a&gt;. Det bliver stort!&lt;/p&gt;  &lt;p&gt;Ugen efter følger vi op og laver to Azure DevCamps, hvor vi kigger på alle nyheder og får lidt hands on på de nye bits. Agendaen følgende&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;09:00 - 12:00: Nyheder i Windows Azure!      &lt;br /&gt;&lt;/strong&gt;Opfølgning på &lt;a href="http://www.meetwindowsazure.com/"&gt;Meet Windows Azure&lt;/a&gt;. Vi kigger nærmere på nyhederne. &lt;strong&gt;     &lt;br /&gt;12:00 – 12:45: Frokost&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;12:45 – 14:00: Windows Azure Storage og Databaser      &lt;br /&gt;&lt;/strong&gt;Vi forsætter med at kigge på Azure platformen. Windows Azure Storage indholder blobs, tables og queue og udgør Azure cloud storage. Desuden kigger vi på databasemulighederne i Azure (vi venter på ScottGu). &lt;strong&gt;     &lt;br /&gt;14:00 – 16:00: Hackaton       &lt;br /&gt;&lt;/strong&gt;Har du en app, så kigger på den og flytter den til Azure, vil du prøve Azure, så finder eller bygger vi en app og deployer den.&lt;/p&gt;  &lt;p&gt;Du kan tlimelde dig på nedenstående link.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.eventbrite.com/event/3619002534"&gt;12/6 Azure DevCamp, Hellerup&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.eventbrite.com/event/3618960408"&gt;14/6 Azure DevCamp, Århus&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Desuden har vi en række webinars på vej i juni. Stay tuned.&lt;/p&gt;  &lt;p&gt;Jeg ser frem til en meget spændende juni måned! &lt;/p&gt;  &lt;p&gt;&lt;a href="https://twitter.com/#!/henrikwh" target="_blank"&gt;@henrikwh&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10312285" 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>Konkurrence: Lav en Windows Phone App med Azure backend</title><link>http://blogs.msdn.com/b/henrikwh/archive/2012/05/16/konkurrence-lav-en-windows-phone-app-med-azure-backend.aspx</link><pubDate>Wed, 16 May 2012 06:32:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10305695</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=10305695</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2012/05/16/konkurrence-lav-en-windows-phone-app-med-azure-backend.aspx#comments</comments><description>&lt;p&gt;Vi har lavet en lille sommerkonkurrence! Du har to muligheder for at deltage
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Lav en Windows Phone app med Azure backend
&lt;/li&gt;&lt;li&gt;Lav tre Windows Phone apps
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Du kan læse &lt;a href="http://wpdk.cloudapp.net/"&gt;alt om reglerne her, samt hvordan du kommer godt i gang her&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Vi har 90 fede Nokia telefoner. 60 Nokia Lumia 800 og 30 Nokia Lumia 710.
&lt;/p&gt;&lt;p&gt;Spørgsmål besvares på twitter (@henrikwh @martinesmann)
&lt;/p&gt;&lt;p&gt;God fornøjelse!
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10305695" width="1" height="1"&gt;</description></item><item><title>Har du MSDN, så har du gratis Azure!</title><link>http://blogs.msdn.com/b/henrikwh/archive/2012/03/21/har-du-msdn-s-229-har-du-gratis-azure.aspx</link><pubDate>Wed, 21 Mar 2012 07:33:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10285796</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=10285796</wfw:commentRss><comments>http://blogs.msdn.com/b/henrikwh/archive/2012/03/21/har-du-msdn-s-229-har-du-gratis-azure.aspx#comments</comments><description>&lt;p&gt;Mange er ikke klar over det. Men når du har et MSDN abonnement, så har du også gratis adgang til Azure. Hvor meget du har adgang til gratis, er lidt afhængig af &lt;a href="http://www.windowsazure.com/da-dk/pricing/member-offers/msdn-benefits/"&gt;hvilket MSDN abonnement du har&lt;/a&gt;. Hvis du har &lt;a href="http://www.windowsazure.com/da-dk/offers/ms-azr-0010p"&gt;professional&lt;/a&gt;, så får du for godt 7000 kr pr år, med &lt;a href="http://www.windowsazure.com/da-dk/offers/ms-azr-0011p"&gt;premium&lt;/a&gt; godt 11000 kr og med &lt;a href="http://www.windowsazure.com/da-dk/pricing/member-offers/msdn-benefits/"&gt;ultimate&lt;/a&gt; får du for godt 20000 kr. 
&lt;/p&gt;&lt;p&gt;For at aktivere dine fordele, skal du &lt;a href="https://msdn.microsoft.com/en-us/subscriptions/manage"&gt;logge på din MSDN konto&lt;/a&gt; og vælge "Activate Windows Azure". 
&lt;/p&gt;&lt;p&gt;
	&lt;/p&gt;&lt;p&gt;I selve aktiveringen vil du blive afkrævet et kreditkort. Du får kun brug for kreditkortet, hvis du bruger mere end det beløb du har tilgængelig på din MSDN konto, OG hvis du eksplicit godkender at der må trækkes på kortet. Hvis du ikke har godkendt at der må trækkes på kortet, så lukkes services ned, når du har brugt din månedlige kvote.
&lt;/p&gt;&lt;p&gt;Husk MSDN konti er personlige. Man må altså ikke deles om et MSDN abonnement. Hvis din virksomheder er med i &lt;a href="https://partner.microsoft.com/danmark/"&gt;Microsoft Partner Network&lt;/a&gt;, så kan det være, at du gennem dit partnerskab allerede har MSDN konti til rådighed. &lt;a href="https://partner.microsoft.com/us/40019775"&gt;Her kan du læse, hvordan du aktivere dine subscriptions&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;Skulle du IKKE have en MSDN konto, så kan du aktivere en &lt;a href="http://www.windowsazure.com/free-trial/"&gt;90 dages prøveversion her&lt;/a&gt;.
&lt;/p&gt;&lt;h3&gt;Sådan kommer du i gang
&lt;/h3&gt;&lt;p&gt;Der er lavet et forrygende godt &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=8396"&gt;training kit til Windows Azure&lt;/a&gt;, med præsentationer og labs/opgaver. 
&lt;/p&gt;&lt;p&gt;For at lave dit første deployment til Azure så vil jeg foreslå &lt;a href="http://msdn.microsoft.com/en-us/gg271301"&gt;du starter her med denne lab&lt;/a&gt;.  Så er du i gang og kan deploye direkte fra Visual Studio.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10285796" width="1" height="1"&gt;</description></item><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>3</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></channel></rss>