Paula, Isabel, and I had our first multiplayer Tidepool romp yesterday, which you can see here (1st four minutes).
This represents the culmination of quite a lot of new work:
The significance of these under-the-hood changes may be unclear, which is why I wrote a book chapter about it when I started.
This morning I woke with designs floating through my sleepy brain. They first appeared as problems to solve, stumbling blocks on my way to the next Tidepool thing. As short term solutions occurred, they mingled together to form something more general, more powerful. Crystallizing from the depths of my subconscious came an old friend, the core of my Gravity architecture from the late eighties: the message.
Yes, the term is impossibly vague, and hardly new. But 27 years ago, as I walked the top of the Alpine Palisades, writing in my design books, imaging a world of interconnected agents, the Gravity message was central to my designs and my life. Everything hinged on agents sending messages to each other. The very substance of change was encapsulated in these tiny commands. I made up words for the core agent actions … IM (impression, input, receiving a message), MU (change, context, processing a message), EX (expression, output, sending a message). Agents received, processed, and sent messages, which collectively I called IM-MU-EX-A, the name of my current company.
Over the years, messaging as a general concept has seen some success. First with email (TOs, FROMs, SUBJECTs, bodies), then instant messaging (nicknames, channels, buddies, text), then the Web (headers, markup, requests, responses). Through the veins of the Internet course little message packets from machine to machine, the very life blood of our civilization and culture.
This morning, as I woke further, as the emerging design became clearer and clearer, I began to remember all of it: the why behind messages and how they would help Tidepool. I made coffee and began my ritual of pacing in the basement with my voice recorder, taping “Kismet 168” for a good eighty minutes till I’d nailed down the design.
And now, just before typing “class SbMessage” for the first time, I imagine these little packets of change streaming their way from Tidepool to Storymill to Tidepool, from agent to agent around the world. I envision a child in Rwanda changing the color of her illustrated dragon’s eyes, then a little message being made and sent through the Internet to another child’s machine in Vienna, who sees the color change and types, “Oh I like that”, a new message which gets sent back to Rwanda.
I could write about how my new (and old) message designs enable versioning, replication, infinite undo, timestreams, and more. Instead, I’ll simply click “Publish,” imagining who might someday read this message (IM), who might be changed, if only a little (MU), and what they might say (EX).
Think of the last time you were frustrated with your phone or computer. “Why is it doing that? I don’t have time for this.” You try something. Doesn’t work. You try something else. No luck. Maybe you ask a friend or IT. Maybe you search online.
Since home computers were new, I’ve been one of Those Guys, the person you call when you’ve exhausted all options. I nearly always find a solution, often quickly. My wife jokes that I just have to look at a computer and it’ll fix itself. When problems last longer, she’s impressed with my patience, trying for hours, long after most would give up. Being a software developer gives one a high tolerance for computer snags. We spend our days fixing our own messes. The minor glitches most people experience hardly phase us.
Occasionally I find a problem I just can’t solve. We call this “falling into a hole,” and it’s NOT FUN. For more than a week, I couldn’t get Tidepool talking to Storymill on Europa, our dedicated server. I was using a technology called Enterprise JavaBeans, which was working fine on my machine, but not between machines. I knew it was probably something simple, but after reading reams of forum posts and trying every nonsensical thing I could think of, it just wouldn’t work.
Being in a hole is its own kind of madness. “Maybe this?” (Nope) “What about this?” (Sorry dude) Imagine clicking “run” with hope in your heart, over and over, six times an hour, for day after endless day. This is the dark side of software development, the unsung trial-by-fire we all unfortunately experience from time to time.
In the end, the solution couldn’t have been simpler. I simply had to move a single word from one line to the next in a text file on Europa. So why did it take more than twenty hours to figure that out? Good expletive question.