timothy falconer's semantic weblog
Big Fractal Tangle

near zero

As they say in the backpacking world, yesterday and today were “nero” days, or near-zero days.  I began Friday anxious and overwhelmed, then gradually sunk lower into a prolonged funk, a sure sign of burnout.  Developing Tidepool during back-to-back business trips took its toll, to say nothing of the stress of my other neglected project.

While curled in a fetal position, feeling my long ignored emotions as they caught up to me, I dwelt on just why it is I’m doing all this, and whether it’s worth it.  Existential doubt is a familiar theme in any bounds-stretching project.  It’s a recurring rite of passage to question pretty much everything you once held dear.

I’m a week away from a conference where I need to brag shamelessly, and tonight I feel like I just don’t have the power.  Between the hotel, bus, and printing costs, the conference will cost $2000 we really can’t afford right now.   Yes, the conference could lead to great & mysterious things.  Yes, I’ll make contacts that’ll build our community.

But it’ll all be a waste if I’m a lump on a log. It’ll hurt that much more if I don’t have it in me to represent my dream.  Tonight I want to cancel the trip and switch to money-mode.

Okay, I’ll sleep on it. If I don’t post for a while, assume I put Tidepool on a shelf again so I can bill a bunch of hours.

we have codability!

Tidepool is now officially a programming system.  Today’s version lets you teach your agents new words and have them execute their steps.  For example, when I type this:

#seymour.3 when mosey, begin forward 1000, turn 90, sound ow, end

the agent “seymour.3″ learns that the word “mosey” means it should move forward 100, turn at a right angle, and make a sound.  To do it, type:

#seymour.3 mosey

See it yourself in our latest screencast:

Hear me debate the particulars in yesterday’s and today’s podcasts.

animated gifs, almost
Last two days, I’ve been knee-deep in code, which is a wonderful feeling.  There’s nothing quite like having time and freedom to craft things the way you want them, especially after a LONG code-freeze (six months of nothing new).  Not surprisingly, yesterday’s and today’s podcasts were mostly tech-heavy details of what I’m building.

I did grant myself a non-scheduled fun thing.  For a while I’ve wanted to have a page on the website that showed everyone’s sketches and animations in-game.  Showing the images was easy … the tougher part was converting my PNG frames into animated GIFs on the fly.  I got it almost working, which will have to be good enough for now.  Yes, it’s not erasing previous frames as it proceeds through the GIF.

two weeks left

Friday in Phoenix, I gradually talked myself down off a ledge and lowered my expectations for this release.  Today back home, I reversed my views, convincing myself to finish Alpha 3 before the ISTE conference.

The thing about deadlines is that they only work if you really believe them.  The stress of an approaching date helps focus and limit efforts.  For most, it’s the needed kick in the pants to actually do the work.  Or not.  Too often deadlines sap your motivation, causing burnout and lost productivity for no good reason.

For me, deadlines have their own kind of magic.  You visualize the impending outcome and circumstances align in mysterious ways.  Great ideas arise that normally wouldn’t.  Things click into place exactly when needed.  Wrapping up a release can be as exciting as good movie … surprises, setbacks, solutions, resolve.

I’ve imagined myself showing off Tidepool at ISTE for years. Here I am only weeks away and close enough to finish the part that’s better than Scratch and Tynker.  Do I settle for the last version and say, “Imagine the rest”, or do I finish the new version so I can showthem why Tidepool is better.  Obviously the latter, which means I’ve got a deadline.

Fourteen days.

Here’s a punch list I just put in our stairwell so my wife and daughter can follow along.

minor milestone

Yesterday and today I talked about some the nitty-gritty details of the eight new features I’m adding.  With only twelve days left before testing, I’m getting much less ambitious. Amazing how a looming deadline clarifies your expectations.

Before this though, I need to finish the trailer and printed materials, so I’ve got a mini-deadline now, the 17th, which is now set aside to make game movies for the trailer and the postcards.  Before I can do these, I need to finish the director, the primary programming interface in Tidepool.  Both the movies and cards will show it.

Meanwhile I’ve been battling some extreme exhaustion, mostly from my ill-fated attempts to adjust to this new time zone, which I’m sure will only get worse after my red-eye flight tomorrow and the whiplash jet lag soon to follow. All I can do is keep moving forward.

And oh!  I forgot!   Yesterday while coding, I typed “#seymour.1, forward 1000″ and seymour moved!   A minor, but exciting, milestone.

EDIT: The mouse should be named Alan, not Seymour.

director flow

Today I paced an empty dark Phoenix downtown while I talked and sketched the Tidepool director box UI flow.

Imagining how clicks and presses navigate a complex interrelation of data is never easy.  Imagining children using it is a whole ‘nother ball game.  What stays on the screen at the same time?   Will the player get lost?   Will she need to click back and forth between the panes too much?

In the end, you make the best design you can and implement it.   The sketch above is like a lump of clay that later gets molded after repeated use.  No one ever gets it right the first time.

five, maybe six

This morning’s talk was a good one.  As I paced my hotel’s pool deck in downtown Phoenix, I discussed the five coding concepts in Tidepool, then introduced a possible sixth concept.  If you’ve ever wondered how someone actually makes a programming language, this talk might interest you.  

The five concepts are:

agents - the codable do’ers in Tidepool
properties - name/value pairs, aka variables, parameters, arguments
rules - bundle of things to do when conditions are met, aka functions or methods
conditions - a list of boolean expressions that determine if a rule is fired
messages - instructions for an agent, aka statement, method call

Towards the end of the talk, I introduced “forms” as a general way to introduce the concept of records or objects.  This led to a coalescence of UI & concepts that I haven’t completely thought through yet.  Instinctively, properties and conditions seem like they should be contained in forms.  I need more exploration to say exactly how.

In other news, I finally fixed the “don’t turn when I move” bug.  My changes unexpectedly sped things up considerably, so I had fun zooming around the world on hyperdrive before I put a slow-down factor in there.  It’s good to know players can get zippy if we want.

twenty-one days

Today I fly to Phoenix and I woke up too damned early.  Stressing over all of it, today’s talk is a jumbled mess of pre-conference prep and daunted expectations.

My reach has always exceeded my grasp, so why should now be any different?   The blessing of such ambition is consistently exceeding the norm.  The curse is stress and broken promises.  “In the long run men only hit what they aim at. Therefore, though they should fail immediately, they had better aim at something high.”

So what’s to do?  Fifteen features, 9 improvements, 22 bugs, conference handouts, finish the trailer, make the Kickstarter page, publicize to new audiences, and keep these daily devlog posts going.  All the while spending working hours consulting for the State of Arizona and all my “free time” doing billable hours on my other project.

Twenty-one days. Criminy.  Will I finish all of it?  Of course not.

Will I try?   That’s the plan.

marketing haikus

The hardest thing to do is write tiny bits of texts.  Today I debated the new Tidepool talking points which, when written, will go on the back of the postcard and will replace the “About” page. I’ve talked about each point a hundred different ways over the years.  I’ve written a full business plan and made a project trailer.

So once more, in rough form, here goes … what makes Tidepool different?

  • world – explore and create a shared hand-drawn 3D world
  • stories – make interactive stories and games for others to play
  • coding – program your creations to watch for conditions and respond to events
  • courseware – build supplemental educational materials that teach concepts deeply
  • fundraising – players can purchase crystals from vetted schools and NGOs
  • agents – chat with cognitive agents, allowing a conversational approach to coding

A good start, but more is needed before it’s brochure quality.  I’ve also got to match my icons to the concepts:


website revamp

Last time my wife used the Tidepool website, she was overwhelmed.  “Where do I click?  There are two many choices.”   Over time, the site has grown in complexity.  With fourteen choices on the side navs, it was overdue for some serious pruning.

This morning I split the site in two, with half pertaining to the actual game and the other half to project nuts and bolts.  Now you have to click “Project” to see things like “Roadmap”, “Biz Plan”, and “Tracker”.   

While this helps, I’m still feeling fairly “meh” overall.  I designed this to be an internal project site, so didn’t spend much wow time on it.  I’d love to add more images and color, with some nifty scrolling sections as is so common these days, but I just don’t have the time to do it justice.

Besides, I don’t want it to be too slick.  Tidepool is a hand-drawn world.  The website should showcase this aesthetic.

moo cards

In 24 days, I’ll be attending the largest annual gathering of education tech enthusiasts, the ISTE Conference in Philadelphia.  While I won’t be presenting, I do hope to speak with as many teachers as I can.  This morning I debated what printed materials to hand out.

I’m a fan of moo.com, primarily for their ability to print a different image, front and back, on every business card or postcard you print.  I’ve been around the advertising world for literally my entire life.  Such flexibility (and pricing) is pretty much unheard of until recently.

I plan to print a variety of in-game sketches on the front and signup details (including unique codenames) on the back. Right now I’m debating between their square cards (left), mini cards (center), and postcards (right). The postcards would be best to leave on a table for people to take, while the others would be great to handout.  At these prices, I might even do both.

Now to convince my alpha team to spend the next few weeks drawing sketches.


rubber duck debugging

In today’s podcast, I talk through a current bug involving 3D coordinate transformations.  After some recent refactoring, the player no longer moves in the direction they are facing.  The WASD keys move along the X and Z axes only, even though you can look around correctly.

Talking about it with you, the imagined audience, is an example of something called rubber duck debugging, where you try to explain a problem in simple terms to a non-technical stand-in.  The act of explaining it often clarifies the problem, allowing you to fix the bug.  In truth, the rubber duck is often more helpful than most managers.

Last night I was at dinner with my consulting client until 10pm.  Between the time this bug has taken, and the hours I’ve lost down here in Jackson, I’m beginning to worry that I won’t be able to make up the lost time.  I’m not at the “change the plan” stage yet, but I’m fast approaching it.

what if we succeed?

Today I let myself dream a little, imagining what I would do if Tidepool attracted thousands of players.  Such “counting of chickens” has both practical and motivational value.  Planning for 25,000 users is daunting technical task in the short term, especially when you consider that popular Minecraft servers rarely (if ever) reach that limit.  

I do have a few things in my favor. First, I’ve been designing for a large multiplayer environment from the start, unlike Minecraft.  Second, I’m using the same foundational tech that large companies like Bank of America use (the Java EE 6 stack).  Third, I’m an “application performance monitoring” (APM) consultant, having worked with companies like Marriott, Lowes, and (this week) Saks Fifth Avenue to help keep their LARGE systems running smoothly.

All things in my favor, but Tidepool is a different beast than these lean (and well funded) corporate systems.  It takes significant time and effort to test realistic load, especially for a system with graphics-intensive clients.  Firing up LoadRunner to simulate web users is one thing.  Imagining what’ll happen when 500 players decide to meet in-game for some community event is another.

Given this, I’ve been rethinking my “open the floodgates” date a bit.  Perhaps better to have a closed beta for a while.

four hurdles

Today’s podcast begins with a rundown of the four primary ways a software development schedule can slip:

  • real time – you’re not able to spend enough hours
  • poor focus – your brain just can’t latch on
  • tech troubles – third party nightmares or your own damn bugs
  • goldplating – you make something better than it needs to be

When a deadline is looming, these fears are my constant companions. Collectively they can turn a month into three pretty easily.  We try to manage this with daily status checking and course corrections, but even then the schedule’s pretty much a gamble.  Software is hard.

So how do I know that Milestone 3 will be done in the next nineteen days?   Honestly, I don’t.  It’s a reasoned estimate, one that the software gods are likely laughing about right now.   With more than thirty years of software project experience behind me, I can say with certainty that software schedules are uncertain.

Which is why we use tools like agile and timeboxing, but that’s another story.

prepping for the party

Two weeks since the Alpha 2 launch and my website visits have simmered down to a handful a day.  We reached 255 new visitors, with only 9 signups to test the next version.  Feel free to signup now and reserve your username. 

I’ve managed to write daily devlog posts, which seems to have helped on TIGSource, but nowhere else (ISTERedditTwitterG+Facebook).  I’m planning to add a few new communities, such as homeschoolers, but I’m beginning to think my posts are too abstract to generate any interest. I’ve started to use screenshots more.  Perhaps if I draw an animation of a cat playing a piano?   

Today’s podcast talks about creating compelling content and improving the website. Here’s a quick scene:

ghostly friend

Well, yesterday I really broke things.  Tidepool has several commands that operate on the player, such as forwardrotate, and so forth.  I wanted to generalize the system to use the same commands on any visible item in the game, so I could say “seymour.19 forward 20″, etc.

To do this, I needed to move a lot of well-tested functionality from the TpCameraGroup class (which controls what you’re looking at) to the TpItemNode class (which controls each visible item).  After an unholy slew of cut-and-pasting, I tried Tidepool and found that you can no longer move.  Even stranger, as you do try to WASD your way around, the player’s “lamp” (a light source that goes with you) does move, giving the impression of a ghostly friend walking without you.

A few attempts to fix this made things even worse.  I start today with the player looking straight up at the sky and no way to move.  Luckily, we use version control, so I can revert this mess if I really need to, though I’m hoping to find the bit I missed this morning.

Aside from this, today’s podcast talks about the core command set.

command & control

Some code is central to everything, a kind of Grand Central Station through which all activity passes.  Nowadays such code is usually provided for you by third-party frameworks.  Since I’m essentially making a framework, I get to craft my own centerpiece, which I just named perform, which I discuss in today’s podcast.

Whenever you press a key or issue a command, it goes through perform. Each line of your scripts go through perform.  Whenever a player near you does something, it goes throughperform, both yours and hers.   If there was one place in all of Tidepool’s twelve-thousand pages of code where a bug would wreak the most havoc, it would be the nine lines of perform.

Which is why I’m nervous, since yesterday I completely rewired things to allow for the new programming functionality.  Such major changes are best left for the beginning of milestones, since this gives time to let the ramifications reveal themselves.  We’re 30 days from the ISTE conference, but I’m still leary of such system-wide changes.  Time will tell.


down morning

I am of course imperfect and emotional.  While academia and business pretend they’re immune, working solo on a two year project, I have no such luxury.  From the start, I’ve maintained that the biggest risk, the most likely reason for failure, is not being emotionally strong enough to finish.  While I left this risk off the business plan for obvious reasons, it’s been foremost in my mind all along.  I guess I should give myself credit for putting in a full year so far.

Today’s podcast is a good example of the periodic “talking to” I give myself when I’m feeling down.  While most would think it a mopefest, I suspect others can relate.  Much is made in our culture of the struggling writer or painter, working alone in frustration.  Programming is no different.  Whether part of a team or alone, we each wrestle with our doubts.  Being the sole designer, programmer, marketer, and tester is its own kind of gauntlet.

The struggle isn’t technical.  It’s human.

blinders and design

After a year plus working on my own, it’s both wonderful and horrible to have new people playing Tidepool.  As hard as I try to find and fix my own bugs, I’m necessarily, categorically, awful at the task.  Like racehorses trained to go straight around a circle, developers have well-established blinders with their own code.  We create our own ruts, repeating the same sequence of steps sometimes hundreds of times until we can no longer see another way around.

One funny, and inexplicable, example happened last night.  I was playing Tidepool with my friend Jon, typing to him, making jokes.  “Wait, what just happened?”   A little later, “There it is again.”  Turns out whenever you type the closed parenthesis, it sends you “home”, just as if you clicked the home button.  How on earth did I go so long without finding this bug?   Well, it turns out I didn’t make smiley faces with myself when typing “this is a test” and “right back at ya” over and over.

Also in today’s podcast, I brainstorm the new director box, a fresh and full-of-possibility UI design … my favorite thing to make.  Instead of talking about it, here’s a scan from my design book. Nothing makes me happier than solving puzzles like this.

summer goals & kickstarter

A big part of developing & marketing a software product is management, or talk-talk-talking through your goals, plans, and pesky side issues.  Given a choice, I’d gladly ignore such things and happily wallow in the code all day, but given my background and skills, I’m usually the one brainstorming schedule and marketing plans, as I do in today’s podcast.

The plan is to release the next version, Alpha 3, the programming version, on June 20th.  On that day, we also launch our Kickstarter campaign to raise funds for our courseware authors.  I’m planning to pay eight people to create 24 courseware units.  Each will get paid $1000 a unit for 40 hours work (two weeks).

Kickstarter donors who give $50 or more get to use Tidepool right away.  All other donors wait till we finish our Kickstarter and release Alpha 4, the courseware version, on July 19th.  By then, we should have eight units.

A month later, we launch the Tidepool beta on August 13th.  On that day, we open up the floodgates and let everyone play.  We focus our publicity efforts in August on teachers and schools, who are just beginning their fall prep.

* $50 gets you in during Alpha 3 (June 20)
* $25 gets you in during Alpha 4 (Jul 19)
* everyone gets in during the beta (Aug 13).

Sounds like a plan, and a lot of work!