Monday, 28 December 2015

Contemplative video games Part II

Back, with the round-up and value part of the summary. In Part 1 I rounded up 12 titles that approximately fit the bill of games that might calm the beast within. They were Dear Esther, Bastion, To the Moon, Trauma, Mind : Path to Thalamus, A new Beginning : Final cut, The Novelist, Year Walk, Proteus, Eidolon, Gone Home, The Graveyard.


 Do the game mechanics make sense, is the keyboard+mouse usable? Are you asked to achieve incredible acrobatics with the mouse to click on a tiny item? Is the game repetitive and non nonsensical at times frustrating in terms of UI? A score of 5 means good and obviously 0 = unusable.

Dear Esther5
To the Moon5
Mind : Path to Thalamus5
A new Beginning : Final cut4
The Novelist5
Year Walk5
Gone Home5
The Graveyard2


Price versus all the rest of the scored factors. Anything over £5 is penalised due to playtime expectations, and anything that has a free complete demo like the browser-based option to play Trauma will get a 5 for excellent value.

Dear Esther£6.994
Bastion£2.74 (demo)5
To the Moon£1.395
Trauma£4.39 (demo)5
Mind : Path to Thalamus£2.993
A new Beginning : Final cut£0.795
The Novelist£5.494
Year Walk£4.792
Gone Home£4.495
The Graveyard£3.99 (demo)2

Artwork : Designed by Freepik -

Youtuber New Year resolutions

So we have a little challenge and a new years resolution declaration all in one.
Roux Harbour
The challenge is to share your new years resolutions for your YouTube channel. I hope as many people possible in the Community will participate.

So, here goes with the resolution making rules:
Record Yourself;
- Introduce Yourself, Your Name, Your Age, Your Nationality
- Introduce Your Channel, What Is It About, Mention If You Have Regular Segments etc.
- Tell Us ONE Resolution That You Have For 2016
- Tell Us What Inspired It/The Thought-process Behind It
- Tell Us If You Think It's Going To Be Hard, Fun, Difficult, Easy etc. To Achieve Your Goal
- Say This Sentence; What Is YOUR 2016 Resolution? I'd Love To Read All About It! Share In The Comments Below!

Hi I'm Conrad aka Zaphodikus, 45, South African, naturalized UK citizen.
My channel primarily covers my adventures in the Augmented reality and outdoors Google game called Ingress, it's very much an amateur learning experiment as channels go. More eclectic, often sporadic the channel keeps me honest, it keeps me playing a game which is much healthier than the Minecraft addiction that preceded it. My goal is achievable, but really audacious, I'm a computer programmer, and we call goals like this a BHAG, Big, Haury, Audacious, basically a mission statement size resolution. So my goal is to get to around 5000 views per month - and eventually $5 estimated earnings. It's a very long walk and I'll need to grow from 30 to around 300 subscribers to get there. Wish me luck.

Sunday, 27 December 2015

Xmas went wrong, a little

It's the day after Xmas, and I realize that with Mom flown off to South Africa on a mercy mission, that Dad is stuck with 2 teenagers. Not exactly a problem untill you discover that Mr Braam Junior is having a hump  the gifts the Father Xmas gave for Xmas were not nearly good enough or just not up to expectations. Whatever, it's dumper time.

Rescue me Zoni

So I wrote a Letter to the Sony Entertainment Network (SEN) , yes God knows why they have 2 products that are essentially the same thing, but Playstation or SEN, it's the same piece of console junk at this point. So here is my letter:

1. I thought my son would start using the console again if I got him a game, our PS3 is almost a dustmagnet otherwise. He likes counterstrike, I suppose that's not a playstation game. But the game I got him sux apparently. I paid and downloaded
Call of Duty 4: Modern Warfare (1)
(£19.99)  downloaded beforehand so we would not have to wait for the download, which was a dumb idea. Don't get things for teenagers that they don't want, it got into a bug sulk over this. Please can you refund transaction  -----------------to my wallet?

2. I decided to make the best of a bad thing and topped up the wallet so he could choose something himself, but it turns out that Destiny: The Taken King (1)
(£19.99) is DLC which was not clear from the store - so now we have 1 game that we cannot play (transaction
-------- ) and one that we will not play. Is there a way to rescue this console. I really hope it's possible with a little help from you guys.

Thanks in advance

And I got a response a few days later: 

Hi Conrad,

Just a quick note to let you know that we’ve refunded your purchase of [Destiny Taken King & Call of Duty 4 Modern Warfare] and so £39.99 has been credited back to your account Wallet as agreed.

Your reference number -----------------------

Drop us a line if you ever need us again.


PlayStation Support


In a footnote to this situation, we also have a PS2, why? Will binning it pollute another small town's water-table with lead or should I recycle it along with the PS3 and buy yet another single-purpose device? Actually that's a lie the PS3 is a excellent blue-ray disc player, which would make sense if the remote control was not shaped like a fist and I actually had any blue-ray disks.

Steaming Steam

I hope the SONY support is better than Steam support  - note the dates and the fact that this Steam client bug below is still reproducible today.

Wednesday, 16 December 2015

New genre : contemplative computer games

This is a brand new genre of games currently dominated by no publisher specifically but inhabited largely by Indie games. It's what I call the contemplative games.

Now I've been gaming for ages, like, when you ask me  "What was your first PC based RPG?" I'll shout out TOEE for example. If you don't know it, you were in nappies at the time. I used to create Doom and Quake LAN parties, and my first youtube was in fact a Lan party promotional clip. Yes, we even used phones, serial cables and co-axial cable for our first gaming Saturday. In those days we always had a BBQ (or braai) to follow. But let's leave the romance behind and get to the core of the contemplative games genre.
These games all have only 2 things in common:
  • Dying is not a bad thing, and there is zero stress
  • You will not get carpal tunnel syndrome
In a few of the games in this category, it is possible to die, while playing Anna for example, if you fall off cliffs or just walk into the water, you get a gentle rebuke and resume a few yards away. (spoiler: Anna requires you to step off the edge sometimes, literally and figuratively) . It's no secret and would not be fun, but in Bastion, you will die too. The narrator tells you off, but in a lazy kind of way, almost like a benevolent grandmother chiding you for stealing a biscuit and letting yourself be caught. Bastion is one of the few games in this category where a lot of crazy clicking is involved. But its in this category for a reason, and that reason is a set of elements the contemplative genre all have to score very highly on to get included. A contemplative game is never a shoot-em-up either, so its never going to deliver 60 hours of playtime, in fact 3 hours is the median. They are thus not a target market for publishing houses, and are thus a little harder to find since they occupy a niche. But it's that niche that I have come to love, which is why I'm sharing it today. If any of these games do interest you, please wait for my next instalment before buying anything, I'm going to tackle Money-Value and line them up in a rough order next week. Broadly I'll be scoring on Artwork, Sound, Plot Playability , Value and stinkers (in next week's post).


To be a truly good contemplative game, there must be great artwork, or great soundtrack, sometimes both. Bastion scores so highly in these two areas that it makes up for the fact that it's a top-down isometric platform-shooter game. So at this point I'm going to go into the list and hint at the scores.
Dear Esther 5/5
Bastion 5/5
To the Moon 5/5
Trauma 4/5
Mind : Path to Thalamus 3/5
A new Beginning : Final cut 3/5
The Novelist 4/5
Year Walk 2/5
Proteus 2/5
Gone Home 2/5
The Graveyard 2/5

If a game you see here got a terrible score for Artwork, run down this page a bit more just in case it has a redeeming feature, no guarantees, since I have included a few stinkers.


Music, sound effect usage and environment immersion through sound.
Dear Esther 3/5
Bastion 5/5
To the Moon 5/5
Trauma 4/5
Mind : Path to Thalamus 2/5
A new Beginning : Final cut 2/5
The Novelist 2/5
Year Walk 2/5
Proteus 2/5
Eidolon 3/5
Gone Home 3/5
The Graveyard 2/5


I'm going to come right out here, this is probably the most subjective scoring area. For example I scored A new Beginning into this category only because the plot was about Green activism and time travel. It's a point and click adventure, and unfortunately you will die and will have to do a few puzzles, but none of  those where you go to location A, collect item, return to B, collect Item, go to C and then back to A.

Dear Esther 4/5
Bastion 5/5
To the Moon 5/5
Trauma 5/5
Mind : Path to Thalamus 3/5
A new Beginning : Final cut 3/5
The Novelist 4/5
Year Walk 2/5
Proteus 2/5
Eidolon 2/5
Gone Home 5/5
The Graveyard 2/5

Next week: Playability and Value

To score in this area, the game must be mechanically good, not having mouse support when its really needed will kill you, not having ergonomic keyboard features when it's needed likewise.

Many games in this category are low value, there are many reasons for this, as I've hinted at last week.

Sunday, 13 December 2015

Time until Tescos cereal aisle contains e-ink displays on packaging

James: 3.5 years
Conrad: 5.5 years

Time until tescos cereal aisle contains eink displays on packaging.
(written on 13/7/2012) Friday 13th.

Monday, 9 November 2015

Notable testing blogs

I'm continuing from last months quick post on the Software Testing club challenge.

The challenge is to comment on software test blog or forum posts in ways that add value or help you and others to learn and internalize.
(A #MOVEMBER update)

  • Excellent article about the need for Test to be given a tank-you for doing what is essentially a depressing job.  (
  • Why we are Automating the wrong tests (but not what that actually is, but still good validation) (Dorothy Graham)

Monday, 2 November 2015

Dead computer

So last week I finally grabbed the cake and upgraded  to Windows 10. I did this slightly by accident, and ended up doing a clean Windows 10 install the next day anyway. Not because the upgrade failed, but because in retrospect a clean install would let me get rid of all the dodgy registry keys and malware scripts and binaries scattered about.

Windows 10 upgrade is surprisingly smooth - even o na large old hard disk. Just leave overnight to cool and welcome to new desktop in the morning. It is really quite slick.

But my real problem was a motherboard with bad I/O channels which have been slowly creeping up on me in the last few months. So tomorrow I'll be compiling a list of PC parts and building a fresh machine.

Hardware research notes follow:

Omitting graphics, power supply and case - will try re-use those from my existing box, since they are in good nick still or recently bought.

CPU £167.97 amazon
mobo £65.41 dabs
RAM   £60.87 amazon
all-in : £294 
sounds good?

Friday, 2 October 2015

Software Testing club community challenge

As usual I only find something I want when it's already sold out. Does this happen to you too? Last week it was a fund raiser walk I wanted to join, which unfortunately has already closed it's entries. So because it's actually going to be on this weekend, and, well I'd still have to raise some sponsors as well. But instead of waiting for next year, I'll use this timing as a warm-up for next year's Cambridge Starlight Walk in May 2016.

Why is this relevant to Testing?

I spotted an August challenge put up by @rosie, but it's already mid September.

Challenge = Post on 5 test related blogs.
I have done so randomly myself, and with mixed success, but aside from twitter sources, here is a starting list with an automation bent to it.

Post 1:
Post 2:

Post 3:
Post 4:
Post 5:


David Burns is not taking any interactions/comments :

Tuesday, 22 September 2015

More Art and Movie creation tools

I really wish I could find more time to spend on creating stuff. I actually went to proper art classes as a kid. honest. I really did, although I used to deny it at the time. And no I'm still crap.
But my mom is not, so there is hope for me. And she painted the pics on this page and sent them to me over whatsApp.

But if you are not artistic, there are some tools that will make you look like Picasso, honest.

Gimme free tools  (not so convinced about this one)

Since my 2 boys are the real internet free tools gurus, I'm going to be consulting with them. so expect an update on these.

Gimme free overlays

cc attribution overlays :

Wednesday, 9 September 2015

Six Thinking Hats

Last night I joined a couple of software test engineers to discuss the Six Thinking Hats in a pub, in Cambridge. As you do, or at least we do on semi regular evenings as an extension of a Meetup which occurs monthly in the mornings. Now the evening meet is not an excuse to combine better software validation with alcohol, but rather to dive deeper.

If you are a Software Tester, based near Cambridge, you will only get to the office slightly late, on the last Wednesday morning of every month. And instead, get to meet early with us, grab a cuppa (hence the name lean coffee) and a croissant or other appropriate pastry. We meet before the day begins, and although not always fully awake, we cover many of the basics, have a very structured and lean/agile topic discussion format that feels more often like hot potato. The format is highly accessible, not everyone has to come with answers or even expertise. Beginners especially benefit, and we can all network, and grow. OK , so enough about the lean coffee morning, I hope anyone reading this with interest, well you should just in fact get there and try it.

Six Thinking Hats

Is a lateral thinking technique used to solve not just problems but also to analyze working solutions. Based on the book By Edward de Bo ISBN 0-316-17791-1 , it is also the source of the mystery third binary state Po. Po is the third thinking state. But since this was a serious meeting, we had some hats and an exercise which was awesomely driven along (although I talked and interrupted a lot as usual) by Karo Stolzenberg  who is our current chair. If you are keen to dive deeper as a software test engineer, join our meetups and grow. Follow Cambridge Software TestingClub @CambridgeSTC.

 I'm not going to go into what I took away from the Lateral Thinking and Six Hats as we covered them, there are a few good tips in it at any rate or source.

For your entertainment, here are the hats.

Friday, 10 July 2015

Use FFMPeg to concatenate mp4 files

# ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
# ...
# ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4
$ffmpeg = "c:\tools\ffmpeg\bin\ffmpeg.exe"
$s = ("MAH00383.MP4|MAH00384.MP4|MAH00385.MP4|MAH00386.MP4|MAH00387.MP4") -split "\|"
# yes a list of files with '|' char separator is bizarre, but it's what I had at hand.
$s | % { & "$ffmpeg" -i $_ -c copy -bsf:v h264_mp4toannexb -f mpegts "$((ls $_).basename).ts"}
$inputs = ($s | %{"$((ls $_).basename).ts"}) -join "|"
& "$ffmpeg" -i "concat:$inputs" -c copy -bsf:a aac_adtstoasc output.mp4

Wednesday, 17 June 2015

Overtired middle aged hacker. Seeking a stunt double

Spotted this earlier in the week, to create your own, just click on the link or on the images.
The Pulp-O-Mizer, is the world's most advanced customizable pulp magazine cover generator.
It creates retro well-worn covers from the future that never was, almost steampunk, almost 70's, not dull, never dark.

Here's what they say.
"        Cards, Postcards and Flyers can be customized with your own messages and images on the inside (for cards) or on the back (for flyers and postcards). Just click through to the product page and select "Customize It"."

Wednesday, 27 May 2015

Android Studio Project ideas for mobile

brief: to teach budding programmers how to program on probably the coolest platform, mobile.

We will probably port this web app to mobile and then teach the kids how to write it.

New Android Studio

May 2015
Tasked with getting kids going on writing an Android App (Android was chose although IOS is allowed.) I think we have 6 hours, maybe 18 tops.
1. Download the Android Studio (this also will get you to download the JDK as well)
2. Finnish installing both, decide on how you want Studio to look for you
3. Learn a bit of Java - just enough to create a simple app to be honest
4. Learn to debug it
5. Personalize and have fun bragging to your mates as school

IPTables forwarding and custom logging /w WOL

Basically I'm wanting to do 2 things on the firewall/forwarding.

1. Forward all packets on a port example 25565 , from one address to another.
2. Log all the "connect" packets into a custom log file (preferably on a ram-drive since I don't want the actual logs for long.)

basic iptables options:
How to add a new log file:

OK, now for the rule:   ???
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25565 -m state --state NEW,ESTABLISHED \
   -j DNAT --to 
And have a log of the "NEW" connection (must come before the ACCEPT rule)
iptables -A INPUT -p tcp --dport 25565 -m state --state NEW -j LOG \
   --log-level 4 --log-prefix "newconnection"
I'm gonna spend a lot more time trying to get this to work than what I thought initially. But I gotta try.
Here is the English translation:
1. "LOG" all "NEW" connections on port 25565 to a separate file
2. "FORWARD" all traffic to port 25565 to address
3. Write python script to parse the log entries, run every 5 seconds, delete log file. Fire off a custom WOL UDP packet directed at
4. Done

Monday, 25 May 2015

Rooting Samsung Galaxy S3 version 4.3

Fortunately I found this link How to enable hidden developer options on your samsung galaxy S4 and the same instructions work for the S3.
Simply follow these steps:
  • Go to SettingsMoreAbout Device
  • Scroll down to Build Number
  • Tap it repeatedly (It'll show a message telling you how many more times you need to tap it to enable developer mode).
  • See the Developer options menu under SettingsMore
 Next you want the full version of SK's tool.

Thursday, 19 March 2015

Why API design matters

Disclaimer: This post is not all my own work.

I recently had to take a look at API exposure in user-created Powershell modules and in a new internal programming language that uses XML. I found that a lot of my conventional knowledge around what makes programming easy and bugfree was not being followed. Why is not the concern, but how was. So I have copied and pasted and referenced and linked and pasted more and re-organized and added some of my own stories to other peoples work below.

So why does API design matter? [R1] 

As someone who has to consume APIs from lots of places, the APIs I’ve been most productive with, follow a few rules. Here are some I’ve picked up over about 20 years.

Please write your API in a consistent manner:

  1. Consistent naming within the API itself. Use verbs, nouns, keywords in EXACTLY the same style or way all of the time. 
  2. Consistent with the target environment it will be used in. Take the programming language into consideration, python, Powershell and so on. If it’s on .NET, then consult Microsoft's naming guidelines.
  3. Consistent concepts. Factory pattern? Builder pattern? Static methods? Interfaces? Just pick one, and stick with it. REALLY. There is no such thing as a small exception to the rule. It will stick out as a big sore thumb. More than 1 exception? Your API is more and more amateur.
  4. Make it easy to figure out how your API will work. I use APIs from lots of places try not to assume I remembered that your personal preference for naming widgets changed at some point from always having an ‘s’ on the end, to dropping the ‘s’ later on when the last few functions got added. This goes for named arguments too naturally.
  5. Save yourself on documentation and the iterative code->debug->refactor and repeat steps. There are so many great pointers on the actual API development steps in this slideshow, that I'm going to just link to it instead [R3]

Here's another one: Specificity.

  1. Return types. Functions often return true false or an integer that indicates a code, or they return data. I have a pet-hate for the function that falls into the second category, but lets move to the last category.
    For example. When a function will return some data, don’t just say it returns Objects, and then leave me to guess what form those objects might take. Example: can I expect a, string, array or an object that has specific properties. I cannot know if your API is useful to me if you don’t tell me what properties it is going to return to me until I actually call it. Then going further, nothing guarantees that depending on the inputs the output may have varying sets of properties. Say for example I use your Get-widget(‘patrick’) to return a record about Patrick the starfish

    But how useful would it be to know that for example if I said Get-widget(‘spongebob’) would I expect this for example to get returned?

    Now "I" expected that to come back, because Spongebob is a sponge, but you didn’t expect that. So what a function returns is really really important.
  2. Naming
    Please don't get silly-long with names: StartProcesswithRedirection. You can often refactor super-specific things into a more generic name + parameters.
  3. String parameters for constants are often evil! In Powershell its often convenient, but when it is possible use enumerations.  I'd much rather like an enum I can investigate: or a Get-RedirectionEnums() ‘none’,‘stdout’,’stderr’,’both’. Now documenting this is all fine and well, but if in a future API you decide to deprecate ‘both’, and require people to use something else, all they have to do is call the RedirectionEnums() command, they don’t have to read the docs, and you don’t have to update your documentation in very single damn place where you copy/pasted the above values. Smart?

Be complete and verifiable

  1. Verify: There’s nothing worse than pulling a trigger and then thinking, hey! Did that work right or not? I believe that for meaningful software to be written using any language (or API) every operation to modify the system needs to have a similar function to restore the system state or at very least to probe the state. This means New must always have Delete or Dispose. Add must have Remove, and so on and so on. To not have this causes API orthogonality issues and blocks many use-cases. What I’m talking about is not new, See chapter 4, The Art of Linux Programming 2004 [R2] .
  2. Orthogonal: In general to myself it makes more sense to design for and create orthogonal APIs so that not only can all future workflows be done with your API, but also the API be fully testable and stable. That way I never have anyone coming back and saying things like:
“Hey John, I need a feature to be able to move a widget from one folder to another. Can your API do that?” My response must always be “Yes Spongebob!”, because it's only 3 lines of code:
1: create blank object in the new location
2: copy the old object into the new blank location
3: delete the old object
I don’t have to change my API, and the user does not have to write more than 3 lines of code.
 3. Symmetry and New/Delete: It also makes sense to me to always implement an undo for every action to allow for cases where an operation fails for any reason. Depending on the API or service, and the point that it fails, it’s otherwise impossible to know if the operation is half-complete, or got rolled back or just never modified the system at all before failing. Pairing up getters with every setter and New() with Delete()/Dispose() makes this question go away. It makes automation and remote control under failure scenarios really easy. If an API does not support rollback/undo operations, you want to often be clear why an undo function is not necessary. For example there is no function to uninstall Windows 7, why? Well because not only is it not functionally useful, and format.exe would have the same effect, but the workflow and user experience is that you only ever want to uninstall in extreme corner cases. Microsoft want you to pay the license money and stay. If your API does not need undo(), either explain why it does not, or we make it clear in the API design. Symmetry is everywhere.
Works in progress:
In cases where implementing all api methods to complete a pattern, is not realistic due to time constraints un-implemented function stubs can be used to allow static analysis of the API surface. This process of stubbing in time-bound or agile development is typical TDD process. Not closing or making an API encapsulate it’s purpose fully, conversely leads to accidental functionality leakage into other pieces of software which either introduces duplication or interface sanity bugs. 
5. Easy to learn: 
Compactness or completeness of anything programming or real-world,  as with APIs is about the sweet spot that allows you to not have to worry about external systems that you know nothing about that lie beyond the API or interface that controls them. For example you don’t have to know how an AM/FM radio works, to get sound on either an AM or an FM frequency. Good APIs meant you only need to worry about inputs that have meaning to you the user of that API. If a specific implementation of the radio class happens to have an API that tells you the signal strength or some other technical details, well that’s totally optional and does not interfere with using a radio in general at any point.

My Creds

So you may ask why Conrad are you qualified to sprout all of this? Well, that's because I once wrote all of these drivers against an interface that never ever broke once over a period of 12 years:
Asea Brown Boveri Procontrol 214,Allen Bradley SLC500,Allen Bradley Ethernet TCP/IP,Allen Bradley DH+,Centralised Fire Panel 2000,Conet Exception-based,ConetPCI Exception-based Driver,,D Le Roux & Associates MUL-T-LINK 8.1,,Eagle PC Card DRiver,Eagle EDR-Enhanced (EDRE) PCI Card,Electromatic Optolink V24 Dupline 128,GSM SMS Driver,GSTProfi Exception-based,GST Profibus SoftFEP,Hitachi Ethernet,Hitachi H,JOYSCC Exception-based,Koyo DirectLogic-105 Range K-Seq.,Koyo DirectLogic-205 Range K-Seq.,
Klockner Moeller SUCOM-A,Koyo DirectLogic Ethernet Protocol Driver,Serial,Mitsubishi AJ71UC24,Mitsubishi AJ71E71 TCP (not UDP),Mitsubishi FX TCP (not UDP),Mitsubishi FXS,Mitsubishi Q/QnA Ethernet,MIT_M2M,Modbus I (RTU and ASCII),Modbus Plus (SA85),Modbus Radio,Modbus Ethernet,Moore ICI 320,Omron SYSMAC,,Opto 22 (OPTOMUX),Pager Exception-based (Discontinued!),PolyComp Sign
(GTX),PolyComp Sign Ethernet,RDC8102 Exception-based,Sascom (RTU and
 ASCII),RS-232 Barcode Scanners etc. (SCANRS),Schiele SYSTRON S 800 3964 and 3964R,Schiele Custom Protocol #1,Siemens S7 Funtions,SiStar PCU Server Driver (Intel),SpaBus,Spectrum Tele-RANGER,Spectrum SCADA-MUX,Square D Sy//Ma
x Serial,Strike ENERMAX,Strike ENERMAXP Serial and Ethernet driver,TDC/I/0550 Serial,Texas Instruments 500/505 Series,Texas Instuments TCP/
IP Ethernet,TOSHBIN (RTU and ASCII),Toshiba (RTU and ASCII),Toshiba T2 Ethernet,Yokogawa uXL DCS.
And those are just the ones I wrote, customers added quite a few, and the full list is double this size.
Basically I helped publish the API and we sold the spec as a public API along with some demo code. What's remarkable for me is that the API started as 14 functions, it expanded to over 21 before being completely re-written later. Moreover it was of the Service Provider Interface (SPI), where API breaks are close on 97% fatal, and so I suppose, that's where and why I learned what you can get from Google in 5 minutes now.


Why does API design matter
The Art of Linux Programming
Why good api design matters : slides :Joshua Bloch
Why good api design matters : video :Joshua Bloch
Image "How the analyst designed it" CC attribution