Sometimes Size Matters

Some may find parts of this story NSFW or offensive, if you think that might be you, I suggest you read something else (you have been warned).

This week I am writing about something a little different from my usual posts and revisiting my past. While the general content of what you are about to read is based in truth, some events have been merged into one for the sake of brevity or because my memory is not accurate. Nothing has been deliberately fabricated, a lot has been paraphrased, and I have changed the names to protect me from embarrassment (though I don't think it will work).


It had been over a year since we had last met when I got a call from Susan inviting me out for a date. If I recall correctly, it was somewhere around Valentine's Day, but I might just be making that up. I was living near Cambridge at the time and Susan was in Manchester, but I was single and Susan was gorgeous, so I gladly accepted.

I had first met Susan sometime during my third year at university in Manchester. My friends and I had ventured out to a night club called 5th Avenue for indie night. I remember my visits to 5th Avenue fondly, throngs of tightly packed students dancing with our hands behind our backs like a legion of Ian Browns and Liam Gallaghers, mouthing the words to "Fools Gold" by The Stone Roses, "Cigarettes and Alcohol" by Oasis, and many more. The following playlist will give you just a taste of the music we swayed and swaggered to at 5th Avenue back in the mid-90's. Consider listening to it while you read on.

On the night I met Susan, I was wearing my favourite trousers, unaware that they were perhaps a little too tight for me, and a shirt, untucked as was the style for the very best indie fans. After waiting in line outside for the privilege of paying to get inside, I grabbed a drink at the bar. Back then, I rarely danced without a little lubrication to dull the sting of staring strangers — insecurity had grown deep roots. Before long, I was swaying amid the mass of other club goers, enjoying the 12-inch remix of "I Am The Resurrection". I spotted Susan almost immediately, her long blonde hair and bright blue eyes were hard to miss. My heart skipped and panic set in when we briefly made eye contact.

Did she look at me? Was that a smile? Oh, fuck. What if she likes me? What do I do now?

I have always been prone to over-thinking things. When others would find joy in a moment, I would work hard to find the pain. I was also terribly shy and, at that time, had yet to lose my virginity, so any connection with a woman was always panic-inducing to me. Where would it lead? What do I do? How do I act? It was terrifying. So, I did what made the most sense to me and avoided eye contact at all costs. So much so, that eventually, Susan had enough and came over to me.

"Why are you ignoring me?" she asked, "Clearly, so rude."

Susan said "clearly" a lot. It didn't bother me.

"I say 'clearly' a lot," she said, "Clearly."

We both laughed.

Susan and I really hit it off and I had an amazing time dancing, talking, and smoking with her, and I had the best time making out with her in a dark corner. The close proximity of an attractive woman, the kissing, the touching, the sparkling blue eyes, the perfume; for a 20-something virgin it was arousing to say the least. I adjusted myself to try and hide the erection that was lying against my thigh — in my tight trousers, it was way more visible than I felt comfortable with. When we stood up to dance again, Susan brushed against penis with her hand, and her eyes went wide. She was grinning. When she dragged me to her friend on the dance floor to eagerly show off the growth lying against my leg, I blushed and nervously glanced around.

"I can't help it," I implored her, pushing her hand aside as she continued pointing at my readiness.

She just smiled even wider. "I know!" she said, excitedly.

When we reached the end of the night, we stood together outside the club. Susan was leaning against the wall of the club. She pulled me in for another kiss as we waited for Susan's taxi home.

"Why don't you come back to mine?" she whispered in my ear, her fingers tickling the end of my still aroused manhood (it is very difficult to get rid of an erection when someone keeps playing with it). My heart was racing. Here I was with a really beautiful girl and the possibility of a life-changing event, and I was terrified. I was terrified since I'd never done it before, because I didn't want to get anything wrong and because I was over-thinking everything.

So, I declined. She pleaded, pouted, and generally enticed me, but I dug deeper into my insecurities and declined again, and again. In my head, I justified it to myself.

I really like this girl. She's gorgeous. It would be wrong to take advantage. That's what this would be, right? I'm a gentleman, I should decline.

Susan climbed into the taxi, leaned out of the window to check I was sure about not joining her, and then blew me a kiss goodbye.

In romantic, Hollywood-style stories, that would be the last time I saw her until some serendipitous event brought us back together in a romantic liaison, except maybe with less inappropriate tight-trouser torpedo. But this isn't that kind of story. Although there was a lot more to our original meetings than what is told here, let's skip that and get back to that phone call a year or two later around Valentine's Day.

After chatting on the phone with Susan, I got on the Internet and booked a hotel room in Manchester. This was going to be a night out drinking, so a hotel room made sense. Not to mention that something might happen between Susan and I.

The train ride to Manchester was tense for me as my mind raced about my upcoming date with Susan. I have always found it difficult to determine the difference between excitement and terror. In fact, I'm pretty sure they are the same thing with different interpretations, so I often flip between both states several times a minute. I walked from Manchester Piccadilly train station, past the night club where we first met, and on to the bar where we had agreed to meet for our date.

I entered the bar and nervously glanced around for Susan. She wasn't there, so I bought two drinks, downed one, and found a seat. I made sure to sit somewhere I could see the door, but not immediately visible from it, like I was comfortable on my own and totally not waiting to meet anyone (after dropping everything and travelling a couple of hundred miles from Cambridge to see her, I didn't want to seem too eager). When Susan walked in, my heart skipped; I had forgotten those eyes. She saw me almost immediately and came straight over to where I was sat. We hugged and got to chatting.

It was clear from the beginning of the date that Susan had an agenda. I was not an experienced dater at the time and definitely had my share of trust issues. When we got to the second bar of our date, there was a shortage of seats so Susan eagerly suggested she should sit on my lap and I agreed. Even though I was completely into her, my insecurity still flexed its muscles when she reached under my shirt and caressed my pudgy belly, and I flinched as if she might rip my heart out or otherwise humiliate me. Yet Susan persevered and I was amazed that she genuinely liked me. By the end of the night, we were lying next to each other in my hotel room, mostly naked, watching amputees and amputee fetishists on Maury Povich, Jerry Springer, or some other crass TV show. It was hard not to find it hilarious, until Susan's hand wandered into my underpants.

"Am I doing it right?" she asked after about three minutes, a look of confusion on her face.

I reassured her that she was, wondering why she asked such a strange question and with so much concern. I started to reciprocate and for a while, things appeared to be going well. I was very excited, or terrified. Then, abruptly, she stopped.

"Is everything OK?" I asked.

"Yes, let's just not, OK?" she said, instantly transferring her earlier confusion over to me.

"OK," I said.

We naked hugged, finished watching and laughing at the show, then went to sleep. The next time I saw Susan, it was to watch a movie together as friends. We never spoke about that night in the hotel room, and it took me way too much time to piece everything together, but eventually, I realised the cause of Susan's confusion.

Susan had never forgotten that first time we met when my tight trousers left little (although, it turns out, something) to the imagination, except she had assumed the bulge in my trousers was caused by a flaccid penis awaiting arousal. So, when she eagerly reached into my underpants in that hotel room bed years later, she had been expecting me to deliver a bigger package than she found. All the time I had been terrified about her thinking less of me for having an erection in public, that her and her friend had laughed at me just because I found her sexually attractive, when in fact, they thought I was packing something extra special in my pants. There are some things that stick with you forever.

Though Susan and I are still friends, we have never spoken about any of this; it could be that I still have it all wrong. However, it has always brought a smile to my face to recall the day I learned for myself that size can matter. Thankfully, my imaginary giant penis brought a friend into my life, and who can be upset about that?

Ignorance Is No Joke

The age of social media has given us a new host for the pathogens commonly referred to as memes. Quite often these are innocuous, humorous quips that could lighten anyone's day. Unfortunately, they are also often misleading, false, and destructive. Many lie, and some, like the one that brought me to write this post, celebrate ignorance in a way that saddens me.

The specific meme that I am referencing implies that learning algebra was a waste of time. It is often posted with some comment that seems to indicate algebra is nothing more than a pointless punishment thrust upon poor school children for no other reason other than to satisfy the blood lust of an evil teacher.

Algebra meme
Algebra meme

Why does this upset me?

It upsets me because it not only validates ignorance, but it encourages it, it legitimizes the desire for people to not try learning it (imagine a kid at school seeing this, what is it teaching them about perseverance and education?).  I get it; if you struggled with algebra, it's comforting to laugh it off as useless anyway, but this is short-sighted. Even in jest, sharing this sentiment is damaging. This comfort blanket for you might mean an under-achieved potential for your child, or someone else's. Many future and current careers use and build upon the foundations laid by algebra in school (you think Facebook was created by people who did not get algebra?). Let's not do a disservice to the next generation by perpetuating and legitimizing ignorance just so we can feel more comfortable with our own. We all use the principles of algebra, whether we recognise it or not. Reworking a recipe for four people so that it will feed two, splitting a bill in a restaurant, or working out a budget, we use algebra. It may not look like algebra because we rarely write down some equation and then tell us to "solve for X", but it is algebra all the same.

Of course, it is not just anti-algebra sentiment that is being spread by misleading or seemingly innocuous memes. There are far more egregious examples, like those that perpetuate the myths that vaccinations cause Autism or harm more people than they help. These memes have the potentially deadly effect of reducing herd immunity and putting our most vulnerable individuals at risk; those that cannot be vaccinated at all.

Memes are powerful and yet so easy to spread. Just as with viruses that affect our physiology, some memes can be incredibly damaging, like a virus to the larger organism of society. My challenge to everyone is to think before sharing a meme, to fact check, to try to ensure a damaging myth or lie is not being perpetuated, perhaps share more positive memes that encourage rather than discourage. I know that some will think I am being far too serious and want to assert that "it's just a joke", but that does not change the way I feel, nor does it change the impact that "joke" has on others. I am not asking anyone to lose their sense of humour, just to think twice and share memes responsibly. Think about who might see a meme you share, what it might mean to them, and what they might learn from it.

Thanks for reading. Learn algebra.

Breaking The Code

Last week saw the return of Learn Something, a monthly software hacking event held at the offices of Fanzoo Technology in Ann Arbor. Each month, attendees can choose to hack on their own projects or take part in the monthly Learn Something challenge. Teams and pairing are encouraged, providing opportunities to work with new people, tools and techniques.

The message we had to decode
The message we had to decode

This month the challenge was to decipher a message encoded using a simple substitution cipher. Participants started with a copy of the encoded message (known as the ciphertext) and a text file of words from the English language. The message (shown above) is one example of a cipher, known as 'alienese', that appeared in several episodes of Futurama. Though fans of the show have already solved the cipher and we could have searched the Internet for the solution, our goal at Learn Something was to create a software solution that could solve it (or at least narrow down the possibilities1).

What is a simple substitution cipher? A simple substitution cipher is a way of encoding a message by replacing (substituting) each letter of the alphabet with a different letter or symbol. For example, if we had the substitutions `t` to `a`, `h` to `g`, and `e` to `o`, the word `the` would become `ago`.

Alex Zolynsky, one of the organizers of Learn Something, provided a clearer print out of the message with punctuation symbols written in red (see below). The intention was to ignore the punctuation and focus on the actual words, so before we started, one of the participants assigned a letter to each symbol such that we had the message written in a more familiar alphabet (and one that was easier to type on our laptops).

The annotated message
The annotated message

The resulting message read:

`abbc bdefg hgij kble cmna ompf mlc pangaebc jpkgai nb qgo emq cmllgf`

Clearly, our work was far from done, but before I continue with this blog, I need to come clean.

At Learn Something last week, I was buried in some work of my own, and other than the occasional interjection, I was not involved in the challenge. However, at the end of the night, I took the cipher home with me and the following evening, I got stuck in. It took me about three hours to crack the message. How did I do it?

Well, there are many ways to tackle breaking a substitution cipher. For example, if the ciphertext is long, we could use frequency analysis to gain some hints at the substitutions2. However, this ciphertext was short and as such, frequency analysis was not particularly helpful3. Instead, I decided to follow the same track as the participants at Learn Something and take the longest word in the phrase then find words in English that had the same pattern and use that to start reducing the possibilities. So, I opened up LINQPad (my tool of choice for hacking around), and got started.

The longest word in the ciphertext is `pangaebc`. To match words that follow the same pattern, I treated the word as its own ciphertext and made another substitution, just as the symbols had been substituted for letters earler. This allowed me to normalize different words to see if they matched the same patter. Only words that normalized to the same string would be of the same pattern. So, for `pangaebc`, the normalized version is `abcdbefg`. Examples of English words that match this pattern are `airfield`, `windiest`, and the gross`pustular`, each of these has the pattern `abcdbefg` when normalized. In fact, in the dictionary I used there were over 500 matches, over 500 possibilities for the word that could be in our decoded message. Each of the possible matches for the longest word provided a possible part of the substitution cipher. The next step was to take another word from the ciphertext and find English words that matched the pattern of that ciphertext word as well as the substitutions found from the first word, `pangaebc`. This started to build up a tree of candidate words for the decoded message. Each node in the tree contained words that match the substitutions required by its parent node but also matched the pattern of a word in the ciphertext. By recursing this approach for each word in the ciphertext sentence, a tree of possible plaintext4 sentences could be generated.

Once all words in the ciphertext had been processed, I could take the branches of the resulting tree that included the same number of nodes as words in the ciphertext and determine the possible substitutions that might give the right plaintext solution. This produced 15 possible sentences. It was then up to me to read each one and pick the one that made the most sense. Of course, I'm not going to spoil it by telling you the solutions I found. Instead, I encourage you to give the challenge a go for yourselves and see what you come up with (we both know you could cheat by searching the Internet for an answer, but you're better than that, right?).

I really enjoyed tackling this problem. Not only was it a fun distraction, but now I have a LINQPad query that can solve any substitution cipher as long as I know what language in which the message is written. I am definitely looking forward to the next time I attend Learn Something. Hopefully, your interest is piqued and I will see you there. In the meantime, if you give this challenge a go, I would love to hear how you tackled it, what you did differently to me, and what you learned. Until next time, thanks for reading.

Featured image: "Confederate cipher disk" by RadioFan (talk) – I (RadioFan (talk)) created this work entirely by myself. Licensed under CC BY-SA 3.0 via Wikipedia.

  1. to fully solve it programmatically would have needed our software solutions to have understanding of English sentence structure, which was thankfully outside the scope of the challenge []
  2. assuming we know the language in which it is written []
  3. I did try it just to see, but frequency analysis needs a longer ciphertext than we had for this challenge []
  4. decoded text []

A New Year

The last New Year's resolution I made (and the only one I remember keeping) was to never make another New Year's resolution again. Instead, I have tried to do better at setting achievable goals throughout the year and to not beat myself up too harshly if I have failed to achieve them. This year should be no different.

In an attempt to keep myself on track, I thought it would be a positive act if I publicly listed here some of my immediate and longer term goals for the next few months, as well as some general changes I will be making (or trying to make).

1. Write more

I quite enjoy writing and made it a goal late last year to blog once a week, every Monday. I was reasonably successful but somehow slipped since the New Year1. However, just as with my recent slip back into smoking and the ongoing climb back out, I will have to learn from it and forge on.

Clearly, writing more often is not as important as resisting the nicotine siren song, but it is important to me, so I intend to get back on track, posting a blog once a week (perhaps twice, if I can find enough interesting things on which to blog). I would also like to get back into creative writing with some short stories, songs and more.

2. Record more

Two years ago I had grand plans of recording an album. I still have those plans although after initial success with Holding On, I let it slide as a priority. I would like to get back on this and see if I can make Nothing Left To Take before the year is out. This is a big challenge for me as I find the process of recording both exhausting and stressful. Realising that the whole album feels like a lofty goal to me right now, I will settle for at least getting a couple of songs done.

3. Experience more

My wife, Chrissy, and I made a vow last year to prioritise experiences over things. A big part of that has been to travel more. This year I intend to visit my family and friends in England. It has been two years since I was last there and even longer since I saw some of my friends.

Besides England, I would like to see more of the US (some upcoming weddings should help a little with that) and perhaps travel further afield (anyone looking for guests?). I will also be looking to experience new things and challenge my anxieties.

4. Exercise more

My weight and I have a long, arduous relationship. From visiting a dietitian with my mum when I was just 11 or 12, to running in 5Ks, and a lot of good and bad places in between, I have battled the scales. I have recently been losing that battle, especially with the revived hand-to-mouth habit thanks to a brief return to the smokes. With that in mind, I am serious about making exercise a part of my routine and tapping my willpower when pizza comes calling.

5. Read more

Last year I managed to use reading to get myself back into the gym. I discovered that with the help of a decent book, I could zone out and tolerate an hour of exercise. I will continue that trend and look for other opportunities to read. To that end, I have bought myself a Kindle (it arrives today) and will be returning to my childhood ways, losing hours and hours to an entertaining read. Not only will this help me in my creative writing, but I think it will also help in finding new experiences, new conversations, and new friends.

6. Listen more

I talk a lot. It is one of two things that have been said to me more than any other thing that I can recall in my entire life. I am tall and I talk a lot2. Telling me about either changes neither, but I understand why people continue to feel the need to share their observations on these characteristics.

Contrary to what others may perceive, I do try very hard to curb my talking (curbing my height is much more difficult so I don't try), but there is always more to be done. The biggest issue with talking a lot (a side effect of having a mind that never wants to stop) is that I often don't give others the opportunity to talk and share, which means I listen less and learn less. I have made huge strides in this over the years and I will continue to do what I can to get better at this.

7. Appreciate more

Two years ago I started my own gratitude project, posting daily the things for which I was grateful. It started on Twitter and Facebook, migrated to my blog, and then sort of ended as I failed to find the right place to express it. Showing gratitude is important and I want to continue to do so. However, I found that arbitrarily finding things for which to be grateful turned into a burden, especially on days when "coffee" was one of the items.

More recently, I decided that if I was to express gratitude it would be for specific people and their actions, rather than objects and events. Last year as part of this shift in focus, I intended to start a different take on the gratitude project, but I did not follow through with the execution. This year, I will.

8. Contribute more

The flip-side to gratitude (at least for me) is contribution; doing things for others. Whether this is through my efforts at work, in the developer community, or among my family and friends, I want to do more to give to others and contribute to the well-being of others.

And in conlusion…

I am sure I could come up with more things but this feels like a lot to me. I have no idea if I will be able to live up to the ambition, but at least I have a point of focus, a rough outline to guide me as I make mistakes and share success.

Thank you all for taking the time to read my blog. I realise it is not always relevant to you, but I hope that it continues to be interesting. Please share your thoughts in the comments and perhaps share what 2015 has in store for you.

 

  1. I'm writing this on Tuesday, for example []
  2. a third in recent years is that I have an accent – something that I share with everyone else who talks []

CodeMash 2.0.1.5

Happy New Year, everyone! I missed my opportunity to post last week since I was on vacation at the beginning of the year and then at CodeMash immediately afterwards. This year, CareEvolution sponsored two days of NodeBot hacking during the CodeMash precompilers. I did not do a comprehensive survey, but it seemed that everyone had a fun time while learning a little something about building robots programmed using Johnny Five and NodeJS.

Besides walking around and helping people out when facing various problems with their bots, I was master of ceremonies (more commonly known as 'emcee') for the battles at the end of each day. On Thursday afternoon I presented our sponsor session on the culture we have in the CareEvolution workplace. Finally, we also had an open house on Thursday night where attendees could see some of the cool bots that had been created, ask questions, and witness a few exhibition matches.

http://instagram.com/p/xj0RWyAJ6-/

http://instagram.com/p/xhiJcTgJxl/

http://instagram.com/p/xhKBVrgJ5A/

All in all it was a busy and very successful CodeMash for everyone who helped put on all the NodeBots events. If you took part, we would love to hear what you liked or disliked about any of the NodeBots-related sessions at CodeMash this year.