<?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>A face-melting DSL that allows programming ON the iPhone (and iPad)</title>
    <link>http://www.secretGeek.net/progOnIphone.asp</link>
    <description>
      <![CDATA[<p>Some fools say you can't program <strong>on</strong> the iPhone.</p>
<p>I'm not talking about programming <em>for</em> the iPhone -- I mean sitting down with just your iPhone and using that device to bang out a new program.</p>

<p>Why not I say?</p>
<p>Fools (and people much smarter than me) are stumped because they point out that the hardware has restrictions which disallow the conversion of data (such as the programs you type) into executable code. And thanks to this deliberate hardware limitation you <em>categorically</em> cannot program on the iPhone. You run apps, not write them. That's what <em>they</em> say.</p>

<p>But -- it has a browser. A browser.</p>

<p>A BROWSER! Don't you see?!</p>

<p>I'm reminded of that bit in <a href='http://www.imdb.com/title/tt0330373/quotes'>Harry Potter and the Goblet of Fire</a>, when harry says he doesn't know how to win the dragon ball Z challenge, against a <em>REAL</em> dragon.</p>
<blockquote>
<p><em>What are you good at?</em> asks Professor Moody,</p>
<p><em>I'm good at flying,</em> whines Harry, <em>but I'm not allowed a broom.</em></p>
<p>Moody flares his nostrils and shouts <em>You're allowed a <strong>wand</strong>!!</em></p>
</blockquote>
<p>You see, if you are allowed a <em>wand</em> you can use it to get any other damn thing you want. So he uses the wand to get the broom and uses the broom to win the challenge. QED.</p>

<p>We're not allowed to <em>program</em>, but we are allowed to "<em>browse.</em>"</p>

<p>With a browser we have javascript and with javascript we have:</p>

<p><strong>ULTIMATE AWESOME!!</strong> <em>This</em> kind of awesome:</p>
<p><a href='http://secretGeek.net/image/howawesome.jpg'><img src='http://secretGeek.net/image/howawesome_th.jpg' alt='very awesome. and a ute in a tree.'></a> </p>

<p>So I've built a simple domain specific language, which emits javascript targeted at the iPhone. Via which you can build apps for the iPhone, without resorting to a regular computer.</p>
<p>More to follow in part 2 of this 3 part series with a bitter, tragic end.</p>
<p>(a short advertisment for part 2 of this series now follows, as requested by my angel investors)</p>
<h2>Part 2: IT WILL MELT YOUR FACE</h2>
<p>A simple domain specific language, which emits javascript targeted at the iPhone:</p>
<p> Will it really melt your face?</p>

<p>Let's see what gas-mask girl has to say:</p>

<img src='http://secretGeek.net/image/gmg_melt.png' alt='gas-mask girl says it will melt your face' style='border:1px solid #CCC;margin:10px' />

<p>And how about <a href='http://codinghorror.com'>Jeff Atwood</a>, what does he say:</p>

<img src='http://secretGeek.net/image/coding_scream_melt.png' alt='coding horror says it will melt your face' style='border:1px solid #CCC;margin:10px' />
<p>So, from a scientific point of view, the assertion is proved.</p>
<p>Stay tuned for part 2.</p>
]]>
    </description>
    <pubDate>Sat, 30 Jan 2010 09:54:48 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/progOnIphone.asp</guid>
  </item>
<item>
  <title>The secretGeek Disaster Recovery plan</title>
    <link>http://www.secretGeek.net/SweetBackup.asp</link>
    <description>
      <![CDATA[<p>Jeff Atwood suffered a '<a href='http://www.codinghorror.com/blog/archives/001315.html'>total data loss</a>' of his blog. And here is how 90% of the world's bloggers slept that night:</p>

<div style='border:10px solid #000;width:304px;margin:10px;padding:1px;background-color:#CCC;'>
<img src='http://secretGeek.net/image/slept_good_4.png' alt='a pleasant nights sleep' style='border:1px solid #FFF;' />
</div>


<p>Immediately thereafter I cracked open the box labelled 'the secretGeek Disaster Recovery plan' and inside I found only an empty biscuit wrapper and a few stale crumbs.</p>

<p>So, after many hours of labour, I present:</p>

<h2>The <em>revised</em> SecretGeek Disaster Recovery plan:</h2>

<p>Every Sunday night, at 10pm, <a href='http://www.2brightsparks.com/downloads.html#sbpro'>syncback</a> fires up and downloads the contents of this website onto my most reliable home computer. If the computer is asleep, it wakes up to perform this task.</p>

<p>When syncback is finished, it uses powershell to tweet that it's done. It twitters to a single-purpose account that no one else need follow but me ('secretGeek_bkup').</p>

<p>Every night, syncback wakes up the local computer and copies all of the family files (documents, photos, code and websites) onto external media. These are rotated fortnightly to an offsite location. We're prompted to do this by scheduled tasks in windows.</p>

<p>The most fun part was getting syncback to tweet -- so I want to share that with you here.</p>

<p>I used the script <a href='http://cid-5dec3b62d9308943.skydrive.live.com/browse.aspx/PowerShell%20Scripts/Twitter'>Out-Twitter.ps1</a>  -- from <a href='http://blog.sapien.com/index.php/2008/06/23/out-twitter/'>Jeffrey Hicks</a> of Sapien, with some cheap hacks I've added.</p>

<p>Jeffrey's original script was very clever. It stored the credentials (the username and password) in a very secure 'best-practice'-oriented way. But that bit of the script kept exploding for me, so I threw it out. Since the twitter account I'm accessing is very low value (it exists for one purpose only) I'm happy to hardcode the username and password into the script. A compromise like that is the sort of corner cutting upon which enterprise thrives ;-).</p>

<a href='http://secretGeek.net/image/syncback_runafter.png'><img src='http://secretGeek.net/image/syncback_runafter_th.png' alt='syncback configured to run' style='border:1px solid #CCC;margin:10px;' />
</a>

<p>Here's the exact callout string I put into syncback.</p>

<blockquote><code>powershell -command " 'backup complete (secretGeek) @secretGeek' | out-Twitter "</code></blockquote>
<p>Getting the quotes just write was by far the most annoying part. Followed by getting the firewall to play nice.</p>


<p>What's your backup strat? And did the coding horror blogapocalypso inspire you to make it better?</p>

<p>Also -- this just in: an authentic photo of Jeff, taken at the moment he first realised his VM wasn't coming back:</p>

<img src='http://secretGeek.net/image/coding_scream.png' alt='coding horror says you should get a backup' style='border:1px solid #CCC;margin:10px;' />
]]>
    </description>
    <pubDate>Thu, 28 Jan 2010 09:14:33 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/SweetBackup.asp</guid>
  </item>
<item>
  <title>Save KNVTn! Before it's too late</title>
    <link>http://www.secretGeek.net/save_KNVTn.asp</link>
    <description>
      <![CDATA[ 

<p> You know, I'm more that a little worried that the works of <em>KNVTn</em> will be lost in time, and historians of the future will have no record of this brilliant thinker.</p>

<img src='http://secretgeek.net/image/OCR_Knuth_KNVTn.png' alt='the works of KNVTn ' style='border:1px solid #CCC;margin:10px' />
<p> Possibly the only genius who can challenge the genius of <em>KNVTn</em> is that master of computer science, <em>DE |(nuth</em>.</p>

<img src='http://secretgeek.net/image/knuth_nuth.png' alt='that master of computer science, DE |(nuth' style='border:1px solid #CCC;margin:10px' />

<p>Unlike thinkers of bygone eras, I guess <em>KNVTn</em> and <em>DE |(nuth</em> are lucky that they live in an era where the marvels of OCR technology can be used to perfectly preserve their works for all time, without their mighty shadows being usurped by popularist hacks, like that pretender <a href='http://www-cs-staff.stanford.edu/~uno/'>Knuth</a> and his ilk.</p>
]]>
    </description>
    <pubDate>Sat, 16 Jan 2010 10:02:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/save_KNVTn.asp</guid>
  </item>
<item>
  <title>The Ultimate Agent of WERF Destruction</title>
    <link>http://www.secretGeek.net/cco.asp</link>
    <description>
      <![CDATA[<span style='float:right; background:black'><table><tr><td style='background:black'><a href='http://secretGeek.net/cco/cco.htm'><img src='http://secretGeek.net/image/crazyGrumpySmurf_.jpg' alt='CreditCardOlogy: What do the numbers say about you?' style='float:right;border:1px solid #CCC;margin:10px;'  /></a><br /><center style='clear:right'><small style='color:#FFF'>This guy knows it. Do you?.</small></center><br /></td></tr></table></span>
 
<p><a href='http://jCooney.net'>Joseph Cooney</a> and I were talking about the incredible revenue monster that is <a href='http://www.balsamiq.com'>Balsamiq</a>, a tiny software company which brought in <a href='http://www.balsamiq.com/blog/2010/01/03/a-look-back-at-2009/'>over a million bucks</a> last year. As such, the conversation soon turned to a lament for the paltry stipend that our own ISV's tend to bring in.</p>

<p>Pretty soon, one of us hit on a terrific winner of an idea, which you will see is far superior to any other possible money making venture, as it brings about exactly the right behaviour in people.</p>

<p>What one needs is a way to get the customer to take the wallet out of the pocket, and the credit card out of the wallet.</p>

<p>These are difficult steps with which potential customers are reluctant to demonstrate sufficient compliance.</p>

<p>Some products -- balsamiq being a great example -- seem to have a tremendous 'wallet-appeal'. After just a minute or two of testing that baby out, people realise this product will help them kick ass, and their WERF falls to almost zero, while their CCED rises to 100%. (WERF: Wallet extraction reluctance factor; CCED: Credit Card Extraction Desire)</p>

<p>So, Joseph and I devised a product of our own that has (I humbly submit) a better WERF curve, and a superior CCED factor than all your balsamiqs. And the time to market has been astounding: I time-boxed the development at 1 bus ride, and pretty much met this criteria.</p>

<p>So, here's the new product, I proudly present:</p>


<h1 style='padding:10px;margin:10px;'><a href='http://secretgeek.net/cco/cco.htm' style='border:1px solid #444; padding:10px'>CreditCardOlogy</a></h1>

<p>A big thanks to Mr Crazy Grumpy Smurf for agreeing to be the mascot of this little link out.</p>
<p>Web template from Ginger the Ninja of Open Source Web Design (OSWD).</p>
<p>Real ideas coming soon.</p>
]]>
    </description>
    <pubDate>Wed, 06 Jan 2010 09:16:41 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/cco.asp</guid>
  </item>
<item>
  <title>The new prisoner's dilemma</title>
    <link>http://www.secretGeek.net/prisoners_dilemma.asp</link>
    <description>
      <![CDATA[<p>A complete stranger who I have never met in my life sent me this little piece today, entitled:</p>

<h2>The new prisoner's dilemma</h2>

<img src='http://secretGeek.net/image/jailhouse-300x201.jpg' alt='rockin out in jail, computer free' style='border:20px solid #000;margin:15px;margin-left:30px;margin-top:0px;float:right;' />

<blockquote>
<p>Assuming you're paid X per day on your current project, what multiplier of X would you have to be paid to voluntarily go to prison? </p>
<p>So instead of a 3 month project you do 3 months in stir, for example.</p>
<p>Assume in prison you are unable to see your loved ones, your freedom to do what you want when you want is curtailed, choice of food etc is reduced. </p>
<p>Unlike real prison let's say you're protected from forcible sodomy. </p>
<p>Before deciding on the exact value of X that would suit you, consider the following facts:</p>
<p>There's no internet access of any kind. This means you'll almost never have to worry about cross browser incompatibilities or CSS positioning.</p>
<p>There are no meetings in prison. None. Parole hearings, maybe, but even those are avoidable if you spend enough time in solitary.</p>
<p>What value of X would it take for you to accept?</p>
<p>Naturally the multiplier does not have to be greater than 1.</p>
</blockquote>
]]>
    </description>
    <pubDate>Fri, 11 Dec 2009 08:56:14 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/prisoners_dilemma.asp</guid>
  </item>
<item>
  <title>Original Premise for a road movie</title>
    <link>http://www.secretGeek.net/road_movie_premise.asp</link>
    <description>
      <![CDATA[
<p>I woke up, feverish at 2 AM last night and typed this out. Here goes.</p>

<h2>Original Premise for a road movie</h2>

<p>Our hero is a nerdy kid, a computer lover. And he's also a fan of a particular rock band.</p>
 
<p>At 2 AM one morning the kid, our nerd hero, discovers that his favourite band's web domain has expired!</p>

<p>He springs into action and snaps it up -- he becomes the owner of www.WhateverTheBandIs.com -- and writes to them and tells them what happened.</p>

<p>Far from grateful, the band are furious! They demand it back.</p>

<p>Kid responds: he'll only give it back if they make him an official member of the band and take him on tour.</p>

<p>The band talk to their lawyer, it goes like this:</p>

<p>Lawyer: Well, technically the kid hasn't broken any laws. The only state this is a crime in would be (insert state name here). So if you can think of a way to get the kid to that state, then you could have him arrested.</p>
<p>Band: Our tour finishes in [that state].</p>
<p>Lawyer: So take him on tour. Get him to [state name] and arrest the little f*cker.</p>

<p>And that's the premise. Nerdy kid's on tour with a rockband, he tunes their guitars for them, fixes their computers, meets a girl, and is destined to be arrested.</p>

<p>It practically writes itself.

<p>I've done the hard part. Now the rest is up to you. 

<p>Note that 'the kid' could instead be an overweight 48 year old bachelor. And 'the rock band' could be an all-girl Japanese rap group. Just sayin.</p>
<p>(Added benefit: changes like that would make me less likely to be sued by <a href='http://www.imdb.com/title/tt0181875/'>Cameron 'Almost Famous' Crowe</a>)</p>

<p>Research needed: do bands actually value their webdomain so much that they'd pretend to have a kid join their band then arrest him?</p>
<p>Way more awesome variation: same story, except the domain that has expired is NASA. Kid snaps it up, tells NASA he wants *in* on the upcoming journey to Mars. NASA look into it and realise that it's the only way to save face, so they reluctantly agree, plus taking a kid top-side is good for publicity. What happens next? This sucker writes itself! So don't just stand there, lick yer pencil and start scribblin.</p>
<p>(Sorry for bleeping the swear word above, [F*cker that is] but this is a family-friendly blog. And sorry for swearing in the first place, but, well, I think we all know that lawyer's are a potty-mouthed bunch of f*ckers)</p>
]]>
    </description>
    <pubDate>Wed, 09 Dec 2009 08:22:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/road_movie_premise.asp</guid>
  </item>
<item>
  <title>What's a better game than Devshop?</title>
    <link>http://www.secretGeek.net/cubicle_fps.asp</link>
    <description>
      <![CDATA[
<p>I was away from work, sick, on Wednesday and Thursday this week. Today, Friday, I was well enough to work from home -- but not come into the office.
<p>Working from home was interesting. I setup my <a href='http://secretgeek.net/desk_story_wall.asp'>usual task board</a>, and tore through the actions.</p>

<div style='float:left;background-color:#FFF;'>
<img src='http://secretGeek.net/image/taskboard_10am.jpg' alt='taskboard by 10 am' style='border:1px solid #CCC;margin:10px' />
<img src='http://secretGeek.net/image/lr_arrow.png' alt='becomes' style='border:0px solid #CCC;margin:10px' /> 
<img src='http://secretGeek.net/image/taskboard_4pm.jpg' alt='taskboard by 4pm' style='border:1px solid #CCC;margin:10px' />
</div>

<p style='clear:both'>Still I missed the physical reality of the office environment. I asked my colleagues what was going on, and they sent through some very enlightening screenshots.</p>
<p>It seems they'd been playing a game even more awesome than <a href='http://secretgeek.net/devshop_i.asp'>DevShop</a>. </p>
<h1>Cubicle Attack!</h1>
<h2>The First Person Shooter in a Peaceful Office Setting.</h2>

<div style='float:left;background-color:#FFF;'>
<a href='http://secretGeek.net/image/mike_attack.jpg'><img src='http://secretGeek.net/image/mike_attack_sm.jpg' alt='mike attacks with foamy hot latte' style='border:1px solid #CCC;margin:10px' /></a>
<img src='http://secretGeek.net/image/lr_arrow.png' alt='becomes' style='border:0px solid #CCC;margin:10px' /> 
<a href='http://secretGeek.net/image/steve_revenge.jpg'><img src='http://secretGeek.net/image/steve_revenge_sm.jpg' alt='the steve strikes back -- the stapler incident' style='border:1px solid #CCC;margin:10px' /></a>
</div>
<blockquote><code style='font-size:small'>
> p1 brandishes foamy hot latte.<br />
> p1 attacks p2.<br />
> p1 misses.<br />
> p2 brandishes blue stapler.<br />
> p2 attacks p1.<br />
> HIT!<br />
> p2 wins.<br />
Play again y/n?<blink>|</blink>
</code>
</blockquote>



<p style='clear:both'>Which leads me to side with Wally on a possible reason why working from home is so much more productive than going into the office:</p>
<p>
<a href='http://www.dilbert.com/2009-12-03/'><img src='http://secretGeek.net/image/wally_cubicle_research.png' alt='my cubicle is surrounded by idiots who make it impossible to work' style='border:1px solid #CCC;margin:10px' /></a> 

<p>Ah, 'tis true. But I'll be there Monday.</p>
]]>
    </description>
    <pubDate>Fri, 04 Dec 2009 07:51:16 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/cubicle_fps.asp</guid>
  </item>
<item>
  <title>DevShop: The Cool Game that Makes Development Look Fun</title>
    <link>http://www.secretGeek.net/devshop_i.asp</link>
    <description>
      <![CDATA[ 
<img src='http://secretGeek.net/image/sallys_beauty_view_66.jpg' alt='sallys spa, you push customers around and upgrade equipment' style='border:1px solid #000;margin:10px;float:right;' />

<p>Despite my <a href='http://www.secretgeek.net/iphone_free.asp'>earlier</a> <a href='http://www.secretgeek.net/sophilos101.asp'>protests</a> about the damn thing, I went and bought a bloody iphone. </p>
<p>And on this new device (with which I am utterly utterly obsessed) I've been playing a bunch of games, and hence, have been thinking about <em>inventing</em> new games of my own.</p>

<p>Now one of the most intriguing games I've played is 'Sally's Spa' (pictured at right) from <a href='http://www.gamescafe.com/'>Game's Cafe</a>.</p>

<p>It's a kind of 'lemonade stand' game, tailored around running a day spa, with a few interesting little details.</p>

<p>I played an intense session of this on the way to work one day last week, so when I arrived I was still in a game-trance and couldn't help but see my life as an 'extended bonus round' of Sally's Spa.</p>

<img src='http://secretGeek.net/image/angry_mole.jpg' alt='an angry mole, actually a failing automated test, annoyed to have been plucked from his burrow to arrive in my subconscious mind when he least expected it ' style='border:1px solid #000;margin:10px;float:right;clear:right' />

<p>At the 'daily team standup' we were throwing the over-inflated tennis ball around, in a mesmerising, slightly trippy dance, then later the 'build chicken' flew past me, and i saw the automated test failures  popping up like members of a cosmic game of <a href='http://en.wikipedia.org/wiki/Whac-A-Mole'>whac-a-mole</a>.</p>

<p>Over lunch, while munching my avocado chicken bonus food supplement, I used one hand to draw-up detailed plans for a <em>classic</em> iphone game, based around the establishment and advancement of a software development shop. Let's see what happens as you take your humble development house from the small time to the big time...</p>

<p>So, here's this week's ridiculous plan, complete with iphone scanned images, for a face-melting platform mega killer:</p>

<h1>DEVSHOP!</h2>

<h2>How does it start?</h2>
<p>You're a dev who decides to go it alone, and start their own... (wait for it...)... <strong>DEVSHOP!1!!</strong></p>

<p>You start out with a crappy office, a few plastic chairs, an old 386 with a 15 inch CRT. Your development tool of choice is 'notepad.exe'. Source control? What's that.</p>
<p>You do have a story wall, a cheap desk for extracting customer requirements and a typewriter for creating invoices, once the product ships.</p>
<p>Here's the basic layout:</p>
<p>

<span style='background:black;margin:10px;'><table><tr><td style='background:black'><a href='http://secretGeek.net/image/devshop_starting_fullsize.png'><img src='http://secretGeek.net/image/devshop_starting_smaller.png' alt='devshop: modest start, click for larger image' style='float:right;border:1px solid #CCC;margin:10px;'  /></a></td></tr></table></span>
</p>


<p>The only staff member is you. And I'm sorry to tell you, your skill-level is very low in terms of business analysis, development and testing. You're a basic 'Jack of No Trades'. With no other staff, you have to do it all yourself.</p>

<p>As new customers arrive in the bland reception area (lower left), you take them to the meeting 'room' (top left) where they divulge their requirements, which then appear on the story wall (top middle). You head to your cubicle to develop the requirements, then pick up those same requirements for final testing, and finally, if the work passes your testing, to the billing desk where customers are presented with an invoice.</p> 

<p>Due to your lack of skills, things can go wrong at every step. The analysis, the coding and the testing are all error prone in multiple ways. Poor analysis can create invalid requirements that need clarification during development, or for which the customer later reject the works (or pays less, or demands re-work). The development itself is slow and buggy, while the testing is inconsistent, and likely to either let bugs through or cause wasteful re-development.</p>

<p>But even with these limitations you can still earn a trickle of dollars to get through those first few awkward rounds.</p>

<p>When each round finishes, you get a chance to invest the money you've accumulated to improve your devshop, and raise the bar.</p>

<p>You might upgrade your equipment. Maybe turn that 15 inch cathode ray tube  into a triple-panel flat screen, for added productivity. Replace that plastic chair with an <a href='http://en.wikipedia.org/wiki/Aeron_chair'>Aeron</a> -- including added lumbar support. Add a lolly jar to the meeting room, to keep customer's happy; or get a <a href='http://tongodeon.livejournal.com/311999.html'>work blind</a> or a <a href='http://www.jwz.org/tent-of-doom/'>camo cube</a>. </p> 

<p>You can upskill your staff, buying them copies of 'Code Complete' and so forth (the game could be monetized through product placement?) or by sending them on training in a myriad of topics.</p>

<p>Training (and books) are centred around topics that apply to the chief disciplines: Development, Testing and Business Analysis, always with a view to increasing speed of a step (a step is done faster), decreasing turbulence (less steps over all), or improving customer satisfaction (better pay at the end of it).</p>

<p>Really swimming in cash? You might be ready to increase your headcount. Go to the job market to hire extra people. Each candidate advertises a certain competency in terms of Development, Testing and Business Analysis, and they all demand a hefty price. But until you've hired them and seen them in action, you don't really know what you're getting. Unless, of course, you've given yourself enough training in Human Resourcing and you've upgraded your lie-detector to the most expensive model on the market.</p>

<p>Here's how the same office might look once you've hired a bunch of people and equipped them well.</p>

<span style='background:black;margin:10px;'><table><tr><td style='background:black'><a href='http://secretGeek.net/image/devshop_advanced_larger_.png'><img src='http://secretGeek.net/image/devshop_advanced_most_c.png' alt='devshop: more advacned' style='float:right;border:1px solid #CCC;margin:10px;'  /></a></td></tr></table></span>
</p>
 

<p>Still, the difficulty for me, is trying to see my life as anything other than an extended, life-size game of 'DevShop'. Maybe if I put the iphone down for just long enough, reality will begin to find its way back into my state of mind. </p>

<p>Reality. There's an app for that, right?</p>

]]>
    </description>
    <pubDate>Sun, 29 Nov 2009 10:03:28 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/devshop_i.asp</guid>
  </item>
<item>
  <title>Should be purple</title>
    <link>http://www.secretGeek.net/colormixing.asp</link>
    <description>
      <![CDATA[ 
> 
Leon!<br />
<br />
Desperately need help!<br />
I been racking my brains about this all morning!<br />
<br />
Why isn't my HELLO WORLD purple?<br />

<pre>
<FONT COLOR='BLUE'>&lt;</FONT><FONT COLOR='DARKRED'>FONT</FONT> <FONT COLOR='RED'>COLOR</FONT><FONT COLOR='BLUE'>='BLUE'></FONT>
   <FONT COLOR='BLUE'>&lt;</FONT><FONT COLOR='DARKRED'>FONT</FONT> <FONT COLOR='RED'>COLOR</FONT><FONT COLOR='BLUE'>='RED'></FONT>
      HELLO WORLD! (should be purple)
   <FONT COLOR='BLUE'>&lt;/</FONT><FONT COLOR='DARKRED'>FONT</FONT><FONT COLOR='BLUE'>></FONT>
<FONT COLOR='BLUE'>&lt;</FONT><FONT COLOR='DARKRED'>FONT</FONT><FONT COLOR='BLUE'>></FONT>
</pre>

S.R.<br />
</blockquote>
]]>
    </description>
    <pubDate>Fri, 27 Nov 2009 23:04:34 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/colormixing.asp</guid>
  </item>
<item>
  <title>Kitchen Agile</title>
    <link>http://www.secretGeek.net/k_agile.asp</link>
    <description>
      <![CDATA[<img src='http://secretGeek.net/image/story_wall_16.png' alt='kitchen agile' style='border:1px solid #CCC;margin:10px;float:right;' /> 

<p>Well, I can see that this would appear tragic from most angles, but it's working out okay for me.</p>

<p>I setup the kitchen at home to have an 'agile' story wall, for managing my software hobby projects.</p>

<p>This was only a temporary arrangement (no way would Mrs SecretGeek allow me to permanently comandeer a wall in any of the liveable areas of the household, you understand.) The kitchen was briefly devoid of furnishings, while we had the floor repaired. And while the room was in this bare state, there was a big empty wall staring at me, just <strong>daring</strong> me to use it up with some ridiculous leon ideas.</p>

<p>So I turned it into a story wall to manage all the little hobby projects, web-sites, and applications, that are fighting for my nonexistent spare time.</p>
<p>The workers who repaired the kitchen floor probably realised there was a freak in the house. I can handle that.</p>

<img src='http://secretGeek.net/image/story_wall_33_lined_pp.png' alt='kitchen agile' style='border:0px solid #FFF;margin:10px;float:right;clear:right' /> 
<p>Along the top I put headings, "Project", "Goal", "Backlog", "In Progress" and "Closed" (see orange arrow at right).</p>
<p>Each project forms a swim lane of its own (shown by purple arrow in picture at right). I seem to have 9 projects in flight at the moment.</p>
<p>I use little coloured 'bread-ties' as icons to highlight certain tasks (indicated by green arrows in shot above):</p>

<ol><li><font color='blue' style='font-weight:bold'>Blue</font> bread tie
<p>Blue is the 'next-action' -- it's whatever task is top of mind at the moment. (This lets me have multiple projects that are officially in progress, when only one can really be the winner -- usually <a href='http://TimeSnapper.com'>TimeSnapper</a>). </p></li>

<li><font color='Red' style='font-weight:bold'>Red</font> bread tie
<p>A red bread-tie indicates a task on which i'm blocked, stuck, making no progress.</p></li>

<li><font color='Gray' style='font-weight:bold'>White</font> bread tie
<p>White is the next item to work on in my HP-Mini computer (which I only use on the bus to and from work). This bread-tie is like the <a href='http://en.wikipedia.org/wiki/Getting_Things_Done'>GTD</a> idea of a context -- some items can only be addressed in a particular location or situation. (in gtd  they have '@work', '@car' etc) </p></li>

<li><font color='Green' style='font-weight:bold'>Green</font> bread tie
<p>Green is stuff that I must ask Mrs SecretGeek to do for me. (She is my chief financial officer).</p></li>
</ol>
<p>Once the kitchen floor was rpeaired, we moved the furniture back in, and I moved the 'task-wall' into the study. Here's a more recent photo:</p>

<img src='http://secretGeek.net/image/kagile_17_5.png' alt='kitchen agile, relocated to study' style='border:1px solid #CCC;margin:10px;float:right;' /> 
<p>The little cardoard-cutout of R2-D2 seems to have disappeared in the move. A certain toddler will need to be interrogated, Darth Vader style, on its whereabouts.</p>
 

<p>The projects I've got in flight, according to this wall, are:</p>

<ul>
<li><a href='http://TimeSnapper.com'>TimeSnapper</a> 'site-wide' license enhancements</li>
<li><a href='http://TimeSnapper.com'>TimeSnapper professional</a> (general dev/support)</li>
<li><a href='http://wiki.TimeSnapper.com'>25 Steps series</a></li>
<li><a href='http://secretGeek.net'>Blogging</a></li>
<li><a href='http://TimeSnapper.com/NextAction/'>NextAction</a></li>
<li>Project NR (skunkwork commercial product to be)</li>
<li><a href='http://code.google.com/p/metanote/'>Metanote</a></li>
<li><a href='http://secretGeek.net/wscg.htm'>WSCG</a></li>
<li>Project CSD (skunkwork opensource project to be)</li>
</ul>
<p>(and I've added three more since these photos were taken)</p>
 
<h3>See also:</h3>


<p>And here's a similar article from my colleague Ben Arnott, <a href='http://www.blognow.com.au/stimpsblog/174789/At_home_storywall.html'>Fatherhood, People Leadership and Agile</a>, where he admits using Agile to manage the kids.</p>

<p>In response to this, someone else at work admitted, very sheepishly, that she uses Agile-style retrospectives at home.</p>

<p>There was also an <a href='http://elegantcode.com/2009/08/31/code-cast-31-agile-for-families/'>elegant code podcast</a> episode covering this talk:
<a href='http://agile2009.com/node/1080'>Agile Practices at Home: Iterating with Children</a> from Agile2009.</p>

<p>Makes me wonder how many people are secretly using these kind of techniques at home with their kids and partners, without having the guts to talk about it in public.</p>
<p>Ever taken your work home in this way?</p>]]>
    </description>
    <pubDate>Sat, 21 Nov 2009 09:03:24 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/k_agile.asp</guid>
  </item>
<item>
  <title>Perhaps "Go" is the new Visual Basic</title>
    <link>http://www.secretGeek.net/go_vb.asp</link>
    <description>
      <![CDATA[ 
 
<p>As a cursed "magpie developer" I can't help but read up on every new thing I hear about.</p>
<p>And the latest shiny thing is Google's "Go" language. (Google Wave is sooo last month).</p>
<p>One of the authors is <a href='http://en.wikipedia.org/wiki/Ken_Thompson'>Ken Thompson</a>, creator of Unix and the 'B' Language (pre-cursor to C).</p>
 
 
<p>I'm fascinated by little details, and here's one that I like:</p>
 
 
<blockquote><h2>If</h2>
<p>In Go a simple if looks like this:</p>
<pre>if x > 0 {
    return y
}</pre>
</blockquote>

<p>Mandatory braces encourage writing simple if statements on multiple lines. It's good style to do so anyway, especially when the body contains a control statement such as a return or break.</p>
 
<p>No parens required for an if... but braces are required. This is the opposite of other languages, but makes great sense to me!</p>
 
<p>It's kind of like <em>Visual Basic</em>, if anything.</p>
<p>In fact, there a whole bunch of things that are reminiscent of Visual Basic:</p>
 
<blockquote><pre>var s string = "";</pre>
<p>This is the var keyword, followed by the name of the variable, followed by its type, followed by an equals sign and an initial value for the variable.</p>
</blockquote>

<p> 
This is more than a little reminiscent of VB:</p>
 
<blockquote><pre>Var s as string = "";</pre></blockquote>
 
<p> Although with GO:</p>
 
<blockquote> 
<p>we could go even shorter and write the idiom</p>
                        <pre>s := "";</pre>
 </blockquote> 
 
<p>Similarities continue...</p>
 
<blockquote>  
<p>Functions are introduced with the <code>func</code> keyword</p>
</blockquote> 
 
<p>Much like the way the 'Function' keyword is used in Visual Basic, hey?</p>
<p>And <strong>nothing like</strong> C-family languages that begin a function declaration with the type being returned. (Personally I wish they'd gone a ML-style choice of keyword, and used 'fun' for function.)</p>
 
<p>How is the return type shown? Almost exactly like VB...</p>

<p>GO:</p>
<blockquote>  
<pre>func Area(side int) int {
   //code goes here
}</pre>
</blockquote>  

<p>VB:</p>
<blockquote>  
<pre>Function Area(side as int) as int
     //code goes here
End function
</blockquote>  
 
<p>The similarities end approximately there. Did I miss others?</p>
 
<p>(Note that the similarities with Javascript are just as pronounced, and just as superficial.)</p>
 
<p>Another superficial detail I like is that semicolons act as separators, not terminators.</p>
 
<p>The coolest little language-nerd item for me is that capitalization is used to indicate scoping.</p>
 
 <blockquote>
<p>In Go the rule about visibility of information is simple: if a name (of a top-level type, function, method, constant or variable, or of a structure field or method) is capitalized, users of the package may see it. Otherwise, the name and hence the thing being named is visible only inside the package in which it is declared. This is more than a convention; the rule is enforced by the compiler. In Go, the term for publicly visible names is ''exported''.</p>
             </blockquote>  
			 
<p>That is a beautiful little detail. I love the simplicity of this approach. If a language is going to be case-sensitive, then it should *do something* with the casing.</p>
 
<p>But superficial details aside and onto the important stuff...</p>


<blockquote> 
<h2>Indentation</h2>
<p>We use tabs for indentation and gofmt emits them by default. Use spaces only if you must.<p>
</blockquote> 

<p>Sorry Google, I'm afraid Go is not for me.</p>
 
<hr />
<h3>References</h3>
<ol>
  <li><a href='http://golang.org/doc/effective_go.html'>Effective Go</a></li>
  <li><a href='http://golang.org/doc/go_tutorial.html'>Go Tutorial</a></li>
  <li><a href='http://golang.org/doc/go_spec.html'>Language Specification</a></li>
</ol>
 
]]>
    </description>
    <pubDate>Thu, 12 Nov 2009 09:42:44 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/go_vb.asp</guid>
  </item>
<item>
  <title>zen-coding: turn those CSS selectors upside down</title>
    <link>http://www.secretGeek.net/zen_coding.asp</link>
    <description>
      <![CDATA[<a href='http://secretgeek.net/zen/coding.htm'><img src='http://secretGeek.net/image/zen_coding_70.png' alt='zen-coding, online demonstration' style='border:3px solid #666;margin:10px;float:right;' /></a>

<p>Web developers <a href='http://code.google.com/u/serge.che/'>Sergey Chikuyonok</a> and <a href='http://pepelsbey.net/'>Vadim Makeev</a> have built a nifty set of plugins called <a href='http://code.google.com/p/zen-coding/'>'zen-coding'</a> that work across a range of IDE's.</p>
<p>The niftiest idea from 'zen-coding' is a way of writing Html very very quickly, by a kind of <em>reverse-application of CSS-selectors</em>.</p>

<p>Ah, I think examples will show what words could never explain...</p>
<p>If you type:</p>
<blockquote><pre>div.name</pre></blockquote>
<p>and press the shortcut-key to invoke 'zen-coding' -- the snippet expands into this piece of html:</p>
<blockquote><pre>&lt;div class="name">&lt;/div></pre></blockquote>
<p>If you type:</p>
<blockquote><pre>div#name>p+p</pre></blockquote>
<p>and invoke 'zen-coding' -- the snippet becomes:</p>
<blockquote><pre>&lt;div id="name">
  &lt;p>&lt;/p>
  &lt;p>&lt;/p>
&lt;/div>
</pre></blockquote>
<p>There are more complicated scenarios as well: if you understand <a href='http://www.456bereastreet.com/archive/200509/css_21_selectors_part_1/'>CSS selectors</a>, you'll wrap your head around it very easily.</p>
<p>Hence, zen-coding lets you write markup very very quickly.</p>

<p>I've built an <a href='http://secretgeek.net/zen/coding.htm'>online demonstration</a>, a simple web app that uses the code from Sergey's aptana plugin.</p>

<p>These ideas have been re-implemented for <a href='http://www.emacswiki.org/emacs/ZenCoding'>emacs</a>, and there's a <a href='http://github.com/rstacruz/sparkup'>vim re-implementation</a> in the wild as well.</p>

<p>There's some very good screencasts around, here's <a href='http://pepelsbey.net/pro/2008/08/zen-html/'>one from Vadim</a> and <a href='http://vimeo.com/7405114'>one from Sergey</a>.</p>

<p>This is a cool idea. In the same way that JScript takes CSS Selector DSL and re-purposes them, 'zen-coding' squeezes extra utility out of this tiny DSL. What other DSL's can be used backwards, forwards, sideways? Can <a href='http://www.linqpad.net/'>linq expressions</a> be reversed for generating .net classes (<a href='http://secretgeek.net/rebuilder_idea.asp'>rebuilder style</a>)? Can SQL Select Queries be parsed and turned into DDL for creating a database schema? Can XPath be used as an XML generation tool?</p>

<p>It's also gotten me thinking about how this style of code generation can be applied to my favourite little hobby-tool, <a href='http://secretgeek.net/wscg.htm'>'World's Simplest Code Generator'</a></p>
<p><a href='http://secretgeek.net/wscg.htm'>WSCG</a> has come a long way lately, as I've been using my bus-rides to make WSCG more powerful (typing on the HP-mini I got at Tech-Ed) adding more macros, built-in functions, an <a href='http://secretgeek.net/wscg_help.htm'>extensive help file</a>, and some powerful operators called $ONCE and $EACH.</p>
]]>
    </description>
    <pubDate>Mon, 09 Nov 2009 11:05:37 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/zen_coding.asp</guid>
  </item>
<item>
  <title>Debugging: It's all about finding Albuquerque.</title>
    <link>http://www.secretGeek.net/debugsbun.asp</link>
    <description>
      <![CDATA[<span style='float:right; background:black; margin-left:15px'><table><tr><td style='background:black'><img src='http://secretGeek.net/image/alberkoiki_tr.jpg' alt='i shoulda made a left toin at albakoiki' style='border:1px solid #CCC;margin:10px;'  /><br /><center style='clear:right'><small style='color:#FFF'><em>"I <em>knew</em> I shoulda taken that<br /> left turn at Albuquerque!"</em></small></center><br /></td></tr></table></span>


<p><a href='http://blogs.msdn.com/ricom/'>Rico Mariani</a> has an excellent series about <a href='http://blogs.msdn.com/ricom/archive/tags/History+of+Visual+Studio/default.aspx'>The History of Visual Studio</a>. </p>

<p>There's one little 'detour' in <a href='http://blogs.msdn.com/ricom/archive/2009/10/19/my-history-of-visual-studio-part-10-final.aspx'>Part 10 of the story</a>, where Rico describes <em>debugging</em>.</p>
<p>I love his description, he's clearly delivered this <a href='http://en.wikipedia.org/wiki/Bit_(disambiguation)' title='see definition 7: an excerpt of material from a standup comedians repertoire '>bit</a> many times. It's so polished it deserves to be quoted all on its own.</p>

<blockquote class='rght' style='padding:18px'>

<p>I was the debugger lead in the early 90s and I used to explain the utility of debuggers and debugging tools in this way:  Imagine a program with a bug, it has been running along, everything is fine, everything is going wonderful, the flow of execution arrives at a point we'll call Albuquerque, where it turns right.  Now as every <a href='http://en.wikipedia.org/wiki/Bugs_Bunny'>Bugs Bunny</a> fan knows, the correct thing to do at Albuquerque is to <a href='http://www.bing.com/search?q=I+shoulda+turned+left+at+albuquerque'>turn <em>left</em></a>. The program's decision to go right has led it down an incorrect path and sometime later we will observe a problem.</p>

<p>Now if we're very lucky "sometime later" will be very soon, like for instance it might be that we just de-referenced a null pointer and we're going to take an exception about 2 nanoseconds after the mistake.  That's an easy bug to fix.  On the other hand it could be that "turning right" was more subtle - maybe we corrupted a data structure in a minor way and it might be days before we can see an observable effect - that kind of bug is a nightmare.</p>

<p>Finding "Albuquerque" is what I call The Fundamental Problem of Debugging.  The debugger provides you with tools (e.g. breakpoints) that allow you to stop execution while things were still good and slowly approach the point where things first went wrong.  The debugger likewise provides you with tools to examine the state afterwards, hoping to find evidence of what went wrong in the recent past that will help you to see the origin.  The callstack window is a great example of looking at the past to try to understand what might have already gone wrong.</p>

<p>To find the problem, you might start after the failure and try to look back, finding a previously unobserved symptom and moving closer to the original problem or you might start before the failure and try to move forward slowly, hopefully not overshooting the problem by too much.  Or you might do a combination of these things.  You might add assertions or diagnostic output to help you to discover sooner that things went wrong, and give you a view of the past.  It's all about finding Albuquerque.</p></blockquote>

<p style='clear:both'>Rico nicely covers just about all the things you do, in the desperate search for that elusive bug.</p>

<p>Some say too much time in the debugger is a sign of a bad programmer.</p> 

<p>The zero-debugging viewpoint says your code should be so well designed you can reason about it without having to step into it. <a href='http://research.microsoft.com/en-us/people/thoare/'>Others</a> says that the best way to avoid long debugging sessions is consistent <a href='http://research.microsoft.com/apps/pubs/default.aspx?id=70290'>use of assertions</a>.</p>

<p>I'll do whatever I can to avoid the existence of bugs in the wild. I'll use any approach I can to cut down the necessity for a deep debugging session.</p>

<p>But all the same, debugging is powerful magic. I expect I'll give up the Joy of Debugging when you pry the debugger from my cold, dead hands.</p>

 
]]>
    </description>
    <pubDate>Fri, 06 Nov 2009 06:16:21 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/debugsbun.asp</guid>
  </item>
<item>
  <title>The Real-Time online JQuery Editor</title>
    <link>http://www.secretGeek.net/rtjqe_about.asp</link>
    <description>
      <![CDATA[<a href='http://secretgeek.net/rtjqe/realtimejqueryeditor.htm'><img src='http://secretGeek.net/image/rtjqe_40.png' alt='the Real Time online JQuery Editor' style='border:1px solid #CCC;margin:10px;float:right;' /></a>


<p>Here is it -- <a href='http://secretgeek.net/rtjqe/realtimejqueryeditor.htm'>'the Real Time online JQuery Editor'</a>, or <abbr>RTJQE</abbr> for short.</p>
<p>Where do we start? Paul Stovell built a nifty little wpf app called <a href='http://www.paulstovell.com/jquerypad'>JQueryPad</a>.</P>
<p>It promises to get rid of the need to Alt-Tab while deving (and debugging) your JQuery code.</p>
<p>No, we have to go back earlier than that: <a href='http://htmledit.squarefree.com/'>Square free realtime html editor</a> came out years ago... (I blogged about it <a href='http://www.secretgeek.net/realtimecss.asp'>in 2005</a>)</p>
<p>So I got the two ideas and smashed them together in the large hadron collider that is my tiny brain.</p>
<p>The result is <a href='http://secretgeek.net/rtjqe/realtimejqueryeditor.htm'>'the Real Time online JQuery Editor'</a>, or <abbr>RTJQE</abbr> for short. It's guaranteed to work in every browser, except IE, and you may experience some quirks in Firefox, Chrome, Opera and Safari. ;-)</p>

]]>
    </description>
    <pubDate>Sun, 01 Nov 2009 01:20:54 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/rtjqe_about.asp</guid>
  </item>
<item>
  <title>HTML5, a 3 minute guide</title>
    <link>http://www.secretGeek.net/html5_pilgrim.asp</link>
    <description>
      <![CDATA[<p><a href='http://diveintohtml5.org/about.html'>Mark Pilgrim</a> (one of the internet's colourful characters) is writing a <a href='http://diveintohtml5.org/'>book on <abbr>HTML5</abbr>.</a></p>
<p><a href='http://diveintohtml5.org/semantics.html'>Chapter 3</a> is a great read but at forty pages it's too long for a busy and important person like you to follow along. So I'm gonna summarise (brutally), for your benefit.</p>
<p>Mark shows us <a href='http://diveintohtml5.org/examples/blog-original.html'>before</a> and <a href='http://diveintohtml5.org/examples/blog-html5.html'>after</a> version of a document: it starts off using pre-existing HTML features, and he carefully simplifies the document (and expands it) with all the goodness that <abbr>HTML5</abbr> provides.</p>
<p>The two following images show the resulting 'diff', as seen by <a href='http://www.sourcegear.com/diffmerge/'>SourceGear's DiffMerge</a> tool.</p>
<p>
<a href='http://secretGeek.net/image/htmlOriginal_toHtml5_annotated.png'><img src='http://secretGeek.net/image/htmlOriginal_toHtml5_annotated_35.png' alt='before and after, first half' style='border:1px solid #CCC;margin:10px;float:left;' /></a> <br />
<A href='http://secretGeek.net/image/htmlOriginal_toHtml5_part2_annotated.png'><img src='http://secretGeek.net/image/htmlOriginal_toHtml5_part2_annotated_35.png' alt='before and after, second half' style='border:1px solid #CCC;margin:10px;float:left;clear:left;' /></a> </p>

<p style='clear:left'>Here's my very poor and half-baked summary of the diff:</p>
<ol>
<li>You don't need quotes around attributes (unless there's spaces in the attribute, and then you do) <super>*</super></li>
<li>You don't need closing tags in redundant situations (e.g. <code>'tr','p'</code>) <super>*</super></li>
<li>Less <a href='http://csscreator.com/divitis'>"DIV"itis</a> due to new and <em>meaningful</em> elements:<br />
<dl>
<dt><code>&lt;header&gt;</code></dt><dd>...where you might've said <code>&lt;div id='header'&gt;</code> previously</dd>
<dt><code>&lt;hgroup&gt;</code></dt><dd>...to tie a bunch of headings together, where they don't create subsections </dd>
<dt><code>&lt;nav&gt;</code></dt><dd>...where you might've said <code>&lt;div id='navigation'&gt;</code> previously</dd>
<dt><code>&lt;article&gt;</code></dt><dd>...to denote standalone pieces that can be extracted and read on their own (perhaps the <code>&lt;div id='content'&gt;</code> of your document)</dd>
<dt><code>&lt;aside&gt;</code></dt><dd>...to denote diversions from your text that aren't part of an article itself (for example, <a href='http://en.wikipedia.org/wiki/Pull_quote'>pull quotes</a>)</dd>
<dt><code>&lt;time&gt;</code></dt><dd>...for text that indicates a time, this has a machine readable attribute, e.g. "<code>datetime='2009-10-29'</code>"</dd>
<dt><code>&lt;footer&gt;</code></dt><dd>...where you might've said <code>&lt;div id='footer'&gt;</code> previously</dd>
</dl>
</li>
</ol>
<p><strong>*</strong> So this is not <abbr>XHTML</abbr>, it's not even <abbr>XML</abbr>. You <em>can</em> write it as valid <abbr>XML</abbr> if you're that way inclined -- but you don't have to. It's <abbr>HTML</abbr>. It doesn't have to  pretend to be something it's not. That's cool. That's the bit I like best.</p>

<hr />
<p>Some other Mark Pilgrim links, in case you don't know of him:</p>
<ul>
<li><a href='http://diveintoaccessibility.org/'>Dive into Accessibility</a></li>
<li><a href='http://diveintopython.org/'>Dive into Python</a></li>
<li><a href='http://addictionis.org/'>Addiction Is</a></li>
<li><a href='http://diveintomark.org/archives/2004/01/08/postels-law'>There are no exceptions to postel's law</a></li>
</ul>
 
]]>
    </description>
    <pubDate>Thu, 29 Oct 2009 10:36:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/html5_pilgrim.asp</guid>
  </item>
<item>
  <title>Developer Codpieces</title>
    <link>http://www.secretGeek.net/dev_cod.asp</link>
    <description>
      <![CDATA[<img src='http://secretGeek.net/image/iron_c_2.jpg' alt='dev protector' style='border:1px solid #CCC;margin:10px;float:right;' />

<h2>Attention to all people on the project!</h2>
 
<p>Some members of the software development team are currently working on high priority items which require their full attention.</p>

<p>For this reason, the project has purchased a number of iron codpieces, which will be worn by those developers who do not wish to be disturbed.</p>

<p>If, while kicking a developer in the balls, you discover the following:</p>

<ol>
 <li>You are not eliciting the expected response, and</li>
 <li>You hear a 'chinking' sound</li>
</ol>

<p>Then please:</p>

<p>Assume that the developer is in-fact busy.</p>

<p>If, after a moment's reflection you still feel, for whatever reason, that  the matter is sufficiently important to warrant the developer's immediate attention, please escalate the matter by head-butting the developer across the bridge of the nose in the usual fashion.</p>
<p>We thank you in advance for your patience.</p>
<p>And please note that passive-aggressive emails sent to the developer list will continue to be given the highest priority.</p>
]]>
    </description>
    <pubDate>Wed, 28 Oct 2009 08:50:20 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/dev_cod.asp</guid>
  </item>
<item>
  <title>Agile for one: The Personal Story 'Wall' In Action</title>
    <link>http://www.secretGeek.net/desk_story_wall.asp</link>
    <description>
      <![CDATA[<span style='float:right; background:black'><table><tr><td style='background:black'><a href='http://secretGeek.net/image/desk_storywall_30.png'><img src='http://secretGeek.net/image/desk_storywall_14.png' alt='The miniature story wall on my desk (that little cartoon is a picture of my iteration manager reminding me to update the main story wall whenever a completed task relates to one of the customer stories)' style='float:right;border:1px solid #CCC;margin:10px;'  /></a><br /><center style='clear:right'><small style='color:#FFF'>Personal A3 story 'wall' on my desk... <br />
To-Do | In-Progress | Done</small></center><br /></td></tr></table></span>



<p>In the article <a href='http://www.randsinrepose.com/archives/2009/08/31/no_surprises.html'>'No Surprises'</a> Rands has a great throw-away line. He says:</p>

<blockquote><p>"My move is to keep a yearlong log of significant work as a task in <em>whatever task tracking system I'm currently ignoring.</em>"<br /><code>[emphasis added]</code></p></blockquote>

<h2>I've got a 'wall' on my desk.</h2>

<p>I've got an agile-style <a href='http://agiletools.wordpress.com/2007/11/24/task-boards-telling-a-compelling-agile-story/' title='also known as a task board'>'story wall'</a> sitting on my desk at work: this is my latest task tracking system to ignore -- but so far, over three or so weeks, it's working out swimmingly. The most productive and <em>least ignorable</em> system I've ever used. (and, like most people, <a href='http://secretgeek.net/drowning_ttd.asp'>i've used a few</a>)</p>

<h2>Ingredients</h2>

<ul>
<li>An A3 sheet of paper.</li>
<li>A deck of extra-small post-it notes.</li>
<li>A pen<a href='http://en.wikipedia.org/wiki/The_Wall'>.</a></li>
</ul>

<h2>Instructions</h2>

<ul><li><p>Divide the A3 paper into three columns. "To-Do", "In-Progress", "Done" (or synonyms there-of).</p></li>
<li><p>Leave this thing on your desk, beside <a title='(left FTW)'>whichever hand</a> you write with.</p></li>
<li><p>Be quick to add post-it notes.</p></li>
<li><p>One word is enough for many post-it notes. (I'm the only one who has to understand them)</p></li>
</ul>


<h2>Pro-tips</h2>
<p>Post-it notes have a tendency to curl up slightly at the bottom. This makes them hard to read when they're stuck to paper sitting on your desk. So rotate them around and write on them upside down.</p>

<p>If there's a 'real' task system that you're s'posed to be updating, then make sure you write the task number (or bug number, or work item number, or whatever it's called) onto the corner of the post-it note. Write it in a consistent place and you'll be more likely to do this when required.</p>

<p>Reserve one corner of the A3 sheet, and give it a heading "Waiting for...". Park any post-its here where you're waiting for someone to get back to you.</p>
<p>The A3 sheet also acts as a good area for 'doodling' if you're a <a href='http://images.google.com.au/images?q=doodling&um=1&oi=image_result_group'>doodler</a>. (I'm a seasoned doodler). When the sheet gets full-up, you can transfer over to fresh one in a jiffy.</p>
<p>The latest trick, is that I limit the amount of 'in-progress' tasks to just 2. I use the kanban/lean trick of having only two 'slots' available in the 'In progress' section. So if there's already 2 items in progress, and I want to do a new item, I have to either complete one of the current items, or move it to the back log. This little trick is a brilliant addition (thanks to <a href='http://www.meetup.com/Scrummaster/members/8048361/'>James Brett</a> for the suggestion.)

<h2>Why does it work so well?</h2>

<p>People are often tempted to create internet-based 'todo-tracking' systems. I've <a href='http://www.secretgeek.net/mental_cache.asp'>said it before</a>:

<blockquote><p>"Placing an anti-procrastination tool on the internet is like hosting an alcoholics anonymous meeting inside a brewery."</p></blockquote>

<p>By moving the todo-list completely outside the computer, it moves it away from so many of the distractions that destroy productivity.</p>
<p>And by using little post-it notes, we get the benefit of being able to manipulate the tasks, with no pressure to over-describe the task at hand.</p> 

<p>Here's a schematic that shows the approximate shape of my more recent versions of this (the photo above is a week or two out of date now) It'll be different again in a few days, this is very much a work in progress:</p>

<span style='background:black'><table><tr><td style='background:black'><a href='http://secretGeek.net/image/deskstory_pp.png'><img src='http://secretGeek.net/image/deskstory_pp_33.png' alt='template of my current miniature story wall' style='border:1px solid #CCC;margin:10px;'  /></a><br /><center style='clear:right'><small style='color:#FFF'></td></tr></table></span>


<hr />
<p>(Talk of 'systems to ignore' reminds me of an experimental WPF-app I built a few months ago, seemingly named 'OnTrack': </p>

<img src='http://secretGeek.net/image/TaskTracker_myOwnXamlButton.png' alt='OnTrack, my first WPF app... i spent more time styling the stop button than i spent writing all of nextAction' style='border:1px solid #CCC;margin:10px;padding:10px' />

<p>It looks nice, promises much... but I spent more time styling the stop button than i spent writing all of <a href='http://TimeSnapper.com/NextAction/'>NextAction</a>, hence, one is shipping and works well, while the other is now just a screenshot of some lost code.</p>
]]>
    </description>
    <pubDate>Fri, 23 Oct 2009 11:23:23 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/desk_story_wall.asp</guid>
  </item>
<item>
  <title>Never work with thick people.</title>
    <link>http://www.secretGeek.net/thick_people.asp</link>
    <description>
      <![CDATA[
<img src='http://secretgeek.net/image/chive_idiot.png' alt='oh i get it, the road bends one way while the sign says go the other. Thanks to XKCD people actually stop to enjoy the alt text, so from here on i intend to go all out baby, oh yeah! Generally you can expect the alt text to be significantly longer than the article.' style='float:right;border:12px solid #000'></a>

<p>A beloved secretGeek reader sent me something, which I assume he wished to be published anonymously as part of my 'ghost blogging' series. Okay Kaj, here goes ;-).</p>

<blockquote>
<p>Some people are thick.</p>

<p>And it's not just that they're thick. The thickies have thick problems. And, all too often, the thickies come from thick families. And the thickies choose thick boyfriends, or thick girlfriends, and thick husbands and thick wives. And the thickies' thick families and thick boyfriends and thick husbands and thick wives have thick problems of their own. And they ring up their thickie partners on the telephone to have big thick conversations about the big thick problems in their big thick lives.</p>

<p>Thick people are thick magnets. Thick people solve their thick problems in thick ways that create even thicker thick problems.</p>

<p>Never work with thick people.</p>
</blockquote>

<p><em>Edited for spelling, grammar, brevity and meaning.</em></p>
<p><em>In fact the only original word that remains is 'telephone'. It initially covered some kind of convoluted story about how our anonymous contributer failed to fix a printer for his ex-wife, but he went about it in a thick way and I lost interest part way in. Dear Kaj: in response to the extended section (from your original email) where you describe the way democrats, java programmers, and (eventually) even 'lesbias' are (as you assured me) 'rapping' the planet (like eminem, hmmm?) and so on Kaj, I strongly feel the need to tell you: lay off the weed, man. Step away from the internets.</p>
<p>If you too have a story to share anonymously: you know what to do<sup>1</sup>.</em></p>
<hr /> 
<p><sub><strong>1.</strong> Send it to <a href='http://www.thedailywtf.com'>the daily wtf</a>. What do i look like? Alex Papadimoulis?</sub> </p>
<p><a href='http://thechive.com/2009/05/youre-an-idiot-part-2-25-photos/'>Image credit</a></p>
<!-- names and details have been changed to protect the well-meaning, though not all that innocent -->
]]>
    </description>
    <pubDate>Fri, 16 Oct 2009 10:01:17 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/thick_people.asp</guid>
  </item>
<item>
  <title>Cosmo: project status panel</title>
    <link>http://www.secretGeek.net/cosmo_psp.asp</link>
    <description>
      <![CDATA[<p><img src='http://secretGeek.net/image/cosmo_blur_65.PNG' alt='cosmo, build chicken and build killer' style='border:1px solid #CCC;margin:10px;' /> </p>

<p>At work we've now got a dedicated machine for displaying the project status at a glance.</p>

<p>Someone suggested we use <a href='http://leapstream.com.au/products/scoreboard/'>Leapstream's ScoreBoard</a> to monitor <a href='http://secretgeek.net/hudson_ci_green.asp'>Hudson</a> (the CI system we use), but we found there were more things we wanted to show than just the build status.</p>

<p>So we built an Asp.net MVC application called <strong>'Cosmo'</strong> that combines build status, number of bugs/stories remaining in the iteration, and a count down to the next release.</p>

<p>This thing is visible from the whole length of the floor. Ah the hilarity that ensues.</p>

<p>It's not exactly production-ready code but it does the job.</p>

<p>We've also got <a href='http://code.google.com/p/gource/'>gource</a> (and <a href='http://code.google.com/p/codeswarm/'>code_swarm</a>) visualizations of our source repository (thanks to the guy ducking out of the way in the photo above) and, soon we should have a build lamp hooked up via <a href='http://en.wikipedia.org/wiki/X10_(industry_standard)'>X10</a>.</p>

<p>These are the things that <em>matter.</em></p>
]]>
    </description>
    <pubDate>Wed, 14 Oct 2009 23:50:15 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/cosmo_psp.asp</guid>
  </item>
<item>
  <title>Windows Search in Japan</title>
    <link>http://www.secretGeek.net/ms_japan_search.asp</link>
    <description>
      <![CDATA[
<img src='http://secretgeek.net/image/P8110211_06.jpg' style='float:right;border:12px solid #000'></a>


<p>Many years ago, when the internet was young, when blogging was fashionable, and when Joel Spolsky was still cool, I had <a href='http://secretgeek.net/ms_search.asp'>one of my blog articles</a> published in a book, "The Best of Software Writing Volume I"</p>

<p><em>'Volume I'</em> was an optimistic title -- there never was a Volume II. Software writing in general was already headed downhill rapidly -- and clearly that volume represented the zenith of the artform.</p>

<p>A strange myth arose. Apparently, Japan as always, was <a href='http://www.theonion.com/content/news/earthquake_sets_japan_back_to_2147'>ahead</a> of the game and put out a translated edition of the work, 3 years before the English edition reached the market.</p>

<p>Recently, I sent a member of secretGeek<a href='http://JCooney.net'>'</a>s research team on a field trip to Japan, in order to capture photographic evidence of the rumoured Japanese translation. It's a little blurry, but it gives the idea.</p>

<p>So here <a href='http://secretgeek.net/ms_search.asp'>it</a> is, 'Award for the Silliest User Interface: Windows XP Search', in the original Japanese:</p>

<a href='http://secretgeek.net/image/P8110211_25.jpg'><img src='http://secretgeek.net/image/P8110211_10.jpg'></a>
 
]]>
    </description>
    <pubDate>Fri, 09 Oct 2009 10:27:06 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/ms_japan_search.asp</guid>
  </item>
<item>
  <title>Project Management Zen</title>
    <link>http://www.secretGeek.net/pm_satori.asp</link>
    <description>
      <![CDATA[<p>Before satori:<br /> 
herding cats through moving goal posts.</p>
<p>After satori?<br />
herding cats through moving goal posts.</p>
<hr />
<h3>Definition</h3>
<p>"Satori" --> "(Zen Buddhism) a state of sudden spiritual enlightenment."</p>
<h3>Allegory</h3>
<p>A Zen Buddhist, was allegedly asked to describe his life upon reaching enlightenmnet, and gave it thus:</p>
<p>"Before Satori, chop wood carry water; after Satori, chop wood carry water."</p>
<hr />
<p>Thank you. Now, please go back and carefully read my post, pretending that you got the back-story ;-)</p>
<h3>Acknowledgment:</h3>
<p><a href='http://twitter.com/secretGeek/status/4522691326'>cat herding quote</a>, pure <a href='http://JCooney.net/'>Joe Cooney</a></p>
 
]]>
    </description>
    <pubDate>Fri, 02 Oct 2009 11:55:12 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/pm_satori.asp</guid>
  </item>
<item>
  <title>Continuous Integration, Plugins and Going Too Far</title>
    <link>http://www.secretGeek.net/hudson_ci_green.asp</link>
    <description>
      <![CDATA[ 

<p>I quite like the Continuous Integration software '<a href='http://wiki.hudson-ci.org/display/HUDSON/Meet+Hudson'>Hudson</a>'.</p>

<p>While it is from the java world, it has some useful <a href='http://weblogs.java.net/blog/kohsuke/archive/2007/09/hudson_plugins.html'>.net plugins</a>, and it is so easy to extend that .net programmers can get a lot out of it. <a href='http://redsolo.blogspot.com/2008/04/guide-to-building-net-projects-using.html'>This blog post</a> is a good guide for .net developers wanting to get started with it.</p>

<p>One oddity about Hudson is that it uses <font color='blue'>Blue</font> to indicate success, rather than the more traditional <font color='green'>Green</font>.</p>

<img src='http://secretGeek.net/image/hudson_blue.png' alt='hudson with blue success marker ball' style='border:1px solid #CCC;margin:10px;' />

<p>Perhaps this is done to help people with red-green colour blindness.</p>

<p>Either way, I was happy to see there's a plugin called "<a href='http://wiki.hudson-ci.org/display/HUDSON/Green+Balls'>Green Balls</a>" which changes the success images to green, rather than blue.</p>

<img src='http://secretGeek.net/image/hudson_green.png' alt='hudson with green balls' style='border:1px solid #CCC;margin:10px;' />

<p>I thought this worked fine, and I was quite happy with the newly installed Green Balls, until we'd been running for a few days.</p>

<p>There was a loud crashing sound, I turned around to the build monitor and noticed something unexpected:</p>

<img src='http://secretGeek.net/image/hudson_green2.png' alt='hudson with green balls and incredible hulk smashing the place up' style='border:1px solid #CCC;margin:10px;' />



<hr />
<p>Yes, yes. I am groaning too. It is bad. Yes.</p>
]]>
    </description>
    <pubDate>Mon, 21 Sep 2009 11:00:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/hudson_ci_green.asp</guid>
  </item>
<item>
  <title>The Rules of Stand Up</title>
    <link>http://www.secretGeek.net/standup_rules.asp</link>
    <description>
      <![CDATA[<p><strong>If this is your first day at stand-up YOU HAVE TO TALK.</strong></p>

<p>Jesus almigthy! Employers are crying out for employees who "hit the ground running" and let me tell you, IT'S NOT THAT HARD.</p>


<p>And yet, I see people fail. Many, many people -- intelligent people -- they hit that first tiny hurdle, they bellyflop into it and collapse on the floor in a ball. Why people why!?</p>

<p>I guess I have to start by quoting the rules of 'fight club' since i'm clearly referencing them, and then I need to define what I mean by 'stand-up' since that is the matter at hand.</p>

<h2>The rules of 'fight club'</h2>
<ol><li>The first rule of Fight Club is, you do not talk about Fight Club.</li>

<li>The second rule of Fight Club is, you DO NOT talk about Fight Club.</li>

<li>If someone says stop, goes limp, taps out, the fight is over.</li>

<li>Two guys to a fight.</li>

<li>One fight at a time.</li>

<li>No shirts, no shoes.</li>

<li>Fights will go on as long as they have to.</li>

<li>If this is your first night at Fight Club, <em>you have to fight.</em></li>
</ol>


<h2>About 'stand up'</h2>
<p>By 'Stand up' I mean "the Daily Stand Up Meeting" as introduced by the scrum software methodology and (pretty much?) adopted by all software teams everywhere.</p>

<p>At stand up, you stand in a circle and each speak in turn. We stand up because time is precious. Each person says...  well, let me just explain 'the rules of stand up' in the style of 'fight club'. Let's see:</p>
<br />
<span style='float:right; background:black'><table><tr><td style='background:black'><img src='http://secretGeek.net/image/fightclub.png' alt='if this is your first day at Stand Up, you have to talk.' style='border:1px solid #CCC;margin:10px;'  /><br /><center style='clear:right'><sup style='color:#FFF'> If this is your first day at Stand Up,<br />you have to talk.</sup></center><br /></td></tr></table></span>

<h1>The Rules of Stand Up</h1>

<ol><li>The first rule of Stand Up is, you do not talk while someone else is talking.<br />&nbsp;</li>

<li>The second rule of Stand Up is, you DO NOT talk while someone else is talking.<br />&nbsp;</li>

<li>You talk fast and you keep it moving fast.<br />&nbsp;</li>

<li>Tell us what you did yesterday.<br />&nbsp;</li>

<li>Tell us what you FAILED to do yesterday.<br />&nbsp;</li>

<li>Tell us what you will do today.<br />&nbsp;</li>

<li>Tell us who is BLOCKING you today.<br />&nbsp;</li>

<li>If this is your first day at Stand Up, <em>you have to talk.</em><br />&nbsp;</li>
</ol>



<p style='clear:both'>I could go on, but I already have. ;-)</p>
 
]]>
    </description>
    <pubDate>Sun, 30 Aug 2009 19:10:08 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/standup_rules.asp</guid>
  </item>
<item>
  <title>Sydney International Airport: Stupid, Criminal, or Criminally Stupid?</title>
    <link>http://www.secretGeek.net/sydney_airport.asp</link>
    <description>
      <![CDATA[

<p>Hanlon's razor tells us:</p>
<blockquote><p>"Never attribute to malice that which can be adequately explained by stupidity"</p></blockquote>
<p>and this maxim has been my good friend for a long time.</p>

<p>But sometimes the stupidity is too acute to be plausible. Surely stupidity has limits?</p>

<p>Here's a case that left me gobsmacked.</p>

<p>For the last few years, airport security checks have been confiscating any liquid that is over 150ml or is not in a clear container. This is due to a security scare at some time. Fair enough, I accept that.</p>

<p>It turns out that they are also confiscating items purchased in-transit -- perfumes and duty free liquor, for example. I accept this too: I mean it's stupid, but it's within the usual bounds of plausible stupidity that we encounter every day. It's been going on for a few years now.</p>

<p>But here's the case of implausible stupidity I encountered last week at Syndey airport.</p>

<p>There's a duty free store encountered in-transit, just before a blind corner, at which there is an unexpected security check point.</p>

<p>So a store is selling items to people who will be forced, just 10 metres down the road, to relinquish their purchases.</p>

<p>Here's my mud map of the situation:</p>

<img src='http://secretGeek.net/image/shop_gate.png' alt='store with check point around the corner.' style='border:1px solid #000;margin:15px;' />


<p>(Note that I didn't suffer this fate myself, I witnessed it happen to about 10 percent of the people from my plane.)</p>
<blockquote>
<p>A duty free store sells goods just before a blind corner.</p>

<p>You walk around the blind corner and you enter a small, fast moving security check point.</p>

<p>Once your liquid goods have passed through the x-ray machine, they are confiscated. Everyone looks surprised. Even the security guards act like this has never happened before.</p>
</blockquote>
<p>For many of the victims of this situations, this is their very first experience of Australia. Some kind of a crazy country where everyone is out to trick you.

<p>(My wife and I were so impressed by this, that we found a quiet spot to observe the security checkpoint from above. It definitely wasn't an isolated case, it was very common. And the security guards looked amazed every time.)

<p>I am pretty sure there's some organised crime occuring here, because the alternative explanation, stupidity, is just too impossible to be believed.

<p>In the absence of a criminal conspiracy, here's 6 solutions that would've been better than confiscating the liquor:

<p><ol><li>The shop should inform the in-transit passengers that their liquor will be confiscated, before making the purchase.</li>
<li>The checkpoint could allow the passengers to return to the shop and demand a refund on the sale of the liquor.</li>
<li>The airline could warn the in-transit passengers (before they leave the plane) that any liquor they purchase in transit will be confiscated.</li>
<li>Instead of issuing the actual liquor, issue some kind of voucher which the person can use to collect the liquor at a final destination.</li>
<li>Respect the shop's tamper-proof packaging, as this ought to indicate that the goods are safe for travel. (If need be, an upgraded form of tamper proofing would be sufficient).</li>
<li> The security checkpoint could confiscate the goods, put them into tamper proof bags of their own, and deliver them to the cargo hold of the plane. (This is how 'dangerous items' like fruit knives used to be transported)(If this costs too much it could be reimbured by fining the shop who sold the goods)</li></ol>

<p>But what's really going on here? What do you think happens to all that liquor?</p>

<p>I sincerely hope that there's a racket of some sort. Maybe it gets sold back to the shop. Maybe the security guards hang onto it.</p>
<p>I'm not sure, but I just hope there's a profitable crime going on, because in such a blatant case, malice is far more understandable than 
stupidity.</p>
<hr />
<p><sub>Sorry for the hiatus. Have been on  holiday.</sub></p>]]>
    </description>
    <pubDate>Thu, 13 Aug 2009 20:06:06 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sydney_airport.asp</guid>
  </item>
<item>
  <title>God No! ...The ReBuilder</title>
    <link>http://www.secretGeek.net/rebuilder_idea.asp</link>
    <description>
      <![CDATA[<p>Do you ever have a software idea so horrible that you feel physically sick? </p>

<p>At times like that, you can block out the idea immediately, but I find it's best to follow the idea through to it's logical conclusion.</p>

<p>So here's a repulsive idea I had, which I've since discussed with a <a style='border-bottom:1px dotted #CCC' title='Fraser, Rhys, Richard and Tom'>bunch of people</a> who helped flesh it out a little more, making it extra terrible.</p>

<span style='float:right; background:#CCC;border:1px solid #888;'><table><tr><td style='background:#CCC'><img src='http://secretGeek.net/image/rebuilder_varPerson_.png' alt='var person = new Person();' style='float:right;border:1px solid #000;margin:5px;' /></td></tr></table></span>

<h2>Introducing 'The ReBuilder'</h2>
<p>Ah, yes. It's called 'The ReBuilder'</p>
<p>Here's an example of what happens when you're foolish enough to use it.</p>
 
<p>So, you open up Visual Studio and choose to create a new console application.</p>

<p>You type the line:</p>
<blockquote><code>var person = new Person();</code></blockquote>

<p>Try to compile and see an error, essentially '<strong>Person? No such type!</strong>'</p>
 
<blockquote><p>"Error	1	The type or namespace name 'Person' could not be found (are you missing a using directive or an assembly reference?)"</p></blockquote>

<p>Rather than have the programmer waste his or her precious time creating this new class, the Rebuilder does it for you. It goes right ahead and creates a class with the name 'Person'. It doesn't ask you to confirm the action, it just goes ahead and does it. No ifs or buts. Where does it put this new class? Wherever is the most <em>conventional</em> place. It builds the application again, right away. There's no new compilation errors, so it rests.</p>

<span style='clear:right;float:right; background:#CCC;border:1px solid #888;'><table><tr><td style='background:#CCC'><img src='http://secretGeek.net/image/rebuilder_Person_FirstName_.png' alt='person.FirstName = "Jim";' style='float:right;border:1px solid #000;margin:5px;' /></td></tr></table></span>

<p>You type another line of code... you now add: 

<blockquote><code>person.FirstName = "Jim";</code></blockquote>

<p>The rebuilder picks up on this straight away. (Actually, screw it, you don't need to specifically try and build... this is a background compilation. It's always present.)</p>

<p>Rebuilder notices the resulting error...</p>

<blockquote><p>"Error	1	'Person' does not contain a definition for 'FirstName' and no extension method 'FirstName' accepting a first argument of type 'Person' could be found (are you missing a using directive or an assembly reference?)"</p></blockquote>

<p>Clearly you're not after a method called FirstName, you're after a property. So rebuilder adds a property named FirstName of type string. No magic.</p>

<p>Next you try to save your object...</p>

<span style='clear:right;float:right; background:#CCC;border:1px solid #888;'><table><tr><td style='background:#CCC'><img src='http://secretGeek.net/image/rebuilder_Person_Save_.png' alt='person.FirstName = "Jim";' style='float:right;border:1px solid #000;margin:5px;' /></td></tr></table></span>

<blockquote><p><code>person.Save();</code></p></blockquote>
<p>This yields a fresh error:</p>
<blockquote><p>"Error	1	'Person' does not contain a definition for 'Save' and no extension method 'Save' accepting a first argument of type 'Person' could be found (are you missing a using directive or an assembly reference?)"</p></blockquote>


<p>This time the missing method is, indeed, a missing method. So ReBuilder gets in builds a method with the appropriate signature.</p>

<p>And it doesn't flesh out the body of the method with some dodgy 'Throw New NotImplementedException()' bullshit like the 'Generate Method Stub' feature in Visual Studio. It analyzes the name of the method, and implements it on your behalf.

<p>"Hmmm, 'Save'," thinks the ReBuilder. "I guess you want to 'save' a person." So rebuilder writes a save method, saving to the most conventional place it knows: the database.</p>

<p>If there's a useful database connection in the application, then it uses that. If not, it creates one.

<p>If the database contains a table named 'person', it will save to there. If not, it will build a table.</p>

<p>If there's no database to begin with -- well the ReBuilder goes ahead and builds it.</p>

<p>Obviously, you wouldn't do all this without any code coverage, so hell, RB churns out a sweet suite of tests to cover all the branches of the save routine.</p>

<p>(If the database, and the person table already exist, then we make sure all the relevant properties exist. This might include creating a migration script for updating any other environments with previous versions of our database)</p>

<p>Next you type:

<blockquote><code>person.GetByFirstName("Jim");</code></blockquote>

<p>"Hmmm. Judging by the name   <code>GetBy&lt;PropertyName&gt;(&lt;string&gt;)</code>..."</p>
<p>It looks like you expect a well understood pattern to be implemented.

<p>(Yes, this bit is blatantly inspired by <a href='http://rubyonrails.org/'>Ruby on Rails's</a> use of method_missing...</p>
<blockquote>"<code>def method_missing(method_id, *arguments)<br />
&nbsp; &nbsp;if match = /find_(all_by|by)_([_a-zA-Z]\w*)/.match(method_id.to_s)<code>")</blockquote>


<p>And rebuilder will add an index to the Person table, on the column indicated by the property name, plus create the relevant goo for performing the expected retrieval. (And again, whatever tests are needed to cover all paths.)</p>

<p>Finally, you branch out a little and type:</p>

<blockquote><p><code>Satellite.ReCalibrateAfterSolarFlare(magnitude:=237);</code></p></blockquote>

<p>ReBuilder, naturally, doesn't have a freakin clue what that means. It doesn't fit any known convention -- so it falls back on its "Convention_Missing" convention.</p>

<h2>Convention_Missing</h2>
<p>First, ReBuilder looks on <a href='http://www.koders.com/default.aspx?s=method_missing&btn=&la=Ruby&li=*'>Koders</a>, <a href='http://www.krugle.org/kse/entfiles?query=method_missing#2'>Krugle</a>, <a href='http://www.codase.com/search/smart?join=method_missing&scope=join/join&lang=*&project='>codase</a>, <a href='http://www.google.com/codesearch?q=method_missing&hl=en&btnG=Search+Code'>google codesearch</a>... every last place it can to see if any indexed open source code contains a method like the one we're after.</p>

<p>Failing that, RB opens your email account and writes to a few of your coder buddies (on your behalf) to see if any of them have experience with a similar problem.</p>
<p>Failing that, it sends a polite (though assertive) email to <a href='http://www.Hanselman.com'>Scott Hanselman</a>, asking him if he can <em>(a)</em>help out, or <em>(b)</em>point you in the direction of someone who can.</p>
<p>When a suitable method is located as a starting point for 'ReCalibrateAfterSolarFlare' -- it is pasted into the code, and a new compilation is attempted.</p> 

<p>Rebuilder attempts to complete any compiler errors at this point through simple deducation, through the use of <a href='http://www.codinghorror.com/blog/archives/001132.html'>markov</a> chains, through Any compiler errors at this point are submitted as polite (though assertive) questions at <a href='http://www.StackOverflow.com'>StackOverflow</a>, in the persona of a very awkward but honest noob, struggling to solve this one temporary and specific problem.</p>

<p>While waiting for the responses there, ReBuilder runs a logo competition online at <a href='http://99designs.com/'>99designs</a> or <a href='https://www.crowdspring.com/post-a-project'>crowdSpring</a>, then holds back, letting the community provide the content as well as picking the winner.


<p>Once the responses from <a href='http://www.StackOverflow.com'>StackOverflow</a> are sufficient to get the code compiling, ReBuilder checks that all the unit tests (written by the lowest bidder at <em>www.RentABusinessAnalyst.com</em> ) are beginning to pass. </p>


<p>Once all code compiles and all tests pass, the logo is in place and the typical page layout and css are fully baked (munged together from every cool site mentioned on every cool design blog) the app is shunted onto the first available cloud computing platform, cross promoted at your facebook and twitter profiles, cross posted to reddit, hacker news and digg, where it's upvoted and astroturfed by a distributed swarm of sockpuppets launched by every other PC on the planet running a copy of Rebuilder Zombie daemon, promoted with whatever relevant google adwords are cheap enough to suit your budget, and plastered with enough punch the monkey ads to bring in a steady trickly of cold cash.</p>

<p>You, meanwhile, sipping cocktails on the beaches of Tahiti, receive an SMS telling you the app is done, and your resume is automatically updated with glowing details of the amazing "ReCalibrate After Solar Flare" 2.0 app.</p>

<p>No magic. None.</p>
]]>
    </description>
    <pubDate>Mon, 20 Jul 2009 13:04:33 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/rebuilder_idea.asp</guid>
  </item>
<item>
  <title>Matt, The Office Mortar</title>
    <link>http://www.secretGeek.net/the_office_mortar.asp</link>
    <description>
      <![CDATA[<p>Ah-ha! I have another <a href='http://secretgeek.net/enterprise_ghost.asp'>ghost-blog entry</a>, sent in by a tortured enterprise-peon who wishes to remain anonymous. (Personally, I like to imagine the voice of David Attenborough when reading this one.)</p>

<span style='float:right; background:black'><table><tr><td style='background:black'><img src='http://secretGeek.net/image/sgrw34_mortar_350.JPG' alt='A mortar outside of its Office Habitat' style='float:right;border:1px solid #CCC;margin:10px;' /></td></tr></table></span>

<h2>Matt, The Office Mortar</h2>
<p>Like its military namesake, the mortar found in offices has one primary purpose - the lobbing of grenades. </p>

<p>The Office Mortar often uses domain or technical knowledge, anecdotes or rule-lawyering to inflict heavy casualties. In an open, pluralist office where everyone is encouraged to speak up about problems it is difficult to deal with a mortar directly, but many people see them for what they are, constantly throwing out problematic issues that either need to be defused or blow up in somebody's face.</p>

<p>Often used by insurgents keen to derail a project, a mortar placed in a strategic position such as  testing, architecture or business analysis, can keep a team pinned down for weeks or months, and cause horrific loss of morale and productivity.

<p>Although the mortar likes to deliver its lethal payload by lobbing grenades indiscriminately into groups (in office parlance this is called a "meeting") mortars in the 21st century have devised a new means of spreading fear and error - grenades delivered by email! 

<p>Now, Let's watch as this mortar unleashes a deadly barrage of nebulous issues, process meta-questions and second guessing.</p>
<blockquote>
<p>Organizer: We're here to finalize any remaining details of the user stories in the development cycle that's now underway...</p>
<p>Matt the Mortar: Half these need to go. X isn't fully specified, and there's no point doing Y without it. And why isn't Z in scope?</p>
<p>Organizer: Sorry Matt, we agreed on the list of stories last week. You were in that meeting, and as a group we all agreed on this list.</p>
<p>Matt the Mortar: The whole process is broken! What's the point of saying we're agile if we're unwilling to change.</p>
<p>Organizer: We value your opinions Matt, but perhaps this meeting isn't the best forum to...</p>
<p>Matt the Mortar: There should be a full review of the process by which the list of stories is defined for the cycle, and I'd like the outcomes of any meetings where scope is discussed to be mailed to the whole team.</p>
<p>Organizer: Now Matt, we held a retrospective meeting just last Thursday, and all of these points would've been excellent things to raise on that occasion...</p>
<p>Matt the Mortar: Furthermore, let me say that I for one don't have any faith in these so called 'business reps' and whether or not they actually represent the business itself. You need to raise that back to the project sponsors.</p>
<p>Organizer: The what? Look, getting back on track, we need to ensure the first user story is...</p>
<p>Matt the Mortar: That story is completely broken -- it will never work with the FizzBuzz system they have in production.</p>
<p>Organizer: Hold on, integration with the FizzBuzz system is strictly out of scope for this project.</p>
<p>Matt the Mortar: No, I've been talking to other business reps and they're very keen to see a lot of improvements to FizzBuzz as soon possible including cloud based... </p>
</blockquote>
<p>And we leave our meeting there, irretrievably drowning in a deep vat of confusion. Matt will of-course have forgotten all of these bomb shells when the next retrospective is held. He will instead insist that the retrospective is a waste of time that stops them from implementing many important features that he alone understands.</p>

<p>It is at moments such at this that managers around the world choose to bring in a highly successful counter measure: The Office Sharp-Shooter. But more on that topic next week.</p>
<p><sub>;-)</sub></p>
]]>
    </description>
    <pubDate>Thu, 16 Jul 2009 09:21:30 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/the_office_mortar.asp</guid>
  </item>
<item>
  <title>'Outlook style' rules for Subversion</title>
    <link>http://www.secretGeek.net/svn_wizard.asp</link>
    <description>
      <![CDATA[ 
<p>At work, when I get an email from an idiot, I set a rule.</p>
<p>Example</p>
<p>I start work at a new company.</p>
<p>I notice they use Microsoft Outlook.</p>
<p>Within <em>minutes</em> I get an email:</p>
<blockquote><p>From: Jenny@work<br />
To: Everyone@work<br />
<strong>This message was sent with High Importance!</strong><br />
Subject: "URGENT!!!! Get your footing tipping entries in by Tuesday week!"</p>
</blockquote>
 
<p>Hmmm. It's "URGENT!!!!" so I spring into action:</p>
<blockquote><p>Add new rule -> Messages from: 'Jenny@work' -> Delete.</p></blockquote>
<p>Done.</p>
<p>But now look at all this crappy code the other devs keep commiting to the repository.</p>
<p>Every time I perform an "SVN update" it's like I've just invited a carnival of freaks to crap all over my hard drive.</p>
<p>A nice feature would be if we could get the same utility from subversion as I get from outlook.</p>
<blockquote><p>"Do not accept any code changes from Trevor, if they relate to internationalization."</p></blockquote>
<p>Trevor, you see, doesn't have a freakin' clue about internationalization. But he thinks he's God's gift to the unicodes.</p>
<p>And Joella, who thinks every programming nail is another excuse to wield the hammer of reflection.</p>
<blockquote><p>"If you see code submitted by Joella, containing '<code>System.Reflection</code>' replace with '//TODO: write actual code here, rather than namby-pamby show off serialization code.'</p></blockquote>
<p>It's just a humble dream I have.  The best approach to implementing it, that I've come up with so far, is to build a custom version of Tortoise SVN (it's open source right? I can fork it a little if I want to ) and then dump this custom version of tortoise on Trevor and Joella's machines.</p>
<p>From Trevor's point of view, it will look like he's committing his changes to the repository. But tortoise will in fact be just quietly twiddling its thumbs and doing nothing. If you count '<em>logging keystroke and scraping bank account details</em>' as '<em>doing nothing</em>', that is.</p>
<p>Trevor may realise sooner or later that he's never getting anyone else's changes. That no matter how often he updates, he never gets any new code. He may even begin to suspect something is up and he may bring it to our attention. At that stage it's time to enact the "remote  'overwrite every byte on the hard drive, and perform thorough boot sector corruption' " feature of his custom tortoise build.</p>
<p>With a little creativity, a little software, and a little patience, we truly <em>can</em> make the world a better place.</p>

<p><sub>p.s. the solution <a href='http://mercurial.selenic.com/wiki/'>is:</a> <a href='http://www.ericsink.com/entries/git_index.html'>DVCS</a>. <a href='http://en.wikipedia.org/wiki/Distributed_revision_control'>Please discuss</a>.</sub></p>
]]>
    </description>
    <pubDate>Fri, 10 Jul 2009 09:56:05 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/svn_wizard.asp</guid>
  </item>
<item>
  <title>Really deep linking: Url + regex</title>
    <link>http://www.secretGeek.net/regexUri.asp</link>
    <description>
      <![CDATA[ 
<p>Here's today's <strike>boil the ocean scheme</strike> idea &mdash; and it's not a new idea by any means. I'm sure it has occurred to many people at many times, I've just never seen it written down. (links to further reading welcome)</p>

<p>Just say you want to bookmark a <em>particular</em> paragraph on a <em>particular</em> web document.</p>
<p>Perhaps you want to perform the electronic equivalent of using a highlighter pen to point out a particular fragment of a document in its original context.</p>

<p>You can give the uri of the page, but you can't give a specific link to the actual paragraph you are interested in.</p>

<p>(Sure, <em>if</em> the author of the document provided a named anchor tag for the paragraph then you are in luck. But only semantic web fanboys and egomaniacs go to this kind of extreme)</p>

<p>What I'm thinking is that, instead, you could provide a little extra bit of regex-goodness in the url. Say for example you said:</p>

<blockquote><p><a href='http://secretGeek.net/regexUri.asp --highlight "Say for example you said:"'>href='http://secretGeek.net/regexUri.asp --highlight "Say for example you said:"'</a></p></blockquote>

<p>...then this could act as a pair of instructions to the browser: the first one is "get from 'http://secretGeek.net/regexUri.asp' and the second instruction is "highlight the text that matches this regex: "Say for example you said:" (excluding the quotes). The instructions are separated by spaces, qualified by quotes and so on. Click on the link and the page is shown, with the relevant text highlighted.</p>

<p>Okay &mdash; i'm thinking four different things at once here:</p>

<ol><li>Why stop at highlight? what other commands could <a href='http://daringfireball.net/2004/06/location_field'>the new commandline</a> accept?</li><li>"Major security flaws waiting to happen"</li><li>Some people, when confronted with a problem, think 
"I know, I'll use regular expressions." <a href='http://regex.info/blog/2006-09-15/247'>(etc...)</a></li><li>Subtle differences in implementations between browsers.... NO!!!1!</li></ol>

<p>And of course, as always, I'm hearing the voice of some strange ever-present character in my head (who <a href='http://steve-yegge.blogspot.com/2009/03/story-time.html'>sounds a lot like</a> comic-book-store-guy from the simpsons) and he alternates between:</p>
<p><ul><li>You can already do that in firefox with addins/greasemonkey, idiot. And</li><li>'course, there'a an <a href='http://xkcd.com/378/'>emacs command</a> to do that</li></ul>
</p>

<p>Thoughts? Additions? Subtractions? <a href='http://www.useit.com/alertbox/20020303.html'>Jakob?</a></p>
]]>
    </description>
    <pubDate>Wed, 08 Jul 2009 08:19:35 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/regexUri.asp</guid>
  </item>
<item>
  <title>hExcel -- A Hexagonal Spreadsheet</title>
    <link>http://www.secretGeek.net/hexcel.asp</link>
    <description>
      <![CDATA[ 
<p>Here's a wacky idea, I've got no use for.</p>

<a href='http://secretGeek.net/image/hexcel.png'><img src='http://secretGeek.net/image/hexcel_th.png' alt='hexcel, the hexagonal spreadsheet' style='float:right;border:1px solid #CCC;margin:10px;' /></a>
<p>'Hexcel' is a spreadsheet with hexagonal cells.</p>
<p>How does it work? What is the advantage? I have no idea. But there could conceivably be <strong>some</strong> advantage to it.</p>
<p>Bees for example, planning their hive. <a href='http://en.wikipedia.org/wiki/Settlers_of_Catan'>Settlers of Catan</a> fans, developing game optimization macros. Or experimental musicians, planning new forms of musical notation to accompany their <a href='http://improvise.free.fr/janko.htm'>Jank&oacute; keyboards</a>.</p>

<p><img src='http://secretGeek.net/image/hexcel_zm.png' alt='hexcel' style='border:1px solid #CCC;margin:10px;' /></p>
]]>
    </description>
    <pubDate>Mon, 06 Jul 2009 10:15:24 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/hexcel.asp</guid>
  </item>
<item>
  <title>Is the remote control a thing of the past?</title>
    <link>http://www.secretGeek.net/remote_future.asp</link>
    <description>
      <![CDATA[<p>We humans used to be almighty atheletes, then the TV was invented. </p>
<p>For a time, the only exercise we found was in hopping up to change the channel (this was usually relegated to the youngest member of a family unit)</p>
<p>Time went on and we got lazier still.</p>
<p>The remote control became a must-have for every lounge room. </p>
<p>The next step is to become so lazy that we can no longer reach for a remote control. </p>
<p>We'll use mind-power to control the volume. </p>
<p>Pretty soon, thinking will be too much trouble. </p>
<p>The TV will need to do the thinking. You watch TV -- and TV watches you.</p>
<p>"He's looking bored? Better switch channel."</p>
<p>Automatic volume control will be easy. TV pays attention to the ambient noise level in the room, looks where the audience are seated, and listens to the shows its broadcasting, adjusting to keep everyone comfortable.</p>
<p>Maybe we end up putting our<em>selves</em> into the matrix, one little feat of laziness at a time.</p>]]>
    </description>
    <pubDate>Fri, 03 Jul 2009 11:30:18 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/remote_future.asp</guid>
  </item>
<item>
  <title>The Utterly Thorough Guide To Awesome Application Compatibility on Windows 7.</title>
    <link>http://www.secretGeek.net/win7_compat_layer.asp</link>
    <description>
      <![CDATA[
<p><strong>How does backward compatibility work in windows 7?</strong></p>
<p>I'm glad you asked.</p>
<p>You don't got to be a <a href='http://www.hanselman.com/blog/'>Hanselman</a> to know all this.</p>
<p>Here's a pictographicatorial guide to compatibility checking in the windows 7.</p>
<img src='http://secretGeek.net/image/flowchart_app_compat_win7.png' alt='XXX' style='border:2px solid #000;margin:15px;margin-top:5px;' />
<p><small>* In point of fact, it's a virtual <a href='http://blogs.msdn.com/oldnewthing/'>Raymond Chen</a> (a VRC), but the MS guys are so freakin good at virtualization now that You Will Never Ever Ever EVER Be Able To Detect The Difference. Even Mrs Chen is rarely sure. And only when that fails do they invoke <a href='http://www.joelonsoftware.com/articles/APIWar.html'>the real Ray Chen</a>.</small></p>
<p>So take it from me, a world expert on the computing technologies, that this new version of windows will be just about the best thing since Vista.</p>
]]>
    </description>
    <pubDate>Thu, 02 Jul 2009 11:39:44 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/win7_compat_layer.asp</guid>
  </item>
</channel>
</rss>

