<?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>What then, is b?</title>
    <link>http://www.secretGeek.net/whatThenIsb.asp</link>
    <description>
      <![CDATA[
<p>(This was going to be an article about how impossible it is to design one language that has all my favourite features. But instead, became a scene from "A Coder's Edition of Saw.")</p>

<p>You wake up, in unfamiliar surroundings.</p>

<p>You must've experienced some kind of memory loss because you have no idea how you got to where you are. Your forehead is brittle with dried blood.</p>

<p>In front of you is a computer screen, and on the screen it says:</p>

<blockquote><pre>
a = Add(2,3);

//a is 5.

b = Add(2);

//what is b?
</pre></blockquote>
<p>Intriguing. What <em>is</em> <code>b</code>?</p>

<p>Because you're uncertain of the language in question, you can't be sure.

<p>It could be that <code>Add</code> is an overloaded function, in which case <code>b</code> would be an integer. Its exact value is anyone's guess.</p>

<p>Or it could be that <code>Add</code> has an optional second parameter. Again <code>b</code> would be an integer, though its value could be anything.</p>

<p>It could be that the code refuses to run. The missing parameter is a deal breaker.</p> 
<p>But you look at the tattoo on the back of your hand, the 11th letter of the greek alphabet, and you are certain.</p>

<p>What then, is <code>b</code>?</p>
 
]]>
    </description>
    <pubDate>Sun, 18 Jul 2010 12:08:02 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/whatThenIsb.asp</guid>
  </item>
<item>
  <title>SQLike: A simple editor</title>
    <link>http://www.secretGeek.net/sqlIke_editor.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/SQLike/'><img src='http://secretGeek.net/image/jslike_editor_th.png' alt='editor for JSLike' style='border:1px solid #CCC;margin:10px;float:right;' /></a> 
<p>Here's a <a href='http://secretGeek.net/SQLike/'>SQLike editor</a> I wrote. It lets you get your hands dirty with SQLike, the client-side query engine from <a href='http://www.thomasfrank.se/'>Thomas Frank.</a></p>
<p>This started a few weeks back. I read that Thomas had created a nifty DSL in Json for querying (and modifying) arrays of Json. The correct name for it would've been 'JQuery' but that name had already been taken, so he called it <a href='http://thomasfrank.se/sqlike.html'>SQLike</a>. ;-)</p>
<p>I set about writing a simple editor for it (in the style of <a href='http://secretGeek.net/WSCG.htm'>the World's Simplest Code Generator</a>) and came up with <a href='http://secretGeek.net/SQLike/'>this fairly usable SQLike editor</a>.</p>
<p>I don't assume you've got any Json to query, and instead expect you to start with a chunk of CSV. I turn <em>that</em> into an array of <a href='http://secretgeek.net/json_3mins.asp'>Json</a> (named 'JsonData') then exec your query over it.</p>
<p>The UI lets you join and query up to two tables at once. I meant to extend it to <em>N</em> tables, but bus-time only lets me do so much, and I keep running into interesting people when I ought to be programming.</p>

<img src='http://secretGeek.net/image/SQLike_logo.png' alt='editor for JSLike' style='border:0px solid #CCC;margin:10px;float:right;' />

<p>In my day job I hand write a lot of sql. And with this editor I quickly found that even though SQLike is lighter than XML it's  quite 'ceremonious' compared to writing pure SQL.</p>

<p>Apparently Thomas is hoping to making the syntax for SQLike a lot lighter yet, based on <a href='http://ajaxian.com/archives/two-js-solutions-to-run-sql-like-statements-on-arrays-and-objects'>comments here</a> including:</p>
<blockquote>"...stop using pipes – the hell with it: reserve a few words :-D..."</blockquote>
<p>...a sentiment I fully agree with. I look forward to any future versions. If you're listening Thomas: keep going! This is an intriguing project!</p>
<p>Also, I want to add I've already found SQLike useful in helping to achieve my day-to-day data-manipulation activities. I can go straight from CSV to 'queries' without having to put the data into a database first.</p>
<p>Sometimes I can't help but picture the future as an endless sea of cubicles, populated by workers struggling to perform data-manipulation duties. And many will continue to get by without any real tools at all. No sql. No sqlike. Not even a <a href='http://secretGeek.net/WSCG.htm'>wscg</a> or an excel-formula to help them out.</p>

<p>A future "bus project" might be to implement a similar editor for the overlapping project: <a href='http://jslinq.codeplex.com/'>JsLinq</a>.</p>

<p>Feedback, criticisms, ideas and suggestions always welcome.</p>]]>
    </description>
    <pubDate>Fri, 02 Jul 2010 15:44:57 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sqlIke_editor.asp</guid>
  </item>
<item>
  <title>Yet Another BizPlan Generator.</title>
    <link>http://www.secretGeek.net/yabizplan.asp</link>
    <description>
      <![CDATA[<p>I'm so sick of being me that I outsourced being me to a miniscule script that just sits there, being me, all day long. Here it is -- <a href='http://secretGeek.net/YABizPlan.html'>'yet another business plan generator.'</a></p>

<p>Gorn. --&gt; <a href='http://secretGeek.net/YABizPlan.html'>Try it out.</a> &lt;--</p>

<p style='color:#BBB;font-size:x-small;'>Also, deep within the myriad combinations, I've buried a clue about <a href='http://secretgeek.net/microIsv_ToDoOrNot.asp'>the new micro-Isv i'm building</a> ;-).</p>
]]>
    </description>
    <pubDate>Fri, 25 Jun 2010 15:57:59 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/yabizplan.asp</guid>
  </item>
<item>
  <title>HOT GUIDS: A hot or not site for guids</title>
    <link>http://www.secretGeek.net/hotguids.asp</link>
    <description>
      <![CDATA[<p>Social software seems to be going into a lot of niche areas lately. I thought I'd try and jump ahead of the next wave and build my own social website:</p>
<p style='font-size:20pt'><a href='http://secretGeek.net/HotGuids/'>HOT GUIDS - Socializing the Guid</a></p>
<a href='http://secretGeek.net/HotGuids/'><img src='http://secretGeek.net/Image/hot_guids.png' alt='HOT GUIDS - Socializing the Guid' /></a>
<p>Finally there's a place where people can vote on and discuss their favorite guids.</p>
<p>I've built in pretty much all the best social features. You can vote on a guid, see other votes for a guid, adopt a guid, or email a guid to your friends. And if you get sick of the guid you're looking at: with the click of a button you can move onto a whole new guid.</p>
<p>I'm trying to really take the long tail of human interest by storm. If I get just <em>one</em> customer for each guid, then I'll get... oh I don't know, it must be a *lot* of hits.</p>
<p>Thanks to <a href='http://StackOverflow.com'>Stack Overflow</a> for the <a href='http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript'>guid generating snippet</a>. The web template started out the same as <a href='http://secretGeek.net/cco/cco.htm'>'CreditCardOlogy'</a> but with a little (Powerpoint + MSPaint + PngOut) I took it to a new place entirely.</p>
<p>If you're unsure what any of this is about, please <a href='http://en.wikipedia.org/wiki/Globally_Unique_Identifier'>read about guids (& UUIDs)</a> at wikipedia, or try running this <a href='http://stackoverflow.com/questions/1705008/simple-proof-that-guid-is-not-unique'>Simple Proof That Guid is not Unique</a>.</p>
<p>And make sure email me if you see any particular delicious looking <a href='http://www.guidscotchdrink.com/'>guids</a>. There's some beauties out there.</p>
]]>
    </description>
    <pubDate>Sun, 30 May 2010 13:06:20 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/hotguids.asp</guid>
  </item>
<item>
  <title>How does life get better? One tiny hack at a time.</title>
    <link>http://www.secretGeek.net/OneTinyHackAtATime.asp</link>
    <description>
      <![CDATA[<p>I use a HP netbook, on the bus mostly, for bashing out furious code while crammed between passengers (<a href='http://ianso.blogspot.com/2010/02/advantages-of-programming-on-small.html'>much like this guy</a>). It's a nice little 'puter.</p>
<p>One minor grievance is that with the keys all cramped together, it's hard to find the F5 key without looking. For many reasons, (Refresh, compile & run, execute...) F5 is a BIG DEAL.</p>

<p>So, to give it some tactile <strong>presence</strong>, I put a tiny sticker, with a rough surface, over the F5 key.</p>
<p>Now I can find the key by touch, in an instant.</p>

<div style='padding-left:30px'>
 <span style='float:center; background:black'><table><tr><td style='background:black'><img src='http://secretGeek.net/image/OneHackAtATime.jpg' alt='Porous tape on the F5 key.' style='float:right;border:1px solid #888;margin:40px;margin-bottom:20px'  /><br /><center style='clear:right;margin-bottom:30px'><small style='color:#EEE'>How does life get better?<br />
One tiny hack at a time.</small></center><br /></td></tr></table></span>
</div>
<p style='clear:both'>&nbsp;</p>
<p>I gift this hack unto thee. ;-)</p>
]]>
    </description>
    <pubDate>Sat, 29 May 2010 15:23:54 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/OneTinyHackAtATime.asp</guid>
  </item>
<item>
  <title>24 things to do, and 100 things *not* to do (yet) for building a MicroISV</title>
    <link>http://www.secretGeek.net/microIsv_ToDoOrNot.asp</link>
    <description>
      <![CDATA[<style  type="text/css">
.mandatory  {color:#00F;}
.extracredit  {color:#222;}
.blocked  {color:#F00;}
.x {/*text-decoration:line-through;*/color:#668;}
.next {font-size:large;font-weight:bold}
</style>
<p>I've been building another microIsv lately, and as such I've had to produce a new 'to-do' list to keep me focused. It steals a lot from <a href='http://wiki.timesnapper.com/index.php?title=25_Steps_to_Build_Your_Own_Micro_ISV'>the previous list</a> but matches my current predicament more closely.</p>
<p>I've got 24 things to do, but 100 things I'm *not* going to do just yet. In <a href='http://TimeSnapper.com'>TimeSnapper</a> (a moderately successful Micro-ISV shared with my colleague Atli) we go well past the first 24 items, and far into the next 100.</p>

<p>Consider also the fractal nature of this work... each item can contain its own sublist of critical and non-critical action items... and so on. A length essay (or at least a series of links) could be provided for every item on the list.</p>
<p>(The worst thing is... even though I know that only the first 24 are needed for now... I so <em>badly</em> want to do the rest before I finished the first ones. It's killing me!)</p>
 
<h2 class='mandatory'>mandatory (1-24)</h2>
<p>i intend to complete items 1-24 before 'launch'. (Things already completed are shown in a <span class='x'>lighter shade</span>)</p>
<h4>micro isv application:</h4>
<ol class='mandatory'>
  <li class='x'>build the simplest product imaginable</li>
  <li>fill it with particles of delight</li>
  <li class='x'>mark some features as 'paid'</li>
  <li class='x'>make it a standalone exe</li>
  <li class='x'>have an eula shown on first run</li>
 
  <li class='x'>have a form for registering the application</li>
  <li class=''>call the webservice, and store the unique code and activation code, if one is received back</li>
  
  <li class='x'>on startup, check if registered</li>
  <li class='x'>if registered, unlock the paid features & hide registration hooks</li>  
  <li class='x'>naming, branding, logo to match url</li>
</ol>  
  
<h4>micro isv website:</h4>  
<ol class='mandatory' start='11'>
  <li class='x'>get a url (technically, this step comes before step 10)</li>  
  <li class='x'>choose your server-side technology stack</li>
  <li class='x'>purchase hosting</li>
  <li class='x'>choose website template</li>
  <li class='x'>index page (landing page)</li>
  <li class='x'>choose a price</li>
  <li class='x'>register with payment gateway</li>
  <li class='x'>purchase page</li>  
  <li class='x'>handle payment notification from payment gateway</li>
  <li class='x'>send "registration code" email</li>
  <li>thank you page (show registration code)</li>
  <li class=''>webservice to confirm registration code from client</li>
  <li class='x'>download link</li>
  <li>screenshots of app</li>
</ol>

<h2 class='extracredit'>for extra credit (25-71)</h2>
<p>i'll probably do these.</p>

<h3>tax and legal protection</h3>
<ol class='extracredit' start='25'>
<li>incorporate</li>
</ol>

<h4>continual improvement:</h4>  
<ol class='extracredit' start='26'>
  

  <li>beta testing from friends/critics</li>
  <li>ask at business of software for feedback</li>
  <li>bugtracking/support system (e.g. fogbugz for startups)</li>
  <li class='x'>"uservoice" for feedback</li>
  <li>web analytics</li>
  <li>drive support costs down</li>
</ol>  

<h4>advertising/promotions:</h4>    
<ol class='extracredit' start='32'>
  <li>update your email signature so you're always representin</li>
  <li>shout out on twitter</li>
  <li>blog about it at your day blog</li>
  <li>sidebar and footer links from your day blog</li>
  <li>ask for links from your friends' blogs</li>
  <li>pad file</li> 
  <li>register at download sites</li>
  <li>twitter account for announcements</li>
  <li>build a community</li>
  <li>build a movement</li>
</ol>

<h4>website enhancements:</h4>    
<ol class='extracredit' start='42'>  
  <li class='x'>about page</li>
  <li>help page</li>
  <li>faq page</li>
  <li>privacy policy</li>
  <li>articles on your niche topic</li>
  <li class='x'>refund policy</li>
  <li>usage policy</li>
  <li>various pricing levels</li> 
  <li>release notes page</li>
  <li>automated backup</li>
  <li>bug reporting link</li>
  <li>privacy policy</li>
  <li>'try it online' for free</li>
  <li>an article targeted at each potential user group/demographic</li>
  <li>amazing screen shots</li>
  <li>testimonials</li>
</ol>  

<h4>app enhancements:</h4>    
<ol class='extracredit' start='58'>  
  <li>implement most desirable features</li>
  <li>release often</li>
  <li>check online for current version #</li>
  <li>background download of updates</li>
  <li>link to release notes inside application</li>
  <li>feedback link inside app</li>
  <li>suggestion link inside app</li>
  <li>bug reporting link inside app</li>
  <li>an offline way to register</li>
  <li>have a commandline way to register</li> 
</ol>


<h4>application development:</h4>    
<ol class='extracredit' start='68'>  
  <li class='x'>source code repository (actually this is item 0.)</li>
  <li class='x'>extra backup</li>
  <li>obfuscation (<a href='http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx'>eazfuscator?</a>)</li>
  <li>unit testing</li>
 </ol>
 
 <h2 class='extracredit'>for even more extra credit (72-124)</h2>
<h3>i may not get to these. i haven't bothered categorising them</h3>
<ol class='extracredit' start='72'>
  <li>locate relevant user groups/communities and give them free licenses</li>
  <li>locate niche bloggers and solicit feedback from them</li> 
  <li>a form for adding testimonials</li> 
  <li>survey the competition</li>
  <li>talk at user groups</li> 
  <li>talk at conferences</li>
  <li>revision control</li> 
  <li>self service for lost serial numbers</li>
  <li>a/b testing framework</li>
  <li>crash reporting from the field</li>
  <li>bug/suggestion reporting from application</li>
  <li>branding/logo at the payment page</li>
  <li>continuous integration</li>
  <li>automated releases</li>
  <li>adwords campaigns</li>
  <li>advertise in non-google networks</li>
  <li>box shot 3d</li>
  <li>web casts</li>
  <li>disk shipping (aka on-demand fulfillment)</li>
  <li>companion products</li>
  <li>upselling</li>
  <li>email campaigns</li>
  <li>be cool</li>
  <li>sign up/email harvesting</li>
  <li>follow up email tutorial series to non-paying (and paying) users</li>
  <li>product roadmap</li>
  <li>spam control</li>
  <li>a low-impact installer</li>
  <li>uninstall reason collection</li>
  <li>competitions</li>
  <li>discounts, e.g. student, charity, startup</li>
  <li>product blog</li>
  <li>thriving plug-in community</li>
  <li>vm test bed</li>
  <li>multi-browser testing</li> 
  <li>customer satisfaction surveys</li>
  <li>internationalisation and localisation of product</li>
  <li>internationalisation and localisation of <em>website</em></li>
  <li>campaign websites/websites named after keywords</li>
  <li>professionally designed website</li>
  <li>app analytics</li>
  <li>companion urls, e.g. .net, .org, nation-specific</li>
  <li>ci monitor</li>
  <li>status panel</li>
  <li>usability testing</li>
  <li>give licenses to MVP's list</li>
  <li>give out promotional gifts</li>
  <li>sponsor something</li>
  <li>Run an affiliate service</li>  
  <li>check compiled binary with virus total</li>
  <li>virus free logo on website</li>
  <li>sign your binaries, e.g. authenticode signed.</li> 
  <li class='mandatory'>stop reading/writing this list and implement something</li> 
</ol>

<p>Stay tuned of course.</p>
]]>
    </description>
    <pubDate>Sat, 22 May 2010 03:07:20 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/microIsv_ToDoOrNot.asp</guid>
  </item>
<item>
  <title>Venture capital won't kill Jeff Atwood, it will only make him Jeffer.</title>
    <link>http://www.secretGeek.net/jat_vc.asp</link>
    <description>
      <![CDATA[<p>2004: <a href='http://www.CodingHorror.com/blog/'>Jeff Atwood</a> says 'Every developer should have at least 2 monitors.'</p>
<p>2008: Jeff Atwood says 'Every developer should have at least 3 monitors.'</p>
<p>2010: Jeff Atwood receives 6 million dollars in venture capital</p>
<p>2012: Jeff Atwood says 'Every developer should have at least 26 monitors. On their yacht.'</p>
]]>
    </description>
    <pubDate>Fri, 07 May 2010 12:55:58 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/jat_vc.asp</guid>
  </item>
<item>
  <title>A handy workflow image for newbie mercurial users</title>
    <link>http://www.secretGeek.net/mercurial_flow.asp</link>
    <description>
      <![CDATA[ 
<a href='http://secretGeek.net/image/mercurial_workflow_image.png'><img src='http://secretGeek.net/image/mercurial_workflow_image_th.png' alt='mercurial workflow' style='border:2px solid #888;margin:10px;float:right' /></a> <br />	  
	  
<p>I've been using <a href='http://mercurial.selenic.com/'>mercurial</a> lately for my own projects and when collaborating with <a href='http://buffered.io/'>OJ</a> on a skunkwork project we have underway.</p>

<p>Here's a cheatsheet I built, lifted almost wholly from <a href='http://hginit.com/02.html'>hginit</a>, to help my get my rhythm in the early days.</p>

<p>As soon as <a name='I kid because I love'>Jeff 'VB forever' Atwood</a> <a href='http://blog.stackoverflow.com/2010/04/stack-overflow-and-dvcs/'>adopts a technology</a>, you know it's gone all mainstream... but just to prove that <code>hg</code> has really jumped the critical-adoption-long-tail-shark-mass... I built the above image with powerpoint. <a href='http://www.nytimes.com/2010/04/27/world/27powerpoint.html'>Yes, <em>that</em> powerpoint</a>.</p>

<h2><a href='http://secretGeek.net/image/mercurial_workflow_image.png'> --&gt; Full size image here &lt;--</a> </h2> 
<p><a href='http://secretGeek.net/image/mercurial_workflow.zip'>Source pptx is zipped here.</a></p>
<p>If you've got any improvements or feedback, please comment.</p>]]>
    </description>
    <pubDate>Wed, 28 Apr 2010 12:10:24 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/mercurial_flow.asp</guid>
  </item>
<item>
  <title>Fractal Feedback, a diversion into recreational programming</title>
    <link>http://www.secretGeek.net/fracback.asp</link>
    <description>
      <![CDATA[ 

<img src='http://secretGeek.net/image/colorpic_fractal_1_th.png' alt='colorpic: a nice tool' style='border:1px solid #CCC;margin:10px;float:right;' />

<p>What does a microIsv guy do when he's not sailing his yacht and/or yachts?</p>
<p>He indulges in recreational programming!</p>
<p>So, the back story is that I was using <a href='http://www.iconico.com/colorpic/'>ColorPic</a>, one of those nifty little tools you use for screen-scraping the color of a pixel, when I noticed that by abusing it's normal usage, it could be turned into a <strong>fractal generator</strong>.</p>



<p>ColorPic magnifies a small portion of the screen (wherever you point your mouse). But check out the recursion of that idea, baby.</p>
<p>If you mouse over the part of the screen that displays where you've moved your mouse... incredible things happen! Time folds back on itself, wormholes of destiny send ripples across the sea of causality, and, with a bit of luck and just the right settings you can produce <a href='http://wikipedia.org/wiki/Sierpinski'>Sierpinski</a> like patterns.</p>

<img src='http://secretGeek.net/image/colorpic_fractal_2_sierpinski_zoom.png' />
<img src='http://secretGeek.net/image/colorpic_fractal_3_smaller_magnification_th.png' alt=' ' /><br />


<p>(Still images do these things no justice. They are growing shapes that respond to your movement. The optimal settings are '2 * magnification' with <strong>grid</strong> turned on.)</p>



<a href='http://fracback.codeplex.com/wikipage?title=Image%20Gallery'><img src='http://secretGeek.net/image/frac9_th.png' alt='wave filter with blur filter' style='border:0px solid #FFF; float:right'></a>

 
<p>I wanted to experiment further, so I created an application (eventually a fleet of applications) using "Good Old" Windows Forms.</p>


<p>After tinkering for a few nights I had 4 applications that give 4 variations on the feedback theme.</p>
<p>I've open-sourced the <a href='http://fracback.codeplex.com/'><strong>code and the executables through CodePlex.</strong></a></p>
<p>The applications are:</p>
<h3>1. FractalFeedback</h3>
<p>The first app lets you change the parameters that are used for the feedback, by entering values into a windows form.</p>
<h3>2. Magnifier</h3>
<p>The next app uses a slightly transparent form to produce a somewhat ghostly feedback effect.</p>
<h3>3. PythonFeedback</h3>
<p>As the name suggests, PythonFeedback lets you write python scripts that modify the parameters used for the feedback. A creative python dev (<a href='http://blog.sharpthinking.com.au/'>*cough*</a>) could do wonders with this program, or variations on it.</p>
<h3>4. FilterFeedback</h3>
<p>This app lets you use an open-source library of text filters, <a href='http://www.aforgenet.com/framework/'>AForge</a>, for applying various types of rendering details.</p>
<br />
<p>Each of these taught me different techniques that I hadn't applied before, and if you give them a go you might have some fun too.</p>


<p>The <a href='http://www.aforgenet.com/framework/'>AForge</a> library was particularly cool, as it has filters for doing a lot of image filtering that you may need to automate at times. If I have a project where I need to clean up or modify images in any way, I'll reach for AForge.</p>

<p> So if you've got time for some "recreational programming" (or even if you don't...) download the  <a href='http://fracback.codeplex.com/'>fracBack code or binaries</a>, and see what you can produce.</p>
<p>I've put a <a href='http://fracback.codeplex.com/wikipage?title=Image%20Gallery'>small image gallery</a> online. If you create any interesting pics, please share</p>
<p>Oh, and any code I've released is of 'recreational quality' which is... well imagine how bad typical 'Enterprise' code is... then divide that by ten. Seriously. It's <em>that</em> bad.</p>
<p>And lastly, it's great to see how far CodePlex has come in the last few years. I gave up on them several <a href='http://shinypower.codeplex.com/'>years back</a>, and used 'code.google' in the interim, but CodePlex has come a long way. We put the <a href='http://timesnapperplugins.codeplex.com/'>TimeSnapper plugins</a> at CodePlex, to test the waters, and found it much improved. What impresses me most is that the mercurial support they now offer is not just a bridge to TFS, but is actual mercurial hosting.</p>

<p>Summary: Recreational programming. Love it.</p>
]]>
    </description>
    <pubDate>Fri, 23 Apr 2010 14:46:19 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/fracback.asp</guid>
  </item>
<item>
  <title>Hump-Jumping: How the Education of Computer Science can be Saved, err, maybe.</title>
    <link>http://www.secretGeek.net/humpjump.asp</link>
    <description>
      <![CDATA[<p>In a paper called <a href='http://www.cs.mdx.ac.uk/research/PhDArea/saeed/'>'The Camel has two humps'</a> the authors described a test which can be applied to students before they've begun a computer science course, and can fairly accurately predict those that will do well and those that will not.</p>

<p>I've never agreed with their summary of the results.</p>
<p>They say they are dividing:</p>
<blockquote><p>"programming sheep from non-programming goats"</p></blockquote>

<p>...which implies the differences between pass and fail are as pronounced as <a href='http://en.wikipedia.org/wiki/Speciation'>speciation</a>. That's a big claim and well outside the scope of their research.</p>

<p>And I think they misrepresent their study when they say:</p>

<blockquote><p>"This test predicts ability to program with very high accuracy before the subjects have ever seen a program or a programming language."</p></blockquote>

<p>...as, crucially, their study failed to check whether the students "had ever seen a program or programming language."</p>

<p>(Unless I'm misinterpreting this sentence from the paper, taken verbatim:</p>

<blockquote><p>We believe (without any interview evidence at all) that they had had no contact with programming but had received basic school mathematics teaching.</p></blockquote>
<p>... I've written to one of the authors to seek clarity.)</p>

<p>I asked Alan Kay for his opinion, when he commented here on a different topic -- he was very kind in providing a <a href='http://www.secretgeek.net/camel_kay.asp'>lengthy and thoughful answer.</a></p>

<p>His opening phrase really sticks in my mind:</p>

<blockquote><p>"They could be right, but there is nothing in the paper that substantiates it."</p></blockquote>

<p>Then, this morning, I saw a fresh comment at that article, from <a href='http://www.cc.gatech.edu/fac/David.Smith/'>David Smith</a></p>

<blockquote><p>"If there were a definitive test of ultimate programming capability I could apply on the first day of class, what would I say to those who 'failed'?"</p></blockquote>

<p>Which presents a very human response to the topic from an educator directly affected by it. And I don't have a sufficient answer to that.</p>

<p>But a different approach to the whole problem has occurred to me since:</p>

<p>Let's suppose that this test is indeed an accurate test of those that will and won't succeed in computer science 101.</p>

<p>We put aside all worries about what biases or inconsistencies the study might have. Just accept that the test is effective. Stick with me here.</p>

<p>So we give the test to all students before they start Computer Science 101. At the end of the subject, we see that, as predicated, those that do poorly in the subject tend to do poorly on the pre-test. But <strong>instead of looking for correlation, what if we looked for outliers?</strong></p>

<p>Which students did poorly on the pre-test, but did well in computer science? Those are the students with the most to teach us. Why did they buck the trend?</p>

<p>Okay, so maybe some of them cheated. (I remember a high incidence of cheating in early computer subjects I took; particularly amongst those who didn't continue in the field.) And maybe some of people deliberately blew the pre-test, even though they did well at the subject.</p>

<p>But once we find the <em>genuine</em> hump-jumpers, we focus on what it was that helped computer science 'click' for them.
Did they find there were specific misconceptions they had to overcome? Did they have extra-tuition? Were there specific problems that helped them get their thinking in order? Was it just hard work? And, regardless of the answer, would they like to become tutors next semester, specifically working with those who perform poorly on the pre-test?</p>

<p>It might be necessary to look at a lot of such hump-jumpers before useful lessons emerge. It might be that every one of them has a different story to tell, there's no common pattern. (As Tolstoy said in his Turing Award speech: "Happy programmers are all alike; but every unhappy programmer is unhappy in her own way.")</p>

<p>So that's my answer for David. I don't know what you could say to those who fail the pre-test. But I think that over time a good pre-test could be used to develop new and better teaching methods, and maybe that's the best we can do.</p>
]]>
    </description>
    <pubDate>Fri, 09 Apr 2010 04:06:52 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/humpjump.asp</guid>
  </item>
<item>
  <title>Suggested User Experience Improvements for DiffMerge</title>
    <link>http://www.secretGeek.net/diffmerge_UX.asp</link>
    <description>
      <![CDATA[<p>Frankly, I'm kind of a ninja-Buddha-wizard at the UX.</p>

<p>Perhaps you are familiar with my ground breaking work with "<code>Console.ForegroundColor = ConsoleColor.Red</code>" and other visual sensations.</p>

<p>As such I am uniquely qualified to provide suggestions for achieving incremental benefit to the User Interface of tools in the marketplace.</p>

<p>One of my favourite little free tools is 'DiffMerge' from Source Gear.</p>

<p>This is a file-difference tool that I consider to be a step or two better than the other free diffing tools on the market.</p>

<p>Here's the toolbar from DiffMerge. Look at the last three icons:</p>

<img src='http://secretGeek.net/image/diffmerge_tool_0.png' alt='DiffMerge toolbar as is' style='border:1px solid #CCC;margin:10px;' />


<p>There's a "foolish consistency" here: all three have the same green arrow, pointing in different directions.</p>

<p>But the nature of those three buttons is not consistent. Up and down are purely navigational elements, while the 'left to right' arrow is for pushing changes from one document to the other.</p>

<p>In buddhist terminology we say that their Qi is mis-chimed.</p>

<p>As such, I think that the colour of that arrow could be changed to provide a little warning of the power of this button.</p>

<img src='http://secretGeek.net/image/diffmerge_tool_1.png' alt='DiffMerge toolbar minor change' style='border:1px solid #CCC;margin:10px;' />


<p>To really take this up a notch, I'd go even further. That's right. You thought the first change was pretty extreme.</p>

<p>I'd put a separator in there, to give the left-right arrow a little space of its own. This is the UI principle of 'Proximity' - I don't have time to explain it to you kids right now, but UX-buddha's like me, we get funky with proximity all the sweet time.</p>

<p>Further more (and this is where I really trip out on the UX-pixie-dust) I'd do something tricky with the 'Save' icon.</p>

<p>If and when the file on the right is 'changed,' I would like to see a little red/orange highlight given to the save icon, to give some more "visual weight" to this element. (Currently it goes from slightly grey, to black... it's perhaps a little too subtle)</p>

<img src='http://secretGeek.net/image/diffmerge_tool_2.png' alt='DiffMerge toolbar minor change #2' style='border:1px solid #CCC;margin:10px;' />

<p>There you have it.</p>

<p>With a few light touches we've transformed the application. From something everyday and - dare I say - drab, we've dragged it kicking and screaming into the wild and crazy future.</p>

<p>Welcome to the twenty third century, DiffMerge.</p>

<p>That's how we kick it: UX-Buddha-style.</p>]]>
    </description>
    <pubDate>Thu, 25 Mar 2010 03:47:44 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/diffmerge_UX.asp</guid>
  </item>
<item>
  <title>SQL Style Extensions for C#</title>
    <link>http://www.secretGeek.net/sql_style_csharp.asp</link>
    <description>
      <![CDATA[ 
<style>.high {background-color:#CEF;font-weight:bold}
.alarmed {color:#F00;font-weight:bold;font-size:large}</style>
<p><em>(Is this serious? If you can work it out, please tell me. In any case, it's inspired by the fact I've been doing more SQL than C# lately)</em></p>
 
<p>Are you <span class='high'>addicted to SQL?</span> Are you uncomfortable whenever you have to use <span class='high'>pesky imperative languages</span> like C#?</p>
 
<p>Now you can use your <span class='high'>favourite SQL functions inside C#</span>, with the amazing new "SQL Style Extensions" class!</p>
 
<p>Need to know if a value is in a short list of constants?</p>
 
<p>In SQL you'd simply write "<code>where State in ('QLD','NSW','VIC')</code>" - but, until recently C# forced you to write:</p>
 
<blockquote>
  <code>if (State == "QLD" || State == "NSW" || State == "VIC") </code>
</blockquote>
 
<p>But now -- thanks to the aMAZzing new  '<span class='high'>SQL Style Extensions</span>' -- you can simply write:</p>
 
<blockquote><code>If (State.In("QLD","NSW","VIC"))</code></blockquote>
 
<p>... then close down the IDE and get back to your Entity Diagrams in no time!</p>
 
<p>Do you miss <span class='high'>the power of <code>LIKE</code> matching?</span></p>
 
<p><span class='alarmed'>Miss it no more!</span></p>
 
<p>With SQL Style Extensions you can write:</p>
 
<p><code>If (Firstname.Like("Fred%"))</code> and <span class='high'>find all your Freds, Fredericks and Fredas in one powerful line!</span></p>
 
<p><span class='alarmed'><em>Buy now!!</em></span> <em>&lt;-- <sub> for added effect, imagine that text is blinking. I... just... couldn't... bring myself to apply a blink tag.</sub></em></p>
 
<p>This is just a <em>taste</em>:</p>
 
<blockquote><pre>
    using System.Linq;
    using System.Text.RegularExpressions;
 
    static class SqlStyleExtensions
    {
        public static bool In(this string me, params string[] set)
        {
            return set.Contains(me);
        }
                               
        public static bool Like(this string me, string pattern)
        { 
            //Turn a SQL-like-pattern into regex, by turning '%' into '.*'
			//Doesn't handle SQL's underscore into single character wild card '.{1,1}',
            //        or the way SQL uses square brackets for escaping.
            //(Note the same concept could work for DOS-style wildcards (* and ?)
            var regex = new Regex("^" + pattern
                           .Replace(".", "\\.")
                           .Replace("%",".*")
                           .Replace("\\.*","\\%")
                           + "$");
	
            return regex.IsMatch(me);
        }
    }</pre>
</blockquote>
<p>(Actually, that's the whole thing.)</p>
<p>(If you do use this, you might want to improve that regex. Testing was... rudimentary.)</p>
]]>
    </description>
    <pubDate>Fri, 12 Mar 2010 10:16:12 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sql_style_csharp.asp</guid>
  </item>
<item>
  <title>The Movie Hollywood (And My Wife) Doesn't Want You To See: Weekend at Jacko's</title>
    <link>http://www.secretGeek.net/wacko_weekend.asp</link>
    <description>
      <![CDATA[ 
<p><em>Other working titles: 'Weekend at Michael's', 'Weekend at Jackson's', 'Weekend at Neverland', 'Wacko Weekend'</em> </p>
 
<p>So this is a movie idea for which <a href='http://jcooney.net'>JoCo Loco</a> really deserves the blame, so please redirect the hate mail in his direction this time thank you very much.</p>

<h2>Opening:</h2>
<p>Newspapers spin out, announcing the tragic death of Michael Jackson. Fade to black and our subtitle reads <strong>'4 weeks earlier.'</strong> </p>

<p>Sound of an old-timey radio announcer telling us that Legendary Musician Michael Jackson has announced a special prize: there are 8 golden tickets hidden inside 8 lucky copies of his new album. The 8 very lucky little boys who find them will be able to spend one magical weekend at Michael's Neverland ranch, chaperoned by the man himself.</p>

<img src='http://secretGeek.net/image/bernies.jpg' alt='you know the feeling' style='border:1px solid #CCC;margin:10px;float:right;' />

<p>Just before the lucky winners arrive, Jackson suffers a heart attack and falls down dead. After all the publicity that the golden tickets have created, his minders are desperate to go ahead with the lucky weekend, so they prop him up, <a href='http://www.imdb.com/title/tt0098627/'>"Weekend at Bernie's"</a> style, determined that a setback like this won't stop Michael from being the perfect host.</p>

<p>As I've demonstrated on numerous occasions, a high quality premise is all one needs and 'The Self-Writing Script' takes care of itself thereafter.</p>
<p>Other scenes include:</p>
<p>Whenever the minders get too tired, they throw Michael onto the neverland roller-coaster for a couple of hours.</p>

<p>One particularly touching scene has Jackson (well, corpse-of-Jackson) sitting on a park bench, rather stiff, while a whistful pet gorilla, (Bobo number 2?) reaches an arm around him and gives him a long sad hug of farewell. Violins. Not a dry eye in the room.</p>

 <img src='http://secretGeek.net/image/Weekend_at_Jackos_th.png' alt='Actual Corpse of Jackson, 
 appearing in the big musical finale' style='border:1px solid #CCC;margin:10px;float:right;clear:right' />
 
<p>And the big musical finale is an awesome recreation of the zombie dance from Thriller.</p>

<p>Note to self: could the actual corpse of Jackson be used in the film? It would be great to see him dance one last time. Moonwalking, for example, would be easily achieved with pulleys and string.</p>
<p>No doubt, the whole thing is narrated by a drunk and somewhat angry zombie hamster.</p>
<img src='http://secretGeek.net/image/zombie_hamster.jpg' alt='Or, to put it another way, here is an image ive been meaning to use for a while now' style='border:1px solid #CCC;margin:10px;' /> 
]]>
    </description>
    <pubDate>Wed, 10 Mar 2010 09:55:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/wacko_weekend.asp</guid>
  </item>
<item>
  <title>Sysi: the ultimate administrators toolkit</title>
    <link>http://www.secretGeek.net/sysi_launch.asp</link>
    <description>
      <![CDATA[ 
  
<p>I saw a typo in a magazine where someone referred to <a href='http://www.Sysinternals.com'>SysInternals</a> as '<em>Sysinternal</em>' (singular... they left the 's' off the end)</p>
 
<img src='http://secretGeek.net/image/sysinternal.jpg' alt='Take control of Windows with Sysinternal, the ultimate administrators toolkit' style='border:1px solid #CCC;margin:10px;' /> 
 
<p>And this gave me a random idea: what if <a href='http://www.Sysinternals.com'>SysInternals</a> provided a <em>single</em> tool, called '<code>Sysinternal</code>'.</p>
 

<img src='http://secretGeek.net/image/richardPryor_supermanIII.jpg' alt='richard pryor' style='border:1px solid #CCC;margin:10px;float:right;clear:right' /> 
 <p>And it does everything. Just <em>everything</em>. Like the computer that Richard Pryor's character builds in Superman III. Got it?</p>
 
<p>So I told <a href='http://jCooney.net'>JoCo Loco</a> this idea -- and he'd <a href='http://en.wikipedia.org/wiki/Be_Kind_Rewind'>sweded up</a> a <strong>Compleat Design </strong> within seconds:</p>

<p><code>SysInternal</code> is a console app. The first parameter is the name of the specific SysInternals tool you want to use. The remaining parameters are passed to that tool.

<p>You don't need to have all the tools from SysInternals on your machine already. <code>SysInternal</code> will get what's needed, by downloading from <a href='http://Live.Sysinternals.com'>Live.Sysinternals.com</a>.</p>
 <a href='http://secretGeek.net/image/sysi.png'><img src='http://secretGeek.net/image/sysi_th.png' alt='Sysi.exe: ladies dont know bout my console colors' style='border:1px solid #CCC;margin:10px;float:right' /></a>

<p>And if you pass the parameter "<code>-?</code>" (or no parameters) then it will screen-scrape <a href='http://Live.Sysinternals.com'>Live.SysInternals.com</a> to tell you all the available tools.</p>

<p>I quickly found that the name '<code>SysInternal.exe</code>' was too long to type out, so I shortened it to '<code>Sysi.exe</code>', pronounced <em>Sissy.</em> Hopefully this also stops me from violating their trademark. (Mark Russinovich is not a Sissy. Chuck Norris wishes he was Mark Russinovich)</p>
 
<p>I've released the code on CodePlex, at <a href='http://sysi.CodePlex.Com'>sysi.CodePlex.Com</a>.</p>
<p><strong>Go get it!</strong></p>

<a href='http://sysi.codeplex.com/releases/view/41371'>
<img src='http://secretGeek.net/image/downloadsysi.png' alt='Download sysi right now' style='border:0px solid #FFF' />
</a>
]]>
    </description>
    <pubDate>Tue, 02 Mar 2010 22:30:56 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/sysi_launch.asp</guid>
  </item>
<item>
  <title>Movie: Priest Academy</title>
    <link>http://www.secretGeek.net/priest_academy.asp</link>
    <description>
      <![CDATA[<p>As you may know, I spend the hours from 2:15 am until 3:16 am each day putting the finishing touches on a series of racy, fun, and sometimes controversial big budget <a href='http://secretgeek.net/road_movie_premise.asp'>films</a> that generally go on to make a major impact at the box office.</p>
<p>One of my recent film-ventures was red-lighted when <a href='http://patrickcooney.com/'>a principal Cooney-investor</a> relocated inter-state during a sensitive round of pre-production Ponzi-fund-bolstering.</p>
<p>Thus, I expect that various imitators are intending to bring their own cheap knock-offs to the screen to fill the public's unslated thirst. So as a pre-emptive strike, I've decided to immediately publicise the film's gobstopping premise in order to temporarily flood the global market for staggering ideas.</p>
<p>Here it is...the basic pitch for <em>'Priest Academy'</em></p>
<h2>Premise:</h2>
<p>Church attendance figures are woeful and the church is desperate to throw off its image as a sexist, racist, homophobic, straight-laced institution. So they throw away all entrance limitations and welcome a new generation of priests into their hallowed seminaries.</p>
<img src='http://secretGeek.net/image/smoking_nuns12.jpg' alt='smoking nuns' style='border:1px solid #CCC;margin:10px;float:right;' />
<h2>Characters</h2>
<p>The new class at the seminary would include:</p>
<ul>
  <li>a stripper </li>
  <li>a hooker</li>
  <li>a flasher</li>
  <li>an arsonist</li>
  <li>a horse who can count</li>
  <li>a monkey with a taser</li>
  <li>someone who seriously wants to become a priest</li>
  <li>a huge guy</li>
  <li>a flatulent dwarf</li>
  <li>a buddhist monk</li>
</ul>
<p>Okay. That's all you need to know. The rest is elementary: the angry bishop, the drunk old lecturer-priest, the misbehaving nuns, the homily-challenge/smack-down, the confessional-punch-up, the fire in the bell-tower, the frankinsence fight, the smashing-through-stained-glass-windows, the whole thing. Done. It Is Written. <em>Word.</em></p>
]]>
    </description>
    <pubDate>Mon, 22 Feb 2010 09:47:48 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/priest_academy.asp</guid>
  </item>
<item>
  <title>Inspirational Rat Story</title>
    <link>http://www.secretGeek.net/rat_101.asp</link>
    <description>
      <![CDATA[<p>I gave a rather inspiring speech at standup yesterday, and I think I ought to record it for posterity, so it can (eventually) make its way into one of those 'inspirational speeches of world history' type books you see in the bargain tables out the front of third-rate book shops.</p>

<p>Remember that the idea of <a href='http://www.secretgeek.net/standup_rules.asp'>'standup'</a> is to tell your colleagues <em>what you did yesterday, what you intend to do today, </em>and to <em>call out anything that's blocking you.</em></p>
<p>Here's what I said. (True story, by the way.)</p>
<img src='http://secretGeek.net/image/rat_pipe.jpg' alt='rat pipe' style='border:2px solid #422;margin:10px;float:right;' />

<blockquote><p>Picture a rat crawling through a sewer pipe. The pipe is dark and endless. It stretches out in front of him, endless darkness, and behind him, a long, endless tunnel of darkness. The rat has been crawling for so long that he no longer knows which way he is going; time seems to have stopped and he is no longer certain that he is moving forward at all. His foot slips against the slimy side of the pipe and for one moment he falls asleep, and while he sleeps he dreams that he is a software developer working on this very project. Standing here. Talking to all of you. He wakes up a moment later, realises he is back in the sewer pipe and his body glows with a tremendous feeling of relief. It's a <em>beautiful</em> moment.</p></blockquote>
]]>
    </description>
    <pubDate>Fri, 19 Feb 2010 09:55:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/rat_101.asp</guid>
  </item>
<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>

</channel>
</rss>

