<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
  <channel>
    <title>HACKINGON.NET</title>
    <description>Pragmatic ALT.NET Web Development</description>
    <link>http://hackingon.net/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.5.0</generator>
    <language>en-AU</language>
    <blogChannel:blogRoll>http://hackingon.net/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Liam McLennan</dc:creator>
    <dc:title>HACKINGON.NET</dc:title>
    <geo:lat>-27.488160</geo:lat>
    <geo:long>153.208900</geo:long>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Hackingonnet" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title>Put It On a Shirt</title>
      <description>&lt;p&gt;&lt;a href="http://hackingon.net/image.axd?picture=WindowsLiveWriter/PutItOnaShirt/7A8D27C7/refactoring_happens.jpg"&gt;&lt;img width="237" height="244" border="0" align="left" src="http://hackingon.net/image.axd?picture=WindowsLiveWriter/PutItOnaShirt/63EAD980/refactoring_happens_thumb.jpg" alt="refactoring_happens" title="refactoring_happens" style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" /&gt;&lt;/a&gt; Sometimes you have a t-shirt idea, but there is no way to try it out &amp;ndash; until now. Introducing &lt;a target="_blank" href="http://onashirt.net/"&gt;OnAShirt.net&lt;/a&gt;. It is a simple app I coded in a couple of hours today that allows the user to place &lt;a target="_blank" href="http://onashirt.net/OnAShirt.htm?slogan=dGV4dA%3D%3D"&gt;text&lt;/a&gt; over a picture of a t-shirt, or even to conduct t-shirt &lt;a target="_blank" href="http://onashirt.net/OnAShirt.htm?slogan=dGhpcyBzaXRlIGlzIHdlYWs%3D"&gt;conversations&lt;/a&gt; with &lt;a target="_blank" href="http://onashirt.net/OnAShirt.htm?slogan=Li4uYW5kIHNlbGYtZGVwcmVjYXRpbmc%3D"&gt;themself&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to jQuery for making this sort of thing so easy.&lt;/p&gt;</description>
      <link>http://hackingon.net/post/Put-It-On-a-Shirt.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Put-It-On-a-Shirt.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=f36f5e1b-a5c0-4dd7-90b7-25d499537197</guid>
      <pubDate>Sat, 21 Nov 2009 18:26:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=f36f5e1b-a5c0-4dd7-90b7-25d499537197</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=f36f5e1b-a5c0-4dd7-90b7-25d499537197</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Put-It-On-a-Shirt.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=f36f5e1b-a5c0-4dd7-90b7-25d499537197</wfw:commentRss>
    </item>
    <item>
      <title>mocra off railers t-shirt</title>
      <description>&lt;p&gt;&lt;a href="http://hackingon.net/image.axd?picture=WindowsLiveWriter/mocraoffrailerstshirt/18CC53C3/mocra.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="mocra" border="0" alt="mocra" align="left" src="http://hackingon.net/image.axd?picture=WindowsLiveWriter/mocraoffrailerstshirt/557125D5/mocra_thumb.png" width="244" height="244" /&gt;&lt;/a&gt; In a little over 5 weeks Dr Nic and the Fair-brothers will begin their Homeric &lt;a href="http://www.mocraoffrailers.com/what-is-rickshaw-run.html" target="_blank"&gt;rickshaw running adventure&lt;/a&gt; from the Himalayas to the south of India. Their adventure is raising money for &lt;a href="http://www.mocraoffrailers.com/our-charities.html" target="_blank"&gt;some worthy causes&lt;/a&gt; so please give generously.&lt;/p&gt;  &lt;p&gt;As you can see, Greg was kind enough to send me a mocra off railers t-shirt. It is very comfortable. Thanks Greg and good luck!&lt;/p&gt;</description>
      <link>http://hackingon.net/post/mocra-off-railers-t-shirt.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/mocra-off-railers-t-shirt.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=39c564e7-92c1-4bc3-8a74-bf9836446f1a</guid>
      <pubDate>Fri, 20 Nov 2009 12:14:44 +1000</pubDate>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=39c564e7-92c1-4bc3-8a74-bf9836446f1a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=39c564e7-92c1-4bc3-8a74-bf9836446f1a</trackback:ping>
      <wfw:comment>http://hackingon.net/post/mocra-off-railers-t-shirt.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=39c564e7-92c1-4bc3-8a74-bf9836446f1a</wfw:commentRss>
    </item>
    <item>
      <title>Should a Build Environment match Development or Production?</title>
      <description>&lt;p&gt;Today I had a twittersation about build servers, and how closely they should match the development and production environments. &lt;a target="_blank" href="http://damianedwards.wordpress.com/"&gt;Damian&lt;/a&gt;&amp;rsquo;s position was that the build server should match the development environment, while I held that the build environment should be as close to production as possible. &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;Martin Fowler&amp;rsquo;s Continuous Integration article&lt;/a&gt; says:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Test in a Clone of the Production Environment&lt;/p&gt;
&lt;p&gt;The point of testing is to flush out, under controlled conditions, any problem that the system will have in production. A significant part of this is the environment within which the production system will run. If you test in a different environment, every difference results in a risk that what happens under test won't happen in production.&lt;/p&gt;
&lt;p&gt;As a result you want to set up your test environment to be as exact a mimic of your production environment as possible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I can provide an example of why this is a good idea. I am currently working on a project that is using Asp.Net MVC 2, which is installed on developer&amp;rsquo;s machines as a standalone MSI. The same article I mentioned before also says, &amp;ldquo;everything you need to do a build should be in there [repository] including: test scripts, properties files, database schema, install scripts, and &lt;strong&gt;&lt;em&gt;third party libraries&lt;/em&gt;&lt;/strong&gt;&amp;rdquo;. Being fallible, I made a mistake and failed to include one of the required MVC DLLs in the source repository. Because the build environment matched production we quickly detected the error because the build broke. If the build server was similar to the development environments then it would have had the required DLL in the GAC and the bug would have gone undetected.&lt;/p&gt;
&lt;p&gt;Here are the things that I consider to be important for a build environment:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;The build server should, as close as possible, match the production environment&lt;/li&gt;
    &lt;li&gt;The build server should be fast. Rapid feedback is important&lt;/li&gt;
    &lt;li&gt;The same build that runs on the build server should also be runnable on the developer&amp;rsquo;s machines&lt;/li&gt;
    &lt;li&gt;When a build fails, everyone should know&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>http://hackingon.net/post/Should-a-Build-Environment-match-Development-or-Production.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Should-a-Build-Environment-match-Development-or-Production.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=86543bc0-a410-4d81-8c30-8ee3cbd80039</guid>
      <pubDate>Thu, 19 Nov 2009 21:33:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=86543bc0-a410-4d81-8c30-8ee3cbd80039</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=86543bc0-a410-4d81-8c30-8ee3cbd80039</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Should-a-Build-Environment-match-Development-or-Production.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=86543bc0-a410-4d81-8c30-8ee3cbd80039</wfw:commentRss>
    </item>
    <item>
      <title>Automated Acceptance Testing With NGourd and WebAii</title>
      <description>&lt;p&gt;I have &lt;a href="http://hackingon.net/post/Thoughts-on-webaii-functional-web-testing-framework.aspx"&gt;written about about WebAii&lt;/a&gt; before. It is functional but the API sucks. I have &lt;a href="http://hackingon.net/post/Executable-Specifications-in-NET.aspx"&gt;written about NGourd&lt;/a&gt; too.&lt;/p&gt;
&lt;p&gt;I am currently working on a project that is using the combination of NGourd and WebAiii for automated acceptance testing. We start with a story:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Feature: Search      &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; As a user       &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; I want to search for items       &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; so that I can find data that I am interested in&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;and then write some scenarios like:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Scenario: Search for a compensation agreement      &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Given I am at the home page       &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; When I select the Agreements perspective       &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; And I search for 'agreement 1'       &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Then the search results should be displayed&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Within the test project we have the following directory structure:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackingon.net/image.axd?picture=WindowsLiveWriter/AutomatedAcceptanceTestingWithNGourdandW/6849F808/directory.gif"&gt;&lt;img width="244" height="216" border="0" src="http://hackingon.net/image.axd?picture=WindowsLiveWriter/AutomatedAcceptanceTestingWithNGourdandW/326502EE/directory_thumb.gif" alt="directory" title="directory" style="border-width: 0px; display: inline;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Search.feature is a text file containing the previously listed feature and scenario definitions. For each scenario step we must have a corresponding step definition. For example the step &amp;lsquo;When I select the Agreements perspective&amp;rsquo; matches the following step definition:&lt;/p&gt;
&lt;pre class="brush: csharp"&gt;
        [Step(@&amp;quot;search for '([\w\s]+)'&amp;quot;)]
        public void search_for(string searchTerm)
        {
            CurrentBrowser.Find.ById(&amp;quot;Terms&amp;quot;).SetValue(&amp;quot;value&amp;quot;, searchTerm);
            CurrentBrowser.Click(CurrentBrowser.Find.ById(&amp;quot;search_submit&amp;quot;));
        }
&lt;/pre&gt;
&lt;p&gt;Note the use of regular expressions to parameterise the step. Because this step is an action we put it in the ActionSteps file. Everything that we need to do for our tests falls into one of the three categories: Action, ContentAssertion or Navigation. The goal is to avoid defining the same step twice so that the set of steps form a domain specific language that can be used by business analysts and the like.&lt;/p&gt;
&lt;p&gt;NGourd is a Cucumber knockoff, but without many of the features. However, it is surprising how far you can get with just the basics. So far it is working nicely.&lt;/p&gt;</description>
      <link>http://hackingon.net/post/Automated-Acceptance-Testing-With-NGourd-and-WebAii.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Automated-Acceptance-Testing-With-NGourd-and-WebAii.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=f955784f-1288-4a9b-9527-6ad6980d8001</guid>
      <pubDate>Thu, 19 Nov 2009 07:45:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=f955784f-1288-4a9b-9527-6ad6980d8001</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=f955784f-1288-4a9b-9527-6ad6980d8001</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Automated-Acceptance-Testing-With-NGourd-and-WebAii.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=f955784f-1288-4a9b-9527-6ad6980d8001</wfw:commentRss>
    </item>
    <item>
      <title>Have Atlassian Lost Their Minds?</title>
      <description>&lt;p&gt;Atlassian is the company that I wish was mine. They make cool web products, they have a unique voice and they are successful. But recently they lost their minds, and starting giving their software away (almost).&lt;/p&gt;
&lt;p&gt;If you are a small organisation like me you can &lt;a target="_blank" href="http://www.atlassian.com/starter/"&gt;buy the main atlassian products&lt;/a&gt; (jira, confluence, greenhopper, bamboo, fisheye &amp;amp; crowd) for US $10.00 each. User limits apply.&lt;/p&gt;
&lt;p&gt;We are using Jira + Greenhopper for agile project management, and confluence for our project wiki. Confluence is VERY nice. It is the best wiki I have worked with. Simple, powerful and it works. It also is very good at converting word documents to wiki pages which is something that our BA has appreciated. JIRA + Greenhopper is a workable solution for agile project management if you don&amp;rsquo;t want to go with walls and post-it notes. At times it can be a bit confusing because Greenhopper is a JIRA plugin that adds mingle-like functionality to a bug tracking application. Jumping between JIRA and Greenhopper is not entirely smooth, however, it is still one of the better solutions I have tried, and I have tried them all. This is the first project I have been on that has had a burn down chart, and I am finding Green Hopper&amp;rsquo;s burn down to be an excellent big visible chart / information radiator. JIRA reminds me of Gemini, and Greenhopper reminds me of Mingle. Not sure who copied who. The good news is that unlike Mingle, JIRA does not require a dedicated super computer.&lt;/p&gt;
&lt;p&gt;The only disappointed I have is that Atlassian&amp;rsquo;s code review tool, Crucible, was not included in the deal.&lt;/p&gt;</description>
      <link>http://hackingon.net/post/Have-Atlassian-Lost-Their-Minds.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Have-Atlassian-Lost-Their-Minds.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=5a2bc162-1626-45b4-845a-21293c7f0a5d</guid>
      <pubDate>Wed, 18 Nov 2009 20:57:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=5a2bc162-1626-45b4-845a-21293c7f0a5d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=5a2bc162-1626-45b4-845a-21293c7f0a5d</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Have-Atlassian-Lost-Their-Minds.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=5a2bc162-1626-45b4-845a-21293c7f0a5d</wfw:commentRss>
    </item>
    <item>
      <title>Collection Initializer Syntax for Dictionary&lt;TKey, TValue&gt;</title>
      <description>&lt;p&gt;Dictionary&amp;lt;TKey, TValue&amp;gt; is a generic type that stores collections of KeyValuePair&amp;lt;TKey, TValue&amp;gt;. It is used heavily (actually the IDictionary&amp;lt;TKey, TValue&amp;gt; interface) in Asp.Net Mvc as a parameter to view helper methods.&lt;/p&gt;
&lt;p&gt;I am writing this post because I have a tendency to forget the collection initializer syntax for this type of collection, so here it is:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1ca0a844-a42c-458b-9227-2e4af1511a86" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
&lt;pre class="brush: csharp" name="code"&gt;
IDictionary&amp;lt;string, int&amp;gt; collection = new Dictionary&amp;lt;string, int&amp;gt;() 
{
	{ &amp;quot;rows&amp;quot;, 7 },
	{ &amp;quot;columns&amp;quot;, 2}
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The nice part is that it supports specifying the collection members as anonymous types, instead of having to instantiate new instances of KeyValuePair&amp;lt;TKey, TValue&amp;gt;.&lt;/p&gt;</description>
      <link>http://hackingon.net/post/Collection-Initializer-Syntax-for-Dictionary3cTKey-TValue3e.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Collection-Initializer-Syntax-for-Dictionary3cTKey-TValue3e.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=eb268451-3cbd-4cd4-a7c5-f065ee2f75ca</guid>
      <pubDate>Wed, 18 Nov 2009 13:00:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=eb268451-3cbd-4cd4-a7c5-f065ee2f75ca</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=eb268451-3cbd-4cd4-a7c5-f065ee2f75ca</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Collection-Initializer-Syntax-for-Dictionary3cTKey-TValue3e.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=eb268451-3cbd-4cd4-a7c5-f065ee2f75ca</wfw:commentRss>
    </item>
    <item>
      <title>jQuery UI Dialog: Part 2 – The Modal Dialog</title>
      <description>&lt;p&gt;This is part 2 of my series on the jQuery UI Dialog. &lt;a href="http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx"&gt;Part 1 &amp;ndash; The Default Dialog&lt;/a&gt; covered the most basic usage of the dialog widget. In this second part I will demonstrate a simple modal dialog.&lt;/p&gt;
&lt;p&gt;A modal dialog is a dialog that takes focus, and disables the rest of the application until it is closed. They are used to force the user to acknowledge something, or to gather some input. It is worth pointing out that modal dialogs can be annoying for users so you should consider carefully if it is absolutely necessary. User Account Control (UAC) in Windows Vista and Windows 7 is an example of an annoying usage of modal dialogs.&lt;/p&gt;
&lt;p&gt;The dialog widget is usually configured by passing the dialog() method an anonymous object containing a set of key value pairs that describe the options required. The anonymous object is created using javascript&amp;rsquo;s object literal notation. My favourite javascript author, Douglas Crockford, describes the notation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the object literal notation, an object description is a set of comma-separated name/value pairs inside curly braces. The names can be identifiers or strings followed by a colon.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A simple code example is:&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:99d7dab3-1d8f-455c-967e-a84a87c7bbbe" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="brush: js"&gt;
var myObject = {
    firstProperty: 'value 1',
    secondProperty: 2
};&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The options I will use to create a modal dialog are:&lt;/p&gt;
&lt;table width="100%" cellspacing="0" cellpadding="2" border="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td width="200" valign="top"&gt;height&lt;/td&gt;
            &lt;td width="200" valign="top"&gt;The height of the dialog&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="200" valign="top"&gt;modal&lt;/td&gt;
            &lt;td width="200" valign="top"&gt;Boolean indicating if the dialog should be modal&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td width="200" valign="top"&gt;overlay&lt;/td&gt;
            &lt;td width="200" valign="top"&gt;Creates a partially transparent modal overlay layer. Very web 2.0.&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href="http://hackingon.net/files/jqueryuidialog/modal_dialog.htm" target="_blank"&gt;View a Demo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And here is the code:&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4d46c511-8452-400f-b107-567b1f741cae" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="brush: xml"&gt;
&amp;lt;!-- See part 1 for html preamble --&amp;gt;
&amp;lt;body&amp;gt;  
    &amp;lt;p&amp;gt;Some text on the page.&amp;lt;/p&amp;gt;
    
    &amp;lt;div class=&amp;quot;make_me_a_dialog&amp;quot;&amp;gt;Content of div&amp;lt;/div&amp;gt;
    
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;

        $(document).ready(function() {

            $('.make_me_a_dialog').dialog({ bgiframe: true,
                height: 200,
                modal: true,
                overlay: {
                    backgroundColor: '#000',
                    opacity: 0.5
                }                
            });

        });
        
    &amp;lt;/script&amp;gt;  
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;


&lt;/pre&gt;
&lt;/div&gt;</description>
      <link>http://hackingon.net/post/jQuery-UI-Dialog-Part-2-e28093-The-Modal-Dialog.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/jQuery-UI-Dialog-Part-2-e28093-The-Modal-Dialog.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=0a553169-ec36-4b40-9bd0-5fee075b4998</guid>
      <pubDate>Mon, 02 Nov 2009 05:45:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=0a553169-ec36-4b40-9bd0-5fee075b4998</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=0a553169-ec36-4b40-9bd0-5fee075b4998</trackback:ping>
      <wfw:comment>http://hackingon.net/post/jQuery-UI-Dialog-Part-2-e28093-The-Modal-Dialog.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=0a553169-ec36-4b40-9bd0-5fee075b4998</wfw:commentRss>
    </item>
    <item>
      <title>jquery ui dialog: Part 1 – The Default Dialog</title>
      <description>&lt;p&gt;&lt;img width="371" height="379" border="0" align="right" src="http://hackingon.net/image.axd?picture=WindowsLiveWriter/jqueryuidialogPart1TheDefaultDialog/5D3C1508/dialog.gif" alt="jQuery UI Dialog" title="jQuery UI Dialog" style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" /&gt; This series is going to document increasingly complex usages of the &lt;a target="_blank" href="http://jqueryui.com/demos/dialog/"&gt;jQuery UI Dialog widget&lt;/a&gt;. This first part of the series will demonstrate how to display the default dialog.&lt;/p&gt;
&lt;p&gt;Other series members:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hackingon.net/post/jQuery-UI-Dialog-Part-2-e28093-The-Modal-Dialog.aspx"&gt;jQuery UI Dialog: Part 2 &amp;ndash; The Modal Dialog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The jQuery UI Dialog is a powerful client-side dialog control. It is bundled as part of the jQuery UI suite and as such it is available on the Google CDN. Some of its more interesting features are:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Modal / non-modal dialogs&lt;/li&gt;
    &lt;li&gt;Support for resizing and dragging&lt;/li&gt;
    &lt;li&gt;Support for buttons&lt;/li&gt;
    &lt;li&gt;Support for Theming&lt;/li&gt;
    &lt;li&gt;Stacking&lt;/li&gt;
    &lt;li&gt;Partially transparent modal overlay layer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The simplest usage of the dialog control is to select a div, and call the dialog() function.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://hackingon.net/files/jqueryuidialog/default_dialog.htm"&gt;View a Demo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is the complete code:&lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:740b8fdd-1d74-46ec-a087-1a414dd6696d" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;
&lt;pre class="brush: xml" name="code"&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;
  &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Default dialog&amp;lt;/title&amp;gt;
    &amp;lt;link href=&amp;quot;ui-darkness/jquery-ui-1.7.2.custom.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;  
    &amp;lt;p&amp;gt;Some text on the page.&amp;lt;/p&amp;gt;
    
    &amp;lt;div class=&amp;quot;make_me_a_dialog&amp;quot;&amp;gt;Content of div&amp;lt;/div&amp;gt;
    
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;

        $(document).ready(function() {

            $('.make_me_a_dialog').dialog();

        });
        
    &amp;lt;/script&amp;gt;  
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note that the two javascript files, jquery.min.js and jquery-ui.min.js, are loaded from the google content delivery network (CDN). Line 19 selects the div with the class 'make_me_a_dialog' and applies the jquery dialog plugin to it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx&amp;amp;title=jquery ui dialog: Part 1 &amp;ndash; The Default Dialog" target="_blank"&gt;                     &lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx" /&gt;                   &lt;/a&gt;&lt;/p&gt;</description>
      <link>http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=c9e5c490-0148-43da-8d4a-0a4de6af4d2c</guid>
      <pubDate>Thu, 29 Oct 2009 12:57:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=c9e5c490-0148-43da-8d4a-0a4de6af4d2c</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=c9e5c490-0148-43da-8d4a-0a4de6af4d2c</trackback:ping>
      <wfw:comment>http://hackingon.net/post/jquery-ui-dialog-Part-1-e28093-The-Default-Dialog.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=c9e5c490-0148-43da-8d4a-0a4de6af4d2c</wfw:commentRss>
    </item>
    <item>
      <title>An emerging business model for development tool micro isvs</title>
      <description>&lt;p&gt;The traditional, Paul Graham style of technology start-up is:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Someone has an idea &lt;/li&gt;    &lt;li&gt;They try to validate their idea &lt;/li&gt;    &lt;li&gt;The idea is implemented &lt;/li&gt;    &lt;li&gt;The idea is communicated to the market &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;While the importance of step 2 has always been emphasized the weakness of the above remains that the product may not gain significant visibility to the market. The products never reach critical mass and so they fade gradually into obscurity.&lt;/p&gt;  &lt;p&gt;Recently I have noticed a new model emerging that promises far less risk at the tail end of the product cycle:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Build a personal brand. This is usually done by making open-source contributions. &lt;/li&gt;    &lt;li&gt;Develop a product that is related to your brand. &lt;/li&gt;    &lt;li&gt;Use your brand to reach a market&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The advantage here is that the market is ready and waiting and has a degree of trust in the entrepreneur. Here are some examples of development tool isvs that are using this strategy:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="100%"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="133"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;strong&gt;Brand building activities&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;strong&gt;Related commercial activities&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Ayende&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.ayende.com/projects/projects.aspx" target="_blank"&gt;Open source contributions&lt;/a&gt; to Rhino Mocks and NHibernate.&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://nhprof.com/" target="_blank"&gt;NHProf&lt;/a&gt; (NHibernate Profiler)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Rob Conery&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://blog.wekeroad.com/" target="_blank"&gt;Subsonic and MVC Storefront&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://tekpub.com/" target="_blank"&gt;Tekpub&lt;/a&gt; (Screencast subscriptions)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Jeff Atwood&lt;/td&gt;        &lt;td valign="top" width="133"&gt;Coding Horror blog&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://stackoverflow.com/" target="_blank"&gt;stackoverflow&lt;/a&gt; Q &amp;amp; A site&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Nate Kohari&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://ninject.org/" target="_blank"&gt;Ninject&lt;/a&gt; IoC Container&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://agilezen.com/" target="_blank"&gt;Zen&lt;/a&gt; Kanban application&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="133"&gt;Kent Beck&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.threeriversinstitute.org/Kent%20Beck.htm" target="_blank"&gt;TDD, XP&lt;/a&gt; and lots of other things&lt;/td&gt;        &lt;td valign="top" width="133"&gt;&lt;a href="http://www.threeriversinstitute.org/junitmax/subscribe.html" target="_blank"&gt;JUnit Max&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;I am sure there are others but that is all I can think of right now. Personally, I think it is great that these people are able to leverage their excellent contributions to produce a viable business. &lt;/p&gt;</description>
      <link>http://hackingon.net/post/An-emerging-business-model-for-development-tool-micro-isvs.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/An-emerging-business-model-for-development-tool-micro-isvs.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=f1500da3-119e-425e-b177-56aa4decbd68</guid>
      <pubDate>Wed, 28 Oct 2009 14:01:41 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=f1500da3-119e-425e-b177-56aa4decbd68</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=f1500da3-119e-425e-b177-56aa4decbd68</trackback:ping>
      <wfw:comment>http://hackingon.net/post/An-emerging-business-model-for-development-tool-micro-isvs.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=f1500da3-119e-425e-b177-56aa4decbd68</wfw:commentRss>
    </item>
    <item>
      <title>Thoughts on webaii functional / web testing framework</title>
      <description>&lt;p&gt;&lt;a href="http://www.artoftest.com/products/webaii.aspx" target="_blank"&gt;WebAii&lt;/a&gt; is a proprietary, but free, functional testing framework from ArtOFTest. It has become more visible since telerik started bundling it with their ASP.NET AJAX UI Controls framework.&lt;/p&gt;
&lt;h2&gt;The Good News&lt;/h2&gt;
&lt;p&gt;The Achilles heel of most web testing tools is ajax. The good news is that webaii has more support for testing ajax applications than any of the other frameworks I have tried. Methods are provided to wait for elements, or to wait for the entire page to finish rendering. To integrate webaii into your testing project requires referencing a single dll, which is also very nice.&lt;/p&gt;
&lt;h2&gt;the bad news&lt;/h2&gt;
&lt;p&gt;CSS selectors are a well designed DSL for selecting dom elements. One of the reasons why people like jQuery so much is that it uses CSS selectors to select dom elements. Webaii uses a clunky API for dom selection. It is ok for basic selectors (by id or class) but more complex queries require dropping down to a nasty low-level API.&lt;/p&gt;
&lt;pre class="brush: csharp"&gt;

// jQuery: $(&amp;lsquo;#main&amp;rsquo;)
Find.ById(&amp;ldquo;main&amp;rdquo;);

// jQuery: $(&amp;lsquo;.myclass&amp;rsquo;)
Find.ByAttributes(&amp;quot;class=myclass&amp;quot;);

&lt;/pre&gt;
&lt;p&gt;After writing a few smoke tests I added them into our team city continuous integration build, which broke the build. ArtOfTest do provide instructions for getting the tests to run in a build but it is complicated and requires significant changes to our build.&lt;/p&gt;</description>
      <link>http://hackingon.net/post/Thoughts-on-webaii-functional-web-testing-framework.aspx</link>
      <author>liam.mclennan.nospam@nospam.gmail.com (liammclennan)</author>
      <comments>http://hackingon.net/post/Thoughts-on-webaii-functional-web-testing-framework.aspx#comment</comments>
      <guid>http://hackingon.net/post.aspx?id=8355695f-b482-454e-9e2a-ecb51e37c328</guid>
      <pubDate>Fri, 23 Oct 2009 11:10:00 +1000</pubDate>
      <category>Web Development</category>
      <dc:publisher>liammclennan</dc:publisher>
      <pingback:server>http://hackingon.net/pingback.axd</pingback:server>
      <pingback:target>http://hackingon.net/post.aspx?id=8355695f-b482-454e-9e2a-ecb51e37c328</pingback:target>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://hackingon.net/trackback.axd?id=8355695f-b482-454e-9e2a-ecb51e37c328</trackback:ping>
      <wfw:comment>http://hackingon.net/post/Thoughts-on-webaii-functional-web-testing-framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://hackingon.net/syndication.axd?post=8355695f-b482-454e-9e2a-ecb51e37c328</wfw:commentRss>
    </item>
  </channel>
</rss>
