<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>basketweaving for the mind : ironpython</title><link>http://blogs.msdn.com/nickhodge/archive/tags/ironpython/default.aspx</link><description>Tags: ironpython</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Dynamic Language Runtime 0.9 and IronPython 2.0</title><link>http://blogs.msdn.com/nickhodge/archive/2008/12/16/dynamic-language-runtime-0-9-and-ironpython-2-0.aspx</link><pubDate>Tue, 16 Dec 2008 05:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9223261</guid><dc:creator>nhodge</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/nickhodge/comments/9223261.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nickhodge/commentrss.aspx?PostID=9223261</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nickhodge/rsscomments.aspx?PostID=9223261</wfw:comment><description>&lt;P&gt;Over on codeplex, the smart team behind the DLR (Dynamic Language Runtime) and IronPython have released code. IronPython 2.0 is built on top of the DLR. This means that IronPython can run in Silverlight. Which tickles me.&lt;/P&gt;
&lt;P&gt;&lt;A target=_blank href="http://www.codeplex.com/dlr" mce_href="http://www.codeplex.com/dlr"&gt;DLR 0.9&lt;/A&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;implements a language on .NET using the DLR &lt;/LI&gt;
&lt;LI&gt;adds dynamic features to their existing language like C#’s ‘dynamic’ (&lt;A href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=csharpfuture&amp;amp;DownloadId=3550" mce_href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=csharpfuture&amp;amp;DownloadId=3550"&gt;http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=csharpfuture&amp;amp;DownloadId=3550&lt;/A&gt; ) &lt;/LI&gt;
&lt;LI&gt;adds scripting to their applications. &lt;/LI&gt;
&lt;LI&gt;creatse .NET libraries with dynamic objects &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A target=_blank href="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=8365" mce_href="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=8365"&gt;IronPython 2.0&lt;/A&gt;:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;An MSI installer for Windows platforms which includes parts of the CPython 2.5 standard library &lt;/LI&gt;
&lt;LI&gt;IronPython assemblies targeting Silverlight and tools such as Chiron to improve the Silverlight dynamic development experience &lt;/LI&gt;
&lt;LI&gt;The addition of more C-based standard modules such as &lt;I&gt;cmath&lt;/I&gt; and &lt;I&gt;_winreg&lt;/I&gt; &lt;/LI&gt;
&lt;LI&gt;Significant improvements in importing compatibility and features &lt;/LI&gt;
&lt;LI&gt;Distribution of IronPython under the Microsoft Public License which has been approved by OSI &lt;/LI&gt;
&lt;LI&gt;Performance improvements.&amp;nbsp; On that note, a new Wiki page has been created for IronPython performance reports - see &lt;A href="http://www.codeplex.com/IronPython/Wiki/View.aspx?title=IronPython%20Performance" mce_href="http://www.codeplex.com/IronPython/Wiki/View.aspx?title=IronPython%20Performance"&gt;http://www.codeplex.com/IronPython/Wiki/View.aspx?title=IronPython%20Performance&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;Over 500 bugs have been closed in 2.0.&amp;nbsp; 453 of these were reported on CodePlex &lt;/LI&gt;
&lt;LI&gt;Support for precompilation of Python source files into a single dll&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9223261" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nickhodge/archive/tags/ironpython/default.aspx">ironpython</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/dlr/default.aspx">dlr</category></item><item><title>IronPython + F# + Parallel + Async = A Kittehz Brekfst</title><link>http://blogs.msdn.com/nickhodge/archive/2008/11/12/ironpython-f-parallel-async-a-kittehz-brekfst.aspx</link><pubDate>Wed, 12 Nov 2008 13:19:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9061908</guid><dc:creator>nhodge</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/nickhodge/comments/9061908.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nickhodge/commentrss.aspx?PostID=9061908</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nickhodge/rsscomments.aspx?PostID=9061908</wfw:comment><description>&lt;A href="http://icanhascheezburger.com/2008/11/05/funny-pictures-see-it-all-started-with-a-loose-thread-and-just-went-downhill-from-there/" mce_href="http://icanhascheezburger.com/2008/11/05/funny-pictures-see-it-all-started-with-a-loose-thread-and-just-went-downhill-from-there/"&gt;&lt;IMG class=mine_2180282 title=funny-pictures-cat-has-unraveled-all-your-thread alt="funny pictures of cats with captions" src="http://icanhascheezburger.wordpress.com/files/2008/11/funny-pictures-cat-has-unraveled-all-your-thread.jpg" width=350 height=467 mce_src="http://icanhascheezburger.wordpress.com/files/2008/11/funny-pictures-cat-has-unraveled-all-your-thread.jpg"&gt;&lt;/A&gt; &lt;BR&gt;more &lt;A href="http://icanhascheezburger.com/" mce_href="http://icanhascheezburger.com"&gt;animals&lt;/A&gt; 
&lt;P&gt;As per the image above, cats and threads do no mix. &lt;A href="http://www.voidspace.org.uk/python/weblog/arch_d7_2008_11_01.shtml#e1028" mce_href="http://www.voidspace.org.uk/python/weblog/arch_d7_2008_11_01.shtml#e1028"&gt;Python and threads may not mix, either&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Whilst thread-safety, dead-locks, queues and other nasties are nasty, Microsoft sees the world of &lt;EM&gt;n&lt;/EM&gt;-cores as a software problem to be solved, not ignored. Both at a low-level and a high-level, well constructed and debugged Parallel libraries are appearing to make the splitting of tasks easier.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.codeplex.com/IronPython" mce_href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/A&gt; implements the Python language on the DLR and subsequently on the CLR, but this does not automagically provide IronPython with threading and parallelism. Nor could I suggest that IronPython is the silver-bullet for clean parallelism with Python. Various projects such as &lt;A href="http://www.parallelpython.com/" mce_href="http://www.parallelpython.com/"&gt;ParallelPython&lt;/A&gt; (including cluster support), &lt;A href="http://www.stackless.com/" mce_href="http://www.stackless.com/"&gt;Stackless Python&lt;/A&gt; and the recent &lt;A href="http://docs.python.org/library/multiprocessing.html" mce_href="http://docs.python.org/library/multiprocessing.html"&gt;python-multiprocessing package&lt;/A&gt; are appearing to move CPython into today’s world of &lt;EM&gt;n&lt;/EM&gt;-cores.&lt;/P&gt;
&lt;P&gt;IronPython does have kissing-cousin languages like &lt;A href="http://research.microsoft.com/fsharp/fsharp.aspx" mce_href="http://research.microsoft.com/fsharp/fsharp.aspx"&gt;F#&lt;/A&gt;. From F#, and the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en"&gt;Microsoft Parallel Extensions Jun08 CTP&lt;/A&gt; – a parallel library is a .dll away. Step 1: create a .dll from &lt;A href="http://blogs.msdn.com/lucabol/archive/2008/11/03/my-f-pdc-presentation-is-online-ppt-and-demo-application.aspx" mce_href="http://blogs.msdn.com/lucabol/archive/2008/11/03/my-f-pdc-presentation-is-online-ppt-and-demo-application.aspx"&gt;Luca’s demonstration from PDC2008&lt;/A&gt; specifically the MathLibrary/StockAnalyzer. Combining both the async/parallel versions of the F# code with the single-threaded version was easy.&lt;/P&gt;
&lt;P&gt;From IronPython:&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   1:  &lt;/SPAN&gt;import clr&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   2:  &lt;/SPAN&gt;clr.AddReferenceToFile(&lt;SPAN class=str&gt;"MathLibrary.dll"&lt;/SPAN&gt;) &lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   3:  &lt;/SPAN&gt;import StockLibrary &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; StockLibrary&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   4:  &lt;/SPAN&gt;import sys, time&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   5:  &lt;/SPAN&gt;tickers = [&lt;SPAN class=str&gt;'msft'&lt;/SPAN&gt;,&lt;SPAN class=str&gt;'adbe'&lt;/SPAN&gt;,&lt;SPAN class=str&gt;'aapl'&lt;/SPAN&gt;,&lt;SPAN class=str&gt;'ebay'&lt;/SPAN&gt;]&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;Line 1 imports the CLR so your code can import a .NET DLL (clr.AddReferenceToFile). The namespace is StockLibrary. Now methods within this DLL can be called. The fifth line sets up the four test Nasdaq codes we are analyzing. &lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   6:  &lt;/SPAN&gt;analysersA = StockLibrary.StockAnalyzerParallel.GetAnalyzers (tickers, 365)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   7:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt;&amp;gt; starting async"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   8:  &lt;/SPAN&gt;start = time.clock()&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   9:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;for&lt;/SPAN&gt; a &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; analysersA:&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   10:  &lt;/SPAN&gt;    print a.Return&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   11:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt; seconds taken: "&lt;/SPAN&gt;, time.clock() - start&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   12:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt;&amp;gt; completed"&lt;BR&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=str&gt;&amp;nbsp;&lt;/PRE&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;The analysersA instantiates the async/parallel version of the F# methods. Here I have wrapped the code with a simple time.clock() timer&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   13:  &lt;/SPAN&gt;analysersP = StockLibrary.StockAnalyzer.GetAnalyzers (tickers, 365)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   14:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt;&amp;gt; starting normal"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   15:  &lt;/SPAN&gt;start = time.clock() # get current time &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; seconds&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   16:  &lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;for&lt;/SPAN&gt; a &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; analysersP:&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   17:  &lt;/SPAN&gt;    print a.Return&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   18:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt; seconds taken: "&lt;/SPAN&gt;, time.clock() - start&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=lnum&gt;   19:  &lt;/SPAN&gt;print &lt;SPAN class=str&gt;"&amp;gt;&amp;gt; completed"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;The analysersP (p for plain) uses the single-threaded version in the library.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Results&lt;/STRONG&gt;: &lt;/H3&gt;
&lt;P&gt;On &lt;A href="http://www.nickhodge.com/blog/general-melchett" mce_href="http://www.nickhodge.com/blog/general-melchett"&gt;General Melchett&lt;/A&gt;, my Intel Quadcore, I was able to execute the parallel version in 0.5s vs 11.0s in single-threaded mode. I suggest the 22x speed improvement comes from the Asyc calls to the network methods more than the calculations involved. More tests would be required to confirm the dramatic difference.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In my example I am treating the F# DLL as a simple &lt;A href="http://en.wikipedia.org/wiki/Black_box" mce_href="http://en.wikipedia.org/wiki/Black_box"&gt;black box&lt;/A&gt;: a list of parameters in and single results out. In the real-world, careful consideration would need to be taken on the immutability of any Python objects/variables passed in; and the resulting factoring of code in F# vs. IronPython.&lt;/P&gt;
&lt;P&gt;(this was a simple 1 minute demonstration at the Edge of the Web Conference in Perth expanded into a blog post) &lt;/P&gt;
&lt;H3&gt;For reference: My version of Luca’s F#: &lt;STRONG&gt;MathLibrary.fs&lt;/STRONG&gt;&lt;/H3&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;PRE class=csharpcode&gt;#light

&lt;SPAN class=rem&gt;// ASYNC version&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;// note: you need to ensure the project has a reference to FSharp.PowerPack to work&lt;/SPAN&gt;
&lt;SPAN class=rem&gt;// async is difficult, here we change 4 lines, add some curly braces and we have async+parallel&lt;/SPAN&gt;

open System.Net
open System.IO

let &lt;SPAN class=kwrd&gt;internal&lt;/SPAN&gt; loadPricesAsync ticker = async { &lt;SPAN class=rem&gt;// now returns async token&lt;/SPAN&gt;
    let url = &lt;SPAN class=str&gt;"http://ichart.finance.yahoo.com/table.csv?s="&lt;/SPAN&gt; + ticker + &lt;SPAN class=str&gt;"&amp;amp;d=10&amp;amp;e=3&amp;amp;f=2008&amp;amp;g=d&amp;amp;a=2&amp;amp;b=13&amp;amp;c=1986&amp;amp;ignore=.csv"&lt;/SPAN&gt;

    let req = WebRequest.Create(url)
    let! resp = req.AsyncGetResponse()                      &lt;SPAN class=rem&gt;// holds the thread waiting for the network, blocked: so parallelize + asynch&lt;/SPAN&gt;
    let stream = resp.GetResponseStream()
    let reader = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StreamReader(stream)
    let! csv = reader.AsyncReadToEnd()                      &lt;SPAN class=rem&gt;// holds the thread waiting for the network, blocked: so parallelize + asynch&lt;/SPAN&gt;

    let prices =                                        
        csv.Split([|&lt;SPAN class=str&gt;'\n'&lt;/SPAN&gt;|])                             
        |&amp;gt; Seq.skip 1
        |&amp;gt; Seq.map ( fun line -&amp;gt; line.Split([|&lt;SPAN class=str&gt;','&lt;/SPAN&gt;|]) )    
        |&amp;gt; Seq.filter (fun values -&amp;gt; values |&amp;gt; Seq.length = 7 ) 
        |&amp;gt; Seq.map (fun values -&amp;gt; 
            System.DateTime.Parse(values.[0]),              
            &lt;SPAN class=kwrd&gt;float&lt;/SPAN&gt; values.[6] )
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; prices
    }                                                       &lt;SPAN class=rem&gt;// added async to let, add a return, look at places for release control, add bang and call Async versions&lt;/SPAN&gt;
    
type StockAnalyzerParallel (lprices, days) =
    let prices =
        lprices
        |&amp;gt; Seq.map snd
        |&amp;gt; Seq.take days                                    &lt;SPAN class=rem&gt;// chop sequence to days&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; member GetAnalyzers (tickers, days) =
        tickers
        |&amp;gt; Seq.map loadPricesAsync
        |&amp;gt; Async.Parallel                                   &lt;SPAN class=rem&gt;// now that loadPrices returns async, parallelize and run; then map&lt;/SPAN&gt;
        |&amp;gt; Async.Run                                        &lt;SPAN class=rem&gt;// now run in parallel&lt;/SPAN&gt;
        |&amp;gt; Seq.map (fun prices -&amp;gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StockAnalyzerParallel (prices, days))
    member s.Return =
        let lastPrice = prices |&amp;gt; Seq.nth 0
        let startPrice = prices |&amp;gt; Seq.nth ( days - 1 )
        lastPrice / startPrice - 1.0
    member s.StdDev =
        let logRets =
            prices
            |&amp;gt; Seq.pairwise
            |&amp;gt; Seq.map ( fun (x, y) -&amp;gt; log (x / y))
        let mean = logRets |&amp;gt; Seq.average
        let sqr x = x * x
        let var = logRets |&amp;gt; Seq.average_by (fun r -&amp;gt; sqr (r - mean))
        sqrt var
        
        
        
let &lt;SPAN class=kwrd&gt;internal&lt;/SPAN&gt; loadPrices ticker =
    let url = &lt;SPAN class=str&gt;"http://ichart.finance.yahoo.com/table.csv?s="&lt;/SPAN&gt; + ticker + &lt;SPAN class=str&gt;"&amp;amp;d=10&amp;amp;e=3&amp;amp;f=2008&amp;amp;g=d&amp;amp;a=2&amp;amp;b=13&amp;amp;c=1986&amp;amp;ignore=.csv"&lt;/SPAN&gt;

    &lt;SPAN class=rem&gt;// code is identical to C# version as we are using underlying .Net libraries&lt;/SPAN&gt;
    let req = WebRequest.Create(url)
    let resp = req.GetResponse()
    let stream = resp.GetResponseStream()
    let reader = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StreamReader(stream)
    let csv = reader.ReadToEnd()

    let prices =                                        &lt;SPAN class=rem&gt;// returns a tuple based on comma&lt;/SPAN&gt;
        csv.Split([|&lt;SPAN class=str&gt;'\n'&lt;/SPAN&gt;|])                             &lt;SPAN class=rem&gt;//note [| syntax passes in .Net array to the string.Split method&lt;/SPAN&gt;
        |&amp;gt; Seq.skip 1
        |&amp;gt; Seq.map ( fun line -&amp;gt; line.Split([|&lt;SPAN class=str&gt;','&lt;/SPAN&gt;|]) )    &lt;SPAN class=rem&gt;// fun define anonymous function/lambda expression&lt;/SPAN&gt;
        |&amp;gt; Seq.filter (fun values -&amp;gt; values |&amp;gt; Seq.length = 7 )  &lt;SPAN class=rem&gt;// filter out where less than 7 values&lt;/SPAN&gt;
        |&amp;gt; Seq.map (fun values -&amp;gt; 
            System.DateTime.Parse(values.[0]),              &lt;SPAN class=rem&gt;// get the 0th and 6th column&lt;/SPAN&gt;
            &lt;SPAN class=kwrd&gt;float&lt;/SPAN&gt; values.[6] )
    prices
    
type StockAnalyzer (lprices, days) =
    let prices =
        lprices
        |&amp;gt; Seq.map snd
        |&amp;gt; Seq.take days &lt;SPAN class=rem&gt;// chop sequence to days&lt;/SPAN&gt;
    &lt;SPAN class=kwrd&gt;static&lt;/SPAN&gt; member GetAnalyzers (tickers, days) =
        tickers
        |&amp;gt; Seq.map loadPrices
        |&amp;gt; Seq.map (fun prices -&amp;gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StockAnalyzer (prices, days))
    member s.Return =
        let lastPrice = prices |&amp;gt; Seq.nth 0
        let startPrice = prices |&amp;gt; Seq.nth ( days - 1 )
        lastPrice / startPrice - 1.0
    member s.StdDev =
        let logRets =
            prices
            |&amp;gt; Seq.pairwise &lt;SPAN class=rem&gt;// sequence of things, first + second tuple; second + third etc&lt;/SPAN&gt;
            |&amp;gt; Seq.map ( fun (x, y) -&amp;gt; log (x / y))
        let mean = logRets |&amp;gt; Seq.average
        let sqr x = x * x
        let var = logRets |&amp;gt; Seq.average_by (fun r -&amp;gt; sqr (r - mean))
        sqrt var &lt;/PRE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9061908" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nickhodge/archive/tags/f_2300_/default.aspx">f#</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/ironpython/default.aspx">ironpython</category></item><item><title>Demos and Links from Edge of the Web, Nov’08 Perth</title><link>http://blogs.msdn.com/nickhodge/archive/2008/11/11/demos-and-links-from-edge-of-the-web-nov-08-perth.aspx</link><pubDate>Tue, 11 Nov 2008 06:08:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9059152</guid><dc:creator>nhodge</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/nickhodge/comments/9059152.aspx</comments><wfw:commentRss>http://blogs.msdn.com/nickhodge/commentrss.aspx?PostID=9059152</wfw:commentRss><wfw:comment>http://blogs.msdn.com/nickhodge/rsscomments.aspx?PostID=9059152</wfw:comment><description>&lt;p&gt;During the 50 minutes of presentation (including at least 9 &lt;a href="http://icanhascheezburger.com/"&gt;ICHC&lt;/a&gt; images), I demonstrated the following bits and pieces of open source and or free Microsoft bits.&lt;/p&gt;  &lt;h3&gt;Demo set 1: Web Standards&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.mesh.com/"&gt;Live Mesh Mobile&lt;/a&gt; : take photo to mesh on laptop &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;MacOS X 10.5 client available too [&lt;em&gt;not demo’d&lt;/em&gt;] &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://dev.live.com/"&gt;DataModelBrowser to apis.mesh.com&lt;/a&gt;; showing REST/JSON/APP [part of Live Framework SDK]&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/Oomph"&gt;Oomph: Microformats toolkit&lt;/a&gt; (source on codeplex.com) incorporating:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://get.live.com/writer/overview"&gt;LiveWriter&lt;/a&gt;; hCard plugin; publish; show IE plugin, same site with &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/2240?id=2240"&gt;Firefox Tail&lt;/a&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;h3&gt;Demo set 2: PHP, SQLServer 2008 &amp;amp; IIS7 &lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/nickhodge/archive/2008/08/19/in-which-i-get-my-own-iis7.aspx"&gt;IIS7/PHP; Modules mapping via FastCGI&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/web/channel/downloads/default.aspx"&gt;Microsoft Web Platform Installer and Web Application Installer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/SQL2K5PHP"&gt;MSSQLPHPDriver; show PHP + results; codeplex&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Demo set 3: IronPython&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/IronPython"&gt;IronPython&lt;/a&gt;; ipy hello world winforms &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Wiki/View.aspx?title=Dynamic%20Language%20Support"&gt;using as aspx as &amp;quot;code behind&amp;quot; and ASP.NET&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://research.microsoft.com/fsharp/fsharp.aspx"&gt;F#&lt;/a&gt; integration with via .NET compiled .dll&amp;#160; (calling from IronPython)&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Demo set 4: IronRuby&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.ironruby.net/"&gt;IronRuby&lt;/a&gt;; flickr.net example from &lt;a href="http://mschnlnine.vo.llnwd.net/d1/pdc08/WMV-HQ/TL44.wmv"&gt;John Lam’s PDC2008 session&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.jimmy.schementi.com/2008/08/walk-through-silverlight-flickr-client.html"&gt;Photoviewer&lt;/a&gt;; using local Chiron, browser, ruby in browser doing HTML/DOM &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Demo set 5: Silverlight&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Silverlight 2 tools for Visual Studio now support Visual Studio Express &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Silverlight 2 also supporting Eclipse (see, competition is a good thing) &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/Silverlight"&gt;Silverlight Toolkit&lt;/a&gt;, run from chrome-less Google Chrome (contains &lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode33MicrosoftOpenSourceInsideGoogleChrome.aspx"&gt;Microsoft Windows Template Lib&lt;/a&gt;)&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9059152" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/nickhodge/archive/tags/sqlserver/default.aspx">sqlserver</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/php/default.aspx">php</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/iis7/default.aspx">iis7</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/codeplex/default.aspx">codeplex</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/opensource/default.aspx">opensource</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/ruby/default.aspx">ruby</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/f_2300_/default.aspx">f#</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/microformats/default.aspx">microformats</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/ironruby/default.aspx">ironruby</category><category domain="http://blogs.msdn.com/nickhodge/archive/tags/ironpython/default.aspx">ironpython</category></item></channel></rss>