Clients From Hell


Everybody has them. Clients with unreasonable demands. I thought I'd share a few of mine.

Names have been omitted to protect the guilty. Ha ha ha.

Client: You charge on time and materials, is that correct?

Me: yeh, like wossup?

Client: Your rate is $100 per hour, chargeable in 6 minute increments, correct?

Me: whatevs derr.

Client: You charged us $300 to review our code. I'm informed you only spent 5 minutes on site.

Me: dude, it's not just my time, you said it yourself time and materials too. 5 minutes looking at your code took 3 bottles of whiskey to wipe out the memories. You guys are straight in my clients from hell folder. Page 1? You guys!

And another.

Client: So we're trying to determine the correct name, and there's been some internal debate.

Me: derr, whatevs. "Naming is hard", suck it up, yo.

Client: Yes. Well, we've come up with a possible...

Me: Don't be wasting time on names. Just pick a name and move on. Here, I'll pick it for you. The Goobertronic Six Million. Done. Move on. Finished.

Client: ...and we thought that 'Everyday Billing Account' would indicate...

Me: Goobertronic Six Million. It's decided. Move on.

Client: ...that it stores the Everyday Billing Information.

Me: Forget it. Goobertronic Six Million! I'm committing it. There. Done. Pushed. There. It's live. Just like that. Woo hoo! You guys are getting a whole chapter in my "clients from hell" folder. Two chapters. Don't keep looking at me like that. Three chapters. Four. Wanna keep doing it? Uh-huh. Five. That's six chapters already. I can do this all day. Seven. I'm outta here. This blows.

One more. Though I could go on all day. Clients today. SMH. (shaking my head, that is).

Client: Our lead developer tells me you broke the build.

Me: heh broke his brains more like it

Client: He tells me you pushed without compiling first.

Me: i'm a artist, i push when i wanna!

Client: Very well, but in future, can you ensure that code compiles before pushing it?

Me: move fast and break things! look it up yo! straight into my clients from hell folder. Bam!

What about you? Do you have impossible clients?


Hacking Hyperink (aka. changing the font-size of an Epub on Kobo)

This is a little bit niche. ;-)

I bought a book from a supplier called Hyperink. Hyperink specialise in taking popular blogs and turning them into ebooks. For example they've put out a few books based on Jeff Atwood's writing. The book I bought was from Patrick McKenzie, "Sell More Software: Website Conversion Optimization for Software Developers". It's a bunch of his posts about increasing sales, plus a few new articles, and some follow up on how certain experiments panned out. (I recommend it.)

After buying from Hyperink the book was made available in 3 formats, .epub, .mobi and .pdf

Problem! When I "side-loaded" the .epub version onto my kobo eReader (using calibre), the fontsize was teensy tinsy little and impossible to read. Okay I thought, no problem, I'll just adjust the size of the font... so I tried that, but woah, the text would *not* change size. It just refused to budge. This was extremely frustrating. I spent real money on this thing so I could read it, not so I could go blind.

Did I sit on the ground and cry? No I didn't! Well, not for long. I cracked out my awesome power tools and fixed the problem!

So here's what I did.

In Calibre, add the book.

click Add books from a single directory in calibres main toolbar

Look for the "Edit Book" icon. Edit the book!

click edit book icon in toolbar

Navigate, using the "Files browser" pane on the left, double-click on any chapter, and look at the markup for a regular paragraph in the book. (It feels weird to be double-clicking... that's an action that has almost fully disappeared from our mouse-repertoire.)

navigate to a chapter and look at the xhtml

In this case we can see that a regular paragraph is wrapped in this xhtml:

<div class="bodyText"><p class="calibre1"><span>

Notice the class of "calibre1" -- that's what we'll use for specifying the styling of paragraphs. It will be different in any given epub, and there's various other css selectors that could be used to style the text. But a class, such as calibre1, has just the right level of specificity for our purposes. So in this case, commit "calibre1" to your already over-burdened short-term memory.

Now scroll down in the "Files Browser" until you find "Styles" and in there you'll find stylesheet.css. Double-click to edit that... (For other books it might be a different css file.)

find the stylesheet

Where it currently says that the style ".Calibre1" (translation, styles applied to all elements with class=Calibre1), change the font-size rule from the fixed size of "16px", to the far more flexible, relative, scalable size of "1em."

change the font-size of the calibre1 style from 16px to 1em

Save your changes. Send the ebook to your kobo (or other device), open it up and read it at ANY SIZE YOU WANT.

Ahhhh. That's beautiful.

(I find that reading very late at night, as I get more and more tired, I make the text bigger and bigger and BIGGER until finally I fall asleep with the kobo on my face.)


How Bundling Doubled The Income of ''

I couldn't bring myself to use the original headline, "This one simple trick doubled my income!". But I'm happy to finally be one of those people who made a simple adjustment to their business and turned around a month later to report that income had doubled.

The NimbleBundle was a roaring success. In case you've just joined us, the back story is that last month I introduced a 'bundle' version that was simply the grouping together of two pre-existing [& complementary] products, NimbleText and NimbleSET.

Total income for August was 185% of the income for July, while traffic stayed consistent across both months. (I track all this on my funky new dashboard). Thus, even though customers buying both products were now handing over ten dollars less than before, it was more than made up for by the increased sales volume! Support was easy-peasy, refunds remained at nil. (However a significant chunk of earnings went to Motor Neurone Disease, after a long-time friend, now enemy, named me in an ice-bucket challenge.)

What were the actual figures? I know you voyeurs would love to know, but I'm keeping the actual metrics to myself. What really matters is: were these figures statistically significant? to which the answer is a resounding yes. I plugged the traffic from each month and the sales for each month into my favorite G-Test calculator and got a result of:

"The G-test statistic is 44.7 so version 'B' wins with 100% confidence."

I'm not going to argue with 100% confidence, or the awesome power of maths.

I talked about the psychological reasons for bundling in a previous blog post. I have no way of knowing if those were the actual reasons why the sales went up. It could just be that a lot of people had text manipulation tasks and set comparison tasks in August. But whatever the reason for the increase, I'm definitely keeping the bundle around. ;-)

There was a minor disaster in the first few days. Whenever someone purchased a bundle it would sometimes send out two licenses (instead of one). Then they would write to me and ask what to do with the second license. I suspected I had a race condition in the code. And since race conditions can be very hard to track down, I pored over the code very carefully, looking for any place where a race condition might hide. Eventually the cause of problem occurred to me while I was sleeping. It was just plain old bad logic doing me in once again:

Deep inside my license generation app I have a boolean function that determines if a sale has already been recorded. It (essentially) ran a query like this: Select count(*) as count from Purchases where PayPalID = {0}. Then back in the code, it said return count == 1. This worked flawlessly for several years. But with the introduction of the NimbleBundle, there would now be up to 3 entries in the purchase table for every actual purchase. So I changed the code to return count >= 1 and duplicate license generation stopped happening.

Now on to bigger and better versions. I've got major new features implemented for both products, due out in the coming weeks. I have of course distracted myself (as I often do) with the task of writing a book. If you haven't signed up to be notified when the book is ready, go and do that now. A really solid amount of people have signed up already: if you're one of them, then thank you! I currently have an outline, a bunch of powershell scripts for tracking my progress, converting my markdown to .epub etc, and over 5000 words committed. So far: lots of fun. Have learned a heck of a lot.


Your First Product

I've been steadily cranking out products for the last few years (TimeSnapper, NimbleText, NimbleSET etc. etc.), and finally decided to write an ebook about how it's done.

There are things I consider to be "my secrets". They'll all be in the book.

I'm writing the ebook for four reasons:

  1. To get much better at making and selling products. Nothing teaches like teaching!
  2. To realise some of the capital investment I've made in building products so far
  3. To get in contact with my people: people who make products
  4. To learn about ebook production itself.

I've put up a landing page at "" where you can sign up to be notified when the book is ready.

Landing page for

In answer to the questions I've received so far:

How much will the book cost?

I do not know. It will certainly cost more than $10. It may be $30. For higher prices you'll get access to a suite of my secret tools that help when building products. And there'll be a team version, for a much much much higher pricer.

I know a bit about how these things work, and I can tell you for sure that the price will get higher over time. So the sooner you sign up the better. (Signing up to be notified is free)

When will it be ready?

It could take 3 months, it could take a year or more. I do not know. The amount of time and effort I divert into this project will be highly influenced by the number of sign ups I get at "". So if you want to see this ebook realised, go ahead and sign up. And tell all your like-minded friends to sign up too.

Sign up to be notified when the book is launched

Also, as a special bonus to anyone who signs up today, you get a free joke.


SimCity Drug Wars in the Real World

My name is Leon. It has been less than 1 day since my last harebrained scheme.

So the Australian Bureau of Statistics* recently put out a sim-city style game on iphone and Android, called 'Run that town' in which you compete for money and klout by approving/rejecting fictional development in familiar suburbs, using real statistics from that suburb.

The attraction of the game is that it uses settings that are intimately familiar to you, and makes you very aware of a whole host of statistics about that area. (You soon learn for example whether it's wiser to approve a local aged-care facility than a sports stadium)

And on the same day as I saw that I took a look at this interesting site, showing where and when real crimes have happened in my home state of Queensland. Right down to the address.

So - mashing the two ideas together - I thought, why not make a Drug Wars clone with a local flavour. You choose a starting street, anywhere in Queensland. And on each turn you can run from your current location to any of the adjoining real streets. The criminal behaviour in that street is based on historic crime in that street. (Magnified several thousand times to suit the intense pug-wars style of play). Obviously we take it global as datasets become available, but we market locally.

run that town plus crime stats

So now I present...

Okay, I've got nothing to present. I didn't implement anything. Yet.

I know some people though. This would be riiiight up their alley. You know who you are.

* The game was built by millipede possibly with input from Leo Burnett Sydney.


Two Flies! Bet Now!

So someone has made a channel where you watch two pet fish (unwittingly) play each other at Street Fighter II

It's a logical extension of someone who made a live feed of a fish playing pokemon.

And someone else (in the comments at Hacker News) points out there is a site where you can bet virtual currency on AI playing computer games against each other

Meanwhile: Australians are said to be so addicted to gambling we would bet on two flies crawling up a wall.

How can we directly monetise this?

I need two walls, two flies.... or rather one wall with a division, so that the two flies are kept separate.

A camera that can see both and track their positions....

I hear that 'OpenCV' is the library to use for this sort of thing. Here's the guide to installing OpenCV on windows, and developing apps with OpenCV inside Visual Studio.

How to organise a bet involving two flies?

At a point in time, X, we look at the position of the fly on the left and the fly on the right, and draw two virtual horizontal lines to represent their starting positions. (A left starting position and a right starting position).

We then start a countdown timer at 90 seconds, and also draw two virtual finish lines that are a fixed distance above the starting positions.

If either fly reaches their finish line, that fly is the winner. If neither fly reaches the finish line when the timer reaches 0, then the highest fly is picked as victorious.

To ensure continuous betting is possible, we have one further rule: If a fly starts more than half way up the wall then their target is below them: their goal is to walk down the wall, not up it.

The flies are given gruesome competitive names like Blood-drinker and Face-Eater. They have their own legions of fans and admirers.

Rumours that the flies are entirely digitally rendered are just that. Unproven... if well-founded... rumours. Nothing more!

The crucial thing is to select flies that have high winning stats and then allow them to breed. (I guess it's easier to just eliminate the flies that do poorly)

There are two paths ahead of me. One of them is to remain a regular work-a-day Joe. The other is to become rich beyond my wildest dreams by farming maggots. Decisions decisions.


Boothby, a personal database

I have this problem where friends of mine keep having babies.

I don't know if you've been to school, but if you have you might know that the mathematics of having babies is pretty scary. Take rabbits. You start with two rabbits, leave them alone for a little while and next thing there's a heck of a lot of rabbits. There's an exponent involved. It's all quite sinister.

The trouble with this growing number of babies is that I'm expected to remember all their names and genders and ages and so on. But while their numbers are exponentially growing my brain is not undergoing so much as linear expansion. If anything it's contracting of late.

And while there's already places online for storing these 'social graphs' they fail miserably at the kind of remembering I need help with and are more hellbent on serving me ads than easing my mental burden.

Then I saw that Steven Frank just implemented something similar to what I wanted, he called it Dossier, so rather than implementing something from scratch, I could steal all his ideas and re-brand them as my own.

Hence I wrote this thing, Boothby.

It's for storing the things you can't remember.

Try Boothby Online Right Now.

Later I might make it a little standalone kayak app, that you can install on your own computers, and sync via dropbox etc.

Or I could charge you 10 bucks a month to grant you access to your own private online instance. That's the business to be in.


The Nimble Bundle

To celebrate John Venn's 180th Birthday, we're having a Month-long Mega-Month of Set-Loving Madness.

For the rest of August, NimbleSET and NimbleText will both be available as part of the special "Nimble Bundle".

If you buy the bundle you'll save $10 over what you'd otherwise pay. That's a handy piece of cash to take home.

Venn Diagram showing NimbleBundle as the intersection of NimbleText and NimbleSET

Or to put it another way. When you buy NimbleText, for just $5 more, you get NimbleSET thrown in.

Here's a cartoon of Me, throwing NimbleSET in for $5.

cartoon of me throwing in nimbleset for $5

I'm not sure why I look so angry. Maybe because it's so cheap. I'm angry to be throwing away my work for such a steal, yes that's it.

Now, just for fun, try saying "Nimble Bundle" five times quickly. "Nimble Bundle, Nimble Bundle, NimbleBundle, Nindle Bumble, Bumble Lindel."

You're still here? Ah well, if you're going to keep reading you may as well stick around while we discuss the behavioural economics that underpins the things I've attempted above.

First let's discredit the stated premise: this has nothing to do with John Venn's Birthday. Yes, NimbleSET is software for Venn-diagram-style comparisons of lists... but why would I know or care when the man's birthday is? I'm not even facebook-friends with the guy. No, the John Venn thing is cover for a different motive. I happened to see a google doodle about him and thought it would be a plausible 'angle' for the psycho-swindle I wanted to inflict on you, my good friends.

If it's not about John Venn then what is it about? Well, money, of course, and my desire to separate you from yours, making it mine forever. But what's the specific psychology of the situation and why is it likely to increase the fatness of my wallet?

When I first put out NimbleSET (back in January) I saw a sudden and permanent *decrease* in the sales of NimbleText. And it wasn't made up for by sales of NimbleSET, not nearly. I tried to ignore it, and tried to explain it away, but I was really at a loss to understand it. Until I read about the decoy effect and the idea of decoy products.

The decoy effect is a well tested phenomenon where:

"consumers have a specific change in preference between two options when also presented with a third option that is asymmetrically dominated."

It wasn't exactly the decoy effect, but reading about that was enough to give me a hypotheses about what was happening. The purchase page went from listing 1 product for $20, to listing two products: 1 for $20 and 1 for $15. The cheaper product (NimbleSET) suddenly made NimbleText look expensive!

So now I hope that by putting a third product in, that is clearly better value than either of the others, it will dominate the sales. So under this latest hypothesis, both NimbleText and NimbleSET are the decoys. The best deal is the bundle, and you'd be crazy to buy anything else. If I'm wrong, then, no problem at all, I take the Bundle off the market and head back to the psychology books for futher hints.

I'll keep you informed, so please join me for the ride! And if you have other, better theories about what's going on, please tell me. It's all a mystery to me.


Need an idea? Let me give you one:

I had this idea for a web site, and even checked the domain, it's still available!:

Give Need --

Here's a mockup of the minimum viable product:

i can give... i need... simple website

I guess the idea is, anyone can give and anyone can need. Spam and vulgarity gets flagged and removed quickly. Givers and Needers build reputation by being reliable and so on. Geo-location is important.

I don't have the time, but If you want to do this, go ahead.

Here's the html for the mvp mockup.

I was wildly enthusiastic about the idea for juuuuust long enough to create the mockup using zen-coding (which I recently re-discovered) and where i wrote most of the mockup just by typing:


Like I said. If you want the idea, it's yours. I'm still busy building All These Other Empires.


A Dashboard For Everything and Everything on a Dashboard

I tweeted the other day:

I have too many dashboards, so have decided to create a dashboard of dashboards. #

Completely serious.

Dashboards are one of the few situations that solve this pattern: "The only solution for too much $0 is more $0." Like science. (Unlike violence, ditch-digging, etc)*

To help manage NimbleText, I've currently got three dashboards that I visit all too frequently.

First, there's google analytics. I mostly track where visitors are coming from, and whether they're doing the things I want them to do (download nimbletext, visit the pricing page etc.).

Second, there's the (newly created) page where I analyse samples of the patterns that people are creating in the online version. (This is a bit of a privacy minefield, so I've added a note about that here).

Then there's 'dash', the recently created dashboard where I have a bunch of information about sales and product activation.

And currently in the works is another dashboard for managing A/B tests. It will probably be at, my favorite domain that is currently under-utilised.

That'll make a total of four dashboards. What the hellz!? No one needs four dashboards! Even Dashy McDashman, the dashing darling of Dashville only needs three!

So I plan to make another dashboard that gathers together all the information from the other four. (It'll be at AirBadge too.)

To grab data from google analytics, it will use whatever rest-ful services it can get its hands on. To expose data from my own sites, I'll probably create some jsonp endpoints at each of those sites. Oh, we can call them micro services, and feel modern and clever.

The new dashboard will be basically a page with a bunch of little widgets (<article class='panel' >...). Each widget will have some data attributes that describe how to grab the data it wants. Some widgets will be charts, some will be tables. Some will automatically refresh. They'll probably be laid out using isotype which I've used before. Some could have live information, using that signalr business.

Darling developers of the Mac world, Panic, have created a beautiful dashboard product called Statusboard. My goal is to have almost none of the features of Statusboard, but all the beauty.

* At this point while writing the article, I wanted to list all of the words that do or do not suit that pattern. To accomodate creating and sharing that list, I realised NimbleText Live needed a way to share a pattern, something in the style of JSFiddle. (Richard Mason suggested this feature just last week). So I had to stop writing this article and add that feature in. It's there now. Look for the little Save icon.

Here's some other patterns I've created: Atwood's Law versus Murphy's Law and other correlates. Superhero name generator.. Etc.