<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>marklio - Fun</title>
    <link>http://www.marklio.com/marklio/</link>
    <description>better than the original</description>
    <image>
      <url>http://photos1.flickr.com/buddyicons/12488026@N00.jpg?1105565509</url>
      <title>marklio - Fun</title>
      <link>http://www.marklio.com/marklio/</link>
    </image>
    <language>en-us</language>
    <copyright>Mark Miller</copyright>
    <lastBuildDate>Tue, 16 Dec 2008 05:42:57 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>mark@marklio.com</managingEditor>
    <webMaster>mark@marklio.com</webMaster>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=bf401819-7984-4426-996b-4871810a381f</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,bf401819-7984-4426-996b-4871810a381f.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,bf401819-7984-4426-996b-4871810a381f.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=bf401819-7984-4426-996b-4871810a381f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=bf401819-7984-4426-996b-4871810a381f&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2960933442%2f" target="_blank">
            <img style="display: inline; margin-bottom: 5px; margin-left: 0px; margin-right: 5px" border="0" align="left" src="http://farm4.static.flickr.com/3296/2960933442_15ce15b05f.jpg" />
          </a> Today,
is my nephew’s birthday.  I had a great time a few weeks ago, visiting with my
Brother’s family in Midland.  I got to play with Landon and get to know him a
bit.  He’s a hoot.  He’s got a ton of energy, and just goes non-stop. 
If you’ve ever seen the movie “Flubber” (preferably the classic), he’s alot like that
stuff.
</p>
        <p>
Happy Birthday, Landon!
</p>
        <p>
[A quirk in my blog resulted in this post being posted much earlier this month, so
you may have already seen it.  Today is his REAL birthday]
</p>
        <p>
[humorously enough, another quirk caused the originally scheduled post to appear at
the correct date (although a bit late in the day)]
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=bf401819-7984-4426-996b-4871810a381f" />
      </body>
      <title>Happy Birthday Landon!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,bf401819-7984-4426-996b-4871810a381f.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,bf401819-7984-4426-996b-4871810a381f.aspx</link>
      <pubDate>Tue, 16 Dec 2008 05:42:57 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=bf401819-7984-4426-996b-4871810a381f&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2960933442%2f" target="_blank"&gt;&lt;img style="display: inline; margin-bottom: 5px; margin-left: 0px; margin-right: 5px" border="0" align="left" src="http://farm4.static.flickr.com/3296/2960933442_15ce15b05f.jpg"&gt;&lt;/a&gt; Today,
is my nephew’s birthday.&amp;nbsp; I had a great time a few weeks ago, visiting with my
Brother’s family in Midland.&amp;nbsp; I got to play with Landon and get to know him a
bit.&amp;nbsp; He’s a hoot.&amp;nbsp; He’s got a ton of energy, and just goes non-stop.&amp;nbsp;
If you’ve ever seen the movie “Flubber” (preferably the classic), he’s alot like that
stuff.
&lt;/p&gt;
&lt;p&gt;
Happy Birthday, Landon!
&lt;/p&gt;
&lt;p&gt;
[A quirk in my blog resulted in this post being posted much earlier this month, so
you may have already seen it.&amp;nbsp; Today is his REAL birthday]
&lt;/p&gt;
&lt;p&gt;
[humorously enough, another quirk caused the originally scheduled post to appear at
the correct date (although a bit late in the day)]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=bf401819-7984-4426-996b-4871810a381f" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,bf401819-7984-4426-996b-4871810a381f.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c72b4001-e6dd-44a6-a60c-3c0214998e9b</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c72b4001-e6dd-44a6-a60c-3c0214998e9b.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c72b4001-e6dd-44a6-a60c-3c0214998e9b.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c72b4001-e6dd-44a6-a60c-3c0214998e9b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=c72b4001-e6dd-44a6-a60c-3c0214998e9b&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f3067617288%2f" target="_blank">
            <img border="0" src="http://farm4.static.flickr.com/3073/3067617288_a54f391106.jpg" />
          </a>
        </p>
        <p>
Today, the little choncho turns 3! It really is unbelievable to me that she could
be this old.  We woke her up this morning, and gave her one of her presents,
some butterfly wings.  She really liked them.
</p>
        <p>
I’ll take a rare moment to brag about her publicly, not because I think she’s better
than your kid, or because I’m an awesome parent (I’m not), but because I love her
and I’m so proud of her.  She is so awesome and sweet and polite (most of the
time).  Even when she’s upset, she’ll say “thanks” when you hand her something. 
She’s beginning to read, can do some simple math, and loves to draw and paint (the
latter can become quite messy).  She builds the greatest things out of blocks
and legos.  We went to Red Robin on Sunday, and I asked her to circle the items
she wanted from the kids menu.  She circled mac ‘n cheese and oranges.
</p>
        <p>
Happy Birthday, Choncho!
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c72b4001-e6dd-44a6-a60c-3c0214998e9b" />
      </body>
      <title>Happy Birthday, Jenna!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c72b4001-e6dd-44a6-a60c-3c0214998e9b.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c72b4001-e6dd-44a6-a60c-3c0214998e9b.aspx</link>
      <pubDate>Tue, 02 Dec 2008 19:45:18 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c72b4001-e6dd-44a6-a60c-3c0214998e9b&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f3067617288%2f" target="_blank"&gt;&lt;img border="0" src="http://farm4.static.flickr.com/3073/3067617288_a54f391106.jpg"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Today, the little choncho turns 3! It really is unbelievable to me that she could
be this old.&amp;nbsp; We woke her up this morning, and gave her one of her presents,
some butterfly wings.&amp;nbsp; She really liked them.
&lt;/p&gt;
&lt;p&gt;
I’ll take a rare moment to brag about her publicly, not because I think she’s better
than your kid, or because I’m an awesome parent (I’m not), but because I love her
and I’m so proud of her.&amp;nbsp; She is so awesome and sweet and polite (most of the
time).&amp;nbsp; Even when she’s upset, she’ll say “thanks” when you hand her something.&amp;nbsp;
She’s beginning to read, can do some simple math, and loves to draw and paint (the
latter can become quite messy).&amp;nbsp; She builds the greatest things out of blocks
and legos.&amp;nbsp; We went to Red Robin on Sunday, and I asked her to circle the items
she wanted from the kids menu.&amp;nbsp; She circled mac ‘n cheese and oranges.
&lt;/p&gt;
&lt;p&gt;
Happy Birthday, Choncho!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c72b4001-e6dd-44a6-a60c-3c0214998e9b" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c72b4001-e6dd-44a6-a60c-3c0214998e9b.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=65e9edd3-21c0-4f6d-bcc0-6e9f11144591</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,65e9edd3-21c0-4f6d-bcc0-6e9f11144591.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,65e9edd3-21c0-4f6d-bcc0-6e9f11144591.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=65e9edd3-21c0-4f6d-bcc0-6e9f11144591</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My brother-in-law posted a note on Facebook that was basically one of those silly
things you do and perpetuate across the internet.  I usually don’t take part
in such things, but this one seemed interesting, and I’ve been thinking about ways
to jumpstart my blogging again now that the embargo on all the cool stuff is lifted. 
So, I thought I would do it.  Here are the rules:
</p>
        <ul>
          <li>
Grab the book nearest you. Right now.</li>
          <li>
Turn to page 56.</li>
          <li>
Find the fifth sentence.</li>
          <li>
Post that sentence along with these instructions in a note to your wall. <em>(this
was on Facebook, so it is referring to that wall)</em></li>
          <li>
Don't dig for your favorite book, the coolest, the most intellectual. Use the CLOSEST.</li>
        </ul>
        <p>
So, it took me a while to determine which book was the “closest”, as my position is
roughly normal to the bookshelf in my office.  I finally decided to be honest
and pick the one that was really closest, but I will share another that was very close,
as it is a good segue into future blogs.
</p>
        <p>
The first (and official) one:
</p>
        <blockquote>
          <p>
Semiconductor materials at 0 K have basically the same structure as insulators – a
filled valence band separated from an empty conduction band by a band gap containing
no allowed energy states (Fig. 3-4).
</p>
          <p align="right">
            <em>Solid State Electronic Devices, Ben G. Streetman</em>
          </p>
        </blockquote>
        <p>
The second, and more relevant/interesting one:
</p>
        <blockquote>
          <p>
The shim’s algorithm for picking a version in the COM interoperability scenario is
much more straightforward – the latest version installed on the machine is always
used.
</p>
          <p align="right">
            <em>Customizing the Microsoft .NET Framework Common Language Runtime, Steven Pratschner</em>
          </p>
        </blockquote>
        <p>
What is amazing about this second one is that this is directly related to one of the
features I’ve been working on for CLR v4 (and yes, that is actually the 5th sentence
on page 56).  Namely, this feature is known as “in-process side by side” (or
in-proc SxS for short), and was announced publicly at PDC last month.  This feature
allows you to have more than version of the CLR loaded and running in a single process.
</p>
        <p>
This feature is primarily a compatibility feature, targeted precisely at the behavior
noted in the quote above.  When we use the latest version, we can break existing
COM objects.  Not only because of breaking changes we make (of which the number
is fairly small), but because of other, more subtle behavior dependencies.
</p>
        <p>
Previously, loading a CLR version into the process locked the process to that CLR
version.  Any other policy than “pick the latest” results in a load order dependency
problem that can result in “for sure” breaks because COM components targeting newer
runtimes cannot run on old runtimes.  So, clearly, that was the best choice of
policies.
</p>
        <p>
Now that we support multiple runtimes in the process (v2 and above), we can make a
smarter, more compatible choice about runtime activation.  The precise policies
are still being worked through, so I’ll avoid stating them explicitly, but you can
imagine us being able to make a much better choice about what runtime to activate
to run a given managed COM component.
</p>
        <p>
I’ll be posting more about this feature and it’s implications soon.  Feel free
to seed my future posts with questions in the comments.  Hopefully, this is the
jumpstart I needed.  As for the “game” above, feel free to do it, or ignore it. 
It won’t result in any difference to your luck, financial situation, or anything else.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=65e9edd3-21c0-4f6d-bcc0-6e9f11144591" />
      </body>
      <title>Random fun book thing and CLR In-Proc SxS</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,65e9edd3-21c0-4f6d-bcc0-6e9f11144591.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,65e9edd3-21c0-4f6d-bcc0-6e9f11144591.aspx</link>
      <pubDate>Fri, 21 Nov 2008 01:25:12 GMT</pubDate>
      <description>&lt;p&gt;
My brother-in-law posted a note on Facebook that was basically one of those silly
things you do and perpetuate across the internet.&amp;nbsp; I usually don’t take part
in such things, but this one seemed interesting, and I’ve been thinking about ways
to jumpstart my blogging again now that the embargo on all the cool stuff is lifted.&amp;nbsp;
So, I thought I would do it.&amp;nbsp; Here are the rules:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Grab the book nearest you. Right now.&lt;/li&gt;
&lt;li&gt;
Turn to page 56.&lt;/li&gt;
&lt;li&gt;
Find the fifth sentence.&lt;/li&gt;
&lt;li&gt;
Post that sentence along with these instructions in a note to your wall. &lt;em&gt;(this
was on Facebook, so it is referring to that wall)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
Don't dig for your favorite book, the coolest, the most intellectual. Use the CLOSEST.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So, it took me a while to determine which book was the “closest”, as my position is
roughly normal to the bookshelf in my office.&amp;nbsp; I finally decided to be honest
and pick the one that was really closest, but I will share another that was very close,
as it is a good segue into future blogs.
&lt;/p&gt;
&lt;p&gt;
The first (and official) one:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Semiconductor materials at 0 K have basically the same structure as insulators – a
filled valence band separated from an empty conduction band by a band gap containing
no allowed energy states (Fig. 3-4).
&lt;/p&gt;
&lt;p align="right"&gt;
&lt;em&gt;Solid State Electronic Devices, Ben G. Streetman&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The second, and more relevant/interesting one:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The shim’s algorithm for picking a version in the COM interoperability scenario is
much more straightforward – the latest version installed on the machine is always
used.
&lt;/p&gt;
&lt;p align="right"&gt;
&lt;em&gt;Customizing the Microsoft .NET Framework Common Language Runtime, Steven Pratschner&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
What is amazing about this second one is that this is directly related to one of the
features I’ve been working on for CLR v4 (and yes, that is actually the 5th sentence
on page 56).&amp;nbsp; Namely, this feature is known as “in-process side by side” (or
in-proc SxS for short), and was announced publicly at PDC last month.&amp;nbsp; This feature
allows you to have more than version of the CLR loaded and running in a single process.
&lt;/p&gt;
&lt;p&gt;
This feature is primarily a compatibility feature, targeted precisely at the behavior
noted in the quote above.&amp;nbsp; When we use the latest version, we can break existing
COM objects.&amp;nbsp; Not only because of breaking changes we make (of which the number
is fairly small), but because of other, more subtle behavior dependencies.
&lt;/p&gt;
&lt;p&gt;
Previously, loading a CLR version into the process locked the process to that CLR
version.&amp;nbsp; Any other policy than “pick the latest” results in a load order dependency
problem that can result in “for sure” breaks because COM components targeting newer
runtimes cannot run on old runtimes.&amp;nbsp; So, clearly, that was the best choice of
policies.
&lt;/p&gt;
&lt;p&gt;
Now that we support multiple runtimes in the process (v2 and above), we can make a
smarter, more compatible choice about runtime activation.&amp;nbsp; The precise policies
are still being worked through, so I’ll avoid stating them explicitly, but you can
imagine us being able to make a much better choice about what runtime to activate
to run a given managed COM component.
&lt;/p&gt;
&lt;p&gt;
I’ll be posting more about this feature and it’s implications soon.&amp;nbsp; Feel free
to seed my future posts with questions in the comments.&amp;nbsp; Hopefully, this is the
jumpstart I needed.&amp;nbsp; As for the “game” above, feel free to do it, or ignore it.&amp;nbsp;
It won’t result in any difference to your luck, financial situation, or anything else.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=65e9edd3-21c0-4f6d-bcc0-6e9f11144591" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,65e9edd3-21c0-4f6d-bcc0-6e9f11144591.aspx</comments>
      <category>CLR</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c38884a9-c375-4bd9-9797-287888cf2369</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c38884a9-c375-4bd9-9797-287888cf2369.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c38884a9-c375-4bd9-9797-287888cf2369.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c38884a9-c375-4bd9-9797-287888cf2369</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I didn't get up an anniversary post yesterday because I was busy DOING stuff for my
anniversary this year.  Unbeknownst to Becky, I arranged to take the day off.
I sneakily got a late-morning massage appointment for her, and lined up a babysitter
(thanks, Molly) so we could go see a movie in the afternoon.  Everything went
off without a hitch.
</p>
        <p>
We went to see the latest Indiana Jones movie, which we enjoyed very much despite
the somewhat less than explanatory ending. We hadn't been to the theater to see a
movie since Pirates II.  But, we both agreed that we aren't missing much except
time alone and seeing the latest movies.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c38884a9-c375-4bd9-9797-287888cf2369" />
      </body>
      <title>9-year Anniversary (yesterday)</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c38884a9-c375-4bd9-9797-287888cf2369.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c38884a9-c375-4bd9-9797-287888cf2369.aspx</link>
      <pubDate>Fri, 25 Jul 2008 21:04:47 GMT</pubDate>
      <description>&lt;p&gt;
I didn't get up an anniversary post yesterday because I was busy DOING stuff for my
anniversary this year.&amp;nbsp; Unbeknownst to Becky, I arranged to take the day off.
I sneakily got a late-morning massage appointment for her, and lined up a babysitter
(thanks, Molly) so we could go see a movie in the afternoon.&amp;nbsp; Everything went
off without a hitch.
&lt;/p&gt;
&lt;p&gt;
We went to see the latest Indiana Jones movie, which we enjoyed very much despite
the somewhat less than explanatory ending. We hadn't been to the theater to see a
movie since Pirates II.&amp;nbsp; But, we both agreed that we aren't missing much except
time alone and seeing the latest movies.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c38884a9-c375-4bd9-9797-287888cf2369" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c38884a9-c375-4bd9-9797-287888cf2369.aspx</comments>
      <category>Announcements</category>
      <category>Becky</category>
      <category>Fun</category>
      <category>Movies</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some of my posts that I get the most recurring email/inquiries on are my <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3a89ecce-89a8-470e-a894-bc5cc86ce41d.aspx" target="_blank">various</a><a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c498e2e35-1590-4852-92e1-2212157c68f1.aspx" target="_blank">posts</a> about
the STDF (Standard Test Datalog Format) parser that I <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ce3601f31-231b-4a82-b5a7-1c31600ce25c.aspx" target="_blank">originally
created as an experiment back in 2005</a>.  After some help from a former collegue,
I am pleased to announce that this is finally available on CodePlex as <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.codeplex.com%2fLinqToStdf" target="_blank">LinqToStdf</a>!
</p>
        <p>
It is a managed library for processing STDF files, and gives you a model to explore
the data via Linq queries.  This means, you can leverage the wide variety of
managed languages (C#, VB, F#, JScript, IronPython, IronRuby, Managed C++, Boo, <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.dotnetlanguages.net%2fDNL%2fResources.aspx" target="_blank">etc</a>.)
to process the data in STDF files.  It also works in <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fsilverlight.net" target="_blank">Silverlight</a>! 
It has built-in support for the V4 spec, but it's highly extensible and should be
able to parse any version of the file format as well as custom records.  It can
be configured to be highly strict and throw on format errors, or be robust in the
face of issues that normal STDF processors would choke on to the point of being able
to detect and repair corruption on the fly.
</p>
        <p>
If that interests you, I'd love for you to drop by and take a deeper look at it and
get involved in its ongoing development.  I've already got at least one person
interested enough to contribute and ensure its success as a community project. 
There is currently a <a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;url=http%3a%2f%2fwww.codeplex.com%2fLinqToStdf%2fRelease%2fProjectReleases.aspx%3fReleaseId%3d13681" target="_blank">"beta"
release</a> available, and hopefully we'll whip it into shape enough to call it v1.0
soon.
</p>
        <p>
My hope is that this can be an adoption driver for .NET in the semiconductor industry
and that through this project I can be an ambassador for the CLR in that area.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f" />
      </body>
      <title>LinqToStdf now on CodePlex</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f.aspx</link>
      <pubDate>Fri, 20 Jun 2008 21:05:13 GMT</pubDate>
      <description>&lt;p&gt;
Some of my posts that I get the most recurring email/inquiries on are my &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3a89ecce-89a8-470e-a894-bc5cc86ce41d.aspx" target="_blank"&gt;various&lt;/a&gt; &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c498e2e35-1590-4852-92e1-2212157c68f1.aspx" target="_blank"&gt;posts&lt;/a&gt; about
the STDF (Standard Test Datalog Format) parser that I &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ce3601f31-231b-4a82-b5a7-1c31600ce25c.aspx" target="_blank"&gt;originally
created as an experiment back in 2005&lt;/a&gt;.&amp;nbsp; After some help from a former collegue,
I am pleased to announce that this is finally available on CodePlex as &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.codeplex.com%2fLinqToStdf" target="_blank"&gt;LinqToStdf&lt;/a&gt;!
&lt;/p&gt;
&lt;p&gt;
It is a managed library for processing STDF files, and gives you a model to explore
the data via Linq queries.&amp;nbsp; This means, you can leverage the wide variety of
managed languages (C#, VB, F#, JScript, IronPython, IronRuby, Managed C++, Boo, &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.dotnetlanguages.net%2fDNL%2fResources.aspx" target="_blank"&gt;etc&lt;/a&gt;.)
to process the data in STDF files.&amp;nbsp; It also works in &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fsilverlight.net" target="_blank"&gt;Silverlight&lt;/a&gt;!&amp;nbsp;
It has built-in support for the V4 spec, but it's highly extensible and should be
able to parse any version of the file format as well as custom records.&amp;nbsp; It can
be configured to be highly strict and throw on format errors, or be robust in the
face of issues that normal STDF processors would choke on to the point of being able
to detect and repair corruption on the fly.
&lt;/p&gt;
&lt;p&gt;
If that interests you, I'd love for you to drop by and take a deeper look at it and
get involved in its ongoing development.&amp;nbsp; I've already got at least one person
interested enough to contribute and ensure its success as a community project.&amp;nbsp;
There is currently a &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f&amp;amp;url=http%3a%2f%2fwww.codeplex.com%2fLinqToStdf%2fRelease%2fProjectReleases.aspx%3fReleaseId%3d13681" target="_blank"&gt;"beta"
release&lt;/a&gt; available, and hopefully we'll whip it into shape enough to call it v1.0
soon.
&lt;/p&gt;
&lt;p&gt;
My hope is that this can be an adoption driver for .NET in the semiconductor industry
and that through this project I can be an ambassador for the CLR in that area.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,45b930b6-bfd0-4aeb-9bb8-1e82b2ff9e5f.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=f5216e74-ce9f-4b7a-b1de-157ea51bf987</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,f5216e74-ce9f-4b7a-b1de-157ea51bf987.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,f5216e74-ce9f-4b7a-b1de-157ea51bf987.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=f5216e74-ce9f-4b7a-b1de-157ea51bf987</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been playing alot with beta 2 of <a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fsilverlight.net" target="_blank">Silverlight</a> 2,
and I've been totally amazed at the scenarios it enables.  Working hard down
inside the CLR engine, we're sometimes insulated from some of the innovation going
on higher in the stack and it blows us away when we do get a chance to see it.
</p>
        <p>
One of the very cool things in Silverlight is "<a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fblogs.msdn.com%2fexpression%2farchive%2f2008%2f06%2f07%2fwhat-s-new-in-deep-zoom-composer.aspx" target="_blank">Deep
Zoom</a>", which came from the <a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2flabs.live.com%2fSeadragon.aspx" target="_blank">SeaDragon</a> project
from Microsoft Research.  I decided to try it out myself on a very large panorama
that I made a long time ago in New Orleans.  Unfortunately, the current toolset
seems to trip over the large file size (20516x15291).  I'm trying to find out
the real story behind the limitation.  All I know right now is that smaller files
work.
</p>
        <p>
So, I decided to try to slice it up into smaller, manageable chunks and just butt
them against one another to simulate one large file.  The problem was that I
couldn't find a tool to do this that didn't also trip up over the size of the file. 
So, I wrote my own.  There are likely better ways to do this, this was just a
quick and dirty attempt to make something that didn't totally crawl to a halt due
to page faulting (or outright throw OutOfMemoryException).
</p>
        <p>
The code below is what I came up with.  I use <a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.drawing.bitmap.aspx" target="_blank">System.Drawing.Bitmap</a>,
lock the portions of the image I need, and do the data copying myself.  I ended
up with this solution because GDI+ (<a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.drawing.graphics.drawimage.aspx" target="_blank">DrawImage</a>)
seems to like to make alot of buffers (big ones in this case), and I couldn't fall
back on good ol' <a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms532278(VS.85).aspx" target="_blank">bitblt</a> because
I couldn't get the right kind of data structures without more copying of the data. 
This runs plenty fast and only takes up marginally more memory than it takes to represent
the original and the size of one of the destination tiles.
</p>
        <p>
Unfortunately, The <a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.windows.controls.multiscaleimage(VS.95).aspx" target="_blank">MultiScaleImage</a> does
some weirdness with image that are butted up against each other, and you get as much
as a whole pixel of "space" between them, depending on your zoom level. I'm still
looking into other possible workarounds. So, it's wasn't ultimately useful, but I
thought the code was interesting enough, and probably has academic usefulness. 
So, enough talk, here's the code:
</p>
        <div class="csharpcode">
          <pre class="alt">
            <span class="lnum"> 1: </span>
            <span class="kwrd">using</span> System;</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">using</span> System.Collections.Generic;</pre>
          <pre class="alt">
            <span class="lnum"> 3: </span>
            <span class="kwrd">using</span> System.Drawing;</pre>
          <pre>
            <span class="lnum"> 4: </span>
            <span class="kwrd">using</span> System.Drawing.Imaging;</pre>
          <pre class="alt">
            <span class="lnum"> 5: </span>
            <span class="kwrd">using</span> System.IO;</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">using</span> System.Linq;</pre>
          <pre class="alt">
            <span class="lnum"> 7: </span>
            <span class="kwrd">using</span> System.Runtime.InteropServices;</pre>
          <pre>
            <span class="lnum"> 8: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 9: </span>
            <span class="kwrd">namespace</span> ImageSlicer
{</pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="kwrd">static</span>
            <span class="kwrd">class</span> Extensions
{</pre>
          <pre class="alt">
            <span class="lnum"> 11: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">static</span> IEnumerable&lt;<span class="kwrd">int</span>&gt;
Times(<span class="kwrd">this</span><span class="kwrd">int</span> number) {</pre>
          <pre>
            <span class="lnum"> 12: </span>
            <span class="kwrd">for</span> (var
i = 0; i &lt; number; i++) <span class="kwrd">yield</span><span class="kwrd">return</span> i;</pre>
          <pre class="alt">
            <span class="lnum"> 13: </span> }</pre>
          <pre>
            <span class="lnum"> 14: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 15: </span> </pre>
          <pre>
            <span class="lnum"> 16: </span>
            <span class="kwrd">class</span> Program
{</pre>
          <pre class="alt">
            <span class="lnum"> 17: </span> [DllImport(<span class="str">"msvcrt.dll"</span>,
SetLastError = <span class="kwrd">false</span>)]</pre>
          <pre>
            <span class="lnum"> 18: </span>
            <span class="kwrd">static</span>
            <span class="kwrd">unsafe</span>
            <span class="kwrd">extern</span>
            <span class="kwrd">byte</span>*
memcpy(<span class="kwrd">byte</span>* dest, <span class="kwrd">byte</span>* src, <span class="kwrd">int</span> count);</pre>
          <pre class="alt">
            <span class="lnum"> 19: </span> </pre>
          <pre>
            <span class="lnum"> 20: </span>
            <span class="kwrd">static</span>
            <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args) {</pre>
          <pre class="alt">
            <span class="lnum"> 21: </span> var sourcePath = args.FirstOrDefault();</pre>
          <pre>
            <span class="lnum"> 22: </span>
            <span class="kwrd">if</span> (String.IsNullOrEmpty(sourcePath))
{</pre>
          <pre class="alt">
            <span class="lnum"> 23: </span> Console.WriteLine(<span class="str">"No
source image path provided"</span>);</pre>
          <pre>
            <span class="lnum"> 24: </span> ShowUsage();</pre>
          <pre class="alt">
            <span class="lnum"> 25: </span>
            <span class="kwrd">return</span>;</pre>
          <pre>
            <span class="lnum"> 26: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 27: </span>
            <span class="kwrd">if</span> (!File.Exists(sourcePath))
{</pre>
          <pre>
            <span class="lnum"> 28: </span> Console.WriteLine(<span class="str">"Source
image path doesn't exist"</span>);</pre>
          <pre class="alt">
            <span class="lnum"> 29: </span>
            <span class="kwrd">return</span>;</pre>
          <pre>
            <span class="lnum"> 30: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 31: </span> var
gridSizeStr = args.Skip(1).FirstOrDefault();</pre>
          <pre>
            <span class="lnum"> 32: </span>
            <span class="kwrd">int</span> gridSize
= 4;</pre>
          <pre class="alt">
            <span class="lnum"> 33: </span>
            <span class="kwrd">if</span> (gridSizeStr
!= <span class="kwrd">null</span> &amp;&amp; !<span class="kwrd">int</span>.TryParse(gridSizeStr, <span class="kwrd">out</span> gridSize))
{</pre>
          <pre>
            <span class="lnum"> 34: </span> Console.WriteLine(<span class="str">"Could
not convert {0} to a valid grid size"</span>,</pre>
          <pre class="alt">
            <span class="lnum"> 35: </span> gridSizeStr);</pre>
          <pre>
            <span class="lnum"> 36: </span>
            <span class="kwrd">return</span>;</pre>
          <pre class="alt">
            <span class="lnum"> 37: </span> }</pre>
          <pre>
            <span class="lnum"> 38: </span>
            <span class="kwrd">if</span> (gridSize
&lt; 2) {</pre>
          <pre class="alt">
            <span class="lnum"> 39: </span> Console.WriteLine(<span class="str">"The
grid size must be greater than 1."</span>);</pre>
          <pre>
            <span class="lnum"> 40: </span>
            <span class="kwrd">return</span>;</pre>
          <pre class="alt">
            <span class="lnum"> 41: </span> }</pre>
          <pre>
            <span class="lnum"> 42: </span>
            <span class="kwrd">try</span> {</pre>
          <pre class="alt">
            <span class="lnum"> 43: </span> Console.WriteLine(<span class="str">"Slicing
{0} into a {1}x{1} grid."</span>,</pre>
          <pre>
            <span class="lnum"> 44: </span> Path.GetFileName(sourcePath),
gridSize);</pre>
          <pre class="alt">
            <span class="lnum"> 45: </span> Console.WriteLine(<span class="str">"Loading..."</span>);</pre>
          <pre>
            <span class="lnum"> 46: </span>
            <span class="kwrd">using</span> (var
sourceBitmap = <span class="kwrd">new</span> Bitmap(sourcePath)) {</pre>
          <pre class="alt">
            <span class="lnum"> 47: </span> Console.WriteLine(<span class="str">"Source
Image: {0}x{1}"</span>,</pre>
          <pre>
            <span class="lnum"> 48: </span> sourceBitmap.Width,
sourceBitmap.Height);</pre>
          <pre class="alt">
            <span class="lnum"> 49: </span> var sliceWidth
= sourceBitmap.Width / gridSize;</pre>
          <pre>
            <span class="lnum"> 50: </span> var sliceHeight
= sourceBitmap.Height / gridSize;</pre>
          <pre class="alt">
            <span class="lnum"> 51: </span> Console.WriteLine(<span class="str">"Each
slice: {0}x{1}"</span>, sliceWidth, sliceHeight);</pre>
          <pre>
            <span class="lnum"> 52: </span>
            <span class="kwrd">int</span> tile
= 0;</pre>
          <pre class="alt">
            <span class="lnum"> 53: </span>
            <span class="kwrd">foreach</span> (var
row <span class="kwrd">in</span> gridSize.Times()) {</pre>
          <pre>
            <span class="lnum"> 54: </span>
            <span class="kwrd">foreach</span> (var
column <span class="kwrd">in</span> gridSize.Times()) {</pre>
          <pre class="alt">
            <span class="lnum"> 55: </span> Console.WriteLine(<span class="str">"Creating
{0} of {1} ({2},{3})"</span>,</pre>
          <pre>
            <span class="lnum"> 56: </span> ++tile, gridSize
* gridSize, column, row);</pre>
          <pre class="alt">
            <span class="lnum"> 57: </span>
            <span class="kwrd">using</span> (var
destBitmap = <span class="kwrd">new</span> Bitmap(sliceWidth, sliceHeight)) {</pre>
          <pre>
            <span class="lnum"> 58: </span> var
sourceData = sourceBitmap.LockBits(</pre>
          <pre class="alt">
            <span class="lnum"> 59: </span>
            <span class="kwrd">new</span> Rectangle(column
* sliceWidth,</pre>
          <pre>
            <span class="lnum"> 60: </span> row * sliceHeight, sliceWidth,</pre>
          <pre class="alt">
            <span class="lnum"> 61: </span> sliceHeight),</pre>
          <pre>
            <span class="lnum"> 62: </span> ImageLockMode.ReadOnly,
PixelFormat.Format24bppRgb);</pre>
          <pre class="alt">
            <span class="lnum"> 63: </span> var
destData = destBitmap.LockBits(</pre>
          <pre>
            <span class="lnum"> 64: </span>
            <span class="kwrd">new</span> Rectangle(0,
0, sliceWidth, sliceHeight),</pre>
          <pre class="alt">
            <span class="lnum"> 65: </span> ImageLockMode.WriteOnly,
sourceData.PixelFormat);</pre>
          <pre>
            <span class="lnum"> 66: </span>
            <span class="kwrd">unsafe</span> {</pre>
          <pre class="alt">
            <span class="lnum"> 67: </span>
            <span class="kwrd">byte</span>*
pSrc = (<span class="kwrd">byte</span>*)sourceData.Scan0.ToPointer();</pre>
          <pre>
            <span class="lnum"> 68: </span>
            <span class="kwrd">byte</span>*
pDest = (<span class="kwrd">byte</span>*)destData.Scan0.ToPointer();</pre>
          <pre class="alt">
            <span class="lnum"> 69: </span>
            <span class="kwrd">foreach</span> (var
line <span class="kwrd">in</span> sliceHeight.Times()) {</pre>
          <pre>
            <span class="lnum"> 70: </span> memcpy(pDest,
pSrc, sliceWidth * 3);</pre>
          <pre class="alt">
            <span class="lnum"> 71: </span> pSrc
+= sourceData.Stride;</pre>
          <pre>
            <span class="lnum"> 72: </span> pDest += destData.Stride;</pre>
          <pre class="alt">
            <span class="lnum"> 73: </span> }</pre>
          <pre>
            <span class="lnum"> 74: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 75: </span> sourceBitmap.UnlockBits(sourceData);</pre>
          <pre>
            <span class="lnum"> 76: </span> destBitmap.UnlockBits(destData);</pre>
          <pre class="alt">
            <span class="lnum"> 77: </span> destBitmap.Save(String.Format(<span class="str">"{0}_{1}_{2}.png"</span>,</pre>
          <pre>
            <span class="lnum"> 78: </span> Path.GetFileNameWithoutExtension(sourcePath),</pre>
          <pre class="alt">
            <span class="lnum"> 79: </span> column,
row), ImageFormat.Png);</pre>
          <pre>
            <span class="lnum"> 80: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 81: </span> }</pre>
          <pre>
            <span class="lnum"> 82: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 83: </span> }</pre>
          <pre>
            <span class="lnum"> 84: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 85: </span>
            <span class="kwrd">catch</span> (Exception
ex) {</pre>
          <pre>
            <span class="lnum"> 86: </span> Console.WriteLine(<span class="str">"Error
processing image."</span>);</pre>
          <pre class="alt">
            <span class="lnum"> 87: </span> Console.WriteLine(ex.ToString());</pre>
          <pre>
            <span class="lnum"> 88: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 89: </span> }</pre>
          <pre>
            <span class="lnum"> 90: </span> </pre>
          <pre class="alt">
            <span class="lnum"> 91: </span>
            <span class="kwrd">private</span>
            <span class="kwrd">static</span>
            <span class="kwrd">void</span> ShowUsage()
{</pre>
          <pre>
            <span class="lnum"> 92: </span> Console.WriteLine(<span class="str">"Usage:"</span>);</pre>
          <pre class="alt">
            <span class="lnum"> 93: </span> Console.WriteLine(<span class="str">"ImageSlicer.exe
sourceImage [gridSize]"</span>);</pre>
          <pre>
            <span class="lnum"> 94: </span> }</pre>
          <pre class="alt">
            <span class="lnum"> 95: </span> }</pre>
          <pre>
            <span class="lnum"> 96: </span>}</pre>
        </div>
        <style type="text/css">.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; }
</style>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987" />
      </body>
      <title>Image Slicer for Deep Zoom in Silverlight 2</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,f5216e74-ce9f-4b7a-b1de-157ea51bf987.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,f5216e74-ce9f-4b7a-b1de-157ea51bf987.aspx</link>
      <pubDate>Wed, 11 Jun 2008 06:01:35 GMT</pubDate>
      <description>&lt;p&gt;
I've been playing alot with beta 2 of &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fsilverlight.net" target="_blank"&gt;Silverlight&lt;/a&gt; 2,
and I've been totally amazed at the scenarios it enables.&amp;nbsp; Working hard down
inside the CLR engine, we're sometimes insulated from some of the innovation going
on higher in the stack and it blows us away when we do get a chance to see it.
&lt;/p&gt;
&lt;p&gt;
One of the very cool things in Silverlight is "&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fexpression%2farchive%2f2008%2f06%2f07%2fwhat-s-new-in-deep-zoom-composer.aspx" target="_blank"&gt;Deep
Zoom&lt;/a&gt;", which came from the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2flabs.live.com%2fSeadragon.aspx" target="_blank"&gt;SeaDragon&lt;/a&gt; project
from Microsoft Research.&amp;nbsp; I decided to try it out myself on a very large panorama
that I made a long time ago in New Orleans.&amp;nbsp; Unfortunately, the current toolset
seems to trip over the large file size (20516x15291).&amp;nbsp; I'm trying to find out
the real story behind the limitation.&amp;nbsp; All I know right now is that smaller files
work.
&lt;/p&gt;
&lt;p&gt;
So, I decided to try to slice it up into smaller, manageable chunks and just butt
them against one another to simulate one large file.&amp;nbsp; The problem was that I
couldn't find a tool to do this that didn't also trip up over the size of the file.&amp;nbsp;
So, I wrote my own.&amp;nbsp; There are likely better ways to do this, this was just a
quick and dirty attempt to make something that didn't totally crawl to a halt due
to page faulting (or outright throw OutOfMemoryException).
&lt;/p&gt;
&lt;p&gt;
The code below is what I came up with.&amp;nbsp; I use &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.drawing.bitmap.aspx" target="_blank"&gt;System.Drawing.Bitmap&lt;/a&gt;,
lock the portions of the image I need, and do the data copying myself.&amp;nbsp; I ended
up with this solution because GDI+ (&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.drawing.graphics.drawimage.aspx" target="_blank"&gt;DrawImage&lt;/a&gt;)
seems to like to make alot of buffers (big ones in this case), and I couldn't fall
back on good ol' &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fms532278(VS.85).aspx" target="_blank"&gt;bitblt&lt;/a&gt; because
I couldn't get the right kind of data structures without more copying of the data.&amp;nbsp;
This runs plenty fast and only takes up marginally more memory than it takes to represent
the original and the size of one of the destination tiles.
&lt;/p&gt;
&lt;p&gt;
Unfortunately, The &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fsystem.windows.controls.multiscaleimage(VS.95).aspx" target="_blank"&gt;MultiScaleImage&lt;/a&gt; does
some weirdness with image that are butted up against each other, and you get as much
as a whole pixel of "space" between them, depending on your zoom level. I'm still
looking into other possible workarounds. So, it's wasn't ultimately useful, but I
thought the code was interesting enough, and probably has academic usefulness.&amp;nbsp;
So, enough talk, here's the code:
&lt;/p&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.Collections.Generic;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 3: &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 4: &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing.Imaging;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 5: &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 6: &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 7: &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 8: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 9: &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ImageSlicer
{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 10: &lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Extensions
{&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;static&lt;/span&gt; IEnumerable&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;
Times(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; number) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 12: &lt;/span&gt; &lt;span class="kwrd"&gt;for&lt;/span&gt; (var
i = 0; i &amp;lt; number; i++) &lt;span class="kwrd"&gt;yield&lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt; i;&lt;/pre&gt;&lt;pre class="alt"&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; }&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;class&lt;/span&gt; Program
{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 17: &lt;/span&gt; [DllImport(&lt;span class="str"&gt;"msvcrt.dll"&lt;/span&gt;,
SetLastError = &lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 18: &lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;unsafe&lt;/span&gt; &lt;span class="kwrd"&gt;extern&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;*
memcpy(&lt;span class="kwrd"&gt;byte&lt;/span&gt;* dest, &lt;span class="kwrd"&gt;byte&lt;/span&gt;* src, &lt;span class="kwrd"&gt;int&lt;/span&gt; count);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 19: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 20: &lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[]
args) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 21: &lt;/span&gt; var sourcePath = args.FirstOrDefault();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 22: &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (String.IsNullOrEmpty(sourcePath))
{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 23: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"No
source image path provided"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 24: &lt;/span&gt; ShowUsage();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 25: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 26: &lt;/span&gt; }&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; (!File.Exists(sourcePath))
{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 28: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Source
image path doesn't exist"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 29: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 30: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 31: &lt;/span&gt; var
gridSizeStr = args.Skip(1).FirstOrDefault();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 32: &lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; gridSize
= 4;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 33: &lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (gridSizeStr
!= &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;int&lt;/span&gt;.TryParse(gridSizeStr, &lt;span class="kwrd"&gt;out&lt;/span&gt; gridSize))
{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 34: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Could
not convert {0} to a valid grid size"&lt;/span&gt;,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 35: &lt;/span&gt; gridSizeStr);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 36: &lt;/span&gt; &lt;span class="kwrd"&gt;return&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;span class="kwrd"&gt;if&lt;/span&gt; (gridSize
&amp;lt; 2) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 39: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"The
grid size must be greater than 1."&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 40: &lt;/span&gt; &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 41: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 42: &lt;/span&gt; &lt;span class="kwrd"&gt;try&lt;/span&gt; {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 43: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Slicing
{0} into a {1}x{1} grid."&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 44: &lt;/span&gt; Path.GetFileName(sourcePath),
gridSize);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 45: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Loading..."&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 46: &lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; (var
sourceBitmap = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(sourcePath)) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 47: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Source
Image: {0}x{1}"&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 48: &lt;/span&gt; sourceBitmap.Width,
sourceBitmap.Height);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 49: &lt;/span&gt; var sliceWidth
= sourceBitmap.Width / gridSize;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 50: &lt;/span&gt; var sliceHeight
= sourceBitmap.Height / gridSize;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 51: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Each
slice: {0}x{1}"&lt;/span&gt;, sliceWidth, sliceHeight);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 52: &lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; tile
= 0;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 53: &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var
row &lt;span class="kwrd"&gt;in&lt;/span&gt; gridSize.Times()) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 54: &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var
column &lt;span class="kwrd"&gt;in&lt;/span&gt; gridSize.Times()) {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 55: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Creating
{0} of {1} ({2},{3})"&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 56: &lt;/span&gt; ++tile, gridSize
* gridSize, column, row);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 57: &lt;/span&gt; &lt;span class="kwrd"&gt;using&lt;/span&gt; (var
destBitmap = &lt;span class="kwrd"&gt;new&lt;/span&gt; Bitmap(sliceWidth, sliceHeight)) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 58: &lt;/span&gt; var
sourceData = sourceBitmap.LockBits(&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 59: &lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Rectangle(column
* sliceWidth,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 60: &lt;/span&gt; row * sliceHeight, sliceWidth,&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 61: &lt;/span&gt; sliceHeight),&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 62: &lt;/span&gt; ImageLockMode.ReadOnly,
PixelFormat.Format24bppRgb);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 63: &lt;/span&gt; var
destData = destBitmap.LockBits(&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 64: &lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Rectangle(0,
0, sliceWidth, sliceHeight),&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 65: &lt;/span&gt; ImageLockMode.WriteOnly,
sourceData.PixelFormat);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 66: &lt;/span&gt; &lt;span class="kwrd"&gt;unsafe&lt;/span&gt; {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 67: &lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;*
pSrc = (&lt;span class="kwrd"&gt;byte&lt;/span&gt;*)sourceData.Scan0.ToPointer();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 68: &lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;*
pDest = (&lt;span class="kwrd"&gt;byte&lt;/span&gt;*)destData.Scan0.ToPointer();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 69: &lt;/span&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var
line &lt;span class="kwrd"&gt;in&lt;/span&gt; sliceHeight.Times()) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 70: &lt;/span&gt; memcpy(pDest,
pSrc, sliceWidth * 3);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 71: &lt;/span&gt; pSrc
+= sourceData.Stride;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 72: &lt;/span&gt; pDest += destData.Stride;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 73: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 74: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 75: &lt;/span&gt; sourceBitmap.UnlockBits(sourceData);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 76: &lt;/span&gt; destBitmap.UnlockBits(destData);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 77: &lt;/span&gt; destBitmap.Save(String.Format(&lt;span class="str"&gt;"{0}_{1}_{2}.png"&lt;/span&gt;,&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 78: &lt;/span&gt; Path.GetFileNameWithoutExtension(sourcePath),&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 79: &lt;/span&gt; column,
row), ImageFormat.Png);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 80: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 81: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 82: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 83: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 84: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 85: &lt;/span&gt; &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception
ex) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 86: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Error
processing image."&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 87: &lt;/span&gt; Console.WriteLine(ex.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 88: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 89: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 90: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 91: &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;void&lt;/span&gt; ShowUsage()
{&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 92: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"Usage:"&lt;/span&gt;);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 93: &lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;"ImageSlicer.exe
sourceImage [gridSize]"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 94: &lt;/span&gt; }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt; 95: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt; 96: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&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;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5216e74-ce9f-4b7a-b1de-157ea51bf987" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,f5216e74-ce9f-4b7a-b1de-157ea51bf987.aspx</comments>
      <category>Fun</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=498e2e35-1590-4852-92e1-2212157c68f1</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,498e2e35-1590-4852-92e1-2212157c68f1.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,498e2e35-1590-4852-92e1-2212157c68f1.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=498e2e35-1590-4852-92e1-2212157c68f1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been doing some app-building with Silverlight lately and exploring the limitations
of the platform in comparison to the full desktop CLR and what that means for the
Silverlight "ecosystem".  Those limitations can be summed up with 3 items:
</p>
        <ol>
          <li>
Strict sandbox security model</li>
          <li>
Reduced managed framework surface area</li>
          <li>
No binary compatibility with libraries targeting the desktop CLR (eliminates the number
of 3rd party components you can leverage).</li>
        </ol>
        <p>
I think #3 will begin to become a non-issue as more component providers provide builds
for Silverlight. #2 can be broken down into 2 areas:
</p>
        <ul>
          <li>
Full technology areas that are unavailable on Silverlight (LinqToSql, WinForms, etc)</li>
          <li>
Reduced/pruned APIs</li>
        </ul>
        <p>
The second is where my interest lies, and intersects with #1 (the new security model). 
We've done extensive threat modeling against our APIs as well as automated tooling
that has either removed (or made internal) certain APIs, or marked them as SecurityCritical,
meaning they cannot be called directly from "user" code.
</p>
        <p>
In addition, the security model requires safe, verifiable user code.  Normally
when developing on the desktop CLR, unless you are specifically targeting a low trust
environment, you can do whatever you like.
</p>
        <p>
So, for this exercise, I pulled out my trusty STDF parser (blogged <a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ce3601f31-231b-4a82-b5a7-1c31600ce25c.aspx" target="_blank">here</a> and <a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3a89ecce-89a8-470e-a894-bc5cc86ce41d.aspx" target="_blank">here</a>). 
I've used this project as a test vehicle for both v2.0 and Orcas, and it's served
well as a project that leverages a large cross-section of features in the Framework,
from high-level stuff like Linq down to expression tree inspection and further down
to LCG/RefEmit.
</p>
        <p>
In short, I was able to get the parser working without too much trouble. I felt like
creating a source bed that intended to target both Silverlight and the Desktop should
be an attainable goal.  You just have to switch your mindset from binary compatibility
to source compatibility.
</p>
        <p>
I combated the reduced surface area with extension methods, which worked quite well
to centralize the "overload shims" that needed to be "Silverlight-only", as well as
for a general refactoring tool.  My goal is to have all the desktop vs. Silverlight
differences centralized into files that are either included or excluded from the build
depending on which platform I'm targeting.  I wish you could create extension
properties.  That would let me close all the surface area discrepancies that
aren't caused by missing/irrelevant technology areas.
</p>
        <p>
I was pleased that 99% of my LCG codegen stuff "just worked".  I make heavy use
of Reflection.Emit via DynamicMethod to generate my record parsers based on attributes
on the record classes.  The 2 problems I ran into were:
</p>
        <ul>
          <li>
Visibility restrictions - The new security model won't let my dynamic methods see
internals.  I had used this ability to keep the API clean.  I'm still figuring
out the best approach, but it was simple enough just to expose those methods.</li>
          <li>
Verifiability - I had a few places where I was generating unverifiable code. 
Some of these were my own codegen bugs, but others were just bad assumptions on my
part.</li>
        </ul>
        <p>
This brings me to <a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.reflection.emit.opcodes.constrained.aspx" target="_blank">constrained
callvirt</a>, an interesting little IL tidbit I discovered in the porting process. 
Calling conventions are subtly different between reference types and value types,
and it also depends on whether the given method is actually overridden in the value
type (which can lead to confusing breaks when that state changes).  In the v1.x
days, you always knew the type you were dealing with, so it didn't matter that much
and you could generally always create the right sequence of IL to make a call. 
V2.0 introduced generics, which meant that you couldn't emit unified IL for both the
possibility of reference types or value types.  This meant there needed to be
a way to unify the IL for the 2 cases.  This is where the constrained prefix
came in.  It allows you to write unified IL that works regardless of whether
you're working with a value type or a reference type (think generics constrained by
an interface, or calling a method defined on System.Object like ToString()).
</p>
        <p>
Anyway, I was able to fix my unverifiable code by utilizing the constrained prefix. 
It also simplified my codegen logic significantly in a number of places where I had
different paths based on whether I was working with a value type or not.
</p>
        <p>
All in all, I was pleased with the results.  I'll be posting a sample Silverlight
app using the library when I get some UI stuff figured out.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1" />
      </body>
      <title>Silverlight limitations and Constrained Callvirt in IL</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,498e2e35-1590-4852-92e1-2212157c68f1.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,498e2e35-1590-4852-92e1-2212157c68f1.aspx</link>
      <pubDate>Wed, 23 Apr 2008 20:43:46 GMT</pubDate>
      <description>&lt;p&gt;
I've been doing some app-building with Silverlight lately and exploring the limitations
of the platform in comparison to the full desktop CLR and what that means for the
Silverlight "ecosystem".&amp;nbsp; Those limitations can be summed up with 3 items:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Strict sandbox security model&lt;/li&gt;
&lt;li&gt;
Reduced managed framework surface area&lt;/li&gt;
&lt;li&gt;
No binary compatibility with libraries targeting the desktop CLR (eliminates the number
of 3rd party components you can leverage).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
I think #3 will begin to become a non-issue as more component providers provide builds
for Silverlight. #2 can be broken down into 2 areas:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Full technology areas that are unavailable on Silverlight (LinqToSql, WinForms, etc)&lt;/li&gt;
&lt;li&gt;
Reduced/pruned APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The second is where my interest lies, and intersects with #1 (the new security model).&amp;nbsp;
We've done extensive threat modeling against our APIs as well as automated tooling
that has either removed (or made internal) certain APIs, or marked them as SecurityCritical,
meaning they cannot be called directly from "user" code.
&lt;/p&gt;
&lt;p&gt;
In addition, the security model requires safe, verifiable user code.&amp;nbsp; Normally
when developing on the desktop CLR, unless you are specifically targeting a low trust
environment, you can do whatever you like.
&lt;/p&gt;
&lt;p&gt;
So, for this exercise, I pulled out my trusty STDF parser (blogged &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ce3601f31-231b-4a82-b5a7-1c31600ce25c.aspx" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3a89ecce-89a8-470e-a894-bc5cc86ce41d.aspx" target="_blank"&gt;here&lt;/a&gt;).&amp;nbsp;
I've used this project as a test vehicle for both v2.0 and Orcas, and it's served
well as a project that leverages a large cross-section of features in the Framework,
from high-level stuff like Linq down to expression tree inspection and further down
to LCG/RefEmit.
&lt;/p&gt;
&lt;p&gt;
In short, I was able to get the parser working without too much trouble. I felt like
creating a source bed that intended to target both Silverlight and the Desktop should
be an attainable goal.&amp;nbsp; You just have to switch your mindset from binary compatibility
to source compatibility.
&lt;/p&gt;
&lt;p&gt;
I combated the reduced surface area with extension methods, which worked quite well
to centralize the "overload shims" that needed to be "Silverlight-only", as well as
for a general refactoring tool.&amp;nbsp; My goal is to have all the desktop vs. Silverlight
differences centralized into files that are either included or excluded from the build
depending on which platform I'm targeting.&amp;nbsp; I wish you could create extension
properties.&amp;nbsp; That would let me close all the surface area discrepancies that
aren't caused by missing/irrelevant technology areas.
&lt;/p&gt;
&lt;p&gt;
I was pleased that 99% of my LCG codegen stuff "just worked".&amp;nbsp; I make heavy use
of Reflection.Emit via DynamicMethod to generate my record parsers based on attributes
on the record classes.&amp;nbsp; The 2 problems I ran into were:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Visibility restrictions - The new security model won't let my dynamic methods see
internals.&amp;nbsp; I had used this ability to keep the API clean.&amp;nbsp; I'm still figuring
out the best approach, but it was simple enough just to expose those methods.&lt;/li&gt;
&lt;li&gt;
Verifiability - I had a few places where I was generating unverifiable code.&amp;nbsp;
Some of these were my own codegen bugs, but others were just bad assumptions on my
part.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This brings me to &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.reflection.emit.opcodes.constrained.aspx" target="_blank"&gt;constrained
callvirt&lt;/a&gt;, an interesting little IL tidbit I discovered in the porting process.&amp;nbsp;
Calling conventions are subtly different between reference types and value types,
and it also depends on whether the given method is actually overridden in the value
type (which can lead to confusing breaks when that state changes).&amp;nbsp; In the v1.x
days, you always knew the type you were dealing with, so it didn't matter that much
and you could generally always create the right sequence of IL to make a call.&amp;nbsp;
V2.0 introduced generics, which meant that you couldn't emit unified IL for both the
possibility of reference types or value types.&amp;nbsp; This meant there needed to be
a way to unify the IL for the 2 cases.&amp;nbsp; This is where the constrained prefix
came in.&amp;nbsp; It allows you to write unified IL that works regardless of whether
you're working with a value type or a reference type (think generics constrained by
an interface, or calling a method defined on System.Object like ToString()).
&lt;/p&gt;
&lt;p&gt;
Anyway, I was able to fix my unverifiable code by utilizing the constrained prefix.&amp;nbsp;
It also simplified my codegen logic significantly in a number of places where I had
different paths based on whether I was working with a value type or not.
&lt;/p&gt;
&lt;p&gt;
All in all, I was pleased with the results.&amp;nbsp; I'll be posting a sample Silverlight
app using the library when I get some UI stuff figured out.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=498e2e35-1590-4852-92e1-2212157c68f1" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,498e2e35-1590-4852-92e1-2212157c68f1.aspx</comments>
      <category>CLR</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been horrible with blogging lately.  But, I would be remiss if I  neglected
to mention <a href="http://www.marklio.com/marklio/ct.ashx?id=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca&amp;url=http%3a%2f%2fwww.flatlandmedia.com%2fflatlander%2f" target="_blank">Peter</a>'s
birthday today.  Happy Birthday, Peter.
</p>
        <p>
Hopefully the thing that's been clogging my blogging pipes will be gone soon.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca" />
      </body>
      <title>Happy Birthday Peter</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca.aspx</link>
      <pubDate>Mon, 21 Apr 2008 23:28:22 GMT</pubDate>
      <description>&lt;p&gt;
I've been horrible with blogging lately.&amp;nbsp; But, I would be remiss if I&amp;nbsp; neglected
to mention &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca&amp;amp;url=http%3a%2f%2fwww.flatlandmedia.com%2fflatlander%2f" target="_blank"&gt;Peter&lt;/a&gt;'s
birthday today.&amp;nbsp; Happy Birthday, Peter.
&lt;/p&gt;
&lt;p&gt;
Hopefully the thing that's been clogging my blogging pipes will be gone soon.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,7a2ed9fc-a39c-4ec1-99c0-7bfcf83616ca.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=9491e8e3-6bbc-4c3e-a106-7944495db527</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,9491e8e3-6bbc-4c3e-a106-7944495db527.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,9491e8e3-6bbc-4c3e-a106-7944495db527.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=9491e8e3-6bbc-4c3e-a106-7944495db527</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some of my posts are really reactions to search queries that have previously landed
on my blog.  If they did a search that got to my blog, but I know they didn't
find what they were looking for, chances are they (or someone else) will do the same
again.  And, if I <strong><em>HAVE</em></strong> the information they are looking
for, it makes sense to just add the information, even if it's what I would consider
well-known or common sense information. (common sense for software developers, that
is)
</p>
        <p>
One general search query I see again and again is something like "What is Action&lt;T&gt;
for?" or "What is Func&lt;T&gt;?"
</p>
        <p>
These are framework-provided, generic delegate types.  If you'll recall, delegates
can be thought of as type-safe function pointers.  A delegate type really just
captures a signature as "callable" object.  Leveraging generics to define delegate
types that can capture common signatures is goodness, since they are very flexible
and can be used by anyone.  This also aids in interop between different components,
since a general signature is far more interopable than custom delegate types.
</p>
        <p>
In v2.0, several functional-looking APIs were added that took delegates as arguments
(think List&lt;T&gt;), so instead of adding a special delegate type for each API,
several "generic" delegates were added to capture the "essence" of a signature such
as Action&lt;T&gt; which takes T and does some action (returning void), Predicate&lt;T&gt;
which takes T and returns bool (presumably doing some test against T), Comparer&lt;T&gt;
which compares 2 T's, etc.
</p>
        <p>
In v3.5, even more generalized functional patterns were introduced (used heavily in
Linq).  And we added a bunch more Action&lt;&gt; "overloads" for functions returning
void, and added Func&lt;&gt; "overloads" for functions with a return value. 
(I use overload loosely since these are classes and not methods) These patterns dropped
the semantic "meaning" of the delegate, and just went straight to the idea of capturing
a signature.
</p>
        <p>
These framework-provided delegates are useful for using in your own code rather than
creating your own.  Whether you leverage the Linq-centric, super-generic Action/Func
pattern, or opt to consume the more meaningful v2.0 Predicate, Comparer, etc. is up
to you.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9491e8e3-6bbc-4c3e-a106-7944495db527" />
      </body>
      <title>What are the generic Delegates in the framework for?</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,9491e8e3-6bbc-4c3e-a106-7944495db527.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,9491e8e3-6bbc-4c3e-a106-7944495db527.aspx</link>
      <pubDate>Mon, 25 Feb 2008 19:12:15 GMT</pubDate>
      <description>&lt;p&gt;
Some of my posts are really reactions to search queries that have previously landed
on my blog.&amp;nbsp; If they did a search that got to my blog, but I know they didn't
find what they were looking for, chances are they (or someone else) will do the same
again.&amp;nbsp; And, if I &lt;strong&gt;&lt;em&gt;HAVE&lt;/em&gt;&lt;/strong&gt; the information they are looking
for, it makes sense to just add the information, even if it's what I would consider
well-known or common sense information. (common sense for software developers, that
is)
&lt;/p&gt;
&lt;p&gt;
One general search query I see again and again is something like "What is Action&amp;lt;T&amp;gt;
for?" or "What is Func&amp;lt;T&amp;gt;?"
&lt;/p&gt;
&lt;p&gt;
These are framework-provided, generic delegate types.&amp;nbsp; If you'll recall, delegates
can be thought of as type-safe function pointers.&amp;nbsp; A delegate type really just
captures a signature as "callable" object.&amp;nbsp; Leveraging generics to define delegate
types that can capture common signatures is goodness, since they are very flexible
and can be used by anyone.&amp;nbsp; This also aids in interop between different components,
since a general signature is far more interopable than custom delegate types.
&lt;/p&gt;
&lt;p&gt;
In v2.0, several functional-looking APIs were added that took delegates as arguments
(think List&amp;lt;T&amp;gt;), so instead of adding a special delegate type for each API,
several "generic" delegates were added to capture the "essence" of a signature such
as Action&amp;lt;T&amp;gt; which takes T and does some action (returning void), Predicate&amp;lt;T&amp;gt;
which takes T and returns bool (presumably doing some test against T), Comparer&amp;lt;T&amp;gt;
which compares 2 T's, etc.
&lt;/p&gt;
&lt;p&gt;
In v3.5, even more generalized functional patterns were introduced (used heavily in
Linq).&amp;nbsp; And we added a bunch more Action&amp;lt;&amp;gt; "overloads" for functions returning
void, and added Func&amp;lt;&amp;gt; "overloads" for functions with a return value.&amp;nbsp;
(I use overload loosely since these are classes and not methods) These patterns dropped
the semantic "meaning" of the delegate, and just went straight to the idea of capturing
a signature.
&lt;/p&gt;
&lt;p&gt;
These framework-provided delegates are useful for using in your own code rather than
creating your own.&amp;nbsp; Whether you leverage the Linq-centric, super-generic Action/Func
pattern, or opt to consume the more meaningful v2.0 Predicate, Comparer, etc. is up
to you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9491e8e3-6bbc-4c3e-a106-7944495db527" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,9491e8e3-6bbc-4c3e-a106-7944495db527.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=0ec107a6-82af-4530-b373-38bb30930548</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,0ec107a6-82af-4530-b373-38bb30930548.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,0ec107a6-82af-4530-b373-38bb30930548.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=0ec107a6-82af-4530-b373-38bb30930548</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A twist on <a href="http://www.marklio.com/marklio/ct.ashx?id=0ec107a6-82af-4530-b373-38bb30930548&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fKids_Say_the_Darnedest_Things" target="_blank">Bill
Cosby's humerous show</a>,  the other day I said the following to my daughter:
</p>
        <blockquote>
          <p>
I'm sorry, donkeys don't stick to the refrigerator.
</p>
        </blockquote>
        <p>
Taken out of context, Becky thought it was pretty funny. Here's the context: I was
playing with Jenna in the kitchen the other day, and she was playing with 2 plastic
donkeys as well as some refrigerator magnets.  After seeing how the magnets stuck
to the refrigerator, she tried to do the same with the plastic donkeys, which didn't
work of course.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=0ec107a6-82af-4530-b373-38bb30930548" />
      </body>
      <title>You say the darnedest things to kids</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,0ec107a6-82af-4530-b373-38bb30930548.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,0ec107a6-82af-4530-b373-38bb30930548.aspx</link>
      <pubDate>Wed, 09 Jan 2008 18:40:08 GMT</pubDate>
      <description>&lt;p&gt;
A twist on &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=0ec107a6-82af-4530-b373-38bb30930548&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fKids_Say_the_Darnedest_Things" target="_blank"&gt;Bill
Cosby's humerous show&lt;/a&gt;,&amp;nbsp; the other day I said the following to my daughter:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I'm sorry, donkeys don't stick to the refrigerator.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Taken out of context, Becky thought it was pretty funny. Here's the context: I was
playing with Jenna in the kitchen the other day, and she was playing with 2 plastic
donkeys as well as some refrigerator magnets.&amp;nbsp; After seeing how the magnets stuck
to the refrigerator, she tried to do the same with the plastic donkeys, which didn't
work of course.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=0ec107a6-82af-4530-b373-38bb30930548" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,0ec107a6-82af-4530-b373-38bb30930548.aspx</comments>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=472a8eb9-a1fd-4af7-90ca-84bf268ed091</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,472a8eb9-a1fd-4af7-90ca-84bf268ed091.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,472a8eb9-a1fd-4af7-90ca-84bf268ed091.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=472a8eb9-a1fd-4af7-90ca-84bf268ed091</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a title="markandjason by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=472a8eb9-a1fd-4af7-90ca-84bf268ed091&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2103822825%2f">
            <img style="float: left; margin: 0px 5px 5px 0px" alt="markandjason" src="http://farm3.static.flickr.com/2103/2103822825_e88d5ef47c_o.jpg" border="0" />
          </a>Well,
my old-school buddy Jason turns 32 today.  Jason and I have been friends since
pre-school.  We pretty much attended every year of school together, all the way
through our undergraduate years.  Here's a picture of me and him (Jason on the
left... I don't know what the heck I'm doing) at one of my brother's birthday parties. 
He was the friend <strong><em>I</em></strong> got to invite.
</p>
        <p>
Happy birthday, man.  Go play some slaughterball today for me.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=472a8eb9-a1fd-4af7-90ca-84bf268ed091" />
      </body>
      <title>Happy Birthday Jason</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,472a8eb9-a1fd-4af7-90ca-84bf268ed091.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,472a8eb9-a1fd-4af7-90ca-84bf268ed091.aspx</link>
      <pubDate>Wed, 12 Dec 2007 00:22:30 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a title="markandjason by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=472a8eb9-a1fd-4af7-90ca-84bf268ed091&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2103822825%2f"&gt;&lt;img style="float: left; margin: 0px 5px 5px 0px" alt="markandjason" src="http://farm3.static.flickr.com/2103/2103822825_e88d5ef47c_o.jpg" border="0"&gt;&lt;/a&gt;Well,
my old-school buddy Jason turns 32 today.&amp;nbsp; Jason and I have been friends since
pre-school.&amp;nbsp; We pretty much attended every year of school together, all the way
through our undergraduate years.&amp;nbsp; Here's a picture of me and him (Jason on the
left... I don't know what the heck I'm doing) at one of my brother's birthday parties.&amp;nbsp;
He was the friend &lt;strong&gt;&lt;em&gt;I&lt;/em&gt;&lt;/strong&gt; got to invite.
&lt;/p&gt;
&lt;p&gt;
Happy birthday, man.&amp;nbsp; Go play some slaughterball today for me.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=472a8eb9-a1fd-4af7-90ca-84bf268ed091" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,472a8eb9-a1fd-4af7-90ca-84bf268ed091.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=6b30b44b-e372-4353-99ac-6e150cb4965b</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,6b30b44b-e372-4353-99ac-6e150cb4965b.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,6b30b44b-e372-4353-99ac-6e150cb4965b.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=6b30b44b-e372-4353-99ac-6e150cb4965b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a title="CRW_6366 by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2078189129%2f">
            <img style="float: left; margin: 0px 5px 5px 0px" height="500" alt="CRW_6366" src="http://farm3.static.flickr.com/2414/2078189129_7d3627d3be.jpg" width="333" border="0" />
          </a>It's
Jenna's 2nd birthday!  Wow, I can't believe it's already been 2 years. 
Here's one of the pictures we took yesterday for our Christmas cards.
</p>
        <p>
That was really fun.  I don't have a nice flash, so I had to resort to auxiliary
lighting.  All things considered, I think they turned out pretty well.
</p>
        <p>
Jenna constantly amazes me with what she knows.  She was playing with some blocks
this morning and I asked her how many blocks she had.  She said, "Let's count. 
One... Two... Three... Four."  Wow.
</p>
        <p>
She's counted as high as 20, and can say the entire alphabet.  She loves to play
with toy animals and make them talk with each other.  She loves to play "knock
knock", where she'll close a door, we'll knock and she'll let us in, grab our hand
and pull us in for a "visit".  Fun times.
</p>
        <p>
          <a title="CRW_3639 by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f70664804%2f">
            <img height="160" alt="CRW_3639" src="http://farm1.static.flickr.com/20/70664804_bb585bdad3_m.jpg" width="240" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b" />
      </body>
      <title>Happy Birthday Jenna!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,6b30b44b-e372-4353-99ac-6e150cb4965b.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,6b30b44b-e372-4353-99ac-6e150cb4965b.aspx</link>
      <pubDate>Sun, 02 Dec 2007 23:47:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a title="CRW_6366 by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f2078189129%2f"&gt;&lt;img style="float: left; margin: 0px 5px 5px 0px" height="500" alt="CRW_6366" src="http://farm3.static.flickr.com/2414/2078189129_7d3627d3be.jpg" width="333" border="0"&gt;&lt;/a&gt;It's
Jenna's 2nd birthday!&amp;nbsp; Wow, I can't believe it's already been 2 years.&amp;nbsp;
Here's one of the pictures we took yesterday for our Christmas cards.
&lt;/p&gt;
&lt;p&gt;
That was really fun.&amp;nbsp; I don't have a nice flash, so I had to resort to auxiliary
lighting.&amp;nbsp; All things considered, I think they turned out pretty well.
&lt;/p&gt;
&lt;p&gt;
Jenna constantly amazes me with what she knows.&amp;nbsp; She was playing with some blocks
this morning and I asked her how many blocks she had.&amp;nbsp; She said, "Let's count.&amp;nbsp;
One... Two... Three... Four."&amp;nbsp; Wow.
&lt;/p&gt;
&lt;p&gt;
She's counted as high as 20, and can say the entire alphabet.&amp;nbsp; She loves to play
with toy animals and make them talk with each other.&amp;nbsp; She loves to play "knock
knock", where she'll close a door, we'll knock and she'll let us in, grab our hand
and pull us in for a "visit".&amp;nbsp; Fun times.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="CRW_3639 by marklio, on Flickr" href="http://www.marklio.com/marklio/ct.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f70664804%2f"&gt;&lt;img height="160" alt="CRW_3639" src="http://farm1.static.flickr.com/20/70664804_bb585bdad3_m.jpg" width="240" border="0"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=6b30b44b-e372-4353-99ac-6e150cb4965b" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,6b30b44b-e372-4353-99ac-6e150cb4965b.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=7c436ffe-4a37-4d80-8fbb-76a24d7d089d</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,7c436ffe-4a37-4d80-8fbb-76a24d7d089d.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,7c436ffe-4a37-4d80-8fbb-76a24d7d089d.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=7c436ffe-4a37-4d80-8fbb-76a24d7d089d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This release was exciting me before I made the move to Microsoft, and getting to be
a part of it has made me even more excited about what we're giving our customers in
this release.  If you're not familiar with Visual Studio, it is a suite of software
development tools for creating just about any application or library you can think
of.  I'll be writing more about this release in the coming weeks, but for now,
go to <a href="http://www.marklio.com/marklio/ct.ashx?id=7c436ffe-4a37-4d80-8fbb-76a24d7d089d&amp;url=http%3a%2f%2fwww.microsoft.com%2fvstudio">www.microsoft.com/vstudio</a> and
check it out!
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7c436ffe-4a37-4d80-8fbb-76a24d7d089d" />
      </body>
      <title>Visual Studio 2008 and .NET Framework 3.5 released!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,7c436ffe-4a37-4d80-8fbb-76a24d7d089d.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,7c436ffe-4a37-4d80-8fbb-76a24d7d089d.aspx</link>
      <pubDate>Mon, 19 Nov 2007 17:29:03 GMT</pubDate>
      <description>&lt;p&gt;
This release was exciting me before I made the move to Microsoft, and getting to be
a part of it has made me even more excited about what we're giving our customers in
this release.&amp;nbsp; If you're not familiar with Visual Studio, it is a suite of software
development tools for creating just about any application or library you can think
of.&amp;nbsp; I'll be writing more about this release in the coming weeks, but for now,
go to &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7c436ffe-4a37-4d80-8fbb-76a24d7d089d&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fvstudio"&gt;www.microsoft.com/vstudio&lt;/a&gt; and
check it out!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7c436ffe-4a37-4d80-8fbb-76a24d7d089d" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,7c436ffe-4a37-4d80-8fbb-76a24d7d089d.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=2d0e4fdf-1cec-4225-98a8-7ea70540a9c1</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,2d0e4fdf-1cec-4225-98a8-7ea70540a9c1.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,2d0e4fdf-1cec-4225-98a8-7ea70540a9c1.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=2d0e4fdf-1cec-4225-98a8-7ea70540a9c1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Vista's search rocks, but sometimes you're not interested in searching through the
gigabytes of file contents, you just want to search on filename.  Good ol "dir
/s".  But, you don't need to give up the indexed goodness for this.  Just
use some of the special search syntax: "name:[string you're searching for]" in the
search box.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=2d0e4fdf-1cec-4225-98a8-7ea70540a9c1" />
      </body>
      <title>Searching by filename only in Vista</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,2d0e4fdf-1cec-4225-98a8-7ea70540a9c1.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,2d0e4fdf-1cec-4225-98a8-7ea70540a9c1.aspx</link>
      <pubDate>Wed, 31 Oct 2007 23:03:16 GMT</pubDate>
      <description>&lt;p&gt;
Vista's search rocks, but sometimes you're not interested in searching through the
gigabytes of file contents, you just want to search on filename.&amp;nbsp; Good ol "dir
/s".&amp;nbsp; But, you don't need to give up the indexed goodness for this.&amp;nbsp; Just
use some of the special search syntax: "name:[string you're searching for]" in the
search box.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=2d0e4fdf-1cec-4225-98a8-7ea70540a9c1" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,2d0e4fdf-1cec-4225-98a8-7ea70540a9c1.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c0433546-7a07-4d1a-afad-227863d496db</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c0433546-7a07-4d1a-afad-227863d496db.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c0433546-7a07-4d1a-afad-227863d496db.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c0433546-7a07-4d1a-afad-227863d496db</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I certainly don't want this to turn into a video blog of fish, but I got some more
video of the fish in our stream, and it's so unbelievable to me as someone new to
this area that I simply must post it.  I've also done some tweaks to my custom
Silverlight player as well as used some different encoding techniques (I haven't decided
whether I like them yet).
</p>
        <iframe src="http://silverlight.services.live.com/invoke/3202/MoreFishies/iframe.html" frameborder="0" width="500" scrolling="no" height="400">
        </iframe>
        <p>
Again, enjoy me sounding like an idiot.
</p>
        <p>
[UPDATE:] The way I have embedded the player this time seems to prevent it from showing
in most RSS aggregators. click through to my blog to see the video.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c0433546-7a07-4d1a-afad-227863d496db" />
      </body>
      <title>More Fishies</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c0433546-7a07-4d1a-afad-227863d496db.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c0433546-7a07-4d1a-afad-227863d496db.aspx</link>
      <pubDate>Mon, 15 Oct 2007 22:02:31 GMT</pubDate>
      <description>&lt;p&gt;
I certainly don't want this to turn into a video blog of fish, but I got some more
video of the fish in our stream, and it's so unbelievable to me as someone new to
this area that I simply must post it.&amp;nbsp; I've also done some tweaks to my custom
Silverlight player as well as used some different encoding techniques (I haven't decided
whether I like them yet).
&lt;/p&gt;
&lt;iframe src="http://silverlight.services.live.com/invoke/3202/MoreFishies/iframe.html" frameborder="0" width="500" scrolling="no" height="400"&gt;
&lt;/iframe&gt;
&lt;p&gt;
Again, enjoy me sounding like an idiot.
&lt;/p&gt;
&lt;p&gt;
[UPDATE:] The way I have embedded the player this time seems to prevent it from showing
in most RSS aggregators. click through to my blog to see the video.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c0433546-7a07-4d1a-afad-227863d496db" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c0433546-7a07-4d1a-afad-227863d496db.aspx</comments>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=7c3d6927-4dda-439c-bc08-4dcd86df866f</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,7c3d6927-4dda-439c-bc08-4dcd86df866f.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,7c3d6927-4dda-439c-bc08-4dcd86df866f.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=7c3d6927-4dda-439c-bc08-4dcd86df866f</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <script src="http://agappdom.net/h/silverlight.js" type="text/javascript">
        </script>
        <div id="Wrapper_Fishy" style="overflow: hidden; width: 500px; height: 400px">
          <iframe src="http://msbluelight-0.agappdom.net/e1/d/3202/2/63326124000/0.LwrqNMXyPGeH1Un8cxy_ZoikMT8/zziframehtml1zz.html#%2FStartWithParent%2Fbl2%2F%2F%2F%2F%2F%2F%2F%2F%2F1.0%2F5%2FMicrosoftAjax.js%2FBasePlayer.js%2FPlayerStrings.js%2Fplayer.js%2FStartPlayer.js" frameborder="0" width="100%" scrolling="no" height="100%">
          </iframe>
        </div>
        <script type="text/javascript">
function CreateFishySilverlight(){
  Silverlight.createHostedObjectEx({
    source: "streaming:/3202/Fishy",parentElement: Wrapper_Fishy});
}
var Wrapper_Fishy = document.getElementById("Wrapper_Fishy");
CreateFishySilverlight();
</script>
        <p>
So, the salmon are running in our stream.  They're really big.  I caught
this video today of a smaller female (I think).  Hopefully I'll get some bigger
ones on video soon.  This is also an experiment with Silverlight.
</p>
        <p>
Oh, by the way.  I'm like giddy with the thought of salmon in my stream, so I
sound like an idiot.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7c3d6927-4dda-439c-bc08-4dcd86df866f" />
      </body>
      <title>Fishies</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,7c3d6927-4dda-439c-bc08-4dcd86df866f.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,7c3d6927-4dda-439c-bc08-4dcd86df866f.aspx</link>
      <pubDate>Sun, 23 Sep 2007 02:57:50 GMT</pubDate>
      <description> &lt;script src="http://agappdom.net/h/silverlight.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;div id="Wrapper_Fishy" style="overflow: hidden; width: 500px; height: 400px"&gt;
&lt;iframe src="http://msbluelight-0.agappdom.net/e1/d/3202/2/63326124000/0.LwrqNMXyPGeH1Un8cxy_ZoikMT8/zziframehtml1zz.html#%2FStartWithParent%2Fbl2%2F%2F%2F%2F%2F%2F%2F%2F%2F1.0%2F5%2FMicrosoftAjax.js%2FBasePlayer.js%2FPlayerStrings.js%2Fplayer.js%2FStartPlayer.js" frameborder="0" width="100%" scrolling="no" height="100%"&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;script type="text/javascript"&gt;
function CreateFishySilverlight(){
  Silverlight.createHostedObjectEx({
    source: "streaming:/3202/Fishy",parentElement: Wrapper_Fishy});
}
var Wrapper_Fishy = document.getElementById("Wrapper_Fishy");
CreateFishySilverlight();
&lt;/script&gt;
&lt;p&gt;
So, the salmon are running in our stream.&amp;nbsp; They're really big.&amp;nbsp; I caught
this video today of a smaller female (I think).&amp;nbsp; Hopefully I'll get some bigger
ones on video soon.&amp;nbsp; This is also an experiment with Silverlight.
&lt;/p&gt;
&lt;p&gt;
Oh, by the way.&amp;nbsp; I'm like giddy with the thought of salmon in my stream, so I
sound like an idiot.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7c3d6927-4dda-439c-bc08-4dcd86df866f" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,7c3d6927-4dda-439c-bc08-4dcd86df866f.aspx</comments>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=15185490-9b48-4e78-abd3-197862bf2554</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,15185490-9b48-4e78-abd3-197862bf2554.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,15185490-9b48-4e78-abd3-197862bf2554.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=15185490-9b48-4e78-abd3-197862bf2554</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>I wish I had time to come up with more concrete information (examples/code) in
this post, but I don't have the time to work that stuff up.  I did think it would
be useful for people searching for solutions to this problem, so here it is in all
its ambiguity.</em>
        </p>
        <p>
I was playing with expression tree inspection and dynamic interpretation the other
day, when I hit something that I was sure was a bug.  I was inspecting an expression
tree, identifying "branches" of interest, and generating lamdba expressions from them
on the fly.
</p>
        <p>
You might do this to break up an expression into separate units of execution to spread
across multiple processors (a la PLINQ), or to replace parts of a tree requiring local
execution before passing off to another layer to be transformed into another domain
like SQL, or whatever.  In any case, I was doing it.
</p>
        <p>
I found that if the type of the expression was a value type, I could not create a
lambda expression returning object from it, even though there is an inheritance relationship. 
You get a fairly straightforward, but perhaps surprising exception.
</p>
        <p>
After some back and forth with the Linq team, I discovered that this was by design. 
In the case of value types, the boxing operation required to make an object must be
represented by a unary convert expression. <strong>The solution is to wrap such expression
trees with a call to Expression.Convert(expression, typeof(object)).</strong></p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=15185490-9b48-4e78-abd3-197862bf2554" />
      </body>
      <title>Expression Tree Pruning, Value Types, and the one true Object</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,15185490-9b48-4e78-abd3-197862bf2554.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,15185490-9b48-4e78-abd3-197862bf2554.aspx</link>
      <pubDate>Thu, 30 Aug 2007 00:17:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;I wish I had time to come up with more concrete information (examples/code) in
this post, but I don't have the time to work that stuff up.&amp;nbsp; I did think it would
be useful for people searching for solutions to this problem, so here it is in all
its ambiguity.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
I was playing with expression tree inspection and dynamic interpretation the other
day, when I hit something that I was sure was a bug.&amp;nbsp; I was inspecting an expression
tree, identifying "branches" of interest, and generating lamdba expressions from them
on the fly.
&lt;/p&gt;
&lt;p&gt;
You might do this to break up an expression into separate units of execution to spread
across multiple processors (a la PLINQ), or to replace parts of a tree requiring local
execution before passing off to another layer to be transformed into another domain
like SQL, or whatever.&amp;nbsp; In any case, I was doing it.
&lt;/p&gt;
&lt;p&gt;
I found that if the type of the expression was a value type, I could not create a
lambda expression returning object from it, even though there is an inheritance relationship.&amp;nbsp;
You get a fairly straightforward, but perhaps surprising exception.
&lt;/p&gt;
&lt;p&gt;
After some back and forth with the Linq team, I discovered that this was by design.&amp;nbsp;
In the case of value types, the boxing operation required to make an object must be
represented by a unary convert expression. &lt;strong&gt;The solution is to wrap such expression
trees with a call to Expression.Convert(expression, typeof(object)).&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=15185490-9b48-4e78-abd3-197862bf2554" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,15185490-9b48-4e78-abd3-197862bf2554.aspx</comments>
      <category>CLR</category>
      <category>Fun</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=47753f8c-c40d-4eca-ad11-c95f44e13ff7</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,47753f8c-c40d-4eca-ad11-c95f44e13ff7.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,47753f8c-c40d-4eca-ad11-c95f44e13ff7.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=47753f8c-c40d-4eca-ad11-c95f44e13ff7</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today is my 1-year anniversary at Microsoft.  I've been having a blast working
on all kinds of crazy stuff including but not limited to:
</p>
        <ul>
          <li>
            <a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;url=http%3a%2f%2fsilverlight.net%2fDefault.aspx" target="_blank">Silverlight</a>
          </li>
          <li>
            <a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2fvstudio%2faa700831.aspx" target="_blank">VS
2008 (Orcas)</a>
          </li>
          <li>
            <a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;url=http%3a%2f%2fwww.microsoft.com%2fwindows%2fproducts%2fwindowsvista%2fdefault.mspx%3fwt_svl%3d20372a%26mg_id%3d20372b" target="_blank">Windows
Vista</a>
          </li>
          <li>
            <a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;url=http%3a%2f%2fwww.microsoft.com%2fwindowsserver2008%2fdefault.mspx" target="_blank">Windows
Server 2008 (Longhorn Server)</a>
          </li>
        </ul>
        <p>
And, Seattle has turned out to be a really fun place to live.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7" />
      </body>
      <title>1 Year at Microsoft</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,47753f8c-c40d-4eca-ad11-c95f44e13ff7.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,47753f8c-c40d-4eca-ad11-c95f44e13ff7.aspx</link>
      <pubDate>Tue, 28 Aug 2007 17:34:52 GMT</pubDate>
      <description>&lt;p&gt;
Today is my 1-year anniversary at Microsoft.&amp;nbsp; I've been having a blast working
on all kinds of crazy stuff including but not limited to:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;amp;url=http%3a%2f%2fsilverlight.net%2fDefault.aspx" target="_blank"&gt;Silverlight&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2fvstudio%2faa700831.aspx" target="_blank"&gt;VS
2008 (Orcas)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fwindows%2fproducts%2fwindowsvista%2fdefault.mspx%3fwt_svl%3d20372a%26mg_id%3d20372b" target="_blank"&gt;Windows
Vista&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2fwindowsserver2008%2fdefault.mspx" target="_blank"&gt;Windows
Server 2008 (Longhorn Server)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And, Seattle has turned out to be a really fun place to live.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=47753f8c-c40d-4eca-ad11-c95f44e13ff7" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,47753f8c-c40d-4eca-ad11-c95f44e13ff7.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=91b9a928-4c8e-4cf3-a6bf-8388b96c5250</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,91b9a928-4c8e-4cf3-a6bf-8388b96c5250.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,91b9a928-4c8e-4cf3-a6bf-8388b96c5250.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=91b9a928-4c8e-4cf3-a6bf-8388b96c5250</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=91b9a928-4c8e-4cf3-a6bf-8388b96c5250&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f856296419%2f" target="_blank" atomicselection="true">
            <img src="http://farm2.static.flickr.com/1194/856296419_6c24305eb6.jpg" border="0" />
          </a>
        </p>
        <p>
Today is my buddy Dave's birthday.  Here's a picture of him from a few weeks
ago when he visited, which was a blast.  I've really missed Dave since we moved
to Washington, so it was awesome that he could visit.
</p>
        <p>
Luckily, Halo 3 is coming out soon, so we'll be hanging out alot more virtually.
</p>
        <p>
Happy Birthday, Dave!
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=91b9a928-4c8e-4cf3-a6bf-8388b96c5250" />
      </body>
      <title>Happy Birthday, Dave!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,91b9a928-4c8e-4cf3-a6bf-8388b96c5250.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,91b9a928-4c8e-4cf3-a6bf-8388b96c5250.aspx</link>
      <pubDate>Fri, 03 Aug 2007 16:47:20 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=91b9a928-4c8e-4cf3-a6bf-8388b96c5250&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f856296419%2f" target="_blank" atomicselection="true"&gt;&lt;img src="http://farm2.static.flickr.com/1194/856296419_6c24305eb6.jpg" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Today is my buddy Dave's birthday.&amp;nbsp; Here's a picture of him from a few weeks
ago when he visited, which was a blast.&amp;nbsp; I've really missed Dave since we moved
to Washington, so it was awesome that he could visit.
&lt;/p&gt;
&lt;p&gt;
Luckily, Halo 3 is coming out soon, so we'll be hanging out alot more virtually.
&lt;/p&gt;
&lt;p&gt;
Happy Birthday, Dave!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=91b9a928-4c8e-4cf3-a6bf-8388b96c5250" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,91b9a928-4c8e-4cf3-a6bf-8388b96c5250.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
An interesting pattern I've seen emerge since the early releases of Orcas is what
I might refer to as "delegate properties".  What I mean by that is a property
(or field, I suppose) that returns a delegate.  This pattern has some interesting
implications.
</p>
        <p>
First, in a language that treats delegates as directly callable objects, this pattern
looks just like a method (<font face="Courier New">someInstance.TheProperty(args)</font>). 
You can't tell the difference (although VS gives you different intellisense) by looking
at a callsite like this. Among other things, this leads to some interesting naming
issues.  Do you name it like you would a method?
</p>
        <p>
Second, it opens up opportunities to do some really powerful (and slightly insane) hybrid
inheritance models.  Think about a virtual delegate property that has both a
getter and a setter, now think about trying to predict what that delegate will
do when you call it.  It doesn't sound like something to recommend as part of
a public API, but I think there are some interesting scenarios there.
</p>
        <p>
If I come up with something interesting and useful, I'll let you know.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c" />
      </body>
      <title>Delegate Properties</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c.aspx</link>
      <pubDate>Thu, 26 Jul 2007 20:56:27 GMT</pubDate>
      <description>&lt;p&gt;
An interesting pattern I've seen emerge since the early releases of Orcas is what
I might refer to as "delegate properties".&amp;nbsp; What I mean by that is a property
(or field, I suppose)&amp;nbsp;that returns a delegate.&amp;nbsp; This pattern has some interesting
implications.
&lt;/p&gt;
&lt;p&gt;
First, in a language that treats delegates as directly callable objects, this pattern
looks just like a method (&lt;font face="Courier New"&gt;someInstance.TheProperty(args)&lt;/font&gt;).&amp;nbsp;
You can't tell the difference (although VS gives you different intellisense) by looking
at a callsite like this.&amp;nbsp;Among other things, this leads to some interesting naming
issues.&amp;nbsp; Do you name it like you would a method?
&lt;/p&gt;
&lt;p&gt;
Second, it opens up opportunities to do some really powerful (and slightly insane)&amp;nbsp;hybrid
inheritance models.&amp;nbsp; Think about a virtual delegate property that has both a
getter and a setter,&amp;nbsp;now think about trying to predict what that delegate will
do when you call it.&amp;nbsp; It doesn't sound like something to recommend as part of
a public API, but I think there are some interesting scenarios there.
&lt;/p&gt;
&lt;p&gt;
If I come up with something interesting and useful, I'll let you know.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,b12bddf4-a3a8-47d9-8e03-82e54a8f7c4c.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=24104df0-f359-4e18-b560-abfd2a1461f3</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,24104df0-f359-4e18-b560-abfd2a1461f3.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,24104df0-f359-4e18-b560-abfd2a1461f3.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=24104df0-f359-4e18-b560-abfd2a1461f3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=24104df0-f359-4e18-b560-abfd2a1461f3&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f834915789%2f" target="_blank" atomicselection="true">
            <img style="margin: 0px 10px 10px 0px" src="http://farm2.static.flickr.com/1117/834915789_d9f78d858e_m.jpg" align="left" border="0" />
          </a>Today
is our 8 year anniversary.  Eight years seems like a really long time! 
This past year has been a crazy year for us.  We've moved across the country,
away from all our friends and family.  And, through it all, Becky's put up with
all my crazy shenanigans.
</p>
        <p>
Thanks, Becky.
</p>
        <p style="clear: both">
        </p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=24104df0-f359-4e18-b560-abfd2a1461f3" />
      </body>
      <title>8 Years</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,24104df0-f359-4e18-b560-abfd2a1461f3.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,24104df0-f359-4e18-b560-abfd2a1461f3.aspx</link>
      <pubDate>Tue, 24 Jul 2007 23:44:48 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=24104df0-f359-4e18-b560-abfd2a1461f3&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f834915789%2f" target="_blank" atomicselection="true"&gt;&lt;img style="margin: 0px 10px 10px 0px" src="http://farm2.static.flickr.com/1117/834915789_d9f78d858e_m.jpg" align="left" border="0"&gt;&lt;/a&gt;Today
is our 8 year anniversary.&amp;nbsp; Eight years seems like a really long time!&amp;nbsp;
This past year has been a crazy year for us.&amp;nbsp; We've moved across the country,
away from all our friends and family.&amp;nbsp; And, through it all, Becky's put up with
all my crazy shenanigans.
&lt;/p&gt;
&lt;p&gt;
Thanks, Becky.
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=24104df0-f359-4e18-b560-abfd2a1461f3" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,24104df0-f359-4e18-b560-abfd2a1461f3.aspx</comments>
      <category>Announcements</category>
      <category>Becky</category>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=7d73a221-6d30-4116-a884-3be56f3a07b6</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,7d73a221-6d30-4116-a884-3be56f3a07b6.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,7d73a221-6d30-4116-a884-3be56f3a07b6.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=7d73a221-6d30-4116-a884-3be56f3a07b6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f857151378%2f" target="_blank" atomicselection="true">
            <img style="margin: 0px 0px 10px 10px" alt="Peter" src="http://farm2.static.flickr.com/1371/857151378_fef9719585_m.jpg" align="right" border="0" />
          </a> Three
of my good friends came to visit in the past couple of weeks.  My friend <a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;url=http%3a%2f%2fwww.flatlandmedia.com%2fflatlander%2f" target="_blank">Peter</a>,
who I met in the 5th grade (if I recall correctly) visited again last week. 
Due to a bizarre coincidence, his wife had a one-week job in Bellevue, which is here
on the east side of Seattle.  So, I got to hang out with him, which was
a blast.
</p>
        <p>
This week, my buddy <a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;url=http%3a%2f%2fwww.davejenbarnes.com%2fwordpress" target="_blank">Dave</a> was
here.  Dave and I played trombone together in college.  His visit was also
somewhat coincidental, but I won't go into the details here.  He stayed with
us and we hung out and we had all manner of good times.
</p>
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f856308457%2f" target="_blank" atomicselection="true">
            <img style="margin: 0px 10px 10px 0px" alt="Dave and Jeff" src="http://farm2.static.flickr.com/1388/856308457_11c70e4e66_m.jpg" align="left" border="0" />
          </a> While
Dave was here, <a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank">Jeff</a> (one
other trombone friends from college) came down from Bellingham to hang out for an
evening, which was super-fun.  In another bizarre coincidence, his wife Bethany
went to high school with Dave, so there was some reminiscing there as well. 
Bethany's mom came along for the ride as well, and schooled us all in a game of Wii
Sports bowling.
</p>
        <p>
I was really bummed that these visits occurred right after our big vacation, which
meant that I really couldn't afford to take a couple of days off to enjoy them. 
So, sorry again for that guys.
</p>
        <p style="clear: both">
        </p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6" />
      </body>
      <title>July Friend Visits</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,7d73a221-6d30-4116-a884-3be56f3a07b6.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,7d73a221-6d30-4116-a884-3be56f3a07b6.aspx</link>
      <pubDate>Fri, 20 Jul 2007 16:04:34 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f857151378%2f" target="_blank" atomicselection="true"&gt;&lt;img style="margin: 0px 0px 10px 10px" alt="Peter" src="http://farm2.static.flickr.com/1371/857151378_fef9719585_m.jpg" align="right" border="0"&gt;&lt;/a&gt; Three
of my good friends came to visit in the past couple of weeks.&amp;nbsp; My friend &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;amp;url=http%3a%2f%2fwww.flatlandmedia.com%2fflatlander%2f" target="_blank"&gt;Peter&lt;/a&gt;,
who I met in the 5th grade (if I recall correctly) visited again last week.&amp;nbsp;
Due to a bizarre coincidence, his wife had a one-week job in Bellevue, which is here
on&amp;nbsp;the east side of Seattle.&amp;nbsp; So, I got to hang out with him, which was
a blast.
&lt;/p&gt;
&lt;p&gt;
This week, my buddy &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;amp;url=http%3a%2f%2fwww.davejenbarnes.com%2fwordpress" target="_blank"&gt;Dave&lt;/a&gt; was
here.&amp;nbsp; Dave and I played trombone together in college.&amp;nbsp; His visit was also
somewhat coincidental, but I won't go into the details here.&amp;nbsp; He stayed with
us and we hung out and we had all manner of good times.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f856308457%2f" target="_blank" atomicselection="true"&gt;&lt;img style="margin: 0px 10px 10px 0px" alt="Dave and Jeff" src="http://farm2.static.flickr.com/1388/856308457_11c70e4e66_m.jpg" align="left" border="0"&gt;&lt;/a&gt; While
Dave was here, &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6&amp;amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank"&gt;Jeff&lt;/a&gt; (one
other trombone friends from college) came down from Bellingham to hang out for an
evening, which was super-fun.&amp;nbsp; In another bizarre coincidence, his wife Bethany
went to high school with Dave, so there was some reminiscing there as well.&amp;nbsp;
Bethany's mom came along for the ride as well, and schooled us all in a game of Wii
Sports bowling.
&lt;/p&gt;
&lt;p&gt;
I was really bummed that these visits occurred right after our big vacation, which
meant that I really couldn't afford to take a couple of days off to enjoy them.&amp;nbsp;
So, sorry again for that guys.
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=7d73a221-6d30-4116-a884-3be56f3a07b6" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,7d73a221-6d30-4116-a884-3be56f3a07b6.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=13c5e5bf-c64d-455c-8e69-474c6c121c66</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,13c5e5bf-c64d-455c-8e69-474c6c121c66.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,13c5e5bf-c64d-455c-8e69-474c6c121c66.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=13c5e5bf-c64d-455c-8e69-474c6c121c66</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We got back from our big summer vacation a few weeks ago, and I've finally got all
my photos processed and uploaded.  Here's the collection that combines the Cape
Cod and Texas parts of the trip:
</p>
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=13c5e5bf-c64d-455c-8e69-474c6c121c66&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2fcollections%2f72157600872159313%2f" target="_blank" atomicselection="true">
            <img style="margin: 0px 10px 0px 0px" src="http://farm2.static.flickr.com/1154/cols/72157600872159313_7db650293f_l.jpg" align="left" border="0" />
          </a>
        </p>
        <p>
We had a really great time, aside from the ridiculous hassles of air travel. 
Jenna got to meet her 2 cousins, and WE got to actually spend time with my brother
and his family, which was something that was limited due to the sickness we had during
our Christmas visit.
</p>
        <p style="clear: both">
        </p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=13c5e5bf-c64d-455c-8e69-474c6c121c66" />
      </body>
      <title>Vacation Photos</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,13c5e5bf-c64d-455c-8e69-474c6c121c66.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,13c5e5bf-c64d-455c-8e69-474c6c121c66.aspx</link>
      <pubDate>Wed, 18 Jul 2007 16:52:19 GMT</pubDate>
      <description>&lt;p&gt;
We got back from our big summer vacation a few weeks ago, and I've finally got all
my photos processed and uploaded.&amp;nbsp; Here's the collection that combines the Cape
Cod and Texas parts of the trip:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=13c5e5bf-c64d-455c-8e69-474c6c121c66&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2fcollections%2f72157600872159313%2f" target="_blank" atomicselection="true"&gt;&lt;img style="margin: 0px 10px 0px 0px" src="http://farm2.static.flickr.com/1154/cols/72157600872159313_7db650293f_l.jpg" align="left" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
We had a really great time, aside from the ridiculous hassles of air travel.&amp;nbsp;
Jenna got to meet her 2 cousins, and WE got to actually spend time with my brother
and his family, which was something that was limited due to the sickness we had during
our Christmas visit.
&lt;/p&gt;
&lt;p style="clear: both"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=13c5e5bf-c64d-455c-8e69-474c6c121c66" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,13c5e5bf-c64d-455c-8e69-474c6c121c66.aspx</comments>
      <category>Fun</category>
      <category>Photography</category>
      <category>Vacation</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=25ff5a1e-4369-4872-a992-bd271700d862</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,25ff5a1e-4369-4872-a992-bd271700d862.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,25ff5a1e-4369-4872-a992-bd271700d862.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=25ff5a1e-4369-4872-a992-bd271700d862</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you have been following my series on delegates, you may have experimented with
open-instance delegates and perhaps found it difficult to create an open-instance
delegate for a value type.
</p>
        <p>
If you'll recall, an open-instance delegate has an extra first parameter, used to
pass the instance used for the invocation.  What's not made explicitly clear
is that this first parameter must be passed by reference.
</p>
        <p>
For reference types, you've automatically got a reference, but for value types, this
must be a "ref" parameter.  For instance, a delegate type used as an open-instance
delegate for Int32.CompareTo would have to be defined something like:
</p>
        <blockquote>
          <p>
            <font face="Courier New">delegate int IntCompareToDelegate(<font color="#0000ff">ref</font> int
instance, int other);</font>
          </p>
        </blockquote>
        <p>
Otherwise, you'll get a System.ArgumentException when you try to bind the method to
the delegate, giving you the ever-helpful error message: "Error binding to target
method".
</p>
        <p>
There are lots of underlying reasons for this, both from a calling convention perspective,
as well as a side-effect perspective.  But, you can simplify it by thinking about
modifications to the instance.  If you passed by value (creating a copy that
the method acted on), any changes made to the instance by the method would be lost
because they happened to a copy.
</p>
        <p>
In most cases, value types are immutable in the framework, but you could run into
issues with your own types.  And, again, this isn't the only reason for this
restriction (take a look at the IL generated for a value-type method call to get some
more ideas).  It's just the easiest to understand.
</p>
        <p>
If you'll recall, Orcas extension methods, which are similar in concept to this, <a href="http://www.marklio.com/marklio/ct.ashx?id=25ff5a1e-4369-4872-a992-bd271700d862&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2cf246bcec-5a5c-4869-b9c1-671d8f0daa4c.aspx" target="_blank">do
not follow this pattern</a> and are subject to the infamous value type copying problems.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=25ff5a1e-4369-4872-a992-bd271700d862" />
      </body>
      <title>Open-instance delegates for value types?</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,25ff5a1e-4369-4872-a992-bd271700d862.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,25ff5a1e-4369-4872-a992-bd271700d862.aspx</link>
      <pubDate>Mon, 16 Jul 2007 19:24:58 GMT</pubDate>
      <description>&lt;p&gt;
If you have been following my series on delegates, you may have experimented with
open-instance delegates and perhaps found it difficult to create an open-instance
delegate for a value type.
&lt;/p&gt;
&lt;p&gt;
If you'll recall, an open-instance delegate has an extra first parameter, used to
pass the instance used for the invocation.&amp;nbsp; What's not made explicitly clear
is that this first parameter must be passed by reference.
&lt;/p&gt;
&lt;p&gt;
For reference types, you've automatically got a reference, but for value types, this
must be a "ref" parameter.&amp;nbsp; For instance, a delegate type used as an open-instance
delegate for Int32.CompareTo would have to be defined something like:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;delegate int IntCompareToDelegate(&lt;font color=#0000ff&gt;ref&lt;/font&gt; int
instance, int other);&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Otherwise, you'll get a System.ArgumentException when you try to bind the method to
the delegate, giving you the ever-helpful error message: "Error binding to target
method".
&lt;/p&gt;
&lt;p&gt;
There are lots of underlying reasons for this, both from a calling convention perspective,
as well as a side-effect perspective.&amp;nbsp; But, you can simplify it by thinking about
modifications to the instance.&amp;nbsp; If you passed by value (creating a copy that
the method acted on), any changes made to the instance by the method would be lost
because they happened to a copy.
&lt;/p&gt;
&lt;p&gt;
In most cases, value types are immutable in the framework, but you could run into
issues with your own types.&amp;nbsp; And, again, this isn't the only reason for this
restriction (take a look at the IL generated for a value-type method call to get some
more ideas).&amp;nbsp; It's just the easiest to understand.
&lt;/p&gt;
&lt;p&gt;
If you'll recall, Orcas extension methods, which are similar in concept to this,&amp;nbsp;&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=25ff5a1e-4369-4872-a992-bd271700d862&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2cf246bcec-5a5c-4869-b9c1-671d8f0daa4c.aspx" target=_blank&gt;do
not follow this pattern&lt;/a&gt; and are subject to the infamous value type copying problems.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=25ff5a1e-4369-4872-a992-bd271700d862" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,25ff5a1e-4369-4872-a992-bd271700d862.aspx</comments>
      <category>CLR</category>
      <category>Fun</category>
      <category>Technical</category>
      <category>Delegates</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=ff6810d4-0012-42e8-a219-cc31b16480e7</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,ff6810d4-0012-42e8-a219-cc31b16480e7.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,ff6810d4-0012-42e8-a219-cc31b16480e7.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=ff6810d4-0012-42e8-a219-cc31b16480e7</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=ff6810d4-0012-42e8-a219-cc31b16480e7&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f585712478%2f" target="_blank" atomicselection="true">
            <img src="http://farm2.static.flickr.com/1120/585712478_5051bdafee.jpg" />
          </a>
        </p>
        <p>
 
</p>
        <p>
I know, 2 picture-only posts in a row.  I couldn't resist this one though.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=ff6810d4-0012-42e8-a219-cc31b16480e7" />
      </body>
      <title>Soft</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,ff6810d4-0012-42e8-a219-cc31b16480e7.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,ff6810d4-0012-42e8-a219-cc31b16480e7.aspx</link>
      <pubDate>Fri, 22 Jun 2007 16:34:46 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=ff6810d4-0012-42e8-a219-cc31b16480e7&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f585712478%2f" target="_blank" atomicselection="true"&gt;&lt;img src="http://farm2.static.flickr.com/1120/585712478_5051bdafee.jpg"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I know, 2 picture-only posts in a row.&amp;nbsp; I couldn't resist this one though.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=ff6810d4-0012-42e8-a219-cc31b16480e7" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,ff6810d4-0012-42e8-a219-cc31b16480e7.aspx</comments>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=3956c626-aa7a-42c2-b6ec-b02875757f56</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,3956c626-aa7a-42c2-b6ec-b02875757f56.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,3956c626-aa7a-42c2-b6ec-b02875757f56.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=3956c626-aa7a-42c2-b6ec-b02875757f56</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=3956c626-aa7a-42c2-b6ec-b02875757f56&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f573407096%2f" target="_blank" atomicselection="true">
            <img src="http://farm2.static.flickr.com/1191/573407096_7c3010c3f8.jpg" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=3956c626-aa7a-42c2-b6ec-b02875757f56" />
      </body>
      <title>Honing her Jedi skills</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,3956c626-aa7a-42c2-b6ec-b02875757f56.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,3956c626-aa7a-42c2-b6ec-b02875757f56.aspx</link>
      <pubDate>Wed, 20 Jun 2007 17:01:09 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=3956c626-aa7a-42c2-b6ec-b02875757f56&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f573407096%2f" target="_blank" atomicselection="true"&gt;&lt;img src="http://farm2.static.flickr.com/1191/573407096_7c3010c3f8.jpg"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=3956c626-aa7a-42c2-b6ec-b02875757f56" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,3956c626-aa7a-42c2-b6ec-b02875757f56.aspx</comments>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was helping a friend with a problem recently.  He was taking a set of serial
web service calls and doing them in parallel to save time, and was not up-to-speed
on the best approach for that.  Once he settled on an approach, he
realized that since his web service calls were being wrapped in an abstraction layer,
he didn't have the Begin/End asynchronous call methods that are provided by the proxy
class.
</p>
        <p>
"No problem, just wrap them in a delegate".  The compiler automatically gives
you Begin/EndInvoke methods in addition to the synchronous Invoke method.  And,
you're guaranteed not to mess up the implementation because it's all provided by the
CLR!  Just one of those things you might forget if you find yourself in the same
situation.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d" />
      </body>
      <title>Using delegates to get asynchronous invocation for free</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d.aspx</link>
      <pubDate>Wed, 13 Jun 2007 23:37:55 GMT</pubDate>
      <description>&lt;p&gt;
I was helping a friend with a problem recently.&amp;nbsp; He was taking a set of serial
web service calls and doing them in parallel to save time, and was not up-to-speed
on the best approach for that.&amp;nbsp;&amp;nbsp;Once he&amp;nbsp;settled on an approach, he
realized that since his web service calls were being wrapped in an abstraction layer,
he didn't have the Begin/End asynchronous call methods that are provided by the proxy
class.
&lt;/p&gt;
&lt;p&gt;
"No problem, just wrap them in a delegate".&amp;nbsp; The compiler automatically gives
you Begin/EndInvoke methods in addition to the synchronous Invoke method.&amp;nbsp; And,
you're guaranteed not to mess up the implementation because it's all provided by the
CLR!&amp;nbsp; Just one of those things you might forget if you find yourself in the same
situation.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,6e5f5bbf-bad3-44b8-a4ae-208c2f39be6d.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=9145f690-7279-47b9-95cc-b439660402ad</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,9145f690-7279-47b9-95cc-b439660402ad.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,9145f690-7279-47b9-95cc-b439660402ad.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=9145f690-7279-47b9-95cc-b439660402ad</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After my last few CLR posts, I've had a couple of private inquiries regarding the
usefulness of closed static delegates.  To bring everyone up to speed, a delegate
pointing to an instance method needs a "target" instance to operate on (we'll get
to <em>open instance</em> delegates later).  A static method, needs no such target,
so we can leverage the "space" used for the instance case to carry around another
object of interest.  We call a delegate with a provided value for this space
"closed over the first argument".
</p>
        <p>
For example, let's say we have a static method that does some operation on two numbers. 
For simplicity, let's just say it adds them.  Our silly class and method might
look like this:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">static</span>
            <span style="COLOR: #0000ff">class</span> NumberFunctions
{ <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">double</span> Add(<span style="COLOR: #0000ff">double</span> first, <span style="COLOR: #0000ff">double</span> second)
{ <span style="COLOR: #0000ff">return</span> first + second; } }</pre>
        </blockquote>
        <p>
        </p>
        <p>
Normally, a delegate for this method would look like:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">delegate</span>
            <span style="COLOR: #0000ff">double</span> BinaryOperation(<span style="COLOR: #0000ff">double</span> first, <span style="COLOR: #0000ff">double</span> second);</pre>
        </blockquote>
        <p>
But, we're going to create a closed static delegate, which means we're going to "burn"
the first argument into the delegate itself, so it's not needed in the delegate signature. 
Instead, we'll use the following delegate signature (I didn't spend much time thinking
up these names, I hope they make sense:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">delegate</span>
            <span style="COLOR: #0000ff">double</span> ClosedCall(<span style="COLOR: #0000ff">double</span> other);</pre>
        </blockquote>
        <p>
So, how do we create the delegate?  Normally, since C# (pre-Orcas) doesn't have
syntax for creating closed static delegates, you are forced to use one of the <a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.delegate.createdelegate.aspx" target="_blank">Delegate.CreateDelegate</a> overloads:
</p>
        <blockquote>
          <pre>ClosedCall addToOne = (ClosedCall)Delegate.CreateDelegate(
        <span style="COLOR: #0000ff">typeof</span>(ClosedCall),
1.0, <span style="COLOR: #0000ff">typeof</span>(NumberFunctions).GetMethod("<span style="COLOR: #8b0000">Add</span>",
BindingFlags.Public | BindingFlags.Static)); </pre>
        </blockquote>
        <p>
Of course, we just spent <a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ccce144d6-e166-45e5-a82a-55594c83e0cb.aspx" target="_blank">2</a><a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3df80b83-9191-4495-9d9f-b6238d06f883.aspx" target="_blank">entries</a> looking
at a helper that can do this for us (I'm not claiming this is better, I just want
you to be able to see what's happening):
</p>
        <blockquote>
          <pre>ClosedCall addToOne = DelegateBinder.Bind&lt;ClosedCall&gt;(1.0,
        <span style="COLOR: #0000ff">typeof</span>(NumberFunctions).GetMethod("<span style="COLOR: #8b0000">Add</span>",
BindingFlags.Public | BindingFlags.Static));</pre>
        </blockquote>
        <p>
Now, a call to addToOne(someNumber) will yield the result of adding the supplied argument
to one.  This is a contrived example, but you could imagine taking a method (perhaps
generated on the fly via LCG), and "attaching" an instance to it via the first argument. 
Then, being able to call it many times with different subsequent arguments, or passing
it to another component that would provide the rest of the arguments.  In this
way, you get the benefits of not having to keep track of an instance, without having
to own the API for the instance.  Additionally, you could "chain" delegates together
so that many arguments are captured in a stack of delegate calls, allowing closure-type
semantics at the cost of some stack space (although since C# has closure support,
you'd never really need to do that).
</p>
        <p>
What's really cool is that with C# 3.0's <a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;url=http%3a%2f%2fweblogs.asp.net%2fscottgu%2farchive%2f2007%2f03%2f13%2fnew-orcas-language-feature-extension-methods.aspx" target="_blank">Extension
Methods</a> feature, we now have language support for creating early-bound closed-static
delegates.  If you bind a delegate to an extension method (using the regular
syntax for an instance method), you will get the exact IL for creating an early-bound closed
static method <strong>without our fancy helper class</strong>.  Let's see how
that would look.  Let's use a different example to keep us on our toes. 
Here's a helper function that creates email addresses:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">static</span>
            <span style="COLOR: #0000ff">class</span> StringExtensions
{ <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">string</span> MakeEmailAddressWithAlias(<span style="COLOR: #0000ff">this</span><span style="COLOR: #0000ff">string</span> domain, <span style="COLOR: #0000ff">string</span> alias)
{ <span style="COLOR: #0000ff">return</span><span style="COLOR: #0000ff">string</span>.Format("<span style="COLOR: #8b0000">{0}@{1}</span>",
alias, domain); } }</pre>
        </blockquote>
        <p>
Notice the "this" in front of the first parameter, this tells the compiler that the
method should be considered when resolving method calls for string.  We'll use
one of the delegate types provided in Orcas. Now, here's how the bind looks:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">string</span> fooDotCom = "<span style="COLOR: #8b0000">foo.com</span>";
Func&lt;<span style="COLOR: #0000ff">string</span>, <span style="COLOR: #0000ff">string</span>&gt;
makeFooDotComAddress = fooDotCom.MakeEmailAddressWithAlias; <span style="COLOR: #0000ff">string</span> email
= makeFooDotComAddress("<span style="COLOR: #8b0000">bar</span>");</pre>
        </blockquote>
        <p>
So, the result is that email will be <a href="mailto:bar@foo.com">bar@foo.com</a>.
</p>
        <p>
Hopefully, through these contrived examples, you can see the scenarios that closed
static methods provide, as well as learn how you can create one the easy way with
extension methods in Orcas.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9145f690-7279-47b9-95cc-b439660402ad" />
      </body>
      <title>What can you do with a closed static delegate? (and how to create them with Orcas)</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,9145f690-7279-47b9-95cc-b439660402ad.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,9145f690-7279-47b9-95cc-b439660402ad.aspx</link>
      <pubDate>Thu, 17 May 2007 17:46:22 GMT</pubDate>
      <description>&lt;p&gt;
After my last few CLR posts, I've had a couple of private inquiries regarding the
usefulness of closed static delegates.&amp;nbsp; To bring everyone up to speed, a delegate
pointing to an instance method needs a "target" instance to operate on (we'll get
to &lt;em&gt;open instance&lt;/em&gt; delegates later).&amp;nbsp; A static method, needs no such target,
so we can leverage the "space" used for the instance case to carry around another
object of interest.&amp;nbsp; We call a delegate with a provided value for this space
"closed over the first argument".
&lt;/p&gt;
&lt;p&gt;
For example, let's say we have a static method that does some operation on two numbers.&amp;nbsp;
For simplicity, let's just say it adds them.&amp;nbsp; Our silly class and method might
look like this:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; NumberFunctions
{ &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; Add(&lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; first, &lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; second)
{ &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; first + second; } }&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Normally, a delegate for this method would look like:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; BinaryOperation(&lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; first, &lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; second);&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
But, we're going to create a closed static delegate, which means we're going to "burn"
the first argument into the delegate itself, so it's not needed in the delegate signature.&amp;nbsp;
Instead, we'll use the following delegate signature (I didn't spend much time thinking
up these names, I hope they make sense:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; ClosedCall(&lt;span style="COLOR: #0000ff"&gt;double&lt;/span&gt; other);&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
So, how do we create the delegate?&amp;nbsp; Normally, since C# (pre-Orcas) doesn't have
syntax&amp;nbsp;for creating closed static delegates, you are forced to use one of the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.delegate.createdelegate.aspx" target=_blank&gt;Delegate.CreateDelegate&lt;/a&gt; overloads:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;ClosedCall addToOne = (ClosedCall)Delegate.CreateDelegate(
        &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(ClosedCall),
1.0, &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(NumberFunctions).GetMethod("&lt;span style="COLOR: #8b0000"&gt;Add&lt;/span&gt;",
BindingFlags.Public | BindingFlags.Static)); &lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Of course, we just spent &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ccce144d6-e166-45e5-a82a-55594c83e0cb.aspx" target=_blank&gt;2&lt;/a&gt; &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c3df80b83-9191-4495-9d9f-b6238d06f883.aspx" target=_blank&gt;entries&lt;/a&gt; looking
at a helper that can do this for us (I'm not claiming this is better, I just want
you to be able to see what's happening):
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;ClosedCall addToOne = DelegateBinder.Bind&amp;lt;ClosedCall&amp;gt;(1.0,
        &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(NumberFunctions).GetMethod("&lt;span style="COLOR: #8b0000"&gt;Add&lt;/span&gt;",
BindingFlags.Public | BindingFlags.Static));&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Now, a call to addToOne(someNumber) will yield the result of adding the supplied argument
to one.&amp;nbsp; This is a contrived example, but you could imagine taking a method (perhaps
generated on the fly via LCG), and "attaching" an instance to it via the first argument.&amp;nbsp;
Then, being able to call it many times with different subsequent arguments, or passing
it to another component that would provide the rest of the arguments.&amp;nbsp; In this
way, you get the benefits of not having to keep track of an instance, without&amp;nbsp;having
to own the API for the instance.&amp;nbsp; Additionally, you could "chain" delegates together
so that many arguments are captured in a stack of delegate calls, allowing closure-type
semantics at the cost of some stack space (although since C# has closure support,
you'd never really need to do that).
&lt;/p&gt;
&lt;p&gt;
What's really cool is that with C# 3.0's &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=9145f690-7279-47b9-95cc-b439660402ad&amp;amp;url=http%3a%2f%2fweblogs.asp.net%2fscottgu%2farchive%2f2007%2f03%2f13%2fnew-orcas-language-feature-extension-methods.aspx" target=_blank&gt;Extension
Methods&lt;/a&gt;&amp;nbsp;feature, we now have language support for creating early-bound closed-static
delegates.&amp;nbsp; If you bind a delegate to an extension method (using the regular
syntax for an instance method), you will get the exact IL for creating an early-bound&amp;nbsp;closed
static method &lt;strong&gt;without our fancy helper class&lt;/strong&gt;.&amp;nbsp; Let's see how
that would look.&amp;nbsp; Let's use a different example to keep us on our toes.&amp;nbsp;
Here's a helper function that creates email addresses:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; StringExtensions
{ &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; MakeEmailAddressWithAlias(&lt;span style="COLOR: #0000ff"&gt;this&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; domain, &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; alias)
{ &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;.Format("&lt;span style="COLOR: #8b0000"&gt;{0}@{1}&lt;/span&gt;",
alias, domain); } }&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Notice the "this" in front of the first parameter, this tells the compiler that the
method should be considered when resolving method calls for string.&amp;nbsp; We'll use
one of the delegate types provided in Orcas. Now, here's how the bind looks:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; fooDotCom = "&lt;span style="COLOR: #8b0000"&gt;foo.com&lt;/span&gt;";
Func&amp;lt;&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;, &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;&amp;gt;
makeFooDotComAddress = fooDotCom.MakeEmailAddressWithAlias; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; email
= makeFooDotComAddress("&lt;span style="COLOR: #8b0000"&gt;bar&lt;/span&gt;");&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
So, the result is that email will be &lt;a href="mailto:bar@foo.com"&gt;bar@foo.com&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Hopefully, through these contrived examples, you can see the scenarios that closed
static methods provide, as well as learn how you can create one the easy way with
extension methods in Orcas.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9145f690-7279-47b9-95cc-b439660402ad" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,9145f690-7279-47b9-95cc-b439660402ad.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=3df80b83-9191-4495-9d9f-b6238d06f883</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,3df80b83-9191-4495-9d9f-b6238d06f883.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,3df80b83-9191-4495-9d9f-b6238d06f883.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=3df80b83-9191-4495-9d9f-b6238d06f883</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In <a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ccce144d6-e166-45e5-a82a-55594c83e0cb.aspx" target="_blank">my
last post</a>, I showed a nifty way of constructing "early-bound" delegates using
LCG.  Here's the same helper class implemented without LCG:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">static</span>
            <span style="COLOR: #0000ff">class</span> DelegateBinder
{ <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span> TDelegate
Bind&lt;TDelegate&gt;(<span style="COLOR: #0000ff">object</span> firstArg, MethodInfo
method) { <span style="COLOR: #0000ff">return</span> (TDelegate)Activator.CreateInstance( <span style="COLOR: #0000ff">typeof</span>(TDelegate),
firstArg, method.MethodHandle.GetFunctionPointer()); } } </pre>
        </blockquote>
        <p>
This one is quite a bit simpler, and extrapolating from what we learned last time,
it's easy to see what's happening.  Hopefully, you are already familiar
with the <a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.activator.aspx" target="_blank">Activator</a> class. 
Basically, this just shows the managed call chain that produces a function pointer
to a method given a MethodInfo.
</p>
        <p>
I really like the LCG-based implementation, but only because of my love of DynamicMethod. 
It's pretty complex, and aside from opportunities for caching, doesn't really have
anything over this implementation. This one is just plain simple, and would have a
single-line implementation if I hadn't put some line breaks to avoid formatting problems. 
It does, however, highlight the annoyingness of having to work around the compilers' "helpfulness"
when it comes to delegate construction.  If only I could just call the constructor
directly.
</p>
        <p>
It is worth noting that this doesn't work in the Silverlight 1.1 alpha or the compact
framework (or XNA for that matter), neither of which expose <a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.runtimemethodhandle.getfunctionpointer.aspx" target="_blank">RuntimeMethodHandle.GetFunctionPointer()</a>.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883" />
      </body>
      <title>Early-bind delegates without LCG</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,3df80b83-9191-4495-9d9f-b6238d06f883.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,3df80b83-9191-4495-9d9f-b6238d06f883.aspx</link>
      <pubDate>Mon, 14 May 2007 23:40:01 GMT</pubDate>
      <description>&lt;p&gt;
In &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2ccce144d6-e166-45e5-a82a-55594c83e0cb.aspx" target=_blank&gt;my
last post&lt;/a&gt;, I showed a nifty way of constructing "early-bound" delegates using
LCG.&amp;nbsp; Here's the same helper class implemented without LCG:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; DelegateBinder
{ &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; TDelegate
Bind&amp;lt;TDelegate&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; firstArg, MethodInfo
method) { &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; (TDelegate)Activator.CreateInstance( &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(TDelegate),
firstArg, method.MethodHandle.GetFunctionPointer()); } } &lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
This one is quite a bit simpler, and extrapolating from what we learned last time,
it's easy to see what's happening.&amp;nbsp; Hopefully, you are already&amp;nbsp;familiar
with the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.activator.aspx" target=_blank&gt;Activator&lt;/a&gt; class.&amp;nbsp;
Basically, this just shows the managed call chain that produces a function pointer
to a method given a MethodInfo.
&lt;/p&gt;
&lt;p&gt;
I really like the LCG-based implementation, but only because of my love of DynamicMethod.&amp;nbsp;
It's pretty complex, and aside from opportunities for caching, doesn't really have
anything over this implementation. This one is just plain simple, and would have a
single-line implementation if I hadn't put some line breaks to avoid formatting problems.&amp;nbsp;
It does, however, highlight the annoyingness of having to work around the compilers'&amp;nbsp;"helpfulness"
when it comes to delegate construction.&amp;nbsp; If only I could just call the constructor
directly.
&lt;/p&gt;
&lt;p&gt;
It is worth noting that this doesn't work in the Silverlight 1.1 alpha or the compact
framework (or XNA for that matter), neither of which expose &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.runtimemethodhandle.getfunctionpointer.aspx" target=_blank&gt;RuntimeMethodHandle.GetFunctionPointer()&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=3df80b83-9191-4495-9d9f-b6238d06f883" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,3df80b83-9191-4495-9d9f-b6238d06f883.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=cce144d6-e166-45e5-a82a-55594c83e0cb</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,cce144d6-e166-45e5-a82a-55594c83e0cb.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,cce144d6-e166-45e5-a82a-55594c83e0cb.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=cce144d6-e166-45e5-a82a-55594c83e0cb</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In a <a href="http://www.marklio.com/marklio/ct.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb&amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c4269ecd2-381c-4ab0-ae2e-7e88ed706977.aspx" target="_blank">previous
post about delegates</a>, I discussed the following interesting cases of delegates:
</p>
        <ul>
          <li>
Closed static 
</li>
          <li>
Open instance</li>
        </ul>
        <p>
See the previous post for the full explanation, but these basically open up some interesting
dynamic scenarios.  The problem is that C# and VB do not expose syntax for constructing
these in an "early-bound" fashion, that is using the special constructor on the delegate
type rather than Delegate.CreateDelegate (which more or less binds via reflection).
</p>
        <p>
For most scenarios this is not a huge problem, but there are some performance considerations
and other issues to consider that I don't really want to dig into at the moment. 
One sufficiently important scenario is <em><strong>testing</strong></em> early-bound
invocation.  If your language doesn't support something, how can you test it? 
Well, you can write the whole test in IL, but that is not a terribly maintainable
proposition.
</p>
        <p>
Another option is to only write the part you need in IL.  Unfortunately, C# doesn't
allow you to write inline IL, but you can use Reflection.Emit.  And, since v2.0,
you can use LCG (Lightweight Code Generation) via DynamicMethod.
</p>
        <p>
The trick here is to understand how delegates are instantiated.  Delegates are
just classes like any other.  They inherit from MulticastDelegate (typically). 
The special part is that the runtime provides all the implementation and they have
a special constructor.  Here's (approximately) the constructor signature
for System.Action&lt;T&gt;:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span> Action(<span style="COLOR: #0000ff">object</span> o,
IntPtr method)</pre>
        </blockquote>
        <p>
Object? IntPtr?  What the heck? Well, it's not as bizarre as you might think. 
The object is simply the first argument for the invocation.  This allows binding
to a particular instance ("this" for instance methods, arg 0 for static methods).
The IntPtr is a pointer to the method.  "Pointers?!!?!?! in managed code?!?!"
you say?  That's right, a pointer.  An object is easy enough to come by,
but where do I get the pointer?  Well, the pointer can be easily retrieved via
the <a href="http://www.marklio.com/marklio/ct.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb&amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.reflection.emit.opcodes.ldftn.aspx" target="_blank">ldftn</a> opcode. 
It loads the address of a given method (described via a token in IL, and a MethodInfo
in Reflection.Emit).
</p>
        <p>
Lets cut to the chase.  Here's a little class that can bind a method to a delegate
type and allow you to provide the first argument (you'll need System, System.Reflection,
System.Reflection.Emit using statements):
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">public</span>
            <span style="COLOR: #0000ff">static</span>
            <span style="COLOR: #0000ff">class</span> DelegateBinder
{ <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">delegate</span> TDelegate
Binder&lt;TDelegate&gt;(<span style="COLOR: #0000ff">object</span> firstArg); <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span> TDelegate
Bind&lt;TDelegate&gt;(<span style="COLOR: #0000ff">object</span> firstArg, MethodInfo
method) { DynamicMethod dynMethod = <span style="COLOR: #0000ff">new</span> DynamicMethod("<span style="COLOR: #8b0000">PassthroughBinderImplementation</span>", <span style="COLOR: #0000ff">typeof</span>(TDelegate), <span style="COLOR: #0000ff">new</span> Type[]
{ <span style="COLOR: #0000ff">typeof</span>(<span style="COLOR: #0000ff">object</span>)
}, <span style="COLOR: #0000ff">typeof</span>(DelegateBinder)); ILGenerator gen =
dynMethod.GetILGenerator(); <span style="COLOR: #008000">//load the first argument</span> gen.Emit(OpCodes.Ldarg_0); <span style="COLOR: #008000">//load
the address of the method</span> gen.Emit(OpCodes.Ldftn, method); <span style="COLOR: #008000">//create
the delegate</span> gen.Emit(OpCodes.Newobj, <span style="COLOR: #0000ff">typeof</span>(TDelegate).GetConstructor(<span style="COLOR: #0000ff">new</span> Type[]
{ <span style="COLOR: #0000ff">typeof</span>(<span style="COLOR: #0000ff">object</span>), <span style="COLOR: #0000ff">typeof</span>(IntPtr)
})); gen.Emit(OpCodes.Ret); <span style="COLOR: #0000ff">return</span> ((Binder&lt;TDelegate&gt;)dynMethod.CreateDelegate(<span style="COLOR: #0000ff">typeof</span>(Binder&lt;TDelegate&gt;)))(firstArg);
} } </pre>
        </blockquote>
        <p>
With this class, you can dynamically construct all the early-bound variants (ignoring
variants for signature relaxation) like so:
</p>
        <blockquote>
          <pre>
            <span style="COLOR: #0000ff">using</span> System; <span style="COLOR: #0000ff">using</span> System.Reflection; <span style="COLOR: #0000ff">using</span> System.Reflection.Emit; <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #0000ff">string</span> Passthrough(<span style="COLOR: #0000ff">string</span> str); <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #0000ff">string</span> BoundPassthrough(); <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">delegate</span><span style="COLOR: #0000ff">string</span> ProgramPassthrough(Program
p); <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">class</span> Program
{ <span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">void</span> Main(<span style="COLOR: #0000ff">string</span>[]
args) { Console.WriteLine("<span style="COLOR: #8b0000">Open Static:</span>"); Passthrough
ospt = DelegateBinder.Bind&lt;Passthrough&gt;(<span style="COLOR: #0000ff">null</span>, <span style="COLOR: #0000ff">typeof</span>(Program).GetMethod("<span style="COLOR: #8b0000">StaticImplementation</span>", <span style="COLOR: #0000ff">new</span> Type[]
{ <span style="COLOR: #0000ff">typeof</span>(<span style="COLOR: #0000ff">string</span>)
})); Console.WriteLine(ospt("<span style="COLOR: #8b0000">Hello World</span>")); Console.WriteLine("<span style="COLOR: #8b0000">Closed
static:</span>"); BoundPassthrough cspt = DelegateBinder.Bind&lt;BoundPassthrough&gt;("<span style="COLOR: #8b0000">Hello
World</span>", <span style="COLOR: #0000ff">typeof</span>(Program).GetMethod("<span style="COLOR: #8b0000">StaticImplementation</span>", <span style="COLOR: #0000ff">new</span> Type[]
{ <span style="COLOR: #0000ff">typeof</span>(<span style="COLOR: #0000ff">string</span>)
})); Console.WriteLine(cspt()); Console.WriteLine("<span style="COLOR: #8b0000">Open
Instance:</span>"); ProgramPassthrough oipt = DelegateBinder.Bind&lt;ProgramPassthrough&gt;(<span style="COLOR: #0000ff">null</span>, <span style="COLOR: #0000ff">typeof</span>(Program).GetMethod("<span style="COLOR: #8b0000">InstanceImplementation</span>",
Type.EmptyTypes)); Console.WriteLine(oipt(<span style="COLOR: #0000ff">new</span> Program("<span style="COLOR: #8b0000">Hello
World</span>"))); Console.WriteLine("<span style="COLOR: #8b0000">Closed Instance:</span>");
BoundPassthrough cipt = DelegateBinder.Bind&lt;BoundPassthrough&gt;(<span style="COLOR: #0000ff">new</span> Program("<span style="COLOR: #8b0000">Hello
World</span>"), <span style="COLOR: #0000ff">typeof</span>(Program).GetMethod("<span style="COLOR: #8b0000">InstanceImplementation</span>",
Type.EmptyTypes)); Console.WriteLine(cipt()); } <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #0000ff">string</span> StaticImplementation(<span style="COLOR: #0000ff">string</span> str)
{ <span style="COLOR: #0000ff">return</span> str; } <span style="COLOR: #0000ff">public</span> Program(<span style="COLOR: #0000ff">string</span> payload)
{ _Payload = payload; } <span style="COLOR: #0000ff">string</span> _Payload; <span style="COLOR: #0000ff">public</span><span style="COLOR: #0000ff">string</span> InstanceImplementation()
{ <span style="COLOR: #0000ff">return</span> _Payload; } }</pre>
        </blockquote>
        <p>
So, there are certainly cases that will break this, most involving incompatible signature
issues between the method, delegate, and the first argument.  But I didn't want
to make things more complicated for an example. Besides, the point of this is not
really to give you some neat tool (you'll probably never need to do this), but to
give people a better idea what the compiler is doing for you when you create a delegate.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb" />
      </body>
      <title>Early-bound delegates via LCG</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,cce144d6-e166-45e5-a82a-55594c83e0cb.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,cce144d6-e166-45e5-a82a-55594c83e0cb.aspx</link>
      <pubDate>Fri, 11 May 2007 22:54:23 GMT</pubDate>
      <description>&lt;p&gt;
In a &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb&amp;amp;url=http%3a%2f%2fwww.marklio.com%2fmarklio%2fPermaLink%2cguid%2c4269ecd2-381c-4ab0-ae2e-7e88ed706977.aspx" target=_blank&gt;previous
post about delegates&lt;/a&gt;, I discussed the following interesting cases of delegates:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Closed static 
&lt;li&gt;
Open instance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See the previous post for the full explanation, but these basically open up some interesting
dynamic scenarios.&amp;nbsp; The problem is that C# and VB do not expose syntax for constructing
these in an "early-bound" fashion, that is using the special constructor on the delegate
type rather than Delegate.CreateDelegate (which more or less binds via reflection).
&lt;/p&gt;
&lt;p&gt;
For most scenarios this is not a huge problem, but there are some performance considerations
and other issues to consider that I don't really want to dig into at the moment.&amp;nbsp;
One sufficiently important scenario is &lt;em&gt;&lt;strong&gt;testing&lt;/strong&gt;&lt;/em&gt; early-bound
invocation.&amp;nbsp; If your language doesn't support something, how can you test it?&amp;nbsp;
Well, you can write the whole test in IL, but that is not a terribly maintainable
proposition.
&lt;/p&gt;
&lt;p&gt;
Another option is to only write the part you need in IL.&amp;nbsp; Unfortunately, C# doesn't
allow you to write inline IL, but you can use Reflection.Emit.&amp;nbsp; And, since v2.0,
you can use LCG (Lightweight Code Generation) via DynamicMethod.
&lt;/p&gt;
&lt;p&gt;
The trick here is to understand how delegates are instantiated.&amp;nbsp; Delegates are
just classes like any other.&amp;nbsp; They inherit from MulticastDelegate (typically).&amp;nbsp;
The special part is that the runtime provides all the implementation and they have
a special constructor.&amp;nbsp;&amp;nbsp;Here's (approximately) the constructor signature
for System.Action&amp;lt;T&amp;gt;:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; Action(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; o,
IntPtr method)&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
Object? IntPtr?&amp;nbsp; What the heck? Well, it's not as bizarre as you might think.&amp;nbsp;
The object is simply the first argument for the invocation.&amp;nbsp; This allows binding
to a particular instance ("this" for instance methods, arg 0 for static methods).
The IntPtr is a pointer to the method.&amp;nbsp; "Pointers?!!?!?! in managed code?!?!"
you say?&amp;nbsp; That's right, a pointer.&amp;nbsp; An object is easy enough to come by,
but where do I get the pointer?&amp;nbsp; Well, the pointer can be easily retrieved via
the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb&amp;amp;url=http%3a%2f%2fmsdn2.microsoft.com%2fen-us%2flibrary%2fsystem.reflection.emit.opcodes.ldftn.aspx" target=_blank&gt;ldftn&lt;/a&gt; opcode.&amp;nbsp;
It loads the address of a given method (described via a token in IL, and a MethodInfo
in Reflection.Emit).
&lt;/p&gt;
&lt;p&gt;
Lets cut to the chase.&amp;nbsp; Here's a little class that can bind a method to a delegate
type and allow you to provide the first argument (you'll need System, System.Reflection,
System.Reflection.Emit using statements):
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; DelegateBinder
{ &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; TDelegate
Binder&amp;lt;TDelegate&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; firstArg); &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; TDelegate
Bind&amp;lt;TDelegate&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt; firstArg, MethodInfo
method) { DynamicMethod dynMethod = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; DynamicMethod("&lt;span style="COLOR: #8b0000"&gt;PassthroughBinderImplementation&lt;/span&gt;", &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(TDelegate), &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Type[]
{ &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt;)
}, &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(DelegateBinder)); ILGenerator gen =
dynMethod.GetILGenerator(); &lt;span style="COLOR: #008000"&gt;//load the first argument&lt;/span&gt; gen.Emit(OpCodes.Ldarg_0); &lt;span style="COLOR: #008000"&gt;//load
the address of the method&lt;/span&gt; gen.Emit(OpCodes.Ldftn, method); &lt;span style="COLOR: #008000"&gt;//create
the delegate&lt;/span&gt; gen.Emit(OpCodes.Newobj, &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(TDelegate).GetConstructor(&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Type[]
{ &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #0000ff"&gt;object&lt;/span&gt;), &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(IntPtr)
})); gen.Emit(OpCodes.Ret); &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; ((Binder&amp;lt;TDelegate&amp;gt;)dynMethod.CreateDelegate(&lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(Binder&amp;lt;TDelegate&amp;gt;)))(firstArg);
} } &lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
With this class, you can dynamically&amp;nbsp;construct all the early-bound variants (ignoring
variants for signature relaxation) like so:
&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;span style="COLOR: #0000ff"&gt;using&lt;/span&gt; System; &lt;span style="COLOR: #0000ff"&gt;using&lt;/span&gt; System.Reflection; &lt;span style="COLOR: #0000ff"&gt;using&lt;/span&gt; System.Reflection.Emit; &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; Passthrough(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; str); &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; BoundPassthrough(); &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;delegate&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; ProgramPassthrough(Program
p); &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;class&lt;/span&gt; Program
{ &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;void&lt;/span&gt; Main(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;[]
args) { Console.WriteLine("&lt;span style="COLOR: #8b0000"&gt;Open Static:&lt;/span&gt;"); Passthrough
ospt = DelegateBinder.Bind&amp;lt;Passthrough&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(Program).GetMethod("&lt;span style="COLOR: #8b0000"&gt;StaticImplementation&lt;/span&gt;", &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Type[]
{ &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;)
})); Console.WriteLine(ospt("&lt;span style="COLOR: #8b0000"&gt;Hello World&lt;/span&gt;")); Console.WriteLine("&lt;span style="COLOR: #8b0000"&gt;Closed
static:&lt;/span&gt;"); BoundPassthrough cspt = DelegateBinder.Bind&amp;lt;BoundPassthrough&amp;gt;("&lt;span style="COLOR: #8b0000"&gt;Hello
World&lt;/span&gt;", &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(Program).GetMethod("&lt;span style="COLOR: #8b0000"&gt;StaticImplementation&lt;/span&gt;", &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Type[]
{ &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt;)
})); Console.WriteLine(cspt()); Console.WriteLine("&lt;span style="COLOR: #8b0000"&gt;Open
Instance:&lt;/span&gt;"); ProgramPassthrough oipt = DelegateBinder.Bind&amp;lt;ProgramPassthrough&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;null&lt;/span&gt;, &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(Program).GetMethod("&lt;span style="COLOR: #8b0000"&gt;InstanceImplementation&lt;/span&gt;",
Type.EmptyTypes)); Console.WriteLine(oipt(&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Program("&lt;span style="COLOR: #8b0000"&gt;Hello
World&lt;/span&gt;"))); Console.WriteLine("&lt;span style="COLOR: #8b0000"&gt;Closed Instance:&lt;/span&gt;");
BoundPassthrough cipt = DelegateBinder.Bind&amp;lt;BoundPassthrough&amp;gt;(&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Program("&lt;span style="COLOR: #8b0000"&gt;Hello
World&lt;/span&gt;"), &lt;span style="COLOR: #0000ff"&gt;typeof&lt;/span&gt;(Program).GetMethod("&lt;span style="COLOR: #8b0000"&gt;InstanceImplementation&lt;/span&gt;",
Type.EmptyTypes)); Console.WriteLine(cipt()); } &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;static&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; StaticImplementation(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; str)
{ &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; str; } &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; Program(&lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; payload)
{ _Payload = payload; } &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; _Payload; &lt;span style="COLOR: #0000ff"&gt;public&lt;/span&gt; &lt;span style="COLOR: #0000ff"&gt;string&lt;/span&gt; InstanceImplementation()
{ &lt;span style="COLOR: #0000ff"&gt;return&lt;/span&gt; _Payload; } }&lt;/pre&gt;&lt;/blockquote&gt; 
&lt;p&gt;
So, there are certainly cases that will break this, most involving incompatible signature
issues between the method, delegate, and the first argument.&amp;nbsp; But I didn't want
to make things more complicated for an example. Besides, the point of this is not
really to give you some neat tool (you'll probably never need to do this), but to
give people a better idea what the compiler is doing for you when you create a delegate.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=cce144d6-e166-45e5-a82a-55594c83e0cb" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,cce144d6-e166-45e5-a82a-55594c83e0cb.aspx</comments>
      <category>CLR</category>
      <category>Delegates</category>
      <category>Fun</category>
      <category>Software Development</category>
      <category>Technical</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=d1de276f-1a8d-4285-b2da-038c7f946ff2</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,d1de276f-1a8d-4285-b2da-038c7f946ff2.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,d1de276f-1a8d-4285-b2da-038c7f946ff2.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=d1de276f-1a8d-4285-b2da-038c7f946ff2</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of my most successful comedic performances has got to be my rip-off of <a href="http://www.marklio.com/marklio/ct.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fDana_Carvey" target="_blank">Dana
Carvey</a>'s <a href="http://www.marklio.com/marklio/ct.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fA_Grumpy_Old_Man%23A_Grumpy_Old_Man">Grumpy
Old Man</a> character from SNL.  It was fun to pretend to be old.
</p>
        <p>
Last night, I really felt old.  I was overseeing the youth as they played a variant
of hide and seek, and I realized that there was something going on that I had never
experienced.  The youth were using their cell phones to call each other and brag
about their hiding places and trash-talking with the seekers about how they were never
going to find them and such.  It was so interesting.  When I played hide
and seek as a kid, not even our parents had cell phones!  Now everyone has them. 
It was just a bizarre revelation.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2" />
      </body>
      <title>In my day...</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,d1de276f-1a8d-4285-b2da-038c7f946ff2.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,d1de276f-1a8d-4285-b2da-038c7f946ff2.aspx</link>
      <pubDate>Thu, 10 May 2007 16:59:57 GMT</pubDate>
      <description>&lt;p&gt;
One of my most successful comedic performances has got to be my rip-off of &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fDana_Carvey" target="_blank"&gt;Dana
Carvey&lt;/a&gt;'s &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fA_Grumpy_Old_Man%23A_Grumpy_Old_Man"&gt;Grumpy
Old Man&lt;/a&gt; character from SNL.&amp;nbsp; It was fun to pretend to be old.
&lt;/p&gt;
&lt;p&gt;
Last night, I really felt old.&amp;nbsp; I was overseeing the youth as they played a variant
of hide and seek, and I realized that there was something going on that I had never
experienced.&amp;nbsp; The youth were using their cell phones to call each other and brag
about their hiding places and trash-talking with the seekers about how they were never
going to find them and such.&amp;nbsp; It was so interesting.&amp;nbsp; When I played hide
and seek as a kid, not even our parents had cell phones!&amp;nbsp; Now everyone has them.&amp;nbsp;
It was just a bizarre revelation.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=d1de276f-1a8d-4285-b2da-038c7f946ff2" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,d1de276f-1a8d-4285-b2da-038c7f946ff2.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=88b2ab8d-304c-470d-be36-d94f352dc55d</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,88b2ab8d-304c-470d-be36-d94f352dc55d.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,88b2ab8d-304c-470d-be36-d94f352dc55d.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=88b2ab8d-304c-470d-be36-d94f352dc55d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today is the <a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;url=http%3a%2f%2fwww.visitmix.com%2f" target="_blank">MIX07</a> keynote
(watch it live right now).  Scott Guthrie is currently on-stage spilling the
beans about what's been going on here.  He just announced that <a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;url=http%3a%2f%2fsilverlight.net%2fDefault.aspx" target="_blank">Silverlight</a> (v1.1)
includes a cross-platform (Mac/PC at the moment) version of the CLR and the .net
framework. I'll be talking about this alot in the coming months.  It's incredibly
exciting stuff.
</p>
        <p>
The NetFlix guys are on-stage showing off a demo of their new over-the-web movie viewing
experience.  I hadn't seen this demo before. Very cool.
</p>
        <p>
Scott just did his chess demo where the CLR engine plays chess against the IE javascript
engine.  Very funny.
</p>
        <p>
Scott just demoed cross-platform debugging (Running a Silverlight program on the Mac
and hitting a breakpoint inside VS running on a PC).  Fantastic.
</p>
        <p>
Scott's doing his airline demo.  I love this one because he starts with a cheesy
"Hello World" app, and ends up with a fully-functional airline flight schedule viewer
with crazy animations of planes flying around.
</p>
        <p>
Scott just announced open source Ruby for .NET (IronRuby).  He's developing a
Silverlight app with Ruby on the Mac with standard Mac tools.  Good job, <a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;url=http%3a%2f%2fwww.iunknown.com%2f" target="_blank">John</a>. 
Now he's showing the dynamic language console, that gives you an interactive REPL
console with Intellisense that can use any of the dynamic languages, or even mix the
languages together on the fly.  All in the browser.  Freaking awesome. 
I think alot of people missed the announcement about the DLR (dynamic language runtime)
that anyone can use to build a dynamic language on top of .Net.
</p>
        <p>
Wow, I've seen the MLB demo, but I hadn't seen the version running on the mobile phone!
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d" />
      </body>
      <title>Today is &amp;quot;cat out of the bag&amp;quot; day</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,88b2ab8d-304c-470d-be36-d94f352dc55d.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,88b2ab8d-304c-470d-be36-d94f352dc55d.aspx</link>
      <pubDate>Mon, 30 Apr 2007 17:07:59 GMT</pubDate>
      <description>&lt;p&gt;
Today is the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;amp;url=http%3a%2f%2fwww.visitmix.com%2f" target="_blank"&gt;MIX07&lt;/a&gt; keynote
(watch it live right now).&amp;nbsp; Scott Guthrie is currently on-stage spilling the
beans about what's been going on here.&amp;nbsp; He just announced that &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;amp;url=http%3a%2f%2fsilverlight.net%2fDefault.aspx" target="_blank"&gt;Silverlight&lt;/a&gt; (v1.1)
includes a cross-platform (Mac/PC at the moment)&amp;nbsp;version of the CLR and the .net
framework. I'll be talking about this alot in the coming months.&amp;nbsp; It's incredibly
exciting stuff.
&lt;/p&gt;
&lt;p&gt;
The NetFlix guys are on-stage showing off a demo of their new over-the-web movie viewing
experience.&amp;nbsp; I hadn't seen this demo before. Very cool.
&lt;/p&gt;
&lt;p&gt;
Scott just did his chess demo where the CLR engine plays chess against the IE javascript
engine.&amp;nbsp; Very funny.
&lt;/p&gt;
&lt;p&gt;
Scott just demoed cross-platform debugging (Running a Silverlight program on the Mac
and hitting a&amp;nbsp;breakpoint inside VS running on a PC).&amp;nbsp; Fantastic.
&lt;/p&gt;
&lt;p&gt;
Scott's doing his airline demo.&amp;nbsp; I love this one because he starts with a cheesy
"Hello World" app, and ends up with a fully-functional airline flight schedule viewer
with crazy animations of planes flying around.
&lt;/p&gt;
&lt;p&gt;
Scott just announced open source Ruby for .NET (IronRuby).&amp;nbsp; He's developing a
Silverlight app with Ruby on the Mac with standard Mac tools.&amp;nbsp; Good job,&amp;nbsp;&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d&amp;amp;url=http%3a%2f%2fwww.iunknown.com%2f" target="_blank"&gt;John&lt;/a&gt;.&amp;nbsp;
Now he's showing the dynamic language console, that gives you an interactive REPL
console with Intellisense that can use any of the dynamic languages, or even mix the
languages together on the fly.&amp;nbsp; All in the browser.&amp;nbsp; Freaking awesome.&amp;nbsp;
I think alot of people missed the announcement about the DLR (dynamic language runtime)
that anyone can use to build a dynamic language on top of .Net.
&lt;/p&gt;
&lt;p&gt;
Wow, I've seen the MLB demo, but I hadn't seen the version running on the mobile phone!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=88b2ab8d-304c-470d-be36-d94f352dc55d" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,88b2ab8d-304c-470d-be36-d94f352dc55d.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=9a0514ba-ae50-45d8-8179-f25729e2c20d</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,9a0514ba-ae50-45d8-8179-f25729e2c20d.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,9a0514ba-ae50-45d8-8179-f25729e2c20d.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=9a0514ba-ae50-45d8-8179-f25729e2c20d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In all the busy-ness of the last week or so, I neglected to announce that my brother-in-law
Ben and his wife Nicole had their baby.  Congratulations to them.  We're
looking forward to meeting Cormac Anthony Patterson in person this summer.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9a0514ba-ae50-45d8-8179-f25729e2c20d" />
      </body>
      <title>Level 2 Uncle</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,9a0514ba-ae50-45d8-8179-f25729e2c20d.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,9a0514ba-ae50-45d8-8179-f25729e2c20d.aspx</link>
      <pubDate>Mon, 23 Apr 2007 18:52:33 GMT</pubDate>
      <description>&lt;p&gt;
In all the busy-ness of the last week or so, I neglected to announce that my brother-in-law
Ben and his wife Nicole had their baby.&amp;nbsp; Congratulations to them.&amp;nbsp; We're
looking forward to meeting Cormac Anthony Patterson in person this summer.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9a0514ba-ae50-45d8-8179-f25729e2c20d" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,9a0514ba-ae50-45d8-8179-f25729e2c20d.aspx</comments>
      <category>Announcements</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=d5545c5a-ef07-4878-948c-dc4b04accb7b</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,d5545c5a-ef07-4878-948c-dc4b04accb7b.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,d5545c5a-ef07-4878-948c-dc4b04accb7b.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=d5545c5a-ef07-4878-948c-dc4b04accb7b</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This weekend, I mowed my lawn for the first time since we moved here.  It needed
it pretty bad, but I have been putting it off.  I just need to get used to cutting
the grass when it's wet.  Mowing in the northwest is quite a bit different than
mowing in central Texas. You can boil the differences down into the following:
</p>
        <ul>
          <li>
Temperature</li>
          <ul>
            <li>
Central Texas - Pretty much sweltering at any time you need to mow.</li>
            <li>
Seattle - I had a light jacket on.  I've never mowed when it was so cool out.</li>
          </ul>
          <li>
Moisture</li>
          <ul>
            <li>
Central Texas - You can usually wait until the lawn is dry to mow</li>
            <li>
Seattle - No such guarantee that your free time will line up with a time where the
grass is dry</li>
          </ul>
          <li>
Grass Type</li>
          <ul>
            <li>
Central Texas - All the lawn I've ever mowed have had st. augustine grass.  Wide,
stiff blades.</li>
            <li>
Seattle - Most grass around here is very fine, soft blades. (which makes for quite
a mess when it's wet)  In addition, there is alot of moss in the grass, especially
after the rainy season.</li>
          </ul>
          <li>
Natural Variable Obstacles - Things that can move that you have to worry about running
over.</li>
          <ul>
            <li>
Central Texas - Fire ant mounds could get big enough to cause issues, as well as some
pain if you weren't careful.</li>
            <li>
Seattle - Pinecones can be big enough to cause problems.  Mole hills are also
a new threat, especially since they often contain rocks large enough to be problematic.</li>
          </ul>
          <li>
Cutting height</li>
          <ul>
            <li>
Central Texas - You pretty much want to keep the grass as tall as possible so that
it can retain moisture and keep from dying in the sun.  I usually cut on the
highest setting</li>
            <li>
Seattle - Most people I have observed cut it very low.  I started pretty low,
and then raised it so I could get it through the tall spots without stalling the mower
due to wet clumps of clippings bogging down the blade.  I think I need a sharpening,
or a more powerful mower.</li>
          </ul>
        </ul>
        <p>
Right now, it kind of looks like a bad haircut. We'll see how it looks after the blades
stand up again, and all the clippings die and turn brown.  It'll probably need
another once-over soon to even things out. I was just happy that the mower fired up
without difficulty after having been drained of it's vital fluids for the move.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=d5545c5a-ef07-4878-948c-dc4b04accb7b" />
      </body>
      <title>Mowing the lawn</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,d5545c5a-ef07-4878-948c-dc4b04accb7b.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,d5545c5a-ef07-4878-948c-dc4b04accb7b.aspx</link>
      <pubDate>Mon, 02 Apr 2007 18:57:57 GMT</pubDate>
      <description>&lt;p&gt;
This weekend, I mowed my lawn for the first time since we moved here.&amp;nbsp; It needed
it pretty bad, but I have been putting it off.&amp;nbsp; I just need to get used to cutting
the grass when it's wet.&amp;nbsp; Mowing in the northwest is quite a bit different than
mowing in central Texas.&amp;nbsp;You can boil the differences down into the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Temperature&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Central Texas - Pretty much sweltering at any time you need to mow.&lt;/li&gt;
&lt;li&gt;
Seattle - I had a light jacket on.&amp;nbsp; I've never mowed when it was so cool out.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Moisture&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Central Texas - You can usually wait until the lawn is dry to mow&lt;/li&gt;
&lt;li&gt;
Seattle - No such guarantee that your free time will line up with a time where the
grass is dry&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Grass Type&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Central Texas - All the lawn I've ever mowed have had st. augustine grass.&amp;nbsp; Wide,
stiff blades.&lt;/li&gt;
&lt;li&gt;
Seattle - Most grass around here is very fine, soft blades. (which makes for quite
a mess when it's wet)&amp;nbsp; In addition, there is alot of moss in the grass, especially
after the rainy season.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Natural Variable Obstacles - Things that can move that you have to worry about running
over.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Central Texas - Fire ant mounds could get big enough to cause issues, as well as some
pain if you weren't careful.&lt;/li&gt;
&lt;li&gt;
Seattle - Pinecones can be big enough to cause problems.&amp;nbsp; Mole hills are also
a new threat, especially since they often contain rocks large enough to be problematic.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Cutting height&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Central Texas - You pretty much want to keep the grass as tall as possible so that
it can retain moisture and keep from dying in the sun.&amp;nbsp; I usually cut on the
highest setting&lt;/li&gt;
&lt;li&gt;
Seattle - Most people I have observed cut it very low.&amp;nbsp; I started pretty low,
and then raised it so I could get it through the tall spots without stalling the mower
due to wet clumps of clippings bogging down the blade.&amp;nbsp; I think I need a sharpening,
or a more powerful mower.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
Right now, it kind of looks like a bad haircut. We'll see how it looks after the blades
stand up again, and all the clippings die and turn brown.&amp;nbsp; It'll probably need
another once-over soon to even things out. I was just happy that the mower fired up
without difficulty after having been drained of it's vital fluids for the move.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=d5545c5a-ef07-4878-948c-dc4b04accb7b" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,d5545c5a-ef07-4878-948c-dc4b04accb7b.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=9c444b8b-5ce3-4ecb-97c5-e3cc9b820676</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,9c444b8b-5ce3-4ecb-97c5-e3cc9b820676.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,9c444b8b-5ce3-4ecb-97c5-e3cc9b820676.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=9c444b8b-5ce3-4ecb-97c5-e3cc9b820676</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For some reason, when I'm typing (and especially when I'm coding) I often conciously
attempt to capitalize numbers under certain conditions.  For some reason, my
brain thinks that there's a difference.  For instance, if I was typing HttpV4Implementation,
I would probably end up with HttpV$Implementation because if there had been a letter
there instead of a number, I would have capitalized it.  Does anyone else have
this problem?  It's really frustrating because I often retype it several times
making the same mistake each time before finally realizing what the problem is.
</p>
        <p>
I think this may be caused by my handwriting style, which seems to be typical of engineers,
where all letters are in captial form, but differ in size to indicate capitalization. 
I've seen this referred to as "smallcaps".  Oddly enough, I didn't pick this
up in college as an engineer.  I decided to start writing that way in junior
high after noticing how cool my granddad's handwriting was.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9c444b8b-5ce3-4ecb-97c5-e3cc9b820676" />
      </body>
      <title>Capital Numbers</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,9c444b8b-5ce3-4ecb-97c5-e3cc9b820676.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,9c444b8b-5ce3-4ecb-97c5-e3cc9b820676.aspx</link>
      <pubDate>Thu, 22 Mar 2007 18:13:48 GMT</pubDate>
      <description>&lt;p&gt;
For some reason, when I'm typing (and especially when I'm coding) I often conciously
attempt to capitalize numbers under certain conditions.&amp;nbsp; For some reason, my
brain thinks that there's a difference.&amp;nbsp; For instance, if I was typing HttpV4Implementation,
I would probably end up with HttpV$Implementation because if there had been a letter
there instead of a number, I would have capitalized it.&amp;nbsp; Does anyone else have
this problem?&amp;nbsp; It's really frustrating because I often retype it several times
making the same mistake each time before finally realizing what the problem is.
&lt;/p&gt;
&lt;p&gt;
I think this may be caused by my handwriting style, which seems to be typical of engineers,
where all letters are in captial form, but differ in size to indicate capitalization.&amp;nbsp;
I've seen this referred to as "smallcaps".&amp;nbsp; Oddly enough, I didn't pick this
up in college as an engineer.&amp;nbsp; I decided to start writing that way in junior
high after noticing how cool my granddad's handwriting was.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9c444b8b-5ce3-4ecb-97c5-e3cc9b820676" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,9c444b8b-5ce3-4ecb-97c5-e3cc9b820676.aspx</comments>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=f5fcfd28-b635-4260-8f90-58dc33e71209</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,f5fcfd28-b635-4260-8f90-58dc33e71209.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,f5fcfd28-b635-4260-8f90-58dc33e71209.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=f5fcfd28-b635-4260-8f90-58dc33e71209</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=f5fcfd28-b635-4260-8f90-58dc33e71209&amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank">Jeff
and Bethany</a> brought Micah down and stayed the night with us Friday night. 
It was really fun.  In my opinion, Micah did awesome for his first trip away
from home.  We watched The Bourne Supremacy on HD-DVD.  We wanted to watch
The Rundown, but I couldn't find it on HD-DVD.
</p>
        <p>
After the movie, we fired up the Wii, and played Wii Sports.  Jeff and I played
boxing for the first time, and we are still sore from it.  It was an unbelievable
workout.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5fcfd28-b635-4260-8f90-58dc33e71209" />
      </body>
      <title>Sore from Boxing with Jeff</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,f5fcfd28-b635-4260-8f90-58dc33e71209.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,f5fcfd28-b635-4260-8f90-58dc33e71209.aspx</link>
      <pubDate>Mon, 12 Mar 2007 17:47:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5fcfd28-b635-4260-8f90-58dc33e71209&amp;amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank"&gt;Jeff
and Bethany&lt;/a&gt; brought Micah down and stayed the night with us Friday night.&amp;nbsp;
It was really fun.&amp;nbsp; In my opinion, Micah did awesome for his first trip away
from home.&amp;nbsp; We watched The Bourne Supremacy on HD-DVD.&amp;nbsp; We wanted to watch
The Rundown, but I couldn't find it on HD-DVD.
&lt;/p&gt;
&lt;p&gt;
After the movie, we fired up the Wii, and played Wii Sports.&amp;nbsp; Jeff and I played
boxing for the first time, and we are still sore from it.&amp;nbsp; It was an unbelievable
workout.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5fcfd28-b635-4260-8f90-58dc33e71209" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,f5fcfd28-b635-4260-8f90-58dc33e71209.aspx</comments>
      <category>Fun</category>
      <category>Video Games</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=5763243c-773b-40cd-afbd-121fd1102ffa</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,5763243c-773b-40cd-afbd-121fd1102ffa.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,5763243c-773b-40cd-afbd-121fd1102ffa.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=5763243c-773b-40cd-afbd-121fd1102ffa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Many people are lamenting loosing an hour of sleep last night.  I, for one, welcome
our new GMT offset.  When you're in school, loosing that hour is rough, but in
the last several years, I've really grown to appreciate extra light in the evening. 
You can get so much stuff done when it's light out (particularly stuff that needs
doing outside).  As a parent, I've also become less annoyed at loosing sleep. 
Just 1 hour?  Big deal.
</p>
        <p>
Now that I live in Washington, extra light in the evening is far more desirable. 
During the shortest days of the year, it was getting dark at 4:30!  Lots of people
prepared me for the gray, rainy days of winter here, and that really hasn't bothered
me.  However, I wasn't prepared for the <em>short</em> days of winter. I really
hope they make daylight savings last all year.  But, I'll be happy with the few
extra weeks we get now.  Last night, it was still plenty light at 7pm (I don't
recall when exactly it got dark).  Now, I can't wait until the summer when it's
still light out at 10pm.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=5763243c-773b-40cd-afbd-121fd1102ffa" />
      </body>
      <title>Daylight Savings Time</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,5763243c-773b-40cd-afbd-121fd1102ffa.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,5763243c-773b-40cd-afbd-121fd1102ffa.aspx</link>
      <pubDate>Mon, 12 Mar 2007 16:32:45 GMT</pubDate>
      <description>&lt;p&gt;
Many people are lamenting loosing an hour of sleep last night.&amp;nbsp; I, for one, welcome
our new GMT offset.&amp;nbsp; When you're in school, loosing that hour is rough, but in
the last several years, I've really grown to appreciate extra light in the evening.&amp;nbsp;
You can get so much stuff done when it's light out (particularly stuff that needs
doing outside).&amp;nbsp; As a parent, I've also become less annoyed at loosing sleep.&amp;nbsp;
Just 1 hour?&amp;nbsp; Big deal.
&lt;/p&gt;
&lt;p&gt;
Now that I live in Washington, extra light in the evening is far more desirable.&amp;nbsp;
During the shortest days of the year, it was getting dark at 4:30!&amp;nbsp; Lots of people
prepared me for the gray, rainy&amp;nbsp;days of winter here, and that really hasn't bothered
me.&amp;nbsp; However, I wasn't prepared for the &lt;em&gt;short&lt;/em&gt; days of winter. I really
hope they make daylight savings last all year.&amp;nbsp; But, I'll be happy with the few
extra weeks we get now.&amp;nbsp; Last night, it was still plenty light at 7pm (I don't
recall when exactly it got dark).&amp;nbsp; Now, I can't wait until the summer when it's
still light out at 10pm.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=5763243c-773b-40cd-afbd-121fd1102ffa" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,5763243c-773b-40cd-afbd-121fd1102ffa.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=50996a67-f754-4a79-8b3d-5c710155ae3f</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,50996a67-f754-4a79-8b3d-5c710155ae3f.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,50996a67-f754-4a79-8b3d-5c710155ae3f.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=50996a67-f754-4a79-8b3d-5c710155ae3f</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of the great benefits of moving to Washington has been that we've been able to
hang out with my college buddy <a href="http://www.marklio.com/marklio/ct.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f&amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank">Jeff
Flint and his wife Bethany</a>.  In fact they are coming down for a bit this
weekend.  Today is his birthday, so Happy Birthday, Jeff!
</p>
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f234670459%2f" target="_new" atomicselection="true">
            <img src="http://farm1.static.flickr.com/90/234670459_f18b9eecdc.jpg" />
          </a>
        </p>
        <p>
Here he is posing for a recent spread in the REI catalog.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f" />
      </body>
      <title>Happy Birthday, Jeff</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,50996a67-f754-4a79-8b3d-5c710155ae3f.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,50996a67-f754-4a79-8b3d-5c710155ae3f.aspx</link>
      <pubDate>Mon, 05 Mar 2007 20:29:10 GMT</pubDate>
      <description>&lt;p&gt;
One of the great benefits of moving to Washington has been that we've been able to
hang out with my college buddy &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f&amp;amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f" target="_blank"&gt;Jeff
Flint and his wife Bethany&lt;/a&gt;.&amp;nbsp; In fact they are coming down for a bit this
weekend.&amp;nbsp; Today is his birthday, so Happy Birthday, Jeff!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f234670459%2f" target="_new" atomicselection="true"&gt;&lt;img src="http://farm1.static.flickr.com/90/234670459_f18b9eecdc.jpg"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here he is posing for a recent spread in the REI catalog.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=50996a67-f754-4a79-8b3d-5c710155ae3f" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,50996a67-f754-4a79-8b3d-5c710155ae3f.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I saw the following web address on a flyer in the breakroom: www.tacomaopera.com. 
My brain didn't split it up as "Tacoma Opera", it read it as "Taco Maopera". 
Rats, and I was thinking it was another Mexican food place to check off as being not
good.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9" />
      </body>
      <title>How I know I'm from Texas and not Washington</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9.aspx</link>
      <pubDate>Tue, 27 Feb 2007 23:32:26 GMT</pubDate>
      <description>&lt;p&gt;
I saw&amp;nbsp;the following&amp;nbsp;web address on a flyer in the breakroom: www.tacomaopera.com.&amp;nbsp;
My brain didn't split it up as "Tacoma Opera",&amp;nbsp;it read it as "Taco Maopera".&amp;nbsp;
Rats, and I was thinking it was another Mexican food place to check off as being not
good.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,4a7f7b0b-f6d2-4c83-b8e8-6a184e3ff0f9.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=452d5de2-df70-4428-bfcc-fdf070e578c5</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,452d5de2-df70-4428-bfcc-fdf070e578c5.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,452d5de2-df70-4428-bfcc-fdf070e578c5.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=452d5de2-df70-4428-bfcc-fdf070e578c5</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'll take a break from the technical posts for a moment.  Friday night, I helped
out with a youth lock-in up at the church.  It was just like old times (except
no spitting ice down the stairs).
</p>
        <p>
The youth group at our church is decidedly smaller than at our church in Austin. 
But, it makes sense because the actual church is much smaller than our church in Austin. 
There were about 8 guys there (the girls were elsewhere).  We pretty much played
video games all night.  We had 2 Wii's, a PS2, an XBox and an XBox360. 
We also played some (outdoor) capture the flag.  It was a variant that I hadn't
played before in Texas, and I didn't really understand it.
</p>
        <p>
The highlight of the night was linking the xbox and the 360 and playing some 4 vs.
4 Halo 2.  I don't like to brag, but I did pretty well.  Mainly it was fun
because they were trash-talking pretty bad about how they were going to beat me. 
One game in particular (4v4 Team Slayer on Beaver Creek) I lead my team to victory
with 35 kills and only 3 deaths.
</p>
        <p>
It was cool to connect with the guys in that way. They are having a "ski day" on Wednesday,
and I'm bummed that I have to work.  The whole concept of a day trip for snow
skiing is completely foreign and bizarre to me.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=452d5de2-df70-4428-bfcc-fdf070e578c5" />
      </body>
      <title>Youth Lock-in</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,452d5de2-df70-4428-bfcc-fdf070e578c5.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,452d5de2-df70-4428-bfcc-fdf070e578c5.aspx</link>
      <pubDate>Mon, 19 Feb 2007 19:43:11 GMT</pubDate>
      <description>&lt;p&gt;
I'll take a break from the technical posts for a moment.&amp;nbsp; Friday night, I helped
out with a youth lock-in up at the church.&amp;nbsp; It was just like old times (except
no spitting ice down the stairs).
&lt;/p&gt;
&lt;p&gt;
The youth group at our church is decidedly smaller than at our church in Austin.&amp;nbsp;
But, it makes sense because the actual church is much smaller than our church in Austin.&amp;nbsp;
There were about 8 guys there (the girls were elsewhere).&amp;nbsp; We pretty much played
video games all night.&amp;nbsp; We had 2 Wii's, a PS2, an XBox and an XBox360.&amp;nbsp;
We also played some (outdoor) capture the flag.&amp;nbsp; It was a variant that I hadn't
played before in Texas, and I didn't really understand it.
&lt;/p&gt;
&lt;p&gt;
The highlight of the night was linking the xbox and the 360 and playing some 4 vs.
4 Halo 2.&amp;nbsp; I don't like to brag, but I did pretty well.&amp;nbsp; Mainly it was fun
because they were trash-talking pretty bad about how they were going to beat me.&amp;nbsp;
One game in particular (4v4 Team Slayer on Beaver Creek) I lead my team to victory
with 35 kills and only&amp;nbsp;3 deaths.
&lt;/p&gt;
&lt;p&gt;
It was cool to connect with the guys in that way. They are having a "ski day" on Wednesday,
and I'm bummed that I have to work.&amp;nbsp; The whole concept of a day trip for snow
skiing is completely foreign and bizarre&amp;nbsp;to me.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=452d5de2-df70-4428-bfcc-fdf070e578c5" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,452d5de2-df70-4428-bfcc-fdf070e578c5.aspx</comments>
      <category>Church</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=ef0c92ed-79bb-426f-8bd5-94f0e56d6f50</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,ef0c92ed-79bb-426f-8bd5-94f0e56d6f50.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,ef0c92ed-79bb-426f-8bd5-94f0e56d6f50.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=ef0c92ed-79bb-426f-8bd5-94f0e56d6f50</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yup, it's that time again.  Today is my birthday.  I was lucky enough to
get a Wii, which has been quite enjoyable.  Now I just need to get the component
cables so I can stand to look at it. :)
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=ef0c92ed-79bb-426f-8bd5-94f0e56d6f50" />
      </body>
      <title>Happy Birthday to me</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,ef0c92ed-79bb-426f-8bd5-94f0e56d6f50.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,ef0c92ed-79bb-426f-8bd5-94f0e56d6f50.aspx</link>
      <pubDate>Thu, 25 Jan 2007 17:05:54 GMT</pubDate>
      <description>&lt;p&gt;
Yup, it's that time again.&amp;nbsp; Today is my birthday.&amp;nbsp; I was lucky enough to
get a Wii, which has been quite enjoyable.&amp;nbsp; Now I just need to get the component
cables so I can stand to look at it. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=ef0c92ed-79bb-426f-8bd5-94f0e56d6f50" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,ef0c92ed-79bb-426f-8bd5-94f0e56d6f50.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=23006a2d-4d92-43ab-8797-4c297804b05c</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,23006a2d-4d92-43ab-8797-4c297804b05c.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,23006a2d-4d92-43ab-8797-4c297804b05c.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=23006a2d-4d92-43ab-8797-4c297804b05c</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The couch that we ordered over 2 months ago was finally delivered yesterday. 
When we moved into our house here, we picked out a couple of couches...  a
less-expensive, fold-out sleeper for the upstairs living room, and a really nice,
non-sleeper for the big downstairs room where we spend most of the time.  The
sleeper arrived shortly after we ordered it, but the nice one was delayed multiple
times.
</p>
        <p>
We spent our first 7 years of marriage with really old couches that my parents had
when I was growing up.  They were so old and broken down that we decided not
to bother bringing them with us to Washington.  It's very nice to have a sweet
couch (it's nice to have a couch at all).  We made sure to get one long enough
that I can lay on it without my head or feet having to be on an armrest (something
I rarely experience at 6' 2").  It also sits up nice and high so you don't have
to feel like you're climbing out of a hole when you get up.  Becky's feet don't
even touch the floor when she's sitting on it.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=23006a2d-4d92-43ab-8797-4c297804b05c" />
      </body>
      <title>Couch!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,23006a2d-4d92-43ab-8797-4c297804b05c.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,23006a2d-4d92-43ab-8797-4c297804b05c.aspx</link>
      <pubDate>Thu, 04 Jan 2007 22:33:13 GMT</pubDate>
      <description>&lt;p&gt;
The couch that we ordered over 2 months ago was finally delivered yesterday.&amp;nbsp;
When we moved into our house here, we picked out a couple of couches...&amp;nbsp;&amp;nbsp;a
less-expensive, fold-out sleeper for the upstairs living room, and a really nice,
non-sleeper for the big downstairs room where we spend most of the time.&amp;nbsp; The
sleeper arrived shortly after we ordered it, but the nice one was delayed multiple
times.
&lt;/p&gt;
&lt;p&gt;
We spent our first 7 years of marriage with really old couches that my parents&amp;nbsp;had
when I was growing up.&amp;nbsp; They were so old and broken down that we decided not
to bother bringing them with us to Washington.&amp;nbsp; It's very nice to have a sweet
couch (it's nice to have a couch at all).&amp;nbsp; We made sure to get one long enough
that I can lay on it without my head or feet having to be on an armrest (something
I rarely experience at 6' 2").&amp;nbsp; It also sits up nice and high so you don't have
to feel like you're climbing out of a hole when you get up.&amp;nbsp; Becky's feet don't
even touch the floor when she's sitting on it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=23006a2d-4d92-43ab-8797-4c297804b05c" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,23006a2d-4d92-43ab-8797-4c297804b05c.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=b12a740c-d9fd-401f-98ff-a4cdf88b1cca</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,b12a740c-d9fd-401f-98ff-a4cdf88b1cca.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,b12a740c-d9fd-401f-98ff-a4cdf88b1cca.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=b12a740c-d9fd-401f-98ff-a4cdf88b1cca</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So, we still don't have power, but things are looking up.  Let me give you the
rough timetable so far.
</p>
        <ul>
          <li>
Thursday, Dec 14th ~8pm: Wind starts picking up. Lights begin to dip occasionally.</li>
          <li>
~10:30: Power goes out.  Ticked because I was in the middle of a Halo match.</li>
          <li>
~11:30: By this time, the wind is really blowing.  The sound of branches breaking
off can be heard occasionally throughout the surrounding woods.</li>
          <li>
Friday, Dec 15th ~12:30am: The wind is blowing like crazy.  The gusts are bending
the trees to an alarming degree.  We decide we should move downstairs in case
one decides to fall.  This wakes Jenna up and she decides we are playing some
kind of game.  She spends the next several hours honking our noses.</li>
          <li>
~2:00am:  I am VERY concerned about falling trees.  With each gust, the
sounds of breaking trees can be heard.</li>
          <li>
~4:00am:  Jenna is finally asleep.  The wind seems to have subsided. 
We go back upstairs to be comfortable.</li>
          <li>
~morning: Damage is surveryed.  Nothing major.  Check around the neighborhood. 
Nothing terrible.  Patiently wait for power to be restored.</li>
          <li>
~noon: It's getting cold.  I look for some firewood.  All I find is soaked
through.</li>
          <li>
~3pm: still no warmth.  We decide to bail.  We call the Flints and head
to Bellingham.</li>
          <li>
~7pm: We arrive in Bellingham, warm up, and stay the night.</li>
          <li>
Saturday, Dec 16th: Head back to our house to check on the cats.  The daylight
reveals the devestation of the infrastructure.  Trees are down everywhere. 
Powerlines are a tangled mess.  The power's going to take a while.  We make
sure the cats are OK, and head back to Bellingham.</li>
          <li>
Sunday, Dec 17th: Attend Jeff's church and locate a generator that meets our criteria. 
Big enough to run the furnace, small enough to fit in the trunk.  Head back to
the house and fire it up.  Becky took Jenna to a friend's house while the house
warmed up.</li>
          <li>
8pm: the house reaches 60 degrees, our criteria for staying the night, so Becky brings
Jenna back and we put her to bed.</li>
          <li>
10pm: the house reaches normal temperature.</li>
          <li>
Monday, Dec 18th 12:30am: The furnace stops working and the house begins cooling fast
(the structure itself has not yet heated up to normal)</li>
          <li>
1:00am: We head to Becky's friends house and spend the rest of the night.</li>
          <li>
Daytime: Jenna and Becky hang out at her friends house, and I go into work to see
about arranging furnace repairs and do other errands in addition to keeping work from
falling too far behind.</li>
          <li>
Evening: return to Becky's friends house, and have a nice evening playing with Jenna
and xbox. Becky and friend go check on cats, which are freaking out, but otherwise
doing fine.</li>
          <li>
Tuesday, Dec 19th: Some work.  The furnace guys show up and confirm my diagnosis
of a faulty flame sensor.  Furnace working again.</li>
          <li>
Evening: Head to another one of Becky's friends for some nice dinner.</li>
          <li>
8:00pm: I get a call from my realtor, who just got power and offers his huge generator.</li>
          <li>
~9:30pm: Big generator hooked up and running.  Now we can run some lights and
other stuff. Additionally, it runs all night on a tank of gas, rather than having
to fill every 5 hours.  Also discover cable service is out.  No xbox.</li>
          <li>
Wednesday, Dec 20th morning: wake up from a very pleasant and successful night. Fill
tank on the generator and go out to get more gas.  Then head into work.</li>
          <li>
1pm: Becky and Jenna join me at work for some lunch.</li>
        </ul>
        <p>
In somewhat unrelated news, I saw what I believe to be a couple of river otters
swimming in the creek yesterday evening.  The reason I think they were otters
was they looked like otters, and the tracks I found in the snow look like otter tracks. I'll
have to keep my eyes open for them and maybe get some pictures.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=b12a740c-d9fd-401f-98ff-a4cdf88b1cca" />
      </body>
      <title>Seattle Power Outage 2006 Update</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,b12a740c-d9fd-401f-98ff-a4cdf88b1cca.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,b12a740c-d9fd-401f-98ff-a4cdf88b1cca.aspx</link>
      <pubDate>Wed, 20 Dec 2006 22:46:57 GMT</pubDate>
      <description>&lt;p&gt;
So, we still don't have power, but things are looking up.&amp;nbsp; Let me give you the
rough timetable so far.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Thursday, Dec 14th ~8pm: Wind starts picking up. Lights begin to dip occasionally.&lt;/li&gt;
&lt;li&gt;
~10:30: Power goes out.&amp;nbsp; Ticked because I was in the middle of a Halo match.&lt;/li&gt;
&lt;li&gt;
~11:30: By this time, the wind is really blowing.&amp;nbsp; The sound of branches breaking
off can be heard occasionally throughout the surrounding woods.&lt;/li&gt;
&lt;li&gt;
Friday, Dec 15th ~12:30am: The wind is blowing like crazy.&amp;nbsp; The gusts are bending
the trees to an alarming degree.&amp;nbsp; We decide we should move downstairs in case
one decides to fall.&amp;nbsp; This wakes Jenna up and she decides we are playing some
kind of game.&amp;nbsp; She spends the next several hours honking our noses.&lt;/li&gt;
&lt;li&gt;
~2:00am:&amp;nbsp; I am VERY concerned about falling trees.&amp;nbsp; With each gust, the
sounds of breaking trees can be heard.&lt;/li&gt;
&lt;li&gt;
~4:00am:&amp;nbsp; Jenna is finally asleep.&amp;nbsp; The wind seems to have subsided.&amp;nbsp;
We go back upstairs to be comfortable.&lt;/li&gt;
&lt;li&gt;
~morning: Damage is surveryed.&amp;nbsp; Nothing major.&amp;nbsp; Check around the neighborhood.&amp;nbsp;
Nothing terrible.&amp;nbsp; Patiently wait for power to be restored.&lt;/li&gt;
&lt;li&gt;
~noon: It's getting cold.&amp;nbsp; I look for some firewood.&amp;nbsp; All I find is soaked
through.&lt;/li&gt;
&lt;li&gt;
~3pm: still no warmth.&amp;nbsp; We decide to bail.&amp;nbsp; We call the Flints and head
to Bellingham.&lt;/li&gt;
&lt;li&gt;
~7pm: We arrive in Bellingham, warm up, and stay the night.&lt;/li&gt;
&lt;li&gt;
Saturday, Dec 16th: Head back to our house to check on the cats.&amp;nbsp; The daylight
reveals the devestation of the infrastructure.&amp;nbsp; Trees are down everywhere.&amp;nbsp;
Powerlines are a tangled mess.&amp;nbsp; The power's going to take a while.&amp;nbsp; We make
sure the cats are OK, and head back to Bellingham.&lt;/li&gt;
&lt;li&gt;
Sunday, Dec 17th: Attend Jeff's church and locate a generator that meets our criteria.&amp;nbsp;
Big enough to run the furnace, small enough to fit in the trunk.&amp;nbsp; Head back to
the house and fire it up.&amp;nbsp; Becky took Jenna to a friend's house while the house
warmed up.&lt;/li&gt;
&lt;li&gt;
8pm: the house reaches 60 degrees, our criteria for staying the night, so Becky brings
Jenna back and we put her to bed.&lt;/li&gt;
&lt;li&gt;
10pm: the house reaches normal temperature.&lt;/li&gt;
&lt;li&gt;
Monday, Dec 18th 12:30am: The furnace stops working and the house begins cooling fast
(the structure itself has&amp;nbsp;not yet heated up to normal)&lt;/li&gt;
&lt;li&gt;
1:00am: We head to Becky's friends house and spend the rest of the night.&lt;/li&gt;
&lt;li&gt;
Daytime: Jenna and Becky hang out at her friends house, and I go into work to see
about arranging furnace repairs and do other errands in addition to keeping work from
falling too far behind.&lt;/li&gt;
&lt;li&gt;
Evening: return to Becky's friends house, and have a nice evening playing with Jenna
and xbox. Becky and friend go check on cats, which are freaking out, but otherwise
doing fine.&lt;/li&gt;
&lt;li&gt;
Tuesday, Dec 19th: Some work.&amp;nbsp; The furnace guys show up and confirm my diagnosis
of a faulty flame sensor.&amp;nbsp; Furnace working again.&lt;/li&gt;
&lt;li&gt;
Evening: Head to another one of Becky's friends for some nice dinner.&lt;/li&gt;
&lt;li&gt;
8:00pm: I get a call from my realtor, who just got power and offers his huge generator.&lt;/li&gt;
&lt;li&gt;
~9:30pm: Big generator hooked up and running.&amp;nbsp; Now we can run some lights and
other stuff.&amp;nbsp;Additionally, it runs all night on a tank of gas, rather than having
to fill every 5 hours.&amp;nbsp; Also discover cable service is out.&amp;nbsp; No xbox.&lt;/li&gt;
&lt;li&gt;
Wednesday, Dec 20th morning: wake up from a very pleasant and successful night. Fill
tank on the generator and go out to get more gas.&amp;nbsp; Then head into work.&lt;/li&gt;
&lt;li&gt;
1pm: Becky and Jenna join me at work for some lunch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In somewhat unrelated news, I saw what I believe to be a couple of river&amp;nbsp;otters
swimming in the creek yesterday evening.&amp;nbsp; The reason I think they were otters
was they looked like otters, and the tracks I found in the snow look like otter tracks.&amp;nbsp;I'll
have to keep my eyes open for them and maybe get some pictures.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=b12a740c-d9fd-401f-98ff-a4cdf88b1cca" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,b12a740c-d9fd-401f-98ff-a4cdf88b1cca.aspx</comments>
      <category>Announcements</category>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c77d4440-5949-4cb3-b241-04733dbf1440</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c77d4440-5949-4cb3-b241-04733dbf1440.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c77d4440-5949-4cb3-b241-04733dbf1440.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c77d4440-5949-4cb3-b241-04733dbf1440</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f308939752%2f" target="_new" atomicselection="true">
            <img style="margin: 5px 5px 5px 0px" alt="Lots of snow - Blue sky" src="http://static.flickr.com/112/308939752_a0ab2c8a6d_t.jpg" align="left" />
          </a>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f308947464%2f" target="_new" atomicselection="true">
            <img style="margin: 5px 0px 5px 5px" alt="Making snow ice cream!" src="http://static.flickr.com/109/308947464_c8e259a366_s.jpg" align="right" />
          </a>It
hasn't snowed any more. In fact, yesterday was a clear, beautiful day.  You can
check out the <a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2farchives%2fdate-posted%2f2006%2f11%2f28%2f" target="_blank">photos
I uploaded yesterday</a> for all the snowy goodness, as well as some overdue photos
since Halloween.  But, the temperature hasn't gone up, so all the snow is still
here.  I even went outside, got some snow, and made some snow ice cream, which
I haven't had in ages. (It doesn't snow enough in Central Texas to get clean snow)
</p>
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f309561813%2f" target="_new" atomicselection="true">
            <img style="margin: 5px 5px 5px 0px" alt="the road this morning" src="http://static.flickr.com/101/309561813_0f794aa0a2_t.jpg" align="left" />
          </a> My
smart card reader is broken, so I don't have remote access, which makes it hard to
work from home.  I decided to go into work today to try to get another one. 
It's supposed to snow more tonight, so I wanted to be ready, and not feel like I need
to go in.  The way into work was interesting.  There were still lots of
cars in ditches or stuck going up hills, etc.  But, I can't find a card reader,
so I'll probably head home soon.  I don't want to risk getting stuck on the way
home.  So, I'm going to queue up some work for the rest of the day and head out.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440" />
      </body>
      <title>Snow still here</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c77d4440-5949-4cb3-b241-04733dbf1440.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c77d4440-5949-4cb3-b241-04733dbf1440.aspx</link>
      <pubDate>Wed, 29 Nov 2006 18:12:20 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f308939752%2f" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 5px 5px 0px" alt="Lots of snow - Blue sky" src="http://static.flickr.com/112/308939752_a0ab2c8a6d_t.jpg" align="left"&gt;&lt;/a&gt;&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f308947464%2f" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 0px 5px 5px" alt="Making snow ice cream!" src="http://static.flickr.com/109/308947464_c8e259a366_s.jpg" align="right"&gt;&lt;/a&gt;It
hasn't snowed any more. In fact, yesterday was a clear, beautiful day.&amp;nbsp; You can
check out the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2farchives%2fdate-posted%2f2006%2f11%2f28%2f" target="_blank"&gt;photos
I uploaded yesterday&lt;/a&gt; for all the snowy goodness, as well as some overdue photos
since Halloween.&amp;nbsp; But, the temperature hasn't gone up, so all the snow is still
here.&amp;nbsp; I even went outside, got some snow, and made some snow ice cream, which
I haven't had in ages. (It doesn't snow enough in Central Texas to get clean snow)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f309561813%2f" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 5px 5px 0px" alt="the road this morning" src="http://static.flickr.com/101/309561813_0f794aa0a2_t.jpg" align="left"&gt;&lt;/a&gt; My
smart card reader is broken, so I don't have remote access, which makes it hard to
work from home.&amp;nbsp; I decided to go into work today to try to get another one.&amp;nbsp;
It's supposed to snow more tonight, so I wanted to be ready, and not feel like I need
to go in.&amp;nbsp; The way into work was interesting.&amp;nbsp; There were still lots of
cars in ditches or stuck going up hills, etc.&amp;nbsp; But, I can't find a card reader,
so I'll probably head home soon.&amp;nbsp; I don't want to risk getting stuck on the way
home.&amp;nbsp; So, I'm going to queue up some work for the rest of the day and head out.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c77d4440-5949-4cb3-b241-04733dbf1440" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c77d4440-5949-4cb3-b241-04733dbf1440.aspx</comments>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c5a4b06a-4261-4c12-8b31-c28e2980d0bd</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c5a4b06a-4261-4c12-8b31-c28e2980d0bd.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c5a4b06a-4261-4c12-8b31-c28e2980d0bd.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c5a4b06a-4261-4c12-8b31-c28e2980d0bd</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It snowed yesterday morning, and evening, resulting in quite the winter wonderland. 
We didn't get as much as <a href="http://www.marklio.com/marklio/ct.ashx?id=c5a4b06a-4261-4c12-8b31-c28e2980d0bd&amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f2006%2f11%2ftoday.html" target="_blank">Jeff
did up in Bellingham</a>, but any snow to us is alot.
</p>
        <p>
Also, last night while we were feeding Jenna, we heard what sounded like firecrackers
going off.  Seconds later, the whole house shook with a huge thud.  It took
me a few seconds to realize what had happened.  Several large branches had broken
off one of the trees on the northeast side of the house, and one of them had hit the
roof on the way down.  I believe the only damage was to the gutters, but I'll
have to see.  There is still a large piece of the branch on the roof.
</p>
        <p>
The branches don't look very big when they are way up in the tree, but when they get
to the ground, they are small trees themselves by our Central Texas standards.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c5a4b06a-4261-4c12-8b31-c28e2980d0bd" />
      </body>
      <title>The sky is falling</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c5a4b06a-4261-4c12-8b31-c28e2980d0bd.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c5a4b06a-4261-4c12-8b31-c28e2980d0bd.aspx</link>
      <pubDate>Mon, 27 Nov 2006 18:15:14 GMT</pubDate>
      <description>&lt;p&gt;
It snowed yesterday morning, and evening, resulting in quite the winter wonderland.&amp;nbsp;
We didn't get as much as &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c5a4b06a-4261-4c12-8b31-c28e2980d0bd&amp;amp;url=http%3a%2f%2fjeffandbethanyflint.blogspot.com%2f2006%2f11%2ftoday.html" target="_blank"&gt;Jeff
did up in Bellingham&lt;/a&gt;, but any snow to us is alot.
&lt;/p&gt;
&lt;p&gt;
Also, last night while we were feeding Jenna, we heard what sounded like firecrackers
going off.&amp;nbsp; Seconds later, the whole house shook with a huge thud.&amp;nbsp; It took
me a few seconds to realize what had happened.&amp;nbsp; Several large branches had broken
off one of the trees on the northeast side of the house, and one of them had hit the
roof on the way down.&amp;nbsp; I believe the only damage was to the gutters, but I'll
have to see.&amp;nbsp; There is still a large piece of the branch on the roof.
&lt;/p&gt;
&lt;p&gt;
The branches don't look very big when they are way up in the tree, but when they get
to the ground, they are small trees themselves by our Central Texas standards.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c5a4b06a-4261-4c12-8b31-c28e2980d0bd" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c5a4b06a-4261-4c12-8b31-c28e2980d0bd.aspx</comments>
      <category>Crazy stuff</category>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=c41455f6-a42d-4161-ab3d-1609196ae279</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,c41455f6-a42d-4161-ab3d-1609196ae279.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,c41455f6-a42d-4161-ab3d-1609196ae279.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=c41455f6-a42d-4161-ab3d-1609196ae279</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.marklio.com/marklio/ct.ashx?id=c41455f6-a42d-4161-ab3d-1609196ae279&amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f65335490%2f" target="_new" atomicselection="true">
            <img style="margin: 5px 5px 5px 0px" src="http://static.flickr.com/29/65335490_c6aacc1cb6_m.jpg" align="left" />
          </a> Today
is my brother's birthday!  This is the first year in as long as I can remember
that I haven't been able to be around close to his birthday.  We've missed he
and his wife Sara quite a bit.
</p>
        <p>
Happy birthday, bro.  This next year will be an amazing one for you.  We
look forward to seeing you around the holidays.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c41455f6-a42d-4161-ab3d-1609196ae279" />
      </body>
      <title>Happy Birthday Andrew!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,c41455f6-a42d-4161-ab3d-1609196ae279.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,c41455f6-a42d-4161-ab3d-1609196ae279.aspx</link>
      <pubDate>Thu, 16 Nov 2006 16:21:51 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=c41455f6-a42d-4161-ab3d-1609196ae279&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f65335490%2f" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 5px 5px 0px" src="http://static.flickr.com/29/65335490_c6aacc1cb6_m.jpg" align="left"&gt;&lt;/a&gt; Today
is my brother's birthday!&amp;nbsp; This is the first year in as long as I can remember
that I haven't been able to be around close to his birthday.&amp;nbsp; We've missed he
and his wife Sara quite a bit.
&lt;/p&gt;
&lt;p&gt;
Happy birthday, bro.&amp;nbsp; This next year will be an amazing one for you.&amp;nbsp; We
look forward to seeing you around the holidays.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=c41455f6-a42d-4161-ab3d-1609196ae279" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,c41455f6-a42d-4161-ab3d-1609196ae279.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=9fd0556d-1e18-4e87-b98e-f55687f56a1d</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,9fd0556d-1e18-4e87-b98e-f55687f56a1d.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,9fd0556d-1e18-4e87-b98e-f55687f56a1d.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=9fd0556d-1e18-4e87-b98e-f55687f56a1d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, we are closing on the sale of our house in Austin.  What a relief to have
that over with.  She was a good house for many years.  In many ways, we'll
always miss that house, but we're excited about the new things that God has planned
for us in our new house, which we love so far.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9fd0556d-1e18-4e87-b98e-f55687f56a1d" />
      </body>
      <title>House Sold!</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,9fd0556d-1e18-4e87-b98e-f55687f56a1d.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,9fd0556d-1e18-4e87-b98e-f55687f56a1d.aspx</link>
      <pubDate>Thu, 16 Nov 2006 16:16:16 GMT</pubDate>
      <description>&lt;p&gt;
Today, we are closing on the sale of our house in Austin.&amp;nbsp; What a relief to have
that over with.&amp;nbsp; She was a good house for many years.&amp;nbsp; In many ways, we'll
always miss that house, but we're excited about the new things that God has planned
for us in our new house, which we love so far.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=9fd0556d-1e18-4e87-b98e-f55687f56a1d" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,9fd0556d-1e18-4e87-b98e-f55687f56a1d.aspx</comments>
      <category>Fun</category>
      <category>News</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Starting on Halloween (a couple of days shy of 11 months), Jenna passed my criteria
for walking on her own.  Becky brought her up for some of the MS-sponsored Halloween
fun, and to our surprise was totally capable of walking down the halls of building
42, grabbing candy that people had placed outside their doors.  Evidently, our
house was simply too cluttered with the chaos of unpacking for her to be able to demonstrate
it fully there.
</p>
        <p>
To add to the hilarity, she was dressed as a monkey.  I've had pictures of this
for quite some time, but I haven't uploaded them to Flickr yet.  They are awesome.
</p>
        <p>
So, this weekend, we purchased and installed 3 hardware-mounted baby gates to keep
her from getting into too much mischief so that poor Becky doesn't have to case her
around all day to keep her from getting into trouble.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce" />
      </body>
      <title>Jenna walking</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce.aspx</link>
      <pubDate>Mon, 13 Nov 2006 20:55:19 GMT</pubDate>
      <description>&lt;p&gt;
Starting on Halloween (a couple of days shy of 11 months), Jenna passed my criteria
for walking on her own.&amp;nbsp; Becky brought her up for some of the MS-sponsored Halloween
fun, and to our surprise was totally capable of walking down the halls of building
42, grabbing candy that people had placed outside their doors.&amp;nbsp; Evidently, our
house was simply too cluttered with the chaos of unpacking for her to be able to demonstrate
it fully there.
&lt;/p&gt;
&lt;p&gt;
To add to the hilarity, she was dressed as a monkey.&amp;nbsp; I've had pictures of this
for quite some time, but I haven't uploaded them to Flickr yet.&amp;nbsp; They are awesome.
&lt;/p&gt;
&lt;p&gt;
So, this weekend, we purchased and installed 3 hardware-mounted baby gates to keep
her from getting into too much mischief so that poor Becky doesn't have to case her
around all day to keep her from getting into trouble.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,f5aa023d-cfbd-4cbb-a8c3-05e1d00a40ce.aspx</comments>
      <category>Fun</category>
      <category>Jenna</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=f5839dbc-9dc2-407a-902b-c1bf5bd842f3</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,f5839dbc-9dc2-407a-902b-c1bf5bd842f3.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,f5839dbc-9dc2-407a-902b-c1bf5bd842f3.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=f5839dbc-9dc2-407a-902b-c1bf5bd842f3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I got my internal blog set up yesterday. At my old job, I found having an internal
blog was very useful for lots of reasons. Here, due to the size of the company and
confidentiality concerns, it may not end up being as useful, and I may have to leverage
other resources like Sharepoint to accomplish similar things. For now, other "softies"
can catch me at <a href="http://www.marklio.com/marklio/ct.ashx?id=f5839dbc-9dc2-407a-902b-c1bf5bd842f3&amp;url=http%3a%2f%2fblogs%2fmarkmil">http://blogs/markmil</a>.
If you're not on the Microsoft network, don't expect that link to take you anywhere.
</p>
        <img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5839dbc-9dc2-407a-902b-c1bf5bd842f3" />
      </body>
      <title>Internal Blog</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,f5839dbc-9dc2-407a-902b-c1bf5bd842f3.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,f5839dbc-9dc2-407a-902b-c1bf5bd842f3.aspx</link>
      <pubDate>Thu, 14 Sep 2006 21:22:40 GMT</pubDate>
      <description>&lt;p&gt;
I got my internal blog set up yesterday. At my old job, I found having an internal
blog was very useful for lots of reasons. Here, due to the size of the company and
confidentiality concerns, it may not end up being as useful, and I may have to leverage
other resources like Sharepoint to accomplish similar things. For now, other "softies"
can catch me at &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=f5839dbc-9dc2-407a-902b-c1bf5bd842f3&amp;amp;url=http%3a%2f%2fblogs%2fmarkmil"&gt;http://blogs/markmil&lt;/a&gt;.
If you're not on the Microsoft network, don't expect that link to take you anywhere.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=f5839dbc-9dc2-407a-902b-c1bf5bd842f3" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,f5839dbc-9dc2-407a-902b-c1bf5bd842f3.aspx</comments>
      <category>Fun</category>
    </item>
    <item>
      <trackback:ping>http://www.marklio.com/marklio/Trackback.aspx?guid=133b3379-5cbb-4f73-85e5-0ad7f4157da5</trackback:ping>
      <pingback:server>http://www.marklio.com/marklio/pingback.aspx</pingback:server>
      <pingback:target>http://www.marklio.com/marklio/PermaLink,guid,133b3379-5cbb-4f73-85e5-0ad7f4157da5.aspx</pingback:target>
      <dc:creator>Mark</dc:creator>
      <wfw:comment>http://www.marklio.com/marklio/CommentView,guid,133b3379-5cbb-4f73-85e5-0ad7f4157da5.aspx</wfw:comment>
      <wfw:commentRss>http://www.marklio.com/marklio/SyndicationService.asmx/GetEntryCommentsRss?guid=133b3379-5cbb-4f73-85e5-0ad7f4157da5</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Labor Day 2006</title>
      <guid isPermaLink="false">http://www.marklio.com/marklio/PermaLink,guid,133b3379-5cbb-4f73-85e5-0ad7f4157da5.aspx</guid>
      <link>http://www.marklio.com/marklio/PermaLink,guid,133b3379-5cbb-4f73-85e5-0ad7f4157da5.aspx</link>
      <pubDate>Wed, 06 Sep 2006 04:25:17 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f234634276%2fin%2fset-72157594270372064" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 5px 5px 0px" alt="The Grub" src="http://static.flickr.com/93/234634276_a0f2d12ce3_m.jpg" align="left"&gt;&lt;/a&gt; We
took advantage of the day off and drove up to Bellingham to see Jeff and Bethany.
We started with a delicious lunch. Jeff grilled some burgers and corn, while I let
Jenna crawl around on the lawn, which she seemed to enjoy quite a bit. The burgers
were great, and the corn was so good it didn't need butter.
&lt;/p&gt;
&lt;p&gt;
While we ate our dessert of ice cream and cookies, we talked about our options for
the day and finally decided to head toward &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fMt._Baker" target="_blank"&gt;Mt.
Baker&lt;/a&gt; on the &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fMt._Baker_Highway"&gt;Mt.
Baker highway&lt;/a&gt;. Due to the distance and our time constraints, we knew we probably
wouldn't make it all the way there, but they knew of some cool spots on the way that
were a bit closer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f234628845%2fin%2fset-72157594270372064" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 0px 5px 5px" alt="Waterfall Panorama" src="http://static.flickr.com/98/234628845_85103d153d_m.jpg" align="right"&gt;&lt;/a&gt;One
the way, we decided on our actual destination, &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fmap%2f%3f%26user_id%3d12488026%40N00%26fLat%3d48.903012%26fLon%3d-121.808681%26zl%3d5%26min_upload_date%3d946713600%26min_taken_date%3d1970-01-01" 00:00:00&amp;map_type=hyb" target="_blank"&gt;some
falls near the mountain that they had visited before&lt;/a&gt;. It was spectacular. The
whole area was amazing. The scale of everything was staggering. We hiked down some
trails to get a better view of the falls. Becky and I traded off carrying Jenna and
the camera so I could carry Jenna down the steep parts, then trade off so I could
get some shots. Some of them turned out really well and really look like postcards.
I got a huge panorama of the waterfall itself (right). For some reason, I like to
leave the jagged edges on there. I might make a cleaned-up version though since it
turned out so well. I'm pretty sure most of you will want to move here after seeing
some of these pictures.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2f234664942%2fin%2fset-72157594270372064%2f" target="_new" atomicselection="true"&gt;&lt;img style="margin: 5px 5px 5px 0px" alt="I love this shot Jeff took of me on this huge stump" src="http://static.flickr.com/85/234664942_0f7bdb16ae_m.jpg" align="left"&gt;&lt;/a&gt; I
really wanted to just run wild through the forest and become a feral human. I found
a huge stone in the woods that was turned upright and covered with moss. I'm pretty
sure it had something to do with the plot of Halo 3. I'm also pretty sure that there
were many sasquatches watching us from the woods. I'm fairly certain that they are
hidden in a few of my pictures.
&lt;/p&gt;
&lt;p&gt;
I also experimented with a technique called wiggling which uses 2 shots with different
perspectives to provide &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwiggle.sourceforge.net%2fwiggler%2f%3flefteyepath%3dhttp%253A%2f%2fstatic.flickr.com%2f84%2f234679681_795af37b18_m.jpg%26righteyepath%3dhttp%253A%2f%2fstatic.flickr.com%2f83%2f234680327_84a736f408_m.jpg%26nearleftx%3d75%26nearlefty%3d183%26nearrightx%3d46%26nearrighty%3d178%26farleftx%3d118%26farlefty%3d73%26farrightx%3d115%26farrighty%3d63%26swfwidth%3d131%26swfheight%3d230%26nearxdifference%3d29%26nearydifference%3d5%26farxdifference%3d3%26farydifference%3d10%26juxta%3dbr%26style%3dfade" target="_blank"&gt;a
semi-3d effect&lt;/a&gt; to give you some depth that I don't think is conveyed through the
photos. I think my 2 perspectives are too exaggerated. It kind of gives me a headache.
&lt;/p&gt;
&lt;p&gt;
On the way out, we visited &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fmap%2f%3f%26user_id%3d12488026%40N00%26fLat%3d48.888419%26fLon%3d-121.936912%26zl%3d3%26min_upload_date%3d946713600%26min_taken_date%3d1970-01-01" 00:00:00&amp;map_type=hyb" target="_blank"&gt;the
ranger station&lt;/a&gt; where there was the usual ranger station information and a really
big cross-section of an extremely old tree. I don't remember how old it was, but it
was old.
&lt;/p&gt;
&lt;p&gt;
So, visit my &lt;a href="http://www.marklio.com/marklio/ct.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5&amp;amp;url=http%3a%2f%2fwww.flickr.com%2fphotos%2fmarklio%2fsets%2f72157594270372064%2fwith%2f234670459%2f" target="_blank"&gt;Labor
Day 2006&lt;/a&gt; photoset to see all the pictures. (be sure and click through the various
links above as well to see some cool new features of Flickr that allow you to see
where pictures were taken. (as well as some other neat links))
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.marklio.com/marklio/aggbug.ashx?id=133b3379-5cbb-4f73-85e5-0ad7f4157da5" /&gt;</description>
      <comments>http://www.marklio.com/marklio/CommentView,guid,133b3379-5cbb-4f73-85e5-0ad7f4157da5.aspx</comments>
      <category>Fun</category>
    </item>
  </channel>
</rss>