secretGeek .:dot Nuts about dot Net:.
home .: about .: sign up .: sitemap .: secretGeek RSS

Q: Where am I?

A: You're sitting at a computer, reading Leon Bambrick's personal thoughts on programming.

recently...

Sat, 16 Aug 2008 13:53:43 GMT

The Bluffer's Guide To Yegge: Business Requirements R Bullsh*t

the hp omnigo was not built by people who would use it. instead it was built by people who imagined the people who would, perhaps, use it

All Steve Yegge articles are awesome, but no one has time to read them. If you are at a cool party with cool people you must pretend to have read all of Yegge's stuff.

To that end, here is the bluffer's guide to his latest article:

"Business Requirements are Bullshit"

  1. If development of your product involves a 'requirement gathering' step then your product is doomed
  2. Only build stuff for yourself

Examples include Steven's experience building the failed HP OmniGo range of Pamtop organizer products.

Strong analogies are drawn with Warren Buffet's investment style.

To sound like you read the entire article when you did not in fact read the entire article, just say the following:

"Yeh! I'm so going to buy a mountain-bike seat extender for my grandmother too!!?"

<eom>

(If you are now compelled to read the entire article... well, don't come begging to me for a refund on your time.)

Read On...


Sat, 16 Aug 2008 13:24:30 GMT

Prototype Ready for Launch

It's taken a lot of hard work in my cave downstairs, but i think the prototype suit is finally ready.

my awesome ironman suit

Now back off or I'll flip out and kill everyone.

(p.s. at least i'm not this guy ... or that guy lower down the page in the blue outfit.)

Now For A Slightly More Disturbing Confession

I've been messing with shoes lately. And I like it.

I'm planning a shoes version of wscg, just to push it to the real ultimate limit.

Read On...


Tue, 12 Aug 2008 23:15:37 GMT

Idea: a poor man's eye-tracking heatmap for win forms

eye tracking heatmaps for a website show where the eye goes

idea: a "customer experience improvement program" -- for TimeSnapper, or for any .net win forms application.

what happens is this: if the customer has agreed to partake in the program, then each time a form loads, a method in a library is called.

That method will walk through all the controls in the current form, and add event watchers for certain events:

  • mouse hovers,
  • button clicks,
  • enter/exit of textboxen,
  • selection change of combos
while eye tracking devices are intrusive and ugly, mouse tracking and event logging are silent and unobtrusive

...All the "important" events that demonstrate when a user is using or paying attention to a control.

When these events occur, they are logged and tallied into a separate xml file.

At regular intervals, or on demand, the xml file can be sent back to a home server.

But also -- the user can inspect the file locally and even "view" the file.

google analytics shows you the relative popularity of each part of your page

When the file is loaded, then it creates a hovering overlay -- a kind of heatmap that tells you how often each control is clicked on, hovered over... how often backspace and delete are used in a given textbox (this is a poor man's error rate) ...

So the customer can load this info themselves -- and they can send it through to the product owners to help them get an overview across one or many users. How useful are certain features? Does anyone use this form? (you'd need to count the number of loads for each form too...)

Messageboxes are an important thing to track -- but i don't have any technical idea for tracking them.... but a true reflection wizard would be able to do this i'm sure....

Google analytics has a feature where they show you the relative popularity of each part of your page, as an overlay.

Anyway that's my idea -- a poor man's eye-tracking heatmap/google analytics for windows forms.

I know that the MS office team records similar information ('SQM', 'Service Quality Monitoring' and of course 'the Customer Experience Improvement Program' are keywords to use if you're looking for more info), and used this information to help design the ribbon control -- but there's a few key differences here:

  1. they don't let the user 'use' the recorded info
  2. they don't boast about cool visualisations and overlays
  3. they don't provide a general technique usable in other programs
  4. They actually did it, they didn't just talk about doing it ;-)

Read On...


Sun, 03 Aug 2008 12:14:34 GMT

'The Register' seems to have plagiarised Mary Jo Foley

similarities

I was researching Microsoft's 'Midori' and 'Singularity' projects -- and noticed that two recent articles i found in the mainstream tech press were almost identical.

The first one was by Mary Jo Foley at ZD net, titled "More tech details emerge on Microsoft's 'Midori'"

The other article was at 'the register' titled "Microsoft to kill Windows with 'web-centric' Midori?" attributed to Kelly Fiveash, and it seemed to be an almost complete copy.

It's not just that both articles reference a particular SD times article (Microsoft's plans for post-Windows OS revealed)-- but they use the exact same sequence of quotes and the same sequence of key words and ideas is presented in both articles.

Here's one little example (that I forgot to highlight in the images).

MJF says:

"Midori is, indeed, a distributed operating system (harkening back to Microsoft's old "Cairo" project)."

While the register says:

"Midori is a distributed operating system that appears, in part, to contain elements of Microsoft's failed 'Cairo' and WinFS projects."

The Cairo reference is not in the article they are both citing -- it's something MJF thought of. So when the register says that this distributed OS "appears" to contain such an elemnt, they would do well to instead say "it appears to Mary Jo Foley" -- since it was she who made the observation. And I think in this case it's a mistaken observation, which makes the intellectual theft more obvious.

Maybe this is just typical in tech journalism -- i've never looked at it this closely before. Probably most journalism is just about recycling each other's work and this is no more blatant than any other case. Still -- pretty sad work.

Read On...


Sat, 02 Aug 2008 05:47:33 GMT

A magic goal for software businesses

Joel Spolsky wrote the foreword to Eric Sink's book "The Business Of Software"

In that foreword, Joel talks about growing a software business from humble beginnings, much as occurs in a MicroISV.

Near the end, he says the following -- and he says it in a paragraph all of its own, because it is a magical paragraph:

"One day, you’ll turn off the feature that emails you every time someone buys your software. That's a huge milestone."

Wow. Can you imagine that? It totally blows my tiny little mind away. That's like having so much money that you light your cigars with 100 bills -- and then you don't even finish the cigar.

TimeSnapper has been selling like hotcakes lately, while it's still on special at $19.95, but even so I wouldn't say my inbox is actually close to collapsing from the added burden.

I've been putting some thought into what can take us to that magic next level -- and one particular thing keeps occuring to me -- just keep doing what we're doing. We seem to be growing steadily, and the software keeps improving. We keep listening to people and we keep ruthlessly removing bugs. It's working. We're learning to do more marketing, we're talking to people all the time; we're headed in the right direction.

It's a blast -- a lot of fun, running a software company. Very stimulating on the brain.

If I haven't encouraged you lately, let me encourage you now. It's worth doing. Go for it.

Read On...


Fri, 01 Aug 2008 12:14:28 GMT

A to Z of Software Methodologies

In response to a recent 'Definitive' List of Software Development Methodologies I thought I ought to post my own A-Z of software methodologies:

Can you tell me what I'm missing?)

ADD  Asshole driven development - team lead badly out of touch, yet never wrong
BDD Build driven Development - builds it does? check it in you should
CDD Competition driven development - GOOG and AAPL have one, we need one too
Checkin driven Development - boss measures success by checkin count, more==better
DDD Database driven Design - objects enslaved by related rows
EDD Education driven Development - Ruby newbie, but i'll learn
Entertainment driven Development - maybe we will fail, but by god we'll have a blast
FDD Fear driven development - if we don't add feature number 1 million and 3, we may lose a customer
Fantasy driven development - shipping on time, feature complete, zero bugs, free of charge
GDD Golf driven development - ceo heard a new buzzterm while on golf course
HDD Hatred driven Development - strong team plus clear goals forged around common enemy
Heisenberg driven development - cannot be defined without altering the meaning
IDD Industry driven development - never aim at the ass end of a duck
JDD Java driven development - "i don't know the problem, but i know the solution is java"-style thinking
KDD Knowledge driven development - we are wise and our product is awesome
Knife driven development - code it or i'll cut you
LDD Luncheon driven development - drunken lunch, big idea, now we're sleepy
MDD Munchie driven development - team too stoned to stop coding
NDD Nacho driven development - then they ate some nachos
ODD Object driven development - don't stop until your OO hierarchy is 57 levels deep
PDD Panic driven development - works for me
Paradigm driven development - synthesizes an ecosystem of evolving collaboration architectures
QDD Quantum driven development - only works on hardware that hasn't yet been invented
RDD Research driven development - this time for sure!
SDD Sales driven development - head salesguy already promised it, now we gotta build it
TDD ToDo driven development - aka stepwise refinement
UDD Underwear driven development - seat of the pants approach
VDD Voodoo driven development - if it doesn't compile, just stick another pin in it
WDD "Works on my machine" driven development - formerly, Rapid Application Development
Whiteboard driven development - see Domain Driven Design
XDD Xml driven development - "xml is like violence, if it's not working you need more of it"
YDD Y-Combinator driven development - (equals (name Paul Graham) (plus lisp god))
ZDD Zen driven development - you don't drive the development, the development drives you

Read On...


Mon, 28 Jul 2008 22:04:27 GMT

TimeSnapper in Music!

An awesome legend made a rap about TimeSnapper!

This is brilliant. Listen to it here.

Lyrics are as follows:

using my computer on a daily basis
it's amazing how most of my day is basically wasted
whether it be on news or youtube views
it seems the more time that i have the more that i lose
but there's a new tool that reviews what i do
and regarding what the features are i'll name you a few
to start off you run the program TimeSnapper
it snaps shots of your screen and plays it back after
analyzing how much time you idle in applications
you assign a score based on those relations
and the more time you pour into important tasks
the program reports a grade back based on that
there's two versions, one free and one pro
as for the difference, try it out if you wanna know

Trying to find the contact details so I can send him a license...

Read On...


Sun, 27 Jul 2008 10:56:28 GMT

Fixing problems can give you a glimpse of something terrible

I was over at a friend's place today, and there was much swearing about F***ing Vista, and "F***ing Microsoft" because he couldn't get Live Messenger to install succesfully on Vista (Home Premium).

Live Messenger is one of the main things he uses on the computer -- so its broken state meant that a large portion of his investment in a new computer was total waste. Very frustrating stuff.

My friend was pretty certain that I wouldn't be able to fix the problem, because:

  1. he'd spent a long time on it himself (he has a macgyver-like ability to solve problems)
  2. another friend, who is a talented and successful sysadmin had spent many hours trying to fix the problem.

In fact, he was so certain I would fail that he made this generous offer:

If I succeeded at getting Messenger to work on his computer, he would give me the opportunity to take a photo of his fresh new vasectomy wound, and share that photo with the readers of this blog. Seriously.

Too good to pass up, I cracked my knuckles and sat down at the computer.

Well, i tried to diagnose the problem, and i was stonewalled immediately.

The Live Installer (WLInstaller.exe) was failing, and giving no reason, no detail, no error code -- nothing you could use for "direct" troubleshooting.

Worse still, there was absolutely no evidence in the event log.

That was a pretty big fail, on the part of WLInstaller.exe. As usual, I'd like to take a baseball bat to the live team. But Vista didn't seem to be to blame at all.

It is far too easy to blame the Operating System whenever there's a problem on the machine. Does Vista deserve to be cut some slack? Maybe just innocent until proven guilty would be a fair place to start from.

I had momentary visions of using (sysinternals) Process Monitor and Fiddler to see what was really going on. But then I took my usual troubleshooting tactic: JFGI.

Turns a lot of people have trouble installing Messenger if they're behind a proxy.

The file 'WLInstaller.exe' is just a shim that is supposed to grab the real installer files from the internet. But if your machine is behind a certain type of proxy (I don't know what type in particular) then it won't be able to download the real installer files (the .msi).

This forum post, "Install WLinstaller.exe via proxy in Windows Live Messenger", gave a link to download the .msi file directly, and bypass using the broken WLInstaller.

It worked a treat.

You will be pleased to know that I declined the ensuing photo opportunity. I can only imagine that you missed out on seeing something like this.

Read On...


Sat, 26 Jul 2008 01:14:58 GMT

Web Tablet: Toward Less Complexity

mockup of the dead simple web tablet

TechCrunch is usually a deplorable timesink but I'm quite intrigued with their recent post about 'A Dead Simple Web Tablet'

The idea is instantly exciting -- but the funny thing is how readily those who love the idea are willing to see it destroyed.

The crux of this product is that it's dead simple. It has to be thin, light, cheap, low power, browser-only, always connected, with no OS, and no tweakability. All of these goals work together toward one goal: simplicity.

Yet, people who claim to love the idea are also clamoring for its destruction: they're asking for more and more features. They just don't get it.

The acclaimed masters at simplicity would haveto be 37signals who've written countless salvo's on the less is more principle.

The general template for the 2000 or so comments on the web tablet seem to follow this insane template:

simplicity isn't just a bullet point in a list

WOW AMAZINGS!

i am 8 yr old dreamy eyeed blogger who will help make this awesome by giving ideas.

you MUST attach a microwave dish and a muffler.

Also, make it cheaper. Then i will buy two.

Here's a tiny portion of the 'extra features' that commenters have asked for:

  • Need the ability to add software
  • have a dedicated right-click button for extra functionality
  • where is the button to bring up a touch screen keyboard?
  • Make 3 different tablets at different prices with increaseing features.
  • Bond everything with screws... for tinkerers...
  • You don’t need a power port - you can use wireless power transmition, simply charge it by putting it on a powered matt
  • add home automation\
  • Put in a standard ethernet port, not everyone will have wifi
  • folding in half would be a killer feature. Aren’t LCD screens flexible enough?
  • GPS
  • a one-touch "button" area in a corner to pop up a FAST, dialog... for setting up a complete personal shorthand
  • rubberise the edges and part of the back of the device
  • Sugar XO for the gui
  • Car charger
  • Boot from SD
  • What about Verizion/Cingular WiFi
  • docking station for the Apple iPhone 3G
  • have a setup in the beginning when you turn on the tablet, then allow them to choose what browser
  • You’d better have Gimp/Inkscape on there too
  • make it so we can mod it
  • Add a button on the right and left for moving the browser backwards and forwards so that it is more of a two-handed hand-held device
  • screen resolution is at least 800×600
  • one of those little plastic things on the bottom of a keyboard, so it can stand up on a flat surface
  • Sliding onboard keyboard
  • A keyboard button is a good idea
  • a clamshell with dual screens
  • ability to run the Firefox addon’s
  • an adsense supported version for free.
  • Sound Jack
  • Bluetooth
  • Wifi
  • A few SD slots (must be more than one).
  • A modest Flash drive (1 gig)
  • A USB port on the side (attach a keyboard/mouse).
  • An accessory, cover, perhaps a fold back that acts as a stand.
  • A4 size.
  • local media storage is a must -- SD cards would be the best way to go
  • Ability to play rudimentary games and emulators as well as use some of the more esoteric graphic designs of compiz, like drawing fire and watching it rain on my lap
  • Multitouch would be a gigantic boon to the design and the function
  • VPN would be very interesting
  • try to include paint.net, the GIMP, or photoshop
  • I’m all for having different configurations and the consumer deciding
  • We really need a good eBook reader
  • Something sleek and black would be really nice with an OLED screen
  • hot-swappable batteries,
  • similar software to the really rather good MS OneNote, and a decent OCR engine
  • have a small covered USB port so you can plug in a typical USB Drive
  • a waterproof version to check the news in the morning while having a shower.
  • a bluetooth module... allow you to connect multiple devices wirelessly.
  • Instead of a slide out keyboard, how bout an optional folding bluetooth keyboard.
  • would have to have a comic book reader application like Comix, as well as the web browser for Marvel Digital comics
  • Given the prominence of videomessaging it needs to have a video camera and decent microphone and speaker
  • have a brick that is a battery that plugs into the device.

Read On...


Wed, 23 Jul 2008 00:28:54 GMT

Do they store the code for TFS in TFS?

If they don't -- then it gives me absolutely no confidence in the product.

But if they do store the code for TFS in an instance of TFS... well, in that case I have absolutely no confidence in the product.

;-)

Read On...


Sat, 12 Jul 2008 13:03:53 GMT

Sudden TimeSnapper Discount!

Hey cats and crooners.

TimeSnapper is on sale for a very short while.

We're dropping the price to $19.95, waaaay down from the usual $39.95.

I quite like the normal price. People pay it. They're polite about it. And I get some money in my pocket.

But my most excellent business partner, Atli, seems to have this generous (*cough* misguided *cough*) soul where he believes that people with less money, (and also bargain hunters), deserve to get their hands on the software we've worked so very very hard to build and to continuously improve. He thinks we ought to give that away for practically next to nothing. Thanks Atli. Great Idea. Up there with Napoleon's invasion of Russia. (A dismal failure that one, by the way). So, anyway, he talked about offering a temporary discount, and I foolishly let him proceed.

I don't want to over-dramatize the point, but clearly these insane prices won't last. We'll either go broke or end up in business-divorce-court. So if you want to improve the way you record and organise your life, purchase TimeSnapper this very damn minute.

It's good software, that helps you organise your life, understand how you live it, improve how you work, recover from problems, and a whole lot more. We make it better every chance we get.

And there's an extra bonus for non-US customers. This took a lot of organising. The American dollar is currently in the toilet, so anything priced in US dollars is much cheaper than usual. (Deal with it, my yankee brothers.)

Read On...


Sat, 12 Jul 2008 09:38:55 GMT

How Can Microsoft Beat Google?

Microsoft versus Google with the European Union as adjudicator perhaps. Not sure which one is google and which one is microsoft. Such attributions are perhaps the heart of the problem.

This is an interesting question that almost everyone misinterprets.

People assume the question is:

(wrong question) "How can Microsoft beat Google at Search?"

But Search doesn't make money. Forget search. (Search just brings traffic).

Advertising makes money.

While Google are almost invincible at search, they're quite flimsy at advertising. Lucky for them, most other people suck even more at advertising.

If Microsoft offered a significantly improved advertising service, then Google would be forced to buy advertising services off Microsoft. And then, the more Google excelled at search, the more money Microsoft would make.

Think about that for a moment. It sounds insane, like some whacked out piece of futurama satire, but i'm deadly serious. Okay, not deadly lethal serious, but serious enough to repeat it in a <blockquote>, for those who scan without reading:

"If Microsoft offered a significantly improved advertising service, then Google would be forced (by shareholders) to buy advertising services off Microsoft!"

Five years ago, Google's advertising offerings were revolutionary. Their minimalist text-only ads took the world by storm. The jaded internet user actually clicked on a few ads. An incredible time was had by all.

In the five years since, Google have offered only marginal innovation.

The funny thing is that in those five years, Microsoft seem to have gone almost backwards!

Far from jumping on the 'minimalist' bandwagon, they persist with the blinky-banner ad school of thinking, and even dropped SIX billion dollars on buying aQuantive, early last year in a move that... well, i'd be scratching my head if i were Steve Balmer.

Microsoft could simply fire everyone in advertising, and get a bunch of lunatic perverts from a local insane venereal-monkey asylum, and probably come up with a better advertising program. (There are rumours that they've done exactly that several times already)

Now, in the interests of being more constructive with my feedback, here's my two step plan for winning at advertising.

  1. Clone what google currently do (i.e. same thing they did five years ago)
  2. Improve upon it.

The real constructive criticism would be around how to improve upon what Google currently do with advertising.

I'm out of time. So what are your thoughts, how can advertising be better than we get from Google today?

Read On...


Tue, 08 Jul 2008 12:10:49 GMT

TimeSnapper 3.1: Attack of the the Red/Green Stripes

There's a new release of TimeSnapper, which brings us up to version 3.1.

You can now see your productivity profile at a glance, when playing back your day.

Green and red stripes in the timebar indicate your productive and non-productive time

This turned out to be a real "must have" feature. As soon as I'd implemented a rough version of it (on my home computer) I was frustrated that it wasn't yet available on my work computer. There was no going back.

We call it 'red/green' striping, because it shows productive time in green, and non-productive time in red.

You can quickly filter to see only the productive time, or only the non-productive time.

To teach TimeSnapper about what time is considered productive or non-productive you use a simple wizard. You list some applications as 'always productive'. And you can indicate keywords that are a sign of productive time.

If you aren't interested in productivity tracking, then you get a smooth blue timebar instead.

Not watching productivity? you get a blue time bar instead

It took a while to iron out the bugs, because this is a feature that I implemented, not Atli. To be fair, there were a lot of edge cases to uncover.

Also, automatic updates are enabled again. So you can automatically upgrade from whatever version you are on, right up to version 3.1.

Thanks to all the new users, and all the ongoing users who help us out with feedback and encouragement.

Also, please, if you see something we can do better, please tell us. We try. By god do we try!

Read On...


Wed, 02 Jul 2008 11:16:43 GMT

21 tools used in our MicroISV

Many, well, years, ago I started a series of articles on '25 steps for building a Micro ISV'. It's still something that I care about very much, and that I hope to get back to sharing.

In the meanwhile, here's a quick wrap up of the some of the tools we use to help run TimeSnapper, our MicroIsv.

These are by no means the 'ultimate' choice or 'best of breed' in each category -- these are just the choices that we happen to use in TimeSnapper.

I think it's interesting to see just how much software we rely upon, even though we are 'Independent'.

This also leaves out the dozens of articles and blog entries that teach, inspire or unblock along the way, and the many tools we've considered using, or the many tools we're planning to switch to.

  1. Register Domain
  2. Reliable hosting
  3. Website design -- free templates
  4. Basic Website content
    • (write it yourself)
  5. Install traffic monitoring on your site
  6. Create forums, encourage feedback
  7. Maintain a FAQ
    • (write it yourself)
  8. Get the best screenshots you can
  9. Configure email for domain
    • (all by yourself)
  10. Get payment account
  11. Allow payment from your website
    • (all by yourself)
  12. Create a PAD file -- portable application description
  13. Register at download sites
  14. Strategy: separate "free" from "professional" products
    • (all by yourself)
  15. Get a suitable end user license agreement (EULA) -- infact get two!
    • (write it yourself, with help from weasel lawyer friends)
  16. Auto update strategy
  17. License activation webservice/website
    • (we wrote our own using asp.net and firebird)
  18. Get a license management database
    • (we wrote our own)
  19. Build a proper installer
  20. Obfuscate your assemblies
  21. Automate your build+release strategy
    • We've switched from final builder pro to batch files, to ms build
  22. Free up enough time/resources for dealing with support/feedback
  23. Shiny, Usable, Helpful
  24. Plan and enact your promotional strategy
  25. Do it all again
    • No tools required ;-)

Strangely absent from the list is our current choice of source control tool -- SourceGear Vault.

Read On...


Wed, 02 Jul 2008 09:37:33 GMT

Lost Treasures of the DOS World: tree!

I luckily stumbled onto a long forgotten gem today -- the Tree command in DOS.

What does tree do?

Tree promises to:

"Graphically display the directory structure of a drive or path."

Here's the output of tree called on the obj folder of a .net project, for example:

>tree

+---Debug
¦ +---temp
¦ +---TempPE
+---Release
+---temp
+---TempPE

It's awesome to see the Graphical power of DOS unleashed!

Here it is with the marvelous 'f' parameter, that also shows files...

>tree /f

+---Debug
¦ ¦ AboSoftLib.dll
¦ ¦ AboSoftLib.pdb
¦ ¦ TSLib.dll
¦ ¦ TSLib.pdb
¦ ¦ TSLib.vbproj.FileListAbsolute.txt
¦ ¦ TSLib.xml
¦ ¦
¦ +---temp
¦ +---TempPE
+---Release
¦ TSLib.dll
¦ TSLib.vbproj.FileListAbsolute.txt
¦ TSLib.xml
¦
+---temp
+---TempPE

What joy!

(Now where was I? Ah yes, about to install nc)

Read On...


Fri, 27 Jun 2008 10:04:11 GMT

The Virtual Machine Machine and the Virtual Virtual Machine

(sorry for posting this drivel from my own backlog of notes. i'm pretty ill at the moment, and don't have time to do any better. there are some good things in the works though -- a whole slew of nifty projects just kicking off)

That drunk steve yegge was muttering onstage about languages, and said something that raised an obvious idea in my mind:

Virtual machines are great for language interoperability. If everybody in the world used [the language D, for example], you probably wouldn't need a virtual machine. You'd probably still want one eventually, because of the just-in-time compilers, and all the runtime information they can get.

But by and large, we don't all use D. In fact, we probably don't all use the same five languages in this room. And so the VM, whether it's the CLR, or the Java VM, or Parrot, or whatever... it provides a way for us to interoperate.

Although he weakens his own point by mentioning these competing VMs (CLR, JVM, Parrot) -- this slip up makes me wonder: can a VVM be created? A Virtual Virtual Machine -- that acts as a layer between languages and virtual machines, and allows higher level code to be translated onto any virtual machine.

Dawn of computer age

We write:
Machine Code

Compilers invented...

thank you gracie!

We write:

Code, compiled to
Machine Code

Currently...

We write:

Code, compiled to
VM code, jitted to
Machine code

Future?

We write:

Code, compiled to
VVM code, zapped into
VM code, jitted to
Machine code

Or instead we could intercept between the Virtual and Physical tiers with a Virtual Machine Machine --

We write:

Code, compiled to
VM code, jitted to
VMM code, swizzled down to
Machine code

So the full five tier infrastructure would be:

We write:

Code, compiled to
VVM code, zapped onto
VM code, jitted to
VMM code, swizzled down to
Machine code

The opportunities for optimization would be endless! (or.... just hopeless)

Read On...


Sat, 21 Jun 2008 11:56:56 GMT

Should Linq To Sql Go "Open Source"?

Linq to Sql started life as:

" ...a humble Visual Studio project on my desktop machine way back in the fall of 2003..."
Matt Warren

It only reached production when ObjectSpaces failed to ship with VS2005 (it took a dependency on the ill-fated WinFS).

In November 2007, ownership of Linq 2 Sql was transferred from the C# team to the SQL Data Programmability team.

And now, microsoft are finally poised to release their long-anticipated ADO.Net Entity Framework (aka, 'EF').

Maintaining both EF and L2S involves some clear conflicts of interest.

So, here's a brief Edward De Bono style "Plus/Minus/Interesting" analysis of the question:

'should Linq to sql go open source?'

Plus:

  • It could get a lot of people working on it.
  • Features could be added based directly on community need, eg.
    • mockability
    • multiple providers
    • ability to refresh portions of the model without refreshing the entire thing.
    • ...and other alleged showstoppers

Minus:

  • If it doesn't get many contributions, then it could effectively kill the product, as it would be hard to move it back in-house.
  • It would probably become impossible to ship it as part of the framework, due to liability concerns.
  • Open Source is Communism ;-). (ah, kidding)

Interesting:

  • It could represent a hedge-bet / fallback position in case Entity Framework doesn't take off. (EF is pretty big and i'm a little worried that it won't take off).
  • With or without it being open sourced, the community (that's us!) can create awesome third party products, add-ons and scary work arounds to extend or test linq to sql

What are the chances?

Read On...


Wed, 18 Jun 2008 05:23:23 GMT

Redux: New Synchronisation Idea Overlooked By Microsoft

I promised earlier I'd look deeper into microsoft's products around Synchronisation -- here's the first thing I want to make clear:

FolderShare and SkyDrive are completely different

or to put that another way:

folershareDOES NOT EQUAL
FolderShare
 

But wait a second... are you retracting your earlier claims?

Yes and no. There is a massive fail here -- i'll get to that in a moment.

But first I want to clear up the differences between these two products.

SkyDrive is just online storage, and it has nothing to do with synchronizing those files to any location. There's no client side components (no shell extension, no explorer integration) no developer API -- nothing like that. But on the plus side it's 5 GIG, and it's deeply integrated with the spaces.live.com "on line presence" system.

FolderShare, on the other hand, is all about synchronizing files via the internet. There's no online storage at all. Instead you download and run a small client application (from here) on each of your machines, including Mac OSX. And thus, peer to peer connections can be established (i think they're encrypted and then proxied via microsoft servers) for synchronizing folders.

Each of these are very strong products, and very useful. You can find a lot of people who use and love these services.

Microsoft did a commendable thing when they bought foldershare, and made it free. Thank you!

But the massive fail belongs to...

The massive fail here belongs to the "cut and paste marketing" that's been used to push these two products.

It's a new term I'm coining for Marketing-Communication teams who plagiarise their own work.

Compare and contrast the difference in these two messages:

"Sharing with friends, co-workers, and family is easy..."
Folder Share marketing

"Sharing with friends, co-workers, or family is easy"
Sky Drive marketing...

And compare these two:

"access your personal files from anywhere online"
Sky Drive marketing...

"Access your files from any computer."
Folder Share marketing

The lesson for me is that while re-use is a Good Thing when writing code... it's not so good in the world of product positioning.

Read On...


Wed, 11 Jun 2008 11:51:21 GMT

New Synchronisation Idea Overlooked By Microsoft Live team

folder sharemeshsky drive

Microsoft's Live team have lots of different offerings that let you synchronize your information from one place to another.

They've got Live Mesh, for sharing 'your digital world' here there and everywhere.

They've got Sky Drive, which lets you share files with yourself, your friends, anyone.

There's folder share, the start up company they bought out which does more or less the same thing.

There's something called office live workspace which lets you sync and collaborate and something else.

There's synctoy, which uses Sync Services for File Systems. It's a kind of Robocopy on downers, with a UI.

And then there's the grand daddy of all of these -- Ray Ozzie's offering, Groove.

Holy Fracking Jesus, Microsoft!

There's clearly one Synchronisation concept that escaped them completely.

They could've gotten together as a team, shared their ideas, and realized: Oh Crap! We're all building different versions of the same thing.

Instead of creating a tangle of overlapping and unmergeable products, why didn't they synchronise their thinking and work out what problem they're trying to solve.

And then build one compelling product, that's a joy to use, and which clearly solves that problem.


Not to mention sharepoint which let's you, well, share. Up to a point.

And, microsoft/ford sync for talking to your cars.

Or Microsoft Sync Framework.

Or, Live Labs Listas which helps you share lists.

Or, ActiveSync, which well, sows frustration and despair on mobile devices everywhere.

groovelive workspacessynctoy

Read On...


Tue, 10 Jun 2008 22:36:43 GMT

Visual Studio UX Taskforce, Office UX Taskforce... etc.

Long Zheng's Windows UX Taskforce is amazing.

In the space of a few days, what started as a blog post has turned into a web phenomenom. He put together the digg-like site in a couple of days, apologizing all the while how long it was taking. (It's actually based more on a site from Dell called IdeaStorm but calling it 'digg-like' gives it an instant familiarity).

The amount of content now available is stunning. Long is awesome -- but so are the people who follow his blog. The recurring theme is that little things add up.

This is a point that Joel Spolsky makes over and over on his website (when he's not telling you to learn C)

"Another tiny frustration. These things add up; these are the things that make us unhappy on a day-to-day basis. Even though they seem too petty to dwell on (I mean, there are people starving in Africa, for heaven's sake... ), nonetheless they change our moods."
--Joel Spolsky in User Interface Design for Programmers

I think we need more of these UX Task force sites. What I'd love to see:

  • Office.UXTaskForce.com

    a community site for improving usability in MS Office
  • VisualStudio.UXTaskForce.com

    improve Visual Studio
  • IE.UXTaskForce.com

    improve Internet Explorer

...and so on for any software that has sufficient surface area to maintain its own independent site for focusing on user experience.

Obviously my own needs are too limited to the microsoft realm -- such is my burden in life.

I checked if the UXTaskForce.com site was available, with the idea of donating it to Long (he's a fellow Australian after all)

The website has been registered, and only a few days ago -- hopefully it's Long himself who grabbed it.

Domain Name: UXTASKFORCE.COM
Registrar: ONLINENIC, INC.
Updated Date: 08-jun-2008
Creation Date: 08-jun-2008
Expiration Date: 08-jun-2009

If there was a community-backed Visual Studio UX Taskforce (rather than the paltry connect.microsoft.com/VisualStudio), here's something I'd contribute (from the last few minutes). It's really small, but... well, little things add up.

Close button on Trial Dialog should be called 'Continue'

Submitted by secretGeek on June 10, 2008

The 'Trial' nag screen offers two choices: register and close. As a user you pause and think Close will cause the application to shutdown. But actually it doesn't, it just allows you to continue.

Low

Low

Not fixed

Read On...


Fri, 06 Jun 2008 13:16:03 GMT

How to be Jeff Atwood

jatwood circa 2004the real jeff atwood

Jeff Atwood writes CodingHorror which has been steadily building an audience over the last few years and is now a very popular destination for programmers.

I'd like to share my current opinion of the formula for creating Jeff Atwood style articles, in the hope that it may inspire someone, somewhere to do something, somehow.

Here it is:

1. Get an opinion

Uncover some ugly half-baked opinion in the dank underground of your tortured soul.

2. Resist the urge to blog at this point.

99% of bloggers would dash out their hideous wretch of a thought at this point.

Jeff holds back.

3. Research the classics

Remember: if you steal from one source they call it plagiarism. Steal from many, they call it research.

First, turn to books. What does Steve McConnell say? Tufte? Brooks?

Highlight any well written phrases you may wish to quote.

4. Beyond the classics

Ah, but the classics so often fall short. Particularly on contemporary topics.

Turn to the words of reputable bloggers, or better yet, wikipedia. Branch out from there.

Again, highlight phrases with a quotable turn of phrase.

But be ruthless and perfectionist in your approach: quote no trash.

5. Look for opposition

Actively seek out contrary opinions. Every topic has naysayers, and amongst such sayers of nay must be people who express valid concerns. Again --

Highlight any well written phrases you may wish to quote.

6. Firt Major objective satisfied

Now you've collected the meat around which the gravy of your narrative shall flow.

Crack knuckles, sit straight, for now you can write the text itself. Lay out the quotes before you and choose only the best and most worthy.

7. Reader is ignorant yet intelligent

Assume the reader knows nothing about the specific niche topic at hand.

And yet -- here's the hard part -- treat the reader as your intellectual equal. Talk across to them, not down to them. They are exactly as smart as yourself, but it so happens that they have not, just moments ago, finished reading the very best writing on the topic at hand, and as such they need some friendly coaxing.

If new terms are introduced -- define them. Or failing that, provide a link to a definition.

8. Take a side - For Now

Be willing to take sides, by all means. But present both sides of the arguments in a fair light: hence, do not try to make either side appear worthy of ridicule.

9. Why choose that heading?

Choose a heading that is open to misinterpretation.

The heading should raise questions, not answer them. Answers are complex things, and readers shouldn't trust any article that answers everything in the heading.

10. Google Search for images

It's near the end of this article and you are hardly reading now -- which is a shame, because the best tip is the final one.

Perform a google image search for something entertaining (or disturbing) to accompany and lighten your research. Your own biases will probably come into play here and you'll adorn your article with pictures of computer games, console apps and kittens. But you can't be perfect. After all, you're only Jeff Atwood.

Scan over your writing one more time. Ensure the tone is friendly and informative: capable of causing upset, yet never quite, exactly "wrong".

Hmmm. To be honest, just go read his site and make up your own rules. He breaks these ones all the time.

The only absolute rule I know he follows -- is to be Atwoodistic. I would define Atwoodism as follows

When you mention a topic you've covered previously, provide a link. Always.

Read On...


Wed, 04 Jun 2008 08:01:26 GMT

Reuse good -- Abstractions better!

I posted something about the word 'Upsert' recently -- and I was kind of surprised by the comments.

My real feelings about the concept of coining a new term 'upsert' are simple:

Don't do it!

Upsert is a bad name. An evil name. And not because it is a silly portmanteau.

Coining a term upsert, to embody the concept of "Update or Insert" is bad because it fundamentally misses the point of "Why We Code".

Let's get back to basics

Just say you discover that your code is frequently peppered with this little snippet:

If (this.State != New) {
this.Update();
} else {
this.Insert();
}

So -- you decide to extract that code snippet and place it in its own routine.

Routines are nice, routines are great.

"Aside from the invention of the computer, the routine is arguably the single greatest invention in computer science."
  Why You Should Use Routines, Routinely

This is what you create:

private void Upsert() {
If (this.State != New) {
this.Update();
} else {
this.Insert();
}
}

Now -- any instance of those fives lines becomes instead:

  Upsert();

Great! You've achieved one of the primary goals of routine construction: code reuse. Your code is now shorter, and thus hopefully cheaper to maintain. It's more versatile because now if you change the way "update or insert" works you only need to change it in one place.

Life is sweet. The birds sing and the flowers bloom once more.

But there's something amiss. Something foul remains.

You've failed on the other goal of routine construction -- you've failed to hide away the implementation details. You've failed to "raise the abstraction level!"

The user/programmer still has to think about the inner concepts: update and insert. Every time they see that words "upsert" -- the details "Update and Insert" are staring them in the face.

You lose sleep. Your dreams are troubled. Dark clouds follow you everywhere. And in quiet moments you hear the ominous echo of Alfred North Whitehead whispering:

"Civilization advances by extending the number of important operations we can perform without thinking."

--Alfred North Whitehead

Did you read that? What? You missed it -- here it is again:

"Civilization advances by extending the number of important operations we can perform without thinking."

--Alfred North Whitehead

By choosing the name "Upsert" we've failed in our duty to advance civilization! We want the user (the programmer who uses your routine) to perform these two important operations without thinking about both of them.

Let's think of a better name -- a name that alleviates the consumer from having to think about the constituent parts of the routine they're using.

How about this: Save.

private void Save() {
If (this.State != New) {
this.Update();
} else {
this.Insert();
}
}

Isn't that nicer? And civilization has taken another tiny step forward.


Incidentally -- it seems this 'Alfred North Whitehead' was a functional Programmer in the 1800s -- before Church and the Lambda calculus that gave rise to functional programming. Here's a comment about him:

"There are no fundamental "things," or "objects" in the world of Whitehead. Whitehead's ontology, or parts-list of the universe, contains only processes."
--Richard Lubbock in 'Alfred North Whitehead: Philosopher for the Muddleheaded'

Read On...


Sun, 01 Jun 2008 11:07:03 GMT

Word of the day: Upsert

I've found a new word, buried deep in the internals of dot net.

(this is a real word)

"Upsert."

It means "update if you can, or insert if you have to."

It also looks a lot like a combination of the words "Upset" and "Berserk," and it sounds much like "Absurd."

All up, it's a keeper.

Read On...


Sat, 31 May 2008 12:18:33 GMT

Return from an offline sojourn

I was offline for a few days over the past fortnight, and found it really refreshing. Without the continual distraction of the internet I was able to concentrate on achieving a lot of things that had been niggling me for a while.

Amongst those was the addition of some long overdue 'luxury features' for TimeSnapper that I hope will make it more meaningful for a lot of users. (No doubt I'll bombard you with the details when we release the next upgrade).

With the internet out of the way, my 'at home' productivity went from its usually mid-40's mark to a whopping 98%.

There were a lot of blog entries I jotted down notes for, but now I'm just happy not to contribute too much to the hyper-noise of the internet for one more day ;-).

But here's an example of an 'awesome Atli tooltip' found deep inside the codebase for TimeSnapper.

        Me.Label4.Text = "Productive Applications:"

        Me.ToolTip1.SetToolTip(Me.Label4, "Productive Applications are those that relate to your work." & vbCrLf & _

                                          "Solitaire, for example, is NOT a productive application, " & vbCrLf & _

                                          "unless you are working on becoming the world champion of " & vbCrLf & _

                                          "solitaire.")

It's these kind of gems that help me enjoy work on this product more and more with every version.

Now, back to the usual un-productive fare:

If you too have been tricked into using twitter, you can follow me here.

Read On...


Mon, 26 May 2008 11:14:46 GMT

Leaky Abstractions? Try Asp.Net!

First here's a code example:

Single line 'TextBox':

<asp:TextBox ID='dd1' runat='server' TextMode="SingleLine" MaxLength="10"> </asp:TextBox>
                                                                                    ^^^^This 'MaxLength' is respected!

Multi line 'TextBox':

<asp:TextBox ID='dd1' runat='server' TextMode="MultiLine" MaxLength="10"> </asp:TextBox>
                                                                                    ^^^^This 'MaxLength' gets ignored!

Now here it is in pictures:

max length ignored on multi-line TextBox

The single-line TextBox respects the maximum length property. The multi line textbox does not. We see other differences too: these two 'TextBoxen' differ from each other in far more than the number of rows.

The cause here is a classic 'Leaky Abstraction' - and asp.net is riddled with such leaks.

The 'abstraction' of "TextBox" is used to emit either one of three underlying html elements -- "TextArea", "Input type=text" or "input type=password" -- depending on the 'TextMode' property. The three controls are wildly different animals.

"Solutions" to this problem tend to use javascript to stop input once the maxlength is reached.

Edge cases are frequently missed, for example:

  • Once maxlength is reached, ignore input, but don't ignore: Arrow keys, Delete key and Backspace. Others?.
  • Pasting of text should truncate down to maxlength.
  • Disabling of javascript is always possible, so length validation needs to be applied on server side as well.
  • Now that javascript is in play, browser compatability becomes a bigger problem.

That's pretty nasty stuff to have to perform -- and worse, you're given no warning that you need to perform it.

The API tells you that there is a maxlength property you can use... but the API, in this case, is lying.

I'm not really concerned with this problem technically. And I think the asp.net abstraction is so extreme that it's admirable. I'd like to know how to patch this kind of leak.

Here's what I'm wondering:

Is there a way the text box class could have been implemented so that you get a compile error for setting the maxlength property when the textmode is multiline?

That would be enough to make it a safe abstraction in my books. It's more extreme than the static typing afforded by most static type systems.

I expect that such a constraint could be achieved with a language/tool like Spec#.

An alternative would be to throw an exception when setting the maxlength property if the textbox type is multi-line, and vice versa. But that seems like quite a faulty approach.

I'm just not happy about this at all. I think I will need to write a very stern letter to Scott Guthrie.

Read On...


Mon, 26 May 2008 10:42:17 GMT

A truly original thought

"Everything of importance has been said before by somebody who did not discover it."
--Alfred North Whitehead

Yet, once in a while, a true genius will strike upon a genuinely original thought.

Here's some such wisdom from JCooney:

"Who would you back in a fight: Cab Calloway or Darth Maul?"
--JoCo Loco

Tell me there isn't a multi-million dollar best-selling console game and movie franchise in that question?

cab calloway -- you may know him from blues brothers where he sung minnie the moocher with its catch cry hi de hi de hi de hidarth maul -- you may recognise him from the phantom menace or else just because hey! he sure looks like your mother

Read On...


Tue, 20 May 2008 11:08:43 GMT

Throw New VirtualMachine();

Today's crazy idea.

For serious exception handling:

throw new VirtualMachine();

...immediately spins up a new virtual machine, identical to the currently running machine, only with a debugger attached and paused on a breakpoint at the currently active line of code which caused the exception.

The development/operations team are notified and given a url with which to connect to the new virtual machine. A bug is lodged in your support system.

Meanwhile, execution continues essentially 'uninterrupted' in the original machine.

Read On...


Mon, 19 May 2008 06:51:57 GMT

Undo, redo, predo, preundo

Undo and redo are nice, but what i'd like to see is: Predo.

Undo provides a way to reverse what you've just done.

Redo is a way to unreverse what you've just undone.

Predo will be a way to do what you've not yet done.

And preundo would be a way to avoid doing what you've not yet done.

Read On...


Sat, 17 May 2008 04:50:18 GMT

A little "bit" of programming therapy

I have a new habit that I enjoy, even though I am certain it is getting on the nerves of my colleagues.

Whenever I find a bug in a piece of logic I've written -- whenever I find I've used || instead of && or left out a !, I shake my fist at the sky and shout, at the top of lungs, "Damn you George Boole!"

Try it. Very therapeutic.

(actually I kind of whisper it under my breath most of the time)

Read On...


Thu, 15 May 2008 09:49:28 GMT

Coding Koan: the power of one

Given a sufficiently large framework, any application can be a one-liner.

Read On...


Tue, 13 May 2008 11:40:45 GMT

Behavior Driven Development: As Human As Possible

I've been intrigued with everything I've read about "Behavior Driven Development" -- which is essentially a friendlier face on Test Driven Development.

For beginners like me I think the most obvious concept is that BDD = Test Driven Development Plus "natural sentence style test naming" as JP Boodhoo calls it.

For example, David Laribee gives examples where Tests and test fixtures are simply renamed according to a strict pattern, like this:

namespace Specs_for_TransactionElection
{
[TestFixture]
public class When_an_election_is_started : Spec
{
private ITransaction _stubTransaction;
private TransactionElection _election;

[Test]
public void The_result_should_be_in_progress()
{

Assert.AreEqual(_election.Result, TransactionElectionResult.InProgress);
}
}

The upshot of this is that the tests in the code runner read like a restricted-subset of plain English:

Behavior Driven Development example from Resharper

Some people, including David Laribee and Ryan LaNeve have said that the output of these stories could be improved to present a more human-readable form.

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.

Here's a dodgy mockup:

Specifications for Transaction Election passed When votes are cast: passed A single no vote should rollback the transaction.passed A no vote will leave the election with a finished and voted no status. passed Unanimous yes votes will commit the underlying transaction.

The point here is that I'm not talking about improving the output of the unit test tool -- for example the 'Dox report generated by the MbUnit GUI runner' (as Ryan LaNeve has demonstrated)-- I'm talking about changing the runner itself so that it directly cleans up the names of the tests and fixtures for presentation.

It could even report on "Convention Breakers". (Squiggly red underline perhaps).

(side note: matt calla provides a macro for doing the exact opposite of this.)

(Other side note: is this similar to Donald Knuth's idea of literate programming?)

Read On...


Tue, 06 May 2008 12:44:30 GMT

What To (Really) Do If You Find Out Your Parents Are Using Vista (redux)

I probably owe Vista an apology for that previous slurring. I started out wanting to say something else altogether, but once that idea had occurred to me, I found it irresistable ;-)

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.

Here are practical tips for how to deal with Parental Vista Use.

  1. Remove OEM Junk
  2. Good children don't let parents run as admin
  3. Set their hard drive free!
  4. A digital Camera without a backup strategy is a loaded handgun without a safety switch
  5. No Aero for You!

Remove OEM Junk

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).

Norton Anti Virus: just say no.

If you want to run anti-virus software, you want AVG.

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.

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."

So I think you ought to choose: UAC or AVG.

But the dumbest choice is NAV plus UAC.

While you're at it, check for any unwanted startup programs (run "msconfig") and see what services are set to start automatically.

Good children don't let parents run as admin

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?

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.

If they have software that demands they run as admin... you'll stick that b*tch in a VM and tell it to shut the hell up. Capisco?

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 Fog Creek CoPilot, TeamViewer or some other remote assistance tool) and do the necessary.

Set their hard drives free!

Two tips here:

  1. Turn off Indexing
  2. Enable advanced performance (on SATA drives)

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 past failures 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.

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.

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 defaultEnable Advanced Performance

  1. Click Start, right-click on "Computer" and click "Manage" (you may get a UAC prompt here)
  2. Select "Device Manager", and expand the node for "Disk drives"
  3. Right-click on their primary hard drive, and select "Properties"
  4. Go to the "Policies" tab, and make sure "Enable write caching" on the disk and "Enable advanced performance" are both selected.
  5. Hit OK, close Computer Management

This can allegedly allow you to lose data if the power goes out suddenly. Yet some people have used it for years without incident. I consider it safe enough. You be the judge.

A Digital Camera without a backup strategy is a loaded handgun without a safety switch

Say it with me, say it loud:

A digital camera without a backup strategy is a loaded handgun without a safety switch

But what have digital cameras got to do with helping parents use Vista?

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.

So generally a child who has one of these problems also has the other. I think.

So for this one, I urge you to read Scott Hanselman's excellent article, On Losing Data and a Family Backup Strategy.

No Aero Glass for You!

There's nothing for you to do in this step, just something to be aware of.

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.

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.

Apparently it's an easy registry tweak to get around -- but I haven't tried it as yet.

The history of why this version exists is a kind of unholy alliance between sellers of substandard hardware and mercenary-cannibals from the camels and rubber duckies sect of capitalism. There's a lawsuit in the US.

But I digress.

There is life after a Vista install.

You don't need to upgrade to XP.

And there are even some features of Vista I like. ([Alt]+[Up arrow] to move up a directory in explorer, amongst others)

Read On...


Sat, 03 May 2008 23:43:30 GMT

What To Do If You Find Out Your Parents Are Using Vista

Look at it. Recognize it. Your parents wellbeing could depend on it!

First, take a deep breath...

You're not a failure as a child. You're not helpless. And you're not alone.

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.

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.

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.

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.

THE AWARE CHILD HAS THE SAFEST PARENT

Part of awareness and a major deterrent to experimentation is to talk to your parents about Vista.

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.

They may develop chronic constipation
or diarrhea, and just seem tired
and lethargic all the time. They may
have trouble remembering things and
forget something you told them
just a few minutes earlier.

THE WARNING SIGNS

There are no symptoms that are absolutely reliable. But there are clues.

Most of these symptoms tend to be gradual which is why your awareness is so important.

Don't jump to conclusions, but do investigate any suspicions you have as fully as possible. Trust your intuition.

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.

But whatever the problem, we're talking about a parent who needs help. Right now.

START WITHIN THE FAMILY - BUT DON'T WAIT TO GET HELP IF THERE IS A PROBLEM.

Nothing beats the power of love and family support. That has to start with frank discussion.

Don't make it an attack. And don't try to talk with your parent if he or she seems under the influence.

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.

Use "I" messages -- sentences that start with "I" -- explaining how your parent's Vista use affects you and your community.

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.

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.

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.

FURTHER ACTION IS PROBABLY NECESSARY.

Even if your parent seems non-responsive or belligerent, if you suspect Vista is involved, immediate action is vital.

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.

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.

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.

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.

WHATEVER YOU DO, DON'T GIVE UP

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.

No matter what they say.

(This cautionary tale owes a debt of gratitude to 'what to do if you think your child is on drugs')

Read On...


Fri, 02 May 2008 11:50:56 GMT

Sample Code From Text-Adventure Game Platforms

I'm using the occasional snippet of spare time I don't have to write a 'platform' for constructing Wiki-based Adventure Games (more). It's a kind of -- and I shiver in horror at the term -- a Domain Specific Language.

So, when you're inventing a Domain Specific Language for writing Wiki-based Adventure Games... I guess it's a good idea to acknowledge:

a) You're gonna suck at it and

b) it's been done before.

So, I guess it's time to consult the classics.

Thanks to a post from _why, i've learnt about Scumm, the Script Creation Utility for Maniac Mansion.

Here's a snippet of ScummC provided by _why:

object carolObj {
name = "Indigenous lifeform";
verb(int vrb,int objA,int objB) {
case TalkTo:
zobTalkToCarol();
return;
case LookAt:
if( ! knowsCarol ) {
egoSay("A large carbon based mammal, it seems.");
waitForMessage();
}
else {
egoSay("It is Carol, one of the local lifeforms.");
waitForMessage();
}
return;
case Smell:
egoSay("This creature has an overwhelming pungent smell.");
return;
case Move:
egoSay("The lifeform is surprisingly sturdy, I don't believe I can use force.");
return;
}
}

Well that's very nice.

Sierra

Now, how about that megalith of adventure games from the 1980s, Sierra Online?

Sierra used an interpreter called AGI (adventure game interpreter) to make such classics as Leisure Suit Larry and King's Quest.

(Leisure Suit Larry is a kind-of formative game for my entire character and personality. In case you didn't realise this, I thought I'd spell it out now.)

Here's a code snippet:

if (said("look","door")) {
if (posn(ego,0,120,159,167)) {
print("These doors are strongly built
to keep out unwanted visitors.");
}
else {
print("You can't see them from
here.");
}
}

(example from: Making adventure games with AGI)

GrimE

GrimE is a game engine written in scripting language LUA, touted as "the successor to SCUMM, preserving some of that engine's features" (according to the big 'pedia.)

I haven't found a sample or a good starting resource -- so if you find one, please send it along.

Agast

Also under the wikipedia category of Adventure Game Engines, I found AGAST

Here's a morsel of agast scripting...

"For example, here's an event that is triggered when the player looks at his goldenmop:

event Lookat <> GoldenMop
{
EGO:
"It's my trusty golden mop."
"I got that years ago for saving the galaxy."
}

(later)

var TalkedToGiantLizard;

event Talkto -> GiantLizard
{
if TalkedToGiantLizard {
"Since he won't talk to me, I won't talk to him either."
}
else {
"Hi up there, Gozira!"
delay 10;
"He probably can't hear me, or he doesn't speak English."
TalkedToGiantLizard = true;
}
}

Wintermute

Wintermute (from dead-code) -- how awesome.

Here's an example of scripting for wintermute, (taken from here)

on "first"
{
Game.Msg("Do something after the first choice.");
}

on "second"
{
Game.Msg("Do something after the second choice.");
}

on "third"
{
Game.Msg("Do something after the third choice.");
dlgObject.removeIcon("second");
}

ZIL

Zil? Zork Implementation Language of course! What else would you implement Zork in?

And it's time for lisp-like languages to bring a close to this article ;-)

Here's what the definition of the Living Room from Zork I looks like:

<ROOM LIVING-ROOM
(LOC ROOMS)
(DESC "Living Room")
(EAST TO KITCHEN)
(WEST TO STRANGE-PASSAGE IF CYCLOPS-FLED ELSE
"The wooden door is nailed shut.")
(DOWN PER TRAP-DOOR-EXIT)
(ACTION LIVING ROOM-F)
(FLAGS RLANDBIT ONBIT SACREDBIT)
(GLOBAL STAIRS)
(THINGS <> NAILS NAILS-PSEUDO)>

(from 'Zil [pdf]')

(And how's this for an intriguing name for a pdf [from the ZIL entry at wikipedia] "How to Fit a Large Program Into a Small Machine")

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.

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.

But I think Douglas Crockford (inventor of Json) distills the soul of a great computer game, in his very entertaining article 'The Expurgation of Maniac Mansion, :

  1. meet people,
  2. kill people,
  3. take their money,
  4. buy more weapons.

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.

Read On...


Thu, 24 Apr 2008 10:22:45 GMT

TimeSnapper 3.0 -- an interactive, bubbling cauldron of possibilities

TimeSnapper 3.0 out now! This is the activity cloud

While the googles and microsofts have been touting their clouds and their meshes, 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.)

The TimeSnapper 'life analysis system' has finally reached version 3.0.

(Wondering what TimeSnapper is? Overview here)

This was a pretty solid overhaul, with many improvements under the covers (see release notes if you're detail oriented).

On the surface, the most important change is that the "activity cloud" (one of our reports) is now far more interactive.

Previously the 'activity cloud' was just a static word cloud, giving you an instant visual clue about what you've been up to.

Now it is an interactive, bubbling cauldron of possibilities. A self-organising mind map of your life.

Click on a word in the activity cloud to see a more detailed activity cloud, specific to that word.

click on a word to see extra detail...

(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)

But here's what I like: the different ways to view your life are now converging into one seamless experience.

TimeSnapper has three main ways of viewing your life:

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.

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.

click on a word to see extra detail...

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).

(And if needed, right-click on that image, and extract the text from it, using OCR.)

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.

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 your life, just a better informed one.

 

Read On...


Tue, 22 Apr 2008 10:17:09 GMT

Be warned: the laptop compubody sock is out there

wait until the wearer is clearly absorbed in their laptop activities before you approach.

If you see someone wearing this garment in a public place, my advice to you is simple:

Act swiftly. Move in silently and with great stealth. Bludgeon the wearer to death with a baseball bat. Step away, slowly.

You will be doing the human gene pool a tremendous favour.





(...alright, i ought to admit i'm not really a genocidal maniac, and the people at instructables are probably creative geniuses, DaVincis of the knitting world etc, who deserve some praise to accompany that ridicule.)

Read On...


Fri, 18 Apr 2008 12:04:14 GMT

Everything that's bad for you is suddenly good for you!

In IT it seems that everything your lecturers once told you is bad and useless, turns out to be good and fruitful.

It's a reversal of the Woody Allen quote:

"Everything that our parents told us was good for us, turned out to be bad.

The sun. Milk. Red meat. College. Catholic girls."

(I'm deliberately paraphrasing)

For example...

We were once taught that dynamic sql is the path to poor performance and woeful security. And yet we now see that this is nonsense -- dynamic ORMs bring about increased performance and richer security models. Damn it!

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.

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 modern and future languages will support significant white space with a vengeance!

But most shocking of all!!

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 google BigTable that in fact this is the future: this is faster and actually, sorry Jenkins, your rdbms is dead.

I'd love to be a stickler and a stalwart... but screw it. History is bunk. Bring out the learn!

And thus I'm left wondering... What else appears taboo and verboten? What else did our 'teachers' claim was 'bad' ?

Well - one thing was certainly frowned upon: the use of GOTO!

So....

I'M BRINGING HER BACK! WELCOME THE GOTO!

You may consider me a touch behind the times. But wiser heads will see me as preceding the curve.

What is a try...catch but a glorified JMP? (aka goto) Where would a switch be without an implicit goto, hey zooba?

What else do you see that's been besmirched too long? What other versatilities in IT have been marginalised far too long?

Bring out your dead.

Read On...


Sat, 12 Apr 2008 10:06:05 GMT

Everything I know about Code Reviews I learnt from Star Wars (and JCooney)

Imagine you're on a project where Joseph Cooney performs code reviews on everything you try to check in...just theoretically. And, theoretically, people like Don Syme and Joel Pobar are on hand to provide useful feedback at times...

Many many iterations ago... in a project far, far away...


Joseph (in red, indented)Leon (in blue)
Aren't you a little short for a developer?Don't underestimate the Force.You may dispense with the pleasantries, Bambrick. I'm here to put you back on schedule.So, can I can check it in? You like my code?You'll never find a more wretched hive of scum and villainy.We must be cautious.What's that line of code there?It's an old code, but it checks out. I was about to check it in.Does it compile?I find your lack of faith disturbing.

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.
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.We shall re-double our efforts...I hope so bambrick for your sake. The build master is not as forgiving as I am.Look, Your Worshipfulness, let's get one thing straight. I take orders from just one person: meIt's a wonder you're still alive.It's a valid implementation. Screaming about it won't help you.Let 'em defect it. It is not wise to upset a tester.But Joe, nobody worries about upsetting a developer.That's 'cause devs don't pull people's arms out of their sockets when they lose. Testers are known to do that.Wonderful girl. Either I'm going to kill her or I'm beginning to like her.So I'll check it in?I have a very bad feeling about this...[pauses]

It's a TRAP... err CRAP
Damn fool, I knew you were going to say that.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.

You can write this shit LB, but that doesn't mean we can checkit in.

Last resort: use Jedi mind tricks on Joseph:

These are not the bugs you're looking for (wave hands)These are not the bugs we're looking for.
You may go about your business. Check it in.

Read On...


Fri, 11 Apr 2008 20:25:04 GMT

Syntax highlighting of strings

Maybe this is a fiddly little point, but I think it's the sort of detail that's worth paying attention to.

The theory is:

Syntax highlighting of strings could be improved to make reading easier

In the following code example, look at the way the string is 'highlighted':

return string.Format("<a href=\"{0}\">{0}</a>", link);

The red highlighting covers not just the literal string itself, but also the quote characters and the escape characters: the 'meta' guff that decorates the string.

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.

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 really a string.

Here's a different way the syntax highlighting could be implemented:

return string.Format("<a href=\"{0}\">{0}</a>", link);

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).

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.

More importantly -- it allows you to selectively 'see past' the escaping.

If you look at the second example, you can 'train' your eyes to focus on just the literal string itself -- until you see basically:

return string.Format("<a href=\"{0}\">{0}</a>

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.)

Read On...


Wed, 09 Apr 2008 09:01:57 GMT

Google AppEngine: evil virus or viral evil?

google app engine is interesting

After reading all the negative publicity that google's new application engine is generating -- I couldn't believe my eyes!

Could it really be that bad?

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?

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:

Yep, evil.

Read the fine print guys! Sheesh!

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.

Serious though, this cloud computing stuff (see also EC2 from Amazon, IBM blue cloud) looks pretty amazing.

Cough, cough, (Just making sure Ray Ozzie is awake). I'm going to say that a little louder.

this cloud computing stuff looks pretty amazing!

You freakin' got that yet Microsoft?

And this is just the very early days.

We will hear a hell of a lot of hype about this concept yet.

Then we will go through a bitter trough of disillusionment.

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.

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.

Ah, back to reality:

Google will soon unveil Ruby as language number 2 on the platform. This right now... this is just the fluffer ;-)

Read On...


Fri, 04 Apr 2008 11:06:19 GMT

Perfect for lounging

--Why do you hate workflow so much?

My only problem with workflow software is that you have to sell your soul to the devil first.

--And that's a conflict of interest, since you already sold your soul, right?

Technically, yes, I sold my soul already. But it turned up on ebay and I bought it back.

--"One soul. Hardly used. Lacks ethics and morality. Perfect for lounging. Supports upgrade to 'weasel'."

You read the ad?

--Read it?! I almost out-bid you.

Read On...


Fri, 28 Mar 2008 11:57:31 GMT

Meeting Frustration, Chaos and Despair Head On. And loving it.

Marcus Auerelius was a chump. Cleverer than I, and emperor of the modern world. But a halfwit, at best.

Old Marcus A. spake thus:

"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."

Yet my philosophy is richer, though -- at a glance -- far poorer.

For I add to this outlook the respective wisdoms of Newton and Hanlon:

An object will stay at rest or continue at a constant velocity unless acted upon by an external unbalanced force

...and...

Never attribute to malice that which can be adequately explained by stupidity

Hence, with my modern stoic attitude, I proudly announce:

I begin each day by reminding myself,

"Today I shall meet with frustration, anxiety, anger, antagonism, annoyance, mistrust, frivolity, ignorance, hubris, jealousy, laziness and despair.

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.

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."

Read On...


Thu, 27 Mar 2008 10:45:27 GMT

Workflow software: I'm calling the bluff.

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.

Here we go.

A state machine is about the most basic electronic circuit you can make. You can throw one together with a couple of transistors.

And in software, writing a state machine is so simple that it's hard not to write one.

But simple ideas leave room for big inflation. Sales people know that the best things to sell are inflated big ideas.

So the field of Enterprise-Level Workflow Software was born.

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.

Business are universally worse off because of the advent of 'work flow' products.

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."

Persistence? Persistence? Don't we have these thing called databases? Isn't that our usual, and fairly well understood persistence mechanism?

Also there's value-added services such as logging and reporting.

Logging? reporting? I'm still thinking 'database.'

Ah, but here's the super-answer:

Lego Mindstorms NXT programming

Workflow products include graphical tools for letting business analysts design their business processes without involving coders.

Without... without... You're kidding right? You ought to smell what you're shovelling.

Show me a working 'business analyst' -- one, who is not now nor has ever been a coder -- who successfully 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.

Show me just one.

World wide.

I can wait. I give you one month. Nah, screw it. I give you eternity.


Whenever I get too saddened by these things, i think of my big idea for a whole new class of enterprise component:

The 'IF' server.

Here's the general pitch.

(switch to the kind of voice-talent they use when advertising john grisham films)

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?

Business needs alignment.

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.

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.

You can have the most complex business scenarios in the world, and if you tell us to return true, we will. Every time.

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.

Imagine... A single standard for IF processing, accessible from across the entire organisation.

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.

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.

Tuesday? Then it's false.

You run the business. You decide.

No more doubt. No more incompatabilities. No more missed deadlines and lost opportunities.

You can crush the competition. You can destroy them all.

IF only you purchase now.

The IF Platform Server One Million and One. A revolution in business processing solutions.

Read On...


Fri, 21 Mar 2008 10:35:09 GMT

3 Types of Argument

competing models of SU behaviour following M1

Engineering Argument:

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.

Example: should the bike-shed be made from wood or brick?

Artistic Argument:

There are two ways to implement something. Both are functionally correct, but have unquantifiable differences. Argument centres on intuition and opinion.

Example: should we paint the bike-shed topaz or cyan?

Religious Argument:

There are two conflicting points of view. Both are utterly wrong. Argument has no centroid and no limiting factors.

Example: should the bike-shed be built to honour the green walrus or the almighty unicorn?

Read On...


Sat, 15 Mar 2008 12:41:19 GMT