<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Opgenorth.NET &#187; Uncategorized</title>
	<atom:link href="http://www.opgenorth.net/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.opgenorth.net</link>
	<description>A software geek torn apart by the dicotomy of .NET by day, Ruby and Android by night</description>
	<lastBuildDate>Wed, 07 Sep 2011 03:30:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>TypeMock, TestDriven.NET, and Red Tests</title>
		<link>http://www.opgenorth.net/2008/10/18/typemock-testdriven-net-and-red-tests-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=typemock-testdriven-net-and-red-tests-2</link>
		<comments>http://www.opgenorth.net/2008/10/18/typemock-testdriven-net-and-red-tests-2/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 07:05:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/10/18/typemock-testdriven-net-and-red-tests-2/</guid>
		<description><![CDATA[Lately I&#8217;ve been experimenting with TypeMock Isolator,&#160; and it&#8217;s new AAA syntax.&#160; For the past two years I&#8217;ve been a diehard Rhino.Mocks kind of guy, but figured that it&#8217;s time to check out other tools.&#160; Anyway, I had a situation where a unit test of mine was failing when I ran it with TestDriven.NET, but [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been experimenting with <a href="http://www.typemock.com/">TypeMock Isolator</a>,&#160; and it&#8217;s new AAA syntax.&#160; For the past two years I&#8217;ve been a diehard Rhino.Mocks kind of guy, but figured that it&#8217;s time to check out other tools.&#160; Anyway, I had a situation where a unit test of mine was failing when I ran it with <a href="http://www.testdriven.net/">TestDriven.NET</a>, but would pass when I ran it using the unit test runner in <a href="http://www.jetbrains.com/resharper">Resharper 4.1</a>.</p>
<p>Usually when I develop, I write individual tests and then run individually with TestDriven.NET and collectively with Resharper.&#160; In this case, as I was writing one unit test, it kept failing with TestDriven.NET.&#160; At first I thought it was just me being stupid (always a good place to start), and then I was worried that perhaps the documentation for TypeMock was to blame.&#160; So, I sent a email to Avi at TypeMock, mostly expecting confirmation of my stupidity. </p>
<p>Turns out the problem in this case was pretty obscure one (to me).&#160; At home, I do my development in a VM running Windows 2008 64 bit.&#160; When Resharper runs your unit tests, it does in a 32 bit process.&#160; TD.NET, on a 64bit OS,&#160; runs as a 64 bit process.&#160; If you get TD.NET to run as a 32 bit process, then your tests will run fine under TD.NET.</p>
<p>To do so, from the Visual Studio 2008 Command Prompt, change to the directory that you have TD.NET installed in.&#160; Then use corflags:</p>
<p>corflags /32bit+ ProcessInvocation.exe</p>
<p>Note that it&#8217;s probably best to do this when logged in as the Administrator.</p>
<p>I will say that I was happy with the support I got from the guys (Avi, Gil and Ohad) at TypeMock.&#160; Given the fact that we&#8217;re about a half a world apart (western Canada vs. Isreal), they provided prompt, excellent support.&#160; My thanks to them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/10/18/typemock-testdriven-net-and-red-tests-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rod Paddock at EDMUG</title>
		<link>http://www.opgenorth.net/2008/06/27/rod-paddock-at-edmug/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rod-paddock-at-edmug</link>
		<comments>http://www.opgenorth.net/2008/06/27/rod-paddock-at-edmug/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 21:01:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/06/27/rod-paddock-at-edmug/</guid>
		<description><![CDATA[Last night (Thursday, June 26th) Rod Paddock gave a talk on using Silverlight 2.0 to the Edmonton .NET User Group.&#160; I&#8217;d say that Rod did a pretty good job, despite the fact that the beta of both Silverlight and Expression Blend didn&#8217;t exactly want to play nice all the time.&#160; It&#8217;s definitely perked my interest [...]]]></description>
			<content:encoded><![CDATA[<p>Last night (Thursday, June 26th) <a href="http://blog.dashpoint.com/">Rod Paddock</a> gave a talk on using <a href="http://www.silverlight.net">Silverlight</a> 2.0 to the Edmonton .NET User Group.&#160; I&#8217;d say that Rod did a pretty good job, despite the fact that the beta of both <a href="http://www.silverlight.net">Silverlight</a> and Expression Blend didn&#8217;t exactly want to play nice all the time.&#160; It&#8217;s definitely perked my interest in the technology, and I can see a lot of business potential for it. </p>
<p>The rich user experience that <a href="http://www.silverlight.net">Silverlight</a> brings to the web-browser, will, I think raise the bar for what web applications will do for businesses.&#160; Forget all the buzz about ASP.NET MVC or MonoRail or ASP.NET 3.5.&#160; This is just another layer of makeup on the tired, old, hooker that is application development in .NET.&#160; <a href="http://www.silverlight.net">Silverlight</a> is what will make business users oh and ah and get excited about web apps again.</p>
<p>Those who were at last night&#8217;s talk will remember that Rod was using a fairly large database that he got from <a href="http://www.freedb.org/">freedb</a>.&#160; It&#8217;s fairly large, not quite 7GB of data.&#160; I did get a copy of it, in MS-SQL Server format.&#160; When I compressed it (tar.gz), I got it down to 2GB in size.&#160; If you&#8217;re interested in a copy of the database for your own purposes, leave me a comment here and we&#8217;ll work something out. </p>
<p>Note:&#160; I would like to state that <a href="http://www.igloocoder.com">Don</a> is usually drunk, and as such you shouldn&#8217;t believe some of the wild things he said last night, especially about me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/06/27/rod-paddock-at-edmug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Experiment, Days 3 &amp; 4</title>
		<link>http://www.opgenorth.net/2008/06/25/the-experiment-days-3-4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-experiment-days-3-4</link>
		<comments>http://www.opgenorth.net/2008/06/25/the-experiment-days-3-4/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 16:01:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/06/25/the-experiment-days-3-4/</guid>
		<description><![CDATA[Just a quick recap of days 3 &#38; 4 of running with openSUSE 11 as my primary OS.&#160; By far and large, not a lot of complaints.&#160; As I do most of my work on a laptop, I tend to keep my VM&#8217;s on external HDD&#8217;s connected via USB2.&#160; I&#8217;ve been doing this for a [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick recap of days 3 &amp; 4 of running with openSUSE 11 as my primary OS.&#160; By far and large, not a lot of complaints.&#160; As I do most of my work on a laptop, I tend to keep my VM&#8217;s on external HDD&#8217;s connected via USB2.&#160; I&#8217;ve been doing this for a while now, under Windows.</p>
<p>I&#8217;m not to sure I&#8217;m a big fan of how openSUSE mounts (or tries to mount) my external HDD.&#160; It just doesn&#8217;t seem as&#8230;seamless&#8230;as how Windows XP does it.&#160; I&#8217;m use to just plugging in my external HDD, and not worrying about it until it&#8217;s time to disconnect.&#160; openSUSE seems to get a big confused with automounting, and I always seem to have to help it along.&#160; It&#8217;s something I can live with for now. </p>
<p>The other thing I notice is that openSUSE doesn&#8217;t seem to want to share the sound card with VMware.&#160; I&#8217;m getting more than a few alerts from VMware that the sound card is not available and can&#8217;t be used.&#160; Again, nothing to critical &#8211; for now.</p>
<p>The third thing I&#8217;m noticing is that some HDD enclosures seem to work better than others.&#160; I&#8217;m noticing that at least one HDD enclosure (a SmartDisk FireLite with a 250GB HDD inside) doesn&#8217;t seem to want to consistently and reliably work.&#160; I did have VMware (and openSUSE) complain that they could not write that particular HDD as it could no longer be found.</p>
<p>So far, I am pleased with how Linux is handling NTFS as well.&#160; I remember back five or six years ago that NTFS support for Linux was pretty much read-only.&#160; Read-write was for people who were delusionally insane or who go to the same hair stylist as Justice Grey.</p>
<p>A couple of lessons learned:</p>
<ul>
<li>Get lots of disk space.&#160; I&#8217;m thinking it may be time to get a 320GB HD for my laptop, and keeping my &quot;working&quot; VM&#8217;s there.&#160; I&#8217;d have something like a 100 GB partition for Windows XP, and then 220GB for openSUSE. </li>
<li>Backups &#8211; I&#8217;m very happy that I made copies of my VM&#8217;s and worked off those.&#160; </li>
<li>Fear not the command line.&#160; But if you&#8217;re a *nix guys, you&#8217;re probably there already. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/06/25/the-experiment-days-3-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Experiment Begins</title>
		<link>http://www.opgenorth.net/2008/06/22/the-experiment-begins/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-experiment-begins</link>
		<comments>http://www.opgenorth.net/2008/06/22/the-experiment-begins/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 06:59:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/06/22/the-experiment-begins/</guid>
		<description><![CDATA[I&#8217;ve decided to try a little experiment, and see how things will go, computing-wise, if I minimize my dependence on Windows.&#160; Now, I don&#8217;t want to run out and buy a Mac (not yet, anyway), so I&#8217;m taking a middle ground. I first repartitioned my hard drive (thanks gparted), and set aside a 15GB partition.&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve decided to try a little experiment, and see how things will go, computing-wise, if I minimize my dependence on Windows.&#160; Now, I don&#8217;t want to run out and buy a Mac (not yet, anyway), so I&#8217;m taking a middle ground.</p>
<p>I first repartitioned my hard drive (thanks <a href="http://gparted.sourceforge.net/">gparted</a>), and set aside a 15GB partition.&#160; On this partition, I installed <a href="http://software.opensuse.org/">OpenSUSE 11</a>.</p>
<p>My plan is to run <a href="http://software.opensuse.org/">OpenSUSE 11</a> as the host OS, and then use <a href="http://www.vmware.com">VMware</a> to run VM&#8217;s for my work and such.</p>
<p>I&#8217;m curious as to how it will work out.&#160; I know the one hurdle I would like to come is the stupid DRM that Apple iTunes uses.&#160; Anybody have some suggestions, so I can do this while it&#8217;s still legal to format-shift in Canada (or perhaps I should spell it Kanada if bill C-61 passes).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/06/22/the-experiment-begins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D-Day</title>
		<link>http://www.opgenorth.net/2008/06/06/d-day/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=d-day</link>
		<comments>http://www.opgenorth.net/2008/06/06/d-day/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 14:22:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/06/06/d-day/</guid>
		<description><![CDATA[Today is the 64th anniversary of D-Day.&#160; If you are a Canadian, take a moment today and read up about 3rd Canadian Infantry Division and the 14, 000 Canadians which went ashore at Juno Beach (the 2nd most heavily defended beach of the invasion). Likewise, if you&#8217;re British, I would suggest taking a moment today [...]]]></description>
			<content:encoded><![CDATA[<p>Today is the 64th anniversary of D-Day.&#160; If you are a Canadian, take a moment today and read up about 3rd Canadian Infantry Division and the 14, 000 Canadians which went ashore at Juno Beach (the 2nd most heavily defended beach of the invasion). </p>
<p>Likewise, if you&#8217;re British, I would suggest taking a moment today and reading up on Sword and Gold beach. </p>
<p>And, if you are American, then perhaps read up on Utah and Omaha beach (the most heavily defended beach of the whole invasion).&#160; And no, watching <a href="http://www.imdb.com/title/tt0120815/">Saving Private Ryan</a> doesn&#8217;t count.</p>
<p>Granted military history (which I read a lot of) can be kind of boring and slow sometimes, but D-Day was a very important day in the 20th century, and some of the troops involved had been training for almost a year for just this one day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/06/06/d-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Web Services and jQuery/AJAX</title>
		<link>http://www.opgenorth.net/2008/05/22/asp-net-web-services-and-jqueryajax/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=asp-net-web-services-and-jqueryajax</link>
		<comments>http://www.opgenorth.net/2008/05/22/asp-net-web-services-and-jqueryajax/#comments</comments>
		<pubDate>Fri, 23 May 2008 06:22:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/05/22/asp-net-web-services-and-jqueryajax/</guid>
		<description><![CDATA[As far as web developer&#8217;s go, I&#8217;ll freely admit that my Javascript is not one of my strong points.&#160; I don&#8217;t have a real good reason for this, it&#8217;s just that over the past few years I haven&#8217;t had much call/need to polish and hone my Javascript skills.&#160; Recently I discovered jQuery, and I must [...]]]></description>
			<content:encoded><![CDATA[<p>As far as web developer&#8217;s go, I&#8217;ll freely admit that my Javascript is not one of my strong points.&#160; I don&#8217;t have a real good reason for this, it&#8217;s just that over the past few years I haven&#8217;t had much call/need to polish and hone my Javascript skills.&#160; Recently I discovered <a href="http://www.jquery.com">jQuery</a>, and I must say that I wish I had know about this library earlier.&#160; The more I use <a href="http://www.jquery.com">jQuery</a>, the more I like it.&#160; The simple things are simple, and the hard things are possible.&#160; Take calling a simple webservice when the user clicks a button on a form.</p>
<p>Client side, the user would click on a button in their browser, in order to &quot;check out&quot; or &quot;check in&quot; &#8211; pretty simple stuff.&#160; Click a button, update a record in the database.&#160; I wanted this done via AJAX, as the page itself is pretty heavy with data, and I didn&#8217;t want to go through the whole page lifecycle.&#160; I spent some time Googling how to do this on the web, but I didn&#8217;t find anything that seemed to be suitable for something as simple as this.</p>
<p>So, enough boring stuff, on with the issue.&#160; In my current application the ASP.NET web service that the client should call looks something like:</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">[ScriptService]
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> CampaignProductCheckoutService : WebService, ICampaignProductCheckoutService
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">{
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  [WebMethod]
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> CheckIn(<span style="color: #0000ff">int</span> campaignProductId, <span style="color: #0000ff">int</span> loginId)
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #008000">// Do something...</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px"></pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  [WebMethod]
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> CheckOut(<span style="color: #0000ff">int</span> campaignProductId, <span style="color: #0000ff">int</span> loginId)
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #008000">// Do something...</span>
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">}</pre>
</pre>
<p>Pretty simple webservice, nothing fancy.&#160; Here is the corresponding Javascript on the browser:</p>
<pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px">
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">$.ajax({
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  type: &quot;<span style="color: #8b0000">POST</span>&quot;,
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  url: &quot;<span style="color: #8b0000">CampaignProductCheckoutService.asmx/CheckOut</span>&quot;,
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  data: &quot;<span style="color: #8b0000">campaignProductId=3&amp;loginId=4</span>&quot;,
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  beforeSend: <span style="color: #0000ff">function</span>(xhr) {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    xhr.setRequestHeader(&quot;<span style="color: #8b0000">Content-Length</span>&quot;, &quot;<span style="color: #8b0000">campaignProductId=3&amp;loginId=4</span>&quot;.<span style="color: #0000ff">length</span>);
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    $(&quot;<span style="color: #8b0000">#progressBarContainer</span>&quot;).show();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  },
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  dataType: &quot;<span style="color: #8b0000">xml</span>&quot;,
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  complete: <span style="color: #0000ff">function</span> (xhr, msg) {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    $(&quot;<span style="color: #8b0000">#progressBarContainer</span>&quot;).hide();
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">if</span> (xhr.<span style="color: #0000ff">status</span> == 200) {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">      <span style="color: #0000ff">alert</span>(&quot;<span style="color: #8b0000">Happy Times!</span>&quot;);
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    <span style="color: #0000ff">else</span> {
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">      <span style="color: #0000ff">alert</span>(&quot;<span style="color: #8b0000">Wailing and gnashing of teeth!</span>&quot;);
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">    }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">  }
</pre>
<pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&#39;Courier New&#39;,courier,monospace; font-size: 12px">});</pre>
</pre>
<p>This looks busy, but in reality, it isn&#8217;t. Now, for a detailed explanation of what is going on here, I&#8217;d suggest reading the book <a href="http://www.amazon.ca/gp/product/1933988355?ie=UTF8&amp;tag=opgenorthne08-20&amp;linkCode=as2&amp;camp=15121&amp;creative=330641&amp;creativeASIN=1933988355">jQuery in Action</a><img border="0" alt="" src="http://www.assoc-amazon.ca/e/ir?t=opgenorthne08-20&amp;l=as2&amp;o=15&amp;a=1933988355" width="1" height="1" />.&#160; It is a most helpful book for learning jQuery.</p>
<p>Anyway, here is a quick rundown of what is going on:&#160; the $.ajax is a jQuery method that will perform the AJAX call, using the parameters that we provide it.&#160; jQuery will perform an HTTP post to web service specified in url.&#160; As part of the POST request, you can see that we&#8217;re passing in the parameters for the webservice call.&#160; So far, pretty straightforward.</p>
<p>The next line, beforeSend, is a javascript method that jQuery will call before it does the POST.&#160; In this case, we make sure that the request header has the length of the data being sent, and we show a progress bar to the user.&#160; The funny syntax you see there is how we select the DIV element holding our animated gif and display it to the user.</p>
<p>Your standard ASP.NET web service will return XML to the client, and we inform jQuery of that with the dataType parameter.</p>
<p>By default, jQuery will perform the AJAX call asynchronously, so in the final line we provide another Javascript callback.&#160; jQuery will call this function once the request is finished.&#160; In this case, we hide the DIV element holding the progress bar, and we check the XMLHttpRequest object that is returned from jQuery. If the status is 200, then all okay and we display a happy message.&#160; Otherwise we assume the request failed, and display a sad message to the user. </p>
<p>There you have it, a quick and dirty explanation of using jQuery to call an ASP.NET Web Service.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/05/22/asp-net-web-services-and-jqueryajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On the Functional Apex of Mainstream Build Tools in .NET</title>
		<link>http://www.opgenorth.net/2008/05/01/on-the-functional-apex-of-mainstream-build-tools-in-net/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=on-the-functional-apex-of-mainstream-build-tools-in-net</link>
		<comments>http://www.opgenorth.net/2008/05/01/on-the-functional-apex-of-mainstream-build-tools-in-net/#comments</comments>
		<pubDate>Thu, 01 May 2008 07:46:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2010/05/01/on-the-functional-apex-of-mainstream-build-tools-in-net/</guid>
		<description><![CDATA[Wordy title.  To wordy.  Kind of like build files these days. I remember when I first discovered Ant, and then Nant* .  I was pretty happy, as it allow a decent way to compile my Java (and C#) without using make files.  Life was good as I could finally introduce some structure into HOW code [...]]]></description>
			<content:encoded><![CDATA[<p>Wordy title.  To wordy.  Kind of like build files these days.</p>
<p>I remember when I first discovered Ant, and then <a href="http://nant.sourceforge.net">Nant</a>* .  I was pretty happy, as it allow a decent way to compile my Java (and C#) without using make files.  Life was good as I could finally introduce some structure into HOW code was compiled.  The build process was no longer using whatever &#8220;build&#8221; command the IDE exposed, hoping that I didn&#8217;t forget a compiler directive or a file or a reference to some other library along the way.  Other programmers could also compile the code with out fear as well.  Having a tool like Nant is pretty crucial to the whole concept of continuous integration.</p>
<p>Somewhere along the way, though, Nant lost it&#8217;s shine.  It isn&#8217;t to hard to find these monster Nant scripts with all kinds of crazy things happening inside them.  Trying to work with these files can be a bit of a burden, to say the least.</p>
<p>This takes me back to the title:  it seems to me that build tools like Nant have kind of peaked, functionally speaking.  What does that mean?  We can always add more tasks (created in a real programming language) to do things for us, but in a lot of ways Nant is constrained by the fact that it is just XML.  We can always add tasks to Nant, but somethings just can&#8217;t be handled by out of the box, one size fits all tasks from Nant (or <a href="http://nantcontrib.sourceforge.net">NantContrib</a>).  As soon as you run into those things, you need to start writing code.  XML is good for config files (to a point).  It&#8217;s bad for programming logic.  It is not at all uncommon to see in build files if statements doing all kinds of things.  We don&#8217;t need to (and should not) make XML into another programming language. </p>
<p>I spent a bit of time tonight playing with <a href="http://code.google.com/p/boo-build-system/">Bake</a>.  For those who don&#8217;t know, <a href="http://code.google.com/p/boo-build-system/">Bake</a> is to <a href="http://boo.codehaus.org">boo</a> what <a href="http://rake.rubyforge.org">Rake</a> is to <a href="http://www.ruby-lang.org">ruby</a>.  Or, in other terms, think of a build system that is actually based on a programming language, and not a configuration file.  Why did I pick Bake?  Well, it&#8217;s boo, and I want to learn boo.  Boo is .NET, so I can leverage what I already know.  Plus, I&#8217;m reading <a href="http://www.ayende.com">Ayende&#8217;</a>s book <a href="http://www.manning.com/rahien/">Building Domain Specific Languages in Boo</a>, so Bake just seems to be a natural fit.</p>
<p>So far, I&#8217;m liking it.  In the span of a couple hours, I managed to figure out how to create a quick bake script (~ 40 lines of boo) to compile some code.  I&#8217;d say that this script more readable (or soluble, to use the words of Scott Bellware) when compared to a Nant script.  Being pretty new, Bake doesn&#8217;t have as many tasks as Nant.  However, it does seem pretty easy to create tasks for Bake.  Plus, I have all the expressiveness of a programming language available to me now</p>
<p>I did have one glitch that is worth mentioning:  the task to compile my code was using the <a href="http://code.google.com/p/boo-build-system/issues/detail?id=3">CSC.EXE from .NET 2.0</a>.  This is a problem when you&#8217;re working with a .NET 3.5 codebase.  But, no fear, I hacked out a quick fix inside of about 15 minutes, and all is well again.</p>
<p>I imagine that someone soon will blog about using Rake to build your .NET projects.  I eagerly await such a post.  In the meantime, I&#8217;m going to continue on with Bake, and see if it will meet my needs.</p>
<p>* <em>NOTE:  I lump MSBuild in with NAnt as MSBuild, IMHO, is a clone of NAnt</em><em>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/05/01/on-the-functional-apex-of-mainstream-build-tools-in-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EDMUG Presentation on MonoRail</title>
		<link>http://www.opgenorth.net/2008/04/27/edmug-presentation-on-monorail/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=edmug-presentation-on-monorail</link>
		<comments>http://www.opgenorth.net/2008/04/27/edmug-presentation-on-monorail/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 22:11:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/04/27/edmug-presentation-on-monorail/</guid>
		<description><![CDATA[On Thursday, April 24, at the Edmonton .NET User&#8217;s Group, I did a presentation on MonoRail (and a bit on Windsor and ActiveRecord).&#160; Thanks to all for coming out hear me talk. I found it to be a pretty hard topic to cover in not quite 120 minutes.&#160; There is just so much to cover [...]]]></description>
			<content:encoded><![CDATA[<p>On Thursday, April 24, at the <a href="http://www.edmug.net">Edmonton .NET User&#8217;s Group</a>, I did a presentation on <a href="http://www.castleproject.org/monorail/index.html">MonoRail</a> (and a bit on <a href="http://www.castleproject.org/container/index.html">Windsor</a> and <a href="http://www.castleproject.org/activerecord/index.html">ActiveRecord</a>).&#160; Thanks to all for coming out hear me talk.</p>
<p>I found it to be a pretty hard topic to cover in not quite 120 minutes.&#160; There is just so much to cover and explain.&#160; As well, it seemed that there were a couple in the crowd that felt a bit overloaded.</p>
<p>Congratulations to Carlos for finding the spot in my sample code where &lt;technobabble&gt;dependency injection could be use to create a less-tightly coupled controller&lt;/technobabble&gt;.&#160; I was going to give him the Reshaper license for finding it, but he had already has one and so declined.&#160; It was eventually raffled off at the end of the presentation.</p>
<p>For those who wanted the code and slide deck, <a href="http://localhost/Data/Sites/1/Files/EDMUG_MonoRail_20080424.zip">here they are</a>.</p>
<p>Someone else asked for a sample <a href="http://www.castleproject.org/monorail/index.html">MonoRail</a> application that they could look to help them learn MR.&#160; Here are a couple</p>
<ol>
<li><a href="http://code.google.com/p/altnetconf/">altnetconf</a> on googlecode.&#160; This is the code for the website of the first altnetconf held in Austin, TX in October of 2007 </li>
<li><a href="http://code.google.com/p/gearblog/">Gearblog</a>:&#160; a blog build on MonoRail </li>
<li><a href="http://code.google.com/p/mr-blogengine/">mr-blogengine</a>:&#160; Another blog build on MonoRail.&#160; This code is part of a <a href="http://benl.wordpress.com/2008/03/27/incremental-development-with-monorail/">series of blog posts</a> about incremental development in MonoRail. </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/04/27/edmug-presentation-on-monorail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALT.NET Session #6: Maintaining A Framework</title>
		<link>http://www.opgenorth.net/2008/04/20/alt-net-session-6-maintaining-a-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=alt-net-session-6-maintaining-a-framework</link>
		<comments>http://www.opgenorth.net/2008/04/20/alt-net-session-6-maintaining-a-framework/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 20:28:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/04/20/alt-net-session-6-maintaining-a-framework/</guid>
		<description><![CDATA[Jeremy Miller talking about the trials and tribulations of keeping a codebase viable and useful over the past four years.&#160; A lot of tips and explanations were backed with diagrams on the whiteboard.&#160; Kind of hard to blog that stuff, so this will probably be just a collection of bullets. Lessons learned &#8211; a lot [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy Miller</a> talking about the trials and tribulations of keeping a <a href="http://structuremap.sourceforge.net/Default.htm">codebase</a> viable and useful over the past four years.&#160; A lot of tips and explanations were backed with diagrams on the whiteboard.&#160; Kind of hard to blog that stuff, so this will probably be just a collection of bullets.</p>
<p>Lessons learned &#8211; a lot of them relate back to what are considered good, OO practices:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself">DRY</a>, especially with the very small things.&#160; When Jeremy was adding support for .NET 2.0, the generic support was problematic.&#160;&#160; <br />Example:&#160; Want to resolve a Repository&lt;T&gt;.&#160; You can&#8217;t just look for the class Repository`1: i.e. was trying to resolve the class by using&#160; typeof(Repository`1).&#160; This did not work. </li>
<li><a href="http://c2.com/cgi/wiki?TellDontAsk">Tell, Don&#8217;t Ask</a>.&#160; Didn&#8217;t follow this to heavily at first, and so now effort has to be taken to rewrite code to adhere to this principle. </li>
<li>Using a lot of Double Dispatch (<em>hah!&#160; look Jeremy the picture did turn out</em>):       <br /><a href="http://www.opgenorth.net/wp-content/uploads/2010/03/SSPX0289_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="SSPX0289_2" border="0" alt="SSPX0289_2" src="http://www.opgenorth.net/wp-content/uploads/2010/03/SSPX0289_2_thumb.png" width="244" height="222" /></a> </li>
<li>If you need to refactor, do it now.&#160; Procrastination only makes it (refactoring) harder and more costly. </li>
<li>If you want to build a .NET framework and keep it around for four to five years, you should probably learn a bit about the fundamentals of .NET. </li>
<li>Small steps, frequent commits to source code. </li>
<li>Good solid battery of unit tests really helps with major changes. </li>
<li>Moving more towards coarser grained tests.&#160; Does the test check the functionality?&#160; Not to worried about the intermediate steps.
<ul>
<li>Assertions based on side effects really don&#8217;t work well.&#160; Not very expressive, sometimes hard to figure out what what you&#8217;re trying to test. </li>
</ul>
</li>
<li>It helps have tooling inside your tests in order to help you quickly create tests, especially the difficult to setup/create tests.&#160; Will result in a faster feedback cycle.&#160; This infrastructure is more strategic, can be very help. </li>
<li>Jeremy recommends &quot;Pragmatic Programmers&quot; </li>
</ul>
<p>Brief discussion about where to start learning all these pattern.&#160; Advice is given to learn principles first (DRY, OCP, SRP, SOC, etc) as this will greatly help with the understanding and proper use of design patterns.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/04/20/alt-net-session-6-maintaining-a-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ALT.NET Session #5:  Mono &#8211; Not Just For Linux</title>
		<link>http://www.opgenorth.net/2008/04/19/alt-net-session-5-mono-not-just-for-linux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=alt-net-session-5-mono-not-just-for-linux</link>
		<comments>http://www.opgenorth.net/2008/04/19/alt-net-session-5-mono-not-just-for-linux/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 14:47:00 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mono]]></category>

		<guid isPermaLink="false">http://www.opgenorth.net/2008/04/19/alt-net-session-5-mono-not-just-for-linux/</guid>
		<description><![CDATA[Joe starts polling to see what people want to talk about.&#160; Most seem to be interest the libraries for Mono (being that they also work on Windows/.NET.&#160; So, Joe starts talking about libraries for/from Mono. Mono.Cecil.&#160; For all your reflecting and assembly modification needs. Mono.Addins.&#160; I&#8217;ve been looking at this off and on today, and [...]]]></description>
			<content:encoded><![CDATA[<p>Joe starts polling to see what people want to talk about.&#160; Most seem to be interest the libraries for Mono (being that they also work on Windows/.NET.&#160; So, Joe starts talking about libraries for/from Mono. </p>
<ol>
<li><a href="http://www.mono-project.com/Cecil">Mono.Cecil</a>.&#160; For all your reflecting and assembly modification needs. </li>
<li><a href="http://www.mono-project.com/Mono.Addins">Mono.Addins</a>.&#160; I&#8217;ve been looking at this off and on today, and I have to admit it looks pretty intriguing </li>
<li><a href="http://www.mono-project.com/Rocks">Mono.Rocks</a>:&#160; Handy extension methods. </li>
<li><a href="http://www.mono-project.com/Mono.Zeroconf">Mono.Zeroconf</a>: Zero configuration networking library </li>
<li><a href="http://www.ndesk.org/DBusSharp">DBus#</a>:&#160; A C# implementation of <a href="http://www.freedesktop.org/wiki/Software/dbus">D-Bus</a>. </li>
<li><a href="http://www.mono-project.com/MonoCurses">MonoCurses</a>: An API for console based applications </li>
<li>GTK# vs Windows:
<ul>
<li>My suggestion is to consider the target environment.&#160; If you targeting Windows, stick with WinForms.&#160; If you&#8217;re targetting Linux/Mac, go with GTK#.&#160; </li>
<li>Another issue that might influence your decision is that the documentation for GTK# is pretty sketchy, not very good. </li>
</ul>
</li>
<li><a href="http://www.mono-project.com/IOMap">IOMap</a>.&#160; Turning this flag on, will help you with some of the cross-platform development issues.&#160; This is a portable library that will help resolve things like directory seperators, case sensitivity in paths, and that sort of thing. </li>
</ol>
<p>A short session, which isn&#8217;t bad.&#160; Gives me a chance to float around to check out some other things.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.opgenorth.net/2008/04/19/alt-net-session-5-mono-not-just-for-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

