<?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>Behavior Driven Development: As Human As Possible</title>
    <link>http://www.secretGeek.net/behaviorDdAhap.asp</link>
    <description>
      <![CDATA[<p>I've been intrigued with everything I've read about "Behavior Driven Development" -- which is essentially a friendlier face on Test Driven Development.</p><p>For beginners like me I think the most obvious concept is that BDD = Test Driven Development Plus "natural sentence style test naming"  as <a href='http://www.jpboodhoo.com/blog/GettingStartedWithBDDStyleContextSpecificationBaseNaming.aspx'>JP Boodhoo</a> <a href='http://codebetter.com/blogs/jean-paul_boodhoo/archive/2007/11/29/getting-started-with-bdd-style-context-specification-base-na.aspx'>calls it</a>.</p><p>For example, <a href='http://codebetter.com/blogs/david_laribee/archive/2007/12/17/approaching-bdd.aspx'>David Laribee</a> gives examples where Tests and test fixtures are simply renamed according to a strict pattern, like this:</p><blockquote><pre>namespace <strong>Specs_for_TransactionElection</strong><br />{<br />   [TestFixture]<br />   public class <strong>When_an_election_is_started</strong> : Spec<br />   {<br />      private ITransaction _stubTransaction;<br />      private TransactionElection _election;<br /><br />      [Test]<br />      public void <strong>The_result_should_be_in_progress</strong>()<br />      {<br />         <br />         Assert.AreEqual(_election.Result, TransactionElectionResult.InProgress);<br />      }<br />   }<br /></pre></blockquote><p>The upshot of this is that the tests in the code runner read like a restricted-subset of plain English:</p><img src='http://secretGeek.net/image/bdd_example_resharper_specs_3.jpg' alt='Behavior Driven Development example from Resharper' style='border:1pt solid #000;margin-left:7px;padding:10px'/><p>Some people, including David and <a href='http://weblogs.asp.net/rlaneve/archive/2008/01/02/bdd-style-specification-reporting-via-cc-net.aspx'>Ryan LaNeve</a>  have said that these <a href='http://dannorth.net/whats-in-a-story'>stories</a><p>What i'd like to see is a better looking code runner.</p><p>The treeview control itself should present a "Friendlier" form of those names -- underscores could be converted into spaces. Larger fonts could be used for sub-headings. And the larger headings should be in lower contrast colour, so you can fade them out when you want to.</p><p>Here's a dodgy mockup:</p><blockquote><style type="text/css">.namespace { display:block; font-size:large; color:#888;}.testfixture { display:block; font-size:medium; color:#334; font-style:italic; margin-left:30px;}.test { display:block;  margin-left:60px;	 font-size:x-small;}</style><span class='namespace'>Specifications for Transaction Election</span> <span class='testfixture check'><img src="http://secretGeek.net/image/checkmarkgreen_alt.gif" alt="passed"> When votes are cast:</span> <span class='test check'><img src="http://secretGeek.net/image/checkmarkgreen_alt.gif" alt="passed"> A single no vote should rollback the transaction.</span><span class='test check'><img src="http://secretGeek.net/image/checkmarkgreen_alt.gif" alt="passed"> A no vote will leave the election with a finished and voted no status.</span> <span class='test check'><img src="http://secretGeek.net/image/checkmarkgreen_alt.gif" alt="passed"> Unanimous yes votes will commit the underlying transaction.</span></blockquote><p>The point here is that I'm not talking about improving the <em>output</em> of the unit test tool -- for example the 'Dox report generated by the MbUnit GUI runner' (<a href='http://weblogs.asp.net/rlaneve/archive/2008/01/02/bdd-style-specification-reporting-via-cc-net.aspx'>as Ryan LaNeve has demonstrated</a>)-- I'm talking about <em>changing the runner itself</em> so that it directly cleans up the names of the tests and fixtures for presentation.</p><p>It could even report on "Convention Breakers". (Squiggly red underline perhaps).</p><p>(side note: <a href='http://mattcalla.com/2008/01/15/bdd-style-naming-macro.aspx'>matt calla</a> provides a macro for doing the exact opposite of this.)</p><p>(Other side note: is this similar to Donald Knuth's idea of <a href='http://www.literateprogramming.com/'>literate programming</a>?)</p>]]>
    </description>
    <pubDate>Tue, 13 May 2008 11:40:45 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/behaviorDdAhap.asp</guid>
  </item>
<item>
  <title>What To (Really) Do If You Find Out Your Parents Are Using Vista (redux)</title>
    <link>http://www.secretGeek.net/vista_parents_2.asp</link>
    <description>
      <![CDATA[<p>I probably owe Vista an apology for that <a href='http://secretGeek.net/vista_parents_1.asp'>previous slurring</a>. I started out wanting to say something else altogether, but once that idea had occurred to me, I found it irresistable ;-)</p><p>So here's the real story: My Parents Bought Vista. Shocking, yes. But it's not the end of the world. I'm here to tell you there is Life On Vista.</p><p>Here are practical tips for how to deal with Parental Vista Use.</p><ol><li>Remove OEM Junk</li><li>Good children don't let parents run as admin</li><li>Set their hard drive free!</li><li>A digital Camera without a backup strategy is a loaded handgun without a safety switch</li> <li>No Aero for You!</li></ol><h2>Remove OEM Junk</h2><p>First thing to do is to identify any OEM crap that the vendor will have bundled on there. I had to delete a bunch of Compaq nonsense and then kill a trial-copy of Norton Anti Virus (NAV).<h3 style='float:right;display:inline'>Norton Anti Virus: <a href='http://www.thepcspy.com/read/what_really_slows_windows_down/5'>just say no.</a></h3><p>If you want to run anti-virus software, you want <a href='http://free.grisoft.com/'>AVG</a>. <p>But also... maybe you noticed that Vista has a very heavy-handed security model of its own, nothing like the "run anything" hey day of windows in previous eras. So maybe it occurred to you that anti-virus software is not such a necessity on Vista as it was on previous Windows Operating Systems. <p>In a way, using anti-virus software and UAC (User Account Control) at the same time, reminds me of the old saw about the Irishman who wore two condoms: "to be sure, to be sure."</p><p>So I think you ought to choose: UAC or AVG.</p> <p>But the dumbest choice is NAV plus UAC.</p><p>While you're at it, check for any unwanted startup programs (<code>run "msconfig"</code>) and see what services are set to start automatically.</p> <h2>Good children don't let parents run as admin</h2><p>Remember the crazy times back at the turn of the millennium? The default SA password for SQL Server was [blank] -- and every man and his hound ran as admin?</p><p>Those days are gone, Jack, and it's time to reel your parents in. They ain't admins. They are guests on their own machine and they will treat it with respect, dammit.</p><p>If they have software that demands they run as admin... you'll stick that b*tch in <a href='http://www.codinghorror.com/blog/archives/000491.html'>a VM</a> and tell it to shut the hell up. Capisco?</p><p>Should they need to elevate to admin to install some software... they will beg for help, explain their crazy predicament, apologise for their tom-foolery, and you will vnc onto their machine (with <a href='https://www.copilot.com/'>Fog Creek CoPilot</a>, <a href='http://www.teamviewer.com/'>TeamViewer</a> or some other remote assistance tool) and do the necessary. <h2>Set their hard drives free!</h2><p>Two tips here:</p><ol><li>Turn off Indexing</li><li>Enable advanced performance (on SATA drives)</li> </ol><p>Indexing is turned on by default... and it's a heavy tax your parents don't need. In some crazy scramble to catch up to google, and to make up for their <a href='http://secretgeek.net/ms_search.asp'>past failures</a> in hard drive searching, they want to bring your hard drive to its knees permanently, so that the one time you search for something, there will be a plethora of irrelevant results presented imeediately and without pause. Turn off indexing. Really. Your mother don't need it.</p><p>She doesn't even need indexing on her email. If she does have a big pst file that she wants to search, she will operate differently to you and I. She'll carefully craft her search, and then, while the search is running she'll make a nice hot cup of tea. Time is different for each generation.</p>   <p>If they have a SATA disk in their Vista machine... the setting Enable write caching on the disk is enabled by default on SATA disks in Windows Vista, but the second setting Enable advanced performance is not enabled by default<img src='http://secretGeek.net/image/Enable_Advanced_Perf.png' alt='Enable Advanced Performance' style='border:1pt solid #000;margin-left:7px;padding:10px;float:right'/><ol><li>Click Start, right-click on "Computer" and click "Manage" (you may get a UAC prompt here)</li><li>Select "Device Manager", and expand the node for "Disk drives"</li><li>Right-click on their primary hard drive, and select "Properties"</li><li>Go to the "Policies" tab, and make sure "Enable write caching" on the disk and "Enable advanced performance" are both selected.</li><li>Hit OK, close Computer Management</li></ol><p><strong>This can allegedly allow you to lose data if the power goes out suddenly.</strong> Yet some people have used it for years without incident. I consider it safe enough. You be the judge.</p><h2>A Digital Camera without a backup strategy is a loaded handgun without a safety switch</h2><p>Say it with me, say it loud:</p><p><strong>A digital camera without a backup strategy is a loaded handgun without a safety switch</strong></p><p>But what have digital cameras got to do with helping parents use Vista?</p><p>Because the same parents who go out and buy themselves Vista without understanding the repercussions are the exact kind of people who purchase a digital camera on a whim.</p><p>So generally a child who has one of these problems also has the other. I think.</p> <p>So for this one, I urge you to read <a href='http://www.hanselman.com/blog/'>Scott Hanselman's</a> excellent article, <a href='http://www.hanselman.com/blog/OnLosingDataAndAFamilyBackupStrategy.aspx'>On Losing Data and a Family Backup Strategy</a>.<h2>No Aero Glass for You!</h2><p>There's nothing for you to do in this step, just something to be aware of.</p><p>Vista Home Basic doesn't support the Vista Aero theme. Maybe you knew that already, but it had slipped by me, and I was baffled why it wasn't available, wasting time to trying to work out what was so bad about their machine that it didn't give Aero as an option.<p>Turned out that their hardware was plenty good enough. But the stingy buggers in the shop had pulled a swift one on the poor dears and given them the criminally downscale poor cousin of vista -- the Suburban Ghetto edition.</p><p>Apparently it's an easy <a href='http://www.computing.net/answers/windows-vista/vista-home-basic-aero-glass/931.html'>registry tweak</a> to get around -- but I haven't tried it as yet.</p><p>The history of <strong>why</strong> this version exists is a kind of unholy alliance between sellers of substandard hardware and mercenary-cannibals from the <a href='http://www.joelonsoftware.com/articles/CamelsandRubberDuckies.html'>camels and rubber duckies</a> sect of capitalism. There's a lawsuit in the US.</p><p>But I digress.</p><p>There is life after a Vista install.</p><p>You don't need to <a href='http://dotnet.org.za/codingsanity/archive/2007/12/14/review-windows-xp.aspx'>upgrade to XP</a>.</p><p>And there are even some <a href='http://en.wikipedia.org/wiki/Features_new_to_Windows_Vista'>features of Vista</a> I like. ([Alt]+[Up arrow] to move up a directory in explorer, amongst others)</p>]]>
    </description>
    <pubDate>Tue, 06 May 2008 12:44:30 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/vista_parents_2.asp</guid>
  </item>
<item>
  <title>What To Do If You Find Out Your Parents Are Using Vista</title>
    <link>http://www.secretGeek.net/vista_parents_1.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/vista_parents_1.asp' style='padding:0'><img src='http://secretGeek.net/image/vista_look_recognize.PNG' alt='Look at it. Recognize it. Your parents wellbeing could depend on it!' style='border:1pt solid #000;float:right;margin:4pt;margin-left:7pt'/></a><p>First, take a deep breath...</p><p>You're not a failure as a child. You're not helpless. And you're not alone.</p><p>If you think you're a failure, consider this: There are many parents with neglectful kids, who never use Vista. There are also parents with seemingly model children who do use Vista.</p><p>As a child, it is your job to look after your parent's technological well being. But even the most responsible child cannot monitor their parents 24 hours of every day. A loving child will gives their parent as much freedom as possible.</p> <p>Unfortunately, there are many pushers out there, just waiting to get your parents habituated to Vista. These people have infiltrated our computer shops. The sad truth is that many computers available on the market today are already spiked with deadly Vista. Parents are being lured with tales of Aero Glass and Safer computing. Too many of them are incapable of seeing beyond the lurid and gratuitous sales pitch. Before long they are waking up to reality, with a Vista Home Basic installation, and a raging does of other OEM tricks, like Norton Anti Virus and  Microsoft Works.</p><p>So the first thing to accept is that Vista, while indeed dangerous, is an unavoidable problem for your parents to deal with. And they'll do it better and faster if you're aware, involved and don't stick your head in the sand.</p><h2>THE AWARE CHILD HAS THE SAFEST PARENT</h2><p>Part of awareness and a major deterrent to experimentation is to talk to your parents about Vista.</p><p>But even with a lot of your involvement, there are no guarantees. So it's important to know the symptoms of Vista use and to take action if you see your parent displaying them.</p><h3 style='float:right;display:inline'>They may develop chronic constipation<br /> or diarrhea, and just seem tired<br />  and lethargic all the time. They may<br />	 have trouble remembering things and<br />	  forget something you told them<br /> just a few minutes earlier.</h3><h2>THE WARNING SIGNS</h2><p>There are no symptoms that are absolutely reliable. But there are clues.</p><p>Most of these symptoms tend to be gradual which is why your awareness is so important.</p><p>Don't jump to conclusions, but do investigate any suspicions you have as fully as possible. Trust your intuition.</p><p>Many of the warning signs for Vista use are the same as those for depression or for the ups and downs of being an ageing parent in a world gone technological. There's also the possibility it's a physical or emotional problem.</p><p>But whatever the problem, we're talking about a parent who needs help. Right now.</p><h2>START WITHIN THE FAMILY - BUT DON'T WAIT TO GET HELP IF THERE IS A PROBLEM.</h2><p>Nothing beats the power of love and family support. That has to start with frank discussion.</p><p>Don't make it an attack. And don't try to talk with your parent if he or she seems under the influence.</p><p>Wait for a calm moment and then explain that you're worried about a certain operating system (be specific) and give your parent every opportunity to explain. That means really listening, not doing all the clicking.</p><p>Use "I" messages -- sentences that start with "I" -- explaining how your parent's Vista use affects you and your community.</p><p>At the same time, it's important to speak frankly about the possibility of Vista. And it's particularly important to talk about your values and why you're dead set against Vista for them at this time.</p><p>If your parent seems evasive or if his or her explanations are not convincing, you should consult your doctor or a professional operating system abuse counselor to rule out illness and to ask for advice.</p><p>In addition, you may also want to have your parent visit a mental health professional to see if there are emotional problems that either underlie or are caused by their Vista usage.</p><h2>FURTHER ACTION IS PROBABLY NECESSARY.</h2><p>Even if your parent seems non-responsive or belligerent, if you suspect Vista is involved, immediate action is vital.</p><p>First, you'll need an evaluation from a health professional skilled in diagnosing parents with operating system or office application problems. You may want to get involved with an intervention program to learn techniques that will help convince a Vista user to accept help. For the user, there are self-help, outpatient, day care, residency, and 24-hour hospitalization programs.</p><p>The right program depends entirely on the circumstances and the degree of Vista involvement. Here, you'll need professional help to make an informed choice.</p><p>Another point: If a program is to succeed, the family needs to be part of it. This can mean personal or family counseling. It may also involve participating in a support group where you learn about co-dependency and how not to play into the problems that might prompt further Vista use.</p><p>If you don't know about Vista reduction programs in your area, call your family doctor, local hospital or county mental health society or retirement village counselor for a referral. You can also call the national helpline for advice and a referral or investigate twelve step programs in your local capital city.</p><h2>WHATEVER YOU DO, DON'T GIVE UP</h2><p>That parent who upsets you so much today is the same dear parent who, only yesterday, raised you and looked after you. They're in way over their heads, and they never needed you quite as much as they need you now.</p><p>No matter what they say.</p><p><small>(This cautionary tale owes a debt of gratitude to <a href='http://www.drugfree.org/Intervention/HelpingOthers/AdultTeen/What_To_Do_If_You_Think_Your_Child_Is_On_Drugs'>'what to do if you think your child is on drugs'</a>)</small></p>]]>
    </description>
    <pubDate>Sat, 03 May 2008 23:43:30 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/vista_parents_1.asp</guid>
  </item>
<item>
  <title>Sample Code From Text-Adventure Game Platforms</title>
    <link>http://www.secretGeek.net/text_adventure_samples.asp</link>
    <description>
      <![CDATA[<p>I'm using the occasional snippet of spare time I don't have to write a 'platform' for constructing <a href='http://secretgeek.net/wiki_game_idea.asp'>Wiki-based Adventure Games</a> <a href='http://secretgeek.net/more_wikitext.asp'>(more)</a>. It's a kind of -- and I shiver in horror at the term -- a Domain Specific Language.</p><p>So, when you're inventing a Domain Specific Language for writing Wiki-based Adventure Games... I guess it's a good idea to acknowledge:<p>a) You're gonna suck at it and</p> <p>b) it's been done before.</p> <p>So, I guess it's time to consult the classics.</p>  <p>Thanks to a <a href='http://hackety.org/2008/04/22/makingScummGames.html'>post</a> from <a href='http://whytheluckystiff.net/'>_why</a>, i've learnt about <a href='http://en.wikipedia.org/wiki/SCUMM'>Scumm</a>, the Script Creation Utility for <a href='http://en.wikipedia.org/wiki/Maniac_Mansion'>Maniac Mansion.</a></p><p>Here's a snippet of ScummC provided by _why:</p><blockquote><pre>object carolObj {<br />  name = "Indigenous lifeform";<br />  verb(int vrb,int objA,int objB) {<br />    case TalkTo:<br />      zobTalkToCarol();<br />      return;<br />    case LookAt:<br />      if( ! knowsCarol ) {<br />          egoSay("A large carbon based mammal, it seems.");<br />          waitForMessage();<br />      }   <br />      else {<br />          egoSay("It is Carol, one of the local lifeforms.");<br />          waitForMessage();<br />      }   <br />      return;<br />    case Smell:<br />      egoSay("This creature has an overwhelming pungent smell.");<br />      return;<br />    case Move:<br />      egoSay("The lifeform is surprisingly sturdy, I don't believe I can use force.");<br />      return;<br />  }<br />}<br /></pre>  </blockquote><p>Well that's very nice.</p><h2>Sierra</h2><p>Now, how about that megalith of adventure games from the 1980s, <a href='http://www.sierra.com/'>Sierra Online?</a></p><p>Sierra used an interpreter called <a href='http://en.wikipedia.org/wiki/Adventure_Game_Interpreter'>AGI</a> (adventure game interpreter) to make such classics as <a href='http://en.wikipedia.org/wiki/Leisure_Suit_Larry'>Leisure Suit Larry</a> and <a href="http://en.wikipedia.org/wiki/King's_Quest">King's Quest.</a></p><p>(Leisure Suit Larry is a kind-of formative game for my entire <a href='http://en.wikipedia.org/wiki/Al_Lowe'>character</a> and personality. In case you didn't realise this, I  thought I'd spell it out now.)</p><p>Here's a code snippet:</p>  <blockquote><pre>if (said("look","door")) {<br />  if (posn(ego,0,120,159,167)) {<br />    print("These doors are strongly built<br />      to keep out unwanted visitors.");<br />  }<br />  else {<br />    print("You can't see them from<br />      here.");<br />  }<br />}<br /></pre></blockquote><p>(example from: <a href='http://www.adventureclassicgaming.com/index.php/site/features/143/'>Making adventure games with AGI</a>)</p><h2>GrimE</h2><p>GrimE is a game engine written in scripting language <a href='http://www.lua.org'>LUA</a>, touted as "the successor to SCUMM, preserving some of that engine's features" (according to the big 'pedia.)</p><p>I haven't found a sample or a good starting resource -- so if you find one, please send it along.</p><h2>Agast</h2><p>Also under the wikipedia <a href='http://en.wikipedia.org/wiki/Category:Adventure_game_engines'>category</a> of Adventure Game Engines, I found <a href='http://en.wikipedia.org/wiki/AGAST'>AGAST</a><p>Here's a morsel of <a href='http://www.allitis.com/agast/easy_scripting.html'>agast scripting...</a><blockquote><p>"For example, here's an event that is triggered when the player looks at his goldenmop:<blockquote><pre>event Lookat &lt;> GoldenMop<br /> { <br />     EGO:<br />      "It's my trusty golden mop."<br />      "I got that years ago for saving the galaxy."<br /> }<br /></pre></blockquote><p>(later)</p><blockquote><pre>var TalkedToGiantLizard;<br /> <br />event Talkto -> GiantLizard<br /> { <br />   if TalkedToGiantLizard {<br />        "Since he won't talk to me, I won't talk to him either."<br />      } <br />   else {<br />        "Hi up there, Gozira!"<br />                  delay 10; <br />       "He probably can't hear me, or he doesn't speak English."<br />           TalkedToGiantLizard = true; <br />   } <br />}</pre></blockquote></p></blockquote><h2>Wintermute</h2><p><a href='http://dead-code.org/home/'>Wintermute</a> (from dead-code) -- how awesome.<p>Here's an example of scripting for wintermute, (taken <a href='http://wiki.dead-code.org/wakka.php?wakka=IconBased&v=5ir'>from here</a>)</p><blockquote><pre>on "first"<br />{<br />    Game.Msg("Do something after the first choice.");<br />    }<br /> <br />on "second"<br />{<br />    Game.Msg("Do something after the second choice.");<br />    }<br /> <br />on "third"<br />{<br />    Game.Msg("Do something after the third choice.");<br />        dlgObject.removeIcon("second");<br />}<br /></pre></blockquote><h2>ZIL</h2><p>Zil? Zork Implementation Language of course! What else would you implement <a href='http://en.wikipedia.org/wiki/Zork'>Zork</a> in?</p><p>And it's time for <a href='http://secretgeek.net/lisp_truth.asp'>lisp</a>-like languages to bring a close to this article ;-)</p><blockquote><pre><p>Here's what the definition of the Living Room from Zork I looks like:</p>&lt;ROOM LIVING-ROOM<br />(LOC ROOMS)<br />(DESC "Living Room")<br />(EAST TO KITCHEN)<br />(WEST TO STRANGE-PASSAGE IF CYCLOPS-FLED ELSE<br />"The wooden door is nailed shut.")<br />(DOWN PER TRAP-DOOR-EXIT)<br />(ACTION LIVING ROOM-F)<br />(FLAGS RLANDBIT ONBIT SACREDBIT)<br />(GLOBAL STAIRS)<br />(THINGS &lt;&gt; NAILS NAILS-PSEUDO)&gt;<br /></pre></blockquote><p>(from <a href='http://www.mv.com/ipusers/xlisper/zil.pdf'>'Zil [pdf]'</a>)</p><p>(And how's this for an intriguing name for a pdf [from the <a href='http://en.wikipedia.org/wiki/Z-machine_(interpreter)'>ZIL entry at wikipedia</a>] <a href='http://www.csd.uwo.ca/Infocom/Articles/small.html'>"How to Fit a Large Program Into a Small Machine"</a>)</p> <p>Okay. That's about all I wanted to share. I think the similarities and differences are telling. You see common concepts like "ego" and character manipulation. You see different styles.</p><p>I'd like to make some pompous over-reaching statement that text adventure games encompass every deep complex issue of software engineering. That a platform that allows efficient construction of games would need to be a shining example of superb software craftsmanship, with all the right buzzword compliance to drag our industry into a new era of productivity.</p>   <p>But I think <a href='http://www.crockford.com/'>Douglas Crockford</a> (inventor of Json) distills the soul of a great computer game, in his very entertaining article <a href='http://www.crockford.com/wrrrld/maniac.html'>'The Expurgation of Maniac Mansion</a>, :</p><ol><li>meet people, </li><li>kill people, </li><li>take their money, </li><li>buy more weapons.</li></ol><p>And, indeed, This is the chief pattern I want to enable with my wiki adventure game. Mercenary. Ruthless. Vile. And most of all: good clean fun.</p>]]>
    </description>
    <pubDate>Fri, 02 May 2008 11:50:56 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/text_adventure_samples.asp</guid>
  </item>
<item>
  <title>TimeSnapper 3.0 -- an interactive, bubbling cauldron of possibilities</title>
    <link>http://www.secretGeek.net/ts_30.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/ts_30.asp' style='padding:0'><img src='http://secretGeek.net/image/wordcloud_3_th.png' alt='TimeSnapper 3.0 out now! This is the activity cloud' style='border:1pt solid #000;float:right;margin:4pt;margin-left:7pt'/></a><p>While the googles and microsofts have been touting their clouds and their <a href='http://channel9.msdn.com/ShowPost.aspx?PostID=399578'>meshes</a>, we've been enhancifying the cloud capabilities of TimeSnapper. (And by "we" I mean my dilligent colleague Atli, who is the driving force on this one.)</p> <div style='float:right;margin-right:25px;'><a href='http://TimeSnapper.com'>  <div style="height:72px;width:220px;cursor:hand;cursor:pointer;padding-left:67px;padding-top:25px;font-weight:bold;font-size:1.2em;margin-left:10px;text-decoration:underline;background:url(http://secretGeek.net/image/timeclassic_.png) no-repeat;">TimeSnapper <sub style="font-weight:normal;font-size:0.85em;display:block;">life analysis system</sub></div> </a></div><p>The <a href='http://TimeSnapper.com'>TimeSnapper</a> 'life analysis system' has finally reached version 3.0.</p><p><a href='http://TimeSnapper.com/'>(Wondering what TimeSnapper is? Overview here)</a></p><p>This was a pretty solid overhaul, with many improvements under the covers (see <a href='http://TimeSnapper.com/releasenotes.aspx'>release notes</a> if you're detail oriented).</p><p>On the surface, the most important change is that the <a href='http://secretgeek.net/cloudbusting.asp'>"activity cloud"</a> (one of our reports) is now far more interactive.</p><p>Previously the 'activity cloud' was just a static word cloud, giving you an instant visual clue about what you've been up to.</p><p>Now it is an interactive, bubbling cauldron of possibilities. A self-organising mind map of your life.</p><p>Click on a word in the activity cloud to see a more detailed activity cloud, specific to that word.</p><img src='http://secretGeek.net/image/wordcloud_4_th.png' alt='click on a word to see extra detail...' style='background-color:#FFF; border:2pt solid #000;margin-left:7px;padding:10px;float:right;clear:right'/><p>(In the little screenshots at right, i've clicked on the word fogBugz, to see more detail about what i've been doing there, for example)</p><p>But here's what I like: the different ways to view your life are now converging into one seamless experience.</p><p>TimeSnapper has three main ways of viewing your life:</p><p>There's the day browser, where you watch a movie of your computing life. There's the reports, where you get a high level breakdown (including the activity cloud). And there's the 'activity grid' where you can search with more fine-grained criteria, and explore the results in a hierarchical grid.</p><p>Those three places are more integrated together than previously. You can travel through them, zooming in, ping-ponging back and forth. Learning what's really going on in your life.</p><img src='http://secretGeek.net/image/wordcloud_to_activity.png' alt='click on a word to see extra detail...' style='background-color:#FFF; border:2pt solid #000;margin-left:7px;padding:10px;float:right;clear:right'/><p>Now you can view the word cloud report to get quick overview. Zoom into the word you're interested in. Click the 'View activity' link to open the activity grid, and see a listing, line by line of what you've done in relation to that word. Then double-click on any one of those lines to see the screenshots that were taken at the time (in the day browser).</p> <p>(And if needed, right-click on that image, and <a href='http://secretgeek.net/timesnapper_23_ocr.asp'>extract the text</a> from it, using OCR.)</p><p>You probably have to to try it to get it. For example, when Atli and I were reviewing these features, we shared a few screenshots during our discussions. And he immediately asked, "Oh, are you buying a Mazda?" Bingo. Your life in cloud form.</p><p>But don't be scared by this kind of power. You can password protect your data. And you can make it record only the apps you want. It's <em>your</em> life, just a better informed one.</p><p style='clear:right'>&nbsp;</p>]]>
    </description>
    <pubDate>Thu, 24 Apr 2008 10:22:45 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/ts_30.asp</guid>
  </item>
<item>
  <title>Be warned: the laptop compubody sock is out there</title>
    <link>http://www.secretGeek.net/compubodysock.asp</link>
    <description>
      <![CDATA[<img src='http://secretGeek.net/image/compusmock.PNG' alt='wait until the wearer is clearly absorbed in their laptop activities before you approach.' style='border:1pt solid #000;margin-left:7px;padding:10px'/><p>If you see someone wearing this garment in a public place, my advice to you is simple:</p><p>Act swiftly. Move in silently and with great stealth. Bludgeon the wearer to death with a baseball bat. Step away, slowly.</p><p>You will be doing the human gene pool a tremendous favour.</p><br /><br /><br /><br /><p>(...alright, i ought to admit i'm not really a genocidal maniac, and the people at <a href='http://www.instructables.com/id/Laptop-Compubody-Sock/'>instructables</a> are probably creative geniuses, DaVincis of the knitting world etc, who deserve some praise to accompany that ridicule.)</p>]]>
    </description>
    <pubDate>Tue, 22 Apr 2008 10:17:09 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/compubodysock.asp</guid>
  </item>
<item>
  <title>Everything that's bad for you is suddenly good for you!</title>
    <link>http://www.secretGeek.net/bad_equals_good.asp</link>
    <description>
      <![CDATA[<p>In IT it seems that everything your lecturers once told you is bad and useless, turns out to be good and fruitful.</p><p>It's a reversal of the Woody Allen quote:</p><blockquote><p>"Everything that our parents told us was good for us, turned out to be bad.</p><p>The sun. Milk. Red meat. College. Catholic girls."</p></blockquote><p>(I'm deliberately <a href='http://secretgeek.net/woody.asp'>paraphrasing</a>)</p><p>For example...</p><p>We were once taught that dynamic sql is the path to poor performance and woeful security. And yet we now see that this is <a href='http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx'>nonsense</a> -- dynamic ORMs bring about increased performance and richer security models. Damn it!</p><p>We were once taught that permissive typing is bad and leads to buggy software. And yet we now see, with the rise of Ruby, Python and modern dynamic programming, the opposite is true. Permissive is expressive. Dynamic is productive.</p><p>We were once taught that significant whitespace is a relic of punch cards and poor computers, which all modern languages must eschew. Yet we now see that <a href='http://www.python.org/'>modern</a> and <a href='http://blogs.msdn.com/dsyme/'>future</a> languages will support significant white space with a vengeance!</p><p>But most shocking of all!!</p><p>We were once taught that flat, wide, single-tabled denormalised data structures are the road to death, pain and -- worst of all -- slow, inconsistent data. Yet we now (maybe) see with <a href='http://en.wikipedia.org/wiki/BigTable'>google BigTable</a> that in fact this is the future: this is faster and actually, sorry Jenkins, your rdbms is dead.</p><p>I'd love to be a stickler and a stalwart... but screw it. History is bunk. Bring out the learn!</p><p>And thus I'm left wondering... What else appears taboo and verboten? What else did our 'teachers' claim was 'bad' ?</p><p>Well - one thing was certainly <a href='http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html'>frowned upon: the use of GOTO!</a></p><p>So....</p><p>I'M BRINGING HER BACK! WELCOME THE GOTO!</P><P>You may consider me a touch behind the times. But wiser heads will see me as preceding the curve.</p><p>What is a <code>try...catch</code> but a glorified <code>JMP</code>? (aka <code>goto</code>) Where would a <code>switch</code> be without an implicit goto, hey <a href='http://www.byteclub.net/blog/zooba/'>zooba</a>?</p></p><p>What else do you see that's been besmirched too long? What other versatilities in IT have been marginalised far too long?</p><p> Bring out your dead.</p>]]>
    </description>
    <pubDate>Fri, 18 Apr 2008 12:04:14 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/bad_equals_good.asp</guid>
  </item>
<item>
  <title>Everything I know about Code Reviews I learnt from Star Wars (and JCooney)</title>
    <link>http://www.secretGeek.net/star_check.asp</link>
    <description>
      <![CDATA[<style>.joseph {color: #a31515;padding-left:100px;display:block;margin-bottom:14px;}.leon {color: #1515a3;display:block;margin-bottom:14px;padding-left:8px;}</style><p>Imagine you're on a project where <a href='http://jcooney.net'>Joseph Cooney</a> performs code reviews on everything you try to check in...just theoretically. And, theoretically, people like <a href='http://blogs.msdn.com/dsyme/'>Don Syme</a> and <a href='http://callvirt.net/blog/'>Joel Pobar</a> are on hand to provide useful feedback at times...</p><h2>Many many iterations ago... in a project far, far away...</h2> <br /> <span class='Joseph'>Joseph (in red, indented)</span><span class='leon'>Leon (in blue)</span><hr /><span class='Joseph'>Aren't you a little short for a developer?</span><span class='leon'>Don't underestimate the Force.</span><span class='Joseph'>You may dispense with the pleasantries, Bambrick. I'm here to put you back on schedule.</span><span class='leon'>So, can I can check it in? You like my code?</span><span class='Joseph'>You'll never find a more wretched hive of scum and villainy.</span><span class='leon'>We must be cautious.</span><span class='Joseph'>What's that line of code there?</span><span class='leon'>It's an old code, but it checks out. I was about to check it in.</span><span class='Joseph'>Does it compile?</span><span class='leon'>I find your lack of faith disturbing.<br /><br />This part uses composition. The weapon of a true coder. Not as clumsy or random as code generation or polymorphism; an elegant design pattern for a more civilized age.</span><span class='Joseph'>Don't be too proud of this technological terror you've constructed. The power to destroy performance is insignificant compared to the power of an enterprise rules engine.</span><span class='leon'>We shall re-double our efforts...</span><span class='Joseph'>I hope so bambrick for your sake. The build master is not as forgiving as I am.</span><span class='leon'>Look, Your Worshipfulness, let's get one thing straight. I take orders from just one person: me</span><span class='Joseph'>It's a wonder you're still alive.</span><span class='leon'>It's a valid implementation. Screaming about it won't help you.</span><span class='Joseph'>Let 'em defect it. It is not wise to upset a tester.</span><span class='leon'>But Joe, nobody worries about upsetting a developer.</span><span class='Joseph'>That's 'cause devs don't pull people's arms out of their sockets when they lose. Testers are known to do that.</span><span class='leon'>Wonderful girl. Either I'm going to kill her or I'm beginning to like her.</span><span class='leon'>So I'll check it in?</span><span class='Joseph'>I have a very bad feeling about this...[pauses]<br /><br />It's a TRAP... err CRAP</span><span class='leon'>Damn fool, I knew you were going to say that.</span><span class='Joseph'>Your insight serves you well. Bury your feelings deep down, LB. They do you credit, but they could be made to serve the rules engine.<br /><br />You can write this shit LB, but that doesn't mean we can checkit in.</span><h2>Last resort:  use Jedi mind tricks on Joseph:</h2><span class='leon'>These are not the bugs you're looking for (wave hands)</span><span class='Joseph'>These are not the bugs we're looking for. <br />You may go about your business. Check it in.</span>]]>
    </description>
    <pubDate>Sat, 12 Apr 2008 10:06:05 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/star_check.asp</guid>
  </item>
<item>
  <title>Syntax highlighting of strings</title>
    <link>http://www.secretGeek.net/synta_string.asp</link>
    <description>
      <![CDATA[<p>Maybe this is a fiddly little point, but I think it's the sort of detail that's worth paying attention to.</p><p>The theory is:</p><h2>Syntax highlighting of <strong>strings</strong> could be improved to make reading easier</h2><p>In the following code example, look at the way the <span style="color: #a31515;">string</span> is 'highlighted':</p><blockquote><p><code><div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">return</span> <span style="color: blue;">string</span>.Format(<span style="color: #a31515;">"&lt;a href=\"{0}\"&gt;{0}&lt;/a&gt;"</span>, link);</p></div></code></p></blockquote><p>The <span style="color: #a31515;">red</span> highlighting covers not just the literal string itself, but also the quote characters and the escape characters: the 'meta' guff that decorates the string. </p><p>So in the previous example, there's no clue given to the naked eye that some of the quote marks are "literal" quote marks, and others are delimiters to mark the beginning or end of the string.</p><p>Instead, syntax highlighting gives up, right when it could be most helpful. And it's left as a parsing exercise for the programmer to determine what is and isn't <em>really</em> a string.</p><p>Here's a different way the syntax highlighting could be implemented:</p>

<blockquote><p><code><div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">return</span> <span style="color: blue;">string</span>.Format(<span style="color: #ffb1b1">"</span><span style="color: #a31515;">&lt;a href=<span style="color:#ffb1b1">\</span>"{0}<span style="color:#ffb1b1">\</span>"&gt;{0}&lt;/a&gt;</span><span style="color:#ffb1b1">"</span>, link);</p></div></code></p></blockquote>


<p>Now colour (actually -- saturation) is used to differentiate between the literal parts of the string, and the 'meta' parts of the string (the escape characters and the quote delimiters).</p><p>It looks strange at first glance, because it's an alien concept -- but i think that if you were used to this type of highlighting, it would allow you to "see" what escaping is going on in a string, far more readily.</p><p>More importantly -- it allows you to selectively 'see past' the escaping.</p> <p>If you look at the second example, you can 'train' your eyes to focus on just the literal string itself -- until you see basically:</p><blockquote><p><code><div style="font-family: Courier New; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: white;">return</span> <span style="color:  white;">string.Format("</span><span style="color: #a31515;">&lt;a href=<span style="color:white;">\</span>"{0}<span style="color:white">\</span>"&gt;{0}&lt;/a&gt;</span></p></div></code></p></blockquote><p>And thus you can reason about the text you've written, or proof-read it, in greater isolation from things that only the parser needs to worry about (the mechanics of escape characters etc.)</p>]]>
    </description>
    <pubDate>Sat, 12 Apr 2008 08:25:04 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/synta_string.asp</guid>
  </item>
<item>
  <title>Google AppEngine: evil virus or viral evil?</title>
    <link>http://www.secretGeek.net/gapp.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/gapp.asp' style='padding:0'><img src='http://secretGeek.net/image/appengine_lowres.jpg' alt='google app engine is interesting' style='border:1pt solid #FFF;float:right;margin:4pt;margin-left:7pt'/></a><p>After reading <a href='http://www.b-list.org/weblog/2008/apr/08/batteries-sold-separately/'>all</a> <a href='http://staticallytyped.com/2008/04/08/googles-plans-for-app-engine/'>the</a> <a href='http://arstechnica.com/news.ars/post/20080408-analysis-google-app-engine-alluring-will-be-hard-to-escape.html'>negative</a> <a href='http://technosailor.com/2008/04/07/google-file-system-much-to-do-about-nothing/'>publicity</a> that <a href='http://code.google.com/appengine'>google's new application engine</a> is generating -- I couldn't believe my eyes!</p><p>Could it really be <em>that</em> bad?</p><p>Or are these people just crazy paranoid schizofreakazoids with nothing better to do than write mealy-mouthed whinge posts about a whole pile of baloney?</p><p>So I signed up, downloaded the sdk, and got my hands stuck right in there. Then I waded through all the contractual jibber jabber and came to my own conclusion:</p><h2>Yep, evil.</h2> <p>Read the fine print guys! Sheesh!</p><p>Every page of your application must have the "Google Rocks" logo in all four corners. The only language you can use is Gython -- Google Python, accessing your data via Gorm -- the Google ORM. The cost is fifty bucks per click -- that's google dollars -- bought at the google exchange rate. Plus, your code gets locked in Google's basement (aka GFS) for ever and ever.</p><p>Serious though, this cloud computing stuff (<a href='http://blog.tomevslin.com/2008/03/amazon-s3-backs.html'>see</a> also <a href='http://www.amazon.com/gp/browse.html?node=201590011'>EC2</a> from Amazon, IBM <a href='http://www-03.ibm.com/press/us/en/pressrelease/22613.wss'>blue cloud</a>) looks pretty amazing.<p>Cough, cough, (Just making sure <a href='http://en.wikipedia.org/wiki/Ray_Ozzie'>Ray Ozzie</a> is awake). I'm going to say that a little louder.</p><h1>this cloud computing stuff looks pretty amazing!</h1><p><em>You freakin' got that yet Microsoft?</em></p> <p>And this is just the very early days.</p><p>We will hear a hell of a lot of hype about this concept yet.</p><p>Then we will go through a bitter trough of disillusionment.</p><p>And then there will arise that grand surging tide of productivity as the vision is finally realised, five years from now, by which time we'll all be considering it old skool, as we float around in our hovering moped-atron-segways, reading e-newspaper articles about how Wikipedia bought Microsoft in exchange for a vintage single core computer from the e-smithsonian.</p><p>And then apple will put out a hand held elastic compute cloud, and six-year-old african kids will be wearing them as a fashion accessory.</p><p>Ah, back to reality:</p><p><strong>Google will soon unveil Ruby as language number 2 on the platform. This right now... this is just the <a href='http://en.wikipedia.org/wiki/Fluffer' title='word of the day!'>fluffer</a> ;-)</strong></p>]]>
    </description>
    <pubDate>Wed, 09 Apr 2008 09:01:57 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/gapp.asp</guid>
  </item>
<item>
  <title>Perfect for lounging</title>
    <link>http://www.secretGeek.net/lounging.asp</link>
    <description>
      <![CDATA[<blockquote><p>--Why do you <a href='http://secretgeek.net/workflow_jerkflow.asp'>hate workflow</a> so much?</p></blockquote><p>My only problem with workflow software is that you have to sell your soul to the devil first.</p><blockquote><p>--And that's a conflict of interest, since you <em>already</em> sold your soul, right?</p></blockquote><p>Technically, yes, I sold my soul already. But it turned up on ebay and I bought it back. </p><blockquote><p>--"<code>One soul. Hardly used. Lacks ethics and morality. Perfect for lounging. Supports upgrade to 'weasel'.</code>"</p></blockquote><p>You read the ad?</p><blockquote><p>--Read it?! I almost out-<em>bid</em> you.</p></blockquote>]]>
    </description>
    <pubDate>Fri, 04 Apr 2008 11:06:19 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/lounging.asp</guid>
  </item>
<item>
  <title>Meeting Frustration, Chaos and Despair Head On. And loving it.</title>
    <link>http://www.secretGeek.net/marcus_a.asp</link>
    <description>
      <![CDATA[<p>Marcus Auerelius was a chump. Cleverer than I, and emperor of the modern world. But a halfwit, at best.</p><p>Old Marcus A. spake thus:</p> <blockquote><p>"Begin each day by saying to yourself, 'Today I shall meet people who are interfering, ungrateful, arrogant, deceitful, envious, and selfish.' They are made this way because of their ignorance of what is good and evil... but I, who have seen the nature of good and beauty, and of evil and its ugliness, know that the inner nature of the man who does evil is the same as mine, therefore I can't be harmed by any of these men, for no one can impose on me what is degrading." </p></blockquote> <p>Yet my philosophy is richer, though -- at a glance -- far poorer.</p> <p>For I add to this outlook the respective wisdoms of <a href="http://en.wikipedia.org/wiki/Newton's_laws_of_motion">Newton</a> and <a href="http://en.wikipedia.org/wiki/Hanlon's_razor">Hanlon</a>:<blockquote><p>An object will stay at rest or continue at a constant velocity unless acted upon by an external unbalanced force</p></blockquote><p>...and...</p> <blockquote><p>Never attribute to malice that which can be adequately explained by stupidity</p></blockquote><p>Hence, with my modern stoic attitude, I proudly announce:</p> <blockquote><p>I begin each day by reminding myself,</p><p>"Today I shall meet with frustration, anxiety, anger, antagonism, annoyance, mistrust, frivolity, ignorance, hubris, jealousy, laziness and despair.</p><p> But things must be such, as we are born in ignorance, and continue as such -- without tremendous interference. Momentum, entropy and the scourge of complexity lead all of us toward chaos, panic and compromise, despite the most industrious of minds and the noblest of hearts.</p><p>If, on tiny occasions, we succeed at bringing joy in place of despair, knowledge in place of ignorance or order over chaos, no matter how insignificant is our victory, we shall smile quietly and confidently, knowing that having beaten nature, we will be punished with ample severity."</p></blockquote>]]>
    </description>
    <pubDate>Fri, 28 Mar 2008 11:57:31 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/marcus_a.asp</guid>
  </item>
<item>
  <title>Workflow software: I'm calling the bluff.</title>
    <link>http://www.secretGeek.net/workflow_jerkflow.asp</link>
    <description>
      <![CDATA[<p>I could be completely wrong about this -- but I'm just going to make some bold and disparaging remarks about the whole existence of workflow software and see what happens.</p><p>Here we go.</p><p>A state machine is about the most basic electronic circuit you can make. You can throw one together with a couple of transistors.</p><p>And in software, writing a state machine is so simple that it's hard <em>not</em> to write one.</p><p>But simple ideas leave room for big inflation. Sales people know that the best things to sell are inflated big ideas.</p><p>So the field of Enterprise-Level Workflow Software was born.</p><p>And businesses buy them, happy to take a short-term hit in productivity, since it will lead to long-term benefits. But when you buy an expensive wrapper around a five dollar piece of softeware, the long term effects are confusion, complexity and further cost.</p><p>Business are universally worse off because of the advent of 'work flow' products.</p><p>I hear the response "Oh but workflow has a lot of value-add over rolling your own solution. You get persistence of long running processes, for one thing."</p><p>Persistence? Persistence? Don't we have these thing called databases? Isn't that our usual, and fairly well understood persistence mechanism?</p><p>Also there's value-added services such as logging and reporting.</p><p>Logging? reporting? I'm still thinking 'database.'</p><p>Ah, but here's the super-answer:</p><img src='http://secretGeek.net/image/NXTCode_small.jpg' alt='Lego Mindstorms NXT programming' style='border:1pt solid #000;margin-left:7px;padding:10px'/><p>Workflow products include graphical tools for letting business analysts design their business processes <a href='http://www.secretgeek.net/lego_software.asp'>without involving coders.</a></p><p>Without... without... You're kidding right? You ought to smell what you're shovelling.</p><p><h2>Show me a working 'business analyst' -- one, who is not now nor has ever been a coder -- who <em>successfully</em> designs 'business workflows' using an off the shelf tool, and who didn't require *any* expensive training, and who achieves their task in less time and with more precision than a coder. And who doesn't need to call technical support for help at the time.</h2></p><p>Show me just one.</p><p>World wide.</p><p>I can wait. I give you one month. Nah, screw it. I give you eternity.</p><hr /><p>Whenever I get too saddened by these things, i think of my big idea for a whole new class of enterprise component:</p><h1>The 'IF' server.</h1><p>Here's the general pitch.</p><p>(switch to the kind of voice-talent they use when advertising john grisham films)</p><p>Business today is complex. You need to make decisions. But every decision will take you down a certain path. Who can you count on to get you there?</p><p>Business needs alignment.</p><p>Business processes need to work together to guarantee that decisions are made for the greater good. Or evil, if that's the business you're in. We don't discriminate against evil.</p><p>Consider a difficult decision. It may be hard to make, but with an IF server, we can serve up either a true or a false, whichever you prefer.</p><p>You can have the most complex business scenarios in the world, and if you tell us to return true, we will. Every time. </p><p>Your IT department is a complex and challenging part of your business. They control a complex array of applications, of all sizes and across many platforms. Custom software is never dependable. But an IF server, can be relied upon.</p><p>Imagine... A single standard for IF processing, accessible from across the entire organisation.</p><p>Using proven open standards, like XML -- the Lingua Franca that powers today's fortune 500 businesses  -- every application can link to the same powerhouse of decision making excellence: Your IF server. </p><p>Now you know: no matter what software your team is writing, they can connect to the IF server and be given one standard result. Monday? Then it's true.</p><p>Tuesday? Then it's false.</p><p><em>You</em> run the business. You decide.</p><p>No more doubt. No more incompatabilities. No more missed deadlines and lost opportunities.</p><p>You can crush the competition. You can destroy them all.</p><p>IF only you purchase now.</p><p>The IF Platform Server One Million and One. A revolution in business processing solutions.</p>]]>
    </description>
    <pubDate>Thu, 27 Mar 2008 10:45:27 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/workflow_jerkflow.asp</guid>
  </item>
<item>
  <title>3 Types of Argument</title>
    <link>http://www.secretGeek.net/3_arg_types.asp</link>
    <description>
      <![CDATA[<a href='http://secretGeek.net/3_arg_types.asp' style='padding:0'><img src='http://secretGeek.net/image/model_su_behaviour_th_.PNG' alt='competing models of SU behaviour following M1' style='border:1pt solid #000;float:right;margin:4pt;margin-left:7pt'/></a><h2>Engineering Argument:</h2><p>There are two ways to implement something. Neither option is perfect -- both have their own compromises, which are known and measurable. Argument centres on which compromises are most acceptable.</p><p>Example: should the bike-shed be made from wood or brick?</p><h2>Artistic Argument:</h2><p>There are two ways to implement something. Both are functionally correct, but have unquantifiable differences. Argument centres on intuition and opinion.</p> <p>Example: should we paint the bike-shed topaz or cyan?</p><h2>Religious Argument:</h2><p>There are two conflicting points of view. Both are utterly wrong. Argument has no centroid and no limiting factors.</p><p>Example: should the bike-shed be built to honour the green walrus or the almighty unicorn?</p>]]>
    </description>
    <pubDate>Fri, 21 Mar 2008 10:35:09 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/3_arg_types.asp</guid>
  </item>
<item>
  <title>F# Eye for the C# guy</title>
    <link>http://www.secretGeek.net/fsharp_eye.asp</link>
    <description>
      <![CDATA[<p>This Tuesday, 18th of March, I'm giving an introductory talk about F# at the <a href='http://www.qmsdnug.org/'>Queensland MSDN user group</a>.<p>Head to Level 9 of Waterfront Place (1 Eagle Street, Brisbane City, Queensland) arrive between 5:30 and 6 pm.</p><p>Come on now! You'll love it! Forget spending time with the family -- learn a new language!</p><blockquote><h2>F# Eye for the C# guy</h2><p><em>An introduction to Microsoft's newest official language, F#, geared toward C# and VB.net coders.</p> <p>See how functional programming, object-oriented programming and imperative programming can work together to provide untold expressiveness.</p><p>If you only learn one new language this year, F# ought to be the one.</em></p></blockquote><p>I've been putting the polish on this talk all weekend, and I'm very much looking forward to delivering it.</p><p>Please come along if you can. <a href='http://mike.brisgeek.com/qld-developer-events/'>RSVP to Mike</a> if you're interested.</p>]]>
    </description>
    <pubDate>Sat, 15 Mar 2008 12:41:19 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/fsharp_eye.asp</guid>
  </item>
<item>
  <title>Anonymous Methods: Now that's a dumb name!</title>
    <link>http://www.secretGeek.net/anon_meth_misnomer.asp</link>
    <description>
      <![CDATA[<p>This has always bothered me and I've never quite put my finger on it <em>until now.</em></p><p>I love <a href='http://msdn2.microsoft.com/en-us/magazine/cc163970.aspx'>anonymous methods</a> (in .net 2.0+). I've over used them, sure. I've under used them, too. And I've gotten all <a href='http://www.secretgeek.net/joel_anonfx.asp'>too excited</a> about them.</p><p>But the <em>name</em> is so very wrong. It puts the emphasis in all the wrong places. <em>Anonymous, hey? Well what've they got to hide?</em></p><p>Consider this chunk of code:</p><blockquote><code>Dim Result as Integer = Math.Sqrt(16)</code></blockquote><p>What is <code>'16'</code> in the above snippet?</p><p>Well, it's a value. And it gets passed to a parameter. Simple. But a different answer we could give -- if we wanted to bamboozle people right at the start -- would be: </p><blockquote><p>"Well in this case '16' is an anonymous variable."</p></blockquote><p>A what? A huh? A... well.. you're just trying to sound clever aren't you?</p><p>Calling it an <em>'anonymous variable'</em> is only useful if you are the damn fool who's stuck with the job of writing a compiler for the underlying language. It doesn't help the regular johnny coders like you and me who code in the damn language every day. (unless the build is broken that day of course.) (or there are too many meetings that day.) (or the keyboards are wrong.)</p><p>Similarly -- an <em>'anonymous method'</em> is really just a 'code block', or an 'immediate method', or an 'inline method.'</p><p>The point isn't that it is anonymous, the point is that it's a method.</p><p>Maybe the term could be "throwaway method" -- as in, it's a method that's not designed for re-use. You just use it in this one place and then throw it away. </p><p>Ah, rant complete.</p>  ]]>
    </description>
    <pubDate>Sat, 15 Mar 2008 10:42:20 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/anon_meth_misnomer.asp</guid>
  </item>
<item>
  <title>Who Would You Back? Really?</title>
    <link>http://www.secretGeek.net/zero_v_one.asp</link>
    <description>
      <![CDATA[<p>So I was sitting at work this week, immersed in some complex n-tier, m-dimensional, z-class np-hard problem, when <a href='http://jcooney.net'>cooney</a> interjects with a gob-smackingly complexicated puzzler, that spins my mind in a vortex of impossible tangles. Get this:</p><blockquote><p>"Who would you back in a fight? Indiana Jones or Han Solo?"</p></blockquote><p>A riddle wrapped in a puzzle, shipped home in an enigma with pre-paid mystery and a side heaping of conundrums.</p><p>After narrowing it down (Sword or Pistols? Stock whip is allowed? Blaster is kosher? Bare knuckle or gloves?) I had the details downpat (bare knuckle, earth, queensbury rules) and took the question home to Mrs Secret Geek to ponder over dinner.</p><blockquote><p>"Both are quick on the draw,"</p></blockquote><p>said mrs secret geek, mostly immersed in her <a href='http://secretgeek.net/smh_08.asp'>afore-mentioned nintendo ds</a></p><blockquote><p>"but while Han's a short-sighted scoundrel, Indy has the superior intellect, and less reliance on the sidekick. Clearly, Indy <a href='http://www.urbandictionary.com/define.php?term=ftw'>FTW</a>."</p></blockquote><p>I went back to work the next day, happy with this answer, only to be hit with a barrage of further dilemmas:</p><blockquote><p>"Who would you back? Rocky or Rambo?"</p></blockquote><p>And, over lunch, many more in the <a href='http://secretgeek.net/wscg.htm'>pattern</a></p><blockquote><p>"Who would you back? $0 versus $1?"</p></blockquote><p>With $0, $1 represented by various combinations of the following:</p><p><ul><li>Fidel Castro versus John F Kennedy?</li><li>Jesus versus Buddha?</li><li>Abraham Lincoln v Richard Nixon?</li><li>Hitler v Chairman Mao?</li><li>Gandhi v Mother Theresa?</li><li>Bradman v Pharlap?</li> <li>Gandalf vs Spock? (note this is Gandalf the grey, not ol' whitey)</li><li>Dumbledore v Mr Miyagi?</li><li>Bruce Lee v Ryu (from <a href='http://en.wikipedia.org/wiki/Ryu_(Street_Fighter)'>Street Fighter</a>)?</li><li>Michael Knight v Astroboy?</li><li>Newton v Einstein?</li><li>Webster v Arnold?</li><li>Tron v Neo?</li><li>Kevin Mitnick v Matthew Broderick in War Games?</li><li>Terminator v R2D2?</li><li>Sarah Connor v John McClane?</li><li>Socrates v Nietzsche?</li><li>Ewoks v Oompa Loompas?</li><li>Babbage v Pascal?</li><li>Voldemort v Vader?</li><li>Frodo v Skywalker? (luke, that is) (pre jedi training) (i say skywalker's got him on reach)</li><li>Gollum v Yoda v Doby -- all-in freak brawl!</li></ul></p><p>So, what do <em>you</em> say, unwashed internet masses. Who would you back? And why?</p>]]>
    </description>
    <pubDate>Fri, 14 Mar 2008 10:51:47 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/zero_v_one.asp</guid>
  </item>
<item>
  <title>More about the wiki adventure game...</title>
    <link>http://www.secretGeek.net/more_wikitext.asp</link>
    <description>
      <![CDATA[<p>I've started to implement the <a href='http://www.secretgeek.net/wiki_game_idea.asp'>wiki adventure game idea</a> from last week. I plan to contribute it to CodePlex, and maybe make a site. It's being written in Javascript mostly, but with C# on the server side. Some <a href='http://www.secretgeek.net/json_3mins.asp'>JSON</a>, some regex. I considered and ruled out using Ruby, Volta, Silverlight, Asp.net MVC and a bunch of other technologies I don't understand, for reasons that <a href='http://www.pseale.com/blog/LearningLahar.aspx'>Pseale has elucidated nicely</a>.</p><p>I've got a benchmark in mind for what constitutes the 1.0 version of the game. Basically, once you're able to create a simple game akin to <a href='http://www.freedownloadscenter.com/Games/Simulation_Games/Pug_Wars.html'>Pug Wars</a> (see also, <a href='http://www.google.com/search?hl=en&hs=kw7&q=drug+wars+adventure+game&btnG=Search'>Drug Wars</a>, <a href='http://www.google.com/search?hl=en&hs=kw7&q=dope+wars+adventure+game&btnG=Search'>Dope Wars</a>)... that would be 1.0.</p><p>That game can be composed as a two-page game, with trading, banking, some randomness and an ever decreasing number of days remaining.</p><p>I've got ideas for what would be in a 2.0 and 3.0 version.</p><p>Here's the general concepts leading up to version 2.0...</p><p>A player has four lists (keyvalue collections, perhaps)</p><ul><li>SimpleAttributes, such as name and avatar.</li><li>InventoryList, your useful items</li> <li>SkillList, graded abilities that get you places, unlock certain possibilities in the game.</li><li>VitalsList, your score, your health, your hunger, your wisdom, charm and so on.</li></ul> <p>What actual items are in these lists depend on the game authors.</p><p>Inventory, would be composed of items that are intrinsically tradeable. Each item has an item-type, e.g. "Gold" and a qty, e.g. "57".</p><p>Say you visit a witch who is willing to sell you 1 donkey in exchange for 57 gold pieces. Very good. Trading is a built in feature of the platform. Normal fair trading applies: you can't spend more than you have. You can't buy the donkey and keep the gold. You can't buy more donkey's than the witch is selling.</p><p>Now, here's the clever bit: all tradeable items are, in theory, capable of becoming weapons. You may have noticed this from watching Jackie Chan films. <em>That's not just a park bench! It's a weapon!</em></p><p>Given the appropriate skill, any item can be used as a weapon. If you don't have the crossbow skill, then that crossbow you just found is nothing more than a tradeable commodity to you. But once you bump into that wise old cross bow trainer, and acquire the cross bow skill, you will suddenly be able to employ it in any future fight. (Some items can act as weapons even if you have no skill -- the seal club for example)</p><p>Similarly, all tradeable items are capable of acting as 'food'. And what is 'food' in the general sense? It's a thing that can be consumed and thus its quantity diminished, but the consumption of which will alter one of your vital signs in some way. So this category really covers Foods, drink, poison, potions, medicines and the like. A keg of spirits may increase your drunkedness from 0 to 100. A bottle of poison, will decrease your health from 42 to 0. You can't dimish a vital sign below zero, but you can certainly try.</p> <p>Can a tradeable item be both weaponry and food? Certainly! A well timed pretzel to the eye can disable many an attacker.</p> <p>What weapons can be used on what adversaries?</p><p>That depends how a creature is defined. Some creatures can be attacked equally with any and all weapons.</p><p>But many creatures are impervious to all but a few weapons. Superman for example: Impervious to all, vulnerable to: "kryptonite".</p>  <p>Okay, that's the basic mechanics that will go into the game. I think it will game authors a lot of flexibility in the text adventures they can construct.</p><p>Writing the javascript is an alarmingly fun process. I'm beginning to agree with <a href='http://graysmatter.codivation.com/'>Justice Gray's</a> famous retort he uses whenever someone complains that javascript is a terrible language: <blockquote><p><a href='http://graysmatter.codivation.com/JavascriptRapedMyDogAndOtherFalsehoods.aspx'>Javascript doesn't suck, you do</a></p></blockquote><p>See ya later. Dodgy pre-alpha Prototype <a href='http://www.secretgeek.net/wikigame2.html' title='firefox and ie only, no opera just yet, requires cookies and (of course) javascript'>here</a></p>]]>
    </description>
    <pubDate>Fri, 07 Mar 2008 00:02:39 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/more_wikitext.asp</guid>
  </item>
<item>
  <title>(Some) Computer Technicians Are Creepy</title>
    <link>http://www.secretGeek.net/creeptech.asp</link>
    <description>
      <![CDATA[<img src='http://secretGeek.net/image/ts_caughtout_1.PNG' alt='he right clicks task bar and selects properties' style='border:1pt solid #000;margin-left:7px;padding:10px;float:right'/><p>Well, this leaves me feeling somewhat sick in the stomach.</p><p>I <em>was</em> planning to put out some other blog entries just now, but i've felt dizzy and nauseous for the last few hours. Here's the story:</p><p>Last week I took my computer in to <em>the shop</em> to get it fixed. (I refuse to deal with hardware. I don't even change staples in a stapler. I have the midas touch and can even blow up passive circuits when they're disconnected plus i'm wearing a static wrist strap.)</p><p>I got the computer back a few days later and everything was fine.</p><img src='http://secretGeek.net/image/ts_caughtout_2.PNG' alt='he goes to advanced menu and clicks on clear list' style='border:1pt solid #000;margin-left:7px;padding:10px;float:right;clear:both'/><p>On a <em>crazy paranoid whim</em>, I decided to look back through my <a href='http://TimeSnapper.com'>TimeSnapper history</a> to see if the technicians had used my computer in any <em>unexpected</em> ways.</p><p>I've been meaning to check this all week. I even woke in the night once, thinking: I really ought to check what TimeSnapper says happened on my computer when it was in the shop.</p><p>Well I finally got around to checking, just now. And what I found has left me unwell. It's nothing too major, but here goes.</p><p>A technician started up the computer and spent a short while looking through the 'my pictures' folder. First they looked at some photos of my baby daughter. Then they perused through some other family photos. Finally, they cleared the 'recent documents' list, checked that it was clear, and shut down the computer. (Sequence shown at right.)</p><p>The bit where they deleted the recent documents list happened <em>extremely</em> quickly. Watching it play out i am certain that they've done this activity many times before on many other people's machines.</p><img src='http://secretGeek.net/image/ts_caughtout_3.PNG' alt='he check that recent documents are indeed clear' style='border:1pt solid #000;margin-left:7px;padding:10px;float:right;clear:both'/><p>I'm not too worried. They were pretty quick about it, only had the most cursory glance really. All sorts of other things were possible. My paranoid delusions included them installing a keylogger, searching for banking information. Lots of other possibilities. So it's not bad as such. I'll probably continue to use them for my computer needs (hey they're the best in town). But I'll probably create a guest account with minimum permissions, next time. And I still wonder what other things dirty technicians are getting away with on other machines entrusted to their care.</p><p>Okay that's off my chest now. And onto yours ;-)</p><p style='clear:both'>&nbsp;</p>]]>
    </description>
    <pubDate>Fri, 29 Feb 2008 11:43:48 GMT</pubDate>
    <dc:creator>Leon Bambrick</dc:creator>
    <guid>http://www.secretGeek.net/creeptech.asp</guid>
  </item>
</channel>
</rss>

