<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>www.THINKEDGE.com</title>
    <description>My adventures in software development and other short stories</description>
    <link>http://www.thinkedge.com/blogengine/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.0.7</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://www.thinkedge.com/blogengine/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.thinkedge.com/BlogEngine/syndication.axd</blogChannel:blink>
    <dc:creator>Phil Garcia</dc:creator>
    <dc:title>www.THINKEDGE.com</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/thinkedge" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>MOSA Booting on Real Hardware</title>
      <description>&lt;p align="justify"&gt;While most of the development and testing of MOSA is done using virtualization software, MOSA does indeed boot on real hardware too. At the moment we support booting MOSA from either a CD or USB key. We created a short one minute video showing MOSA being written to a USB Drive and the same PC booted with it:&amp;#160; &lt;/p&gt;  &lt;div style="padding-bottom: 10px; margin: 0px; padding-left: 10px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:2ee5066d-97ea-49c5-92d6-f25fa5fcb3b3" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2ZviGssYKE4&amp;amp;hl=en"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/2ZviGssYKE4&amp;amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="clear:both;font-size:.8em;"&gt;Booting MOSA from USB Drive&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Here are the detailed instructions for writing MOSA to a USB Drive:&lt;/p&gt;  &lt;p align="justify"&gt;1. Download the &lt;a href="http://www.chrysocome.net/dd" target="_blank"&gt;dd utility&lt;/a&gt; for windows from &lt;a href="http://www.chrysocome.net/dd"&gt;http://www.chrysocome.net/dd&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;2. Extract the dd.exe executable to the mosa\trunk\Setup\Boot\build directory.&lt;/p&gt;  &lt;p align="justify"&gt;3. Open a command prompt window and change directory to the build directory.&lt;/p&gt;  &lt;p align="justify"&gt;4. Connect the USB key you wish to ERASE and install MOSA onto. (WARNING: Data on the USB drive will be lost!)&lt;/p&gt;  &lt;p align="justify"&gt;5. Determine the device path for the USB key. &lt;/p&gt;  &lt;p align="justify"&gt;Type &amp;quot;dd --list&amp;quot; to display a list all the block devices on your system. Find the one for the USB Key you just connected. Be careful, if you select or mistype the wrong device, you can corrupt your hard drive or other storage devices. Unless you understand these steps completely, do not proceed.&lt;/p&gt;  &lt;p align="justify"&gt;6.Type &amp;quot;dd of=\\?\Device\HarddiskX\PartitionX if=bootimage.img bs=512 --progress&amp;quot; and substitute the of= parameter with the device path found in the previous step.&lt;/p&gt;  &lt;p align="justify"&gt;7. Wait until all the blocks are written to the USB key before disconnecting it.&lt;/p&gt;  &lt;p align="justify"&gt;8. Now boot a PC or laptop with the USB Key connected!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7spCJvu66lwaKnGYRdw4GHV19QU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7spCJvu66lwaKnGYRdw4GHV19QU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7spCJvu66lwaKnGYRdw4GHV19QU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7spCJvu66lwaKnGYRdw4GHV19QU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/uFNG7716qD4" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/uFNG7716qD4/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2009/06/14/MOSA-Booting-on-Real-Hardware.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=17ae9e91-617d-4ea4-bd27-65bd93ab8f52</guid>
      <pubDate>Sun, 14 Jun 2009 14:19:00 -1400</pubDate>
      <category>MOSA</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=17ae9e91-617d-4ea4-bd27-65bd93ab8f52</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=17ae9e91-617d-4ea4-bd27-65bd93ab8f52</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2009/06/14/MOSA-Booting-on-Real-Hardware.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=17ae9e91-617d-4ea4-bd27-65bd93ab8f52</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=17ae9e91-617d-4ea4-bd27-65bd93ab8f52</feedburner:origLink></item>
    <item>
      <title>ThreadPool Helper Class</title>
      <description>&lt;p&gt;Lately, I have written a lot of multithreaded code in C#. I use the ThreadPool class object to launch and manage many parallel threads - mostly for TCP communications with client applications. It automatically throttles the numbers of active threads by the number of processors. Unfortunately, the ThreadPool class was written before .NET 2.0 and therefore it does not take advantage of generics. So you end up casting function methods and callback parameters. It can be a bit messy.&lt;/p&gt;
&lt;p&gt;However, you can &lt;span style="line-height: 115%; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black; font-size: 7.5pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;simplify &lt;/span&gt;things with the following helper class:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ThreadPoolHelper&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&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;void&lt;/span&gt; Function();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&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;void&lt;/span&gt; Execute(Function function)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         ThreadPool.QueueUserWorkItem(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WaitCallback(Call), (&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;)function);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Call(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; o)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;         ((Function)o)();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;To create a thread in the pool with this helper class, you simple use:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; TheadPoolHelper.Execute(someFunction);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Where someFunction is the name of a function method.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you need to pass a parameter, here's the helper class for that too:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; ThreadPoolHelperWithParam&amp;lt;T&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&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;void&lt;/span&gt; Function(T param);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&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;void&lt;/span&gt; Execute(Function function, T param)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         ThreadPool.QueueUserWorkItem(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WaitCallback(Call), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; KeyValuePair&amp;lt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;, T&amp;gt;((&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;)function, param));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Call(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; o)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;         KeyValuePair&amp;lt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;, T&amp;gt; lObject = (KeyValuePair&amp;lt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;, T&amp;gt;)o;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt;         ((Function)lObject.Key)(lObject.Value);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum15" style="color: #606060"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum16" style="color: #606060"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now you can also pass an object of any type, like this:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; ThreadPoolHelperWithParam&amp;lt;someObjectType&amp;gt;.Execute(someMethod, someObject); &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Where the someObjectType is the type of object you are passing, and someObject with actual object you wish to pass as a parameter. Simple!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/f1jw_kTsxBxG28AaLbpGRt-iXCM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f1jw_kTsxBxG28AaLbpGRt-iXCM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/f1jw_kTsxBxG28AaLbpGRt-iXCM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/f1jw_kTsxBxG28AaLbpGRt-iXCM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/wHO6wvHe7as" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/wHO6wvHe7as/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2009/05/10/ThreadPool-Helper-Class.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=250f5685-ef76-471f-86f9-192eea36e391</guid>
      <pubDate>Sun, 10 May 2009 06:42:00 -1400</pubDate>
      <category>Code</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=250f5685-ef76-471f-86f9-192eea36e391</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=250f5685-ef76-471f-86f9-192eea36e391</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2009/05/10/ThreadPool-Helper-Class.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=250f5685-ef76-471f-86f9-192eea36e391</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=250f5685-ef76-471f-86f9-192eea36e391</feedburner:origLink></item>
    <item>
      <title>Incorporating the Mono Class Libraries in MOSA – Part I</title>
      <description>&lt;p align="justify"&gt;The first challenge to incorporating the Mono Class Libraries into MOSA is how to replace the external method calls in the class libraries with our own custom implementation. There are two basic approaches to this challenge. In part one of this blog series, we will explore the one used by other managed open source projects and its unique challenges.&lt;/p&gt;
&lt;p align="justify"&gt;The most common approach is to replace the call to the external methods with a call to the another custom method instead. This approach seems to be the simplest and most elegant solution &amp;ndash; as you only have to supply the CIL code for the custom method and then have the compiler call the replacement method.&lt;/p&gt;
&lt;p align="justify"&gt;Ideally the replacement method would be implemented similar to this:&lt;/p&gt;
&lt;div&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; InternalSystem&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     [TargetNamespace(&lt;span style="color: #006080"&gt;"System"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SomeMonoClass&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; NewMethod()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.X * &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Y;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Of course, this method will not compile because the member variables X and Y do not exist to the C# compiler. One possible solution is to create stubs for these member variables so they will exist while the code is compiled to CIL. Here we add those two member variables:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; InternalSystem&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     [TargetNamespace(&lt;span style="color: #006080"&gt;"System"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SomeMonoClass&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; X;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Y;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; NewMethod()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.X * &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Y;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Now the code compiles. And given some special CIL to native compiler, the external method call will be redirected to this other method instead. Creating stubs to expose these &amp;ldquo;hidden&amp;rdquo; member methods and variables seems like a fair compromise. But look at this example:&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum1" style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; InternalSystem&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum2" style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum3" style="color: #606060"&gt;   3:&lt;/span&gt;     [TargetNamespace(&lt;span style="color: #006080"&gt;"System"&lt;/span&gt;)]&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum4" style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SomeMonoClass&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum5" style="color: #606060"&gt;   5:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum6" style="color: #606060"&gt;   6:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; x;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum7" style="color: #606060"&gt;   7:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; y;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum8" style="color: #606060"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum9" style="color: #606060"&gt;   9:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; ClassC NewMethod(ClassA b, ClassB b)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum10" style="color: #606060"&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum11" style="color: #606060"&gt;  11:&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ClassC(z, b.X, c.Y);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum12" style="color: #606060"&gt;  12:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: white; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum13" style="color: #606060"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&lt;span id="lnum14" style="color: #606060"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Now additional stubs are required to represent the ClassA, ClassB, and ClassC classes, and stubs for each of their member methods and variables before this code will compile. Do you see where this is going? Given a rich framework with many dependencies between classes, like the .NET framework, this approach can results in the creation hundreds of stubs!&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;MOSA will approach this problem in another way, which I will be blogging about next.&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gx6bTsv4rCLuCBQnj4mnFtwAgRQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gx6bTsv4rCLuCBQnj4mnFtwAgRQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gx6bTsv4rCLuCBQnj4mnFtwAgRQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gx6bTsv4rCLuCBQnj4mnFtwAgRQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/kzYa_OqTHTI" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/kzYa_OqTHTI/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2009/05/09/Incorporating-the-Mono-Class-Libraries-in-MOSA-Part-I.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=c9b6053f-fd52-46e6-9198-be6fd4344058</guid>
      <pubDate>Sat, 09 May 2009 20:42:00 -1400</pubDate>
      <category>Code</category>
      <category>MOSA</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=c9b6053f-fd52-46e6-9198-be6fd4344058</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=c9b6053f-fd52-46e6-9198-be6fd4344058</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2009/05/09/Incorporating-the-Mono-Class-Libraries-in-MOSA-Part-I.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=c9b6053f-fd52-46e6-9198-be6fd4344058</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=c9b6053f-fd52-46e6-9198-be6fd4344058</feedburner:origLink></item>
    <item>
      <title>Boot Image Creation Tool</title>
      <description>&lt;p align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="config" src="http://www.thinkedge.com/blogengine/image.axd?picture=config.png" border="0" alt="config" width="348" height="248" align="right" /&gt;For the &lt;a href="http://www.mosa-project.org" target="_blank"&gt;MOSA project&lt;/a&gt;, we needed a tool to create image files for various &lt;a href="http://en.wikipedia.org/wiki/Virtual_machine" target="_blank"&gt;Virtual machine&lt;/a&gt; software, such as for &lt;a href="http://www.microsoft.com/windows/virtual-pc/default.aspx" target="_blank"&gt;Microsoft Virtual PC&lt;/a&gt; and &lt;a href="http://www.microsoft.com/windowsserversystem/virtualserver/default.aspx" target="_blank"&gt;Microsoft Virtual Server&lt;/a&gt;, &lt;a href="http://www.vmware.com/" target="_blank"&gt;VMware&lt;/a&gt;, and &lt;a href="http://www.virtualbox.org/" target="_blank"&gt;VirtualBox&lt;/a&gt;, including simulators such as &lt;a href="http://www.nongnu.org/qemu/about.html" target="_blank"&gt;QEMU&lt;/a&gt;, and &lt;a href="http://bochs.sourceforge.net/" target="_blank"&gt;Bochs&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;The use of virtualization software would help us facilitate the building and testing of the MOSA AOT/JIT compiler, the reference Operating System, and CIL based runtime libraries.&lt;/p&gt;
&lt;p align="justify"&gt;So we need an virtual disk image tool that could:&lt;/p&gt;
&lt;p align="justify"&gt;1. Create disk images in various virtual disk formats: IMG, VHD and VDI.&lt;/p&gt;
&lt;p align="justify"&gt;2. Create Master Boot Block (MBR) and partition to the disk image.&lt;/p&gt;
&lt;p align="justify"&gt;3. Create FAT12 or FAT16 partitions (or EXT partitions).&lt;/p&gt;
&lt;p align="justify"&gt;4. Incorporate a multi-stage boot loader with support for the &lt;a href="http://www.gnu.org/software/grub/manual/multiboot/multiboot.html" target="_blank"&gt;Multiboot Specification&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;5. Add files to the file system.&lt;/p&gt;
&lt;p align="justify"&gt;6. Execute on Windows or Linux platforms.&lt;/p&gt;
&lt;p align="justify"&gt;After an exhaustive search across various open source operating systems, I was unable to find a single tool that could do all of this. Most projects&amp;nbsp;use a tool set of&amp;nbsp;utilities, such as GRUB, LILO, mkfatfs, fdisk, and Syslinux,&amp;nbsp;and custom scripts to create the single boot image. Unfortunately&amp;nbsp;those tools and their related scripts were always platform specific to either Linux or Windows.&lt;/p&gt;
&lt;p align="justify"&gt;So I decided to roll my boot image creation tool in C# that incorporated all these features. One of the good things about having written parts of the device drivers, driver system, and file system support for MOSA is already having code for creating, reading and writing MBR, partitions, and FAT12/16. Implementing basic support for the virtual disk formats was relatively straightforward after reading the specifications and understanding the &lt;a href="https://ait.saultcollege.ca/facultyweb/brasheed/public_html/ELN230_PC_Maintenance_W07/Lectures_F05/Lec_23_CHS_Disk_Access/Lec_23_CHS_Disk_Access_W03.ppt" target="_blank"&gt;Cluster-Head-Sector (CHS) address legacy&lt;/a&gt;. The most difficult part was incorporating the Syslinux boot record and boot loader binaries. Those binary executables required very specific in-place modifications based on the virtual disk geometry and file system.&lt;/p&gt;
&lt;p align="justify"&gt;The result is a tool simply called &amp;ldquo;CreateBootImage.exe&amp;rdquo;. It run on both Windows and Linux (with Mono), and is now available as part of the MOSA project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here&amp;rsquo;s how to use the tool:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The tool accepts two command line arguments:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CreateBootImage.exe &amp;lt;configuration file&amp;gt; &amp;lt;image file&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;The configuration file contains a list of options, one per line, with arguments separated by a tab. The following options are supported:&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;option&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Arguments&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-volume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Volume Name&lt;/td&gt;
&lt;td&gt;Set the volume name for the first partition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-blocks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;# of Blocks&lt;/td&gt;
&lt;td&gt;Set the number of 512-byte blocks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-fat12&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Use FAT12 file system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-fat16&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Use FAT16 file system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-fat32&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Use FAT32 file system (untested)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-vhd&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Create image in VHD (Virtual PC/Virtual Server) format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-vdi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Create image in VDI (VirtualBox) format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-img&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Create image in IMG format&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-syslinux&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;Patch disk image for Syslinux&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-mbr&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filename&lt;/td&gt;
&lt;td&gt;Use file for Master Boot Record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-boot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filename&lt;/td&gt;
&lt;td&gt;Use file for Boot Record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;-file&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Filename, Destination&lt;/td&gt;
&lt;td&gt;Include file in file system (destination optional)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;The tool can create disk images for the following emulators:&lt;/p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Emulator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;File Format&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual PC 2004/2007&lt;/td&gt;
&lt;td&gt;.VHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Virtual Server&lt;/td&gt;
&lt;td&gt;.VHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VMware&lt;/td&gt;
&lt;td&gt;.VHD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VirtualBox&lt;/td&gt;
&lt;td&gt;.VDI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QEMU&lt;/td&gt;
&lt;td&gt;.IMG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw Image&lt;/td&gt;
&lt;td&gt;.IMG&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GGtd2cs2eTAbLfuNAUhLEtKFb2g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GGtd2cs2eTAbLfuNAUhLEtKFb2g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GGtd2cs2eTAbLfuNAUhLEtKFb2g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GGtd2cs2eTAbLfuNAUhLEtKFb2g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/qmc-oWLKWk8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/qmc-oWLKWk8/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2009/05/03/Boot-Image-Tool.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=79a8a86b-a8eb-4ea4-8eea-3a6cf57a717d</guid>
      <pubDate>Sun, 03 May 2009 06:24:00 -1400</pubDate>
      <category>Virtualization</category>
      <category>MOSA</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=79a8a86b-a8eb-4ea4-8eea-3a6cf57a717d</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=79a8a86b-a8eb-4ea4-8eea-3a6cf57a717d</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2009/05/03/Boot-Image-Tool.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=79a8a86b-a8eb-4ea4-8eea-3a6cf57a717d</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=79a8a86b-a8eb-4ea4-8eea-3a6cf57a717d</feedburner:origLink></item>
    <item>
      <title>Managed Operating System Alliance (MOSA) Framework</title>
      <description>&lt;p align="justify"&gt;&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=Mosa-Idea3_1.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Mosa-Idea3" src="http://www.thinkedge.com/BlogEngine/image.axd?picture=Mosa-Idea3_thumb_1.png" border="0" alt="Mosa-Idea3" width="250" height="96" align="right" /&gt;&lt;/a&gt;Over the past six months, &lt;a href="http://www.michaelruck.de/index.html" target="_blank"&gt;Michael Ruck&lt;/a&gt; (aka grover), &lt;a href="http://mosa-rootnode.blogspot.com/" target="_blank"&gt;Simon Wollwage&lt;/a&gt; (aka rootnode) and I (aka tgiphil) have been super busy developing a set of tools, specifications and source code to foster the development of managed operating systems based on the Common Intermediate Language. MOSA has partnered with the &lt;a href="http://www.sharpos.org" target="_blank"&gt;SharpOS&lt;/a&gt; and &lt;a href="http://www.ensemble-os.org/" target="_blank"&gt;Ensemble&lt;/a&gt; projects to jointly develop a common CIL JIT/AOT Compiler, Device Drivers, and Runtime libraries.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=MosaBoot.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MosaBoot" src="http://www.thinkedge.com/BlogEngine/image.axd?picture=MosaBoot_thumb.png" border="0" alt="MosaBoot" width="322" height="160" align="left" /&gt;&lt;/a&gt;Progress has been slow, but not without achievements. We have the beginnings of an AOT/JIT Compiler (mosacl), a working boot image creation tool, device drive framework and several device drivers. The build framework can compile and boot a simplistic OS kernel (see the screen shot).&lt;/p&gt;
&lt;p align="justify"&gt;Currently we are working to improve the compiler and support all the CIL instructions, and a tool to directly transform the source code of class libraries from &lt;a href="http://www.mono-project.com" target="_blank"&gt;Mono Project&lt;/a&gt; so we can compile and use it with this project. I&amp;rsquo;ll blog more about the transform tool later in a future blog.&lt;/p&gt;
&lt;p align="justify"&gt;The &lt;a href="http://www.mosa-project.org/" target="_blank"&gt;MOSA Project&lt;/a&gt; is currently hosted at CodePlex. Check it out!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wypUT1ZwlDUg4PIbdT-Hz-Cbt0c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wypUT1ZwlDUg4PIbdT-Hz-Cbt0c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wypUT1ZwlDUg4PIbdT-Hz-Cbt0c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wypUT1ZwlDUg4PIbdT-Hz-Cbt0c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/D2rdjZ279Uc" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/D2rdjZ279Uc/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2009/04/25/Managed-Operating-System-Alliance-(MOSA)-Framework.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=710ec8c4-8ee9-417c-842b-7fafc57aa6ba</guid>
      <pubDate>Sat, 25 Apr 2009 15:36:00 -1400</pubDate>
      <category>MOSA</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=710ec8c4-8ee9-417c-842b-7fafc57aa6ba</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=710ec8c4-8ee9-417c-842b-7fafc57aa6ba</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2009/04/25/Managed-Operating-System-Alliance-(MOSA)-Framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=710ec8c4-8ee9-417c-842b-7fafc57aa6ba</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=710ec8c4-8ee9-417c-842b-7fafc57aa6ba</feedburner:origLink></item>
    <item>
      <title>BlogEngine.NET Extension Pack 1.3.1 Release</title>
      <description>&lt;p align="justify"&gt;&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=WindowsLiveWriter/BlogEngine.NETExtensionPack1.3.1Release_958B/wrench_4.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 0px 10px 10px; border-left: 0px; border-bottom: 0px" height="80" alt="wrench" src="http://www.thinkedge.com/BlogEngine/image.axd?picture=WindowsLiveWriter/BlogEngine.NETExtensionPack1.3.1Release_958B/wrench_thumb_1.gif" width="80" align="right" border="0"&gt;&lt;/a&gt;A new release of the &lt;a href="http://www.codeplex.com/BlogEngineExtensions" target="_blank"&gt;BlogEngine.NET Extension Pack&lt;/a&gt; has just been released on &lt;a href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;. This pack includes a total of fourteen extensions, including six new ones from contributors: &lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;div align="justify"&gt;DotNetKicksOnTheFly - Adds a DotNetKicks button to a post where the token &lt;a href="http://www.codeplex.com/BlogEngineExtensions/Wiki/View.aspx?title=kickit&amp;amp;referringTitle=Home"&gt;kickit&lt;/a&gt; is found on the fly. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;GoogleAnalytics - Adds Google Analytics code to BlogEngine. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;SEOPack - Optimizes your BlogEngine blog for Search Engines (SEO). &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;TranslatePost - Automatic translation for your blog post by using Google Translation Services. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;TypograFix - A typographic reformatting extension. &lt;/div&gt; &lt;li&gt; &lt;div align="justify"&gt;WowLinkItem - Creates a link and mouse over for World of Warcraft Items. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p align="justify"&gt;Check it out. &lt;/p&gt; &lt;p align="justify"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/meFBjn_UHGJew5-DkE2GkhcJuNE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/meFBjn_UHGJew5-DkE2GkhcJuNE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/meFBjn_UHGJew5-DkE2GkhcJuNE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/meFBjn_UHGJew5-DkE2GkhcJuNE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/YoI8b67ilOk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/YoI8b67ilOk/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2008/09/06/BlogEngineNET-Extension-Pack-131-Release.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=2bfdd407-2edc-4296-9341-4ab245ca67af</guid>
      <pubDate>Sat, 06 Sep 2008 04:40:00 -1400</pubDate>
      <category>BlogEngine.NET</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=2bfdd407-2edc-4296-9341-4ab245ca67af</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=2bfdd407-2edc-4296-9341-4ab245ca67af</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2008/09/06/BlogEngineNET-Extension-Pack-131-Release.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=2bfdd407-2edc-4296-9341-4ab245ca67af</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=2bfdd407-2edc-4296-9341-4ab245ca67af</feedburner:origLink></item>
    <item>
      <title>Water on Mars!</title>
      <description>&lt;p align="justify"&gt;&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=WindowsLiveWriter/WateronMars_1898/IceOnMars_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="IceOnMars" align="right" src="/BlogEngine/image.axd?picture=WindowsLiveWriter/WateronMars_1898/IceOnMars_thumb.jpg" width="189" height="260" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Today, NASA's &lt;a href="http://en.wikipedia.org/wiki/Phoenix_(spacecraft)" target="_blank"&gt;Phoenix Mars Lander&lt;/a&gt; confirms that water exists on &lt;a href="http://en.wikipedia.org/wiki/Mars" target="_blank"&gt;Mars&lt;/a&gt;!&amp;#160; While the spacecraft had previously photographed evidence of water ice, this is the first time that sensitive instruments on the surface of the planet have detected water in the Martian soil. &lt;/p&gt;  &lt;p align="justify"&gt;Additional tests show that the Martian soil is similar to soil on Earth, except without any biological organics. The tests turned up magnesium, sodium, potassium and chloride, all of which are useful in organic processes. The soil is also &lt;a href="http://en.wikipedia.org/wiki/Base_%28chemistry%29" target="_blank"&gt;alkaline&lt;/a&gt;, with a &lt;a href="http://en.wikipedia.org/wiki/PH" target="_blank"&gt;pH&lt;/a&gt; balance between 8 and 9. Leading some scientist to conclude that the Martian soil is capable of sustaining plant life. &lt;/p&gt;  &lt;p align="justify"&gt;Now did anyone remember to put some seeds on the spacecraft? &lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nT1baeQrivGoHcMGaDQfYCQvKEk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nT1baeQrivGoHcMGaDQfYCQvKEk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nT1baeQrivGoHcMGaDQfYCQvKEk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nT1baeQrivGoHcMGaDQfYCQvKEk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/apFnNXpo37U" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/apFnNXpo37U/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2008/07/31/Water-on-Mars!.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=db392387-38ba-4704-af8a-e52fa396b5dc</guid>
      <pubDate>Thu, 31 Jul 2008 01:05:00 -1400</pubDate>
      <category>News</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=db392387-38ba-4704-af8a-e52fa396b5dc</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=db392387-38ba-4704-af8a-e52fa396b5dc</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2008/07/31/Water-on-Mars!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=db392387-38ba-4704-af8a-e52fa396b5dc</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=db392387-38ba-4704-af8a-e52fa396b5dc</feedburner:origLink></item>
    <item>
      <title>Joined the SharpOS Provisional Government Board</title>
      <description>&lt;p align="justify"&gt;&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=WindowsLiveWriter/ElectedtoSharpOSProvisionalGovernmentBoa_1E17/SharpOS-Boot_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 10px 10px; border-right-width: 0px" height="162" alt="SharpOS-Boot" src="/BlogEngine/image.axd?picture=WindowsLiveWriter/ElectedtoSharpOSProvisionalGovernmentBoa_1E17/SharpOS-Boot_thumb_1.png" width="260" align="right" border="0" /&gt;&lt;/a&gt; Today, I accepted an invitation to join the &lt;a href="http://www.sharpos.org/redmine/wiki/3/Organization_Board" target="_blank"&gt;Provisional Government Board&lt;/a&gt; of the open source &lt;a href="http://www.sharpos.org" target="_blank"&gt;SharpOS Project&lt;/a&gt;. The SharpOS Project is a community effort to write an operating system based on &lt;a href="http://en.wikipedia.org/wiki/Microsoft_.NET#Microsoft_.NET" target="_blank"&gt;.NET technology&lt;/a&gt;, with a strong sense of security and manageability.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZranM_GtNo4OGo4awbznofbX3po/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZranM_GtNo4OGo4awbznofbX3po/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZranM_GtNo4OGo4awbznofbX3po/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZranM_GtNo4OGo4awbznofbX3po/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/G2thIqb63J0" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/G2thIqb63J0/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2008/07/29/Elected-to-SharpOS-Provisional-Government-Board.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=d35fff8b-b2fe-42d8-944d-bdf348884350</guid>
      <pubDate>Tue, 29 Jul 2008 02:16:00 -1400</pubDate>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=d35fff8b-b2fe-42d8-944d-bdf348884350</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=d35fff8b-b2fe-42d8-944d-bdf348884350</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2008/07/29/Elected-to-SharpOS-Provisional-Government-Board.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=d35fff8b-b2fe-42d8-944d-bdf348884350</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=d35fff8b-b2fe-42d8-944d-bdf348884350</feedburner:origLink></item>
    <item>
      <title>The Phoenix has landed!</title>
      <description>&lt;p align="justify"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 5px 10px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="230160main_foot2" align="right" src="/BlogEngine/image.axd?picture=WindowsLiveWriter/ThePhoenixhaslanded_C8A/230160main_foot2_thumb.jpg" width="260" height="260" /&gt;Earlier today, &lt;a href="http://www.nasa.gov" target="_blank"&gt;NASA&lt;/a&gt; successfully landed the &lt;a href="http://www.nasa.gov/mission_pages/phoenix/main/index.html" target="_blank"&gt;Phoenix&lt;/a&gt; spacecraft on the planet &lt;a title="Mars" href="http://en.wikipedia.org/wiki/Mars"&gt;Mars&lt;/a&gt;!&amp;#160; That is an amazing accomplishment. Mars is roughly 90 million miles from Earth. That's like making a hole-in-one on another golf course on the other side of the planet. &lt;a href="http://en.wikipedia.org/wiki/Kudos" target="_blank"&gt;Kudos&lt;/a&gt; to NASA and their expert teams of engineers and scientists! &lt;/p&gt;  &lt;p align="justify"&gt;&lt;em&gt;Photo: Phoenix footpad on Mars!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yj7QVEOM4wgH44CityQkc7b-0QA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yj7QVEOM4wgH44CityQkc7b-0QA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yj7QVEOM4wgH44CityQkc7b-0QA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yj7QVEOM4wgH44CityQkc7b-0QA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/SGXmfVcQ52g" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/SGXmfVcQ52g/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2008/05/25/The-Phoenix-has-landed!.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=51a353c8-dd53-4010-b505-d13d1b142446</guid>
      <pubDate>Sun, 25 May 2008 20:28:00 -1400</pubDate>
      <category>News</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=51a353c8-dd53-4010-b505-d13d1b142446</pingback:target>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=51a353c8-dd53-4010-b505-d13d1b142446</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2008/05/25/The-Phoenix-has-landed!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=51a353c8-dd53-4010-b505-d13d1b142446</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=51a353c8-dd53-4010-b505-d13d1b142446</feedburner:origLink></item>
    <item>
      <title>New BlogEngine Theme - iTheme</title>
      <description>&lt;p align="justify"&gt;
&lt;a href="http://www.thinkedge.com/BlogEngine/image.axd?picture=WindowsLiveWriter/NewBlogEngineThemeiTheme_86F8/iTheme_2.png"&gt;&lt;img style="margin: 0px 0px 10px 10px; border-width: 0px" src="/BlogEngine/image.axd?picture=WindowsLiveWriter/NewBlogEngineThemeiTheme_86F8/iTheme_thumb.png" border="0" alt="iTheme" width="260" height="168" align="right" /&gt;&lt;/a&gt;I was so impressed with the &lt;a href="http://www.ndesign-studio.com/resources/wp-themes/itheme/"&gt;iTheme&lt;/a&gt; theme that &lt;a href="http://www.ndesign-studio.com/about/"&gt;Nick La&lt;/a&gt; created for &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; that I decided to port it to &lt;a href="http://www.dotnetblogengine.net/"&gt;BlogEngine.NET&lt;/a&gt;.&amp;nbsp; So if you have an iPod, iPhone, iTouch, or even an iMac, this theme is designed for you (even if BlogEngine.NET currently only runs on Windows and Linux platforms). 
&lt;/p&gt;
&lt;p align="justify"&gt;
The only feature not ported yet over is the drag and drop side bar feature - however, it will be coming once the BlogEngine.NET new Widget support is completed. 
&lt;/p&gt;
&lt;p align="justify"&gt;
Nick has release the theme to the public under a very generous license, please check his &lt;a href="http://www.ndesign-studio.com/resources/wp-themes/itheme/"&gt;blog&lt;/a&gt; for details. 
&lt;/p&gt;
&lt;p align="justify"&gt;
Download: &lt;a rel="enclosure" href="http://www.thinkedge.com/BlogEngine/file.axd?file=iTheme.zip"&gt;iTheme.zip (143.78 kb)&lt;/a&gt; &lt;em&gt;Updated: 5/23/08&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wJoceXa64KjWs_xASEIW6i7n2gM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wJoceXa64KjWs_xASEIW6i7n2gM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wJoceXa64KjWs_xASEIW6i7n2gM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wJoceXa64KjWs_xASEIW6i7n2gM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thinkedge/~4/SZtijO1bxJs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/thinkedge/~3/SZtijO1bxJs/post.aspx</link>
      <author>Phil</author>
      <comments>http://www.thinkedge.com/blogengine/post/2008/05/15/New-BlogEngine-Theme-iTheme.aspx#comment</comments>
      <guid isPermaLink="false">http://www.thinkedge.com/blogengine/post.aspx?id=32c6c9a2-a7ff-4c19-8a08-63b441a06b76</guid>
      <pubDate>Thu, 15 May 2008 03:56:00 -1400</pubDate>
      <category>BlogEngine.NET</category>
      <dc:publisher>Phil</dc:publisher>
      <pingback:server>http://www.thinkedge.com/blogengine/pingback.axd</pingback:server>
      <pingback:target>http://www.thinkedge.com/blogengine/post.aspx?id=32c6c9a2-a7ff-4c19-8a08-63b441a06b76</pingback:target>
      <slash:comments>22</slash:comments>
      <trackback:ping>http://www.thinkedge.com/blogengine/trackback.axd?id=32c6c9a2-a7ff-4c19-8a08-63b441a06b76</trackback:ping>
      <wfw:comment>http://www.thinkedge.com/blogengine/post/2008/05/15/New-BlogEngine-Theme-iTheme.aspx#comment</wfw:comment>
      <wfw:commentRss>http://www.thinkedge.com/blogengine/syndication.axd?post=32c6c9a2-a7ff-4c19-8a08-63b441a06b76</wfw:commentRss>
    <feedburner:origLink>http://www.thinkedge.com/blogengine/post.aspx?id=32c6c9a2-a7ff-4c19-8a08-63b441a06b76</feedburner:origLink></item>
  </channel>
</rss>
