After wrapping up a successful CSS work week in Oslo it was time for a long weekend in London catching-up both with good friends I mostly hadn't seen in years and a new friend I'd recently met in the states. Flying from Oslo to London, it really struck me how much closure a few days had brought, both personal and professional, as well as getting unstuck on a number of things.
Slot Machine Connectivity
It's possible that turning off my mobile data access (due to pricey international data roaming on AT&T, even with a prepaid plan), and thus curtailing nearly reflexive reading of Twitter, Foursquare check-ins, and IM had helped encourage better focus, and thus greater productivity.
You might think that AT&T's terrible San Francisco reception would provide a similar experience, but it doesn't. There's something very different about predictable rare but good service (e.g. only connecting via wifi, or briefly turning on international data), vs unpredictable spotty service.
The unreliability of the latter almost encourages more reflexive mobile usage, perhaps not unlike a five column slot machine - you never know how many bars you'll get, and when 1-2 bars turn up, it gives you irrational hopes of maybe scoring 5 bars, so you keep playing.
The answer then, would be to only hangout places that give you predictable connectivity (cell and/or wifi, none or a lot), so you know what to expect and can plan/use your time respectively. Amazing, or perhaps appropriate, how total lack of connectivity on a flight can inspire insights into the psychology of connectivity.
or, Six Crazy Projects And More
After a brief delay at Heathrow waiting for the express trains to resume running from an unscheduled shutdown, I headed to last.fm headquarters to meet my host for the long weekend and give an informal talk.
Hannah had asked me to give a brief Friday afternoon "Techmosis" guest talk to their engineers (a last.fm tradition) on a topic of my choice, and then join them in their regular Friday Halo session. I sent her my list of crazy topics and for some reason she agreed. Armed with nothing but a white board and a web browser, I launched into an exploration of Six Crazy Projects that I'd been working on during the past couple of years. In rough logical temporal topical order:
- Babylonian calendaring mistake - what happens when you correct a Babylonian calendaring mistake? You get a NewCalendar
- base 60 numbers - What do you come up with when you need a print-safe character compression scheme for an algorithmically reversible personal URL shortener? A NewBase60
- short URLs - How do you make good (or at least harmless) short URLs? With an algorithmically reversible personal URL shortener: Whistle
- personal publishing - personal publishing software including a server-based Twitter client: Falcon
- identity and authentication - By learning from the real-world successes of the rel="me" microformat and Twitter Sign-in, and using them as design and architectural foundation, how do you enable using your personal web identity for signing-in and authentication? RelMeAuth
The last.fm folks asked some great questions, most of which I had reasonably good answers for. Afterwards I asked if they were interested in a couple more crazy projects, and they encouraged me to go on:
- remapping the planet with octal geo coordinates - an octal-based geo-coordinate system that works well as the basis of base 64 algorithmically reversible geo-shortlinks: OctalGeo
- print+URL safe base 64 numbers - a base 64 counting system that is print-safe and URL-safe for encapsulating a pair of octal digits in a single character: NewBase64
And this was when things got really fun (if you're into nerdy topics like algorithmic geo short URLs :).
Last.fm's Robin Lisle asked about how would you use OctalGeo to specify not just a location like an address or building, but also a floor or level of a building, giving the example of tall skyscrapers in Japan (or potentially any city).
At this point I had to go completely off-web and on-whiteboard, because I had thought about the problem of compressing three-dimensional geo-coordinates (even collected some ideas on paper and text files) but had yet to write anything up on my wiki, or frankly, even run the ideas by anyone else.
I briefly whiteboarded the derivation of Cubespace. Just as OctalGeo subdivided 2D geo-coordinates into ever shrinking 1/64th squares for each digit (3 bits for x and 3 bits for y), I drew a cube, subdividing edges into 4 segments each, faces into 16 squares each, thus a whole cube into 64 subcubes, and announced: this is when we enter Cubespace.
By encoding 2 rather than 3 bits per coordinate, in 6 bits we can represent 3 dimensions rather than 2. Simple math (or "maths" as the English call it, as Jeremy would teach me two weeks hence).
By combining the two encodings, it is possible to first use OctalGeo digits to specify a square of area on Earth (WGS84 projection) that is no wider than the twice the desired absolute value altitude, and then switch to CubeSpace to refine that square with a cube of the same size, half above, and half below the surface, with a digit for each 1/64 subcube of additional precision desired.
And suddenly it was time for drinks, eats, and a movie.
Scott Pilgrim vs. His Mistakes
The next 24 hours started simply enough. Drinks with last.fm friends at a local pub, then a burrito (yes, in London, and it was quite good), followed by a viewing of Scott Pilgrim vs The World. With each viewing of Scott Pilgrim, both new lessons found, and old lessons reinforced.
Pilgrim's character makes plenty of mistakes in the movie, and even more are hinted at in his past. But despite these mistakes, he still "wins" and gets the girl. Why?
Because it's just a movie, that's why. That being said, many of the film's characters are reasonably well written, and some of the points made resonate with at least my personal experience - video-gamesque fights notwithstanding (though watching the movie repeatedly has made it hard not to see blinking bonus numbers appear and float upwards every time I complete some task or new achievement).
Despite it being an oft-repeated startup cliché, you can learn a lot from your mistakes. You can learn a lot from others' mistakes too. Everybody makes mistakes. What matters is how you deal with them, what you do next.
Making The Best Of Failure
Still exhausted from a week of CSS working group and spec-writing intensity, I slept in, again. And I'd also just run out of laundry. Lucky for me my hosts Hannah and Jamie had a washing machine so I started a load. No matter I thought, the plans I'd made with my other friend were only vaguely scheduled sometime that day/afternoon, and I went ahead and communicated where I was at / up to.
About 4pm I finally started making my way over to meet up and messaged as such, within minutes I got an angry response about it now being kinda late. And now that sinking feeling: in an ambiguous situation, I had guessed wrong, misinterpreted, probably miscommunicated, screwed up, and made the person I was going to meet angry and upset.
Oh I tried being flexible, suggesting alternatives, hoping to salvage something, but despite effort and apologies, apparently my implicit scheduling failure had caused too much misunderstanding, thus, shut down again. Sometimes it's good to know when to give up on a bad situation I suppose, and let failure be.
About that learning from mistakes thing. You can often learn more about someone by how they deal with mistakes than their making (or avoiding) of mistakes in the first place. And when you make a mistake that impacts someone else, and deal with it as best as you can, you can learn a lot about them by how they respond to your making and dealing with a mistake.
In this case, it became clear that from my perspective, not only was I apparently given a very low margin for error, but no chance of recovery in case of error. I wouldn't figure out the further implications (best to just not hangout with this friend) for a few days hence.
Pouring Into A Dance
My hosts graciously dealt with my resultant emo-implosion at having not only screwed something up with an apparent delay, but hurt someone's feelings at that, and my sense of helplessness from being unable to fix it.
We ended up having a nice late lunch out, and afterwards, Hannah took me out to a couple of pubs. Suffice it to say I sampled plenty of cider, vented most of what I felt at the first pub, and by the second pub was looking forward to what/how could I do better, both eventually and tonight.
After a swift evening walk, stopping only to pet a kitty on someone's stoop, we arrived at The Lexington, where sampling whiskey is what one does. Hannah introduced me to a friend of hers from out of town, who was supposed to crash with Hannah but couldn't, apparently since I was crashing there.
Upstairs there was a band or DJ playing, which was apparently sufficient motivation to pay the £10 cover and head on up. I don't remember the name of the whiskey we ordered. No matter, there was a dance floor.
We must have spent an hour or two talking and dancing, mostly dancing, some dancing with talking. I do appreciate someone who can dance for the fun of it, and enjoy it for what it is. It was simple, it was nice, it was right, and it sure wasn't going anywhere else.
Sometime in the singleton hours, I met up with Hannah, who was also ready to call it a night. I bid my new friend goodbye with a quick kiss on the cheek. Later I'd find out that she's apparently a popular comic writer and illustrator, and the fact that she'd actually bothered to spend that much time hanging out, talking, and dancing with me may have meant something. Again, I failed to pick-up on subtle (or perhaps not so subtle) cues from a girl. Yet we had nerdy discussions, and we danced, and for that I was happy.
As I walked off the dance floor and left the club with Hannah, everything slowed down, became heavier, and the evening's energy evaporated. We caught a cab, the framerate dropped to about 5-10 frames per second. Somehow I made it up stairs and under the covers on an air mattress and promptly fell asleep.