The plane landed like a legless cat on a sidewalk. My ears rang worse than Notre Dame. I shoulda told the broad in 4B to pipe down, but along with locks I’ve learned to pick my battles. First day back in Paris and it’s like I never left. Cigarette smoke burning the inside of my nose, money burning the inside of my pocket. Last night I scoped a place called the Suckling Ferret, looking for leads. Place had more Jean-Pauls than the Vatican. I’m still no closer to cracking this case, so I’m cracking a case of scotch instead.
I recently went on a trip to Paris to visit family, and decided to post status updates in a Film Noir detective style.
I woke up feeling like I’d been eating gravel. But those days are behind me so it had to be the bourbon. The plane shook like a dame trembling in the rain and my nerves rattled more than the windows, but I could fix that with a shot. Shots are usually from my revolver, this time from a bottle. Time flies when you’re having fun, but not with me in the economy seats. I was heading to France, land of musk and svelte dames.
I recently read a fascinating article by Thomas Baekdal about why the password “this is fun” is 10x more secure than “JS4!2” – I highly recommend taking a look at it. His point is essentially that passwords need not trade readability and memorability for secureness. But, although the issue of password complexity vs security is interesting, it seems to me almost pointless to address it until we find solutions to larger problems with password use.
Of course, not that I’m the first (or thousandth) to realise this. As is often the case: the relevant XKCD strip.
The fact is that as long as people continue to a) reuse passwords across different services, b) write them down on paper or c) store them in plain-text files on their computers (a lecturer at uni did this), we should worry less about the inherent security of a password and more about how likely it is that someone will get their hands on it without even having to run any brute force attacks.
To Baekdal’s credit his whole point seems to be that a memorable pass-phrase should negate points b) and c) – but it does nothing to prevent people reusing passwords for different websites, meaning that an XKCD-style plan of acquiring one password and signing in to other websites with the same email/password combination could still succeed.
So what if we lived in a world where noone ever reused passwords? What could an evil genius do to acquire login details for a person’s entire online presence? I had a vision of an evil plan to do just that.
Step 1: Create a website and attract people
Preferably, create something you’re not going to have to spend a long amount of time maintaining. That could mean outsourcing your content. I leave that step up to you – how about scraping the link to the top video on YouTube every day and embedding in on www.BestTube.com? Bam, instant 10,000 hits a day. Then spam the appropriate sources – Digg, YouTube comments, whatever.
Step 2: Force users to sign up and log in
Take a business tip from the drug dealers: make the first link free and all subsequent hits require an account. Make signing up as easy as possible! This is valid advice in any walk of web development, but doubly so for our nefarious purposes: we want as many people to sign up as possible. Store the date they joined – that’s important. Also important: do not allow the user’s browser to store their password for them. You’ll notice that online banking already does this – just set AutoComplete to false on your form.
Step 3: Force login failure
Maybe 2 weeks after the user’s signup, start failing their login attempts.
Now if I know people (and I’ve met a few) this will result in Bob retyping the same password once, maybe twice, then switching strategy and trying every other password he knows. Because “Hey, I must have used a different password”. So he types “bob1”, but that results in a login failure too. Huh, maybe “hello1bob”? Failed again. And here comes the crux of the evil plan:
Step 4: Store every password attempt
We now store every password variation which Bob attempts to sign in with.
A certain amount of subtlety comes into play here depending on how quickly you want your results, if you actually care on retaining your users, and whether you care about being found out. Assuming you’re in it for the long haul and you’re clever enough to realise you don’t want to spook your users, you might want to limit the amount of users who you do this to – maybe only target 1 in 5 of your users for this treatment. And maybe only fail the first 4 login attempts, and let the 5th password work (no matter what it is).
By the 5th attempt Bob will very likely click the “Forgot your password?” link (if there is one) anyway. Again, depending on your goals you may want to completely avoid implementing “Forgotten Password” functionality, thereby forcing the user to just keep trying passwords until they give up. You’ll maximise the number of passwords in the short term, but you’ve lost any chance of keeping the user on a long-term basis.
Step 5: Do evil things with those passwords!
Assuming a website attempted this approach, they would then have a nice list of email addresses, each of which had an associated list of passwords which the user regularly used. The evil individual behind this could now run a smarter brute force attack on common websites with a much smaller list of potential passwords – leading, I bet, to a much higher hack success rate.
This whole technique is known as phishing, though typically this sort of approach is done through website forgery and not forcing login failures. Unfortunately I have a feeling this could be a very successful method of hoarding someone’s passwords. In all likelihood, this is already happening, so it’s worth discussing out in the open.
There are a few things we can do to prevent this:
- Only sign up for trustworthy websites.
If a website smells fishy, Google it! You’re very likely to get a good indication of whether this site is all it seems to be within the first 10 hits. If you really have to log in, use a temporary email address and a password you’ve never used before or will ever use again.
- Don’t try all your passwords
If your password has failed and you’re sure it’s not a typo, just click the “Forgot my password” link and wait for the email. At worst you’re losing an hour.
- Use a password manager
KeePass is an example of a great way of storing all your login information in a single file using NFA-approved encryption. All you have to remember is one secure pass phrase (and that’s where Thomas Baekdal’s advice comes in handy) to encrypt and unencrypt the file. So if a website’s login fails even though you’re sure the password was correct, you can always double check with the entry in your password manager. KeePass also has the ability to automatically populate login forms for you if you really don’t fancy remembering anything anymore :p
Throughout the history of the internet, there always have been, and there always will be, clever people trying to get your information on the internet. The only protection is a healthy dose of paranoia, and maybe some high-tech encryption to boot.
The steps listed in this post are not provided as a tutorial but as an illustration of the power that any website can have over you. My intention is to inform about the hazards of password misuse, not help others capitalise on it. If I’ve managed to think about it already, so have much smarter people than me.
We recently had an interesting discussion at work about our UI paradigms.
Let’s assume we have an information management system which allows you to create, manipulate and link objects which represent, say, Persons and Dogs.
Now assume that through a wizard, we allow a user to link a Person to a Dog as an “Owner”.
Lastly, let’s imagine a scenario in which the Person is already linked to a Dog, but the user runs through the wizard and selects the Person as an Owner anyway. Here’s the crux: inherently, our system allows multiple links between objects. But in this case, our business rules dictate that we don’t want multiple links with the same link reason (because why duplicate the same link? We’re not adding any new information)
So what do we do? We have two options:
Option 1: Bad user! Bad!
The objects shouldn’t be linked more than once, so the user is attempting an illegal operation. Show an error message telling them what they’re attempting is not possible.
Option 2: Uh, everything’s fine!
The target state of our objects is the same as the current state, so do nothing and act as if the operation has succeeded.
I understand the allure of option 1 – it’s a hardliner’s approach to dealing with illegal operations. The user is not only attempting to do something which is not logically allowed (linking twice as an Owner would add no further information to the system), but has already been done. We’re keeping things as simple as possible for ourselves. But in my mind it’s just too hard line. Yes the user’s being a bit daft but why punish them so harshly – they now have to click OK on the error dialog and close the wizard. Two extra clicks and no change in state.
On the other hand, what I proposed was an idempotent approach to our linking mechanism.
Idempotent operations are functions which can be applied many times over, but which will only make a change the first time. For example, multiplying by zero. If we take a number (say, 1) and multiply it by zero, we get zero. If we then multiply the result by zero again, we still have zero. Multiplying by 2 isn’t idempotent because we would be exponentially increasing our result – it would go from 1, to 2, to 4, to 8, to 16. And our result would keep changing.
In essence then, if a user selected a Person to be linked as an Owner, and they were already linked, we would perform no additional functionality but behave as though the operation had succeeded. The result is the same no matter how many times you link the Person as an Owner.
Some of my colleagues disagreed, and argued that we should never be silently suppressing errors. I agree. But in this case I don’t think we’re suppressing anything; we’re simply choosing not to define what the user is doing as invalid.
Furthermore, let’s think about this in terms of what a user would expect from our system. If they’re trying to do something which will only leave our system in the same state, why slap their wrist?
You’re not punished for trying to turn a light switch off again, or pressing the lock button on your car-key a second time, or double-clicking a link on a website. Because the results are the same no matter how many times you apply the operation.
Biomechanically, I am not the man I was when last I typed at this laptop. I sit before you now with only one pleura. Technically, half of me is breathing like an elephant.
To drop the epic wordage for a moment, I’ve just come back from a stay in hospital after receiving a pleurectomy, an operation which basically consists of removing the lung’s protective outer-layer and gluing your lung to your chest wall. This was sadly a necessary step after falling prey to a second collapsed lung.
So how to summarise the whole experience? I’m now short a pleura, I have 5 new scars and I partially breathe like an elephant.
Oh yeah, the elephant boast. So most mammals (humans included) breathe by expanding their ribcage and lowering their diaphragm, creating a vaccuum in the sealed chest cavity. This vaccuum causes your lungs to expand and inhale air to fill the space that your expanded torso has created. The space in between the lung and the chest wall is known as the “pleural cavity”, and basically gives your lungs some leeway when it comes to expansion. Elephants are unique in that they don’t have a pleural cavity – their lungs are fixed to the insides of their chest, meaning that their breathing mechanism doesn’t rely on vacuum: their lungs expand because they are attached to the expanding chest walls. This allows for greater sucking power (too easy, move along) and is why they are the only mammals who can breathe submerged.
The doctors essentially obliterated my pleural cavity by removing my pleura, roughing up the outside of my lung, and letting the blood and inflamation create a seal between my lung and my chest wall. My lung now expands because it’s stuck to my chest, just like an elephant’s.
If anyone has any French elephant jokes, you will never get a better chance.
So my hospital stay started off pretty banally – I went in the day before my op and was subjected to the usual tests: blood, xray, ECG, MRSA. During admission, the nurse put a paper bracelet around my wrist with my name, consultant, date of birth and a barcode printed on it.
“This is so we can ID you,” she said.
She then took my other wrist and wrapped an identical bracelet around it.
“Is that in case I lose an arm?” I joked.
“It’s in case you get an IV, and we need to cut off your bracelet.”
Which is the type of sensible, pragmatic answer that makes you feel like a nob for ever joking about the topic at hand. The kind of answer where the only valid response is to nod dumbly and make a mental note to re-evaluate your life.
The next morning was similarly uneventful. I woke up with the Zen serenity one can only feel when everything is now out of their hands, and the pre-op soporific was unnecessary. I was wheeled down to the theatre and moved onto the operating table, where an oxygen mask was placed over my face. There was something incredibly strange about seeing half a dozen people gathered around, watching, waiting for me to fall asleep so they could get on with their jobs. It felt sort of humbling to realise that for the next couple of hours, the lives of these 6 people would revolve entirely around me and my well-being. I stared up at the UFO-dish operating lights and felt my limbs tingle. The anaesthetist was speaking.
“You might feel something cold on the back of your hand. That’s the anaesthetic. It’ll feel quite pleasant, like a pint of beer.” He paused, “Then the rest of the keg.”
I laughed “Oh good. Thought you were calling me a lightweight.”
The last thing I remember is feeling my limbs go numb, looking up at the anaesthetist and mumbling “This is interesting.”
The transition from lying dopily on the operating table and lying dopily in post-op felt like a movie fade – I knew, logically, that time had passed, but I hadn’t felt it. It’s the sort of cut that I’d only previously experienced after blunt head trauma. I felt fresh as a daisy, and asked the nurse sitting at my bedside what time it was. We chatted for about 20 minutes before I realised that I had been asking this guy the same questions over and over, and he was casually answering them the same way every time.
I asked him how long I’d been awake and he told me “About an hour.”
What? But I’d only woken up 20 minutes ago! I then got a couple of random memories of discussing meditation and other random topics; scenes which I had no recollection of having ever experienced, but which sat there in my mind like disgarded puzzle pieces. The memories were set in the same room that I was currently in, and featured this guy, so I just had to accept that since I’d never been in this room before, those moments must have occurred well, moments ago. I asked him if I’d been talking total shite and he gave me a charitable “Nahh…”
The rest of the day passed in a series of fade-in/fade-out moments as various people managed to snatch conversations in between my blackouts. The doctor said everything had gone well, and not at all disturbingly, that my lungs were nice and pink. I remember a lot of eating. I found myself thinking “That was a piece of piss”. I couldn’t believe how well I was handling it.
“I am a fucking Spartan.”
The next morning, I discovered the source of all my power was hanging from a dripstand to the left of my bed. I woke up at 6AM in agony, wondering what had happened overnight to cause me so much pain. A nurse pointed out that I hadn’t self-administered any morphine overnight. I beeped a dose and felt some of the pain ease away. Three minutes later, when I was allowed another dose, I beeped it. Three minutes after that, I wrote myself another prescription. This went on until eventually the pain disappeared, and my brain melted.
I spent days swept up in the haze of a morphine high. Confined to my bed, I dozed and dreamed, only able to observe placidly as my mind unspooled itself and leaked out my ears. Battered by stroke after stroke of genius, I struggled desperately to keep track. I resorted to memorisation techniques to store all my ideas – using the Loci method, I placed idea-tableaus around a mental reconstruction of my house. In the hallway was a frozen game of Execution Bingo. In the living room, a ninja cutting a man’s head off with the blade of his hand.
I eventually discovered I could force hallucinations. I closed my eyes and thought “Falling from the sky” and wham-
I was above the clouds, unsupported, clothes buffeted, face blasted by the force of the wind as I hurtled towards the ground. I took a moment to observe the world spread out below me like a map, stretching into my periphery, and then-
A nurse walked in cheerily, bringing in cereal. I looked at my watch and realised it was 8AM of the same day. It had only been two hours since I’d woken up in pain. I clambered out of bed and dumped myself into a chair, making a mental note to just put up with the post-op pain. I caught the nurse’s worried look before she said “We’ll get you off that morphine today, eh?” and all I could reply was “Thank God.”
My body spent the rest of the day punishing me for that morning’s abuse. I went from supernova to white dwarf as my brain was crushed to the size of a grape. System-wide shutdown. Activate secondary power units. Disable all non-essential functionality. I sat in a chair and felt as if my universe had collapsed in on itself. It was horrible. To top it off, I’d noticed earlier that sitting or standing up brought on terrible waves of nausea. And so, slumped upright in a chair, I felt the stirrings of a revolution in my stomach.
By 11AM I had closed myself off to the outside world, battling nausea, waves of heat and cold, and the unsettling feeling that my brain was about to collapse into a singularity. It was during this period of ill withdrawal that my replacement doctor paid me a visit (my original, excellent, consultant had left after my operation), accompanied by the usual awed entourage of nurses and trainees. One of the nurses warned him “He’s feeling quite sick at the momen-” but was cut off with a hand gesture.
“How are you, young man?” he asked me.
Curled in my chair, my face in a paper-maché bowl, I managed,
“Feeling a bit ill actually.”
Then withdrew into my shell. The nurse asked if I could get a few minutes to recompose myself, but again he waved his hand at her and asked me how the pain was. I could still feel the morphine numbness. I told him it was alright.
“Alright?” he repeated.
“Uh, yeah. Alright.”
He turned to the nurse and said “He’s not in pain, he does not need painkillers” which brought me partially out of my stupor.
“Well, the pain’s alright because of the morph-”
“Take him off the morphine, nurse,” he said, and pointed decisively at nobody in particular. “It is this drug which makes you ill, young man,” he said, his face inches from mine.
“Actually I felt ill last time I stood u-”
“We will take you off this drug, and we will take your drain out.”
With that, he straightened up and hurried out, obviously eager to beat the new personal record he’d just set for number of sentences interrupted in one sitting. At the door, as an extra kick in the nads, he ordered that I be given daily anti-clotting injections in the stomach.
On the second day after my operation, I was visited by the third and strangest doctor. Short, agitated and clambering for an air of gravitas, he paced up and down my room as he listened to a summary from the nurse. Insanely, he refused to acknowledge that I was sitting in the same room, instead posing his questions to the nurse, who found herself having to pirhouette awkwardly between myself and the good doctor, asking me his questions and relaying my answers. It was quite possibly the maddest situation I’ve ever found myself in – I thought I was in a Marx Brothers sketch.
“Wassat, Harpo? Wassa problem? Wassup with this guy? Alright alright, two words. First word. Hands. Smackin’ ya hands. Slappin’ ya hands. Clappin’. Clappin’? Clap? Lottsa clappin’. Claps? Claps! Alright second word, jacket. Chest. Breathin’. Wheezin’. Rhymes with tongue. Claps… Claps lung! He gotta collapsed lung?”
Eventually this psychotic panto ended (or rather, changed venues) and I was left with a directive to stay in hospital another night. An anonymous author had written on my file “Leaving on Sunday” which had thrown the flustured doc completely, causing him to ask wildly,
“But that is tomorrow, why is he not leaving today? Who has written this? Why did they say tomorrow and not today?”
The unnamed scribe had unfortunately left no indication of their reasoning, and rather than apply his own (God forbid), my manic doctor decided to just go with it and kept me in another night for no discernible reason. The next day, I packed up my things, gave the nurses a sketch I’d drawn, and left.
And that, rather lamely, is that.
I feel I’ve probably protrayed my stay rather disingenously, implying the place was run by madmen and incompetents, which couldn’t be further from the truth. The fact is that I had an excellent consultant and surgeon, an incredibly competent anaesthetist, and for the most part, lovely nursing staff. It’s testament to all their skills that 72 hours after surgery I was back home in only the slightest pain. If anyone has the misfortune of needing a hospital stay but the fortune of being able to choose where to go, I’d highly recommend the Golden Jubilee.
And if you’re nice to the nurses, you get extra toast in the evenings.
The “Doors to Heaven and Hell” riddle. It’s an oldie and a goodie. I’m sure everyone’s pretty familiar with it, but in case you’re not here’s a quick recap:
Bad news, you’ve just died. You find yourself in a nondescript hallway with two identical doors, each guarded by a man. You realise you’re holding a scrap of paper. It reads:
1. One of these doors leads to Heaven, one leads to Hell.
2. The man guarding Hell’s door always lies. The man guarding Heaven’s door always tell the truth.
3. You may ask one of them one question.
(Note: You also can’t use any external reference points e.g “Does 1 + 1 = 2?” You have to limit your questions to the men and their situation. Nor can you do a Karl Pilkington and try to trick God into coming to the door to sign for his post)
So if you were to ask them, “Where does your door lead?” the man guarding Heaven would say “Heaven”, as would the man guarding hell (since he’d lie). That would be a bad question, since if you asked either of them, they would give the same answer. The aim of the riddle is to ask a question which is guaranteed to let you know which door leads to heaven and which leads to hell. The good thing is, there is a solution.
The answer is annoyingly simple once you hear it. The correct question to ask is “If I was to ask the other guy what door he was guarding, what would he say?” If you happened to ask the man guarding heaven, he’d know the other guy was guarding hell, and he’d know he’d lie, so he’d say “Heaven”. Likewise if you happened to ask the man guarding Hell what the other guy would say, he’d know the guy guarding heaven would say “Heaven”, so he’d lie and say “Hell”. The answer they give is the answer to which door they’re guarding.
In fact there are several variations of the question which you could ask (E.g. “If I was to ask the other guy what door you were guarding, what would he say?”) Another interesting variation is “If I were to ask you what door you were guarding, what would you say?”. The liar’s process would have to be:
1. OK, I’m guarding hell
2. If he was to ask me what door I was guarding, I’d say “Heaven”
3. But I need to lie about the answer to (2)
And he’d have to say “Hell”. So you’d know he was guarding hell.
The same principle behind each of these questions is the principle of chaining their systems in series. Let’s use some logic gates to show you what I mean.
So a basic NOT gate (or inverter) takes in a value and returns its opposite.
So 0 goes in, 1 come out. Another way to put this:
Hell goes in, heaven come out. The liar in the riddle is a basic inverter. He is forced to tell the opposite of what he knows is the truth. The truth-teller, on the other hand, does nothing to the truth. The input travels unmolested through his “process”.
Asking one of these guys what the other would say guarantees that we are passing our input through both processes. And we know that one of them is an inverter, and the other does nothing to the input. So with a question structured to invoke both processes, we know the output will be the negative of the answer we really want. And again, in logic gates:
Similarly, my alternative “What would you say if I were to ask you…” example is the equivalent of passing the input twice through the inverter. In other words, the input would exit the process having been inverted twice, thereby having suffered no modifications.
Interesting stuff. And who’d have thought I’d actually find some use for my logic-gate knowledge?
So, my lung collapsed on Tuesday 22nd of June.
I woke up at my usual time, stood up, sat down. Stood up, tried to stretch, sat down again. It felt like a lead ball was sitting in my chest – every time I tried to take a breath, it would send a wave of – not pain – discomfort across my upper body. I shuffled around for a while, giving it a chance to dissipate, but it got worse.
If I were directing this film, we’d now cut to a montage of half-second shots spliced one after another: stethoscope placed on a back; blood filling a vacuum tube; a blood pressure sleeve inflating; the flash-click of an X-ray machine; EKG stickers ripping off a chest. After a swathe of tests, I was moved to a room and told to wait for a doctor.
Three hours later, she appeared.
“All the test were clear – you can go home!” she said, obviously expecting me to high-five her and scamper.
“Oh, great… What’s this pain then?”
“Maybe a pulled muscle?”
“Well, if it still hurts in a couple of days, should I come back?”
“Have you tried any pain killers?”
“Try some… Cocodamol?”
She had no clue. I didn’t want to ignore the pain – I wanted to know what was causing it. To me, that’s like responding to getting shot in the stomach by changing your shirt. Nevertheless, sad little pack of painkillers in hand, I was sent home with an all-clear.
Two hours later I got a phone call from the same doctor.
“We’ve been looking at your X-ray again and you need to come in, OK?” She went to hang up.
“Oh, there’s a pocket of air.”
“In your chest.”
“Outside my lung?”
“Right hand side.”
“Wait, outside my lung?”
“Right hand side.”
It was infuriating. So I packed some overnight stuff and headed back to hospital. When I got there, I was assigned another doctor, who promptly informed me that I had spontaneous pneumothorax.
“What caused this?” I asked
“There’s no real cause. It tends to affect young, tall men – how tall are you?”
I was sitting down.
“Well, young men.”
I didn’t have time to feel offended as she reeled off a number of things I’m now no longer allowed to do: Scuba diving, free diving, space travel. (Space travel! Looks like I’m never getting off this rock.)
And then, feeling like a seedy call-girl, I was undressed, drugged up and things were put in my body. The doctor had a fun time making room for my chest drain. I didn’t so much hear as feel a crunch as he broke through my intercostal muscle. Within minutes, a tube snaked its way from 6 inches in my chest to a tub of water on the ground. When I breathed, the water bubbled.
For a beautiful, glorious moment I felt the cinder block float off my chest and I sighed in relief.
Then someone stabbed me in the lung. In the space of 2 minutes, my lung had gone from sad deflated party balloon to majestic zeppelin, and there were 6 inches of tube in my chest. Oh the humanity! I have this image in my head of my chest waking up from the local anesthetic, looking around, seeing a big daddy tube and going “WhoaaaAA! Get this OUT OF ME!” I was shot up with morphine and left in agony for a few hours until my chest must’ve decided to just get used to it. And so began my 3 night stay in a mad house.
I was kept in a ward with 5 other guys, ranging from 50 to – really – 95. Fun crowd. The guy to my left spent the first night moaning in agony. Distraught, he cried for a nurse for about half an hour. Thinking he couldn’t reach his buzzer, I buzzed my own and the nurse came through.
I said, “Sorry, it’s not for me, but this guy was calling for help.” She jabbed my buzzer off and yapped “He can do it himself!” I was outraged. Here I was trying to do good for my fellow man, and she had the temerity to chide me for it! After all his moaning and agonising, when she asked him what the problem was he replied pathetically,
“I’ve got heartburn.”
The next night, the man across from me – obviously delirious with fever or drugs – tried to escape. Since he wasn’t stable on his feet, the nurses had repeatedly told him to stay in bed. I watched him cast a furtive glance right and left, clamber out of bed wearing nothing but an adult-sized pair of nappies, and make a fucking run for it out the corridor. It was like the Great Escape. I buzzed a nurse and they caught him 3 hallways down. I don’t think I’ll ever forget the image I saw through the window to the corridor, of that near-naked man as he stumbled hurriedly to freedom, his glazed expression betraying an accent of hope.
When he wasn’t breaking out, Dave (we’ll call him Dave) spent his time sleeping, shouting at imaginary people, and stress-testing his Pampers. Terribly, I got used to it. I woke up on the third night to the sound of a meaty thud. Peering from my bed I just saw his two legs lying toes-down on the ground. I buzzed a nurse, made sure someone came, and went back to sleep.
Dave didn’t lack for competition. A man at the far end spent his time pulling his oxygen line out of the wall, grabbing his zimmer frame while lying in bed and sweeping it around dangerously, clattering cups and food all over the floor. So not an insignificant amount of my time was spent attempting to ignore the sound of oxygen hissing out of the wall, drinkware crashing to the floor, and hallucination-induced screaming.
The 95 year old man slept sitting upright in the chair next to his bed. He bore his illness stoically. During the day he’d shuffle up and down the corridor to stretch his legs. Every night he went to the bathroom and shaved, and the nurses told me that back home he looked after his wife. The dignity with which he held himself made me want to cry. I was sorry to leave without having spoken a word to him.
I’m now back at work, whittling days off the next 7 weeks until I can gingerly place trust in my lungs enough to start exercising again. In 7 weeks, with luck, it’ll be like nothing ever happened. But now I have a chink in my armour. It’s idiotic I know, but on an emotional level it took my lung collapsing to realise “Oh right, yeah, I’m not invincible”.
I should probably be clear – what I went through was nothing. At no point did I ever have to face my mortality, at no point was I ever in any real danger. My worst fate is that if it happens again, I might be forced to drop all forms of exercise. Compared to what so many people I know have been through or are still going through, it’s not even a drop in the ocean. It’s not a bead of sweat falling from a flea’s testicle into the Pacific.
But I can’t help feeling like King Xerces with a cut cheek, realising he can bleed, too.
And since we’re on a 300 kick, I’ll end with a quote from Richard, who kindly left me this message:
It’s just a lung. The Gods saw fit to grace you with a spare.
Some guys at work ran into an interesting problem yesterday: since upgrading to VS2010, they found none of their breakpoints were being hit when debugging their apps.
Without giving too much away, my work consists of writing .NET apps which run on top of a custom platform application we’ve developed. These apps are compiled to .NET 2.0. Debugging typically involves setting our platform app as the startup program to debug into, and launch from there. Trust me, this is relevant. Also relevant – none of our developers working on Vista of Windows 7 machines had any issue – just the Windows 2003/XP crowd.
Something about the combination of Visual Studio 2010, .NET 2.0, and Windows XP meant that we could no longer debug into our applications.
So anyway, after a bit of Googling, I managed to find a workaround, thanks to this anonymous Microsoft Employee. The issue seems to be that when debugging into code which is invoked from a native exe, Visual Studio will assume you’re debugging in .NET 4.0. Subsequently all your .NET 2.0 code will run, but the debugger won’t hit any of your breakpoints.
The fix is to give the debugger a helpful hint, in the form of a .exe.config file in the directory you’re launching your startup exe from. And in handily numerated form:
1. Find the exact version of .NET 2.0 installed on your PC. One way to do this is to click here or type
in Internet Explorer. There are probably myriad other ways of doing it. Note the version down.
2. Create a <YourProgram>.exe.config file in your program’s directory with the following contents:
<supportedRuntime version="v2.0.<whatever you noted down>" />
3. Debug to your heart’s content!
Step 3 is essential.
Note that I still have absolutely no idea why the original issue should arise only in Windows 2003 and XP machines. If anyone a) reads this and b) has an idea why, please let me know.
Here’s the first part of a short story I’ve started writing. I’ve decided to post as I go, so this is “hot off the press”, as they never say. Thanks go to Richard Paterson for the title, which I’m doing a slow but hopefully interesting riff off of.
It was pitch black. Adam tried to look around, but having no head, failed miserably. Now that he thought about it, he didn’t seem to have a body either. A voice spoke.
Had he owned a body and a pair of trousers at that moment, one would have wet the other.
“Who’s there? Where am I?”
“Oh right, yes. Hold on”
After the briefest of pauses, Adam found himself housed in a passable, if opaque, reproduction of his body. It was seated in a volumous leather chair, itself placed by a crackling fireplace in what appeared to be a study. Shelves of books lined the walls, while busts of stately men regarded Adam impassively, brows furrowed and jaws clenched with purpose. A sheet of pipe smoke hung lazily in the air like cloud cover.
Across from him perched an improbable man, feet beslippered, hands poised on the arm-rests, and reflections of the fireplace lapping on the dome of his head. After an inordinate length of silence, the man leaned forward and spoke. His voice was jovial and reedy.
“Well, that was silly, wasn’t it?”
“My dear Mr Simmons I’m sorry to say, but you’ve rather managed to decease yourself.”
“Yes indeed. For a man whose time is not yet up, this is just not done.”
“As you can expect, this can lead to all sorts of trouble. Hourglasses need to be emptied, people need to be informed, causality has to be given a hot tea and a lie down. It’s a bureaucratic nightmare, as you can imagine. It’s really more than my job’s worth. And the paperwork! Ugh!”
He threw his hands in the air. Adam stared blankly, mouth working silently, like a golfer taking practice swings. Eventually he managed,
The man stood up suddenly, head piercing the languishing pipe smoke like a Himalayan mountain. Feeling his grip on sanity begin to loosen, an image of climbing the polished cranium and planting a flag at the crest leapt uninvited into Adam’s head, and he choked back a guffaw. His host seemed neither to notice or care, and held his hand out. Adam took the proferred hand and was pulled swiftly to his feet and guided to the door. As he stumbled, his host continued talking.
“So this will be our little secret, hm?”
“Oh. Uh, yes”
“I’m so glad we understand each other, Mr Simmons. But alas, here our paths must part”
He opened the door and prodded Adam unceremoniously into a grey office hallway. Adam turned back to catch a glimpse of this strange man, clad in smoking jacket and slippers, as he closed the door.
“I wish you all the best in your endeavours”
This last claim was punctuated by a crisp click as the door closed shut not an inch from his nose. Adam blinked. Seconds later he blinked again. It was actually only after several minutes that his activities extended to anything other than blinking. Eventually, he walked home.
Was pulling faces at a wee girl in a restaurant today. Suddenly she ducked, and I ended up blowing a raspberry across the table at her gran.
Stone cold disdain on her wrinkled face.