Archive for January, 2013:

A debugging war story

The bug has been around for most of the last year.  It’s intermittent and a pain to replicate.  We hadn’t heard anything about it from our customers, but our test system threw the errors up when we performed our nightly runs.  But the failures were all slightly different.  And different tests were failing each time.

All we knew were we were blue-screening, and that the problem was something to do with memory corruption.

The first thing to do was look at the crash dumps.  And the good news was that our drivers weren’t on the stack.  The bad news was that more and more testing showed the problem only occurred when our drivers were loaded.  You see, the problem was clearly a memory corruption – but the crash wasn’t happening at the time memory was being corrupted – no, the crash was happening when the memory got freed. You couldn’t tell who corrupted the memory, just that it got corrupted.

We tried driver verifier.  As soon as we put verifier to work on the driver we suspected, all the problems went away.

We did find that close to where the corruptions occured there was often a memory pool allocated with the tag ‘HAL’ – what was interesting about this pool, which looked like being some sort of mapping between addresses and page frame numbers, was that it seemed to have one entry too many – it had overflowed the space allocated for it.  The good news is it wasn’t one of our pools.  The bad news – I was beginning to suspect it was something like a double free of memory which caused this situation to arise.

Because we thought our driver might be causing this, we added all the instrumentation in the world to its memory allocations and frees.  But this didn’t show anything up.  The driver seemed to be working perfectly.

We were close to giving up.

One of our test engineers went through the test logs, and came up with a set of situations most likely to cause the problem.  With a bit of effort he made a reproduction of the bug that could happen in about an hour – much better than the six hour repro we had earlier.  One of the things he found was that the issue mainly happened on Windows 2008 Sp2 32 bit.

We then wen’t through ruling out any number of potential hypotheses.  Everythign from ‘Was a DVD in the drive at the time?’ to ‘Does it only happen at on machines with 2 CPUs’.  Once we had ruled out the impossible, whatever reamined, however unlikely was sure to be the cause.

Unfortunately, we ended up with the same suspicious driver.  And the same lack of clues.

Not knowing where else to look, I tried reproducing the reproduction on a checked build of 2008 sp2.  I didn’t hold out much hope.  We frequently use checked builds in developing our code, and this issue looked like being timing specific – the checked build was going to play havoc with the timing.

I installed the drivers, rebooted, and:

Assertion failed: RaidIsRegionInitialized

OK.  great.  What now?  Google was our friend.  Well, almost.  We found two results.  One was an MSDN page which didn’t mention anything about this.  The other wasn’t clear but had a few lines of hope

You may need to call GetUncachedExtension, even if you’re not going to use it. IIRC, on Win7 Storport would allocate the DMA adapter object during the GetUncachedExtension context. Your adapter likely doesn’t have any DMA restrictions, so Storport probably doesn’t really need the DMA adapter object, which is why everything works without the call.”

And, as it turned out, we did.  We did need to call GetUncachedExtension, even though there was no reason for us to do so.

One line fixed our storport driver, removed the bugs, fixed everything.

A year of irritating, intermittent, bluescreens gone.  And a good reason to help us understand what, roughly, was happening:  Microsoft Windows was freeing memory which we had never asked it to allocate.  More or less a double free.

Its astounding how often my job ultimately comes down to being a Google Monkey.  But there was a lot of work to lead us to Google.  And some bad luck too – we used checked builds a lot, but – it turns out – not the 2k8 checked build, which was the one that had the assertion.  We only used that this time because 2k8 was part of the repro we found.

But figuring this out is something that our team (and it was absolutely a team effort) can be proud of.

Today is a good day to code.

The Rebirth of the PC

People are talking about the death of the desktop PC.  While Rob Enderle is talking about it’s rebirth.  I’m conflicted about both these stories.  I think they are missing the trends which will really shape how we come to think of the PC in the future.

Looking at the market now, there are desktops, there are laptops, there are tablets and there are phones.  We also have vague attempts to cross genre, with Windows 8 trying to reach between tablet and laptop, while IOS and Android reach between tablet and phone.  But this isn’t the future, this is a market still trying to figure itself out. I’m going to limit my predictions to a particular segment of the market – the segment which is currently dominated by the desktop PC.

The reasons we have desktops are:

  • They are more powerful than laptops
  • They are tied to a single desk, so that management can control where we work (and where our data stays)
  • They are more comfortable to use than laptops or tablets (at least for keyboard entry and pixel perfect design)

However, the game is changing.  The question of power is becoming moot.  Machines seem to be gaining power (or reducing power consumption) faster than applications are taking it up.  There is less and less need for more powerful machines.  And, where more powerful machines are needed in a company, it doesn’t make sense to hide them under individual’s desks.  It makes more sense to put them in the datacenter, allocating processing power to the people that need it.

In short, we don’t need computers under our desks, we need reasonably dumb clients.  Network computers.  Oracle could have told you that years ago.

That said, dumb clients never quite seem to happen.  And the reason for this is that is that smart is so cheap, there is in point in tying yourself down, limiting yourself to this year’s dumb.

Tying the computer to the desk is increasingly being seen as a limitation rather than a benefit.  It doesn’t just prevent working from home, it also prevents hotdesking, and simple team re-orgs. What is more interesting to companies are technologies which let them keep data in controlled locations – and again the same technologies which let people work from home are also keeping data in the cloud – but locking it there so that it is harder to misuse.  This argument for the desktop PC is gone.

Comfort is more important.  But by comfort we specifically mean comfort for typists, and mouse operators.  Tablets are going to cut into the market for mouse operators, and combinations of gesture and speech technologies will gradually reduce the advantage of the poweruser’s keyboard.  Text entry will probably remain best done by keyboard for the time being.  But the comfort aspects are changing.  My bet is we will see an increase in big, screens angled for touch rather than display, while tablets are used for on screen reading.  Keyboards will remain for people who do a lot of typing, but onscreen keyboards will be commonplace for the everyday user.

So – by my reckoning we will have (probably private) cloud data, applications running on virtual machines which live in the datacenter and being distributed to big screens (and still some keyboards) on the user’s desks.

This isn’t a particularly impressive point of view.  Its the core of a number of companies who are playing in that field’s business plans.

But what is missing from the view is the PC.  As I said : there might be big monitors acting as displays for clients, but clients doesn’t mean dumb.

Smart is cheap.  We could probably power the monitors running smart clients – and some local personal, and personalized, computing – from our phones.  We could certainly do it from our laptops.  But we won’t.  Because we won’t want to become tied down to them.

We will want our tablets and laptops to be able to carry on doing what we were doing from our desktops – but thats an entirely different issue.  Indeed, since I’ve suggested we might want to run some personal programs locally, it suggests we need something on our desktop to mediate this.

It has felt, recently, that the IT industry is moving away from letting us own our own devices.  That the Apple’s and Microsofts want to control what our computers run.  Some have shouted ‘conspiracy’, but from what I know of the people making these decisions, the reason is hands down ‘usability’ tied with ‘security’.  However, there is a new breed of entrant in the market which cares little about this usability thing – the Raspberry Pi’s and android dongles.  Smart, but cheap.  You – not any company – control what you do with these devices.  They are yours.  And in a company environment, they can quite happily sit in a DMZ, while they run software that gets full access to the corporate intranet.

The desktop computer could easily be something along these lines.  No need to make the devices limited.  No need to limit what they are able to do.  All you need to limit is their access to privileged data and privileged servers.  These devices become the hub that you connect whatever hardware and whatever display are appropriate for the job.  I can keep my keyboard. Designers can have their Wacom digitisers.

But you also make sure that these devices can be accessed from outside the corporate network – but only the things running locally on them.  This might require a bit of local virtualization to do well, but Xen on ARM is making significant progress – so we’re near.

This is my bet about the desktop.  Small, smart, configurable devices tied in with private cloud services, and whatever UI hardare you need.

But my next bet is we won’t even notice this is happening.  These devices wills tart turning up in the corporation without the CTO or CIO giving permission.  At first it’ll be techies – and the occasional person using an old phone or tablet as a permanent device.  But gradually it will become more common – and devices will be sold with this sort of corporate use in mind.  You’ll get remote client software preinstalled with simple user interfaces for the common user.  They’ll come into their own as corporations start mandating the use of remote desktops and sucking everything into the cloud – taking advantage of the same networks that the engineering services teams have been forced to make available for phones and pads.

The desktop PC will stay.  It will stay because we want more, better, personal control of our work lives.

When the network computer does, finally, make the in roads we have been promised, it will have been smuggled in, not ordered.

(Oh, and we won’t call them desktops, we won’t call them PCs.  We will think of them as something different.  We’ll call them dongles, or DTBs (Desk Top Boxes), or personal clients, or something else.  This is going to happen without anyone noticing.  It might happen differently from the way I’ve suggested, but ultimately, our desktops will be low powered, small devices, which give users more control over their computing experience.  They’ll probably run linux or android – or maybe some MacOS/IOS varient if Apple decide to get in on the game.  And while companies will eventually provide them, the first ones through the door will belong to the employees.)

What is Miracast?

I’m sitting with a bunch of friends, at Greg’s house.  Greg being a friend.  One of the bunch of friends.  Who I’m sitting with.  You get the picture.  I mention a particularly hilarious YouTube clip.  You’ve probably seen it, it’s the one with the cat.  Oddly neither Greg, nor any of my other friends have seen it.  So, in an effort to educate them, I summon all twelve of us to crowd around my phone and begin to play it for them.

This is life 12% of the way through the twenty-first century.

But what if things were different.  What if, instead of playing the video on my phone, I could beam it to Greg’s TV?

That’s where Miracast comes in.  With Miracast I could do just that.  We could all watch YouTube cats to our hearts content from the comfort of our Lay-Z-Boys.

So, why isn’t it here yet?

Well, as I write this, Miracast is quite a new standard.  And in a standard’s early days it takes time for things to begin to work well together.  But let’s look at what Miracast actually does:

Firstly we have to find out about the TV.  And we don’t want to go through all the hassle of connecting to Greg’s home network.  So we use WiFi Direct (which I’ve explained elsewhere) to create a peer to peer connection.

Now, for Miracast both devices have to be WiFi Direct compatible and both devices have to support Miracast.  So it will be a time before Greg gets all the bits of kit necessary.  Nevertheless, several companies have certified Miracast TV adapters, so we might be able to start playing with this quite soon.

There have been previous attempts to create video streaming solutions:  Apple have their proprietary AirPlay – which does the job, but requires you to tie yourself both to an infrastructure network (though I’m hearing rumours that this is going to change soon – hopefully in a WiFi Direct compatible way) and to Apple proprietary devices (and I’m hearing this will change just after snowflakes decide to remove their travel advisory about visiting Hell).  Everyone else has been playing with DLNA – but the manufacturers of DLNA devices have failed to play nicely with one another, and DLNA relies on everyone being able to decode every format of video.

So what Miracast does is specify one video format (H264 – which is pretty widely used) and then provides HDCP DRM wrappers around it which are identical to those used by cabled interfaces.  Miracast essentially becomes a cable in the ether.

And this will solve all our AV problems, right?

Well, Miracast doesn’t support audio only (which is a bit of an oversight), but the WiFi alliace certification does at least mean there will be some interop testing going on.  The key thing to remember though is that Miracast is just a virtual wire – it doesn’t control who can access a particular device, or allow you to control anythign about the device other than what is shown on the screen.  In short, its a technology which could well be useful in home AV, but it isn’t the complete solution.

I don’t want my, I don’t want my, I don’t want my Apple TV

In the late nineties, I worked for a dot com startup doing some early work in the digital set top box space.  Video streaming, personalization, web browsing.  It was the sort of thing which only became popular in the home about a decade later.  We were too early (and probably too incompetent).

These days its popular to think that the TV set is due for a change.  Some sort of revolutionary rethinking in line with what Apple have done to the tablet computer, the phone and the mp3 player.  Apple are usually considered to be the people who will lead this revolution (the rumours it will happen any day now have been around for years).  Others think Google might manage it.  And I’ve suggested Amazon could be the black horse.

But the more I think about revolutionizing the TV, the more I realise, I don’t want it to happen.  At least not like a TV version of the iPhone.

There are a few things I have realized about the television:

1. It’s a device for multiple people to watch at the same time
2. It’s about showing pictures and playing sound.
3. UIs for TVs are hard.  And generally ugly.  Your best bet up till now has been to control things with a IR remote control.  Ownership of the remote, and losing the remote have become the cliches of ancient stand up comedy routines.  We are just about entering the period when people might consider replacing their remote controls with mobile phones and tablet computers.
4. No one wants to browse the internet, read their email or post to twitter through their TV.  We might want to browse the web in order to get to YouTube or some other video playing site, but generally people prefer to read things they can hold in their hands.

It has gradually become clear to me that the home user isn’t going to be looking for a magic box – or for extra capabilities of their TV – which will allow it to take advantage of all the new content opportunities the web provides.  No.  They are just going to use their TV to watch programs with other people, together.  They won’t be installing apps on their TV. They won’t be browsing the web on it.  And they won’t be controlling their viewing with the TV’s remote.  They will be doing everything from their phone or tablet.

Think about it for a moment.  You can already watch TV on your phone.  And with airplay you can send anything you’re watching to your TV.  This is fine for an ‘all Apple’ household, but until lots of people get in on the game, I don’t see this as the future.

No the future comes with WiFi Direct and Miracast (plus a lot of extra work).

I’ve explained WiFi Direct and Miracast elsewhere, but to put it simply:  Miracast lets you beam video from your phone – or from any other device – to your TV.  Its like a wireless HDMI cable.

So imagine, if you would, the TV of the future.  It will be a box with no buttons, just a lovely display and a power supply.  Inside it will be WiFi direct ready.  (Hopefully WiFi Direct has some sort of wake on lan functionality, so that you can plug your TV in and put it in a low power mode awaiting a connection.  If it doesn’t, we’ll stick a discrete pairing button on the top)

You come in with your phone, or tablet.  You install an app – which might be something like iPlayer, Hulu or Netflix, but might also be a specialist app perhaps ‘Game of Thrones’.  How you pay for this (one off, or subscription) is up to the app publisher.  The app publisher can also decide if the app contains all the audio/visual data, or if the data will be streamed from some external source.  You play the app, and are offered a number of screens to play the video on.  You select the TV and you are away.  The video is streamed from your phone to the TV set… or better, the TV set.

This world is already (just about) possible with Miracast.  But it isn’t quite enough.  Here are some ways we can improve on things.

Your friend is also watching TV with you, and decides to turn the volume up a bit.  The volume is a feature of the TV, so your friend needs to tell the TV to play sounds a bit louder.  So your friend reaches for his phone.  Now, he doesn’t live at your house, so he won’t have an app for controlling your TV.  There are two solutions:
1. We insist every TV provides a common interface, so that lots of people will make TV control apps.  In which case, he can then just pair with the TV and control it that way.  But this sort of standardisation doesn’t seem to work well.  So the odds are low.  My preferred alternative is to encourage the following:
2. When your friend pairs his phone with the TV, he is told there is a web service available (providing a web server ought to be a common feature of WiFi Direct devices that need to be interacted with) and goes straight to the front page.  At the front page he is given a web ui, and a link to download a better app from whichever app stores the TV company have chosen to support.

What would be even better is if the web app worked by communicating with a simple web service.  Each Web service could be different, but so long as they were simple, hackers could work out how they functioned.  And as a result could develop control apps which work with hundreds of different TV sets – just like multi-set remote controls work today.  In short everyone would have an app which would quickly be able to decide how to control whatever TV they came into contact with – while also having a web app ui workaround in case of failure.

So, this is fine for controlling the TV.  But what about if my friend wanted to pause the show in order to say something?

My suggestion is that along with WiFi direct linking devices, you want to make some other information available.  Possibly provided by a web service as above – but ideally in a more standardized way.  I would want the TV to tell me which device was currently streaming data to it.  And I would want to be able to join that WiFi direct group, to communicate with the sender.  Finally I would like the sending device to also provide me with a web interface – so that I could control it remotely too.

In short, the TV becomes far more dumb than your average Apple TV box is today, and you rely on the smarts of the tablets that control it.  Especially since the apps on the tablets can ensure a far better user experience in the process.

From here we need to consider other devices.  I’m pretty sure the PVR as is will die.  Broadcast TV will gradually wither, and the PVR won’t be supported.  But until this happens, the PVR and cable box will be part of the home entertainment system.  And increasingly we will get video servers which will hold the video data of films we have purchased – or even, perhaps, caches for external video providers.  In any event, we will control these devices in the same way we control the TV: pairing via WiFi Direct, then a web UI and potential app downloads to get to the functionality.  These boxes will stream the video straight to the TV.

We also need to consider audio.  Right now many homes have a TV with speakers, and also a HiFi of some sort.  Let’s rethink this:  Add a few wireless speakers, and let them be sent audio by a protocol similar to Miracast (but perhaps with some additional syncing technology)  Your phone could even become a remote wireless speaker – especially useful if you want to attach some headphones without laying out wires.

At this point we have everything we need to allow app writers to revolutionise television.  I still feel there is a lack of a central TV guide – but perhaps that will be forthcoming now we know we have personal touch interfaces and no longer have to assume everything will be controlled via the screen.

Whatever, we don’t need smart TVs.  We just need good displays, and sensible use of wireless technology.  The Apple TV as is, both is too smart, and not up to the job.  Lets make it simpler, and make the interactions between devices work well.

What is Wi-Fi Direct?

Here is the problem:  I have two devices – lets say my phone and a printer.  On my phone I’ve got an email containing e-tickets to a show I want to see.  All I have to do is print them out from the printer.

Not a problem, right?  My phone and my printer are both connected to the wireless network in my house.  So long as my phone can find my printer (and lets say it can – using UPnP or Bonjour, for instance) and knows how to talk to my printer (this is always a big ‘if’ – but lets assume for the moment it can), then my phone can drive the printer over the wireless network, and my e-tickets can be printed out.  Fine.

Now imagine I’m at a hotel.  I’ve still got my phone, but we’re now talking about the hotel’s printer.  The simple solution might be to join the hotel’s wireless network.  But that might cost money.  Or at the very least be inconvenient.  And imagine I’m not in the hotel at all, I’m in a branch of QwikPrint.  I’m not even sure I would trust their network.  I’m standing in the same room as the printer – I shouldn’t have to jump through hoops.

This is where Wi-Fi Direct comes in.

The way I use wifi-direct might be something like this:  I press a button on the printer, then I go to the wifi-direct setup on my phone.  On it I see the name of the printer (I know this, because there is a label on the printer just above the button I pressed).  I select the name, and we are connected.  Now I can print straight to that printer (with all the provisos about knowing how to drive it we had before).  I haven’t had to join a network.  I’m talking straight to the printer.

How Wi-Fi direct works is simple.  One device decides to act as if it is a wireless router.  The other device connects to it, but only if certain security considerations are met – such as the button on the printer being pressed.  In fact only one of the devices – the one pretending to be a router – needs to know anything about Wi-Fi direct.  The other just thinks it is joining a WPA2 network.  So there is a bit of backwards compatibility built in.  And for the record, this isn’t just a rehashing of the old Ad-hoc WiFi networks we knew (and generally tried to ignore), This is an infrastructure mode, 802.11n connection – just like your standard WiFi and can reach the same potential speeds – up to 250 Mbps.

There are a couple of extra twiddles – while service discovery works using Bonjour or UPnP – just like on a normal WiFi network, WiFi Direct also provides a little bit of extra service discovery majic, which means you can find services without having associated with one another or obtained an IP address.  This means that in my hypothetical print shop, I know that its a printer I’m connecting to.

So, why is this a big deal?

Well, if people support WiFi direct (and the early signs are good), it means we are getting close to the point where home automation might be possible.  Previously, had I decided to buy a washing machine or a thermostat which I wanted to control remotely, I would have a few, quite unsatisfactory choices:

1.  I could connect the device to my home wifi network.  This would be a pain, often involving configuring ip addresses, or at least ensuring the device knew the network’s name.  It would certainly require a more complex display than my thermostat or washing machine currently have
2. My washing machine or thermostat might decide to be their own WiFi router.  In which case I would have to switch network every time I talked to them
3. My washing machine or thermostat might be physically wired to my hub.  Lots more unnecessary wiring running through my house
4. They could have mobile telephony built in, and I would have to connect to them via an external website (security nightmare, not to mention expensive, and probably requires me to pay a subscription)
5. It could all be done via bluetooth.  But that has range issues.  And is slow.

With WiFi direct, the UI on the washing machine or thermostat would be a button.  The UI on the phone would be a drop down list.  And I would have a connection.  In short, the biggest problems of home automation are resolved, and everything else becomes a matter of money and software.

What I do

I don’t think the non-techies I know actually understand my job. I figure everyone understands the 1000 most common words in english (even foreigners.  As an englishman, deep down I have to believe they understand english, even if they pretend not to.)  So here is what I do, using only the 1000 most commone words in english (with apologies to xkcd):

I help computers pretend to be lots of different computers. I help Windows computers to think that they are using real things when actually they are only using pretend things that I have written. And I help them to use these pretend things and to tell other computers and other people about themselves and about the pretend things they want to use. I even help computers to learn to lie to themselves about what they really are.

Also I try to calm down people who use the things I write and make them happy. I’m not good at this bit.
And I try to make other people help computers like I do. Sometimes we have a meeting and then the other people wish they were dead. But then they try to help people that use computers and the things we make the computers do. Or they change job.

The thing that killed HMV

I’m not claiming to be normal, but the thing which killed HMV (or more specifically Fopp) for me was Borders closing.

When Borders closed, I was less inclined to go into town for an afternoon of mooching around bookshops, so instead, I got myself an Amazon Prime account, and shopped for books online.  Later a branch of Costa Coffee opened in Bar Hill, so I no longer had to go to town to find a coffee shop to read in.  Then I realized amazon Prime could be used to buy all the other little things I would make one off shopping trips for.  Finally I got a Kindle, and my need for instant gratification book buying was over.

For me HMV and Fopp were mainly ever impulse purchases.  I wasn’t a big music or DVD buyer, so I probably didn’t keep them alive – but its an important note:  The things that drew me to the highstreet are gone.  The high street is an ecosystem – and for me, its a ecosystem that is quickly dying.

Love, Drugs, and Sticklebricks.

Some things you should know about me (or some perhaps just some tedious narcissistic self reflection):

I am an introvert.  I live inside my head.  The role I portray in the ‘real world’ (I find that term laughable, as the real world is clearly the one inside my head – it has far more interesting avenues and pathways.  But outside my head is where books and other people’s ideas live, so I feel obliged to visit it from time to time and even to subscribe to the mythology that it is in some way more real) is distinct from who I am.  What you see is a shadow of me, a sanitized version, usually specifically constructed for whatever specific environment I happen to be in.  Work Ben cares passionately about his work, the aims of his company, and getting things done in the most effective way.  Home Ben would much rather be thinking about something interesting than the tedious drudgery of work. And Social Ben (who only steps out at carefully preplanned times, because being Social Ben can be quite draining) likes to get into deep, rambling, philosophical discussions, and then puncture the mood with a terrible pun.

This is about Core Ben. Well, it’s about ‘The Core Ben I am prepared to write about’ – some things, I guess some of my innermost secrets, will remain unsaid, in a dark void where I am not yet prepared to confront them.  But it is about the Ben who lurks behind all the other Bens.  The Ben who is constantly hiding from view.  Because the hiding is tiring.  And – with a new year (yeah, this is ‘New year, new me, resolution, personal growth bollocks’ inspired. And when I typed ‘inspired’ just then, the god of Freudian typo’s decided to put insipid on the screen.  Read of that what you may) – I want to be less tired.  I want the feeling of connection I have with the outside word not to be the sensory overload I feel now, but something more akin to passion.  And to do that, I think I have to be honest about myself, and who I am.

I don’t know how secret any of these things I’m writing about actually are.  For all I know, everybody who knows me possibly knows everything I’m writing here.  I’m not writing this to unveil any secrets – I’m writing so that I know I have unveiled the secrets, and that they are not secret any more.

Once, many years ago, I took a tab of acid.  It was the only time.  I enjoyed the experience; I was glad to have had it; And I felt no need to experiment with it further.  Now, to understand me, you need to know that before I tried LSD, I had researched it, I knew lots about how it was meant to affect me, what was likely to happen, and what risks were involved.  I try not to step out into the unknown without at least having assembled a guide book for myself.  I also find not knowing something that I think I should know unbearable.  If you ask me the wrong (or, perhaps, very right) question, you can send me off into hours or days of research.  I ask myself the wrong questions all the time.

But we were talking about acid.  I lay on the grass, on a hot summers day, waiting for it to take affect.  I was looking up at the white streaky stratus clouds that stretched over the sky.  Gradually they seemed to take on a new form – they warped into something more like a sierpinski’s gasket or koch snowflake.  Fractal shapes, mathematical in origin, which had become more popular with the masses as the computer revolution had allowed us to experiment with them. But more cloudlike.  And slightly shiny. As I looked at this, and recognised it as my first hallucination I said to myself ‘Oh fuck, I’m a computer programmer deep down inside’

Looking up at the fractal clouds, I was right.  I am a geek.  I love technology.  I love the possibilities it offers, and the way it changes the world.  I love to know how and why things work – not just what causes them to work, but also why people find them so compelling.  I’m a man constantly frustrated that the future hasn’t yet arrived, but also in love with the opportunities that technology provides me.  I used to love to program.  And sometimes I still do. But that part of me has been handed over to Work Ben, who trades the coding for money.  Now I don’t often have the energy and desire to write code for myself, on my own time, and this makes me sadder than one might imagine.  I have sold a part of me, and I don’t quite know how to buy it back.

Looking up at the fractal clouds, I was wrong. I’m not a computer programmer deep down inside.  Though I am something similar.  I’m not a scientist – part of me believes in science as the ultimate expression of truth, but another part rails against the limited worldview science offers.  I want to use the word engineer to describe myself.  But the word is overloaded.  Engineers are both the people who make sure bridges don’t fall down, but also the people who can’t get my computer to stop showing me the blue screen of death.  I’m part of the second group. I think I’m going to call us not engineers, but inventors.  Nevertheless, the question of inventors vs scientists raises a great debate inside of me as I try to understand who I am:

An inventor is not a scientist.  The scientific method says ‘Come up with a hypothesis, Come up with a way of testing the hypothesis.  If you can’t test your hypothesis, then your hypothesis isn’t worth thinking about right now.  Test your hypothesis by measuring something.  Then work out if your hypothesis is right or wrong, based on the results.’  Though this is also not what scientists do.  What scientists do has more to do with coming up with hypotheses that will attract funding, and conclusions that won’t piss off people who are more important that you in the academic community (or waiting a generation until people who are less attached to their ideas start turning up).  Some scientists like to talk about the scientific method more than they like to talk about the realities and politics of day to day life.

An inventor is not a scientist.  This gives the engineer power, as he can use the scientific method, but only if he wants to.  While the scientific method is a thing that defines what a scientist does (or rather what a scientist thinks he should be doing), for an inventor it is just another tool in the toolbox.  The scientist (or at least the scientist who has read Karl Popper, and deified him.  Which isn’t all scientists, but does tend to include some of the shoutiest scientists) tells you that the unmeasurable hypothesis is meaningless, because it can’t be tested.  The inventor says ‘The scientific method doesn’t work here.  So lets do something else’.  The social scientist probably says something about half-arsed statistics and broad cultural trends.  But even inventors look down on the social sciences.  (I have vague plans to write something – a book or a website or an illuminated manuscript for all I know, on the subject of ‘liminality’.  At that time, I will be able to look down on myself).

What do inventors do?  Inventors ask themselves questions.  And they try to find answers to those questions.  But often, in the process of answering one question, they discover newer, more interesting questions and divert their attention – sometimes temporarily, sometimes permanently.  They also make mistakes.  Their process tends to be combining other people’s ideas in ways in which those ideas have never been combined before.  Often it is a bit like trying to solve a rubik’s cube by randomly rotating the sides.

Being a scientist (and I use the term in an oddly pejorative way here) is like trying to solve a jigsaw puzzle.  You ignore your younger brother, who is happily playing with his stickle bricks, you complain about the piece in the box which clearly came from a different (and inferior) puzzle.  You worry that some of the pieces of the jigsaw are lost and might be undiscoverable.  And you keep working at the puzzle, because you know that the puzzle and only the puzzle is ‘fun for all the family, ages 8 to 80’.  It says so on the box.  There is no other way to have fun.

Being an inventor is like playing with lego.  But not like they do at LegoLand.  The inventor takes the lego out of a big box and uses it to build a house, or a car, or whatever he fancies.  Then, taking the house, he puts it besides the model railway.  He drives the car down the model railway’s tracks.  Then, having stepped barefooted on one too many sticklebricks, he takes more bricks out of the box and starts throwing them at his brother.

Different inventors use different things for their lego bricks.  At work, I use code.  Though often the questions I pose myself are not that inspiring – often because the questions I really want to ask might upset the people who choose to pay me money for answering the questions they want answered.  At home, my lego bricks are less tangible (which frankly makes them less immediately useful as projectiles) – I tend to build palaces, parks and gardens (along with the occasional car wash and inner city slum) out of ideas – out of all of human thought.  Or at least, out of the bits of human thought which spark a fire in my mind.

The bits of thought which spark a fire in my mind are out of my control. It doesn’t matter what is true or false – or how you come to the conclusion about truth or falsity in the first place.  Amongst the things I devour are books, websites and articles on subjects as divergent as religion (from ancient christian theology to new age hippy fluffiness and candles), philosophy, science, economics, business theory, self help (again ranging from books by respected psychologists like Martin Seligman all the way to The Secret), history (I still seem stuck in the Elizabethan era, moving slowly towards the enlightenment), alternative history (think Von Daniken) and the really really alternative history (in which we are all descended from sentient plants).  In the last year I have read cookbooks, learned about linguistics, delved into cryptogeography and toyed with chaos magick.

Of course, to the rational mind, much of what I read is complete rubbish.

If you are looking for the truth in it.

But if you are only looking for a truth, it suddenly becomes more useful.  Indeed, sometimes more useful than the truths we are sold by establishments.

Because I’m an inventor.  I don’t care where a particular cog, gear, pulley, or nuclear warhead comes from.  All I care about is what it does when I put it together with other cogs, gears pulleys and nuclear warheads.  Much of the time I don’t care about anything more than n=1 trials.  Because when the 1 is me, and the only thing I’m trying to change is me, then letting n exceed 1 isn’t just wasteful, it actually dilutes the truth that is important.

And more importantly, if I’m having fun, and I’m not hurting anyone, who cares?

I sound, perhaps, like I’m trying to convince myself.  And I am.  Ben the scientist is looming over Ben the mystic and trying to restrain him.  Ben the scientist has won these battles time and time again.  But Ben the scientist doesn’t always win – especially not when I’m alone.  And in writing this I’m hoping to ensure he knows he is one amongst many, and that he has to live in the shadow of all my other interests, styles, techniques and approaches to the world.  I love Ben the scientist.  He is a useful person to know.  But Ben the mystic is always hanging around, and if you want to know me, you probably need to know him to.

At heart, I’m a mystic.  I’ve always been a mystic.  I remember my first communion at church.  I was expecting something.  Anything.  It was called communion, for God’s sake.  I didn’t feel any more than non-alcoholic wine and chopped up granary bread.  And as I’ve looked around the machinery of churches, one way or another, I’ve not found the thing that does it for me.  I don’t want to trash the church (well, no more than Jesus did) – it seems to do a good job providing a tried and tested route for lots of people to fill a hole they need filled.  But I have a similar hole, and the church fails to fill it.

Back when I was a kid, I didn’t differentiate between religion and history.  I thought if you knew it all, and followed the rules, everything else would come along for free.  In retrospect, I should have been Jewish.  Then I spent a week with a family of Jehovah’s Witnesses, and I figured out a bit about what they believed – and they were clearly crazy.  How on earth could they come to their conclusions?  A bit more research and I discovered exactly how they reached their conclusions – they had wacky and weird ideas about which bits of the Bible were important, and how to interpret them.  So that was that settled.  Until I realised that my church had similarly picked and chosen the parts of the Bible they cared about, and were relying on a combination of philosophy, theology and politics to back up their conclusions.  Rather than relying on anything which approached truth.  This upset me somewhat.  And I gradually concluded that the Bible was worthwhile as a source of culture, history and ideas, while my religious tendencies should be directed inwardly.

In another time, I might have been a monk or a hermit.  But monasteries and caves are not known for their broadband connection.

As you look at the history of religions, most seem to begin with mystical experience, and gradually fall into a more dogmatic and political  framework – a framework which appears to suit many people, but leaves the mystic less enfranchised.  There are places for mystics within religions – Islam has its sufis, Christianity its monks and contemplatives, but for the mystic who does not plan to withdraw from the world, the west offers few options.  The east offers more possibilities, and the west has tried to embrace them.  Unfortunately eastern religion draws from the shared cultural experiences and metaphors which the west doesn’t share.  And so any attempt to get in touch with one’s spiritual mystical side becomes something akin to pick and mix.  Pick and mix is about as good at supporting the growth of a working western mystical school as it was at supporting  Woolworths.  We get our share of flakes, crazies, hippies, gullibles, delusionals and conspiracy theorists.  We also get earnest seekers.  And our ideas merge and breed, our language is shared.  Frankly we all sound mad.  But amongst us some people have felt a spark of something, had their own experiences of the divine, know some things that most people never get to see.  Of course, there is still politics, maneuvering, and “I’m more spiritual than you” infighting.  People are people.

I’m a flake, a crazy, a hippy. I’m also a seeker.  Despite the fact I spend most of my life working in the rational, logical, buttoned down world of computers, engineering, bits, bytes, wires and truth tables there is something about people willing to go away from the rational and into themselves, earnestly looking that makes them part of my tribe.

Tribes are, however, a problem for me.  Not only am I fickle, flicking through a multitude of tribes, changing my face each time, lying about who I am to gain acceptance, I am also exhausted by people.  I am an introvert.  And I find relationships hard.

I offer what follows as an explanation, but not as an excuse.  Back, long ago now, I was bullied. And this has shaped me.  I was an introvert before I was bullied.  And I cannot claim that I was not in some part responsible for my being bullied – though I was too young and too inexperienced at the time to realise that this was the case.  I hold no one responsible for it – we were all children, and most people involved probably didn’t even realise the game they were playing was happening. We can all be blind to our actions sometimes.  But bullying cost me a lot.  It cost me all the friends I had at the time, everyone I held dear, it cost me my self worth (though, oddly, I recall myself trying to destroy my self worth when I was much younger.  Someone, I assume, had convinced me I wasn’t special.  Maybe I was just overcoming the solipsism of childhood, but I regret losing it), and it cost me my trust in people.  It now takes me far too long to trust people – by my reckoning, it takes a year for me to consider anyone my friend.

There has been one person in recent years, who I have trusted.  Adelina.  That is why I first found myself loving her.  And in part, a sense of complete trust was why I married her.  Married life has not always been easy.  Adelina needs people as much as I need space.  And as a result we now live apart.  And somewhere, a shard of the trust I had has been lost.  This is not Adelina’s fault.  We can’t live together – if we continued one of us would die.  Or be killed.  Or be forced to live a lie.  I don’t know if our marriage will last.  There is no term to describe what we are doing.  And everyone is looking for a label.  People look at us thinking our marriage has failed. They try to get us to hate each other. Because they understand two people who hate each other. The understand betrayal, weakness and blame. Betrayal, weakness and blame are as much part of the simple Hollywood packaging of romance as flowers and candlelit dinners. They are not ready to deal with something this raw and complicated and real. They tell us, or imply to us, that we should hate each other at a time when we need to love each other and support each other the most.

But that isn’t the worst thing. The worst thing is that the shard of trust which broke off when we moved apart digs further into my heart each time I consider what has been, could have been or will be.

I don’t know how to talk about this.  All I know is that it hurts.  And that I don’t want the hurt to go, because its real and important and necessary to me.

And that however much I have needed space and quiet and peace and contemplation, now I feel alone.  Not just from Adelina, but from the whole of humanity that she loves, and that through her loving she helped me to love and trust however slightly.

I’ve never been a happy person.  Depression, the black dog, pads around behind me.  I’ve spent a lot of time learning first to recognise that the dog exists, and second to train him.  This is at the heart of much of my desire for personal development.  I have become so good at keeping the dog to heel and stopping it running away, that I fool myself one day I may just be able to tell it to stay while I walk away into emotional freedom.  Depression is horrible.  You feel it is your fault, because that is the game that it plays.  It is a deadly illness.  An illness which kills many – far too many.  But the sufferers don’t get told they are brave, don’t get lauded as heroes, we get told we are weak.  Or we learn to hide it, and deny ourselves.

This is not an attempt to make myself happy.  This is an attempt to rid myself of the many different faces I project to the world.  Its a call to make myself free.  Its a chance to integrate the many opposing, contradictory, viewpoints I hold and perhaps perfect.  I’ve held onto these different faces because I fear losing those who love, respect and tolerate me, just as I lost so many people.  All the while I’m showing different faces to different people, and not acknowledging who I am to myself, I feel somehow unfinished.

I don’t like to finish things.  When I finish something, it is done, fixed in time and space.  And, unless it is perfect, it stands there as a permanent memorial to my own imperfections.  I don’t want people to know I’m not perfect.  But I’m not.  I don’t like to be judged.  And I don’t like detail.  I don’t enjoy to work of editing, revising, filing off the rough edges.  I’m a big brush man.  I love the big picture.  The broad, sweeping strokes.  I love the overlying structure, the framework.  Someone else can dot the ‘i’s and cross the ‘t’s.  So I can’t make things perfect – because in the process of striving for perfection I stop being me, stop being the person I enjoy, stop being true to what I want.  So I am left with imperfection, which I try to never hand to anybody else, lest they see me for who I am.  Or worse, I am left with imperfection which I am forced to hand to somebody else.  Every bug in my code is a cross I bear.  Every typo in anything I publish shows me how worthless I am.  I hate everything I create.  It is only in retrospect I can look back on things and sometimes notice the beauty.  And by then, it is too late.  The person who produced the good things in the past is gone.  And only the weak-willed hack who spews out page upon page of unfinished, unfinishable crap remains.

This is not a cry for sympathy.  This is not a call for help.  This is truth and this is honesty. This is warts and all. This is me.  I am Ben.  I am one.  I am depressed, yet I am also a hero who has consistently managed to whip depression into something that allows me to live my life.  And I love my life.  I love living my life.  I’ve fucking lived it for thirty five years, and I’m not even half done yet.  I love being me.  I’m an inventor.  I’m a mystic. I’m a flake.  I’m a scientist.  I’m trying my best not to constrain myself by using any label.  I’m a living breathing walking contradiction.  I’m a paradox.  I’m unanswerable.  Yet I am truly simple. I’m vulnerable.  I’ve been told I have kind eyes.  And deep down, all there is to me is love.  But sometimes – too often – I forget that I can let myself feel it.

I am not the Core Ben.  I am Ben. I am the Whole Ben.  There is only one of me.  And, from now on, if I can manage it, I’m all or nothing.  Take the whole of me.  I’m no longer a buffet service, I’m a set meal by a gourmet chef.

I’ve never written anything this difficult.  I’ve never been more afraid of letting anybody else read about who I really am.  I quite scared of admitting it to myself.

But this is me.  And I am brave enough to be me.  And that is something new.  And something I have never been before.

I make no apologies for who I am.  Because I’m pretty damn amazing.