<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='rssxsl.xslt' version='1.0'?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>secretGeek</title> 
<link>http://secretGeek.net/index.asp</link> 
<description>secretGeek - dot Nuts about dot Net!</description> 
<copyright>Copyright 2007 Leon Bambrick</copyright>
<language>en-au</language> 
<managingEditor>LeonBambrick@NoSpamGMAIL.com (Leon Bambrick)</managingEditor> 
<webMaster>LeonBambrick@NoSpamGMAIL.com (Leon Bambrick)</webMaster>
<atom:link href="http://secretGeek.net/rss.asp" rel="self" type="application/rss+xml" /> 
<image>
<title>secretGeek</title>
<url>http://secretGeek.net/secretgeek2_noT.gif</url>
<link>http://secretGeek.net/index.asp</link>
<width>49</width>
<height>33</height>
<description>secretGeek - dot Nuts about dot Net!</description> 
</image>
<item>
  <title>Just Wally</title>
    <link>http://www.secretGeek.net/justWally.asp</link>
    <description>
      <![CDATA[<p>The apocalypse came suddenly. Some kind of worm, virus, trojan -- some kind of <a href='http://www.goodreads.com/book/show/9763010-zero-day'>Mark Russinovich doomsday scenario</a>. It spread so fast no one had a chance to react. It lit up every computer screen, obliterating every computer user in the world. Every last worker was obliterated, right at their desk. All that remained was a tiny pile of ashes on every seat.</p>
<p>Only Wally was spared. While everyone else was at the desks working, Wally was wandering the halls, holding a coffee cup.</p>
<p><img src='http://secretGeek.net/image/wally_103418_done.strip.gif' style='padding:20px'></p>

<p>'Just Wally' is a cartoon that removes all the unneccessary elements from <a href='http://Dilbert.com'>Dilbert</a>, and leaves just the hero himself, Wally, wandering the empty building, holding meetings with himself, filling his loneliness with imagined interactions.</p>

<p><img src='http://secretGeek.net/image/wally_104571_done.strip.gif' style='padding:20px'></p>

<p>Wally has always been the truest character in Dilbert. I've met a few Dilberts in my time. I've met a few Pointed Haired Bosses. But just about everyone is at least part-Wally. And more than a few have been pure-Wally. You know who you are.</p>


<p>Some people theorise that the true story of 'Just Wally' is that Wally is the one who died. This is his limbo, wandering alone, unable to interact with the living.</p>

<p>Others say Wally has fallen into a coma. This is his extended delusion. He cannot tell dream from reality, sarcasm from seriousness. What exactly is a dream? What exactly is a joke?</p>

<p><img src='http://secretGeek.net/image/wally_109704_done.strip.gif' style='padding:20px'></p>

<p>The words of <a href='http://www.goodreads.com/book/show/5113.Franny_and_Zooey'>JD Salinger</a> are relevant here, as always.</p>

<blockquote><p>"It isn't just Wally. It could be a girl, for goodness' sake. I mean if he were a girl - somebody in my dorm, for example, - he'd have been painting scenery in some stock company all summer. Or bicycled through wales. Or taken an apartment in New York and worked for a magazine or an advertising company. It's everybody, I mean. Everything everybody does is so - I don't know, not wrong, or even mean, or even stupid, necessarily. But just so tiny and meaningless and - sad-making.</p>
<p>And the worst part is, if you go bohemian or something crazy like that, you're conforming just as much as everybody else, only in a different way."</p></blockquote> 


<p><img src='http://secretGeek.net/image/wally_104042_done.strip.gif' style='padding:20px'></p>

<h2>Tiny and meaningless and sad-making.</h2>
<p>Tiny and meaningless and sad-making. 'Just Wally' makes us stop and ponder the futility of everything we do, everything we think and everything we are.</p>

<p><img src='http://secretGeek.net/image/wally_105821.strip_done.gif' style='padding:20px'></p>



<p>In the style of <a href='http://garfieldminusgarfield.net/'>Garfield minus Garfield</a>, Just Wally plays upon the maxim of my old buddy Antoine de Saint-Exupery:</p> 
<blockquote><p>"Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away"</p></blockquote>
 
]]>
    </description>
    <pubDate>Sat, 12 May 2012 02:59:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/justWally.asp</guid>
  </item>
<item>
  <title>The Correct Order for a First Time Viewing of The Lord Of The Rings</title>
    <link>http://www.secretGeek.net/lotr_chopsuey.asp</link>
    <description>
      <![CDATA[ 
<p>After reading <a href='http://www.hanselman.com'>Scott Hanselman</a>'s post about <a href='http://www.hanselman.com/blog/TheNerdParentsGuideWhenAndHowToIntroduceYourKidsToStarWars.aspx'>introducing your younglings to Star Wars</a>, I was intrigued by the suggested <a href='http://static.nomachetejuggling.com/machete_order.html'>'Machete order'</a>
(courtey of Rod Hilton)</p>

<ul>
<li>4 - Star Wars: A New Hope</li>
<li>5 - Empire Strikes Back</li>
<li>2 - Attack of The Clones</li>
<li>3 - Revenge of the Sith</li>
<li>6 - Return of the Jedi</li>
</ul>

<p>Which lead to deep conversations with myself about which order I should use when introducing my daughers to 'The Lord of the Rings'.</p>

<p>The three films can be arranged into 6 possible non-repeating combinations:</p>

<ul>
<li>Fellowship, Towers, King</li>
<li>Fellowship, King, Towers</li>
<li>Towers, Fellowship, King</li>
<li>Towers, King, Fellowship</li>
<li>King, Fellowship, Towers</li>
<li>King, Towers, Fellowship</li>
</ul>

<p>All of which have their own pluses and minuses, but none of which would qualify as a true 'machete' reordering. </p>

<p>I finally settled on the following order, which you'll agree is the best possible version of events:</p>


<ul>
<li>1. The Two Towers -- A good story always starts in the midst of the action, and leaps past the boring parts.</li>
<li>2. The Hobbit, An Unexpected Journey -- having established the story we now move learn the origin of the Ring and Gollum.</li>
<li>3. How to Train your Dragon -- the loveable Toothless and Hiccup show us that not all dragons are nasty Smaugs.</li>
<li>3a. Read all of the books -- that way you can complain bitterly about the missing 'Scourge of the Shire' segment during:</li>
<li>4. Return of the King, Disc 2 -- 5 minutes of chucking a ring in a pit, a quick eagle ride, and two hours saying goodbye.</li>
<li>5. Return of the King, Disc 1 -- Awesome battle scene. Best war ever.</li>
</ul>

<p>I dub this the Chop-Suey Reordering, and in line with <a href='http://www.theverge.com/2012/5/7/3004697/oracle-google-trial-deadlocked-jury-partial-verdict'>Oracle's copyright on the arrangement of the Java Api's</a>, I claim ownership of this and all derivative reorderings of the LOTR franchise.</p>
]]>
    </description>
    <pubDate>Tue, 08 May 2012 04:22:21 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/lotr_chopsuey.asp</guid>
  </item>
<item>
  <title>A new era for Android.</title>
    <link>http://www.secretGeek.net/android.asp</link>
    <description>
      <![CDATA[ 
<p>Occasionally, marketers send me press releases in the hope I'll blog about them. Ordinarily I refuse to be manipulated by such a ploy, but I thought this one about android was worth a little discussion. 
I've always thought that android phones look interesting but only from the point of view of a tinkerer. This new direction seems to offer something more.</p>

<p>Here's a few relevant excerpts:</p>

<img src='http://secretGeek.net/image/android_icst.png' alt='food phone' style='margin:10px;float:right;' />

<blockquote><p>Android, the world's leading free, open source platform for everything beyond smart phones, and the world's most popular phone amongst Android software developers and Google employees, is proud to announce the discovery of their first Consumer.</p> 
 
<p>The Android developer community first suspected the existence of the Consumer after finding non-Google IP addresses in the log file of an Android Developer Forum. The discovery was
quickly escalated to Google management who sent a rapid response Privacy Intrusion Team to perform expanded analysis of his web searches, browser, email and telephone usage. They were thrilled to discover that the lurker was a genuine Android customer who was neither an Android software developer or a Google employee.</p> 
 
<p>The potential existence of such a Consumer had been hotly debated on Android developer forums for years. But even the most optimistic Android enthusiasts had assumed that the debate was purely theoretical.</p>
 
<p>Google had previously spent millions of dollars placing 'Angry Birds' in their 'Google Play' app store, in the hope that it could potentially attract a Consumer to consider using the Android platform for Consumer Purposes. Google's Privacy Intrusion Team have revealed that analysis of the Consumer's correspondence offer no clear rationale for why he purchased an Android phone from a market place crowded with more suitable offerings. Skeptics have taken this as an indication that the Consumer's existence could be the result of Google Finland's controversial 'tag and release' program where members of the public were anaesthetised, given an Android phone, and released back into the population.</p>
 
<p>This new phase of the Android platform is an exciting time. Predicting an influx of Consumers, developers have quickly raced to make the phone more technically intimidating and to provide an even more fractured range of devices. Google employees remain unaware of anything that has happened to non-Google employees.</p>
 
<p>The Consumer is now considering getting into Android development, and has recently taken a job at Google.</p>
</blockquote>

<p>Crazy times. Next they'll be announcing the discovery of a teenager who wants a Zune.</p>
]]>
    </description>
    <pubDate>Fri, 23 Mar 2012 12:37:13 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/android.asp</guid>
  </item>
<item>
  <title>Mind-boggling Demo of New Gaming Genre, aka Folder-Based Hangman, aka Fun with Recursion</title>
    <link>http://www.secretGeek.net/folderGame.asp</link>
    <description>
      <![CDATA[<p>I had a crazy idea recently for a new game - a game that defines an entire new *genre* of computer game, and a new style of programming computer games. Whether or not this idea will go on to change the way all computer games are written, I will let history decide.<p>

<p>It's such a simple idea that I don't know how it couldn't have possibly existed earlier. It doesn't require
massive graphic capabilities, no CUDA NUMA GPGPGPU and the like -- it's an idea so profoundly simple that you'll
be scraping your jaw off the floor with a spoon before you finish reading this blog post. </p>

<p>You run the 'game' and it sets up a directory structure to represent every possible state of the game. To play the game, you inspect the current folder, look at the currently available sub folders, and choose which one to navigate into. Each sub folder you see represents the next possible state of the game.</p>

<p><strong>There is no executable program running when you are playing. The game is just your act of navigating the folder structure. It's a clever form of madness!</strong></p>

<p>Here's some screenshots that show me playing the game, in a command prompt.</p> 

<p>I've changed my prompt to just a 'greater than' sign, by typing '<code>prompt $g</code>', to make it cleaner. Old-school DOS wizards do this kind of thing all the time. Hipster kids, try and keep up.</p>

<p>First I type '<code>dir /b</code>' to get a clean view of the current folder.<p>
<p> There is only one folder, '<code>__PLAY HANGMAN__</code>' so I navigate into it by typing&nbsp; '<code>cd[TAB][Enter]</code>'. <strong> The game has begun.</strong> </p>
<img src='http://secretGeek.net/image/shot0.png' alt='' style='padding:10px' /><br />
<p>Looking in that folder I see the empty scaffold, three underscores (representing a 3 letter word) and the available letters listed down the left hand side. We're playing with a reduced alphabet to keep the number of permutations within a reasonable amount.</p>
<img src='http://secretGeek.net/image/shot1.png' alt='' style='padding:10px' /><br />
<p>My first guess is the letter 'A'. To make this guess I type '<code>cd A[tab]</code>'. When I type '<code>dir /b</code>' to inspect the new state of the game I see that it was a good guess, as one of the letters of the word has been filled in. Also there is an 'x' next to the 'A' indicating that that letter has been guessed. That's all there is to it. Hear that pop? That was your cerebellum exploding through your temporal lobe.</p>
<img src='http://secretGeek.net/image/shot2.png' alt='' style='padding:10px' /><br />
<p>If I try guessing 'A' again, all I find is a folder containing a file named 'You have already guessed that letter.' To undo my mistake I back out by typing '<code>cd ..</code>' (You could, <em>theoretically</em> use this technique to undo any move, but that would be unsportsmanlike.)</p>
<img src='http://secretGeek.net/image/shot3.png' alt='' style='padding:10px' /><br />
<p>A couple of moves later and I've guessed every letter:</p>

<img src='http://secretGeek.net/image/shot8.png' alt='' style='padding:10px' /><br />
<p>The word is 'CAB'. There's no particular fanfare. Just the word 'WIN' declaring my victory.</p>

<p>Okay, now you've seen the whole thing I hope you're aching to not just download the game, but to write your own entry into this brave new genre. You could do for Gehtto-Folder-Games what John Carmack did for first person shooters!</p> 
<p>I'd love to see an implementation of tic-tac-toe, aka, naughts and crosses. Also, hangman could be minified by using <a href='http://technet.microsoft.com/en-us/sysinternals/bb896768'>junctions</a> (i.e. symbolic links) -- I'd love to see that implemented. The possibilities for new games are pretty much endless. Maybe six or seven.</p>

<p>Okay let me level with you. The mathematics of this idea were just ridiculous. For a full 26 character alphabet, I would've killed my little computer. (Care to accurately calculate how many folders are created for the given alphabet?) It's all based around N-factorial where N is the size of the alphabet. Factorial is not something you want to see in the real world. </p>

<p>I'm on holiday at the moment, so the only computer available to write it on was my dell mini, which doesn't have any serious coding environment. So rather than write it as a console app in visual studio (or even a powershell app) I wrote a javascript page that generates a batch file. It's very niche.</p>

<p>This also turned into an opportunity to learn the ins and outs of getting recursion wrong with javascript. The most common mistake you make with recursion in javascript, it turns out, is forgetting to declare a local variable. This means that the variable becomes global and your recursion goes nuts. Don't make that mistake. When your code is creating subfolders all over your hard drive it's a particularly painful mistake. It took me considerably less time to write the program than it did to debug it, and (considerably*considerably) less time to debug than the time to clean up all the folders left in unexpected places.</p> 
<p>But the funnest bit was the ascii sprite code.</p>

<p>I had one array that showed the final hanged man:</p>
<pre>
var hangyPicture = [
'   _______   ',
'   I     I   ',
'   I     O   ',
'   I   --I-- ',
'   I    I I  ',
'   I         ',
'--===--      '];
</pre>
<p>(Side point... why wasn't my ascii art better than this? Because | and \ are not valid in folder names.)</p>
<p>And I had another array that showed how many misses were required before a given character of the hangyPicture was shown:</p>
<pre>
var hangyMask = [
'             ',
'             ',
'         1   ',
'       33233 ',
'        4 4  ',
'             ',
'             '];
</pre>
<p>Then, with those two arrays in place, I can work out the names of the folders to create. I walk through the mask, one character at a time, and compare the digit I find to the current number of missed guesses. If the digit I find is less than (or equal to) the current number of missed guesses, then I include that character in the folder name, otherwise I mask it out with a space. Ah, I give in -- it's easier to just show the code:</p>

<pre>
for (var h in hangyPicture) {
  // use hangyMask[h] and numberOfMisses to mask chars out of hangyPictures[h] 
  for(var i = 0; i < hangyMask[h].length; i++) {
    if (hangyMask[h][i] == ' ' || hangyMask[h][i] <= numberOfMisses) {
      folders[h] += hangyPicture[h][i];
    } else {
      folders[h] += ' ';
    }
  }
}
</pre>
<p>Okay. Now you've been enlightened with the future of ultra-ghetto folder-based gaming, go ahead and make your own. I can wait.</p> 
<br />
<p><a href="http://secretGeek.net/ghettoHangMan.html" style="font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;">Here's the code</a></p>
<br />
<p>The accompanying program is a piece of javascript that creates a windows <em>batch</em> file. You run the batch file.</p>
 
 
]]>
    </description>
    <pubDate>Sat, 07 Jan 2012 10:57:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/folderGame.asp</guid>
  </item>
<item>
  <title>Got CSV in your javascript? Use agnes.</title>
    <link>http://www.secretGeek.net/agnes11.asp</link>
    <description>
      <![CDATA[ 

<img src='http://secretGeek.net/image/logo_r_t_s.png' style='float:right; margin:5px' />

<p>The only things that will survive the forthcoming nuclear+zombie apocalypse are cockroaches, javascript and <a href='http://en.wikipedia.org/wiki/Comma-separated_values' rel='nofollow'>CSV</a>.</p>

<p>So I've written an open source javascript library, <code>agnes.js,</code> that the cockroaches can use for dealing with CSV from javascript. And in the brief pre-apocalypse era you can use it too.</p>


<br />
<p><a href="http://agnes.codeplex.com/releases/view/77617" style="font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;">Download the zip</a></p>
<br />

<p>I've <a href='http://secretgeek.net/csv_trouble.asp'>written before</a> about how CSV starts off looking easy, but quickly descends into a world of insanity. So in javascript land, let <code>agnes</code> handle all the nasty quirks and edge cases (embedded delimiters, qualifiers, nulls and so on).</p>

<p>I wrote a bunch of unit tests to go with it, so you can tell exactly what it does with each weird bit of input you can throw at it.</p>

<p>You can download it from <a href='http://agnes.codeplex.com'>agnes.codeplex.com</a></p>

<p>This was a particularly fun little bus project, and what I like best about <em>agnes</em> is the content you get when you download her.</p>

<p>The <a href='http://secretGeek.net/agnes/readme.html'>readme</a> file has executable examples, that work by having a chunk of code displayed in a div, which is the exact code that is grabbed and executed when you click 'Try it'.</p>

<br />
<p><a href="http://agnes.codeplex.com/SourceControl/BrowseLatest" style="font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;">Browse source code</a></p>
<br />

<p>I like the unit tests that come with it, and the little <a href='http://secretGeek.net/agnes/tests.html'>unit test runner.</a> I could've gone really overboard with it, but I stopped myself before it went too far.</p>

<p>And I like the sample that performs <a href='http://secretGeek.net/agnes/twoWay.html'>Csv to Json conversion</a>, back and forth, back and forth. My favourite part of that is using html entities in the button titles, for left and right arrows.</p>

<br />
<p><a href="http://secretGeek.net/agnes/twoWay.html" style="font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;">Try it out</a></p>
<br />

<p>Now that I've got <code>agnes</code> out of the way, hopefully I can focus on my new bilion dollar idea, <a href='http://youmustget.com'>youmustget.com</a></p>
]]>
    </description>
    <pubDate>Sun, 27 Nov 2011 03:07:28 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/agnes11.asp</guid>
  </item>
<item>
  <title>I went to write down a book name and founded an internet empire instead.</title>
    <link>http://www.secretGeek.net/bought_youmustget.asp</link>
    <description>
      <![CDATA[ 
 
 
<a href='http://www.hammacher.com/Product/Default.aspx?sku=11862' rel='nofollow' style='float:right; clear:right; margin:5px;margin-top:0px;'><img src='http://secretGeek.net/image/tron-motorcycle.jpg' alt='tron motorcycle just 55K' style='border:2px solid #AAA' /></a>
<a href='http://www.facebook.com/pages/LAIKAhouse/162077150510565' rel='nofollow' style='float:right; clear:right;margin:5px;margin-top:50px;'><img src='http://secretGeek.net/image/at-at-dog-costume.jpg' alt='AT AT dog costume you must have' style='border:2px solid #AAA' /></a>
 
<p>Yesterday <a href='http://callvirt.net/blog/'>Joel</a> told me, 'hey you really should read  
<a href="http://www.amazon.com/gp/product/0393072231/ref=as_li_ss_tl?ie=UTF8&tag=secretgeek-20&linkCode=as2&camp=217145&creative=399369&creativeASIN=0393072231">"The Big Short"</a>
 by Michael Lewis' -- and I thought, yes, I'll write that in my list of books I must get and when I have a chance I'll order it and all the other books in my list of books i must get.</p>

<p>Looking through my iphone I was shocked to find I don't even *have* a list of books I must get. I've got a list of which Woody Allen movies I haven't seen, and I have a list of which Jeeves and Wooster books I own (or own twice) so I don't accidentally buy them again (or again again), but no "Books I must get". </p>

<p>And I realised it's not just books that I keep forgetting. It's everything in our stupid materialist world. It's gadgets, music, movies, games, t-shirts, toys, gifts for my wife, baby stuff, apps, power tools -- a whole big fat materialist world full of stuff I must get, that, realistically i'll never get, but which my inner taxonomist wouldn't mind having a list of somewhere.</p>

<p>Suddenly, before I could stop them, my hands had rushed off and spent 9.95 to buy all of the following websites...</p>



<ul>
<li>http://things.youmustget.com</li>
<li>http://books.youmustget.com</li>
<li>http://movies.youmustget.com</li>
<li>http://games.youmustget.com</li>
<li>http://gadgets.youmustget.com</li>
<li>http://apps.youmustget.com</li>
<li>http://stocks.youmustget.com</li>
<li>http://software.youmustget.com</li>
<li>http://dvds.youmustget.com</li>
<li>http://jokes.youmustget.com</li>
<li>http://vaccinations.youmustget.com</li>
<li>http://tattoos.youmustget.com</li>
<li>http://cars.youmustget.com</li>
<li>http://piercings.youmustget.com</li>
<li>http://hookers.youmustget.com</li>
<li>http://starewarsstuff.youmustget.com</li>
<li>http://drugs.youmustget.com</li>
<li>http://websites.youmustget.com</li>
<li>http://cakes.youmustget.com</li>
<li>http://clothes.youmustget.com</li>
<li>http://bikes.youmustget.com</li>
<li>http://girlfriends.youmustget.com</li>
<li>http://babystuff.youmustget.com</li>
<li>http://diseases.youmustget.com</li>
<li>http://travel.youmustget.com</li>
<li>http://tshirts.youmustget.com</li>
<li>http://shirts.youmustget.com</li>
<li>http://wines.youmustget.com</li>
<li>http://beers.youmustget.com</li>
</ul>


<p>...and so on, because i bought <a href='http://youmustget.com/'>'youmustget.com'</a>.</p>

<p>And now I have a slight dilemma. I already own too many urls that I'm not using (this brings my total internet empire to 11.5 sites) And I don't have time to execute on even the simplest ideas in my idea log.</p>

<p>So: how can I crank out a social recommendation/shopping app in under 5 bus trips!?</p>

<p>I want something that produces an output a little bit like <a href='http://www.thisiswhyimbroke.com/'>this is why i'm broke dot com</a> but where the recommendations come from people i respect, and with affiliate dollars flowing into my wallet on every recommended purchase. (And i'd like to come up with a less-sleazy way to monetize, if possible, but I do have to recoup that $9.95 <em>somehow</em>)</p>

<p>I've begun by creating a <a href='https://trello.com/board/things-youmustget-com/4ebb599886788fbdec0be37f'>Trello board</a> to capture all my ideas. I've got details for the home page, a products page, a user page, and a topic page. I've got a backlog of features that I won't implement at first, and I've got a list of ideas for what technology I'll use where. Next I'll put together some screen mockups and put them in front of my <strike>extended team of insult generators</strike> lunch buddies.</p> 
 
<p>In the mean time I'll need to keep a cricket bat handy with which to repel the hordes of nodding VCs.</p> 
<p>Thoughts?</p>
]]>
    </description>
    <pubDate>Sat, 12 Nov 2011 00:39:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/bought_youmustget.asp</guid>
  </item>
<item>
  <title>NimbleText: Origins</title>
    <link>http://www.secretGeek.net/nimbletext_origins.asp</link>
    <description>
      <![CDATA[ 
<p>I started shipping <a href='http://NimbleText.com'>NimbleText</a> at the end of January 2011. That's eight months after NimbleText was *almost* ready for release back in May 2010, when I published this roadmap: <a href='http://secretgeek.net/microIsv_ToDoOrNot.asp'>24 things to do, and 100 things *not* to do (yet) for building a MicroISV</a>. Back in May, instead of powering on with the last few tasks, I invested my spare time writing <a href='http://secretgeek.net/dod_intro.asp'>Dos-based web frameworks</a> and <a href='http://secretgeek.net/json_query_5.asp'>5 different json editors</a>. I guess having a new little baby girl counts as something of a distraction too. ;-) (Very happily).</p>

<p>When I finally starting shipping, Joe Cooney <a href='http://twitter.com/#!/josephcooney/status/30612770298798080'>said</a>:

<blockquote><p>I tip my hat to you - I think in the time I've re-written a few bits of UI you shipped a product.</p></blockquote>
<p>...in reference to his awesome <a href='http://www.lognv.com/'>LogEnvy tool</a>. But it's not a fair comparison, for two reasons.</p>
<p>Firstly, <a href='http://www.lognv.com/'>LogEnvy</a> is a much more sophisticated product than <a href='http://NimbleText.com'>NimbleText</a>. <a href='http://www.lognv.com/'>LogEnvy</a> does all kinds of powerful manipulation of events logs in a wide range of formats and intersperses it with all the kind of dazzling UI you expect from a WPF ninja. <strong>But most of all</strong> his statement is incorrect because NimbleText was almost <em>six years in the making</em>.</p>

<p style='clear:both' ></p>
<img src='http://secretgeek.net/image/merger_75.png' style='float:right;clear:right;border:0px solid #FFF;padding:10px;'>
<p>I wrote <a href='http://secretgeek.net/programmers_mate.asp'>the first version</a> in February 2005 and published it as part of a blog post soon after. I wrote it the very <a href='http://secretgeek.net/screenshot_journal.asp'>same day</a> I came up with the idea for <a href='http://TimeSnapper.com'>TimeSnapper</a>. It was a stressful week when I desperately needed both of those tools.</p>
<p>Although I was already a .net programmer, I wrote the original code in server-side VBScript for easier deployment. It was just a dozen or so lines. I called it variously 'the data pattern merge tool', 'the merger,' 'the programmer's mate' or the 'text multiplier.' Starting from that day, and continuing right up until the present, I have depended on this tool absolutely daily.</p>

<img src='http://secretgeek.net/image/w2scg_75.png' style='float:left;clear:left;border:0px solid #FFF;padding:10px;'>
<p>I released a <a href='http://secretgeek.net/New_Generator.asp'>second version</a> in July 2005, and called it 'the world's <em>second</em> simplest code generator'.</p>
<p>The source code is largely a comment block listing all the extra features I wished it had. (And almost all of which, by the way, are implemented in more recent verisons)</p>

<img src='http://secretgeek.net/image/wscg_example_50.PNG' style='float:right;clear:right;border:0px solid #FFF;padding:10px;'>
<p>A complete <a href='http://secretgeek.net/wscg_sneak.asp'>rewrite occurred in May 2006</a> when I started huffing the XSLT pixie dust and thought XSL could solve everything. Its dynamic nature gave it big advantages over the vbscript implementation.</p>
<p>But it soon turned into an exercise in writing a fully fledged compiler and I knew I was headed in the wrong direction.</p>

<p>I wrote an "offline version" around that time, in Windows Forms (VB.net version 1.1) I was never happy with it and didn't release it. If I have the code for it, I don't know where. My clearest memory of it was the way parts of the UI would animate (using a Timer control, of course :-) ).</p>

<p style='clear:both' ></p>
<img src='http://secretgeek.net/image/wscgjs_th.PNG' style='float:left;clear:left;border:0px solid #FFF;padding-right:10px;padding:10px;'>
<p>I <a href='http://secretgeek.net/wscgjs_th.asp'>re-wrote the tool in August 2007</a>, this time in javascript. Why did I rewrite it in Javasript? Because I was momentarily trapped on a machine that had no development tools, but I still felt like cutting some code. I assumed that browser performance would kill the tool, but I was dead wrong. Javascript was the perfect language for the problem, and the performance of Javascript was just beginning to take off as the browser wars re-ignited.</p>

<p>It was a clear victory for <a href='http://www.codinghorror.com/blog/2007/07/the-principle-of-least-power.html'>Atwood's Law</a>:</p>
<blockquote><p>"any application that <em>can</em> be written in JavaScript, <em>will</em> eventually be written in JavaScript."</p></blockquote>
<p>Or a pre-cursor to <a href='https://twitter.com/#!/secretGeek/status/119229415086501888'>Bambrick's Premonition</a>:</p>
<blockquote><p>"I don't know when skynet will take over. But I know what it will be written in: JavaScript."</p></blockquote>
<p style='clear:both' ></p>
<img src='http://secretgeek.net/image/wpftour_th1.PNG' style='float:right;clear:right;border:0px solid #FFF;padding:10px;'>
<p>I wrote a (playful) <a href='http://secretgeek.net/wpf_firstapp.asp'>WPF version</a> in Oct 2007 (in C#). 

<p>I wasn't happy with the tooling for WPF (maybe someone should <a href='http://fixwpf.org'>fix</a> that?), but more-so the dynamic behaviour of javascript trumped C# for this tool, so the WPF version never went anywhere.</p>
<p>Around that time I wrote other undocumented, unreleased versions in powershell and one in ruby (<a href='https://github.com/whymirror/shoes/tree'>shoes</a>). Powershell was well suited as a language, but lacked the reach of javascript, plus the performance (at that time) was dreadful. The <a href='http://en.wikipedia.org/wiki/Shoes_(GUI_toolkit)'>shoes</a> version dissappeared around the same time as <a href='http://ejohn.org/blog/eulogy-to-_why/'>_why</a>. (Coincidence? I think not.)</p>

<p>Late last year I decided to release it as a windows app, using a polished and thoroughly <a href="http://secretgeek.net/code_commute.asp">bus-tested</a> version of the javascript implementation, wrapped in a browser control inside a skinny winforms shim. Early this year I <a href='http://secretgeek.net/nimbletext_is_alive.asp'>went live</a> with it, under the new official title of NimbleText. I've hunted down <a href="http://secretgeek.net/nt_lesscrash.asp">bugs</a> and added features in the months since.</p>

<style type='text/css'>
.wtf { display:none}
</style>

<img src='http://secretgeek.net/image/sample_shot.png' style='float:left;clear:left;border:0px solid #FFF;padding:10px;'>

<p>The <a href='http://nimbletext.com/Version/Notes#1.4.0.37771'>latest release</a> looks a little more <a href='http://secretgeek.net/win8mullet.asp'>metro</a> than any previous version, as I stripped away a lot of the padding and extraneous lines, simplifying the appearance (and improving a few features as well, of course).</p>

<p>It's kind of amusing that after I chose to shun all of Microsoft's native application development toolkits  (wpf, silverlight, and winforms) going with HTML for the UI, it seems like Microsoft have now decided to meet me half way, making HTML a first class citizen in Metro.</p>

<p>Anytime I'm faced with a new platform, I usually implement a version of nimbleText as my own personal hello world, and it looks like Metro will make it easy for me. Porting the heart of this baby to Metro should be a breeze. I'll still have to put in some design effort around how the supporting features are presented (what will happen to the menus, toolbars etc?). But I expect it will be a good ice-breaker.</p>

<p>Meanwhile -- if you ever write code or munge data, save yourself some time and use NimbleText. Both <a href='http://nimbletext.com/Download/NimbleText.exe'>the download</a> and the <a href='http://nimbletext.com/live'>online version</a> are <strong>FREE</strong>. There's no time-limit on the application and you only choose to pay if you want the extended features (customizability and commandline integration).</p>

<p>If you have features you want, please leave a comment here or send an email to <code>support<span class='wtf'>exclude this bit</span>@<span class='wtf'>exclude this bit</span>NimbleText.com</code> </p>
]]>
    </description>
    <pubDate>Thu, 29 Sep 2011 13:26:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/nimbletext_origins.asp</guid>
  </item>
<item>
  <title>The Windows 8 Mullet</title>
    <link>http://www.secretGeek.net/win8mullet.asp</link>
    <description>
      <![CDATA[ 
<a href='http://secretGeek.net/image/win8mullet.png'><img src='http://secretGeek.net/image/win8mullet_50.png' style='float:right;clear:right;border:0px solid #FFF;padding:10px;' alt='Windows 8 is a mullet: Classic Windows Business at the front, Metro Party at the back'></a>

<p>I think i get it now. In Windows 8 you have two modes: metro and classic. </p>

<p>Metro is for exciting responsive new apps that you can use while sitting on a designer couch. </p>
<p>Classic is the Windows of spreadsheets and complex applications that we've used in our day jobs for years.</p>
<p>It's basically a mullet. Business in the front, party in the back.</p>
<p>I'm looking forward to joining the Metro party. I don't know if the business guy is going to host a very good party. But his client list is so long that a lot of great people are bound to be there.</p>
<p>Maybe I'm a little worried it will be like the party that Rick Moranis's character, <a href='http://www.imdb.com/title/tt0087332/quotes'>Louis</a>, is hosting in ghostbusters:</p>
<img src='http://secretGeek.net/image/rick_moranis_33.jpg' style='float:left;clear:left;border:0px solid #FFF;padding:10px;padding-right:-10px' alt="I'm givin' this whole thing as a promotional expense, that's why I invited clients instead of friends.">
<blockquote style='float:left;'><p>Louis: I'm givin' this whole thing as a promotional expense, that's why I invited clients instead of friends. You havin' a good time, Mark? <br />
[heads across the room, greeting other guests]</p></blockquote>
<p style='clear:both'>It's all going well until a terror dog turns up and terrifies the guests. But I digress.</p>
<p>At first I thought that this metro-fad would only have as much take-up as designing sidebar gadgets in Vista (i.e. approximately none). But the killer features to attract devs is the app store. Having your apps readily available to (potentially) hundreds of millions of people, is a very tempting proposition and bound to attract a lot of developers, possibly including me.</p>
<p>So, does anybody wanna play Parcheesi?</p> 
]]>
    </description>
    <pubDate>Sat, 17 Sep 2011 02:42:52 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/win8mullet.asp</guid>
  </item>
<item>
  <title>Introducing Cosby, spontaneous striped background generator</title>
    <link>http://www.secretGeek.net/cosby_code.asp</link>
    <description>
      <![CDATA[ 
<a href='http://cosby.secretgeek.net/Home/Play/V/50/000000/50/FF8800/50/000000/50/ed15ed'><img src='http://secretgeek.net/image/cos_stripy_50.png' style='float:right;clear:right;border:0px solid #FFF;padding:10px;' alt='cosby playground'></a>

<p><a href='http://cosby.secretGeek.net'>'Cosby'</a> is a small site for generating striped backgrounds (or gradient edges). You can incorporate the code from Cosby into your own asp.net/mvc applications and create striped backgrounds directly from within your Css file.</p>

<p>Once you've got Cosby in place, you can start to magically conjur stripy images out of thin air. Just reference a Cosby image as if it already exists, and it will cause the relevant image to be generated spontaneously and stored on disk for eternity.</p>

<p>For example, if you write: "background-image: url(/Image/Stripes/V/20/FFF/1/000);" then you will get a background with vertical ('V') stripes, alternating between 20 pixels of white (FFF) and 1 pixel of black (000). A moment later you decide you want the black stripes a little wider. Just alter the css (change the 1 to a 2) and they will be. No need to jump back and forth between image editor, filesystem, IDE and browser.</p>

<p>Cosby includes <a href='http://cosby.secretgeek.net/Home/Play'>a playground</a> where you can experiment with creating your own backgrounds.</p>
<br />
<p><a href='http://cosby.secretgeek.net/Home/Play' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;'>Play with cosby</a></p>
<br />
<p><a href='http://cosby.codeplex.com/SourceControl/list/changesets' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;'>Get the code</a></p>
<br />
<p><a href='http://cosby.secretgeek.net/' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;'>Visit the site</a></p>

<h2 style='clear:right'>But Why!?</h2>

<p>While I was <strike>procrastinating about</strike> working on my <a href='http://secretgeek.net/wdcnz_mvc3.asp'>talk for WDCNZ</a> I wanted to mess around with MVC's <a href='http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx'>'FileResult'</a> which lets you return a file from an action. So I resurrected and mutated the idea behind a <a href='http://secretgeek.net/GradientMaker.asp'>Gradient Maker</a> I wrote SIX years ago, using asp.net 1.0, and ended up with this latest monstrosity. (Cosby also lets you generate gradients, though I haven't done much with that feature)</p>

<p>The code is published at <a href='http://cosby.codeplex.com/SourceControl/list/changesets'>cosby.secretGeek.net</a>, so feel free to grab it, criticise it, and forget about it.</p>
<p>And of course the name is a reference to Bill Cosby's infamous <a href='http://thecosbysweaterproject.tumblr.com'>Cosby sweaters</a>, which get their own <a href='http://en.wikipedia.org/wiki/Koos_Van_Den_Akker#The_Bill_Cosby_Sweaters'>detailed write up on wikipedia</a>. I was recently heartened to see 'Cosby sweater' amongst the text generated by the <a href='http://hipsteripsum.me/'>hipster ipsum</a> random text generator.</p>

<p>That's all for now.</p>
]]>
    </description>
    <pubDate>Wed, 24 Aug 2011 05:18:00 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/cosby_code.asp</guid>
  </item>
<item>
  <title>Slides from WDCNZ: Live Coding Asp.net MVC3</title>
    <link>http://www.secretGeek.net/wdcnz_mvc3.asp</link>
    <description>
      <![CDATA[ 
<img src='http://secretgeek.net/image/wdcnz_15.png' style='float:right;clear:right;border:0px solid #FFF;padding:10px;' alt='talkin in wellington'>

<p>I am just returned from an excellent holiday in New Zealand, wherein I talked about MVC 3 at the first ever <a href='http://wdcnz.com'>WDCNZ</a> in Wellington.</p>

<p>On the day of the talk I was deathly ill, so it was a very much <a href='http://www.flickr.com/photos/wdcnz/sets/72157627148171169/with/5972187758/'>less animated</a> talk than I wanted to give, but still enjoyable (for me, if not the audience). I missed out on seeing the rest of the conference, which is a real bugger.</p>
<p>In particular I wanted to see <a href='http://paulirish.com/'>Paul Irish</a> on Html5, but I did at least get to meet him for a quick chat the day before. Other speakers I met the day before were pretty interesting to talk to and I very much wanted to see the talks by <a href='http://pageofwords.com/blog/'>Kirk Jackson</a> and <a href='http://jwegesin.com/'>Jeffrey Wegesin</a>, <a href='http://koziarski.com/'>among</a> <a href='http://twitter.com/#!/turtlespin'>others</a>.</p>

<p>Here's my slides, using an updated version of <a href='http://higgins.codeplex.com'>Higgins</a>. You'll need to unzip them, then you can see the readme file, the slides themselves (by viewing higgins.html) or look at the included code.</p>

<p>&nbsp;</p>
<p><a href='http://secretGeek.net/content/wdcnz_mvc3_leon.zip' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:10px;padding:10px;-moz-border-radius: 15px; border-radius: 15px;'>Slides and Code for 'Live Coding Asp.net MVC 3'</a></p>
<p>&nbsp;</p>
<p>The talk covers Razor syntax, Display and Editor Templates, custom Code Templates and custom Project templates. Thankfully, there is no video.</p>

<p><a href='http://jcooney.net/'>Joseph Cooney</a> built a special utility to help with the talk, called <a href='http://jcooney.net/post/2011/07/15/Increased-Presentation-Impact-with-BigNote.aspx'>'BigNote'</a> -- available from <a href='http://bignote.codeplex.com'>bignote.codeplex.com</a>.</p>
<p>This is a handy tool for presenters. Invoke it with a hotkey (ctrl-F1) and then it lets you write in giant letters on top of the desktop. Very slick.</p>
<p>I had a slight panic during the talk when I realised that Joe Cooney, creator of <a href='http://ComputerUnlocked.com'>ComputerUnlocked.com</a> could have used the opportunity to slip any kind of nasty prank into the tool, just to punk me in front of a room full of strangers. But luckily he slipped up and missed the opportunity.</p>

<p>One other thing I ought to mention: the Dell laptop I bought in anticipation of the presentation turned out to be a total dud. I was only rescued the day before leaving Australia when <a href='http://www.PaulStovell.com'>Paul Stovell</a> managed to hook me up with an old laptop of his, which performed flawlessly. Thanks Paul!</p>
]]>
    </description>
    <pubDate>Sun, 31 Jul 2011 03:17:57 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/wdcnz_mvc3.asp</guid>
  </item>
<item>
  <title>MVC 3, "Third Times a Charm" references</title>
    <link>http://www.secretGeek.net/mvc3_Refs.asp</link>
    <description>
      <![CDATA[ 
<p>For the last few months I've been on an MVC 3 binge, learning as much as I can fit in my tiny brain. (Had to throw a few <a href='http://www.silverlight.net/'>other</a> <a href='http://en.wikipedia.org/wiki/Windows_CardSpace'>things</a> out first of course.)</p>
<p><a href='http://wdcnz.com/'>Web Dev Conf New Zealand (WDCNZ)</a>, is in Wellington very soon (<a href='http://lanyrd.com/2011/wdcnz/schedule/'>schedule on lanyrd</a>), and I'll be talking there about all things MVC 3. This is keeping me awake nights, I can tell you.</p>
<p>I've applied to talk at the <a href='http://blog.stackoverflow.com/2011/06/devdays-is-back/'>stack overflow dev days</a> conference in Sydney in October. That would be an absolute blast. I rank my chances pretty low, but my excitement is high regardless.</p>
<p>Recently I talked at <a href='http://www.qmsdnug.org/'>QMSDNUG</a>, on 'MVC 3: Third Times a Charm', alongside <a href='http://jcooney.net/'>Joe Cooney</a>. It was a lot of fun, and we allegedly broke a record with our crowd size. It's basically a preview of what I'll cover in Wellington, though some material will be in or out as I revise.</p>
<p>(<a href='http://higgins.codeplex.com/'>Higgins</a> got another workout, and had some html5 goodness baked in)</p>
<p>I promised to put up the references from my talk. They're mostly about customizating your MVC 3 experience in Visual Studio. Here they are.</p>

<table class='t'>
 <thead>
   <tr>
     <th>url</th>
     <th>topic</th>
   </tr>
 </thead>
 <tbody>
  <tr>
    <td><a href='http://download.microsoft.com/download/D/6/D/D6DFC36D-604F-448A-A189-15EC874ABAAF/ASPNETWebPagesWithRazorSyntax-Book-Beta3.pdf' title='http://download.microsoft.com/download/D/6/D/D6DFC36D-604F-448A-A189-15EC874ABAAF/ASPNETWebPagesWithRazorSyntax-Book-Beta3.pdf'>bit.ly/d71zIJ</a></td>
    <td>razor: ebook [pdf]</td>
  </tr>
  <tr>
    <td><a href='http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html' title='http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html'>bit.ly/3Vwjvj</a></td>
    <td>editor &amp; display templates (Brad Wilson)</td>
  </tr>
  <tr>
    <td><a href='http://code.google.com/p/mvc-mini-profiler/' title='http://code.google.com/p/mvc-mini-profiler/'>bit.ly/dIUPo4</a></td>
    <td>MVC Mini profiler (Sam Saffron)</td>
  </tr>
  <tr>
    <td><a href='http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx' title='http://www.hanselman.com/blog/ModifyingTheDefaultCodeGenerationscaffoldingTemplatesInASPNETMVC.aspx'>bit.ly/h8vQfX</a></td>
    <td>Code templates (Scott Hanselman)</td>
  </tr>
  <tr>
    <td><a href='http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/' title='http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/'>bit.ly/hwNUNS</a></td>
    <td>MVC Scaffolding (Steve Sanderson)</td>
  </tr>
  <tr>
    <td><a href='http://haacked.com/archive/2011/06/06/creating-a-custom-asp-net-mvc-project-template.aspx' title='http://haacked.com/archive/2011/06/06/creating-a-custom-asp-net-mvc-project-template.aspx'>bit.ly/khm2GL</a></td>
    <td>Project Templates (Phil Haack)</td>
  </tr>
  <tr>
    <td><a href='http://weblogs.asp.net/jgalloway/archive/2011/03/17/asp-net-mvc-3-roundup-of-tutorials-videos-labs-and-other-assorted-training-materials.aspx' title='http://weblogs.asp.net/jgalloway/archive/2011/03/17/asp-net-mvc-3-roundup-of-tutorials-videos-labs-and-other-assorted-training-materials.aspx'>bit.ly/hfWA6Z</a></td>
    <td>Roundup of tutorials (Jon Galloway)</td>
  </tr>
 </tbody>
</table>
<br />
<p>If you use MVC 3, what are your favourite bits? What would you cover in a talk? If you don't use it, why not? And what are the sort of things you'd like to see deomonstrated?</p>
]]>
    </description>
    <pubDate>Sat, 02 Jul 2011 02:41:41 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/mvc3_Refs.asp</guid>
  </item>
<item>
  <title>Custom Errors in ASP.Net MVC: It couldn't be simpler, right?</title>
    <link>http://www.secretGeek.net/custom_errors_mvc.asp</link>
    <description>
      <![CDATA[ 
<a href='http://github.com/404'><img src='http://secretGeek.net/image/github404.png' style='float:right;background:#333;padding:1px;margin:5px;margin-top:-2px;' alt='parallaxing 404 at github' /></a>
<p>Cool looking 404 pages are the new hotness. <a href='http://github.com/404'>Github has an amazing parallaxing 404 page</a> that allegedly cost more than any other feature on their site.</p>
<p>For a lot of sites, the 404 page is the most visited page, so it's worth getting it right.</p>

<p>The website for my new product, <a href='http://NimbleText.com/'>NimbleText</a>, uses asp.net mvc. A framework I really enjoy. <a href='http://weblogs.asp.net/scottgu/'>The gu</a> wrote it on a plane. Before takeoff.</p>
<p>One of the more voodoo aspects of getting NimbleText.com into production was setting up a succesful custom 404 page. Here's what I came up with: <a href='http://NimbleText.com/missingPageExample'>check it out.</a></p>
<p>Some of the articles out there that cover custom errors in asp.net MVC seemed to be a little bit confused about exactly what is going on, many are out of date or incomplete and some are downright misleading.</p>
<p>So once and for all I want to give a definitive guide to error handling in asp.net MVC.</p>

<p>Here we are. Just <strong>eleven simple steps to follow for amazing results.</strong></p>

<p>First, map a catch-all route in <code>global.asax</code>, at the end of your other routes. E.g.</p>

<blockquote><code>
routes.MapRoute(<br />
&nbsp;&nbsp;    "404-PageNotFound",<br />
&nbsp;&nbsp;    "{*url}",<br />
&nbsp;&nbsp;    new { controller = "StaticContent", action = "PageNotFound" }<br />
);
</code></blockquote>


<p>Second, create an Error Controller, like this:</p>

<blockquote><code>
    public class ErrorController : Controller<br />
    {<br />
&nbsp;&nbsp;        [AcceptVerbs(HttpVerbs.Get)]<br />
&nbsp;&nbsp;        public ViewResult Unknown()<br />
&nbsp;&nbsp;        {<br />
&nbsp;&nbsp;&nbsp;&nbsp;             Response.StatusCode = (int)HttpStatusCode.InternalServerError;<br />
&nbsp;&nbsp;&nbsp;&nbsp;             return View("Unknown");<br />
&nbsp;&nbsp;        }<br />
 <br />
&nbsp;&nbsp;        [AcceptVerbs(HttpVerbs.Get)]<br />
&nbsp;&nbsp;        public ViewResult NotFound(string path)<br />
&nbsp;&nbsp;        {<br />
&nbsp;&nbsp;&nbsp;&nbsp;             Response.StatusCode = (int)HttpStatusCode.NotFound;<br />
&nbsp;&nbsp;&nbsp;&nbsp;             return View("NotFound", path);<br />
&nbsp;&nbsp;        }<br />
    }<br />
</code></blockquote>
	
<p>Third and fourth -- create custom views to handle the Unknown and NotFound actions above.</p>

<p>Fifth, create a page called Custom404.htm and add it to the root of your application. Use it to display a helpful, edgy and hopefully cool message. But don't be too edgy.</p>

<p>Sixth, add this to web.config, inside the <code>system.web</code> node:</p>
<blockquote><code>&lt;<a href='http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx'>customErrors</a> mode=&quot;RemoteOnly&quot; defaultRedirect=&quot;GenericErrorPage.htm&quot;&gt;<br />
&nbsp;&nbsp; &lt;error statusCode=&quot;404&quot; redirect=&quot;/Custom404.htm&quot; /&gt;<br />
&lt;/customErrors&gt;
</code></blockquote>

<p>Seventh, add a <a href='http://www.iis.net/ConfigReference/system.webServer/httpErrors'>httpErrors</a> element inside the <code>system.webServer</code> node:</p>
	
<blockquote><code>&lt;httpErrors&gt;<br />
&nbsp;&nbsp;            &lt;error statusCode=&quot;404&quot; subStatusCode=&quot;-1&quot; path=&quot;/custom404.htm&quot; responseMode=&quot;Redirect&quot; /&gt;<br />
        &lt;/httpErrors&gt;
</code></blockquote>

<p>Eighth, inside your existing controllers, if there is no data to serve (e.g. if someone asks for a UserId that doesn't exist) then use this snippet of code:</p>

<blockquote><code>throw new HttpException(404);</code></blockquote>

<p>Ninth, inside Global.asax, look for the <code>RegisterGlobalFilters</code> method (it will be called during <code>Application_Start</code>), and add another global filter, to handle any specific exceptions in your code, like this:</p>

<blockquote><code>
filters.Add(new HandleErrorAttribute<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; ExceptionType = typeof(FileNotFoundException),<br />
&nbsp; &nbsp; &nbsp; &nbsp; View = "Custom404",  // Custom404.cshtml is a view in the Shared folder.<br />
&nbsp; &nbsp; &nbsp; &nbsp; Order = 2<br />
&nbsp; &nbsp; });
</code></blockquote>
<p>Tenth, add a view called <code>Custom404.cshtml</code> under views/shared.</p>
			
<p>And, eleventh, take care to handle the global application error event, capturing and logging any errors, before redirecting to the views you're after:</p>

<blockquote><code>
protected void Application_Error(object sender, EventArgs e)<br />
{<br />
&nbsp; &nbsp; Exception exception = Server.GetLastError();<br />
&nbsp; &nbsp; Response.Clear();<br />
&nbsp; &nbsp; HttpException httpException = exception as HttpException;<br />
&nbsp; &nbsp; if (httpException != null)<br />
&nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; string action;<br />
&nbsp; &nbsp; &nbsp; &nbsp; switch (httpException.GetHttpCode())<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 404:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // page not found<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action = "HttpError404";<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case 500:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // server error<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action = "Internal500";<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; default:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; action = "General";<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; // clear error on server<br />
&nbsp; &nbsp; &nbsp; &nbsp; Server.ClearError();<br />
&nbsp; &nbsp; &nbsp; &nbsp; Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message));<br />
&nbsp; &nbsp; }<br />
}<br />
</code></blockquote>			

<img src='http://secretGeek.net/image/unhandledException.png' style='float:right;background:#F33;padding:1px;margin:5px;margin-top:-2px;' alt='unexpected error' />


<p>Good. </p>

<p>Now your website is well and truly borked.</p>
<p>Every request will bounce around your application like a demented pinball tripping on acid.</p>
<p>When an error happens, a bunch of different code modules will go to war.</p>
<!-- 

<p>You'll get a different error handler depending on what version of IIS you have, what version of MVC you're using, whether you've deployed in debug or release, whether you're visiting locally or remotely, whether it's sunny or raining.</p>
-->
<!--
<p>Every request will bounce around your application like a demented pinball tripping on acid inside a labyrinthine machine extracted by nazi scientists from the darkest corners of Rube Goldberg's tortured mind during an opium nightmare of Lewis Carrol proportions.</p>
-->
<!-- too much? -->

<!--
<p>When an error happens, chaos will reign. A beast will arise from the north, and one from the sea and one from the earth. A mighty beast with seven-heads and ten horns will stalk the land, the howls and lamentations of the sinners will drown out the cries of the vanquished, blood will fill the sky, and all reason and hope will flee as a horde of code modules go to war.</p>
-->


<p>The victorious code module will tear out the entrails of all those who oppose it, and throw them in the visitor's face.</p>
<p>You'll get a different error handler depending on what version of IIS you have, what version of MVC you're using, whether you've deployed in debug or release, whether you're visiting locally or remotely, whether it's sunny or raining.</p>
<p>Your server will be reduced to a pile of smouldering rubble from which reboot is impossible.</p>
<p>But if you want to get truly weird, try setting up a custom 40<em><strong>3</strong></em> page. That's about three times as odd.</p>
<p>Or, switch to <a href='http://Dod.CodePlex.Com/'>Dos on Dope</a>*. Life will be simple again.</p>
<p>Sorry I didn't really have time to write a definitive guide to this stuff. Error handling in MVC is crazy man, I'm busy fighting a clandestine war against hackers and crackers and bots and beuracrats: I can't be documenting that kind of mystery wrapped in an enigma.</p>
<p>If someone does write a <strong>complete</strong> guide to error handling in MVC, that includes the meaning and interaction behind each of these snippets, plus how the interplay between IIS, asp.net and MVC truly works, then I will happily update this article to include a link to it, right up top.</p>
<hr />
<p><small><strong>* Don't</strong> switch to Dos On Dope.</small></p>
]]>
    </description>
    <pubDate>Sat, 11 Jun 2011 01:10:49 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/custom_errors_mvc.asp</guid>
  </item>
<item>
  <title>Anatomy of a Domain Hijacking, part 2: The Website Who Came In From The Cold</title>
    <link>http://www.secretGeek.net/sg_hijack_2.asp</link>
    <description>
      <![CDATA[ <p>When secretGeek.net was taken I swore a solemn oath to myself:</p>
<blockquote><p>My relentless campaign of jokes and nonsense will not be stopped.</p></blockquote>
<p>And now, just a couple of long weeks later, here I am, happy to report I'm back in control of secretGeek.net.</p>
<p>Right when I was ready to migrate over to leonbambrick.com, I got an email from the Russian registrar, Regtime Ltd, saying:</p>
<blockquote><p>Sorry&nbsp;&nbsp;for answer delay. Domain was transferred onto you account.</p></blockquote>
<p>The number one thing, I think, that helped get the site back was when a good friend, Madina, translated a lengthy email into fluent Russian for me to send to the Russian Registrar.</p> 
<p>She re-structured the email to put the sob-story up front, all about how much personal meaning this site has for me, and the positive effects it has had on my life. I think that did the trick.</p>

<h2>So what did we learn?</h2>
<p>I learnt that passwords at google <a href='http://seclists.org/fulldisclosure/2009/Jul/254'>can be brute forced, if pop is enabled</a>. This can be sped up by use of multiple IP addresses, or a <a href='http://www.abuse.ch/?p=3294'>botnet</a>.</p>
<p>That's the most likely way they got access to my account. My password was 'good' by gmail standards but is now 'freaking solid' by any standard.</p>
<p>And I've turned on <a href='http://googleblog.blogspot.com/2011/02/advanced-sign-in-security-for-your.html'>2-step verification</a>, plus all the other <a href='http://secretgeek.net/sg_hijack_1.asp'>recommendations from part 1.</a></p>
<p>Thanks for the encouragement and support. It was dark times, but now the nonsense can continue.</p>

]]>
    </description>
    <pubDate>Tue, 07 Jun 2011 21:33:47 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sg_hijack_2.asp</guid>
  </item>
<item>
  <title>Anatomy of a Domain Hijacking, part 1</title>
    <link>http://www.secretGeek.net/sg_hijack_1.asp</link>
    <description>
      <![CDATA[ 
<p>Two weeks ago I'd never heard the term <a href='http://en.wikipedia.org/wiki/Domain_hijacking'>'Domain Hijacking'</a>. Right now, I'm in the middle of a fight to regain control of my hijacked domain, <a href='http://secretGeek.net' rel='nofollow'>secretGeek.net</a>. It's not an easy fight, I haven't yet won, and I may never win.</p>

<p><strong>If you have any information that could help me get control of my domain again please leave a comment, or tweet me (<a href='http://twitter.com/#!/secretGeek'>@secretgeek</a>), or get in touch via my (now re-secured) email address, leonbambrick@gmail.com</strong></p>

 
<h2>From Russia with Love</h2>
 
<p>On Monday 9th May, I checked my gmail account at around 3:40 in the afternoon, and I was confronted with a dark red message at the top of the screen (in the area where you normally see messages like 'Your email has been sent'). The message said:</p>
 
 <p style='text-align:center'><span style='background-color:#980000; color:white;padding:4px;border-radius:4px'><strong>Warning: we believe your account was recently accessed from: Russia. <span style='text-decoration:underline'>Show details and preferences</span> | <span style='text-decoration:underline'>Ignore</span></strong></span></p>
 
 <p>I clicked on 'show details and preferences', and a new window opened with this message:</p>
 <a href='http://secretGeek.net/image/russian_ip_full.png'><img src='http://secretGeek.net/image/russian_ip_zoom.png' style='border:0px solid #000'/></a>
 <p>(click to see the message in context -- [note that my own ip addresses are redacted])</p>
 
 <p>This was definitely not me. At 4:19 AM, and 5:40am I had been far too busy being fast asleep, preparing for a big week, to get to Russia and back for some casual email reading. So someone had infiltrated my email. The freaking out sensation began immediately. I couldn't move. I was frozen completely still.</p>
 <p>I followed google's advice and immediately changed my password, then notified my wife. My mind was racing as to what the implications could be.</p>
 <p>A little voice told me to check the trash. I was really hesitant, I think I knew the trash would contain something I didn't want to see.</p>
 <p>In the trash I found two messages, received at 5:45am.</p>
 <img src='http://secretGeek.net/image/messages_in_trash.png' style='border:0px solid #000'/>
 <p>The content of the messages was to explain that my domain, secretGeek.net, had been succesfully transferred from my registrar, <a href='http://GoDaddy.com'>GoDaddy</a>, to a Russian registrar, <a href='http://www.webnames.ru/'>Regtime Ltd</a>.</p>
 <p>I felt completely unreal, like this was a dream, or a prank. I logged into my GoDaddy account to check on my domains. They all still appeared to be there. I took a few deep breaths. I felt it must be all just a daydream. I read the list carefully. No -- secretGeek.net was missing from the list. All of the others were still there.</p>
<p>I started sending emails to GoDaddy. I replied to the emails I'd found in the trash, telling them that it was a mistake, the result of my email being violated.</p>
<p>I lodged support requests with GoDaddy. When I went back to the trash to read the deleted emails again I found there were <em>new</em> messages in the trash. Emails from godaddy in response to my support requests had been automatically deleted. This was *weird*. It was a few minutes before the penny dropped.</p>
<p>I looked in my gmail filters and there were two new ones. The two new filters were designed to delete any messages containing the words 'GoDaddy' or 'Webnames'. (I later found that 'Webnames.ru' is the trading name of 'Regtime Ltd', the Russian registrar holding secretGeek.net)</p>
<img src='http://secretGeek.net/image/new_filters.png' style='border:0px solid #000'/>
<p>This was starting to become very 'real'. This wasn't some kind of misunderstanding. It was definitely a thing. It was a deliberate, targeted attack, by a person or people who knew what they were doing and had either done this thing before or had thought it through very carefully.</p>
<p>I turned to my friend, <a href='http://JCooney.net'>Joe Cooney</a>, to show him what I'd found. He was equally gobsmacked. He told me to call GoDaddy on their support number and see what they said.</p>
<p>A whois request on secretGeek.net showed that my name servers were still listed, but the registrar was Regtime ltd, and the contact information was all blank.</p>
<p>The support guy at GoDaddy told me to contact the gaining registrar and find out what their policy is for transfer disputes. He told me there was nothing GoDaddy could do (turns out this was bad advice, by the way)</p>
<p>I was busy worrying about what else was in danger. My wife was already on the task of changing every password, keycode, and security question associated with all of our bank accounts, credit cards, online identities, home pcs etc, and checking at each of these places for any trace of unusual activity.</p>
<p>In order to send a support request to the Russian registrar, I had to sign up as a member (and I noted with some distaste that they sent me my new password in plain text.) I sent them multiple emails explaining what happened. Then I re-sent each of those messages, in Russian this time, translated by translate.google, and including the original text.</p>
<p>I worked late that day to make up for the lost time and somehow managed another check-in before I went home.</p>
<p>That night I called GoDaddy again, hoping to get more help. By now I'd read about <a href='http://www.davidairey.com/google-gmail-security-hijack/'>the similar case of David Airey</a> where a gmail vulnerability led to a domain hijacking, which also involved godaddy. This time I got a more helpful support staff member. She told me to fill out the <a href='http://www.godaddy.com/agreements/ShowDoc.aspx?pageid=Dispute_On_Transfer_Away_Form'>'dispute on transfer away'</a> form at GoDaddy, which I promptly did. This meant that the right people at godaddy would be notified, and they'd contact the Russian registrar to request the domain be returned.</p>

<h2>Wrapping up part 1.</h2>

<p>While there's more that's happened since, things haven't really progressed since that day at all.</p>

<p>I still haven't regained control of the domain.  I'm waiting on word from the Russian registrar. I remain hopeful that any minute now I'll get an email from them saying "Ah, we're sending back your domain!" -- but my hope is fading.</p>

<p>The name servers haven't been changed, so my content continues to be served up as always. If it does go down, the plan is to launch a new and improved secretGeek at <a href='http://LeonBambrick.com'>LeonBambrick.com</a>. Announcements or news will be via twitter (<a href='http://twitter.com/#!/secretGeek'>@secretGeek</a>) or from my business website, <a href='http://nimblething.net'>NimbleThing.net</a>.

<p><strong>If you have any information that could help me get control of my domain again please leave a comment, or tweet me (<a href='http://twitter.com/#!/secretGeek'>@secretgeek</a>), or get in touch via my (now re-secured) email address, leonbambrick@gmail.com</strong></p>

<p> In the next part of the story I want to discuss gmail security, all of the possible ways I could've been hacked, and the one I think is most likely. But I can't wait until then to put out the following checklists. These are steps that you can do to protect your email account and to protect your domains:</p>

<h2>What can you do to stop this happening to you?</h2>
<p><strong>Protect your email via:</strong></p>
<ul>
<li>Change your password often. For example, right now.</li>
<li>Make your password very strong.</li>
<li>In gmail: disable POP.</li>
<li>Ensure your password recovery options are as strong as your password.</li>
<li>Make sure 'always use https' is selected.</li>
<li>In gmail: check for unusual activity (it's available at the foot of the screen).</li>
<li>In gmail: don't let any other apps be associated with your account.</li>
<li>Use two-step authentication.</li>
</ul>
<p><strong>Protect your domains via:</strong></p>
<ul>
<li>Pay for private domain registration.</li>
<li>Pay for enhanced transfer protection. (e.g. at GoDaddy they call it 'Deadbolt' protection, and it means they require you to send them identification before they'll approve a transfer.)</li>
</ul>
]]>
    </description>
    <pubDate>Sun, 22 May 2011 13:30:20 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sg_hijack_1.asp</guid>
  </item>
<item>
  <title>secretGeek.net domain has been stolen. The site may go down.</title>
    <link>http://www.secretGeek.net/sg_hijack.asp</link>
    <description>
      <![CDATA[ 
<p><em>The short story:</em></p>
<p>A person with a Russian IP address broke into my email account and used that access to transer ownership of the secretGeek.net domain to a Russian registrar, webNames.ru.</p>
<p>The full story is jam packed with intrigue, daring adventure, black ops helicopters, sexy double agents, Ukrainian php developers, and a liberal dash of nerdy security best practices.</p>
<p>I will tell the full story once I have secured my domain again.</p>
<p>In the meantime, if your beloved secretGeek.net is suddenly replaced by a spammy porn site or variant thereof, do not despair. Follow me on twitter (<a href='http://twitter.com/#!/secretGeek'>@secretGeek</a>) or head to my business website (<a href='http://NimbleThing.net'>NimbleThing.net</a>) where (if necessary) I will mirror the original secretGeek content and continue blogging until I've taken charge of the domain again.</p>
]]>
    </description>
    <pubDate>Tue, 10 May 2011 11:37:25 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sg_hijack.asp</guid>
  </item>
<item>
  <title>Boring article about fixing a 'Login failed... untrusted domain' issue when connecting to SQL Server.</title>
    <link>http://www.secretGeek.net/boring_sql_one.asp</link>
    <description>
      <![CDATA[<p>This will be the most boring and dry technical post I've ever written. I promise. I'm only writing it down because I hear <a href='http://www.codinghorror.com/blog/'>Jeff Atwood's</a> voice in my head telling me that if I haven't shared the solution then there's almost no value in solving it.</p>

<p>So here was the problem...</p>
<p>On one of my machines, in recent months, anytime I tried to run an asp.net application that attempts to connect to a SQL Server database I receive this error:</p>

<blockquote><p>Login failed. The login is from an untrusted domain and cannot be used with Windows authentication.</p></blockquote>

<p>This is in a scenario where everything is local: I'm on a home computer, using a local database server. And it doesn't matter if I'm using IIS, webdevserver, or IIS Express. It doesn't matter if I'm trying to connect to SQL Express or SQL Server 2008 r2. I can enter the credentials using the machine name or IP address. The result is the same.</p>

<p>Looking in the Windows Event Viewer I see:</p> 

<blockquote><p>SSPI handshake failed with error code 0x8009030c, state 14 while establishing a connection with integrated security; the connection has been closed. Reason: AcceptSecurityContext failed. The Windows error code indicates the cause of failure.  [CLIENT: <local machine>]. </p></blockquote>

<p>Most of the 'solutions' online were not applicable because they involve domain issues. This is just a local machine.</p>


<p>One particular forum message involved a guy with a similar setup to me. He <a href='http://social.msdn.microsoft.com/Forums/en-US/sqlexpress/thread/54824854-0dc2-4d9b-9ad7-482701929a6e/'>solved the problem</a> for himself, but left behind only this very abbreviated and somewhat cryptic explanation:</p>

<blockquote><p>Solved. Traced the prob. to my net setup. The clue was this a msg in the Win System Log from Lsasrv about the target name and it showed the fqdn. Did some checks and the fqdn didn't look right, cleaned up my network config (I had customized it for another project), and now it's workin.</p></blockquote>

<p>The 'fqdn' is the fully qualified domain name. I found three different ways to find my fqdn, and one of them disagreed with the others! So this was a smoking gun.</p>

<p>Method 1 for finding the fqdn: When I right clicked on "computer" in the start menu and looked at the properties, the 'full computer name' was reported as '<code>Leon_xps</code>'.

<p>Method 2 for finding the fqdn: When I ran "</code>ipconfig /all</code>" and got these values for Host Name and Primary Dns Suffix:</p>
<blockquote><pre>   Host Name . . . . . . . . . . . . : Leon_xps
   Primary Dns Suffix  . . . . . . . : 
</pre></blockquote>   
<p>(Add them together and you get a fqdn of just 'Leon_xps'</p>

<p>Method 3 for finding the fqdn: In <code>cmd</code> when I ran '<code>ping -a Leon_xps</code>' I saw a <em>very</em> unexpected result!</p>

<p>It said:</p>

<blockquote><pre>Pinging leonx_xps [192.168.1.2] with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.</pre></blockquote>

<p>Notice that it's changed the name '<code>leon_xps</code>' into '<code>leon<strong style='font-size:large'>x</strong>_xps</code>' and come up with the ipaddress of '<code>192.168.1.2</code>'. instead of what I expected (such as a loopback address, 127.0.0.1... or some IPv6 nonsense)</p>

<p>There's only one kind of alchemy I know of for turning a good name into a crazy ipaddress: and that's <a href='http://secretgeek.net/block_sites.asp'>the magic of the HOSTS file</a>.</p>

<p>So I looked in there for '<code>leon<strong style='font-size:large'>x</strong>_xps</code>' and I found it. Found this crazy nonsense line, probably added by myself during some other wild-goose-chase for a solution to some other messed up problem:</p>

<blockquote><pre>192.168.1.2 leonx_xps leon_xps</pre></blockquote>

<p>Once I'd commented out that rule, the asp.net application immediately started to connect succesfully to SQL Server 2008 r2. And I can move forward with my testing of <a href='https://github.com/robconery/massive'>Massive</a> and <a href='https://github.com/SamSaffron/dapper-dot-net'>Dapper</a>.</p>

<p>But just mentioning the probable cause of this (not cleaning up during an earlier problem-panic) I remember that earlier tonight, while frantically trying to fix this problem I added some stupid rules to the windows firewall. I had better go and remove them now before my computer gets owned. Hey wait a moment!? Why is my CPU at 100%? Be right back...</p>
 
]]>
    </description>
    <pubDate>Sun, 08 May 2011 13:30:04 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/boring_sql_one.asp</guid>
  </item>
<item>
  <title>Coding While You Commute</title>
    <link>http://www.secretGeek.net/code_commute.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/higgins/slides_alt_net.html' style='float:right; margin:5px'><img src='http://secretGeek.net/image/codeslide_bus.png' alt='coding on the bus' style='border:2px solid #AAA' /></a>

<p>I gave a talk at <a href='http://www.meetup.com/Brisbane-Alt-Net-Group/'>Brisbane's alt.net</a> recently. You can download the slides <a href='http://secretGeek.net/higgins/slides_alt_net.zip'>here (1.5M zipped)</a> or:</p>
<p>&nbsp;</p>

<p><a href='http://secretGeek.net/higgins/slides_alt_net.html' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:20px;padding:10px;margin-left:45px;-moz-border-radius: 15px; border-radius: 15px;' title='slides for coding on the bus talk'>View the 97 slides online here</a></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (use arrow keys to advance)</p>
<p>&nbsp;</p>
<p>The theme was '<strong>Coding on the Bus</strong>' -- the optimisations and approach I've used for cranking out a dozen mini projects on my daily commute in the last year.</p>
<p>A bus is a seemingly counter-productive environment. As I say in one of the slides: 
<blockquote><p>If your workplace was like a bus: everyone would quit.</p></blockquote>
<p>And yet I'm producing a lot of stuff while on that short ride, definitely pushing the limits of my abilities. So this talk was an attempt to extract all the lessons I could from this real life productivity success story.</p>
<h1>TL;DR;</h1>
<p>Here's the quick version:</p>
<blockquote><p>
#1 Internet is bad<br />
#2 Keep it damn simple<br />
#3 Value your tools/libraries/snippets<br />
#4 Don't be a hero</p></blockquote>


<p>The people at Brisbane Alt.Net are a very cluey bunch so it was great to get their input on the whole thing. They were a very attentive and helpful bunch. It was a massive buzz talking to them. I highly recommend it.</p>

<a href='http://higgins.codeplex.com/' style='float:right;margin:5px'><img src='http://secretGeek.net/image/higgins_logo.png' alt='higgins presenter' style='border:5px solid #C00' /></a>

<h2>...And Introducing Higgins</h2>
<p>Naturally, I wrote the slides about writing on the bus, <em>while on the bus</em>. I don't have Powerpoint on my bus netbook, so I also had to write my own html-based slide presenter, which I've codenamed Higgins.</p>
<p>I've since added higgins to codeplex. You can <a href='http://higgins.codeplex.com'>get Higgins from codeplex</a> and use it yourself, if you're so inclined.</p>
<p>&nbsp;</p>

<p><a href='http://higgins.codeplex.com' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:20px;padding:10px;margin-left:45px;-moz-border-radius: 15px; border-radius: 15px;'>Visit higgins at codeplex</a></p>
<p>&nbsp;</p>
<p><a href='http://higgins.codeplex.com/releases/64531/download/228871' style='font-size:large; background-color:#333;color:#AFA;font-weight:bold;margin:20px;padding:10px;margin-left:45px;-moz-border-radius: 15px; border-radius: 15px;'>Download higgins here</a></p>

<p style='clear:right'>&nbsp;</p>

<img src='http://secretGeek.net/image/briz_alt_net_20.jpg' alt='briz alt net sign kind of ironic i think' style='border:2px solid #AAA; display:block;float:center;margin:5px;margin-left:auto;margin-right:auto;' />

<p style='clear:both'>&nbsp;</p>
]]>
    </description>
    <pubDate>Sat, 16 Apr 2011 03:33:12 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/code_commute.asp</guid>
  </item>
</channel>
</rss>


