<?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: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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>thinking in geek</title>
	
	<link>http://joshrobb.com/blog</link>
	<description>tagline's are so web2.0</description>
	<lastBuildDate>Fri, 11 Mar 2011 07:17:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/joshrobb/KEfj" /><feedburner:info uri="joshrobb/kefj" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>YouTrack vi keyboard navigation (j/k and h/l)</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/DzRqQ2FRDhM/</link>
		<comments>http://joshrobb.com/blog/2011/03/11/youtrack-vi-keyboard-navigation-jk-and-hl/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 07:17:21 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=103</guid>
		<description><![CDATA[Youtrack is an awesome bug tracker. One of it&#8217;s best features is that it can be (almost) entirely keyboard driven. Unfortunately &#8211; Jetbrains in their wisdom did not adopt god&#8217;s designated keys for moving up and down lists j/k &#8211; instead opting to use the cursor keys &#8211; forcing users to move their hands from [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jetbrains.com/youtrack/">Youtrack</a> is an awesome bug tracker. One of it&#8217;s best features is that it can be (almost) entirely keyboard driven. </p>
<p>Unfortunately &#8211; Jetbrains in their wisdom did not adopt god&#8217;s designated keys for moving up and down lists j/k &#8211; instead opting to use the cursor keys &#8211; forcing users to move their hands from the home row. This has been requested and turned down by the team in <a href="http://youtrack.jetbrains.net/issue/JT-565?projectKey=JT">JT-565</a> and <a href="http://youtrack.jetbrains.net/issue/JT-5687">JT-5687</a>.</p>
<p>I&#8217;m a long standing user of Gmail which uses j/k for moving up and down the list of messages &#8211; and it&#8217;s difficult to have to go back to moving my hands around. After a couple of days &#8211; I decided that a greasemonkey script was called for. </p>
<p>No warranty is implied or given &#8211; but this works for me (at least a little bit): <a href='http://joshrobb.com/blog/wp-content/uploads/2011/03/youtrackvi.user_.js'>youtrackvi.user.js</a></p>
<p>You&#8217;ll need to update the @match with your local youtrack url. </p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/DzRqQ2FRDhM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2011/03/11/youtrack-vi-keyboard-navigation-jk-and-hl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2011/03/11/youtrack-vi-keyboard-navigation-jk-and-hl/</feedburner:origLink></item>
		<item>
		<title>Localizing asp.net applications</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/60j2McMeMmI/</link>
		<comments>http://joshrobb.com/blog/2010/10/30/localizing-asp-net-applications/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 12:24:40 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[l10n]]></category>
		<category><![CDATA[localization]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=100</guid>
		<description><![CDATA[I&#8217;ve recently had to localize a large software as a service application to support multiple european languages. Overall this was pretty straight forward &#8211; because I found a couple of really useful tools. Resex &#8211; This is a resource file editor. It lets you edit a set of resource files side by side &#8211; which [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently had to localize a large software as a service application to support multiple european languages. Overall this was pretty straight forward &#8211; because I found a couple of really useful tools. </p>
<p><a href="http://resex.codeplex.com/">Resex</a> &#8211; This is a resource file editor. It lets you edit a set of resource files side by side &#8211; which is very helpful when your trying to figure out what&#8217;s been translated and whats still to got. This is especally important when your doing the first translation pass through you app pulling literal strings out of code. </p>
<p><a href="http://resourcerefactoring.codeplex.com/">Resource Refactoring Tool</a> &#8211; a super easy to use Visual Studio addin which adds a Refactor to Resource refactoring to the ide. It doesn&#8217;t currently support any Web project types &#8211; but it was still really useful for class library projects. </p>
<p>I was out of time to add Web project support to the Resource Refactoring Tool &#8211; so I ended up writing a VS macro to help with the localization of .aspx pages. This was pretty specific to my environment &#8211; but it worked well enough. </p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/60j2McMeMmI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2010/10/30/localizing-asp-net-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2010/10/30/localizing-asp-net-applications/</feedburner:origLink></item>
		<item>
		<title>git svn on windows speedup now in git “next” branch”</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/vziIRtnrVRM/</link>
		<comments>http://joshrobb.com/blog/2010/03/01/git-svn-on-windows-speedup-now-released-in-git-1-7-0-1/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 12:12:50 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git scm]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=86</guid>
		<description><![CDATA[Update: This page incorrectly stated that this patch was included in git 1.7.0.1. It&#8217;s not! It&#8217;s in the git repository&#8217;s &#8220;next&#8221; branch &#8211; which will eventually become the git 1.7.2 series. I&#8217;ll update again when this is released. The lovely people on the git mailing list have accepted my patch to include this speedup in [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:  </strong> This page incorrectly stated that this patch was included in git 1.7.0.1. It&#8217;s not! It&#8217;s in the git repository&#8217;s &#8220;next&#8221; branch &#8211; which will eventually become the git 1.7.2 series. I&#8217;ll update again when this is released. </p>
<p>The lovely people on the <a href="mailto:git@vger.kernel.org">git mailing list</a> have accepted my <a href="/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/">patch</a> to include this speedup in the main git distribution. (It&#8217;s in git&#8217;s &#8220;next&#8221; branch and will probably be released as 1.7.2 so it&#8217;s not yet included in the latest msysgit release). </p>
<p>It lives <a href="http://git.kernel.org/?p=git/git.git;a=commit;h=d32fad2b89c81ca29128722e0e2f5985426e5e7a">here</a>.</p>
<p>It didn&#8217;t take long to figure out how to package it up using git format-patch once I read <a href="http://git.kernel.org/?p=git/git.git;a=blob;f=Documentation/SubmittingPatches;h=c686f8646b465860c8a096241797709366cc4dc1;hb=HEAD">SubmittingPatches.txt</a>. </p>
<p>The whole thing was much less scary than I imagined. Thanks to Johannes Schindelin (of <a href="http://code.google.com/p/msysgit/">msysgit</a>) for nursing me through the process as a complete newb!</p>
<p>This was my first contribution to an OSS project using git (ironically &#8211; the project itself was git) &#8211; and I&#8217;m _amazed_ how much smoother the process was than using SVN/patch files. </p>
<p>I&#8217;m now more optimistic that <a href="http://www.castleproject.org/">Castle Project&#8217;s</a> move to git hub will bring some big benefits.</p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/vziIRtnrVRM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2010/03/01/git-svn-on-windows-speedup-now-released-in-git-1-7-0-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2010/03/01/git-svn-on-windows-speedup-now-released-in-git-1-7-0-1/</feedburner:origLink></item>
		<item>
		<title>Speeding up git svn on Windows (win32)</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/oHDrshVCXAU/</link>
		<comments>http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 11:32:51 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[git]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=72</guid>
		<description><![CDATA[Update: This fix is now included in git releases 1.7.0.1 and greater &#8211; for more info &#8211; click here. Update 2: This page incorrectly stated that this patch was included in git 1.7.0.1. It&#8217;s not! It&#8217;s in the git repository&#8217;s &#8220;next&#8221; branch &#8211; which will eventually become the git 1.7.2 series. I&#8217;ll update again when [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:  </strong> This fix is now included in git <del datetime="2010-06-02T13:35:40+00:00">releases 1.7.0.1 and greater</del> &#8211; for more info &#8211; <a href="/blog/2010/03/01/git-svn-on-windows-speedup-now-released-in-git-1-7-0-1/">click here</a>.</p>
<p><strong>Update 2:  </strong> This page incorrectly stated that this patch was included in git 1.7.0.1. It&#8217;s not! It&#8217;s in the git repository&#8217;s &#8220;next&#8221; branch &#8211; which will eventually become the git 1.7.2 series. I&#8217;ll update again when this is released. </p>
<p>Some people have noticed that using git svn (in my case msysgit) on Windows VM&#8217;s<sup><a href="http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/#footnote_0_72" id="identifier_0_72" class="footnote-link footnote-identifier-link" title="VMWare Fusion WinXP vm under OSX 10.5. This is probably important as people not using git svn on a VM don&amp;#8217;t seem to sufffer such huge perf problems.">1</a></sup> can be incredibly slow. I&#8217;m one of those people. </p>
<p>Running a no-op rebase (i.e. there are no changes @ the svn end) looks like this.<sup><a href="http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/#footnote_1_72" id="identifier_1_72" class="footnote-link footnote-identifier-link" title="[1] My svn server is 350ms away &amp;#8211; AucklandLondon and on a VPN &amp;#8211; I&amp;#8217;m using the SVN protocol to access it &amp;#8211; SVN seems fastest of the SVN protocols.">2</a></sup></p>
<p><code>$ time perl git svn rebase<br />
Current branch master is up to date.</p>
<p>real    2m56.750s<br />
user    0m3.129s<br />
sys     2m39.232s</code></p>
<p>Nearly 3 minutes to verify that my local git svn branch is up to date!</p>
<p>I used to (_many_ years ago) &#8211; do quite a bit of perl for for sysadmin stuff. I&#8217;ve already paid for those sins but this was slow enough that I wanted to see what was causing the problems. </p>
<p>Running perl -d:DProf and collecting a basic trace gave me some interesting info.<sup><a href="http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/#footnote_2_72" id="identifier_2_72" class="footnote-link footnote-identifier-link" title="Total Elapsed Time = 140.4030 Seconds
  User+System Time = 3.919008 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 77.7   3.046  3.046     12   0.2538 0.2538  DynaLoader::dl_load_file
 9.16   0.359  0.359      1   0.3590 0.3590  main::read_repo_config
 6.38   0.250  0.250     18   0.0139 0.0139  Git::_command_common_pipe
 1.22   0.048  3.063     40   0.0012 0.0766  SVN::Base::import
 1.20   0.047  0.156     22   0.0021 0.0071  main::BEGIN
 0.41   0.016  0.016      4   0.0040 0.0040  Exporter::as_heavy
 0.41   0.016  0.032      7   0.0023 0.0046  IO::File::BEGIN
 0.41   0.016  0.016     11   0.0015 0.0015  Git::SVN::BEGIN
 0.41   0.016  0.016      7   0.0023 0.0023  Git::SVN::rev_map_max_norebuild
 0.41   0.016  0.016      7   0.0023 0.0023  SVN::Git::Fetcher::BEGIN
 0.38   0.015  0.015      1   0.0150 0.0150  warnings::BEGIN
 0.38   0.015  0.015      7   0.0021 0.0021  Git::BEGIN
 0.38   0.015  0.015     13   0.0012 0.0011  Error::subs::try
 0.00   0.000  0.000      1   0.0000 0.0000  XSLoader::bootstrap_inherit
 0.00   0.000  0.000      1   0.0000 0.0000  Exporter::Heavy::heavy_export_tags

">3</a></sup> SVN::Base::import (essentially a constructor) was importing all the svn dll entry points (using DynaLoader) every time git svn started up &#8211; which was extremely slow in my environment.</p>
<p>On a hunch<sup><a href="http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/#footnote_3_72" id="identifier_3_72" class="footnote-link footnote-identifier-link" title="git-svn shell&amp;#8217;s out to itself a bunch so it seemed an obvious first step. ">4</a></sup> I moved the code which was require&#8217;ing SVN::Base::import to run lazily (rather than at git-svn startup). </p>
<p><code>$ time perl /libexec/git-core/git-svn rebase<br />
Current branch master is up to date.</p>
<p>real    0m33.407s<br />
user    0m1.409s<br />
sys     0m23.054s<br />
</code><br />
6 times faster! </p>
<p>&#8220;git svn dcommit&#8221; sped up even more. Previously:</p>
<p><code>$ time perl /libexec/git-core/git-svn.orig dcommit -n<br />
Committing to svn://XXXXX/trunk ...<br />
diff-tree befd87ba1b65fa7d86779c3058faf1f4886d7020~1 befd87ba1b65fa7d86779c3058faf1f4886d7020</p>
<p>real    3m7.046s<br />
user    0m3.190s<br />
sys     2m53.897s</code></p>
<p>Afterwards: </p>
<p><code>$ time perl /libexec/git-core/git-svn dcommit -n<br />
Committing to svn://XXXXX/trunk ...<br />
diff-tree befd87ba1b65fa7d86779c3058faf1f4886d7020~1 befd87ba1b65fa7d86779c3058faf1f4886d7020</p>
<p>real    0m10.312s<br />
user    0m1.109s<br />
sys     0m4.632s</code></p>
<p>19 times faster! </p>
<p>For me &#8211; this was enough for now. I&#8217;d spent more time on the issue than I had &#8211; and git svn operations were now fast enough to not totally break my workflow. </p>
<p>I&#8217;ve uploaded the patch here: <a href='http://joshrobb.com/blog/wp-content/uploads/2010/02/git-svn.patch.txt'>git-svn.patch</a></p>
<p>YMMV/No warranty expressed or implied/IANAL etc.  If it breaks your repo/application/life &#8211; don&#8217;t come crying to me. </p>
<p>Thanks to <a href="http://www.fastchicken.co.nz">Nic Wise</a> for testing this for me and validating my timing data etc. </p>
<ol class="footnotes"><li id="footnote_0_72" class="footnote">VMWare Fusion WinXP vm under OSX 10.5. This is probably important as people not using git svn on a VM don&#8217;t seem to sufffer such huge perf problems.</li><li id="footnote_1_72" class="footnote">[1] My svn server is 350ms away &#8211; Auckland<->London and on a VPN &#8211; I&#8217;m using the SVN protocol to access it &#8211; SVN seems fastest of the SVN protocols.</li><li id="footnote_2_72" class="footnote"><code>Total Elapsed Time = 140.4030 Seconds<br />
  User+System Time = 3.919008 Seconds<br />
Exclusive Times<br />
%Time ExclSec CumulS #Calls sec/call Csec/c  Name<br />
 77.7   3.046  3.046     12   0.2538 0.2538  DynaLoader::dl_load_file<br />
 9.16   0.359  0.359      1   0.3590 0.3590  main::read_repo_config<br />
 6.38   0.250  0.250     18   0.0139 0.0139  Git::_command_common_pipe<br />
 1.22   0.048  3.063     40   0.0012 0.0766  SVN::Base::import<br />
 1.20   0.047  0.156     22   0.0021 0.0071  main::BEGIN<br />
 0.41   0.016  0.016      4   0.0040 0.0040  Exporter::as_heavy<br />
 0.41   0.016  0.032      7   0.0023 0.0046  IO::File::BEGIN<br />
 0.41   0.016  0.016     11   0.0015 0.0015  Git::SVN::BEGIN<br />
 0.41   0.016  0.016      7   0.0023 0.0023  Git::SVN::rev_map_max_norebuild<br />
 0.41   0.016  0.016      7   0.0023 0.0023  SVN::Git::Fetcher::BEGIN<br />
 0.38   0.015  0.015      1   0.0150 0.0150  warnings::BEGIN<br />
 0.38   0.015  0.015      7   0.0021 0.0021  Git::BEGIN<br />
 0.38   0.015  0.015     13   0.0012 0.0011  Error::subs::try<br />
 0.00   0.000  0.000      1   0.0000 0.0000  XSLoader::bootstrap_inherit<br />
 0.00   0.000  0.000      1   0.0000 0.0000  Exporter::Heavy::heavy_export_tags<br />
</code><br />
</li><li id="footnote_3_72" class="footnote">git-svn shell&#8217;s out to itself a bunch so it seemed an obvious first step. </li></ol><img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/oHDrshVCXAU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2010/02/15/speeding-up-git-svn-on-windows-win32/</feedburner:origLink></item>
		<item>
		<title>ASP.NET == Usability disaster?</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/O7luXxRFIMY/</link>
		<comments>http://joshrobb.com/blog/2008/09/29/aspnet-usability-disaster/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 09:24:08 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[web architecture]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=18</guid>
		<description><![CDATA[[This has been in the queue for a long time - over 12 months - codebetter just tipped me over the edge!] Peter Van Dijck asks: Iâ€™ve only worked twice with companies using .NET for web interfaces, and in both cases the UI was a disaster and the usability problems guaranteed lots of consulting hours.. [...]]]></description>
			<content:encoded><![CDATA[<p>[This has been in the queue for a long time - over 12 months - codebetter just tipped me over the edge!]</p>
<p><a href="http://poorbuthappy.com/ease/archives/2007/05/01/3626/3626">Peter Van Dijck asks</a>:</p>
<blockquote><p>Iâ€™ve only worked twice with companies using .NET for web interfaces, and in both cases the UI was a disaster and the usability problems guaranteed lots of consulting hours.. Why is that? Or was that a fluke? (2 cases is hardly proof of anything) I know itâ€™s possible to make usable and elegant web UI with any technology, but does .NET somehow encourage bad UI?</p></blockquote>
<p>This is a great question and in my opinion &#8211; the answer is yes. (AssumingÂ that Peter really means WebForms.) Â <img style="float:right" title="spike pit of death" src="http://www.hotkey.net.au/~marshalle/booby/pit.gif" alt="spike pit of death" width="350" height="321" /></p>
<p>This is demonstrated in so many small ways by framework defaults which are totally brain dead (__doPostBack anyone?). Rather than lead dev&#8217;s into the <a href="http://blogs.msdn.com/brada/archive/2003/10/02/50420.aspx">pit of success</a> &#8211; the framework leads devs to the spiky elephant trap of death.Â </p>
<p>Â <br />
What&#8217;s that &#8211; an example? How about the &lt;customErrors&gt; defaults. When an error occurs during processing an ASP.NET request &#8211; the <strong>default</strong>Â behaviorÂ of a new web.config is to redirect the user to another URL. This is what a new web.config looks like in VS2k5.Â </p>
<p>Â Â  Â  Â  Â &lt;customErrors mode=&#8221;RemoteOnly&#8221; defaultRedirect=&#8221;GenericErrorPage.htm&#8221;&gt;</p>
<p>Â Â  Â  Â  Â  Â  Â &lt;error statusCode=&#8221;403&#8243; redirect=&#8221;NoAccess.htm&#8221; /&gt;</p>
<p>Â Â  Â  Â  Â  Â  Â &lt;error statusCode=&#8221;404&#8243; redirect=&#8221;FileNotFound.htm&#8221; /&gt;</p>
<p>Â Â  Â  Â  Â &lt;/customErrors&gt;</p>
<div>This is really brain deadÂ behavior! Let&#8217;s count the ways:Â </div>
<div>1. There&#8217;s no way to change the HTTP status code from a html page. (E.g. &#8211; should be 404, 500 etc). This is just flat out bad &#8211; status codes are important for lots of reasons.</div>
<div>2. The <strong><em>effing</em></strong> URL will change. This makes it difficult to correct typing errors or retry a request in case of a server error (500).Â </div>
<div>3. Those files don&#8217;t even exist! You can get a 404 when the real error is a 500 because the file that your getting redirected to don&#8217;t <strong>effing</strong> exist!Â </div>
<div>This just happened to me &#8211; I was just wondering if there is a port of the monorailÂ SmartGridComponent to ASP.NET MVC. I do a Google search and get a <a href="http://devlicio.us/blogs/billy_mccafferty/archive/2008/08/10/41786.aspx">likely looking result forÂ Billy McCafferty&#8217;s blog</a>. I click on the link and I get the following page:Â </div>
<div>
<blockquote>
<div><strong>Oops something went wrong!</strong></div>
<div>Either the site is offline or an unhandled error occurred. We apologize and have logged the error. Please try your request again or if you know who your site administrator is let them know too.</div>
</blockquote>
</div>
<p>Â </p>
<p>The URL in the browsers address bar is:Â </p>
<blockquote><p>http://devlicio.us/error.htm?aspxerrorpath=/themes/blogs/default/post.aspx</p></blockquote>
<div>HOW the F$%K do I try my request again?</div>
<div>If I&#8217;ve opened this result in a new tab (which is my habbit) I&#8217;m screwed! There is no back button, refresh (F5 or whatever) just reloads the error page and will <em>never</em>Â show me the correct page.</div>
<div>If I just clicked the link &#8211; the back button takes me back to my google search where I can click on the link again &#8211; refresh is still borked.Â </div>
<p>Another example? Linkbutton? Anyone who&#8217;s tried to open a link in a new tab/window and got a blank window with a URL like:Â javascript:__doPostBack(&#8216;ctl00$Masthead1$LocaleManagement$ctl00$ctl05&#8242;,&#8221;) &#8211; knows the pain I&#8217;m talking about.Â </p>
<p>Go on &#8211; right now &#8211; go try and open a MSDN library page in different language in a new tab. (It&#8217;s the little menu up the top right where it says (e.g.): United States &#8211; English).Â </p>
<p>In my apps &#8211; I fix this by disabling customErrors and writing new error handling code which both maintains the url and returns the correct HTTP statuses &#8211; but this is code which I should not have to write. This is code which all web servers/apps need to implement correctly &#8211; it should be automatic. We shouldn&#8217;t have to write custom code to get a HTTP/404 returned when an appÂ encounters a missing file!</p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/O7luXxRFIMY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/09/29/aspnet-usability-disaster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/09/29/aspnet-usability-disaster/</feedburner:origLink></item>
		<item>
		<title>A week on mars.</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/M373OODthgs/</link>
		<comments>http://joshrobb.com/blog/2008/07/30/a-week-on-mars/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 07:48:04 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[audio]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=61</guid>
		<description><![CDATA[[Warning -Â digressionÂ ahead] Over the last two weeks I&#8217;ve been trying to buy some speakers for (2 channel) music listening. Â I&#8217;ve listened to a lot of speakers:Â  Aurum Cantus V3MÂ Â  Kef XQ20 Dynaudio Focus 140Â  Krix PhoenixÂ  B&#38;W 684Â Â  B&#38;W 683 B&#38;W CM1Â  I&#8217;ve finally chosen someÂ Jamo c803&#8242;s. The best floorstanding speaker I listened to was [...]]]></description>
			<content:encoded><![CDATA[<p>[Warning -Â digressionÂ ahead]</p>
<p>Over the last two weeks I&#8217;ve been trying to buy some speakers for (2 channel) music listening. Â I&#8217;ve listened to a lot of speakers:Â </p>
<ul>
<li><a href="http://www.aurumcantus.com/aurumcantu-loudspeaker/loudspeaker_v3m.htm">Aurum Cantus V3M</a>Â Â </li>
<li><a href="http://www.kef.com/products/xq07/global/productRange_xq20/default.aspx">Kef XQ20</a></li>
<li><a href="http://www.dynaudio.com/eng/systems/lines/focus/focus140.php">Dynaudio Focus 140</a>Â </li>
<li><a href="http://www.krix.com.au/Product/Detail.aspx?p=44&amp;id=59">Krix Phoenix</a>Â </li>
<li><a href="http://www.bowers-wilkins.com/display.aspx?infid=2374&amp;sc=hf">B&amp;W 684</a>Â Â </li>
<li><a href="http://www.bowers-wilkins.com/display.aspx?infid=2374&amp;sc=hf">B&amp;W 683</a></li>
<li><a href="http://www.bowers-wilkins.com/display.aspx?infid=1065&amp;sc=hf">B&amp;W CM1</a>Â </li>
</ul>
<p>I&#8217;ve finally chosen someÂ <a href="http://jamo.com/Default.aspx?ID=5908&amp;M=Shop&amp;PID=17140&amp;ProductID=17852">Jamo c803&#8242;s</a>.</p>
<p>The best floorstanding speaker I listened to was the Krix Phoenix &#8211; it was also theÂ cheapest (and locally made).Â </p>
<p>The best bookshelf was maybe V3M or the XQ20 or the Focus 140&#8242;s. They weren&#8217;t enough better to justify more than 2x the price though and since I didn&#8217;t listen to them in the same session or location &#8211; it&#8217;s possible they weren&#8217;t even better.Â </p>
<p>Anyway &#8211; it&#8217;s been interesting. It turns out that the HiFi/AV/Audiophile world is another planet. A planet where:</p>
<ul>
<li><a href="http://www.belt.demon.co.uk/tfs.html">Freezing a &#8220;mp4&#8243; player can improve the quality of the files stored on it</a></li>
<li><a href="http://www.amazon.com/Denon-AKDL1-Dedicated-Link-Cable/dp/B000I1X6PM">$500 ethernet cables improve sound quality</a></li>
<li><a href="http://www.nonamehifi.com/ShoppingNrab.php">WoodenÂ ball&#8217;s put under a CD player can &#8220;improve the sound stage by 20%&#8221;</a></li>
</ul>
<p>Best of all &#8211; many of these &#8220;subjectivists&#8221; claim that double blind testing interferes with the results.Â </p>
<p>Which is to say that after this &#8211; arguments about ORM&#8217;s seem welcome.</p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/M373OODthgs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/07/30/a-week-on-mars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/07/30/a-week-on-mars/</feedburner:origLink></item>
		<item>
		<title>The worlds atwitter…</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/0QwYljdgs8o/</link>
		<comments>http://joshrobb.com/blog/2008/06/27/the-worlds-atwitter/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 10:00:34 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=56</guid>
		<description><![CDATA[..and so am I. Somehow &#8211; twitter has clicked for me. It could be related to checking out clients and liking Twitterrific enough to keep it running.Â  It&#8217;s fair to say that twitter itself it pretty unreliable &#8211; but it doesn&#8217;t seem to matter too much. I&#8217;m living proof &#8211; somewhat available is good enough [...]]]></description>
			<content:encoded><![CDATA[<p>..and so <a href="http://twitter.com/josh_robb">am I</a>.</p>
<p>Somehow &#8211; twitter has clicked for me. It could be related to checking out clients and liking <a href="http://iconfactory.com/software/twitterrific">Twitterrific</a> enough to keep it running.Â </p>
<p>It&#8217;s fair to say that twitter itself it pretty unreliable &#8211; but it doesn&#8217;t seem to matter too much. I&#8217;m living proof &#8211; somewhat available is good enough for some apps.Â </p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/0QwYljdgs8o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/06/27/the-worlds-atwitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/06/27/the-worlds-atwitter/</feedburner:origLink></item>
		<item>
		<title>SVN 1.5</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/B7qB_iqySZ0/</link>
		<comments>http://joshrobb.com/blog/2008/06/25/svn-15/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 12:45:42 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/?p=55</guid>
		<description><![CDATA[Well &#8211; (finally) Subversion 1.5 is out!Â  For the first time svn has built in support for repeated merges without spuriousÂ conflicts or manually managing the list of previously merged revisions. This is _fantastic_ news. The basis of the merge tracking feature in 1.5 was svnmerge.py which means that many svn users will already have a [...]]]></description>
			<content:encoded><![CDATA[<p>Well &#8211; (finally) <a href="http://subversion.tigris.org/svn_1.5_releasenotes.html">Subversion 1.5</a> is out!Â </p>
<p>For the first time svn has built in support for repeated merges without spuriousÂ conflicts or manually managing the list of previously merged revisions.</p>
<p>This is <em>_fantastic_</em> news. The basis of the merge tracking feature in 1.5 was svnmerge.py which means that many svn users will already have a reasonable idea how it works. (List of merged revisions are stored in svn properties on a branch).Â </p>
<p>I&#8217;ve been watching the development of svn 1.5 for the last 18 months (give or take) crying everyday that I have to manually manage merging work as I oggle the feature list.Â </p>
<p><a href="http://tortoisesvn.net/node/331">TortoiseSVN</a>Â has aÂ significantlyÂ enhanced release as well. I&#8217;m particularlyÂ excited about this because it supports caching the change log which will make a huge difference for me given that my svn server it 2 continents and 300ms away.</p>
<p>It also looks like there may be some progress on cleaning up the working copy implementation.<sup><a href="http://joshrobb.com/blog/2008/06/25/svn-15/#footnote_0_55" id="identifier_0_55" class="footnote-link footnote-identifier-link" title="http://subversion.tigris.org/roadmap.html">1</a></sup>. Which would involve fixing the whole every folder with .svn folders problem (a la git or svk).Â </p>
<ol class="footnotes"><li id="footnote_0_55" class="footnote"><a href="http://subversion.tigris.org/roadmap.html">http://subversion.tigris.org/roadmap.html</a></li></ol><img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/B7qB_iqySZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/06/25/svn-15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/06/25/svn-15/</feedburner:origLink></item>
		<item>
		<title>The only way is up</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/ww_N7uEtlOY/</link>
		<comments>http://joshrobb.com/blog/2008/06/13/the-only-way-is-up/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 07:23:50 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2008/06/13/the-only-way-is-up/</guid>
		<description><![CDATA[From anÂ altnetÂ list discussion about Team Build (part of TFS):Â Â  On Thu, Jun 12, 2008 at 7:35 PM, David Kean wrote:Â Â  Team Build is more than just MSBuild, it includes build management (retention, CI, drop management, etc). The next version will be even more powerful and based on Windows Workflow.Â Â  Â  On Fri, Jun 13, 2008 [...]]]></description>
			<content:encoded><![CDATA[<p>From anÂ <a href="http://groups.yahoo.com/group/altdotnet">altnet</a>Â list discussion about Team Build (part of TFS):Â Â <br />
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px">On Thu, Jun 12, 2008 at 7:35 PM, David Kean wrote:Â Â </p></blockquote>
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px"><p>Team Build is more than just MSBuild, it includes build management (retention, CI, drop management, etc). The next version will be even more powerful and based on Windows Workflow.Â Â </p></blockquote>
<p>Â <br />
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px">
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px">On Fri, Jun 13, 2008 at 2:43 AM, Ayende Rahien wrote:Â </p></blockquote>
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px"><p>And here I thought that the only way to go was up.Â </p></blockquote>
<blockquote class="webkit-indent-blockquote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px"><p>Â </p></blockquote>
</blockquote>
<p>Pure gold.Â </p>
<img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/ww_N7uEtlOY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/06/13/the-only-way-is-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/06/13/the-only-way-is-up/</feedburner:origLink></item>
		<item>
		<title>Crappystrano</title>
		<link>http://feedproxy.google.com/~r/joshrobb/KEfj/~3/WJGVw5vUnCI/</link>
		<comments>http://joshrobb.com/blog/2008/01/02/crappystrano/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 23:37:42 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[deployment]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2008/01/02/crappystrano/</guid>
		<description><![CDATA[Note: After I started this series Jeremy Miller has posted a very relevant article about source code hygiene issues. (This is the third part in a series &#8211; you should probably read part one and two first.) Today I&#8217;ll present a sanitised copy of my deployment script. I&#8217;ve based the design of deploy.cmd on Capistrano1 [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: After I started this series <a href="http://codebetter.com/blogs/jeremy.miller/">Jeremy Miller</a> has posted a very relevant <a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/12/06/do-you-really-know-where-that-code-has-been.aspx">article about source code hygiene</a> issues. </em></p>
<p>(This is the third part in a series &#8211; you should probably read <a href="/blog/2007/11/30/automated-deployment-ci-for-operations/">part one</a> and <a href="/blog/2007/12/12/a-deployment-process/">two</a> first.)</p>
<p>Today I&#8217;ll present a sanitised copy of my deployment script.  I&#8217;ve based the design of deploy.cmd on Capistrano<sup><a href="http://joshrobb.com/blog/2008/01/02/crappystrano/#footnote_0_46" id="identifier_0_46" class="footnote-link footnote-identifier-link" title="http://www.capify.org/ &amp;#8211; I know some people are going to say &amp;#8211; just use Capistrano. There are two reasons for me not to: 1. I&amp;#8217;m the only person in my team familiar with Ruby. 2. Even if you argue that they don&amp;#8217;t need to understand ruby to run a cap deployment recipe &amp;#8211; they still have to have it installed. It&amp;#8217;s just yet another dependency which I&amp;#8217;m not willing to take currently. ">1</a></sup> . The script is nicknamed &#8220;Crappystrano&#8221;. Here&#8217;s the output (pretty htmlized <a href="/blog/wp-content/uploads/2007/11/deploy.html">source is here</a>):</p>
<blockquote><p>&gt;deploy.cmd</p>
<p>Crappystrano &#8211; the shit script which (sort of) deploys stuff</p>
<p>deploy.cmd staging|live [branchpath]</p></blockquote>
<p>Here&#8217;s breakdown of the steps<sup><a href="http://joshrobb.com/blog/2008/01/02/crappystrano/#footnote_1_46" id="identifier_1_46" class="footnote-link footnote-identifier-link" title="This is all simplified as the actual script supports a SaaS product which has multiple instances &amp;#8211; one per client">2</a></sup> &#8211; skipping some error checking<sup><a href="http://joshrobb.com/blog/2008/01/02/crappystrano/#footnote_2_46" id="identifier_2_46" class="footnote-link footnote-identifier-link" title="noted with [E]">3</a></sup>. :</p>
<ol>
<li>Do we have the required dependencies<sup><a href="http://joshrobb.com/blog/2008/01/02/crappystrano/#footnote_3_46" id="identifier_3_46" class="footnote-link footnote-identifier-link" title="gnu zip.exe, svn">4</a></sup> on the path? If we don&#8217;t copy them to the path if they&#8217;re just 1 exe &#8211; otherwise exit with an error.</li>
<li>Check the command line parameters. We must have the environment we&#8217;re releasing to? Are we releasing from the trunk or from a SVN branch?</li>
<li>Construct a release time stamp. This is YYYYMMDDHHMMSSMS.</li>
<li>Perform a &#8220;svn export&#8221; from the trunk/branch to %tmp%\staging|live%timestamp%. [E]</li>
<li>Use msbuild to build the solution. [E]</li>
<li>Rearrange the folder structure so we only get the artefacts we need in the release package.</li>
<li>Zip up the release package using the environment name + time stamp.</li>
<li>move the release package back to the root directory of the project and delete the export from %tmp%.</li>
<li>Make a SVN tag (svn copy trunk/branch /tags/environment-timestamp).</li>
</ol>
<p>I&#8217;ve <a href="/blog/wp-content/uploads/2007/11/deploy.zip">uploaded a zip file </a>with the script and folder structure + a little readme. This is not the best way of doing things &#8211; it&#8217;s just a very lightweight way. Comments, questions, feedback etc&#8230; are gratefully received.</p>
<ol class="footnotes"><li id="footnote_0_46" class="footnote">http://www.capify.org/ &#8211; I know some people are going to say &#8211; just use Capistrano. There are two reasons for me not to: 1. I&#8217;m the only person in my team familiar with Ruby. 2. Even if you argue that they don&#8217;t need to understand ruby to run a cap deployment recipe &#8211; they still have to have it installed. It&#8217;s just yet another dependency which I&#8217;m not willing to take currently. </li><li id="footnote_1_46" class="footnote">This is all simplified as the actual script supports a SaaS product which has multiple instances &#8211; one per client</li><li id="footnote_2_46" class="footnote">noted with [E]</li><li id="footnote_3_46" class="footnote">gnu zip.exe, svn</li></ol><img src="http://feeds.feedburner.com/~r/joshrobb/KEfj/~4/WJGVw5vUnCI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2008/01/02/crappystrano/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://joshrobb.com/blog/2008/01/02/crappystrano/</feedburner:origLink></item>
	</channel>
</rss>

