<?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>Mikael Deurell : .net</title><link>http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx</link><description>Tags: .net</description><dc:language>sv-SE</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>PowerShell... Som en vacker vårdag!</title><link>http://blogs.msdn.com/deurell/archive/2007/03/13/powershell-som-en-vacker-v-rdag.aspx</link><pubDate>Tue, 13 Mar 2007 23:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1875651</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1875651.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1875651</wfw:commentRss><description>&lt;P&gt;En av mina PowerShell demos&amp;nbsp;från&amp;nbsp;"Design&amp;nbsp;For Operations" workshoppen.&amp;nbsp;Ett exempel på hur man kan nå WMI-objekt (som perf counters) från PowerShell. Kicka igång wbemtest.exe, leta upp den hårigaste perfomancecountern (eller vilken WMI klass som helst!), en rad PowerShell... Sen har ni en mätare från en sportbiI&amp;nbsp;som greppat perf-count värdet och uppdateras varje sekund...&amp;nbsp;WildCopper, I love you!&lt;/P&gt;
&lt;P&gt;&lt;IMG title=PowerShell style="WIDTH: 734px; HEIGHT: 518px" height=518 alt=PowerShell src="http://www.mickesvarld.net/demo1.jpg" width=734 mce_src="http://www.mickesvarld.net/demo1.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Sa jag att det krävs en parameter för att&amp;nbsp;kicka in era mätare/gauges/charts eller vad ni nu vill till en Sidebar gadget i Vista?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Wicked... Wicked... WICKED!!!&lt;/P&gt;
&lt;P&gt;(ok, PowerShell fick en liten boost av våra rockande vänner på &lt;A class="" href="http://www.powergadgets.com/" mce_href="http://www.powergadgets.com/"&gt;powergadgets.com&lt;/A&gt;) ;-)&lt;/P&gt;
&lt;P&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 11pt; COLOR: #7f7f7f; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN"&gt;I work hard all week and so do you&lt;BR&gt;We deserve to let off some steam&lt;BR&gt;Less orthodox creeping,&lt;BR&gt;We need to rage through all of this life&lt;BR&gt;There might be ones who are smarter than you&lt;BR&gt;That have the right answers that wear better shoes&lt;BR&gt;Forget about those melting ice caps&lt;BR&gt;We're doing the best, with what we've got...&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1875651" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category><category domain="http://blogs.msdn.com/deurell/archive/tags/DFO/default.aspx">DFO</category><category domain="http://blogs.msdn.com/deurell/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Få dina lokala "admin-dudes" att bli till sig i trasorna!</title><link>http://blogs.msdn.com/deurell/archive/2007/03/13/f-dina-lokala-admin-dudes-att-bli-till-sig-i-trasorna.aspx</link><pubDate>Tue, 13 Mar 2007 23:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1875415</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1875415.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1875415</wfw:commentRss><description>&lt;P mce_keep="true"&gt;Ok, det är min blogg. Jag bestämmer! Engelska, tried it... Svenska rockar... Jag är tillbaka! :-)&lt;/P&gt;
&lt;P&gt;Idag la jag sista touchen på min &lt;A title="DFO dragning" href="http://www.mickesvarld.net/designforoperations.ppt" mce_href="http://www.mickesvarld.net/designforoperations.ppt"&gt;"Design For Operations" dragning&lt;/A&gt;. Skall köra den nästa vecka och jag är riktigt nöjd med resultatet... (självgoda Micke är här!!! :-)) Och jag ÄLSKAR ämnet! Mitt jobb består nästan till hälften av att debugga andra utvecklares kod och detta har fått mig att fundera på hur vi förbereder våra applikationer för drift... En enkel sanning: &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;"En bra app utvecklas under en relativt kort tid och används under en låååång!"&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Hur förbereder vi för detta? Och hur tänker egentligen en såndär riktig "admin dude?" (tycker IT-pro låter lite krystat). De är rätt coola... De älskar t.ex... MMC... Awesome! Vi får kilometerlånga kärleksbrev från "Admin dudes" som förklarar hur mycket de älskar MMC... Inte cool WPF... Inte Direct-X med de coolaste shaderserna, utan MMC... Helt sjukt kallt! Och varför?&amp;nbsp;MMC är konsistent (om man inte räknar med IIS7 :-)) och alla använder det redan dagligen! (IIS, DNS blablabla...). Ok, MMC innan 3.0 var inte en kul resa, men nu när det går att hosta .net forms och Vista/Longhorn "hottat" (kan man verkligen säga det om MMC?) upp det hela så är det en kakbit att använda och utveckla för. Hur många gör det utanför Redmond? 2%? Varför?&lt;/P&gt;
&lt;P&gt;Jag blir sällan såld på admin grejjer... Men... PowerShell! I love you!!! Det underbara är att det är en kakbit att göra egna cmdlets till powershell (för övervakning och admin) och sedan piska fram en MMC app som använder sig av aktuella cmdlets genom några rader kod:&lt;/P&gt;
&lt;P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: Consolas, "Courier New", Courier, Monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: Consolas, "Courier New", Courier, Monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;

&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;            Pipeline pipe = runspace.CreatePipeline();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;            Command command = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Command(&lt;SPAN class=str&gt;"Get-DeurellCustomCmdlet"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;            command.Parameters.Add(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; CommandParameter(&lt;SPAN class=str&gt;"TheParam"&lt;/SPAN&gt;, &lt;SPAN class=str&gt;"TheValue"&lt;/SPAN&gt;));&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;            pipe.Commands.Add(command);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;            Collection&amp;lt;PSObject&amp;gt; results = pipe.Invoke();&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Kan det bli mycket enklare? Stanna kvar! Detta är sjukt coolt... Vad vi kan göra nu är att implementera en "&lt;A href="http://www.dofactory.com/Patterns/PatternCommand.aspx" mce_href="http://www.dofactory.com/Patterns/PatternCommand.aspx"&gt;command-pattern&lt;/A&gt;" kompis i vår MMC app och låta denna spara alla utförda kommandon. Detta gör att vi kan "spela in" vilka cmdlet som körts under en viss period. Ett sjukt enkelt och coolt sätt att generera admin-macros (i form av PowerShell scripts) som alla admin dudes kan ta ut, smeta in i PowerShell, använda för att batcha en körning de "spelat in" i MMC och spela upp för alla datorer de önskar (så gör &lt;A href="http://spaces.live.com/" mce_href="http://spaces.live.com/"&gt;Windows Live Spaces&lt;/A&gt; med alla sina IIS:r). Coolt! Med lite mer jobb är det bara att göra en undo-funktionalitet i command implementationen så har man det oxo... Wicked! Såhär gör Exchange 12. Det rockar! Och alla "admin-dudes" blir till sig i trasorna... &lt;/P&gt;
&lt;P&gt;&lt;A href="file:///C:/Users/mikaeld.EUROPE/AppData/Roaming/Windows%20Live%20Writer/PostSupportingFiles/f06dfe25-eb2f-43dd-9aa3-5efbcab9b294/dfo[1][3].jpg" atomicselection="true"&gt;&lt;/A&gt;&lt;IMG title=DFO style="WIDTH: 455px; HEIGHT: 339px" height=339 alt=DFO src="http://www.mickesvarld.net/dfo.jpg" width=455 mce_src="http://www.mickesvarld.net/dfo.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Så gör som Exchange 12, &lt;A class="" href="http://www.dinnernow.net/" target=_blank mce_href="http://www.dinnernow.net"&gt;DinnerNow.net&lt;/A&gt; och unge herr Deurell! Ta hand om era admin-dudes, låt de få sin MMC-njutning, bli smekta av PowerShells varma hand, bli varma i trasorna&amp;nbsp;och leverera appar som faktiskt klappar Operations... Medhårs... Wicked...&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="COLOR: #7f7f7f; FONT-FAMILY: 'Arial','sans-serif'; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN"&gt;&lt;FONT size=3&gt;I love you in the morning&lt;BR&gt;When you're still hung over&lt;BR&gt;I love you in the morning&lt;BR&gt;When you're still strung out...&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="COLOR: #7f7f7f; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN-US"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1875415" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category><category domain="http://blogs.msdn.com/deurell/archive/tags/DFO/default.aspx">DFO</category><category domain="http://blogs.msdn.com/deurell/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Vista SP1 for VS2005 SP1 :-)</title><link>http://blogs.msdn.com/deurell/archive/2007/03/07/vista-sp1-for-vs2005-sp1.aspx</link><pubDate>Wed, 07 Mar 2007 11:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1826045</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1826045.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1826045</wfw:commentRss><description>&lt;P&gt;I just love the fact that we did a servicepack for the servicepack. Ok, we called it an update… It doesn’t matter,&amp;nbsp;&lt;STRONG&gt;I love it!&lt;/STRONG&gt;&amp;nbsp;I just&amp;nbsp;picked this up from &lt;A href="http://blogs.msdn.com/johanl/archive/2007/03/07/vs2005-sp1-update-for-vista-finns-att-ladda-hem.aspx" target=_blank mce_href="http://blogs.msdn.com/johanl/archive/2007/03/07/vs2005-sp1-update-for-vista-finns-att-ladda-hem.aspx"&gt;Johan Lindfors&lt;/A&gt; blog… Always the last to know! :-)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&amp;amp;displaylang=en"&gt;Vista SP1 for Visual Studio 2005 SP1&lt;FONT color=#800080&gt;&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; COLOR: #7f7f7f; FONT-FAMILY: 'Arial','sans-serif'; mso-bidi-font-size: 12.0pt; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN"&gt;Things replace things&lt;BR&gt;Days replace days&lt;BR&gt;Things replace things...&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1826045" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category></item><item><title>MacGyver, System.Speech och Vista!!!</title><link>http://blogs.msdn.com/deurell/archive/2007/03/01/macgyver-och-vista.aspx</link><pubDate>Thu, 01 Mar 2007 23:26:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1781174</guid><dc:creator>mikaeld</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1781174.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1781174</wfw:commentRss><description>&lt;p&gt;Ok, jag gjorde ett ärligt försök att hitta ett nytt fritidsintresse igår&amp;hellip; Det sket sig rätt bra&amp;hellip; Så fort Love sov och jag &lt;a href="http://www.pandora.com/" target="_blank"&gt;pandorat&lt;/a&gt; iväg började jag fundera på sånadär &amp;ldquo;baby-watch&amp;rdquo; grejjer. Ni vet, man stuffar in dom i barnets säng och sedan går man på afterski med en walkie-talkie i fickan&amp;hellip; Eller nåt&amp;hellip; Jag har aldrig behövt någon, men det stör mig alltid att man skall köpa så mycket prylar när jag redan sitter på det coolase. En Vista Ultimate, den senaste smart-phonen och en såndär lam örongrejj som managementkonsulter drömmer våta drömmar om&amp;hellip; &lt;/p&gt;
&lt;p&gt;Jag tänkte, MacGyver&amp;hellip; Jag tänkte&amp;hellip; Jag kan göra en egen! Hur svårt kan det vara&amp;hellip;&lt;/p&gt;
&lt;p&gt;1. Lägg management-öron-grejjen bredvid Loves kudde.&lt;br /&gt;2. Koppla upp den med blåtand till min laptop med Windows Vista Ultimate (älskar det namnet (och att den tillför värdet att man kan ha rörliga björnar som äter fisk på desktoppen!))&lt;br /&gt;3. Skriva en app som känner av ljudnivån och larmar när Love skriker.&lt;br /&gt;4. Attacha ett ljudklipp med skriket och skicka till min mail&amp;hellip;&lt;br /&gt;5. Mailet kommer att poppa upp i min smartphone via push-mail och jag kan kolla vem han ropar på&amp;hellip; Och agera! &lt;/p&gt;
&lt;p&gt;&lt;img alt="EarThing_thumb" src="http://blogs.msdn.com/blogfiles/deurell/earThing_thumb.jpg" align="textBottom" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Min första tanke var att skriva en klass som wrappade Mixer API:t och använda;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/style&gt;

&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;        [DllImport(&lt;span class="str"&gt;"winmm.dll"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; Int32 mixerGetLineInfo(IntPtr hmxobj,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                                                     &lt;span class="kwrd"&gt;ref&lt;/span&gt; MIXERLINE pmxl, UInt32 fdwInfo);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;för att kunna komma åt en lina och sedan sampla ut var som rör sig där, ta något slags medelvärde och skruva ihop min egen recording volume kontroll. Mixer API:t är riktigt, riktigt hårigt. Jag gjorde en sak med det för ett tag sedan och har fortfarande mardrömmar. Jag tänkte.. Vista rockar! Det måste finnas något enklare sätt&amp;hellip;&lt;/p&gt;
&lt;p&gt;Vad sägs om Speech APIt?&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;            recognizer = &lt;span class="kwrd"&gt;new&lt;/span&gt; SpeechRecognizer();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            recognizer.AudioLevelUpdated += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;AudioLevelUpdatedEventArgs&amp;gt;(recognizer_AudioLevelUpdated);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Allt som behövs för att dra igång en SpeechRecognizer och hooka en handler till när Love börjar skrika! Efter&amp;nbsp;30 minuter hade jag applikationen klar&amp;hellip;&lt;br /&gt;&lt;img alt="Rascal2" src="http://blogs.msdn.com/blogfiles/deurell/rascal2_small.jpg" align="textBottom" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Hela klassen ser ut såhär:&lt;/p&gt;
&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Speech.Recognition;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; RascalMonitor {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SoundMonitor {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; SpeechRecognizer recognizer;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; alarmLevel = 50;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;RascalEventArgs&amp;gt; Alarm;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; EventHandler&amp;lt;RascalEventArgs&amp;gt; AudioLevelChanged;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; AlarmLevel {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; alarmLevel; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            set { alarmLevel = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; SoundMonitor(&lt;span class="kwrd"&gt;int&lt;/span&gt; alarmLevel) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;            recognizer = &lt;span class="kwrd"&gt;new&lt;/span&gt; SpeechRecognizer();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            recognizer.AudioLevelUpdated += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;AudioLevelUpdatedEventArgs&amp;gt;(recognizer_AudioLevelUpdated);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; SoundMonitor() : &lt;span class="kwrd"&gt;this&lt;/span&gt;(50) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; recognizer_AudioLevelUpdated(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, AudioLevelUpdatedEventArgs e) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;            &lt;span class="kwrd"&gt;int&lt;/span&gt; soundLevel = recognizer.AudioLevel;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (AudioLevelChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                AudioLevelChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; RascalEventArgs(e.AudioLevel));&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (soundLevel &amp;gt; alarmLevel) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                &lt;span class="kwrd"&gt;if&lt;/span&gt; (Alarm != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                    Alarm(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; RascalEventArgs(e.AudioLevel));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sen var det bara att kicka fram en konsoll klient och köra. Sa jag att det är en kakbit att via &lt;strike&gt;System.Speech&lt;/strike&gt; Managed DirectSound, spela in en minut av skrik efter att ljudnivån passerat en acceptabel nivå, attacha det till mailet och skicka hela kakan? Så kallt!&lt;/p&gt;
&lt;p&gt;Ni kan hitta källkod till projektet &lt;a href="http://www.mickesvarld.net/rascalalarm.zip" target="_blank"&gt;här&lt;/a&gt;&amp;hellip; En annan cool sak är att det krävs två rader c# kod för att få Vista att börja tugga!!!&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;            synth.SetOutputToDefaultAudioDevice();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;            synth.SpeakAsync(&amp;ldquo;I love this company!!!&amp;rdquo;);            &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Coolt! Jag behöver inget nytt fritidsintresse&amp;hellip; ;-) &lt;/p&gt;
&lt;p&gt;PS. Love utlöste larmet 3 gånger (på en alarmnivå på 40), sen stängde jag butiken, tog in honom till mig och somnade&amp;hellip; En bra kväll!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1781174" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category></item><item><title>Sexiga saker... Som licensiering av komponenter!</title><link>http://blogs.msdn.com/deurell/archive/2007/02/22/sexiga-saker-som-licensiering-av-komponenter.aspx</link><pubDate>Fri, 23 Feb 2007 00:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1743692</guid><dc:creator>mikaeld</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1743692.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1743692</wfw:commentRss><description>&lt;P&gt;En dag i veckan leker jag "Ask The Expert"&amp;nbsp;hos ett stort företag. Jag sitter på en blå stol och en massa trevliga människor kommer med allsköns frågor kring utveckling på vår plattform. Det sköna är att det ena gången kan vara en hårig ATL-fråga,&amp;nbsp;eller varför IE6 beter sig weird om man kör under en 3G switch och&amp;nbsp;JScript runtime körs i&amp;nbsp;en minnesarea över 2 gig och i nästa sekund en klurig WinDBG fråga om någon intrikat detalj som jag inte sprungit på innan. Högt och lågt, vitt och brett, svårt och lätt… Cool! I tisdags kom det en bra fråga kring licenshantering i .net. När jag fick den frågan kändes det som om jag var med i "Ask the Looser" istället... Har ägnat hur mycket tid som helst för att förkovra mig i WCF, WF och våra andra kärleksfulla teknologier men när det gäller en osexig, lite halvtråkig sak som licensiering så hade jag noll koll... Dåligt...&lt;/P&gt;
&lt;P&gt;I COM-världen fanns det från början ingen licenshantering... alls... men med COM2 infördes en kall hantering i form en bunt instuffade metoder under IClassFactory2 som blandannat gjorde att man fick den där schyssta nag-screenen när man ville använda kontroller i MFC, VB eller (på tal om sexig) Visual FoxPro, när man t.ex. försökte använda en kontroll som fick köra runtime, men inte fick köra i designläge...&lt;/P&gt;
&lt;P&gt;I detta fall ville kunden använda någon form av licenshantering för att hantera licensiering av WPF kontroller. Det&amp;nbsp;schyssta är att detta är inbyggt i .net framework. Och det funkar för ALLA era klasser... Inte bara WPF och UI stuff... Och är löjligt enkelt att använda... Gör såhär..&lt;/P&gt;
&lt;P&gt;Välj ut en klass att licensiera, tagga upp klassen med ett LicenseProvider attribut och skicka in din LicenseProvider, gör en koll i konstruktorn och glöm inte att disposa licensen... Klart! &lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;STYLE type=text/css&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }
&lt;/STYLE&gt;

&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.ComponentModel;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; LicensedClass;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; MV.LicenseStuff {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;    [LicenseProvider(&lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt; (MyCustomLicenseProvider))]&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; LicensedClass : IDisposable {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; License license;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; LicensedClass() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;            license = LicenseManager.Validate(&lt;SPAN class=kwrd&gt;typeof&lt;/SPAN&gt; (LicensedClass), &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;            Console.WriteLine(&lt;SPAN class=str&gt;"This will only be done if the class is licensed dude!"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  14:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  15:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; TheMethodEveryoneWantsToCall() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  16:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=str&gt;"Hey, you have a license dude!"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  17:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  18:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  19:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Dispose() {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  20:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (license != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  21:  &lt;/SPAN&gt;                license.Dispose();&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  22:  &lt;/SPAN&gt;                license = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  23:  &lt;/SPAN&gt;            }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  24:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  25:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  26:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Cool! För att implementera en egen LicenseProvider med en kärleksfull licensieringsalgoritm är det bara att ärva från LicFileLicenseProvider och overrida IsKeyValid. Ni vill nog fundera på att skydda licensieringsalgoritmen på nåt schysst sätt, kanske via en Licensing Web Service så att det inte blir en kakbit att reflecta (är detta ett verb?) den.&amp;nbsp;&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; System.ComponentModel;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;namespace&lt;/SPAN&gt; LicensedClass {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;    &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;class&lt;/SPAN&gt; MyCustomLicenseProvider : LicFileLicenseProvider {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; IsKeyValid(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; key, Type type) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (key != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;) {&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;                &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; key.StartsWith(&lt;SPAN class=str&gt;"myChilledOutLicenseAlgorithmStuff"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;            }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  10:  &lt;/SPAN&gt;            &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  11:  &lt;/SPAN&gt;        }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  12:  &lt;/SPAN&gt;    }&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;  13:  &lt;/SPAN&gt;}&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;Det enda som fattas nu är en licensfil… Det går givetvis att anpassa vart denna laddas ifrån genom att overrida en liten metod i LicenseProviden, ovan köper vi implementationen i basklassen som laddar&amp;nbsp;en LIC fil enligt nedan;&lt;/P&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;   &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; whereToLook = Path.GetDirectoryName(path) + &lt;SPAN class=str&gt;@"\" + type.FullName + "&lt;/SPAN&gt;.lic";&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (File.Exists(whereToLook)) …&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;path pekar på GetPathOfAssembly och givetvis bör man dra det hela till nästa nivå om man vill implementera en licenseprovider värd namnet, men detta ger basen för att implementera licenshantering i ALLA era .net klasser, inklusive rockande WPF kontroller… Inte nytt… Inte sexigt… Men vackert!&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;(Eller enligt posten innan... Bespara er allt detta och bege&amp;nbsp;er till t.ex. till unge herr Appleman på &amp;nbsp;&lt;/FONT&gt;&lt;A href="http://www.desaware.com/products/licensingsystem/index.aspx" mce_href="http://www.desaware.com/products/licensingsystem/index.aspx"&gt;&lt;FONT size=3&gt;http://www.desaware.com/products/licensingsystem/index.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;)&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Ni kan hitta ett projekt med aktuell kod här:&lt;BR&gt;&lt;A href="http://www.mickesvarld.net/LicensedClass.zip" mce_href="http://www.mickesvarld.net/LicensedClass.zip"&gt;File Attachment: LicensedClass.zip (21 KB)&lt;/A&gt;…&lt;/P&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: #7f7f7f; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN-US"&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: #7f7f7f; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN-US"&gt;So this is where you are, and this is where I am&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: #7f7f7f; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN-US"&gt;So this is where you are, and this is where I've been&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 11pt; COLOR: #7f7f7f; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: text1; mso-themetint: 128; mso-ansi-language: EN-US"&gt;Somewhere between unsure and a hundred…&lt;/SPAN&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1743692" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category></item><item><title>Workflow Foundation</title><link>http://blogs.msdn.com/deurell/archive/2007/01/25/workflow-foundation.aspx</link><pubDate>Thu, 25 Jan 2007 21:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1690657</guid><dc:creator>mikaeld</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1690657.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1690657</wfw:commentRss><description>&lt;P&gt;En vän och tidigare kollega (jag var en suspekt teamledare för ett arkitekturteam på &lt;A href="http://www.connecta.se/"&gt;Connecta &lt;/A&gt;&amp;nbsp;innan jag började på Microsoft)&amp;nbsp;har börjat skriva en hel del bra saker kring Workflow Foundation, kolla in Daniel Karlssons blog &lt;A href="http://workflowfoundation.blogspot.com/"&gt;här&lt;/A&gt;! Han är smart, trevlig, en hjälte på att beställa tapas och rockar i allmänhet. Kolla in!&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;&lt;EM&gt;Fitter, happier, more productive, &lt;BR&gt;comfortable,&lt;BR&gt;not drinking too much, &lt;BR&gt;regular exercise at the gym&lt;BR&gt;(3 days a week),&lt;BR&gt;getting on better with your associate employee contemporaries,&lt;BR&gt;at ease,&lt;BR&gt;eating well &lt;BR&gt;(no more microwave dinners and saturated fats), &lt;BR&gt;a patient better driver,&lt;BR&gt;a safer car&lt;BR&gt;(baby smiling in back seat),&lt;BR&gt;sleeping well&lt;BR&gt;(no bad dreams), &lt;BR&gt;no paranoia, &lt;BR&gt;careful to all animals&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1690657" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category></item><item><title>Hey dudes... It's C#... Real work! At last...</title><link>http://blogs.msdn.com/deurell/archive/2007/01/25/hey-dudes-it-s-c-real-work-at-last.aspx</link><pubDate>Thu, 25 Jan 2007 21:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1690652</guid><dc:creator>mikaeld</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/deurell/comments/1690652.aspx</comments><wfw:commentRss>http://blogs.msdn.com/deurell/commentrss.aspx?PostID=1690652</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;FONT face=Verdana size=2&gt;Ok, en weird sak med mitt jobb är att jag ena dagen kör en workshop om MSF, dagen efter debuggar produktionskod med windbg och en tredje hjälper en kund med någon intrikat .net detalj. När jag är "nere" tycker jag att jag är kass på precis "ALLT" istället för att vara bra på... "något". När jag är på topp däremot, får jag känslan av att jag verkligen rockar... (Iallafall ett litet, litet tag...) Grejjen är att detta ibland gör mig jävulsk förvirrad, samtidigt som det är en kick att det på något sjukt sätt fungerar...&amp;nbsp;Nog med flum, sprang på detta häromdagen och var tvungen att få dela med mig. Jämför detta med posten innan och se det som ett bevis på resonemanget ovan... :-)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;FONT face=Verdana size=2&gt;Under .net fwk 1.1 var det möjligt att göra följande:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;[StrongNameIdentityPermission(SecurityAction.Demand, PublicKey=Product .PublicKey)] &lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;class&lt;/SPAN&gt; ThePseudoSecureClass&lt;BR&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;...&lt;BR&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Detta gjorde att vi kunde "hindra" anrop från fientliga assemblies. Under .net fwk 2.0&amp;nbsp;ändrades detta&amp;nbsp;beteende till några kunders stora förtret... Modellen funkar nu bara om den anropande assemblys kör under "non full trust). Om vi kör under full trust är det bara att rocka på!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Det roliga i "kråksången" (en ungdomlig kommentar igen Micke!) är att allt var fake! :-) Även under .net fwk 1.1 är det bara en påhittat säkerhetsmodell då det gick alldeles lysande att anropa metoden via reflection (So much for security). Så vi kollade på detta (mer av att slå ihop feta huvuden) och till 2.0 tog vi helt enkelt bort det, genom att bara tillåta detta beteende från assemblies som kör under "non full trust" från Internet eller intranet zones. Vilket gör modellen ehmmmm... Mindre intressant... ;-)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hur kan vi då fixa detta? Detta funkar för mig... &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;class&lt;/SPAN&gt; TheClass&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; TheClass ()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assembly calling &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; System.Reflection.Assembly.GetCallingAssembly();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assembly executing &lt;SPAN style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; System.Reflection.Assembly.GetExecutingAssembly();&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/SPAN&gt;(calling.GetName().GetPublicKey().ToString().Equals(executing.GetName().GetPublicKey().ToString()))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//continue dude&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&lt;/SPAN&gt; &lt;SPAN style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; Exception(&lt;SPAN style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"You're not allowed dude!"&lt;/SPAN&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/SPAN&gt;&lt;FONT face=Verdana size=2&gt;Funkar det för dig?&lt;BR&gt;&lt;EM&gt;(Then again... You could inject the public key with ILASM... And you would be scre#¤d anyways... ;-))&lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;&lt;EM&gt;You're a face in the distance I hope to recognize &lt;BR&gt;It's like running through deep water trying to look into your eyes &lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;&lt;EM&gt;I've only got this morning to live &lt;BR&gt;Look at all the colours at my fingertips &lt;BR&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;&lt;EM&gt;I don't want to stand still &lt;BR&gt;I just want to freewheel &lt;BR&gt;I don't want to lose this&lt;/EM&gt; &lt;/FONT&gt;&lt;FONT face=Verdana color=#808080 size=2&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1690652" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/deurell/archive/tags/.net/default.aspx">.net</category></item></channel></rss>