Tuesday, December 1, 2009

To WoW Programming: I’m Sorry

This is an open letter to my ex-colleagues from WoW Programming, and will also give the addon community some insights into my “retirement.”


Hi everyone,

I owe all of you an apology, however belated it may be. I’m very sorry for all the added headaches, missed deadlines, and other ramifications of my departure. While no explanation would be fully satisfying, you all deserve at least some insight into where I was coming from. I don’t expect you to excuse my actions, but at the very least your frustration will be directed at my actual motivations rather than whatever impressions I left at the time.

In hindsight, I began burning out on WoW even before work began on the second edition. I wasn’t writing any new addons. I was only supporting my old addons enough to keep them running in new patches. I quit my position as forum MVP last December. I was tired of dealing with users, tired of feeling like what used to be my passion was now a chore. Again, this is all in hindsight; I don’t remember being conscious of this for the most part.

Given that last bit, I was totally gung ho about working on the book. I am very proud of what we accomplished in the first edition, and was deeply grateful to be a part of it. I had swarms of ideas rolling around in my head for my chapters. Then, for whatever reason, I procrastinated. Whether it was subconscious pressures from the difficulties I was having or plain irresponsibility I can’t say (nor would it really matter in the long run).

Of course, I spent plenty of time rationalizing to myself. “The best work I did on the last book was when I crammed for two weeks of near sleepless nights.” “I scheduled my submission dates toward the front end anyway, so I’ll have time to catch up.” “My wife just got laid off,” “The house needs work,” “My day job just became über busy and stressful.” All true, but certainly no genuine excuses among them.

So the beat went on, until March 18 when the reality of the situation began to sink in and I suggested we pull in some help for my part of the API docs. I also started experiencing some of the hindsight I mentioned above. To reduce my stress, I officially retired from addon development by releasing all my addons to the public domain.

Two days later the feces impacted the rotary air distribution device for me when Blizzard released their new addon policy. This was an extremely emotional time for me, for reasons I can’t discuss. Suffice it to say it goes far beyond my visible reaction on the forums and has little to do with my “legal theories” on the matter. Such is life that I’ll never be able to express my true feelings on the matter.

After the fallout from the policy announcement (culminating in Blizzard wiping every post I’ve ever made from the forums, a great loss to them no doubt) I entered a period of deep conflict. On the one hand, I felt profoundly betrayed by and wholly disillusioned with Blizzard and WoW. On the other hand I highly valued my commitment to WoW Programming. How did I deal with this? Denial.

For the first two weeks of April, I ignored everything going on in the wow community and focused all my energy on my chapters. At first, I even felt like I made it to the same “zone” I was in during my first edition cramming. I churned out three chapters in a week and was well on my way to the rest of them.

But then something clicked. Suddenly I became acutely aware of those troubles I mentioned in hindsight. From that point on, I could barely force myself to sit in front of the computer at all, let alone make any progress on my chapters. I started withdrawing from the community, I started procrastinating at work, I even started closing myself off to my wife. Eventually I realized I was sinking into a depression, something that has never characterized me (except maybe after 9/11). This is when I made the decision to quit.

I had to do it for my sanity. I had to do it for my love. I had to do it for my job. But it didn’t have to be. Much of this could have been prevented had I met my original deadlines. Perhaps I still would have gone through the same troubles, but it would’ve been at a stage in the project when the rest of you would have been better able to deal with it. For that, and everything else I’ve mentioned, you have my deepest apologies.

Sincerely,

Matthew Orlando

Monday, November 30, 2009

North Bay Skeptics

The North Bay, and Sonoma County in particular, is a hotbed of anti-scientific thinking. Vaccine hysteria, modern medicine denial, ideological faux-environmentalism, you name it, we've got it.

I'm starting this group in hopes of connecting with some like-minded locals. Even if changing the tide is a futile effort, at least we'll be able to commiserate. Preferably over drinks.

On Meetup: http://www.meetup.com/North-Bay-Skeptics/
On Facebook: http://www.facebook.com/group.php?gid=190946669144

Friday, November 20, 2009

Totally Random Made-Up Term for the Day

en nom
adj. - In the process of eating (nomming) or being eaten (nommed). Examples:
“There is a picture of a steak en nom in my photo album.”
“I don’t want to go to McDonald’s because I’m already en nom.”

Monday, November 2, 2009

Doing the Wave

I’m sure this isn’t the first blog post about Google Wave with that title, but it helps illustrate the potential ubiquity of the system. Besides the obvious and oft-mentioned nod to Firefly, “wave” itself carries several connotations matching up with its intent. Most electronic communication manifests itself as a wave at some point or another. The act of waving is itself a method of communication. You can ride the wave while surfing the web. But this post isn’t about the name. It’s about aspects of Wave many reviewers seem to have missed entirely.

Have Revolution — Will Wave

Wave will revolutionize communication. There, I said it. I drank the Kool-Aid and placed my bets. This is something I can get behind and evangelize, and I am. In fact, it’s exactly what I’ve been waiting for on so many levels…

But communicating the advantages of Wave to a wider audience than the geek crowd has been challenging at best. Every piece of “mainstream” coverage I’ve seen so far (CNN, Fox, MSNBC, etc.), has either completely missed the point or has contained blatant falsehoods. I don’t hold it against them, however. From my point of view, the blame falls squarely on the shoulders of the tech-savvy reviewers, through whom mainstream media receives their filtered information.

The problem is a fundamental disconnect between the way the two crowds conceive of the changes Wave brings. Most of my geeky friends understood immediately what manner of things you could accomplish with Wave. The possibilities are endless. And there’s the real rub… Rather than trying to explain how Wave will immediately benefit “normal” people, we’ve tried to extol the vast and plentiful virtues of the future of internet communication ZOMG!!!11one.

Gogo Google — Away, that is

Besides the basic failure to demonstrate the benefits of Wave, we have also failed to separate the Google from the Wave. Much fuss has been made about Wave as implemented by the big G. All that fancy AJAX, and “shiny” chrome are simply the bling-bling of Wave world (part of me can’t believe I just wrote that).

If we truly want this to be the next wave in internet communication, we need to direct attention towards the Google-less components of the system: the Wave architecture and the federation protocol.* The saddest part of this story is that the Wave team emphasized this throughout the 1:20 long demo. But “architecture” and “protocol” are about as catchy as a genetic disorder (newb note: you can’t catch those).

The simple fact is that many people will be (and have been) turned off by the very things the media has been emphasizing. Occasionally they remind us that it’s only a developer preview, but first impressions are the most precious. After my few hours toying with Wave today, I can probably name the members of my family who would be turned off immediately.

My greatest AHA! moment during the presentation was when they brought up the Initech Wave client. Wait, what? Did I just suggest a console client will help invite the masses to the party? In a sense, yes. This is where wave really shines. (No, really!) All of the chrome and UI magic is utterly meaningless in the scheme of things.

Imagine if Microsoft had developed Outlook and then opened up the Exchange protocol to standardization. Would we not still have Thunderbirds, and Evolutions, and Eudoras, and pines? Google’s wave interface is nothing more than a single interpretation of what it means to wave (yes, I’m making it a lower-case verb). It’s a damn shame to lose a sizeable audience by scaring them away.

Something of practical value

In a break from my usual rants, I’d like to propose some concrete approaches for people to employ when trying to convince others.

  1. Make more clients! I know it’s a bit early to be making this demand, but we really need to show what else is possible with wave. To get the most bang for our klocs, we should begin by exploring simpler interfaces that put the emphasis on the mechanics of the conversation model.
  2. Re-target your conversations to put emphasis on the mechanics of the conversation model (bah… “mechanics,” “model,” maybe we should start searching for new language too). Extensions? meh. Bots? meh. Being able to follow who said what when? Oooh… (this may even help with marital spats). Eliminating header crap, re-re-re-formatting issues, attachment corruption, forgotten “reply-all”s, and other present-day annoyances? BIG OOOOOHHHH. Spontaneously switching from “I’m writing an e-mail” to “I’m chatting with someone”? Well, maybe that’ll take a bit more effort, but you get the idea.
  3. Remind people explicitly and often that “Google Wave” and “Wave” are not synonymous. What you’re seeing now is essentially the first version Hotmail cum Wave. When you look at how many differences there are between Hotmail and other e-mail clients out there (and even previous versions of Hotmail), it will be much easier to grasp just how nascent this technology is.

With all that out of the way, I’ll follow up at some point with my impressions of Google Wave. :)


* I say they’re Google-less because as open standards they will be under essentially public control.

At about 1:08:00 in the long demo.

Saturday, October 3, 2009

From Frivolity, Functionality Follows

Custom operator library for C++

Several months ago a friend of mine came up with a way to make valid C++ out of ^_^. Using the code in that link, foo ^_^ bar is equivalent to assert(foo != bar) (as long as foo & bar are implicitly convertible to ints, of course).

The topic came up again the day before yesterday, and I decided to try implementing it myself (having entirely forgotten what the original code looked like). My version used a template so that the operator could be applied to any type. When I tested it using an assertion instead of an exception, I stumbled upon my compiler’s ability to optimize the entire operation away when compiled in release mode.

After playing around with the template design trying to implement other operators, I realized the overall design was highly susceptible to generalization. So began a 48-hour mission to put together an easy-to-use library for creating custom operators. The result?

IdOp*, short for Identifier Operator, provides a few simple macros (at least on the front-end) to generate all the necessary templates for a wide variety of operator configurations. Here’s a small sample to whet your appetite. Further details are available in the source code.

// SIMPLE
//   x ^__- y <=> x / y
IDOP_CREATE_RIGHT_HANDED(^, __, -, Examples::Quotient)

// COMPLEX
IDOP_CREATE( _ ,
    IDOP_LEFT_HANDED( - ,
        // x -_^ y <=> x + y
        IDOP_OPERATION(^, Examples::Sum)
    )
    IDOP_LEFT_HANDED( > ,
        // x >_> y <=> abs(x - y)
        IDOP_OPERATION(>, Examples::Difference) 
        // x >_< y <=> if (x != y) throw
        IDOP_OPERATION_RET(<, Examples::ThrowNotEqual, void)
    )
    IDOP_RIGHT_HANDED( - ,
        //  x ^_- y <=> assert(x != y)
        IDOP_OPERATION_RET(^, Examples::AssertNotEqual, void)
        //  x |_- y <=> x * y
        IDOP_OPERATION(|, Examples::Product)
    )
)

The only feature I feel it’s missing is the ability to modify one or both of the operands. When I was originally designing the templates, I threw const around like crazy to make sure I didn’t miss out on any static evaluation. Now that I have the code generation architecture finished, it should be a breeze to add in mutable operands.

Then come the joys of documentation…


* I've been pronouncing it EYE-dee-ahp (sounds sort of like giddyup) or EYE-dahp

Wednesday, September 9, 2009

Live Writer – First Impression

Well, for GG Hubble! I decided to give Microsoft’s Live Writer a swing. So as first impressions go, this really is quite first (I probably will never go into any depth because I don’t blog enough to do anything deep ;) ). Oh, and expect me to be excited about things that you might find mundane.

After telling the software that I already had a blog and entering my login info, it immediately downloaded various resources from the website and presented me with an editor:

Live Writer

As you can see, it determined the styles in use on my blog and formatted the editor to match. There’s a preview tab which, unlike Blogger’s preview, actually shows your new post as it will appear on the main blog page. As far as I can tell, everything else is pretty much self-explanatory.

I’m a bit surprised that it doesn’t use a ribbon, but I think the toolbar layout is something familiar to most web users. It reminds me of the various JavaScript WYSIWYG editors you see all over the web. The rest of the UI has sort of a Visual Studio meets Windows Explorer look about it which I find appealing.

I do wish that the source editor did syntax highlighting, but I don’t anticipate using the source editor much. Oh what’s this? “Add a plug-in…” I’ll have to check that out later.

Speaking of source, the code it outputs is fairly clean, semantic XHTML. It does get a tad defensive with some inline styles (only on the image so far), but there may be options or plugins to change that. I could edit it to use a custom class from the template if I wanted to.

So far I haven’t had to “fix” anything. With the blogger editor, I couldn’t get paragraphs to interact correctly, and constantly had to make minor source code adjustments. Oftentimes I’d simply give up and just write the HTML in another editor. Not anymore (so far)!

I always try to use proper Unicode code points for things like ellipses (… vs ... – three periods), quotes* (“angled” vs. "straight"), and apostrophes (don’t vs. don't). (Yes, I’ve got the windows ALT-# shortcuts for all these memorized.) Live writer does it for me!

Just before posting, I discovered the categories feature. It pulled all the tags I’ve used from blogger and included them with checkboxes.

So yeah, I’ll be using this for a while until something about it starts bugging me…


* I’ve often wished that early typewriter/computer character sets included angled quotes, if only for the sake of people who write programming/scripting language parsers.

GG Hubble!

I’ve been waiting with bated breath ever since the recent repair mission completed, and now we have pictures!