<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Misc Tech Stuff</title>
        <link>http://geekswithblogs.net/davenet/category/7767.aspx</link>
        <description>Misc Tech Stuff</description>
        <language>en-US</language>
        <copyright>Dave Redding</copyright>
        <managingEditor>DavidARedding@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Hot Damn!!</title>
            <link>http://geekswithblogs.net/davenet/archive/2008/05/12/122075.aspx</link>
            <description>&lt;p&gt;I know a WMDODN (West Michigan Day of .Net) Post is in order, but that can wait.  check this out!&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://blogs.msdn.com/xna/archive/2008/05/07/announcing-xna-game-studio-3-0-community-technical-preview-ctp.aspx"&gt;http://blogs.msdn.com/xna/archive/2008/05/07/announcing-xna-game-studio-3-0-community-technical-preview-ctp.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Finally, we can start building games for our zunes! WOOT!  I expect to create a talk on the topic very soon&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122075"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=122075" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/davenet/aggbug/122075.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Redding</dc:creator>
            <guid>http://geekswithblogs.net/davenet/archive/2008/05/12/122075.aspx</guid>
            <pubDate>Mon, 12 May 2008 14:14:12 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/davenet/comments/122075.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/davenet/archive/2008/05/12/122075.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/davenet/comments/commentRss/122075.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/davenet/services/trackbacks/122075.aspx</trackback:ping>
        </item>
        <item>
            <title>Watashi no "IL Code" seksu desu</title>
            <link>http://geekswithblogs.net/davenet/archive/2008/03/31/120885.aspx</link>
            <description>&lt;p&gt;    So, I may not be entirely up on my un-couth Japanese sayings, but one thing is for sure, IL code, to the average developer (&lt;em&gt;Read: Me&lt;/em&gt;) might as well be written in the same Romaji thats in the title.  That is, it's hard to make heads or tails of, and since you most likely never, or only rarely look at it, you get very little opportunity to actually study it.  I've been the same way for the past few years, acknowledging that IL exists, and just like that ugly friend, I don't actually acknowledge there being a relationship between "It" and I in public.&lt;/p&gt;
&lt;p&gt;    That all changed for me last Friday when my buddy Joshua Haynes dropped me a note abut my "&lt;a href="http://blog.mrdaveredding.net/archive/2008/03/11/120462.aspx"&gt;Unloved Operators&lt;/a&gt;" Tech in 5 minutes post .  He was interested enough in how the ?? operator stacks up against the if(x==null) else structure that, he compiled an example and then sent me the IL code, looking for my opinion.  &lt;/p&gt;
&lt;p&gt;    So I was stuck.  I could not admit defeat because of my ignorance of IL.  So I leapt into action, quickly throwing out all the &lt;a href="http://www.urbandictionary.com/define.php?term=TLA"&gt;TLA&lt;/a&gt;'s I could in an attempt to undermine my friends intelligence.  He quickly blocked, pivoted and swatted away my attack.  Before he could completely recover I attempted the Clinton-Dodge-the-issue move I had learned from CNN, but Joshuah quickly saw through funny analogy's and interesting tangents and held his ground firmly, so....I gave in and made a trip to the &lt;strike&gt;oracle &lt;/strike&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=IL+Code+%2B+Monkeys+are+Sexy"&gt;Google&lt;/a&gt;.  Come to find out, it can be difficult to research an answer, as compared to just pulling out of god knows where.  But I think that I figured out how do answer Josh's imposing "&lt;em&gt;What do you think?&lt;/em&gt;" question.  below is the code and the IL that he sent me.&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Person myself = null;&lt;br /&gt;
Person myFriend = new Person("Johhny", "Cash");&lt;br /&gt;
Person newFriend = myself ?? myFriend;&lt;br /&gt;
Console.WriteLine("The new Friend likes: {0}", newFriend.FullName());&lt;br /&gt;
&lt;br /&gt;
if (myself != null)&lt;br /&gt;
   newFriend = myself;&lt;br /&gt;
else&lt;br /&gt;
   newFriend = myFriend;&lt;br /&gt;
Console.WriteLine("The new Friend likes: {0}", newFriend.FullName());&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;IL_0012:  stloc.1&lt;br /&gt;
  IL_0013:  ldloc.0&lt;br /&gt;
  IL_0014:  dup&lt;br /&gt;
  IL_0015:  brtrue.s   IL_0019&lt;br /&gt;
  IL_0017:  pop&lt;br /&gt;
  IL_0018:  ldloc.1&lt;br /&gt;
  IL_0019:  stloc.2&lt;br /&gt;
  IL_001a:  ldstr      "The new Friend likes: {0}"&lt;br /&gt;
  IL_001f:  ldloc.2&lt;br /&gt;
  IL_0020:  callvirt   instance string Test.Person::FullName()&lt;br /&gt;
  IL_0025:  call       void [mscorlib]System.Console::WriteLine(string,&lt;br /&gt;
                                                                object)&lt;br /&gt;
  IL_002a:  nop&lt;br /&gt;
  IL_002b:  ldloc.0&lt;br /&gt;
  IL_002c:  ldnull&lt;br /&gt;
  IL_002d:  ceq&lt;br /&gt;
  IL_002f:  stloc.3&lt;br /&gt;
  IL_0030:  ldloc.3&lt;br /&gt;
  IL_0031:  brtrue.s   IL_0037&lt;br /&gt;
  IL_0033:  ldloc.0&lt;br /&gt;
  IL_0034:  stloc.2&lt;br /&gt;
  IL_0035:  br.s       IL_0039&lt;br /&gt;
  IL_0037:  ldloc.1&lt;br /&gt;
  IL_0038:  stloc.2&lt;br /&gt;
  IL_0039:  ldstr      "The new Friend likes: {0}"&lt;br /&gt;
  IL_003e:  ldloc.2&lt;br /&gt;
  IL_003f:  callvirt   instance string Test.Person::FullName()&lt;br /&gt;
  IL_0044:  call       void [mscorlib]System.Console::WriteLine(string,&lt;br /&gt;
                                                                object)&lt;br /&gt;
The top is the ?? test and below is if statements. What do you think?&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;   So, starting from the top, I began to investigate what each call was.&lt;/p&gt;
&lt;p&gt;    The first thing i needed to figure out was, what was the "IL_xxx" marker? simple, line numbers, easy enough.  Next up, what does this mean:&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;brtrue.s   IL_0037&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;a little googling and i found that "&lt;em&gt;br&lt;/em&gt;" means "&lt;em&gt;Branch&lt;/em&gt;" so "&lt;em&gt;brtrue"&lt;/em&gt; must mean "&lt;em&gt;True branch from a decision&lt;/em&gt;" (&lt;em&gt;the .s seems to indicate Short form, or something of that nature&lt;/em&gt;).  So combine that with a line number and we have a basic go-to statement of&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;IF True GoTo: IL_0037&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Ok, so that tackles the low hanging fruit.  The next thing on the list was these&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;stloc.x&lt;br /&gt;
ldloc.x&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;To google for these, i had to rack my brain for a bit.  I discovered that there is an &lt;a href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes_fields.aspx"&gt;OpCodes &lt;/a&gt;object that lives in the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.aspx"&gt;system.refelction.emit namespace&lt;/a&gt;.  And surprisingly enough, it has codes that match what I'm seeing the the IL.  So I quickly discovered the following entries.&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt; &lt;/p&gt;
&lt;table id="memberList" frame="lhs" class="members"&gt;
    &lt;tbody&gt;
        &lt;tr data="public;static;declared;"&gt;
            &lt;td&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl481" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe170774_c|ctl00_rs1_mainContentContainer_ctl481',this);" href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes.stloc_0.aspx"&gt;Stloc_0&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;Pops the current value from the top of the evaluation stack and stores it in a the local variable list at index 0.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p dir="ltr"&gt; &lt;/p&gt;
&lt;table id="memberList" frame="lhs" class="members"&gt;
    &lt;tbody&gt;
        &lt;tr data="public;static;declared;"&gt;
            &lt;td&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl413" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe170774_c|ctl00_rs1_mainContentContainer_ctl413',this);" href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes.ldloc_0.aspx"&gt;Ldloc_0&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;Loads the local variable at index 0 onto the evaluation stack.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Alright, so basically, both of these commands manipulate the Stack (&lt;em&gt;more on "The stack vs The Heap" in another post&lt;/em&gt;).  &lt;img style="FLOAT: right" height="140" alt="Stack, from wikipedia" width="164" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Data_stack.svg/391px-Data_stack.svg.png" /&gt; For now, lets just call the Stack = Fast memory but limited The Heap =Slow Memory, but massive.  Think of the stack as a tower of single bricks.  Each brick represents a single amount of data.  When you "Pop" an item of the stack you grab the top most item and remove it (&lt;em&gt;in our case, we also "Pop" from an indexed item&lt;/em&gt;), when you Push (&lt;em&gt;again, in our situation "Load into"CEQ Compares&lt;/em&gt;) your putting something. &lt;/p&gt;
&lt;p dir="ltr"&gt;There were a few other things to check out before I could move on.  For instance, what does ldnull and ceq do?&lt;/p&gt;
&lt;blockquote dir="ltr"&gt;
&lt;table id="memberList" frame="lhs" class="members"&gt;
    &lt;tbody&gt;
        &lt;tr data="public;static;declared;"&gt;
            &lt;td&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl420" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe170774_c|ctl00_rs1_mainContentContainer_ctl420',this);" href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes.ldnull.aspx"&gt;Ldnull&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;Pushes a null reference (type &lt;span class="keyword"&gt;O&lt;/span&gt;) onto the evaluation stack.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;table id="memberList" frame="lhs" class="members"&gt;
    &lt;tbody&gt;
        &lt;tr data="public;static;declared;"&gt;
            &lt;td&gt;&lt;a id="ctl00_rs1_mainContentContainer_ctl289" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe170774_c|ctl00_rs1_mainContentContainer_ctl289',this);" href="http://msdn2.microsoft.com/en-us/library/system.reflection.emit.opcodes.ceq.aspx"&gt;Ceq&lt;/a&gt;&lt;/td&gt;
            &lt;td&gt;Compares two values. If they are equal, the integer value 1 &lt;span class="keyword"&gt;(int32&lt;/span&gt;) is pushed onto the evaluation stack; otherwise 0 (&lt;span class="keyword"&gt;int32&lt;/span&gt;) is pushed onto the evaluation stack.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;    Ok, simple enough. LdNull puts a &lt;strong&gt;Null Reference Type&lt;/strong&gt; onto my stack, and Ceq checks for equality.  This will become important later on.&lt;/p&gt;
&lt;p dir="ltr"&gt;    Ok, so I'm armed with some basic implements of the trade, time to start interpreting.  The second section seems a bit more straight forward, so lets start there.&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;  &lt;strong&gt;IL_002a:  nop&lt;/strong&gt; &lt;br /&gt;
                    means no-operation, do nothing, waste time, etc...&lt;br /&gt;
  &lt;strong&gt;IL_002b:  ldloc.0&lt;br /&gt;
&lt;/strong&gt;                    Load into a local var whatever is in location 0 on the stack (&lt;em&gt;object "MySelf"&lt;/em&gt;)&lt;br /&gt;
  &lt;strong&gt;IL_002c:  ldnull&lt;/strong&gt;&lt;br /&gt;
                    Load a reference to a value on the heap, into my stack...&lt;br /&gt;
 &lt;strong&gt; IL_002d:  ceq&lt;br /&gt;
&lt;/strong&gt;                    Compare the last two values to each other and stuff them into the stack (&lt;em&gt;if x == null&lt;/em&gt;)&lt;br /&gt;
  &lt;strong&gt;IL_002f:  stloc.3&lt;br /&gt;
&lt;/strong&gt;                     Pop item at index 3 of the stack and into the local variable&lt;br /&gt;
  &lt;strong&gt;IL_0030:  ldloc.3&lt;/strong&gt;&lt;br /&gt;
                    Load the value stored in index 3 of the stack to the local variable stack (&lt;em&gt;the result of ceq&lt;/em&gt;)&lt;br /&gt;
  &lt;strong&gt;IL_0031:  brtrue.s   IL_0037&lt;br /&gt;
&lt;/strong&gt;                    if that value is 1, skip to line 37&lt;br /&gt;
  &lt;strong&gt;IL_0033:  ldloc.0&lt;br /&gt;
&lt;/strong&gt;                    Load the value stored at index 0 of variables into the stack (remember, the person "&lt;em&gt;MySelf&lt;/em&gt;")&lt;br /&gt;
 &lt;strong&gt; IL_0034:  stloc.2&lt;br /&gt;
&lt;/strong&gt;                    Pop the item at index 0 of the stack into the local variables (&lt;em&gt;what we just loaded);&lt;/em&gt;&lt;br /&gt;
  &lt;strong&gt;IL_0035:  br.s       IL_0039&lt;br /&gt;
&lt;/strong&gt;                    Branches us directly to line 39. do not pass go, do not collect $200&lt;br /&gt;
 &lt;strong&gt; IL_0037:  ldloc.1&lt;br /&gt;
&lt;/strong&gt;                    in our else statement, Load item at index 1 into the stack (&lt;em&gt;remember, make x = y if null , essentially)&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;  IL_0038:  stloc.2&lt;br /&gt;
                    &lt;/strong&gt;pop off item 2 from the stack into the local variable (&lt;em&gt;the actual variable getting assigned)&lt;/em&gt;&lt;br /&gt;
 &lt;strong&gt; IL_0039:  ldstr      "The new Friend likes: {0}"&lt;br /&gt;
                     &lt;/strong&gt;load  this string into the stack&lt;br /&gt;
  &lt;strong&gt;IL_003e:  ldloc.2&lt;br /&gt;
                    &lt;/strong&gt; load variable 2 into the stack (&lt;em&gt;the "NewFriend" object&lt;/em&gt;)&lt;br /&gt;
  &lt;strong&gt;IL_003f:  callvirt   instance string Test.Person::FullName()&lt;br /&gt;
                     &lt;/strong&gt;call the following method and load it's value&lt;br /&gt;
 &lt;strong&gt; IL_0044:  call       void [mscorlib]System.Console::WriteLine(string,&lt;br /&gt;
                                                                object)&lt;br /&gt;
                      &lt;/strong&gt;call this method, which has full access to the stack, so were passing it, in this order, the string "&lt;em&gt;The New Friend Likes:{0}&lt;/em&gt;" and then stack item[1] which = the return of Test.Person.FullName property.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;    Well, that was quite a bit.  So the simple rundown is....it does exactly what our code tells it to.  Interesting to note though, is were newing up an object of type "Null" and doing an object comparison between it and "Myself".  This isn't bad, but it's a tad slow.  You also have to load up every property and variable to see if they do actually equate.  Find in most situations, but like in the previous post, if you make a comparison of Type B to Null from Type A, when Type B Has references Type A doesn't, your going to error out...because your loading values in Type B, that Type A is ignorant of....GetItGotItGood.&lt;/p&gt;
&lt;p dir="ltr"&gt;     Ok, so we've seen what the commands do, lets take the short route examining how the ?? works in IL.&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;&lt;font face="Arial"&gt;  &lt;strong&gt;IL_0012:  stloc.1&lt;br /&gt;
  IL_0013:  ldloc.0&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;  IL_0014:  dup&lt;br /&gt;
                    &lt;/strong&gt;Duplicate the item on top of the stack and pushes the duplicate into the stack&lt;br /&gt;
&lt;strong&gt;  IL_0015:  brtrue.s   IL_0019&lt;br /&gt;
&lt;/strong&gt;                    If the values are the same (if the value of the object is empty like the first register) jump to 19&lt;br /&gt;
&lt;strong&gt;  IL_0017:  pop&lt;br /&gt;
&lt;/strong&gt;                    Else pop the first item off the stack and get rid of it&lt;br /&gt;
&lt;strong&gt;  IL_0018:  ldloc.1&lt;br /&gt;
  IL_0019:  stloc.2&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;  IL_001a:  ldstr      "The new Friend likes: {0}"&lt;br /&gt;
  IL_001f:  ldloc.2&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;  IL_0020:  callvirt   instance string Test.Person::FullName()&lt;br /&gt;
  IL_0025:  call       void [mscorlib]System.Console::WriteLine(string,&lt;br /&gt;
                                                                object)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;&lt;font face="Arial"&gt;    First off, we have obviously fewer instructions. Secondly, and most important, notice that were not doing any object comparisons or loading any objects from the heap.  so the breakdown after examining the two IL statements is this&lt;/font&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p dir="ltr"&gt;&lt;font face="Arial"&gt;If(x == Null) is like saying (If object x is the same as object Null)&lt;br /&gt;
and&lt;br /&gt;
x??y is like saying (If object x is as empty as Brittney Spears head)&lt;/font&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;&lt;font face="Arial"&gt;    So in short, ?? is faster, and easier to evaluate because were only comparing it to an empty value in the stack, not a reference type.  Obviously the speed gain is minuscule, but it's still there.&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;font face="Arial"&gt;    Ok, so IL probably will only help you gain geek cred and debug issues that you'd rather not be debugging.  But understanding IL code is worth serious geek cred, and helps you prove (or dis-prove) your theories on how your .net code works.   And hey, chicks dig the serious geek ;)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120885"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120885" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/davenet/aggbug/120885.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Redding</dc:creator>
            <guid>http://geekswithblogs.net/davenet/archive/2008/03/31/120885.aspx</guid>
            <pubDate>Mon, 31 Mar 2008 14:52:29 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/davenet/comments/120885.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/davenet/archive/2008/03/31/120885.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/davenet/comments/commentRss/120885.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/davenet/services/trackbacks/120885.aspx</trackback:ping>
        </item>
        <item>
            <title>Microsoft announces Open Protocol Specfication</title>
            <link>http://geekswithblogs.net/davenet/archive/2008/02/21/119858.aspx</link>
            <description>&lt;p&gt;The link explains it all&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/cc203350.aspx"&gt;http://msdn2.microsoft.com/en-us/library/cc203350.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p&gt;As a developer, you now have full access to the information about Open Application Programming Interfaces (APIs) and Open Protocols. All Windows client operating system API documentation is now available on this MSDN website.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;Wow!!!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119858"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119858" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/davenet/aggbug/119858.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Redding</dc:creator>
            <guid>http://geekswithblogs.net/davenet/archive/2008/02/21/119858.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 18:15:06 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/davenet/comments/119858.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/davenet/archive/2008/02/21/119858.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/davenet/comments/commentRss/119858.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/davenet/services/trackbacks/119858.aspx</trackback:ping>
        </item>
        <item>
            <title>What I've learned from bloggin'</title>
            <link>http://geekswithblogs.net/davenet/archive/2008/02/21/119845.aspx</link>
            <description>&lt;p&gt;&lt;em&gt;    I know, 2 whole blog posts in 1 week, i'm going nuts!  Actually i'm trying to ramp up my blogging frequency, so keep an eye out for a few more tech in 5 min and other sheeeet.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;    If you would have asked me a little more than a year ago if i'd have a (psudo) active blogging habit, I would have laughed it off as something I "Should" do and dropped it.  So I still find it a little hard to believe that i've been at this for as long as I have.  &lt;/p&gt;
&lt;p&gt;    Now, while most bloggers seem to make a post in this vein targeted at non-bloggers. I'm not going to.  if you don't want to blog, don't.  Honestally, I'm not trying to convince anyone of anything and i'm narciscistic enough that I can truly say, I could give a shit less.  It's your decision to make and I fully support anyone taking on the daunting task of blogging, I also support everyone else who doesn't.&lt;/p&gt;
&lt;p&gt;    When considering starting a blog, I had the same excuses as everyone else:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;
    &lt;div&gt;I failed English in H.S., there is no way I could carry on with some kind of constant writing that was open to public scrutiny. &lt;/div&gt;
    &lt;/li&gt;
    &lt;li&gt;I don't have time. &lt;/li&gt;
    &lt;li&gt;Does the saying "&lt;em&gt;It's better to be thought  a fool than open your mouth and remove all doubt&lt;/em&gt;" mean anything to you? &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;    And the most pervasive argument people make to get out of blogging&lt;/p&gt;
&lt;p&gt;      4.    What do I have to say that has'nt already been said before? most likely in a better way than I could ever pen!&lt;/p&gt;
&lt;p&gt;        Bearing all that in mind, I finally succumbed to my buddy &lt;a title="Josh Holmes Blog" target="_blank" href="http://www.joshholmes.com"&gt;Josh Holmes&lt;/a&gt; pressure to start a blog.  It's been an interesting trip,  and I'd like to take a moment to share with you all what i've learned along the way.&lt;/p&gt;
&lt;p&gt;      1.) &lt;strong&gt;Whatever you write on your blog is inxoriabally tied to you and your name on the internet AND the real world.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;        Boy, was this a hard lesson learned.  Like many other people, I've grown accustomed to the annomity provided by the internet.  Like schisophrinic wearing a straight jacket looking for a bathroom, I've bumbled across the web acting and speaking in ways that just are not appropriate in polite company.  Which is fine, if your assuming annoyminity. But with a blog, especially a trade blog, you are not anyonomous, not even if you use a pen name.  Someone will know who you are and let others know and then BAM, your Real Life name is tied to your writings.  Point in case: the lambda expressions tech in 5 min offended a buddy of mine.  This buddy exists in Real Life.  We drink beers together, talk shit and hangout.  So to find out that he was pissed at my real life persona because of something that my internet one did...that was quite a shock.&lt;/p&gt;
&lt;p&gt;    2.) &lt;strong&gt;People are interested in what I have to say, even if they've read about the topic 20 times already.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;         The one thing I've found through blogging is that, people like options.  Like, what kind of car to drive, where to buy their hamburger, or where they go to drink.  That urge to have "Options" tend's people to look around.  Just because Jay says Vista Sucks for this reason and that, someone else may say it sucks for other reasons.  Every blog post (&lt;em&gt;except the ripped off from the authors site&lt;/em&gt;) is a unique perspective on the world around the author.  So, yeah, someone out there is going to talk about WPF, but is it you?&lt;/p&gt;
&lt;p&gt;    3.) &lt;strong&gt;I've never learned so much about technology so fast.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;         &lt;/strong&gt;There has never been a truer statement.  When writing my blog, especially the tech in 5 min, i'm forced to double check my assumptions and do a little research before I post to my blog.  You don't want to post mis-information, and you don't want to appear a hack, so you have to study.  Also, you have to stay on top of technology if thats your blogs focus, you don't want to become stale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;    &lt;/strong&gt;4.) &lt;strong&gt;Having a blog gives you geek cred.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;        Having a blog is a highly interactive deal.  It may not seem like it, but the next time your at a launch or usergroup and you mention your blog, bam, someone's going to check it out, and possibally comment.  And, since your in print (&lt;em&gt;sorta&lt;/em&gt;) you gain crediability.  Not only for the content of your blog, but for having the huavos to put your name out there and voice your opinion.&lt;/p&gt;
&lt;p&gt;    So, i'm not going to say, "Get out there and blog" or something crazy like that, but what I will say is that if your making excuses to not blog, then your only letting yourself down.  Blogging is strangly addicitve, a great way to network with people, a fantastic way to show people what you have to offer, an excellent opprtunity to enhance your communication skills and overall, gives you a voice on the internet.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119845"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119845" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/davenet/aggbug/119845.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Dave Redding</dc:creator>
            <guid>http://geekswithblogs.net/davenet/archive/2008/02/21/119845.aspx</guid>
            <pubDate>Thu, 21 Feb 2008 14:33:44 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/davenet/comments/119845.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/davenet/archive/2008/02/21/119845.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/davenet/comments/commentRss/119845.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/davenet/services/trackbacks/119845.aspx</trackback:ping>
        </item>
    </channel>
</rss>