<?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>Jonathan Hardwick : .NET</title><link>http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx</link><description>Tags: .NET</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Why we've posted a beta refresh of System Center Capacity Planner</title><link>http://blogs.msdn.com/jonathanh/archive/2005/10/30/why-we-ve-posted-a-beta-refresh-of-system-center-capacity-planner.aspx</link><pubDate>Sun, 30 Oct 2005 19:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:487009</guid><dc:creator>jonathanh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/487009.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=487009</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=487009</wfw:comment><description>&lt;P&gt;A week ago we updated the &lt;A title="Download page for SCCP" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B68C06A5-8949-4A3F-9685-21228DBE8A0E&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B68C06A5-8949-4A3F-9685-21228DBE8A0E&amp;amp;displaylang=en"&gt;public beta&lt;/A&gt; of System Center Capacity Planner. This “beta refresh” of SCCP is now dependent on the release candidate of .NET Framework 2.0, instead of being dependent on their beta 2 release.&lt;/P&gt;
&lt;P&gt;Shipping this refresh took a lot of effort from the SCCP team, and causes extra confusion for our users. So why did we do it? The answer is that it’s the price of taking a dependence on .NET 2.0 when they were in the middle of their development cycle. Although their beta 2&amp;nbsp;had a “go live” license (i.e., they considered it good enough for production purposes), the .NET team still wanted to move their customers onto RC and RTM as soon as possible after they were released. So we agreed to replace our original SCCP beta – which &lt;EM&gt;requires&lt;/EM&gt; NET beta 2 – once they had RC bits to give us.&lt;/P&gt;
&lt;P&gt;That’s the downside, and it’s pretty much an inevitable one as soon as you take a dependency on any other team or feature: rule #1 for shipping software is to minimize the number of dependencies you take. The upside is that, by taking advantage of the new features in .NET 2.0, we’ve been able to ship better code, and do so more quickly. Overall, we think this is a net win. And we still love managed code :)&lt;/P&gt;
&lt;P&gt;Oh, and even though it was “just” a refresh, we managed to sneak in a few new features:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Improved support for modeling VPN connected users 
&lt;LI&gt;More granular control of Exchange transaction rates 
&lt;LI&gt;Optional exclusion of a redundant WAN link from load balancing 
&lt;LI&gt;Improved support for users in branch office 
&lt;LI&gt;Improvements to reporting 
&lt;LI&gt;Improvements to the Hardware Editor 
&lt;LI&gt;Improved online help 
&lt;LI&gt;Modifications to the user interface text &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If you have any questions, please post them here, or on the &lt;A title="SCCP Community Forums" href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=128" mce_href="http://forums.microsoft.com/msdn/ShowForum.aspx?ForumID=128"&gt;community forums&lt;/A&gt;, and we’ll do our best to answer them! &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487009" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/Capacity+Planning/default.aspx">Capacity Planning</category><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>A community-based marketing experiment - Microsoft gets on board the Cluetrain!</title><link>http://blogs.msdn.com/jonathanh/archive/2005/08/08/a-community-based-marketing-experiment-microsoft-gets-on-board-the-cluetrain.aspx</link><pubDate>Mon, 08 Aug 2005 18:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:448999</guid><dc:creator>jonathanh</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/448999.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=448999</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=448999</wfw:comment><description>&lt;IMG height=251 hspace=5 src="http://jonathanh.members.winisp.net/images/cluetrain.jpg" width=181 align=right vspace=5 mce_src="http://jonathanh.members.winisp.net/images/cluetrain.jpg"&gt;The Visual Studio 2005 evangelists have created a new community marketing experiment: &lt;A title="A community-based marketing experiment" href="http://channel9.msdn.com/wiki/default.aspx/VSValue.homepage" mce_href="http://channel9.msdn.com/wiki/default.aspx/VSValue.homepage"&gt;High Five Wikisheets&lt;/A&gt;. Microsoft marketing has taken some flak in the past (ahem), but this wiki seems to be pure &lt;A title="the cluetrain manifesto" href="http://www.cluetrain.com/" mce_href="http://www.cluetrain.com/"&gt;Cluetrain Manifesto&lt;/A&gt; material. Risky, radical, and &lt;EM&gt;all about the conversation&lt;/EM&gt;. I love it :) 
&lt;P&gt;I first heard about the idea a couple of weeks ago, when I was looped into a discussion between &lt;A title="Value of Visual Studio 2005" href="http://blogs.msdn.com/cneable/archive/2005/08/05/448270.aspx" mce_href="http://blogs.msdn.com/cneable/archive/2005/08/05/448270.aspx"&gt;Craig Neable&lt;/A&gt; and the Channel 9 team. Craig and his boss Carter Maslan work every day with developers who are trying to sell their bosses on the benefits of .NET. I figure this normally means a lot of “push” marketing – preparing datasheets and case studies and competitive analyses. Then Carter had the slightly-crazy idea that &lt;EM&gt;the developers themselves&lt;/EM&gt; know why they want Visual Studio 2005, so why not give them the floor? Or, &lt;A title="What's a High Five WikiSheet?" href="http://blogs.msdn.com/jcmaslan/archive/2005/08/05/448301.aspx" mce_href="http://blogs.msdn.com/jcmaslan/archive/2005/08/05/448301.aspx"&gt;in his own words&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;Nowadays, some of the best “Marketing” is happening in a &lt;A title="the cluetrain manifesto" href="http://www.cluetrain.com/book/index.html" mce_href="http://www.cluetrain.com/book/index.html"&gt;Cluetrain Manifesto&lt;/A&gt; style expository conversation taking place at scale in community blogs – 1000s of them. The problem is blogs stink at synthesizing and summarizing those conversations at any given moment. Where can I go for a synopsis of the top reasons to move to VS 2005? Does that synopsis reflect the breadth and depth of the community’s actual project experience How could Marketing datasheets become succinct and accurate reflections of the real-life project experiences of the community?&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Craig bounced a few namespace ideas off me, some of which I teased him for unmercifully (sorry Craig!), and then we got down to playing with prototypes. To kick things off, Craig and Carter have added the reasons &lt;EM&gt;they&lt;/EM&gt; think companies will love Visual Studio 2005, but now the &lt;A title="A community-based marketing experiment" href="http://channel9.msdn.com/wiki/default.aspx/VSValue.homepage" mce_href="http://channel9.msdn.com/wiki/default.aspx/VSValue.homepage"&gt;High Five Wikisheets&lt;/A&gt; are open to developers everywhere. Got a great reason that convinced your boss to switch? They want to hear it. Convinced that Visual Studio 2005 adds no value? They want to hear that too. Spotted a connection between two different scenarios? Refactor the wiki — or just &lt;A title="Visual Studio WikiSheets" href="http://channel9.msdn.com/ShowPost.aspx?PostID=96811" mce_href="http://channel9.msdn.com/ShowPost.aspx?PostID=96811"&gt;join in the conversation&lt;/A&gt; on Channel 9!&lt;/P&gt;
&lt;P&gt;Now, I wonder what &lt;A title="New PR Choices" href="http://ricksegal.typepad.com/pmv/2005/07/new_pr_choices.html" mce_href="http://ricksegal.typepad.com/pmv/2005/07/new_pr_choices.html"&gt;Rick Segal&lt;/A&gt; and &lt;A title="The magic word" href="http://sethgodin.typepad.com/seths_blog/2005/07/the_magic_word.html" mce_href="http://sethgodin.typepad.com/seths_blog/2005/07/the_magic_word.html"&gt;Seth Godin&lt;/A&gt; think?&lt;/P&gt;
&lt;P align=right&gt;Technorati tags: &lt;A href="http://technorati.com/tags/Cluetrain" rel=tag mce_href="http://technorati.com/tags/Cluetrain"&gt;Cluetrain&lt;/A&gt;, &lt;A href="http://technorati.com/tag/Marketing" rel=tag mce_href="http://technorati.com/tag/Marketing"&gt;Marketing&lt;/A&gt;, &lt;A href="http://technorati.com/tag/Microsoft" rel=tag mce_href="http://technorati.com/tag/Microsoft"&gt;Microsoft&lt;/A&gt;, &lt;A href="http://technorati.com/tag/Wikis" rel=tag mce_href="http://technorati.com/tag/Wikis"&gt;Wikis&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=448999" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/Rants+and+Raves/default.aspx">Rants and Raves</category><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>A good week for new .NET programming languages</title><link>http://blogs.msdn.com/jonathanh/archive/2005/06/15/a-good-week-for-new-net-programming-languages.aspx</link><pubDate>Thu, 16 Jun 2005 08:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:429671</guid><dc:creator>jonathanh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/429671.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=429671</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=429671</wfw:comment><description>&lt;P&gt;IronPython is a .NET implementation of Python, written by &lt;A title="Jim Hugunin's WebLog" href="http://blogs.msdn.com/hugunin/" mce_href="http://blogs.msdn.com/hugunin/"&gt;Jim Hugunin&lt;/A&gt;. It’s now reached v0.7.6, and has been &lt;A title="IronPython 0.7.6" href="http://www.microsoft.com/downloads/details.aspx?familyid=de819b1c-d3d9-4d14-a5d1-7206769a7178&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=de819b1c-d3d9-4d14-a5d1-7206769a7178&amp;amp;displaylang=en"&gt;released on microsoft.com&lt;/A&gt; (via &lt;A title="The Daily Grind blog" href="http://www.larkware.com/dg3/TheDailyGrind645.html" mce_href="http://www.larkware.com/dg3/TheDailyGrind645.html"&gt;Mike Gunderloy&lt;/A&gt;). What’s really impressive is that &lt;A title="IronPython for .NET released - and it's faster than Python-2.3" href="http://blogs.msdn.com/jonathanh/archive/2004/07/29/200915.aspx" mce_href="http://blogs.msdn.com/jonathanh/archive/2004/07/29/200915.aspx"&gt;IronPython is faster than Python 2.3&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;F# is a .NET implementation of an ML-family language, written by &lt;A title="Don Syme's WebLog on F# and Other Research Projects" href="http://blogs.msdn.com/dsyme/" mce_href="http://blogs.msdn.com/dsyme/"&gt;Don Syme&lt;/A&gt;. Don describes the goals of F# in &lt;A title="Experimenting with F#" href="http://msdn.microsoft.com/msdnmag/issues/05/07/EndBracket/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/05/07/EndBracket/default.aspx"&gt;the latest EndBracket column&lt;/A&gt; for MSDN Magazine:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;&lt;EM&gt;After five years of guiding generics for the Microsoft .NET Framework into Visual Studio 2005, I've turned my attention to attempting to achieve a synthesis between type-safe, scalable, math-oriented scripting and programming for .NET. I believe the industry needs to do more for scientists and mathematicians, where the demand for this kind of language is great.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And no, he’s not kidding when he said that it’s taken him five years to see generics through from &lt;A title="Design and Implementation of Generics for the .NET Common Language Runtime" href="http://research.microsoft.com/projects/clrgen/generics.pdf" mce_href="http://research.microsoft.com/projects/clrgen/generics.pdf"&gt;the first academic paper&lt;/A&gt; to their industry-wide acceptance in .NET 2.0. I can understand why he now wants to do something smaller! You can grab the latest version of F# from &lt;A title="Microsoft Research - Downloads" href="http://research.microsoft.com/research/downloads" mce_href="http://research.microsoft.com/research/downloads"&gt;http://research.microsoft.com/research/downloads&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG height=187 alt="Relative Performance of Invocation Mechanisms" src="http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/fig02.gif" width=286 align=right mce_src="http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/fig02.gif"&gt;This month’s MSDN magazine also has a great article by &lt;A title="Joel Pobar's CLR weblog" href="http://blogs.msdn.com/joelpob/" mce_href="http://blogs.msdn.com/joelpob/"&gt;Joel Pobar&lt;/A&gt; on &lt;A title="Dodge Common Performance Pitfalls to Craft Speedy Applications" href="http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/default.aspx"&gt;the cost of reflection&lt;/A&gt; in .NET languages. Or at least, it’s great if you worry about things like the performance implications of late-binding vs. early-binding, and whether you’re getting the best benefit out of the MemberInfo cache. If you’re that kind of low-level performance-frobbing bit-twiddling freak, you’ll &lt;EM&gt;love &lt;/EM&gt;this article&amp;nbsp;:) (via &lt;A title="Great Reflection Article posted to MSDN Mag site" href="http://blogs.msdn.com/brada/archive/2005/06/15/429206.aspx" mce_href="http://blogs.msdn.com/brada/archive/2005/06/15/429206.aspx"&gt;Brad Abrams&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Finally, here’s some IronPython and F# to whet your appetites. IronPython first (from &lt;A title="IronPython Pre-Alpha Released" href="http://www.theserverside.net/news/thread.tss?thread_id=34575" mce_href="http://www.theserverside.net/news/thread.tss?thread_id=34575"&gt;TheServerSide.NET&lt;/A&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;import sys&lt;BR&gt;sys.LoadAssemblyByName("System.Drawing")&lt;BR&gt;sys.LoadAssemblyByName("System.Windows.Forms")&lt;BR&gt;&lt;BR&gt;from System.Windows.Forms import *&lt;BR&gt;from System.Drawing import *&lt;BR&gt;&lt;BR&gt;f = Form(Text="Windows fun with IronPython", HelpButton=True,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MinimizeBox=False, MaximizeBox=False)&lt;BR&gt;&lt;BR&gt;f.FormBorderStyle = FormBorderStyle.FixedDialog&lt;BR&gt;f.StartPosition = FormStartPosition.CenterScreen&lt;BR&gt;&lt;BR&gt;b1 = Button(Text="Say Something", Location=Point(30,30), Size=Size(200,30))&lt;BR&gt;&lt;BR&gt;def push(data, event):&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l = Label(Text="IronPython Lives!", ForeColor=Color.Red)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l.Location = Point(30, 50+f.Controls.Count*25)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f.Controls.Add(l)&lt;BR&gt;&lt;BR&gt;b1.Click += push&lt;BR&gt;&lt;BR&gt;f.Controls.Add(b1)&lt;BR&gt;f.ShowDialog() &lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;And here's some F# (from &lt;A href="http://msdn.microsoft.com/msdnmag/issues/05/07/EndBracket/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/05/07/EndBracket/default.aspx"&gt;Don's article&lt;/A&gt;):&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE&gt;let DistanceFromAverage (a,b,c) =&lt;BR&gt;let avg = (a+b+c) / 3.0 in&lt;BR&gt;let diff(x) = (avg - x)*(avg - x) in&lt;BR&gt;Math.Sqrt(diff(a) + diff(b) + diff(c))&lt;BR&gt;&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=429671" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Optimizing managed C# vs. native C++ code</title><link>http://blogs.msdn.com/jonathanh/archive/2005/05/20/optimizing-managed-c-vs-native-c-code.aspx</link><pubDate>Sat, 21 May 2005 05:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:420634</guid><dc:creator>jonathanh</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/420634.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=420634</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=420634</wfw:comment><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/oldnewthing/" mce_href="http://blogs.msdn.com/oldnewthing/"&gt;Raymond Chen&lt;/A&gt; (aka "fixed more Windows bugs than you've had hot dinners") and &lt;A href="http://blogs.msdn.com/ricom/" mce_href="http://blogs.msdn.com/ricom/"&gt;Rico Mariani&lt;/A&gt; (aka "Mr .NET Performance") have been running a great series of articles where they write and then optimize the same application in two different languages: native C++ and managed C#. The easiest starting point for the two sets of articles is "&lt;A href="http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx" mce_href="http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx"&gt;Performance Quiz #6 -- Chinese/English Dictionary reader&lt;/A&gt;".&lt;/P&gt;
&lt;P&gt;There's a lot of good information in both the articles and the reader comments, and if you've got the time they're well worth studying for hints on how to write and benchmark high-performance code. The &lt;A href="http://blogs.msdn.com/ricom/archive/2005/05/19/420158.aspx" mce_href="http://blogs.msdn.com/ricom/archive/2005/05/19/420158.aspx"&gt;summary&lt;/A&gt; is a compelling argument for .NET:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A line-for-line translation of the original C++ code into C# ran 10 times faster than the C++ code. 
&lt;LI&gt;It took five different optimizations (one of which introduced a bug) for the C++ code to match the speed of the unaltered C# code. 
&lt;LI&gt;After Raymond's sixth optimization, his C++ code finally beat the C# code — because the runtime got down to where the 60ms startup overhead of the CLR made a difference! 
&lt;LI&gt;To accomplish this, Raymond had to: 
&lt;UL&gt;
&lt;LI&gt;Write his own file/io stuff 
&lt;LI&gt;Write his own string class 
&lt;LI&gt;Write his own allocator 
&lt;LI&gt;Write his own international mapping&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So yes, C++ code &lt;EM&gt;can&lt;/EM&gt; be faster than C# code — but when you look at all the work Raymond had to go through to achieve that, you have to ask yourself "is it worth it?"&lt;/P&gt;
&lt;P&gt;Edit: Jeff Atwood has posted a graph &lt;A href="http://www.codinghorror.com/blog/archives/000299.html" mce_href="http://www.codinghorror.com/blog/archives/000299.html"&gt;illustrating the diminishing returns&lt;/A&gt; of Raymond's optimization efforts.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=420634" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>For all you .NET language developers - Don Syme has started an F# blog</title><link>http://blogs.msdn.com/jonathanh/archive/2005/01/05/for-all-you-net-language-developers-don-syme-has-started-an-f-blog.aspx</link><pubDate>Wed, 05 Jan 2005 21:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:346980</guid><dc:creator>jonathanh</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/346980.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=346980</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=346980</wfw:comment><description>&lt;P&gt;Back when I worked at Microsoft Research in England, &lt;A href="http://research.microsoft.com/~dsyme/" mce_href="http://research.microsoft.com/~dsyme/"&gt;Don Syme&lt;/A&gt; already had his hands deep in the guts of .NET – he co-authored the &lt;A href="http://research.microsoft.com/projects/clrgen/generics.pdf" mce_href="http://research.microsoft.com/projects/clrgen/generics.pdf"&gt;original paper on generics for C#&lt;/A&gt;, and fought long and hard to get them accepted into v2.0 of the language. That’s no mean feat when you’re in a lab eight time zones away from the people you have to persuade to adopt your work!&lt;/P&gt;
&lt;P&gt;He&amp;nbsp;then went one better and built F#, a .&lt;A href="http://research.microsoft.com/projects/ilx/fsharp.aspx" mce_href="http://research.microsoft.com/projects/ilx/fsharp.aspx"&gt;NET implemention of the functional programming language ML&lt;/A&gt;. The key advance of F# is that it is completely interoperable with other languages – you can write modules in F# and call them from any other .NET language. Now programmers can use functional languages for the core algorithmic problem areas where they really shine, and stick to imperative languages for the uglier bits. &lt;/P&gt;
&lt;P&gt;F# has been gradually building steam since then, adding the supporting infrastructure that you’d expect from a .NET language (Visual Studio authoring package, ASP.NET compatibility, …) and the cool features you’d expect from a programming language researcher (dynamic type test patterns, mutually dependent reactive values, …). Now it seems ready to take center-stage: Don has started a &lt;A href="http://blogs.msdn.com/dsyme" mce_href="http://blogs.msdn.com/dsyme"&gt;blog about F#&lt;/A&gt;, and his first post announces the &lt;A href="http://blogs.msdn.com/dsyme/archive/2005/01/05/346857.aspx" mce_href="http://blogs.msdn.com/dsyme/archive/2005/01/05/346857.aspx"&gt;preview release of F# version 1.0&lt;/A&gt;. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=346980" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>FlexWiki released to the world!</title><link>http://blogs.msdn.com/jonathanh/archive/2004/09/27/235054.aspx</link><pubDate>Tue, 28 Sep 2004 05:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:235054</guid><dc:creator>jonathanh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/235054.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=235054</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=235054</wfw:comment><description>&lt;p&gt;If you're looking for a great Wiki implementation for ASP.NET, with a good user base and a whole lot of neat features to build on, look no more. David Ornstein has jumped through all the legal hoops, dotted all the i's, crossed all the t's, and has finally been allowed to release &lt;a href="http://weblogs.asp.net/dornstein/archive/2004/09/27/235042.aspx"&gt;his FlexWiki software as shared source&lt;/a&gt;. This joins the previous &lt;a href="http://sourceforge.net/projects/wix/"&gt;WiX&lt;/a&gt; and &lt;a href="http://sourceforge.net/projects/wtl/"&gt;WTL&lt;/a&gt; projects that have moved from Microsoft to SourceForge, for all you journalists keeping track :-)&lt;/p&gt;&lt;p&gt;I've been a happy user of David's previous versions of FlexWiki, both &lt;a href="http://blogs.msdn.com/jonathanh/archive/2004/06/14/155807.aspx"&gt;internally&lt;/a&gt; and on &lt;a href="http://blogs.msdn.com/jonathanh/archive/2004/04/09/110595.aspx"&gt;Channel 9&lt;/a&gt;, and now there's even more cool features to look forward to - like WikiTalk:&lt;/p&gt;&lt;blockquote&gt;&lt;em&gt;WikiTalk enables content contributors to access .NET framework objects for dynamic content while working within the traditional Wiki environment and it allows .NET developers to easily expose rich dynamic functionality to writers of Wiki content&lt;/em&gt;&lt;/blockquote&gt;&lt;p&gt;Anyone who's remotely interested in wikis or collaborative software should check it out - or come back in a month or two after the community's had a chance to bash it around a bit and create even more wonderful things from it. Big, big thanks to David for hanging in there and making this happen!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=235054" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/Information+Tools/default.aspx">Information Tools</category><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Debugging SP2 on the Tablet PC - managed code, tabtip.exe, and procexp</title><link>http://blogs.msdn.com/jonathanh/archive/2004/08/29/222543.aspx</link><pubDate>Mon, 30 Aug 2004 09:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:222543</guid><dc:creator>jonathanh</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/222543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=222543</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=222543</wfw:comment><description>&lt;p&gt;If you've got a Tablet PC and you're running SP2 (and you should be!) you might have noticed a couple of processes hanging around called TabTip.exe and TCServer.exe. And right after noticing them, you probably wondered why they seemed to be taking up so much memory. &lt;/p&gt;&lt;p&gt;Luckily, &lt;a href="http://blogs.msdn.com/jonathanh/archive/2004/08/27/221699.aspx"&gt;autoruns&lt;/a&gt; is not the only cool tool from those fine folks at &lt;a href="http://www.sysinternals.com/"&gt;Sysinternals&lt;/a&gt;. They've also produced the must-have &lt;a href="http://www.sysinternals.com/ntw2k/freeware/procexp.shtml"&gt;procexp&lt;/a&gt;: it's a better task manager than Task Manager, and is great for these kinds of "what the heck is that process doing" moments. In particular, you can tell procexp to use highlighting to call attention to services, jobs, your own processes, or (as in this case) .NET processes:&lt;/p&gt;&lt;p&gt;&lt;img height="206" alt="procexp - process view" hspace="0" src="http://jonathanh.members.winisp.net/images/tabtip_2Dprocview.png" width="386" align="baseline" border="0"&gt;&lt;/p&gt;&lt;p&gt;Yup, that's right, TCServer and TabTip are both written in managed code - after all, the Tablet PC edition of Windows XP was the first to ship with the .NET CLR, so why not use it? :-) Now we can use another neat feature of procexp: right-click on the TabTip process, bring up its property window, and scroll across to the .NET tab. Managed processes define many counters to keep track of their own performance, and procexp lets you see them all. Here are some of the .&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfmemoryperformancecounters.asp"&gt;NET memory counters&lt;/a&gt; for that process:&lt;/p&gt;&lt;p&gt;&lt;img height="309" alt="procexp - .NET view" hspace="0" src="http://jonathanh.members.winisp.net/images/tabtip_2Dheapsize.png" width="293" align="baseline" border="0"&gt;&lt;/p&gt;&lt;p&gt;Now we can see why TabTip seems to be taking up so much memory: even though it's got just 0.5 MB of heap data and 1.5 MB of total data, the CLR has reserved 32 MB of virtual memory for it, "just in case". For users accustomed to unmanaged apps that do their own memory management, this "greedy" memory behavior of the CLR can come as a surprise, but for garbage-collected applications it makes sense. After all, if the machine has sufficient memory, why bother spending the time to collect objects that are no longer used?&lt;/p&gt;&lt;p&gt;As the Windows world moves towards .NET, we'll probably have to spend a lot more time explaining this to customers. In the meantime, &lt;a href="http://www.sysinternals.com/ntw2k/freeware/procexp.shtml"&gt;procexp&lt;/a&gt; is a great tool for looking into the guts of your .NET applications.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: AT caught a mistake, now fixed. Also, this diagram from &lt;a href="http://blogs.msdn.com/ricom"&gt;Rico Mariani's&lt;/a&gt; excellent introductory article on "&lt;A href="http://msdn.microsoft.com/library/default.asp?url=" dotnetgcbasics.asp?? html dndotnet en-us library&gt;Garbage Collector Basics and Performance Hints&lt;/A&gt;" shows the difference between allocated, committed, and reserved space very nicely:&lt;/p&gt;&lt;p&gt;&lt;img height="311" alt=".net heaps" src="http://jonathanh.members.winisp.net/images/dotnetgcbasics.gif" width="408" align="baseline" border="0"&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=222543" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/Tablet+PC/default.aspx">Tablet PC</category><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Welcome to Jim Hugunin!</title><link>http://blogs.msdn.com/jonathanh/archive/2004/08/14/214538.aspx</link><pubDate>Sat, 14 Aug 2004 08:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:214538</guid><dc:creator>jonathanh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/214538.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=214538</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=214538</wfw:comment><description>Jim Hugunin of &lt;A href="http://blogs.msdn.com/jonathanh/archive/2004/07/29/200915.aspx"&gt;IronPython fame&lt;/a&gt; (and new Microsoft employee) now has a home on blogs.msdn.com. Check out his first post on &lt;A href="http://blogs.msdn.com/hugunin/archive/2004/08/13/214410.aspx"&gt;Dynamic Languages and the Common Language Runtime&lt;/a&gt;. Welcome to the community, Jim! &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=214538" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Preview release of Wintellect's PowerCollections for .NET</title><link>http://blogs.msdn.com/jonathanh/archive/2004/08/05/209110.aspx</link><pubDate>Thu, 05 Aug 2004 17:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:209110</guid><dc:creator>jonathanh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/209110.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=209110</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=209110</wfw:comment><description>&lt;P&gt;Good news in my inbox from the folks at Wintellect:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;This month, Wintellect announces the availability of a preview release of its new open source collection class library for .NET 2.0 called &lt;/EM&gt;&lt;A title=http://www.wintellect.com/powercollections href="http://www.wintellect.com/powercollections"&gt;&lt;EM&gt;Power Collections&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; .NET.&lt;BR&gt;...&lt;BR&gt;Wintellect and Microsoft are co-sponsoring the development effort but ultimately the code will belong to the development community. We urge developers to input their ideas, suggestions and review the classes as they are made available.&lt;BR&gt;...&lt;BR&gt;Of course, the big advantage of .NET 2.0 collections is that they will be type safe and avoid boxing via the use of generics. We&amp;#8217;re not going to re-implement collections provided in the Base Class Library (known as the BCL). Anything beyond the BCL that will be readily required (or that the community can make a good argument for), we are going to implement in Power Collections. A starting set will be ordered and unordered Set, Bag, Dictionary (unique and duplicate keyed versions), Double-ended Queue, and Priority Queue. We&amp;#8217;ll be adding some utility types, like Pair and Triple and some built-in algorithms. You can review the current version of the specification at &lt;/EM&gt;&lt;A href="http://www.wintellect.com/powercollections/spec.aspx"&gt;&lt;EM&gt;http://www.wintellect.com/powercollections/spec.aspx&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;/A&gt;You can find out more about PowerCollections at &lt;A href="http://www.wintellect.com/weblogs/default.aspx?GroupID=2"&gt;Peter Golde's blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Update:&lt;/EM&gt; &lt;A href="http://blogs.msdn.com/brada/archive/2004/08/06/209862.aspx"&gt;Brad Abrams points to&lt;/A&gt; Peter Sestoft's &lt;A href="http://www.itu.dk/research/c5/"&gt;C5 project&lt;/A&gt;, which &amp;#8220;is much more complete and is a parallel library to System.Collections.Generic rather than &amp;#8230; a natural extension of the BCL library&amp;#8221;. Choices are good!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=209110" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item><item><title>IronPython for .NET released - and it's faster than Python-2.3</title><link>http://blogs.msdn.com/jonathanh/archive/2004/07/29/200915.aspx</link><pubDate>Thu, 29 Jul 2004 18:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:200915</guid><dc:creator>jonathanh</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jonathanh/comments/200915.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jonathanh/commentrss.aspx?PostID=200915</wfw:commentRss><wfw:comment>http://blogs.msdn.com/jonathanh/rsscomments.aspx?PostID=200915</wfw:comment><description>&lt;p&gt;Some very cool news from Jim Hugunin about IronPython, his port of Python to .NET:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;He's released it under the CPL &lt;li&gt;It's up to 1.7x &lt;em&gt;faster&lt;/em&gt; than Python-2.3 on the pystone benchmark &lt;li&gt;He's joining the Microsoft CLR team to push for more support for dynamic languages!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To quote the &lt;a href="http://ironpython.com/"&gt;IronPython web page&lt;/a&gt;: “&lt;em&gt;My plan was to do a little work and then write a short pithy article called "Why .NET is a terrible platform for dynamic languages". My plans changed when I found the CLR to be an excellent target for the highly dynamic Python language.”&lt;/em&gt;&lt;/p&gt;&lt;p&gt;(via &lt;a href="http://primates.ximian.com/~miguel/archive/2004/Jul-29.html"&gt;Miguel de Icaza &lt;/a&gt;and &lt;a href="http://blogs.msdn.com/frankpr/archive/2004/07/29/200685.aspx"&gt;Frank Prengel&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;em&gt;Updates:&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;From &lt;a href="http://usefulinc.com/edd/blog/2004/7/29#00:28"&gt;Edd Dumbill's blog&lt;/a&gt;: in Jim's talk he&amp;nbsp;showed that IronPython is 4% slower than Python-2.3 using the more realistic parrotbench benchmark.&lt;/li&gt;&lt;li&gt;The slides are now &lt;a href="http://conferences.oreillynet.com/presentations/os2004/hugunin_jim_up.ppt"&gt;online at oreillynet&lt;/a&gt;&amp;nbsp;with more performance figures - IronPython only loses out to Python 2.3 when throwing exceptions. The other good news is that Jim will keep developing it up to v1.0.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=200915" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jonathanh/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>