<?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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
      <title>Planet F#</title>
      <description>Planet F#</description>
      <link>http://feedproxy.google.com/planet_fsharp</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=daa116255b4fe0d0ee562882e1b96933&amp;_render=rss&amp;page=2" />
      <pubDate>Sun, 26 Feb 2012 22:07:20 +0000</pubDate>
      
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/planet_fsharp" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="planet_fsharp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>Dublin Gamecraft</title>
         <link>http://www.trelford.com/blog/post/DubGamecraft.aspx</link>
         <description>&lt;p&gt;It’s just before lunch and nearly 4 hours into the 8 hour game writing competition and we have about 200 lines of F# and some sprites on the screen.&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://trelford.com/blog/image.axd?picture=DublinGamecraft.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:4px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DublinGamecraft" border="0" alt="DublinGamecraft" src="http://trelford.com/blog/image.axd?picture=DublinGamecraft_thumb.png" width="227" height="244"/&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Keys: Z=left, X=right, Q=up, A=down, Space=shoot&lt;/p&gt;  &lt;div id="silverlightControlHost"&gt;      &lt;a rel="nofollow" style="text-decoration:none;" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=4.0.50826.0"&gt; &lt;img style="border-style:none;" src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"/&gt; &lt;/a&gt; &lt;/div&gt; &lt;br/&gt; &lt;p&gt;As you can see we've gone for a bit of a retro look!&lt;/p&gt;  &lt;p&gt;And this is what we submitted:&lt;/p&gt;  &lt;div id="silverlightControlHost"&gt;      &lt;a rel="nofollow" style="text-decoration:none;" target="_blank" href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=4.0.50826.0"&gt; &lt;img style="border-style:none;" src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight"/&gt; &lt;/a&gt; &lt;/div&gt;  &lt;br/&gt;  &lt;p&gt;Source code: &lt;a rel="nofollow" title="https://bitbucket.org/ptrelford/flinteastwood" target="_blank" href="https://bitbucket.org/ptrelford/flinteastwood"&gt;https://bitbucket.org/ptrelford/flinteastwood&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/icjT0qnl3nEr_UJfHPPVzcKmEDo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icjT0qnl3nEr_UJfHPPVzcKmEDo/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/icjT0qnl3nEr_UJfHPPVzcKmEDo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icjT0qnl3nEr_UJfHPPVzcKmEDo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=z3S5NMnF0SY:f07Q0RdQFTM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=z3S5NMnF0SY:f07Q0RdQFTM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=z3S5NMnF0SY:f07Q0RdQFTM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=z3S5NMnF0SY:f07Q0RdQFTM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=z3S5NMnF0SY:f07Q0RdQFTM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=z3S5NMnF0SY:f07Q0RdQFTM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=z3S5NMnF0SY:f07Q0RdQFTM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/z3S5NMnF0SY" height="1" width="1"/&gt;</description>
         <author>phil</author>
         <guid isPermaLink="false">http://www.trelford.com/blog/post.aspx?id=e4f1b9f0-e549-48f7-a825-54fedd62ff22</guid>
         <pubDate>Sat, 25 Feb 2012 12:53:08 +0000</pubDate>
      </item>
      <item>
         <title>Market Risk Swap Trade in CouchDB</title>
         <link>http://mdavey.wordpress.com/2012/02/23/market-risk-swap-trade-in-couchdb/</link>
         <description>&lt;p&gt;Sometime ago I blogged about the PV01 calculations of a &lt;a rel="nofollow" target="_blank" href="https://mdavey.wordpress.com/2010/03/11/f-market-risk-fixedfloating-cashflows/"&gt;swap&lt;/a&gt;.  Given the Web 2.0 movement over the years, some work I did whilst on a train journey (or was it a plane, I can&amp;#8217;t remember) was to makes the F# market risk calculation post the calculated values into &lt;a rel="nofollow" target="_blank" href="http://net.tutsplus.com/tutorials/getting-started-with-couchdb/"&gt;CouchDB&lt;/a&gt;.  Here a few bits and pieces from that work:&lt;/p&gt;
&lt;p&gt;
&lt;pre&gt;
{
    &amp;quot;tradeId&amp;quot;: 1002,
    &amp;quot;trader&amp;quot;: &amp;quot;Terry Trader&amp;quot;,
    &amp;quot;desk&amp;quot;: &amp;quot;Bond Desk&amp;quot;,
    &amp;quot;region&amp;quot;: &amp;quot;New York&amp;quot;,
    &amp;quot;notional&amp;quot;: 100,
    &amp;quot;payDayCountBasis&amp;quot;: &amp;quot;30/360&amp;quot;,
    &amp;quot;receiveDayCountBasis&amp;quot;: &amp;quot;A/360&amp;quot;,
    &amp;quot;tradeDate&amp;quot;: &amp;quot;2010-01-01&amp;quot;,
    &amp;quot;assetClass&amp;quot;: &amp;quot;Rates&amp;quot;,
    &amp;quot;instrument&amp;quot;: &amp;quot;Swap&amp;quot;,
    &amp;quot;paymentFrequency&amp;quot;: &amp;quot;6m&amp;quot;,
    &amp;quot;payRate&amp;quot;: &amp;quot;5%&amp;quot;,
    &amp;quot;receiveRate&amp;quot;: &amp;quot;USD LIBOR&amp;quot;,
    &amp;quot;duration&amp;quot;: &amp;quot;5Yr Annual Fixed 5%/Float LIBOR&amp;quot;,
    &amp;quot;terminationDate&amp;quot;: &amp;quot;2015-01-01&amp;quot;,
    &amp;quot;effectiveDate&amp;quot;: &amp;quot;2010-01-01&amp;quot;,
    &amp;quot;exposureMeasureDates&amp;quot;: &amp;quot;http:&amp;#92;ocalhost:8001&amp;#92;Rates&amp;#92;Bond&amp;#92;exposureDates&amp;#92;20100101&amp;quot;,
    &amp;quot;yieldCurve&amp;quot;: &amp;quot;http:&amp;#92;ocalhost:8001&amp;#92;yieldCurveSD&amp;#92;20100101&amp;QUOT;,
    &amp;QUOT;FORCASTCURVE&amp;QUOT;: &amp;QUOT;HTTP:&amp;#92;ocalhost:8001&amp;#92;forcastCurveSD&amp;#92;20100101&amp;QUOT;,
    &amp;QUOT;FIXEDLEGS&amp;QUOT;: [&amp;QUOT;2010-07-01&amp;QUOT;, &amp;QUOT;2011-01-01&amp;QUOT;, &amp;QUOT;2011-07-01&amp;QUOT;, &amp;QUOT;2012-01-01&amp;QUOT;, &amp;QUOT;2012-07-01&amp;QUOT;, &amp;QUOT;2013-01-01&amp;QUOT;, &amp;QUOT;2013-07-01&amp;QUOT;, &amp;QUOT;2014-01-01&amp;QUOT;, &amp;QUOT;2013-07-01&amp;QUOT;, &amp;QUOT;2015-01-01&amp;QUOT;],
    &amp;QUOT;FLOATINGLEGS&amp;QUOT;: [&amp;QUOT;2010-07-01&amp;QUOT;, &amp;QUOT;2011-01-01&amp;QUOT;, &amp;QUOT;2011-07-01&amp;QUOT;, &amp;QUOT;2012-01-01&amp;QUOT;, &amp;QUOT;2012-07-01&amp;QUOT;, &amp;QUOT;2013-01-01&amp;QUOT;, &amp;QUOT;2013-07-01&amp;QUOT;, &amp;QUOT;2014-01-01&amp;QUOT;, &amp;QUOT;2013-07-01&amp;QUOT;, &amp;QUOT;2015-01-01&amp;QUOT;],
    &amp;QUOT;FIXEDLEGPVCASHFLOWS&amp;QUOT;: [-2.44,-2.38,-2.31,-2.25,-2.19,-2.16,-2.09,-2.03,-1.99,-1.95],
    &amp;QUOT;EXPECTEDEXPOSURES&amp;QUOT;: {},
    &amp;QUOT;FLOATINGLEGPVCASHFLOWS&amp;QUOT;: [2.45,2.62,2.51,2.62,2.35,2.03,2.35,2.20,2.04,1.99],
    &amp;QUOT;EFFECTIVEEXPECTEDEXPOSURES&amp;QUOT;: {},
    &amp;QUOT;EFFECTIVEEXPECTEDPOSITIVEEXPOSURE&amp;QUOT;: {}
}&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;WHICH WHEN INSERTED INTO COUCHDB, ALLOW ONE TO CALCULATE THE NPV OF THE SWAP FROM THE PV CASHFLOWS USING THE FOLLOWING MAP AND REDUCE:&lt;/p&gt;
&lt;pre&gt;
FUNCTION(DOC) {
  IF (DOC.INSTRUMENT == &amp;QUOT;SWAP&amp;QUOT;) {
    EMIT(DOC.TRADEID, SUM(DOC.FIXEDLEGPVCASHFLOWS)+SUM(DOC.FLOATINGLEGPVCASHFLOWS));
  }
}

FUNCTION (KEYS, VALUES) {
  RETURN SUM(VALUES);
}
&lt;/pre&gt;

&lt;p&gt;YOU&amp;#8217;LL NOTICE FROM THE JSON THAT I&amp;#8217;VE OMITTED THE VARIOUS COUNTERPARTY &lt;a rel="nofollow" target="_blank" HREF="HTTP://WWW.FINCAD.COM/DERIVATIVES-RESOURCES/ARTICLES/COUNTERPARTY-CREDIT-EXPOSURE.ASPX"&gt;EXPOSURE&lt;/a&gt; VALUES, MAINLY TO REDUCE THIS POSTING SIZE, BUT ALSO TO ALLOW FOR MORE DISCUSSION IN A FUTURE POSTING.&lt;/p&gt;
&lt;p&gt;  &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GOCOMMENTS/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/COMMENTS/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GODELICIOUS/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/DELICIOUS/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GOFACEBOOK/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/FACEBOOK/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GOTWITTER/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/TWITTER/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GOSTUMBLE/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/STUMBLE/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GODIGG/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/DIGG/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" HREF="HTTP://FEEDS.WORDPRESS.COM/1.0/GOREDDIT/MDAVEY.WORDPRESS.COM/5245/"&gt;&lt;img ALT="" BORDER="0" SRC="HTTP://FEEDS.WORDPRESS.COM/1.0/REDDIT/MDAVEY.WORDPRESS.COM/5245/"/&gt;&lt;/a&gt; &lt;img ALT="" BORDER="0" SRC="HTTP://STATS.WORDPRESS.COM/B.GIF?HOST=MDAVEY.WORDPRESS.COM&amp;AMP;BLOG=18454&amp;AMP;POST=5245&amp;AMP;SUBD=MDAVEY&amp;AMP;REF=&amp;AMP;FEED=1" WIDTH="1" HEIGHT="1"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L2hqQk4BHtcpYVVxZzAzg4a0CtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2hqQk4BHtcpYVVxZzAzg4a0CtU/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/L2hqQk4BHtcpYVVxZzAzg4a0CtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2hqQk4BHtcpYVVxZzAzg4a0CtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=d8l4-ygl_N0:FN6-ZQMv3Vk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=d8l4-ygl_N0:FN6-ZQMv3Vk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=d8l4-ygl_N0:FN6-ZQMv3Vk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=d8l4-ygl_N0:FN6-ZQMv3Vk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=d8l4-ygl_N0:FN6-ZQMv3Vk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=d8l4-ygl_N0:FN6-ZQMv3Vk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=d8l4-ygl_N0:FN6-ZQMv3Vk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/d8l4-ygl_N0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://mdavey.wordpress.com/?p=5245</guid>
         <pubDate>Thu, 23 Feb 2012 20:13:10 +0000</pubDate>
         <category>Uncategorized</category>
      </item>
      <item>
         <title>Functional Programming eXchange 2012</title>
         <link>http://www.trelford.com/blog/post/FPX12.aspx</link>
         <description>&lt;p&gt;Less than a month to go now until the first FP event of this year – the &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012"&gt;Functional Programming eXchange&lt;/a&gt; at Skills Matter in London on March 16th.&lt;/p&gt;  &lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:4px 0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="functionalpx-670x180" border="0" alt="functionalpx-670x180" src="http://trelford.com/blog/image.axd?picture=functionalpx-670x180.gif" width="516" height="142"/&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Robert Pickering has put together another great line up including on the F# side &lt;a rel="nofollow" target="_blank" href="http://tomasp.net/"&gt;Tomas Petricek&lt;/a&gt; on &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/podcast/scala/accessing-loosely-coupled-data-in-c-sharp-and-f"&gt;F# 3.0’s Type Providers&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/expert-profile/scala/loic-denuziere"&gt;Loic Denuziere&lt;/a&gt; on F# in &lt;a rel="nofollow" target="_blank" href="http://fpish.net/"&gt;large scale web apps&lt;/a&gt;. There’s also a good number of talks from members of the Clojure, Scala and Haskell communities.&lt;/p&gt;  &lt;p&gt;Rob lists plenty of &lt;a rel="nofollow" target="_blank" href="http://strangelights.com/blog/archive/2012/02/19/reasons-to-come-to-functional-programming-exchange-2012.aspx"&gt;reasons to come to Functional Programming eXchange 2012&lt;/a&gt;, on his blog. The case studies on FP in real world applications look particularly compelling and Scala’s AKKA framework is definitely worth a look. Not forgetting the socializing and inevitable pub outing afterwards…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v4Xtt2cJG-VoCdu4Ps9_A3dUQ20/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4Xtt2cJG-VoCdu4Ps9_A3dUQ20/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/v4Xtt2cJG-VoCdu4Ps9_A3dUQ20/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v4Xtt2cJG-VoCdu4Ps9_A3dUQ20/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=m-lrE289nDs:1Y-snLMzB_o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=m-lrE289nDs:1Y-snLMzB_o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=m-lrE289nDs:1Y-snLMzB_o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=m-lrE289nDs:1Y-snLMzB_o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=m-lrE289nDs:1Y-snLMzB_o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=m-lrE289nDs:1Y-snLMzB_o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=m-lrE289nDs:1Y-snLMzB_o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/m-lrE289nDs" height="1" width="1"/&gt;</description>
         <author>phil</author>
         <guid isPermaLink="false">http://www.trelford.com/blog/post.aspx?id=73cd4f9b-f8c6-4d67-8ac2-79ae7d4cd26a</guid>
         <pubDate>Wed, 22 Feb 2012 18:47:28 +0000</pubDate>
      </item>
      <item>
         <title>TryJoinads (IV.) - Concurrency using join calculus</title>
         <link>http://tomasp.net/blog/joinads-join-calculus.aspx</link>
         <description>&lt;p&gt;Join calculus provides a declarative way of expressing asynchronous synchronization
patterns. It has been use as a basis for programming languages (JoCaml and COmega), but also
as a basis for libraries (embedded in C# and Scala). Using joinads, it is possible to 
embed join calculus in F# with a nice syntax using the &lt;code&gt;match!&lt;/code&gt; construct. Formally,
join calculus does not form a &lt;em&gt;monad&lt;/em&gt;, but it can be viewed as a version of &lt;em&gt;joinad&lt;/em&gt;
as described in the &lt;a rel="nofollow"&gt;first paper on joinads&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The programming model is based on &lt;em&gt;channels&lt;/em&gt; and &lt;em&gt;join patterns&lt;/em&gt;. A channel can be viewed
as a thread-safe mailbox into which we can put values without blocking the caller. In some
sense, this is quite similar to &lt;a rel="nofollow"&gt;F# agents&lt;/a&gt;. A join pattern is then a rule
saying that a certain combination of values in channels should trigger a specific reaction
(and remove values from the channels). The ability to match on multiple channels distinguishes
join calculus from F# agents.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog post is a re-publication of a tutorial from the &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org"&gt;TryJoinads.org&lt;/a&gt;
web page. If you read the article there, you can run the examples interactively
and experiment with them: &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org/index.html?use/joins.html"&gt;view the article on TryJoinads&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DW4jakFa88o9uyCOjNMoklhMeIo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DW4jakFa88o9uyCOjNMoklhMeIo/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/DW4jakFa88o9uyCOjNMoklhMeIo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DW4jakFa88o9uyCOjNMoklhMeIo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=0mfnEAKA04Y:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=0mfnEAKA04Y:Ro2eosQjYao:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=0mfnEAKA04Y:Ro2eosQjYao:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=0mfnEAKA04Y:Ro2eosQjYao:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=0mfnEAKA04Y:Ro2eosQjYao:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=0mfnEAKA04Y:Ro2eosQjYao:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=0mfnEAKA04Y:Ro2eosQjYao:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/0mfnEAKA04Y" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Wed, 22 Feb 2012 17:38:40 +0000</pubDate>
      </item>
      <item>
         <title>Sphere packing in AutoCAD: creating an Apollonian packing using F#  Part 3</title>
         <link>http://feedproxy.google.com/~r/typepad/walmsleyk/through_the_interface/~3/ZLao26AEAcw/sphere-packing-in-autocad-creating-an-apollonian-packing-using-f-part-3.html</link>
         <author>Kean Walmsley</author>
         <guid isPermaLink="false">tag:typepad.com,2003:post-6a00d83452464869e20168e7acb46c970c</guid>
         <pubDate>Wed, 22 Feb 2012 05:07:00 +0000</pubDate>
      <description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iDaGgbCctBFK17nALx6hH40HoYg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iDaGgbCctBFK17nALx6hH40HoYg/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/iDaGgbCctBFK17nALx6hH40HoYg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iDaGgbCctBFK17nALx6hH40HoYg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=QNL86H7w8Zk:CW5w8s8LatA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=QNL86H7w8Zk:CW5w8s8LatA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=QNL86H7w8Zk:CW5w8s8LatA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=QNL86H7w8Zk:CW5w8s8LatA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=QNL86H7w8Zk:CW5w8s8LatA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=QNL86H7w8Zk:CW5w8s8LatA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=QNL86H7w8Zk:CW5w8s8LatA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/QNL86H7w8Zk" height="1" width="1"/&gt;</description></item>
      <item>
         <title>TryJoinads (III.): Agent-based programming</title>
         <link>http://tomasp.net/blog/joinads-agents.aspx</link>
         <description>&lt;p&gt;Another area where the &lt;code&gt;match!&lt;/code&gt; syntax can be used is when programming with F# &lt;em&gt;agents&lt;/em&gt;,
implemented by the &lt;code&gt;MailboxProcessor&lt;/code&gt; type. Formally, agents do not form the monad
structure in a useful way - when programming with agents, we do not compose a new agents,
but instead we write code that (imperatively) receives messages from the agent's mailbox
and handles them.&lt;/p&gt;

&lt;p&gt;This article demonstrates an &lt;code&gt;agent { ... }&lt;/code&gt; computation builder that can be used for 
implementing the body of an agent. Normally, the body of an agent is an &lt;em&gt;asynchronous
workflow&lt;/em&gt;. The code in the body uses &lt;code&gt;let!&lt;/code&gt; to perform asynchronous operations, most 
importantly to call &lt;code&gt;inbox.Receive&lt;/code&gt; to get the next message from the inbox. When the
agent intends to handle only certain kinds of messages, it can use &lt;code&gt;inbox.Scan&lt;/code&gt;. When
using the &lt;code&gt;agent&lt;/code&gt; builder, pattern matching on messages can be written using &lt;code&gt;match!&lt;/code&gt; and
it is possible to write code that ignores certain types of messages simply by writing an
incomplete pattern matching.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog post is a re-publication of a tutorial from the &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org"&gt;TryJoinads.org&lt;/a&gt;
web page. If you read the article there, you can run the examples interactively
and experiment with them: &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org/index.html?use/agents.html"&gt;view the article on TryJoinads&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BfCpdIYgDm7KAlm8QYbUWQND5JE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BfCpdIYgDm7KAlm8QYbUWQND5JE/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/BfCpdIYgDm7KAlm8QYbUWQND5JE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BfCpdIYgDm7KAlm8QYbUWQND5JE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=iXGRT1Teokk:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=iXGRT1Teokk:Ro2eosQjYao:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=iXGRT1Teokk:Ro2eosQjYao:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=iXGRT1Teokk:Ro2eosQjYao:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=iXGRT1Teokk:Ro2eosQjYao:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=iXGRT1Teokk:Ro2eosQjYao:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=iXGRT1Teokk:Ro2eosQjYao:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/iXGRT1Teokk" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Mon, 20 Feb 2012 12:36:10 +0000</pubDate>
      </item>
      <item>
         <title>Sphere packing in AutoCAD: creating an Apollonian packing using F#  Part 2</title>
         <link>http://feedproxy.google.com/~r/typepad/walmsleyk/through_the_interface/~3/_c0DBpbSA0E/sphere-packing-in-autocad-creating-an-apollonian-packing-using-f-part-2.html</link>
         <author>Kean Walmsley</author>
         <guid isPermaLink="false">tag:typepad.com,2003:post-6a00d83452464869e2016301ab5112970d</guid>
         <pubDate>Mon, 20 Feb 2012 05:09:00 +0000</pubDate>
      <description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uBwyoZka8m9hDhVbQgz-ZMmpmm0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uBwyoZka8m9hDhVbQgz-ZMmpmm0/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/uBwyoZka8m9hDhVbQgz-ZMmpmm0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uBwyoZka8m9hDhVbQgz-ZMmpmm0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=f_v1lf6gDGA:irvF7aXUiGg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=f_v1lf6gDGA:irvF7aXUiGg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=f_v1lf6gDGA:irvF7aXUiGg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=f_v1lf6gDGA:irvF7aXUiGg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=f_v1lf6gDGA:irvF7aXUiGg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=f_v1lf6gDGA:irvF7aXUiGg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=f_v1lf6gDGA:irvF7aXUiGg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/f_v1lf6gDGA" height="1" width="1"/&gt;</description></item>
      <item>
         <title>Reasons to Come to Functional Programming eXchange 2012</title>
         <link>http://strangelights.com/blog/archive/2012/02/19/reasons-to-come-to-functional-programming-exchange-2012.aspx</link>
         <description>&lt;p&gt;For Functional Programming eXchange 2012 and I’ve tried to put together a programming that mixes the best the functional programming community has to give. I wanted both talks that show how functional programming languages can be used more effectively and that show off new up and coming language and new language features. I also wanted talks that gave feedback from project that were implemented using functional languages. I’m pleased to say we have plenty of both.&lt;/p&gt;  &lt;p&gt;The day will kick off with David Pollak talking about Visi.Pro. One of the areas I’ve been thinking about a lot lately, outside of functional programming, is how tablets will affect the way we work. Clearly up take in the consumer &lt;a rel="nofollow" target="_blank" href="http://www.maindevice.com/2011/12/12/tablets-vs-laptops-vs-desktop-pc/"&gt;market it is growing&lt;/a&gt;, and the new fashion of &lt;a rel="nofollow" target="_blank" href="http://www.ft.com/intl/cms/s/0/fd92894c-3658-11e1-a3fa-00144feabdc0.html#axzz1mqqW1qey"&gt;“Bring your own device”&lt;/a&gt; meet that tablets are making there way into the enterprise. But can people do useful work with these new devices? And if so how will they do it? David has come up an interesting answer, he’s betting that to make effective use of these new devices we need a new way to program them and has come up with the &lt;a rel="nofollow" target="_blank" href="http://visi.io/"&gt;visi.io&lt;/a&gt; language and the &lt;a rel="nofollow" target="_blank" href="http://visi.pro/"&gt;visi.pro&lt;/a&gt; platform to help people create software and models using their iPads. If you care about trends in the tech industry, definitely one to watch.&lt;/p&gt;  &lt;p&gt;Next we have 3 cases studies that show how Haskell, F# and Scala have been used to build complex real world application. First up Erik Hesselink will be talking about “&lt;a rel="nofollow" target="_blank" href="http://www.silkapp.com/"&gt;SilkApp&lt;/a&gt;” a web application for help users to visual data in a more structured way, then Loic Denuziere will talk about creating the site &lt;a rel="nofollow" target="_blank" href="http://fpish.net/"&gt;fpish.net&lt;/a&gt; a large complex community site written in F# using WebShaper, finally Kevin Wright will talk about using AKKA to create a high-throughput and low latency RESTful/streaming event service at &lt;a rel="nofollow" target="_blank" href="http://zeebox.com/"&gt;zeebox&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In the afternoon will see some more theoretical talks that’ll shows us how functional programming can be applied more effectively. First Andres Löh will talk about creating DSLs in Haskell, then Tomas Petricek will talk about F# 3.0’s new feature, Type Providers, Miles Sabin will talk about advanced uses of Scala and Bruce Durling will round of the day with an overview of Clojure and Incanter, clojure’s powerful data visualization library.&lt;/p&gt;  &lt;p&gt;And if that wasn’t enough there’ll be chance to meet and socialize with our speakers and other FPX delegates all day along and quite possibly all evening long in the pub afterwards.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Just occurred to me I didn’t put a link into the full agenda, &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012"&gt;so here it is&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://strangelights.com/blog/aggbug/1701.aspx" width="1" height="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5_EUBaH3aqXF1lHo8uiIleYMlDI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5_EUBaH3aqXF1lHo8uiIleYMlDI/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/5_EUBaH3aqXF1lHo8uiIleYMlDI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5_EUBaH3aqXF1lHo8uiIleYMlDI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=14SlZ1ZOTqA:6qCW277JJCg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=14SlZ1ZOTqA:6qCW277JJCg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=14SlZ1ZOTqA:6qCW277JJCg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=14SlZ1ZOTqA:6qCW277JJCg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=14SlZ1ZOTqA:6qCW277JJCg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=14SlZ1ZOTqA:6qCW277JJCg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=14SlZ1ZOTqA:6qCW277JJCg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/14SlZ1ZOTqA" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://strangelights.com/blog/archive/2012/02/19/reasons-to-come-to-functional-programming-exchange-2012.aspx</guid>
         <pubDate>Sun, 19 Feb 2012 18:12:46 +0000</pubDate>
      </item>
      <item>
         <title>Turtle Graphics on the Fignition</title>
         <link>http://blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx</link>
         <description>&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;The &lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition"&gt;Fignition board&lt;/a&gt; is a fun little piece of 8-bit fun I tell ya! I&amp;rsquo;ve been having a blast with it. It&amp;rsquo;s an ATmega168 with 8Kb SRAM and 4Mbits of flash with video out (there&amp;rsquo;s also a &lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="http://youtu.be/IM1tvDjKZB8"&gt;sound mod for it&lt;/a&gt;). In this post I want to show off an implementation of Turtle Graphics I&amp;rsquo;ve made for it.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7506.photo_2D00_1_5F00_06378B1A.jpg"&gt;&lt;img title="photo 1" style="display:inline;background-image:none;" border="0" alt="photo 1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5023.photo_2D00_1_5F00_thumb_5F00_05644692.jpg" width="244" height="183"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7418.photo_2D00_2_5F00_303CAAA4.jpg"&gt;&lt;img title="photo 2" style="display:inline;background-image:none;" border="0" alt="photo 2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7002.photo_2D00_2_5F00_thumb_5F00_6E38CC13.jpg" width="244" height="183"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size:medium;"&gt;Forth as an &amp;ldquo;OS&amp;rdquo;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;Most interestingly the Fignition is a &lt;i style=""&gt;completely standalone&lt;/i&gt; FIG-Forth system. It has an 8-button input system and, as is common for old Forths, there is an &lt;b style=""&gt;&lt;span&gt;edit&lt;/span&gt;&lt;/b&gt;or and screen-sized block &amp;ldquo;file system&amp;rdquo; of sorts. Compilation happens as blocks are &lt;b style=""&gt;&lt;span&gt;load&lt;/span&gt;&lt;/b&gt;ed. This is all the &amp;ldquo;operating system&amp;rdquo; you need. For the first few days I programmed it entirely this way.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;This is what is meant when people say that Forth is a language and &lt;i style=""&gt;an operation system&lt;/i&gt;. Normally it doesn&amp;rsquo;t mean giving up a normal keyboard, but still this idea of a complete system entirely in Forth is where it&amp;rsquo;s at. I&amp;rsquo;ll probably fall to temptation when the &lt;a rel="nofollow" target="_blank" href="http://www.raspberrypi.org/" title="Raspberry Pi"&gt;Raspberry Pi&lt;/a&gt; comes out but, com&amp;rsquo;on Linux is overkill (WinCE single board computers are too).&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size:medium;"&gt;Development Host Machine&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;The above being said, it is quite tedious to program with the 8-button keyboard. Yesterday I got bulk loading of data over USB working; still a process but easier. There are &lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition/documentation/use-it"&gt;instructions here&lt;/a&gt; (I initially had driver issues on Win8 &amp;ndash; be sure to get the &lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="http://www.fischl.de/usbasp/"&gt;latest USBasp from here&lt;/a&gt;). The AVRDude tool allows you to transfer source one 500-byte block at a time from a PC/Mac to EPROM. Then you can edit on the device itself and write to flash, from where it can then be &lt;b style=""&gt;&lt;span&gt;load&lt;/span&gt;&lt;/b&gt;ed/compiled to the dictionary and executed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size:medium;"&gt;Turtle Graphics!&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;There was a &lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition/documentation/understand-it/video-modes"&gt;160x160 graphics mode added in firmware 0.9.6&lt;/a&gt;. This gave me the idea of making a rudimentary Logo-like system (&lt;a rel="nofollow" style="cursor:auto;" target="_blank" href="http://youtu.be/CVFcpoULWq4"&gt;I love it as a teaching language&lt;/a&gt;). I had a silly goal of getting it working snugly within a &lt;i style=""&gt;single &lt;/i&gt;block of code and managed to pull that off. It adds the following words for controlling the &amp;ldquo;turtle&amp;rdquo;:&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b style=""&gt;&lt;span style="font-size:11pt;"&gt;c&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;"&gt; &amp;ndash; clear screen (&lt;b&gt;cls&lt;/b&gt; doesn&amp;rsquo;t work in 160x160 graphics mode)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;g&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Go to an x y coordinate (0,0 is the center of the screen)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;h&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Set heading (0-60 - 0 is North, 15 East, 30 South, 45 West)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;b&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Begin (enters 160x160 graphics mode, clears, resets turtle)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;e&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; End (waits for key, exits graphics mode)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;t&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Turn the turtle (see h above &amp;ndash; negative values for counter-clockwise)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;n&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Sine function (used internally &amp;ndash; see h above &amp;ndash; returns scaled by 255)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;m&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Move turtle number of pixels along current heading (no drawing)&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;b style=""&gt;p&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Plot pixel currently under turtle&lt;br /&gt;&lt;/span&gt;&lt;b style=""&gt;f&amp;nbsp;&lt;/b&gt;&lt;span style="line-height:13pt;font-size:11pt;"&gt;&amp;ndash; Forward number of pixels while plotting&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;Yes, this all fits in a single block and compiles to just 307 bytes!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size:medium;"&gt;Fixed-point Trig Functions&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;It uses a table-based cosine function with 6 degree (pi/30 radian) increments &amp;ndash; think minute marks on a clock. This is still divisible by many things (2, 3, 4, 5, 6, 10, 12, 15, 20, 30), so it works out well enough for Logo and makes the lookup table small.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;Resorting to 8.8 fixed-point numbers, I started with a quarter-cosine table with values scaled by 256. This leaves plenty of room for the turtle coordinates with a desired 160*256 range easily with the 16-bit integers supported. Some F# to generate it:&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;strong&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:blue;"&gt;let &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;table =&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; let &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;pi = System.Math.PI&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; let &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;strong&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:black;"&gt;fix x = round (cos x * 256.) |&amp;gt; int&lt;br /&gt;&amp;nbsp; &amp;nbsp; Array.map fix [|0. .. (pi / 30.) .. (pi / 2.)|]&lt;br /&gt;&lt;br /&gt;Array.iter (printf &lt;/span&gt;&lt;span style="background:white;color:maroon;"&gt;"%x "&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong style="font-family:Consolas;font-size:x-small;background-color:white;"&gt;) table&lt;br /&gt;&lt;/strong&gt;&lt;strong style="font-family:Consolas;font-size:x-small;background-color:white;"&gt;&lt;br /&gt;&amp;gt; 100 ff fa f3 ea de cf be ab 96 80 68 4f 35 1b 0&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;Just these values can be reflected and/or shifted to generate sine/cosine results for all sixty angles; something like the following (but in Forth):&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:blue;"&gt;let &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:black;"&gt;cosine x =&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; let &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;a = abs x % 60&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; let &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;i =&amp;nbsp;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;a &amp;gt; 29&amp;nbsp;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;then &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;60 - a&amp;nbsp;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;else &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;a&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; let &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;s, i' = &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;if &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;i &amp;gt; 14 &lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;then &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;-1, 30 - i&amp;nbsp;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;else &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;1, i&lt;br /&gt;&lt;/span&gt;&lt;span style="background:white;color:blue;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="background:white;color:black;"&gt;table.[i'] * s&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:courier;"&gt;&lt;span style="color:#0000ff;"&gt;let&lt;/span&gt;&amp;nbsp;sine x = x - 15 |&amp;gt; cosine&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"&gt;&lt;strong&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="background:white;color:black;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;The Forth is intentionally compacted into obfuscation:&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span style="line-height:11pt;"&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,&lt;br /&gt;: s abs 3C mod dup 1D &amp;gt; if 3C swap - then dup E &amp;gt; if&lt;br /&gt;&amp;nbsp; -1 1E rot - else 1 swap then n + c@ 1+ * ;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;The rest of the implementation is relatively straight forward (but not so readable because of poor factoring and naming due to wanting to squeeze down the character count):&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span style="line-height:11pt;"&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;0 var x 0 var y 0 var a&lt;br /&gt;0 var q 0 var w &lt;br /&gt;: c 9380 C80 0 fill ;&lt;br /&gt;: k &amp;gt;r 50 + 8 &amp;lt;&amp;lt; r&amp;gt; ! ;&lt;br /&gt;: m dup q @ * x +! w @ * y +! ;&lt;br /&gt;: g y k x k ;&lt;br /&gt;: h dup a ! dup s w ! 2D + s q ! ;&lt;br /&gt;: f &amp;gt;r q @ x @ y @ w @ r 0 do &amp;gt;r r + &amp;gt;r over +&lt;br /&gt;&amp;nbsp; dup 8 &amp;gt;&amp;gt; r 8 &amp;gt;&amp;gt; plot r&amp;gt; r&amp;gt; loop o y ! x ! o r&amp;gt; o ;&lt;br /&gt;: e key 0 vmode cls ;&lt;br /&gt;: b 1 vmode 1 pen c 0 0 g 0 h ;&lt;br /&gt;: t a @ + h ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size:medium;"&gt;Demo, demo, demo!&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;In a second block are some demos putting it to use.&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;line-height:13pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt; 
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;[UPDATE: Now 4x faster!]&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:11pt;line-height:13pt;"&gt;I was stupidly calculating sine/cosine for every single-pixel of motion. Of course this only needs to be done when the heading changes - just keep the multipliers around for future use. Also, I made a small optimization to avoid multiplication for single-pixel movement. This sped things up by a factor of four or five.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;line-height:13pt;"&gt;[UPDATE: Now 15x faster!] Julian Skidmore, the designer of the Fignition, was nice enough to look at the code and &lt;a rel="nofollow" target="_blank" href="https://groups.google.com/forum/#!topic/fignition/2vBeONSTnWQ"&gt;came up with some brilliant performance&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:15px;line-height:17px;"&gt;&lt;a rel="nofollow" target="_blank" href="https://groups.google.com/forum/#!topic/fignition/2vBeONSTnWQ"&gt;optimizations&lt;/a&gt; - mostly around using 8.8 fixed point so that bit shifts could be used rather than multiplication/division and a slick simplification to the trig function.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:15px;"&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx"&gt;(Please visit the site to view this video)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;The sine (&lt;b style=""&gt;&lt;span&gt;s&lt;/span&gt;&lt;/b&gt;) function can be seen to work with:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: sin 160 0 do i i s 4 / 80 + plot loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5023.clip_5F00_image0024_5F00_46FE82DE.jpg"&gt;&lt;img title="clip_image002[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image002[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7802.clip_5F00_image0024_5F00_thumb_5F00_149AAF5F.jpg" width="428" height="320"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;And we can see that using it to plot lines in each of the 60 available angles works:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: burst 60 0 do 0 0 g i h 110 f loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/3288.clip_5F00_image0044_5F00_493B0B9A.jpg"&gt;&lt;img title="clip_image004[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image004[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/2318.clip_5F00_image0044_5F00_thumb_5F00_3DA54E5B.jpg" width="428" height="320"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;b style=""&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;Other demos show off some of the creative Logo patterns you may have played with as a kid:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: squiral -50 50 g 20 0 do 100 f 21 t loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/0068.clip_5F00_image0064_5F00_320F911C.jpg"&gt;&lt;img title="clip_image006[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image006[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7418.clip_5F00_image0064_5F00_thumb_5F00_31A35E27.jpg" width="428" height="320"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: circle 60 0 do 4 f 1 t loop ; &lt;br /&gt;: spiral 15 0 do circle 4 t loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7024.clip_5F00_image0084_5F00_7F3F8AA7.jpg"&gt;&lt;img title="clip_image008[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image008[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/4774.clip_5F00_image0084_5F00_thumb_5F00_5AADFD23.jpg" width="428" height="320"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;b style=""&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: star 5 0 do 80 f 24 t loop ; &lt;br /&gt;: stars 3 0 do star 20 t loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5367.clip_5F00_image0104_5F00_4145F9E9.jpg"&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;img title="clip_image010[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image010[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/1641.clip_5F00_image0104_5F00_thumb_5F00_47F9036C.jpg" width="428" height="320"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;br /&gt;: rose 0 50 0 do 2 + dup f 14 t loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/1638.clip_5F00_image0124_5F00_2A86B260.jpg"&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;&lt;img title="clip_image012[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image012[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/8407.clip_5F00_image0124_5F00_thumb_5F00_111EAF26.jpg" width="428" height="320"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;One of my favorites is this flower:&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;b style=""&gt;&lt;span&gt;&lt;span style="font-family:Consolas;font-size:x-small;"&gt;: hp 15 0 do 5 f 1 t loop 15 0 do 2 f -1 t loop ; &lt;br /&gt;: petal hp 30 t hp 30 t ; &lt;br /&gt;: flower 15 0 do petal 4 t loop ;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style=""&gt;&lt;a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/3223.clip_5F00_image0144_5F00_77B6ABEB.jpg"&gt;&lt;img title="clip_image014[4]" style="border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image014[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/2211.clip_5F00_image0144_5F00_thumb_5F00_212D7DDD.jpg" width="428" height="320"/&gt;&lt;/a&gt;&lt;/span&gt;&lt;b style=""&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;Here&amp;rsquo;s the &lt;a rel="nofollow" target="_blank" href="http://lkjsdf.com/archive/figlogo/figlogo.zip"&gt;source and generates hex files&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"&gt;&lt;span style="font-size:11pt;"&gt;&lt;br /&gt;Have fun!&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269418" width="1" height="1"&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10269418</guid>
         <pubDate>Sun, 19 Feb 2012 04:28:00 +0000</pubDate>
         <content:encoded><![CDATA[<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">The <a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition">Fignition board</a> is a fun little piece of 8-bit fun I tell ya! I&rsquo;ve been having a blast with it. It&rsquo;s an ATmega168 with 8Kb SRAM and 4Mbits of flash with video out (there&rsquo;s also a <a rel="nofollow" style="cursor:auto;" target="_blank" href="http://youtu.be/IM1tvDjKZB8">sound mod for it</a>). In this post I want to show off an implementation of Turtle Graphics I&rsquo;ve made for it.<br />&nbsp;</span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7506.photo_2D00_1_5F00_06378B1A.jpg"><img title="photo 1" style="display:inline;background-image:none;" border="0" alt="photo 1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5023.photo_2D00_1_5F00_thumb_5F00_05644692.jpg" width="244" height="183"/></a>&nbsp;<a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7418.photo_2D00_2_5F00_303CAAA4.jpg"><img title="photo 2" style="display:inline;background-image:none;" border="0" alt="photo 2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7002.photo_2D00_2_5F00_thumb_5F00_6E38CC13.jpg" width="244" height="183"/></a></p>
<p></p>
<h1><span style="font-size:medium;">Forth as an &ldquo;OS&rdquo;</span></h1>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">Most interestingly the Fignition is a <i style="">completely standalone</i> FIG-Forth system. It has an 8-button input system and, as is common for old Forths, there is an <b style=""><span>edit</span></b>or and screen-sized block &ldquo;file system&rdquo; of sorts. Compilation happens as blocks are <b style=""><span>load</span></b>ed. This is all the &ldquo;operating system&rdquo; you need. For the first few days I programmed it entirely this way.<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">This is what is meant when people say that Forth is a language and <i style="">an operation system</i>. Normally it doesn&rsquo;t mean giving up a normal keyboard, but still this idea of a complete system entirely in Forth is where it&rsquo;s at. I&rsquo;ll probably fall to temptation when the <a rel="nofollow" target="_blank" href="http://www.raspberrypi.org/" title="Raspberry Pi">Raspberry Pi</a> comes out but, com&rsquo;on Linux is overkill (WinCE single board computers are too).<br />&nbsp;</span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p> 
<p></p>
<h1><span style="font-size:medium;">Development Host Machine</span></h1>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">The above being said, it is quite tedious to program with the 8-button keyboard. Yesterday I got bulk loading of data over USB working; still a process but easier. There are <a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition/documentation/use-it">instructions here</a> (I initially had driver issues on Win8 &ndash; be sure to get the <a rel="nofollow" style="cursor:auto;" target="_blank" href="http://www.fischl.de/usbasp/">latest USBasp from here</a>). The AVRDude tool allows you to transfer source one 500-byte block at a time from a PC/Mac to EPROM. Then you can edit on the device itself and write to flash, from where it can then be <b style=""><span>load</span></b>ed/compiled to the dictionary and executed.</span></p>
<p></p>
<h1><span style="font-size:medium;">Turtle Graphics!</span></h1>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">There was a <a rel="nofollow" style="cursor:auto;" target="_blank" href="https://sites.google.com/site/libby8dev/fignition/documentation/understand-it/video-modes">160x160 graphics mode added in firmware 0.9.6</a>. This gave me the idea of making a rudimentary Logo-like system (<a rel="nofollow" style="cursor:auto;" target="_blank" href="http://youtu.be/CVFcpoULWq4">I love it as a teaching language</a>). I had a silly goal of getting it working snugly within a <i style="">single </i>block of code and managed to pull that off. It adds the following words for controlling the &ldquo;turtle&rdquo;:<br />&nbsp;</span></p>
<p></p>
<p><b style=""><span style="font-size:11pt;">c</span></b><span style="font-size:11pt;"> &ndash; clear screen (<b>cls</b> doesn&rsquo;t work in 160x160 graphics mode)&nbsp;</span><br /><b style="">g&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Go to an x y coordinate (0,0 is the center of the screen)&nbsp;</span><br /><b style="">h&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Set heading (0-60 - 0 is North, 15 East, 30 South, 45 West)&nbsp;</span><br /><b style="">b&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Begin (enters 160x160 graphics mode, clears, resets turtle)&nbsp;</span><br /><b style="">e&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; End (waits for key, exits graphics mode)&nbsp;</span><br /><b style="">t&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Turn the turtle (see h above &ndash; negative values for counter-clockwise)&nbsp;</span><br /><b style="">n&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Sine function (used internally &ndash; see h above &ndash; returns scaled by 255)&nbsp;</span><br /><b style="">m&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Move turtle number of pixels along current heading (no drawing)&nbsp;</span><br /><b style="">p&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Plot pixel currently under turtle<br /></span><b style="">f&nbsp;</b><span style="line-height:13pt;font-size:11pt;">&ndash; Forward number of pixels while plotting<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">Yes, this all fits in a single block and compiles to just 307 bytes!</span></p>
<p></p>
<h1><span style="font-size:medium;">Fixed-point Trig Functions</span></h1>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">It uses a table-based cosine function with 6 degree (pi/30 radian) increments &ndash; think minute marks on a clock. This is still divisible by many things (2, 3, 4, 5, 6, 10, 12, 15, 20, 30), so it works out well enough for Logo and makes the lookup table small.<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">Resorting to 8.8 fixed-point numbers, I started with a quarter-cosine table with values scaled by 256. This leaves plenty of room for the turtle coordinates with a desired 160*256 range easily with the 16-bit integers supported. Some F# to generate it:<br />&nbsp;</span></p>
<p><span style="font-family:Consolas;"><strong><span style="font-size:x-small;"><span style="background:white;color:blue;">let </span><span style="background:white;color:black;">table =<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; let </span><span style="background:white;color:black;">pi = System.Math.PI<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; let </span></span></strong></span><span style="font-family:Consolas;"><strong><span style="font-size:x-small;"><span style="background:white;color:black;">fix x = round (cos x * 256.) |&gt; int<br />&nbsp; &nbsp; Array.map fix [|0. .. (pi / 30.) .. (pi / 2.)|]<br /><br />Array.iter (printf </span><span style="background:white;color:maroon;">"%x "</span></span></strong></span><strong style="font-family:Consolas;font-size:x-small;background-color:white;">) table<br /></strong><strong style="font-family:Consolas;font-size:x-small;background-color:white;"><br />&gt; 100 ff fa f3 ea de cf be ab 96 80 68 4f 35 1b 0&nbsp;</strong></p>
<p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"><span style="font-size:11pt;">Just these values can be reflected and/or shifted to generate sine/cosine results for all sixty angles; something like the following (but in Forth):</span></p>
<p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"><span style="font-size:11pt;"></span><strong><span style="font-family:Consolas;"><span style="font-size:x-small;"><span style="background:white;color:blue;"><br /></span></span></span><span style="font-family:Consolas;"><span style="font-size:x-small;"><span style="background:white;color:blue;">let </span></span></span><span style="font-family:Consolas;"><span style="font-size:x-small;"><span style="background:white;color:black;">cosine x =<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; let </span><span style="background:white;color:black;">a = abs x % 60<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; let </span><span style="background:white;color:black;">i =&nbsp;</span><span style="background:white;color:blue;">if </span><span style="background:white;color:black;">a &gt; 29&nbsp;</span><span style="background:white;color:blue;">then </span><span style="background:white;color:black;">60 - a&nbsp;</span><span style="background:white;color:blue;">else </span><span style="background:white;color:black;">a<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; let </span><span style="background:white;color:black;">s, i' = </span><span style="background:white;color:blue;">if </span><span style="background:white;color:black;">i &gt; 14 </span><span style="background:white;color:blue;">then </span><span style="background:white;color:black;">-1, 30 - i&nbsp;</span><span style="background:white;color:blue;">else </span><span style="background:white;color:black;">1, i<br /></span><span style="background:white;color:blue;">&nbsp; &nbsp; </span><span style="background:white;color:black;">table.[i'] * s<br /><br /></span></span></span><span style="font-size:x-small;"><span style="font-family:courier;"><span style="color:#0000ff;">let</span>&nbsp;sine x = x - 15 |&gt; cosine</span></span></strong></p>
<p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"><strong><span style="font-family:Consolas;"><span style="font-size:x-small;"><span style="background:white;color:black;">&nbsp;</span></span></span></strong></p>
<p class="MsoNormal" style="margin:0in 0in 0pt;line-height:normal;list-style-type:disc;"><span style="font-size:11pt;"><br />The Forth is intentionally compacted into obfuscation:<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"><b style=""><span style="line-height:11pt;"><span style="font-family:Consolas;font-size:x-small;">-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,<br />: s abs 3C mod dup 1D &gt; if 3C swap - then dup E &gt; if<br />&nbsp; -1 1E rot - else 1 swap then n + c@ 1+ * ;<br /></span></span></b></p>
<p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />The rest of the implementation is relatively straight forward (but not so readable because of poor factoring and naming due to wanting to squeeze down the character count):<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:10pt 0in;line-height:13pt;list-style-type:disc;"><b style=""><span style="line-height:11pt;"><span style="font-family:Consolas;font-size:x-small;">0 var x 0 var y 0 var a<br />0 var q 0 var w <br />: c 9380 C80 0 fill ;<br />: k &gt;r 50 + 8 &lt;&lt; r&gt; ! ;<br />: m dup q @ * x +! w @ * y +! ;<br />: g y k x k ;<br />: h dup a ! dup s w ! 2D + s q ! ;<br />: f &gt;r q @ x @ y @ w @ r 0 do &gt;r r + &gt;r over +<br />&nbsp; dup 8 &gt;&gt; r 8 &gt;&gt; plot r&gt; r&gt; loop o y ! x ! o r&gt; o ;<br />: e key 0 vmode cls ;<br />: b 1 vmode 1 pen c 0 0 g 0 h ;<br />: t a @ + h ;<br />&nbsp;</span></span></b></p>
<h1><span style="font-size:medium;">Demo, demo, demo!</span></h1>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">In a second block are some demos putting it to use.<br />&nbsp;</span><span style="font-size:11pt;line-height:13pt;">&nbsp;</span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p> 
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">[UPDATE: Now 4x faster!]&nbsp;</span><span><span style="font-size:11pt;line-height:13pt;">I was stupidly calculating sine/cosine for every single-pixel of motion. Of course this only needs to be done when the heading changes - just keep the multipliers around for future use. Also, I made a small optimization to avoid multiplication for single-pixel movement. This sped things up by a factor of four or five.</span><br /><br /><span style="font-size:11pt;line-height:13pt;">[UPDATE: Now 15x faster!] Julian Skidmore, the designer of the Fignition, was nice enough to look at the code and <a rel="nofollow" target="_blank" href="https://groups.google.com/forum/#!topic/fignition/2vBeONSTnWQ">came up with some brilliant performance&nbsp;</a></span><span style="font-size:15px;line-height:17px;"><a rel="nofollow" target="_blank" href="https://groups.google.com/forum/#!topic/fignition/2vBeONSTnWQ">optimizations</a> - mostly around using 8.8 fixed point so that bit shifts could be used rather than multiplication/division and a slick simplification to the trig function.</span></span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">&nbsp;</span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:15px;"><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx">(Please visit the site to view this video)</a></span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:15px;"><br /></span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;">The sine (<b style=""><span>s</span></b>) function can be seen to work with:</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: sin 160 0 do i i s 4 / 80 + plot loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5023.clip_5F00_image0024_5F00_46FE82DE.jpg"><img title="clip_image002[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image002[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7802.clip_5F00_image0024_5F00_thumb_5F00_149AAF5F.jpg" width="428" height="320"/></a></span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />And we can see that using it to plot lines in each of the 60 available angles works:</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: burst 60 0 do 0 0 g i h 110 f loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/3288.clip_5F00_image0044_5F00_493B0B9A.jpg"><img title="clip_image004[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image004[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/2318.clip_5F00_image0044_5F00_thumb_5F00_3DA54E5B.jpg" width="428" height="320"/></a></span><b style=""><span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />Other demos show off some of the creative Logo patterns you may have played with as a kid:</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: squiral -50 50 g 20 0 do 100 f 21 t loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/0068.clip_5F00_image0064_5F00_320F911C.jpg"><img title="clip_image006[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image006[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7418.clip_5F00_image0064_5F00_thumb_5F00_31A35E27.jpg" width="428" height="320"/></a></span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: circle 60 0 do 4 f 1 t loop ; <br />: spiral 15 0 do circle 4 t loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/7024.clip_5F00_image0084_5F00_7F3F8AA7.jpg"><img title="clip_image008[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image008[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/4774.clip_5F00_image0084_5F00_thumb_5F00_5AADFD23.jpg" width="428" height="320"/></a></span><b style=""><span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: star 5 0 do 80 f 24 t loop ; <br />: stars 3 0 do star 20 t loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/5367.clip_5F00_image0104_5F00_4145F9E9.jpg"><span style="font-family:Consolas;font-size:x-small;"><img title="clip_image010[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image010[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/1641.clip_5F00_image0104_5F00_thumb_5F00_47F9036C.jpg" width="428" height="320"/></span></a></span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;"><br />: rose 0 50 0 do 2 + dup f 14 t loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/1638.clip_5F00_image0124_5F00_2A86B260.jpg"><span style="font-family:Consolas;font-size:x-small;"><img title="clip_image012[4]" style="margin:0px;border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image012[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/8407.clip_5F00_image0124_5F00_thumb_5F00_111EAF26.jpg" width="428" height="320"/></span></a></span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />One of my favorites is this flower:<br />&nbsp;</span></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><b style=""><span><span style="font-family:Consolas;font-size:x-small;">: hp 15 0 do 5 f 1 t loop 15 0 do 2 f -1 t loop ; <br />: petal hp 30 t hp 30 t ; <br />: flower 15 0 do petal 4 t loop ;<br />&nbsp;</span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style=""><a rel="nofollow" target="_blank" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/3223.clip_5F00_image0144_5F00_77B6ABEB.jpg"><img title="clip_image014[4]" style="border:0px currentcolor;display:inline;background-image:none;" border="0" alt="clip_image014[4]" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-29-55-metablogapi/2211.clip_5F00_image0144_5F00_thumb_5F00_212D7DDD.jpg" width="428" height="320"/></a></span><b style=""><span></span></b></p>
<p></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />Here&rsquo;s the <a rel="nofollow" target="_blank" href="http://lkjsdf.com/archive/figlogo/figlogo.zip">source and generates hex files</a>.</span></p>
<p class="MsoNormal" style="margin:0in 0in 10pt;line-height:13pt;list-style-type:disc;"><span style="font-size:11pt;"><br />Have fun!</span></p><div style="clear:both;"></div><img src="http://blogs.msdn.com/aggbug.aspx?PostID=10269418" width="1" height="1">
<p><a href="http://feedads.g.doubleclick.net/~a/8_akhm7t0OSR35ARDWa3kdIbpKY/0/da"><img src="http://feedads.g.doubleclick.net/~a/8_akhm7t0OSR35ARDWa3kdIbpKY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8_akhm7t0OSR35ARDWa3kdIbpKY/1/da"><img src="http://feedads.g.doubleclick.net/~a/8_akhm7t0OSR35ARDWa3kdIbpKY/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qyo_WR0D68Y:VANtuiUoDQI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qyo_WR0D68Y:VANtuiUoDQI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qyo_WR0D68Y:VANtuiUoDQI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qyo_WR0D68Y:VANtuiUoDQI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qyo_WR0D68Y:VANtuiUoDQI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qyo_WR0D68Y:VANtuiUoDQI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qyo_WR0D68Y:VANtuiUoDQI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/qyo_WR0D68Y" height="1" width="1"/>]]></content:encoded>
      </item>
      <item>
         <title>Next Seattle F# Meetup, Tuesday Feb 21, 2012</title>
         <link>http://blogs.msdn.com/b/dsyme/archive/2012/02/16/next-seattle-f-meetup-tuesday-feb-21-2012.aspx</link>
         <description>&lt;h3 class="post-title entry-title"&gt;Seattle F# user group meeting Feb 21, 2012&lt;/h3&gt;
&lt;div class="post-header"&gt;
&lt;div class="post-header-line-1"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id="post-body-6924536954183036480" class="post-body entry-content"&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;Tuesday, February 21, 2012, 6:00 PM. &lt;a rel="nofollow" title="Lat: 47.641712 / Lon: -122.140670" target="_blank" href="http://maps.google.com/maps?q=@47.641712,-122.140670"&gt;Microsoft Building 99&lt;/a&gt;, Room 1919-C, &lt;span&gt;Redmond&lt;/span&gt;, &lt;span&gt;WA&lt;/span&gt; &lt;span class="event-map-link"&gt;(&lt;a rel="nofollow" target="_blank" href="http://maps.google.com/maps?q=@47.641712,-122.140670"&gt;map&lt;/a&gt;) &lt;/span&gt;&lt;span&gt;47.641712&lt;/span&gt; &lt;span&gt;-122.140670&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&lt;br /&gt;As&amp;nbsp;with the previous meetup, we have two sessions + one tiny program contest:&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&lt;strong&gt;Ryan Riley&amp;nbsp; (F# MVP) &lt;/strong&gt;&lt;strong&gt;: Web Apps and APIs with F# &lt;/strong&gt;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;Most .NET web applications today use &lt;a rel="nofollow" style="color:#3987cb;text-decoration:none;cursor:pointer;" target="_blank" href="http://asp.net/"&gt;ASP.NET&lt;/a&gt; WebForms or MVC. However,&amp;nbsp;several F# libraries offer new ways to build web APIs and applications help&amp;nbsp;reduce code and offer better abstractions, especially for single-page applications (SPA). We'll start with an existing web application written in C# using both WebForms and MVC and transition first to a F# application that follows the same patterns, then transition again to using several tools that expose the additional power offered by F#.&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&lt;br /&gt;&lt;strong&gt;F# team member Jack Hu (MSFT)&lt;/strong&gt;&lt;strong&gt;: F#, The American Dream&lt;/strong&gt;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;Since F# became a first-class programming language in Visual Studio 2010, it has been gaining popularity among the financial and scientific communities. In this talk, we will showcase several F# applications in the context of financial investments. We will highlight F#'s value propositions, through the themes of simplicity, powerfulness and programmer satisfaction. We'll also take a look at current industry adoptions, who uses F# and what they gain from it. The majority of the talk will be slightly technical and look at some of innovative aspects of F# 3.0 that help to simplify programming and achieve great results ' F# 3.0 typeProvider ' F# 3.0 Query ' FsharpChart ' .Net Integration ' Async programming ' Units of measure ' TryFsharp.net&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&lt;strong&gt;F# programming contest&lt;/strong&gt;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;question will be disclosed at end of the meeting and winner will be announced at the next meeting.&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;Special thanks to &lt;strong&gt;Chris Brockett&lt;/strong&gt; from MSR for reserving a nice place for this meeting!&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="padding:0px;color:#272727;line-height:18px;font-family:verdana, arial, sans-serif;font-size:14px;margin-bottom:0.7em;background-color:#e6e6e6;"&gt;&lt;strong&gt;MSR (Microsoft building 99, room 1919-C)&lt;/strong&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10268573" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XjwqJ_pUzxjNb4zBjZ0wZ99V6zE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XjwqJ_pUzxjNb4zBjZ0wZ99V6zE/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/XjwqJ_pUzxjNb4zBjZ0wZ99V6zE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XjwqJ_pUzxjNb4zBjZ0wZ99V6zE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=vdUASi6I97c:7-Bv7INwaJc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=vdUASi6I97c:7-Bv7INwaJc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=vdUASi6I97c:7-Bv7INwaJc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=vdUASi6I97c:7-Bv7INwaJc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=vdUASi6I97c:7-Bv7INwaJc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=vdUASi6I97c:7-Bv7INwaJc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=vdUASi6I97c:7-Bv7INwaJc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/vdUASi6I97c" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10268573</guid>
         <pubDate>Thu, 16 Feb 2012 11:58:41 +0000</pubDate>
      </item>
      <item>
         <title>Sphere packing in AutoCAD: creating an Apollonian packing using F#  Part 1</title>
         <link>http://feedproxy.google.com/~r/typepad/walmsleyk/through_the_interface/~3/zIJAMzdXZhA/sphere-packing-in-autocad-creating-an-apollonian-packing-using-f-part-1.html</link>
         <author>Kean Walmsley</author>
         <guid isPermaLink="false">tag:typepad.com,2003:post-6a00d83452464869e20168e769b23b970c</guid>
         <pubDate>Thu, 16 Feb 2012 05:24:00 +0000</pubDate>
      <description>&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/au-tsZmEoIG4yy86ni4hFNew5Qo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/au-tsZmEoIG4yy86ni4hFNew5Qo/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/au-tsZmEoIG4yy86ni4hFNew5Qo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/au-tsZmEoIG4yy86ni4hFNew5Qo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=-B5FS27coSs:9EaBzqlnHg8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=-B5FS27coSs:9EaBzqlnHg8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=-B5FS27coSs:9EaBzqlnHg8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=-B5FS27coSs:9EaBzqlnHg8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=-B5FS27coSs:9EaBzqlnHg8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=-B5FS27coSs:9EaBzqlnHg8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=-B5FS27coSs:9EaBzqlnHg8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/-B5FS27coSs" height="1" width="1"/&gt;</description></item>
      <item>
         <title>Units of measure for array indices</title>
         <link>http://sharp-gamedev.blogspot.com/2012/02/units-of-measure-for-array-indices.html</link>
         <description>In F#, arrays play an important part in &lt;a rel="nofollow" target="_blank" href="http://sharp-gamedev.blogspot.com/2010/03/thoughts-about-f-and-xbox-games.html"&gt;optimizing&lt;/a&gt; performance-critical parts of your code. This is especially true on Xbox 360, where arrays of value types can help avoid snags due to slow garbage collection.Unfortunately, index out-of-bound exceptions are common when working with arrays. This post shows a little trick to help detect cases where the wrong variable is used as the index.&lt;br/&gt;&lt;br/&gt;&lt;pre&gt;/// An array whose index has a unit of measure&lt;br /&gt;type MarkedArray&amp;lt;[&amp;lt;Measure&amp;gt;] 'K, 'T&amp;gt; = MarkedArray of 'T[]&lt;br /&gt;with&lt;br /&gt;    member this.Content =&lt;br /&gt;        let (MarkedArray arr) = this&lt;br /&gt;        arr&lt;br /&gt;&lt;br /&gt;    member this.First : int&amp;lt;'K&amp;gt; =&lt;br /&gt;        LanguagePrimitives.Int32WithMeasure 0&lt;br /&gt;&lt;br /&gt;    member this.Last : int&amp;lt;'K&amp;gt; =&lt;br /&gt;        let (MarkedArray arr) = this&lt;br /&gt;        LanguagePrimitives.Int32WithMeasure (arr.Length - 1)&lt;br /&gt;&lt;br /&gt;    member this.Item&lt;br /&gt;        with get (i : int&amp;lt;'K&amp;gt;) =&lt;br /&gt;            let (MarkedArray arr) = this&lt;br /&gt;            arr.[int i]&lt;br /&gt;        and set (i : int&amp;lt;'K&amp;gt;) (v : 'T) =&lt;br /&gt;            let (MarkedArray arr) = this&lt;br /&gt;            arr.[int i] &amp;lt;- v&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;The interesting bit lies in the definition of &lt;tt&gt;this.Item&lt;/tt&gt;. It allows to access the content of a MarkedArray using the usual array notation &lt;tt&gt;arr.[idx]&lt;/tt&gt;&lt;br/&gt;&lt;br/&gt;To illustrate how this is used, imagine you are making an Asteroids clone. You'll probably need arrays for the positions and velocities of the ships (assuming it's a multiplayer game), and similarly for the asteroids. Using units of measures as shown in the &lt;a rel="nofollow" target="_blank" href="http://sharp-gamedev.blogspot.com/2012/01/units-of-measure-to-rescue.html"&gt;previous post&lt;/a&gt; will help avoid mixing speeds and positions, but it's still possible to pick a position from the wrong array.&lt;br&gt;&lt;br&gt;This is the problem that &lt;tt&gt;MarkedArray&lt;/tt&gt; solves, see below.&lt;pre&gt;[&amp;lt;Measure&amp;gt;] type Ship&lt;br /&gt;[&amp;lt;Measure&amp;gt;] type Asteroid&lt;br /&gt;&lt;br /&gt;type State =&lt;br /&gt;  { shipPositions : MarkedArray&amp;lt;Ship, TypedVector3&amp;lt;m&amp;gt;&amp;gt;&lt;br /&gt;    shipVelocities : MarkedArray&amp;lt;Ship, TypedVector3&amp;lt;m/s&amp;gt;&amp;gt; &lt;br /&gt;    asteroidPositions : MarkedArray&amp;lt;Asteroid, TypedVector3&amp;lt;m&amp;gt;&amp;gt;&lt;br /&gt;    asteroidVelocities : MarkedArray&amp;lt;Asteroid, TypedVector3&amp;lt;m/s&amp;gt;&amp;gt; }&lt;br /&gt;&lt;br /&gt;let getShipPosition (state : State) (idx : int&amp;lt;Ship&amp;gt;) : TypedVector3&amp;lt;m&amp;gt; =&lt;br /&gt;  state.asteroidPositions.[idx] // Fails: idx has the wrong type, expected int&amp;lt;Asteroid&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;Note also that creating marked arrays isn't as tedious as one might fear, thanks to type inferrence&lt;br&gt;&lt;pre&gt;let state' = { state with shipPositions = state.shipPositions.Content |&amp;gt; Array.map f |&amp;gt; MarkedArray }&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;A small remark to finish off, this is how to iterate over all positions in a marked array, note the &lt;tt&gt;1&amp;lt;Ship&amp;gt;&lt;/tt&gt; increment:&lt;pre&gt;for idx in state.shipPositions.First .. 1&amp;lt;Ship&amp;gt; .. state.shipPositions.Last do&lt;br /&gt;  ...&lt;br /&gt;&lt;/pre&gt;By the way, both &lt;tt&gt;TypedVector3&lt;/tt&gt; and &lt;tt&gt;MarkedArray&lt;/tt&gt; are available in &lt;a rel="nofollow" target="_blank" href="https://bitbucket.org/johdex/xnautils/wiki/Home"&gt;XNAUtils&lt;/a&gt; on bitbucket.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3205414380859703216-569598453027798612?l=sharp-gamedev.blogspot.com' alt=''/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3SuQyouc2jq6OJK75IapcDfsgFQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3SuQyouc2jq6OJK75IapcDfsgFQ/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/3SuQyouc2jq6OJK75IapcDfsgFQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3SuQyouc2jq6OJK75IapcDfsgFQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=grrfCP6BuaM:gvCQtsTmNuo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=grrfCP6BuaM:gvCQtsTmNuo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=grrfCP6BuaM:gvCQtsTmNuo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=grrfCP6BuaM:gvCQtsTmNuo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=grrfCP6BuaM:gvCQtsTmNuo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=grrfCP6BuaM:gvCQtsTmNuo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=grrfCP6BuaM:gvCQtsTmNuo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/grrfCP6BuaM" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Joh.)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-3205414380859703216.post-569598453027798612</guid>
         <pubDate>Tue, 14 Feb 2012 18:21:00 +0000</pubDate>
      </item>
      <item>
         <title>Functional Programming eXchange 2012, March 16, 2012, London</title>
         <link>http://blogs.msdn.com/b/dsyme/archive/2012/02/14/functional-programming-exchange-2012-march-16-2012-london.aspx</link>
         <description>&lt;p&gt;The folks at SkillsMatter in London are hosting the &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012/ac-3551"&gt;Functional Programming eXchange 2012,&lt;/a&gt; on March 16, 2012, in London!&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;em&gt;Join the Functional Programming community for a one-day conference jam-packed with talks, open-space discussions and brainstorming. Learn and share the latest innovative ideas, best tools and practices in the different languages (scala, clojure, haskell, F#) and environments. Read the full programme and book tickets &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012/ac-3551"&gt;here.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;em&gt;&lt;b&gt;What:&lt;/b&gt; &lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012/ac-3551"&gt;Functional Programming eXchange 2012&lt;/a&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;b&gt;When:&lt;/b&gt; March 16th 2012, Breakfast and registration at 8.30&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;b&gt;Where:&lt;/b&gt; Skills Matter, 116-120 Goswell Road, London, EC1V 7DP&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;b&gt;Twitter:&lt;/b&gt; #functionalpx&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;b&gt;Program and tickets:&lt;/b&gt; &lt;a rel="nofollow" target="_blank" href="http://bit.ly/DSFunpx"&gt;http://bit.ly/DSFunpx&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;span style="font-family:'serif';font-size:12pt;"&gt;&lt;a rel="nofollow" target="_blank" href="http://skillsmatter.com/event/scala/functional-programming-exchange-2012/ac-3551"&gt;&lt;span style="color:blue;text-decoration:none;"&gt;&lt;img id="_x0000_i1025" border="0" src="http://skillsmatter.com/custom/images/functionalpx-300x250.png"/&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;Don&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10267648" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eUUpUJ_RfOFGtzSiBXm0Zl5P6M0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eUUpUJ_RfOFGtzSiBXm0Zl5P6M0/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/eUUpUJ_RfOFGtzSiBXm0Zl5P6M0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eUUpUJ_RfOFGtzSiBXm0Zl5P6M0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=4o6ee78GLAM:Ii3YAtoBsIc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=4o6ee78GLAM:Ii3YAtoBsIc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=4o6ee78GLAM:Ii3YAtoBsIc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=4o6ee78GLAM:Ii3YAtoBsIc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=4o6ee78GLAM:Ii3YAtoBsIc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=4o6ee78GLAM:Ii3YAtoBsIc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=4o6ee78GLAM:Ii3YAtoBsIc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/4o6ee78GLAM" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10267648</guid>
         <pubDate>Tue, 14 Feb 2012 10:52:42 +0000</pubDate>
      </item>
      <item>
         <title>TryJoinads (I.) - Asynchronous programming</title>
         <link>http://tomasp.net/blog/joinads-async-prog.aspx</link>
         <description>&lt;p&gt;Asynchronous workflows provide a way of writing code that does not block a thread
when waiting for a completion of long-running operation such as web service call,
another I/O operation or waiting for the completion of some background operation.
In this article, we look at the new expressive power that &lt;em&gt;joinads&lt;/em&gt; add to 
asynchronous workflows written using the &lt;code&gt;async { ... }&lt;/code&gt; block in F#.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; This blog post is a re-publication of a tutorial from the &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org"&gt;TryJoinads.org&lt;/a&gt;
web page. If you read the article there, you can run the examples interactively
and experiment with them: &lt;a rel="nofollow" target="_blank" href="http://tryjoinads.org/index.html?use/async.html"&gt;view the article on TryJoinads&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lQcuM8UoohWr8vrXJh54T_GJGgo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lQcuM8UoohWr8vrXJh54T_GJGgo/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/lQcuM8UoohWr8vrXJh54T_GJGgo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lQcuM8UoohWr8vrXJh54T_GJGgo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qEsMNsnDKpE:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qEsMNsnDKpE:Ro2eosQjYao:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qEsMNsnDKpE:Ro2eosQjYao:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qEsMNsnDKpE:Ro2eosQjYao:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qEsMNsnDKpE:Ro2eosQjYao:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=qEsMNsnDKpE:Ro2eosQjYao:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=qEsMNsnDKpE:Ro2eosQjYao:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/qEsMNsnDKpE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Mon, 13 Feb 2012 17:35:44 +0000</pubDate>
      </item>
      <item>
         <title>Introducing TryJoinads.org</title>
         <link>http://tomasp.net/blog/introducing-tryjoinads.aspx</link>
         <description>&lt;div class="rdecor" style="text-align:center;"&gt;
  &lt;a rel="nofollow" target="_blank" href="http://tomasp.net/articles/introducing-tryjoinads/screen.png"&gt;
    &lt;img src="http://tomasp.net/articles/introducing-tryjoinads/screen-sm.png" alt="TryJoinads.Org web site" style="border:none;"/&gt;
  &lt;/a&gt;&lt;br /&gt;
  &lt;small&gt;(&lt;a rel="nofollow" target="_blank" href="http://tomasp.net/articles/introducing-tryjoinads/screen.png"&gt;Click for a larger version&lt;/a&gt;)&lt;/small&gt;
&lt;/div&gt;

&lt;p&gt;If you have been following my blog, you've probably already heard of &lt;em&gt;joinads&lt;/em&gt;. It is
a research extension of F# computation expressions (or monads in Haskell). The extension
makes computation expressions more useful in domains like parallel, concurrent and reactive
programming. However, it can be used for any type of computation including, for example, parsers.
If you're interested in detailed description, you can find it in two academic papers that
I blogged about previously: &lt;a rel="nofollow" target="_blank" href="http://tomasp.net/blog/match-bang-paper.aspx"&gt;PADL 2011&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://tomasp.net/blog/docase-haskell.aspx"&gt;Haskell 2011&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The extension adds a keyword &lt;code&gt;match!&lt;/code&gt; - as the syntax suggests, it is akin to pattern
matching using &lt;code&gt;match&lt;/code&gt;, but instead of pattern matching on values, you can pattern match
on computations like &lt;code&gt;Async&amp;lt;'T&amp;gt;&lt;/code&gt; (or on other monadic values). Just like other features of
computation expressions, the &lt;code&gt;match!&lt;/code&gt; syntax is translated to applications of several
methods defined by the computation builder.&lt;/p&gt;

&lt;p&gt;I won't say more about joinads in this post, because you can now easily try joinads yourself...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8pUdUFy5mDeNsEQhNaXeB9yQH7k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8pUdUFy5mDeNsEQhNaXeB9yQH7k/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/8pUdUFy5mDeNsEQhNaXeB9yQH7k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8pUdUFy5mDeNsEQhNaXeB9yQH7k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=Pb3L9KGdB68:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=Pb3L9KGdB68:Ro2eosQjYao:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=Pb3L9KGdB68:Ro2eosQjYao:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=Pb3L9KGdB68:Ro2eosQjYao:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=Pb3L9KGdB68:Ro2eosQjYao:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_fsharp?a=Pb3L9KGdB68:Ro2eosQjYao:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_fsharp?i=Pb3L9KGdB68:Ro2eosQjYao:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_fsharp/~4/Pb3L9KGdB68" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Mon, 13 Feb 2012 16:21:03 +0000</pubDate>
      </item>
   </channel>
</rss><!-- fe2.pipes.ch1.yahoo.com uncompressed/chunked Sun Feb 26 22:07:10 UTC 2012 -->

