<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Coding</title>
        <link>http://edsid.com/blog/category/40.aspx</link>
        <description>Coding</description>
        <language>en-US</language>
        <copyright>Gerry Heidenreich</copyright>
        <managingEditor>grh@whdlaw.com</managingEditor>
        <generator>Subtext Version 1.9.5.177</generator>
        <item>
            <title>Depot, an exercise in Community-Sourcing</title>
            <link>http://edsid.com/blog/archive/2008/06/07/depot-an-exercise-in-community-sourcing.aspx</link>
            <description>&lt;p&gt;No downloads or pics, just a quick rundown of a very cool app idea while it's in my head.&lt;/p&gt;
&lt;p&gt;About a year and a half ago, I wrote a small winforms app.  It's stayed &lt;em&gt;very&lt;/em&gt; rough around the edges and hasn't gone anywhere from the original prototype.  This prototype (I called it &lt;em&gt;Depot&lt;/em&gt;) was written as a &lt;font color="#ff0000"&gt;proof-of-concept of the simplest possible &lt;/font&gt;&lt;a title="Community-Sourcing: The act of taking a task traditionally performed by individual members of the group,  and exposing it to a controlled, generally large group of people who share the same interest as the group, in the form of an open call." href="http://www.edsid.com/blog/archive/2008/04/02/community-sourcing.aspx"&gt;&lt;font color="#ff0000"&gt;community-sourced&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; bookmarking / tagging / searching tool that could possibly exist&lt;/font&gt;.  A self-organizing business-specific link / text library could provide immense value to a company.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Depot hinges on 4 basic features common with collaborative apps:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Producing&lt;/strong&gt;: Adding content in the form of URLS and/or text (2 different fields that can be used individually or combined)&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Tagging&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Searching &lt;/strong&gt;for any item by any combination of title words or tag&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Sharing&lt;/strong&gt;: All content is automatically shared, and open to edit &amp;amp; extend, by anyone within the network&lt;/p&gt;
&lt;p&gt;The search is an autocomplete textbox, that works with any combination of title words and tags.  Typing &lt;strong&gt;&lt;font color="#ff0000"&gt;'catering'&lt;/font&gt;&lt;/strong&gt; displays all catering items, but as you start to type &lt;strong&gt;&lt;font color="#ff0000"&gt;'catering madison'&lt;/font&gt;&lt;/strong&gt;, the suggestions filter appropriately.  As you would expect, changing the text over to &lt;strong&gt;&lt;font color="#ff0000"&gt;'thai madison'&lt;/font&gt;&lt;/strong&gt; updates to items tagged or titled with thai and madison.&lt;/p&gt;
&lt;p&gt;The url + text fields is an interesting feature - a user may want to toss in a quick note for a catering url someone else added, like "Beware the red curry!!!".&lt;/p&gt;
&lt;p&gt;The app seemed to work beautifully, but the algorithm is not built to scale up yet.  Everything is cached heavily on the client-side.  There are no concurrency checks.  Also, to be fit for production, it will need some kind of user-auditing, history, and probably some kind of browser integration (or at least bookmark / favorites sync).&lt;/p&gt;
&lt;p&gt;I don't know yet what will become of Depot.  I hope to find the time and motivation soon to dust it off and start polishing it up for a pilot group.  If nothing else, I got an ornery hog of a tag-search algorithm that may come in useful someday.&lt;/p&gt;&lt;img src="http://edsid.com/blog/aggbug/23312.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2008/06/07/depot-an-exercise-in-community-sourcing.aspx</guid>
            <pubDate>Sun, 08 Jun 2008 04:43:59 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/23312.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2008/06/07/depot-an-exercise-in-community-sourcing.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/23312.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/23312.aspx</trackback:ping>
        </item>
        <item>
            <title>Stackoverflow.com = joelonsoftware + codinghorror</title>
            <link>http://edsid.com/blog/archive/2008/04/16/stackoverflow.com--joelonsoftware--codinghorror.aspx</link>
            <description>&lt;p&gt;Jeff Atwood has paired up with Joel Spolsky and today they both announced stackoverflow.com, a new community support site that doesn't exist yet... but will be run by Jeff, created by the community for the community, and narrated weekly via podcast.  Looks like a digg-like structure where diggable items are answers to questions posted by the community.  Submit questions, submit answers, vote for answers...&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.codinghorror.com/blog/archives/001101.html"&gt;Jeff's announcement&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.joelonsoftware.com/items/2008/04/16.html"&gt;Joel's announcement&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.stackoverflow.com/"&gt;stackoverflow.com&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://www.stackoverflow.com/audio/stackoverflow-podcast-001.mp3"&gt;podcast #1&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;This will be interesting... &lt;font face="Arial"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://edsid.com/blog/aggbug/23306.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2008/04/16/stackoverflow.com--joelonsoftware--codinghorror.aspx</guid>
            <pubDate>Thu, 17 Apr 2008 03:37:58 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/23306.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2008/04/16/stackoverflow.com--joelonsoftware--codinghorror.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/23306.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/23306.aspx</trackback:ping>
        </item>
        <item>
            <title>The Thirsty Developer, Project Euler</title>
            <link>http://edsid.com/blog/archive/2008/04/11/the-thirsty-developer-project-euler.aspx</link>
            <description>&lt;p&gt;I can't believe that I didn't post about this!  My site was acting up when we did this, so I probably didn't have a place to post it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.larryclarkin.com/"&gt;Larry Clarkin&lt;/a&gt; &amp;amp; &lt;a href="http://www.davebost.com/blog/"&gt;Dave Bost&lt;/a&gt; from Microsoft have a podcast called &lt;a href="http://thirstydeveloper.com/"&gt;The Thirsty Developer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Back in December I met up with Larry, Dave, and &lt;a href="http://damonpayne.com"&gt;Damon Payne&lt;/a&gt; at the Ale House in downtown Milwaukee to talk about &lt;a href="http://projecteuler.net/"&gt;Project Euler&lt;/a&gt;.  I remember having a lot of fun, despite being a bit nervous (my first experience on that side of a podcast!).  It was very loud in there as well; I think Larry did a great job of editing.&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://thirstydeveloper.com/ct.ashx?id=2395c271-8796-433c-82c5-fc7c3d69fd29&amp;amp;url=http%3a%2f%2fthirstydeveloper.com%2fshows%2ftd006-ProjectEuler.mp3"&gt;Here is the Project Euler episode&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://thirstydeveloper.com/"&gt;The Thirsty Developer&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://feeds.feedburner.com/ThirstyDeveloperPodcast"&gt;Subscribe to The Thirsty Developer Podcast&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;[&lt;a href="http://feeds.feedburner.com/ThirstyDeveloper"&gt;Subscribe to The Thirsty Developer Blog&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://edsid.com/blog/aggbug/23303.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2008/04/11/the-thirsty-developer-project-euler.aspx</guid>
            <pubDate>Fri, 11 Apr 2008 16:28:31 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/23303.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2008/04/11/the-thirsty-developer-project-euler.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/23303.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/23303.aspx</trackback:ping>
        </item>
        <item>
            <title>EnterpriseLog, usage-logging</title>
            <link>http://edsid.com/blog/archive/2008/04/01/enterpriselog-usage-logging.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;Most development work contains some type of logging.  Usually, it's to a local log file or an email, for exception tracking at the most.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Recently, I decided to throw together an EnterpriseLog table.  We tossed our logging bits into a central library... I don't know why it took so long to centralize this particular functionality, but I'm glad we did it.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;Our EnterpriseLog table is providing useful data, as well as helping us answer some good questions:&lt;br /&gt;
- What applications are people using?&lt;br /&gt;
- Tracking ClickOnce downloads, system updates made by clickonce apps, etc.&lt;br /&gt;
- What terms are people searching for?&lt;br /&gt;
- Exceptions&lt;br /&gt;
- Usage&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;Usage Logging&lt;/strong&gt;&lt;br /&gt;
Usage logging is has been very interesting so far.  An immediate benefit we have found is keeping track of how formatted information is being entered in unexpected ways.  It is amazing how many different ways there are to enter a phone number!  With a quick look at EnterpriseLog usage data for an application, &lt;strong&gt;we are able to recognize, learn, and accommodate &lt;em&gt;actual &lt;/em&gt;usage patterns&lt;/strong&gt;.  Continuing with the phone # topic:&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;With any phone number, a quick regex levels the playing field by stripping out all non-digit characters:&lt;br /&gt;
string nums = Regex.Replace(textBox.Text, @"[^\d]", "");&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;If the result string is 10 chars (in the US), format appropriately for area code and exchange.  If it is 7 characters, try to infer the area code from the exchange.  If it is only 4 characters, assume it is an extension and build the real number from there if possible.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;In this case, usage logging helped me to skip the annoying validation and instructions and let my users do what they do.  We have been able to identify actual usage, throw assumptions out the window, and help them arrive at the appropriate result invisibly:&lt;br /&gt;
textBox.Text = String.Format("({0}) {1}-{2}", areaCode, exch, num);&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Most of us base our UI development on assumptions about our users, past experience, and hopefully a &lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207090821&amp;amp;sr=8-1"&gt;book&lt;/a&gt; or &lt;a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207090863&amp;amp;sr=1-1"&gt;two&lt;/a&gt;.  It is the assumptions part I have trouble with.  I'm a data guy.  I prefer to question the assumptions, set up some auditing and collect some data, and turn the assumptions into concrete UI features that keep the user in the flow.  &lt;/p&gt;&lt;img src="http://edsid.com/blog/aggbug/23298.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2008/04/01/enterpriselog-usage-logging.aspx</guid>
            <pubDate>Tue, 01 Apr 2008 23:03:50 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/23298.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2008/04/01/enterpriselog-usage-logging.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/23298.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/23298.aspx</trackback:ping>
        </item>
        <item>
            <title>Salesperanto AND Coderian?</title>
            <link>http://edsid.com/blog/archive/2008/03/14/salesperonto-and-coderian.aspx</link>
            <description>&lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;"Stop Thinking Like A Programmer"&lt;/strong&gt;&lt;/font&gt;&lt;a title="YinYang by GerryHeidenreich, on Flickr" target="_blank" href="http://www.flickr.com/photos/gheidenreich/2332531057/"&gt;&lt;strong&gt;&lt;img height="143" alt="YinYang" width="150" align="right" border="0" src="http://farm4.static.flickr.com/3139/2332531057_a773642fae_o.jpg" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I swear it's the theme this week.. I was actually told this by someone at work.  In my own defense, I was thinking like somebody that would rather script a solution than wait 3 weeks for it (ok yeah, that's like a programmer).... &lt;/p&gt;
&lt;p&gt;Think about this...&lt;/p&gt;
&lt;p&gt;1. &lt;strong&gt;Business&lt;/strong&gt;: Coders should be able to think in terms of features, interface complexity, barrier to entry, design and visualization, and capable of elevator pitching their product (notice I didn't say solution?) to a customer in these terms.&lt;/p&gt;
&lt;p&gt;2. &lt;strong&gt;Innovation&lt;/strong&gt;: getting the "I can do that" people (e.g. your engineers/architects/coders) to be able to speak directly to the "it would be cool if..." people (e.g. your billers, customers, parents, etc)&lt;/p&gt;
&lt;p&gt;3. &lt;strong&gt;Apple&lt;/strong&gt;'s innovation/momentum and Microsoft's shift in perspective &amp;amp; ability to compete:  Microsoft has &lt;em&gt;always &lt;/em&gt;been guilty of "thinking like programmers", and it has been very profitable for them, but things are changing, and they &lt;em&gt;are&lt;/em&gt; reacting accordingly.&lt;/p&gt;
&lt;p&gt;4. &lt;strong&gt;Black &amp;amp; White:&lt;/strong&gt; on one side are the geeks that appreciate your architecture and could debate code/frameworks/paradigms all day.  On the other side are your customers, who want to know how you are going to make them more profitable/efficient/confident/marketable/competitive.  Not much of a grey area here.  2 different languages: Salesperanto AND Coderian. &lt;/p&gt;
&lt;p&gt;5. &lt;strong&gt;Intentional Programming&lt;/strong&gt; [&lt;a href="http://en.wikipedia.org/wiki/Intentional_programming"&gt;wikipedia&lt;/a&gt;]: Your skillset is in demand, but we are getting closer to the day that "&lt;a href="http://www.nytimes.com/2007/01/28/business/yourmoney/28slip.html?_r=1&amp;amp;oref=slogin"&gt;Everyone Writes Software&lt;/a&gt;"... &lt;a href="http://www.aisto.com/roeder/Paper/"&gt;Lutz has a section&lt;/a&gt; dedicated to this.  Developers &lt;em&gt;must&lt;/em&gt; learn to understand the intent of their users.  Stop &lt;em&gt;thinking&lt;/em&gt; in syntax, start thinking in &lt;a href="http://en.wikipedia.org/wiki/Semantics"&gt;semantics&lt;/a&gt;...  Mashups, &lt;a href="http://en.wikipedia.org/wiki/Feature_Driven_Development"&gt;FDD&lt;/a&gt;, REST, RDF, &lt;a href="http://pipes.yahoo.com/pipes/"&gt;Pipes&lt;/a&gt; &amp;amp; &lt;a href="http://www.popfly.com/"&gt;Popfly&lt;/a&gt; (&lt;a href="http://labs.google.com/sets?hl=en&amp;amp;q1=microsoft+popfly&amp;amp;q2=yahoo+pipes&amp;amp;q3=&amp;amp;q4=&amp;amp;q5=&amp;amp;btn=Large+Set"&gt;Google SETS prediction&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;There is a pattern developing here, and there is A LOT of money being tossed around because of it (&lt;a href="http://www.techcrunch.com/2008/03/14/aol-on-a-bender-kickapps-may-be-next-acquisition/"&gt;check this out&lt;/a&gt;!).  &lt;/p&gt;&lt;img src="http://edsid.com/blog/aggbug/23295.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2008/03/14/salesperonto-and-coderian.aspx</guid>
            <pubDate>Fri, 14 Mar 2008 16:03:47 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/23295.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2008/03/14/salesperonto-and-coderian.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/23295.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/23295.aspx</trackback:ping>
        </item>
        <item>
            <title>.Net now "Shared Source" NOT Open Source</title>
            <link>http://edsid.com/blog/archive/2007/10/03/17635.aspx</link>
            <description>&lt;P&gt;&lt;BR&gt;Scott Guthrie &lt;A href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;announced&lt;/A&gt; on his blog, a few hours ago, that&amp;nbsp;.Net source code will be opened up to the public, under a &lt;A href="http://www.microsoft.com/resources/sharedsource/licensingbasics/referencelicense.mspx"&gt;ms-rl license&lt;/A&gt;&amp;nbsp;(for reference, read-only).&lt;/P&gt;
&lt;P&gt;Scott's announcement, already flooded with lots of comments &amp;amp; trackbacks, mostly positive, is &lt;A href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;here&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Starting with Visual Studio 2008 (Orcas), currently set to be released later this year, we will be able to reference the internal state of .Net objects as if they were local.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;This means a few things: &lt;BR&gt;1.&lt;/STRONG&gt; F11 will step you &lt;EM&gt;into&lt;/EM&gt; the actual .Net object being called, where you can reference in-state .Net classes.&lt;BR&gt;&lt;STRONG&gt;2.&lt;/STRONG&gt; You will see real objects, variables, line numbers in your call stack for the&amp;nbsp;.Net classes being referenced.&amp;nbsp;&lt;BR&gt;&lt;STRONG&gt;3.&lt;/STRONG&gt; (I assume) you will be able to &amp;#8220;Go to definition&amp;#8220; and view actual .Net class source code instead of an interface.&amp;nbsp; Of course, we've always had the ability to reflect on the libraries, and with a little work, figure out what was happening... but this will make things a lot more simple and accessible (have a look at&amp;nbsp;&lt;A href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/A&gt; to&amp;nbsp;figure out the Asp.Net treeview control!)&lt;BR&gt;&lt;STRONG&gt;4.&lt;/STRONG&gt; WWBAD (What would &lt;A href="http://blogs.msdn.com/brada/"&gt;Brad Abrams&lt;/A&gt; do?)&amp;nbsp; Now we can see for real instead of reverse engineer it and spend our time figuring out what&amp;nbsp;the variable datetime17 is doing.&amp;nbsp; In other words, quality of code should improve.&amp;nbsp; As we constantly reference the .Net library, some of the&amp;nbsp;msft&amp;nbsp;QA, v3.5 juju should rub off on us and help us fall a little more in line with standards, best practice, etc.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Anyway, it's read-only.&amp;nbsp; It's not Open source.&amp;nbsp; But it's&amp;nbsp;another big step in what I think is the right direction for Microsoft...&lt;/P&gt;
&lt;P&gt;Some good&amp;nbsp;MS pages to check out on open/shared source initiatives:&lt;BR&gt;- &lt;A href="http://www.microsoft.com/opensource/default.mspx"&gt;Open Source at Microsoft&lt;/A&gt;&lt;BR&gt;- &lt;A href="http://www.microsoft.com/opensource/default.mspx"&gt;Microsoft Shared Source Initiative&lt;/A&gt;&lt;BR&gt;- &lt;A href="http://www.microsoft.com/resources/sharedsource/Licensing/Developer.mspx"&gt;MS Developer Tools&lt;/A&gt; (A &lt;EM&gt;goldmine&lt;/EM&gt; of open/shared source projects, most on CodePlex)&lt;/P&gt;&lt;img src="http://edsid.com/blog/aggbug/17635.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2007/10/03/17635.aspx</guid>
            <pubDate>Wed, 03 Oct 2007 16:49:00 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/17635.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2007/10/03/17635.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/17635.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/17635.aspx</trackback:ping>
        </item>
        <item>
            <title>Profile your ASP.Net 2 apps with nProf</title>
            <link>http://edsid.com/blog/archive/2007/09/14/16420.aspx</link>
            <description>&lt;P&gt;&lt;BR&gt;I'm going to make this short and sweet - there's not much [non-Polish (?!) ] documentation out there for nProf, so here are my notes for getting it to hook into your ASP.Net 2 app and show you some bottleneckage:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Preparation:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. Set processModel username:&lt;BR&gt;Open your machine.config file (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config), hit Ctrl+I (incremental search) and&amp;nbsp;type processModel, hit F3 (~2 times) until you find the &amp;lt;processModel...&amp;gt; tag. Add the userName attribute within it: userName="SYSTEM" 
&lt;P&gt;2. Make sure your app is hosted in and accessible via IIS (nProf won't hook into Cassini) - ex: &lt;A href="http://localhost/test"&gt;http://localhost/test&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Install nProf:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;There are a bunch of versions available, and they're all alphas... The one that worked for me is &lt;A href="http://sourceforge.net/project/showfiles.php?group_id=74129&amp;amp;package_id=74472&amp;amp;release_id=409117"&gt;here&lt;/A&gt;&amp;nbsp;(nprof-0.9.1-setup.exe on sourceforge).&lt;BR&gt;Install the .exe, and when prompted go ahead and run nProf.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Profiling:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Note: &lt;FONT color=#ff0000&gt;DO NOT stop profiling via nProf&lt;/FONT&gt;.&amp;nbsp; Instead, recycle your app pool, or restart IIS inside your IIS manager.&amp;nbsp; nProf will see it's recycled and stop for you.&amp;nbsp; If you use nProf's stop buttons, it will hang and you'll lose your profile data.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;File &amp;gt; New, Create Profiler Project dialog opens, select ASP.NET radio button, click Create Project.&lt;/P&gt;
&lt;P&gt;Click Project &amp;gt; Start Project Run (or just hit F5)&lt;/P&gt;
&lt;P&gt;Open browser, browse to IIS-hosted asp.net app (use IIS address, ex, http://localhost/nProfTest).&amp;nbsp; Browse through pages that are slow, or save separate profiles for individual pages.&amp;nbsp; You will see nProf's&amp;nbsp;Messages window start rolling with information.&lt;/P&gt;
&lt;P&gt;Once again, &lt;EM&gt;don't click 'Stop Run' in nProf!&amp;nbsp; &lt;/EM&gt;Instead, go to IIS Manager, and either recycle your app pool, or restart IIS.&amp;nbsp; This will properly stop nProf, and you will see your resulting profile data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Analysis:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Back in nProf, you will see the threads called by your aspnet_wp.exe process, and when you select them, you will see the used namespace hierarchy below.&amp;nbsp; Find the thread with your library profile.&amp;nbsp; Uncheck the parent namespaces and re-check your own.&amp;nbsp; On the right, you will see the method signatures called, number of times called, % time taken, and more.&amp;nbsp; Click the '% of Total' header to sort, and you will see your bottleneck methods at the top.&lt;/P&gt;
&lt;P&gt;Note: Saving &amp;amp; Opening is kludgy: You can try to save, but I've had no luck re-opening my profiles... instead I took&amp;nbsp;a&amp;nbsp;screenshot&amp;nbsp;of my trouble methods just for reference.&lt;/P&gt;&lt;img src="http://edsid.com/blog/aggbug/16420.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2007/09/14/16420.aspx</guid>
            <pubDate>Fri, 14 Sep 2007 15:15:00 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/16420.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2007/09/14/16420.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/16420.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/16420.aspx</trackback:ping>
        </item>
        <item>
            <title>Intelligent Image Resizing - Amazing video demo!</title>
            <link>http://edsid.com/blog/archive/2007/08/23/15056.aspx</link>
            <description>&lt;p&gt;&lt;br /&gt;
Via Digg &amp;gt; OhGizmo!, the video &amp;amp; article is here: &lt;a title="Permanent Link to Smart Image Resizing Cuts The Useless Out Of Your Pics" rel="bookmark" href="http://www.ohgizmo.com/2007/08/21/smart-image-resizing-cuts-the-useless-out-of-your-pics/"&gt;Smart Image Resizing Cuts The Useless Out Of Your Pics&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'll check out the 20mb (pdf) whitepaper sooner or later, but here's what's going on as far as I can tell... &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Technique:&lt;br /&gt;
&lt;/strong&gt;This engine is resizing images by removing &lt;em&gt;paths&lt;/em&gt; of pixels vertically or horizontally instead of columns of pixels.  The path they add/remove is determined by interestingness.  They refer to this technique as “retargeting“ (as opposed to resizing or resampling).  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identifying Image Interestingness:&lt;br /&gt;
&lt;/strong&gt;They are determining the interestingness (or in their terms: gradient magnitude) by starting with a grayscale version of the source image, then creating a &lt;em&gt;new&lt;/em&gt; image using &lt;a href="http://en.wikipedia.org/wiki/Sobel"&gt;The Sobel Operator&lt;/a&gt; on the source image.  The resulting image represents large gradient activity (interestingness.) with light, and boringness... with dark.&lt;br /&gt;
&lt;br /&gt;
Original grayscale, and the Sobel gradient image of the same picture:&lt;br /&gt;
&lt;img title="greyscale of original image" alt="" src="http://upload.wikimedia.org/wikipedia/en/thumb/3/3f/Bikesgray.jpg/200px-Bikesgray.jpg" /&gt; &lt;img title="Sobel gradient image of the original image" alt="" src="http://upload.wikimedia.org/wikipedia/en/thumb/1/17/Bikesgraysobel.jpg/200px-Bikesgraysobel.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Discovering the least-interesting path:&lt;br /&gt;
&lt;/strong&gt;The engine then uses an 'importance or energy function' to discover the least-interesting path, composed of 1px from each column or row.  This function seems to represent the most consistently shaded 1-pixel path from one end of the image to the other... &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Retargeting” the image:&lt;/strong&gt;&lt;br /&gt;
Once the least-interesting path is discovered, it is then either removed or copied, depending on if you are “retargeting” your image to make it larger or smaller.&lt;/p&gt;
&lt;p&gt;Maybe &lt;a href="http://www.codeplex.com/imagemanipulator"&gt;ImageManipulator&lt;/a&gt; needs some Retarget methods... now if only &lt;a href="http://www.google.com/search?hl=en&amp;amp;pwst=1&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;q=optionsscalper&amp;amp;spell=1"&gt;optionsscalper&lt;/a&gt; could help me work through this math ;)&lt;/p&gt;
Here's the video: &lt;br /&gt;
&lt;br /&gt;
&lt;embed src="http://www.youtube.com/v/qadw0BRKeMk" width="425" height="350" type="application/x-shockwave-flash" wmode="transparent"&gt;&lt;/embed&gt;&lt;img src="http://edsid.com/blog/aggbug/15056.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2007/08/23/15056.aspx</guid>
            <pubDate>Thu, 23 Aug 2007 13:10:00 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/15056.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2007/08/23/15056.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/15056.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/15056.aspx</trackback:ping>
        </item>
        <item>
            <title>Euler12 (spoiler warning) - GetDivisors</title>
            <link>http://edsid.com/blog/archive/2007/05/03/13026.aspx</link>
            <description>&lt;P&gt;&lt;BR&gt;Thanks to &lt;A href="http://www.damonpayne.com/PermaLink,guid,bde3428a-af73-4681-bc92-58a0372b7c9e.aspx"&gt;Mr. Payne&lt;/A&gt;, I've been spending more hours awake coding, and less time sleeping, in the name of &lt;A href="http://www.projecteuler.net/index.php?section=about"&gt;'fun and recreation&lt;/A&gt;'... &lt;/P&gt;
&lt;P&gt;As Damon points out in his&amp;nbsp;&lt;A href="http://www.damonpayne.com/PermaLink,guid,fdb0de99-446c-428b-ba98-14ef8c5dfaf0.aspx"&gt;esoteric&amp;nbsp;and colorful post&lt;/A&gt; yesterday, I've been working my way through the Euler (&lt;A href="http://www.waukesha.uwc.edu/mat/kkromare/up.html"&gt;prounounced 'oy ler!&lt;/A&gt;) puzzles at &lt;A href="http://www.projecteuler.net/index.php?section=view"&gt;Project Euler&lt;/A&gt;.&amp;nbsp; I've banged out solutions for puzzles 1-13, but #10 is the only one I can't get under 1 minute (In fact, it's the only one that isn't solved almost instantly).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.projecteuler.net/index.php?section=problems&amp;amp;id=12"&gt;Problem 12&lt;/A&gt; is interesting: &lt;EM&gt;Which is the first triangle number to have over 500 divisors?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Finding triangle numbers is trivial; the actual&amp;nbsp;challenge in this puzzle is efficiently counting divisors for increasingly huge numbers.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The initial approach that almost works:&lt;BR&gt;&lt;/STRONG&gt;For number n, iterate from 1 to n, increment divisorCount where i&amp;nbsp;% n ==&amp;nbsp; 0&lt;BR&gt;(Once you try this out, you will find that with this approach, your highest divisor count will quickly reach 320 divisors, and will ultimately hang at around 480 before it starts to crawl...)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Finding the first triangle number to have over 1000 divisors, in under 10 seconds:&lt;BR&gt;&lt;/STRONG&gt;When things get even slightly complex, I turn to pen &amp;amp; paper... within minutes I saw the pattern I was looking for.&amp;nbsp; The following method will return a list of divisors for an int:&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=code&gt;&lt;PRE&gt;static List&amp;lt;int&amp;gt; GetDivisors(int num) {
   List&amp;lt;int&amp;gt; divisors = new List&amp;lt;int&amp;gt;();
   int divisorCandidate = 1;
   int multiple = 1;
   do {
      if (num % divisorCandidate == 0) {
         multiple = num / divisorCandidate;
         divisors.Add(divisorCandidate);
         //for squares, divisorCandidate == multiple (3*3=9 etc), so only count it once
         if (divisorCandidate &amp;lt; multiple) divisors.Add(multiple); 
      }
      divisorCandidate++;
   } while (divisorCandidate &amp;lt; multiple);
   divisors.Sort();
   return divisors;
}&lt;/PRE&gt;&lt;/SPAN&gt;
&lt;P&gt;I doubt it's even remotely useful in production, but this method is a great example of how&amp;nbsp;a little analysis of the problem (especially away from the keyboard) can result in a much more elegant solution to your problem than brute force.&lt;/P&gt;&lt;img src="http://edsid.com/blog/aggbug/13026.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2007/05/03/13026.aspx</guid>
            <pubDate>Thu, 03 May 2007 18:19:00 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/13026.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2007/05/03/13026.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/13026.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/13026.aspx</trackback:ping>
        </item>
        <item>
            <title>Pasting Code into TiddlyWiki</title>
            <link>http://edsid.com/blog/archive/2007/04/14/12267.aspx</link>
            <description>&lt;P&gt;Precede code with {{{ and a newline... end code with a newline &amp;amp; }}}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://edsid.com/blog/aggbug/12267.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Gerry Heidenreich</dc:creator>
            <guid>http://edsid.com/blog/archive/2007/04/14/12267.aspx</guid>
            <pubDate>Sat, 14 Apr 2007 17:29:00 GMT</pubDate>
            <wfw:comment>http://edsid.com/blog/comments/12267.aspx</wfw:comment>
            <comments>http://edsid.com/blog/archive/2007/04/14/12267.aspx#feedback</comments>
            <wfw:commentRss>http://edsid.com/blog/comments/commentRss/12267.aspx</wfw:commentRss>
            <trackback:ping>http://edsid.com/blog/services/trackbacks/12267.aspx</trackback:ping>
        </item>
    </channel>
</rss>