Coding terminology explained

Mailed around the company this morning:

What we say: Horrible hack
What we mean: Horrible hack that I didn’t write.

What we say: Temporary workaround
What we mean: Horrible hack that I wrote.

What we say: It’s broken
What we mean: There are bugs in your code.

What we say: It has a few issues
What we mean: There are bugs in my code.

What we say: Obscure
What we mean: Someone else’s code doesn’t have comments.

What we say: Self-documenting
What we mean: My code doesn’t have comments.

What we say: That’s why it’s an awesome language
What we mean: It’s my favourite language and it’s really easy to do something in it.

What we say: You’re thinking in the wrong mindset
What we mean: It’s my favourite language and it’s really hard to do something in it.

What we say: I can read this Perl script
What we mean: I wrote this Perl script.

What we say: I can’t read this Perl script
What we mean: I didn’t write this Perl script.

What we say: Bad structure
What we mean: Someone else’s code is badly organised.

What we say: Complex structure
What we mean: My code is badly organised.

What we say: Bug
What we mean: The absence of a feature I like.

What we say: Out of scope
What we mean: The absence of a feature I don’t like.

What we say: Clean solution
What we mean: It works and I understand it.

What we say: We need to rewrite it
What we mean: It works but I don’t understand it.

What we say: emacs is beter than vi
What we mean: It’s too peaceful here, let’s start a flame war.

What we say: vi is beter than emacs
What we mean: It’s too peaceful here, let’s start a flame war.

What we say: IMHO
What we mean: You are wrong.

What we say: Legacy code
What we mean: It works, but no-one knows how.

What we say: ^C^C^X^X^X^XquitqQ!qdammit[esc]qwertyuiopasdfghjkl;:xwhat
What we mean: I don’t know how to quit vi.

What is worth fighting for?

A few weeks ago, I completed the Isle of Thunder storyline in World of Warcraft.  It picks up after events already documented, with Lor’themar Theron’s Sunreaver Onslaught and Jaina Proudmoore’s Kirin Tor Offensive working with the neutral Shado-Pan Assault to (1) bring down the Thunder King (which is what my raid team is trying to do, if only we weren’t stuck on Horridon) and (2) procure ancient artefacts that they could use against Garrosh when the time to depose him finally comes.

The climax of the storyline involved Taran Zhu (leader of the Shado-Pan) defusing the conflict between Theron and Proudmoore:

I see now why your Alliance and Horde cannot stop fighting. Every reprisal is itself an act of aggression, and every act of aggression triggers immediate reprisal.

The cycle ends when you, Regent Lord, and you, Lady Proudmoore, turn from one another. And walk. Away.

I didn’t think much of that at the time, certainly not from outside the game universe.  But then we had the Boston Marathon bombings, and while I only maintain a passing interest in current affairs, something about that attack and the Isle of Thunder questline seemed connected, somehow.

If we take a look at the global war on terror, there’s a clear pattern of aggression and reprisal.  We can look at the 9/11 attacks, and events on either side of it for a clear example.  al-Qaeda felt aggrieved by the U.S. millitary presence in Saudi Arabia, their backing of Israel in the Israeli-Palestinian conflict and probably countless other things, so they took out the World Trade Center in an act of reprisal, which triggered the United States to strike at al-Qaeda in Afghanistan, which led to a massive conflict in Iraq, continued U.S. drone strikes, continued terrorist attacks… basically, it’s one whole vicious cycle of reprisal and aggression.  Just as what’s happening in the World of Warcraft universe at the moment — in a way, it’s almost eerie of how it mirrors global, real-life events.  (As of me writing this, the perpetrators of the Boston attack are believed to have close ties with Chechnya — I’m unaware of any hostile connection between Chechnya and the U.S., so if someone would fill me in, it would be much appreciated.)

As someone not involved, and hence as a neutral observer, I don’t believe that it’s my place to take any side here but, like Taran Zhu, I have to ask the question: can all of those in this global conflict turn from each other and walk away?  Right now, I feel that that’s improbable, to say the least.  As things stand at the moment, there’s too much fanaticism, hatred, indoctrination and the like on both sides that suggest that either side, much less both, are capable of doing this at this point in time.  Perhaps future generations will be able to break out of this cycle.  One can always hope for that.

Granted, it’s difficult to do, and I speak from personal experience here.  I’ve been in more conflicts than I’d like to admit where relations have deteriorated into such a cycle, and every time, I’ve struggled to even realise that such a cycle exists, and then struggled even harder to break it.  (Some such cycles, I’ve yet to break.)  That’s not to say it’s impossible.  It’s definitely possible.  But if I have so much difficulty with this on a personal level, I wonder just how long it would take on a global level.  Maybe for those involved, as it is for me, some form of virtual escapism is the answer.

Maybe we should ask the question from back in the Mists of Pandaria trailer: what is worth fighting for?

Screwy system authorization

When the latest xkcd deals with this, you know that our system authorization design may just be ever so slightly on the screwed-up side of the fence…

Mouseover on the original: “Before you say anything, no, I know not to leave my computer sitting out logged in to all my accounts. I have it set up so after a few minutes of inactivity it automatically switches to my brother’s.”

Luser attitudes

My intense dislike of lusers was rekindled this morning.

Recently, a request thread was started on the PCFormat/G3AR forums that requested some extra user profile fields — which I considered entirely reasonable.  So, I got into my usual routine of getting information, hearing user suggestions and so forth, when our luser decides to ask a question that I had, in fact, just answered.

This isn’t too bad in itself, but redundant questions like that don’t sit at all well with me.  I had already answered the question, and therefore viewed this as a time sink — and I don’t at all sit well with time sinks.  Time sinks take without giving back; they waste time that could have been spent on more interesting questions and more worthy querents.  This point of view may not be apparent to some, so let me explain a bit: to understand the world that experts on a particular field of expertise live in, think of their expertise as an abundant resource, but their time to response as a scarce one — and that therefore, the less of a time commitment you implicitly ask for, the more likely that you’ll get the answer you wanted.

So, I replied with a terse answer while thinking “stupid question…”, and hoping that the experience of getting what one deserved rather than what one needed would have taught our luser a lesson.  This consequently set off a tirade of whining, posted in one of the general chat threads and posted in Afrikaans; presumably, the luser thought that I wouldn’t notice it that way.  I did.  Hence this blog post in response.

Eric S. Raymond, in his essay “How To Ask Questions The Smart Way“, deals with how not to act like a luser in one section of said essay:

Odds are you’ll screw up a few times on hacker community forums — in ways detailed in this article, or similar. And you’ll be told exactly how you screwed up, possibly with colourful asides. In public.

When this happens, the worst thing you can do is whine about the experience, claim to have been verbally assaulted, demand apologies, scream, hold your breath, threaten lawsuits, complain to people’s employers, leave the toilet seat up, etc. Instead, here’s what you do:

Get over it. It’s normal. In fact, it’s healthy and appropriate.

Community standards do not maintain themselves: They’re maintained by people actively applying them, visibly, in public. Don’t whine that all criticism should have been conveyed via private e-mail: That’s not how it works. Nor is it useful to insist you’ve been personally insulted when someone comments that one of your claims was wrong, or that his views differ. Those are loser attitudes.

[…]

Remember: When that hacker tells you that you’ve screwed up, and (no matter how gruffly) tells you not to do it again, he’s acting out of concern for (1) you and (2) his community. It would be much easier for him to ignore you and filter you out of his life. If you can’t manage to be grateful, at least have a little dignity, don’t whine, and don’t expect to be treated like a fragile doll just because you’re a newcomer with a theatrically hypersensitive soul and delusions of entitlement.

One can immediately see why the aforementioned and aforelinked whining tirade does not help the luser at all.  The luser attitude demonstrated in this case of (1) wasting other people’s time and (2) whining because other people expressed dissatisfaction of it simply results in the luser losing all respect within the community, which does not help the luser case at all.  (We have long memories; it can take a while — years, even — for such blunders to be lived down.)  I’ve seen this all before on the various project mailing lists that I’ve sat on over the years.

You don’t want to be a luser, nor do you want to seem like one.  You want a winning attitude in order to be treated as an equal and welcomed into our culture — and we would really want to do this (so if you think of our attitude obnoxious, condescending or arrogant, please revisit your faulty assumptions).  The underlying issue at hand is that it’s extremely inefficient to try to help people who aren’t willing to help themselves.

Unfortunately, I can’t do much about lusers pestering me.  Hopefully, some will read this and realise what they need to change/fix to stop being one.

Perpetual motion

Anyone who claims perpetual motion to be impossible has obviously never encountered an argument on the internet

Considering that perpetual motion is defined as “motion that continues indefinitely without any external source of energy; impossible in practice because of friction”, I think we’ve finally found something that meets the definition without being restricted in any way by the improbability.

Guess no-one listened…

… because after I asked people yesterday not to set the next veld fire off, guess what happens?

How to Kill Raid Bosses and Get Stuff Changed

Making the news today in the World of Warcraft is a level 80 protection paladin going into Mogu’shan Vaults (a level 90 raid!) and single-handedly defeating encounters that require (at least) 10 players that are (also, at least!) 10 levels above him.  Apparently, he managed to take care of Stone Guard, Feng the Accursed and Elegon before Blizzard caught wind of it.  The video below shows his Elegon kill:

Of course, since I play a protection paladin myself, this interested me quite a bit (in terms of “wait… WHAT?!?!”).

Key to this involves a bug with our Shield of the Righteous ability (our primary damage reduction ability), and how it interacts with Vengeance (a passive ability that increases our attack power based on unmitigated damage received).  We’ve known about this for a while over on Maintankadin (and I’m guessing that Blizzard knew about it as well, but just never fixed it) — you can click on the link for all the details, but to summarise: due to a quirk of the Vengeance calculation and server/client latency, timing Shield of the Righteous with a melee swing from the boss could result in the Vengeance calculation grossly overestimating  how much unmitigated damage we received, resulting in a massive spike of Vengeance, and hence attack power, and hence damage we do.  Not only that, but many of our self-heals and absorbs also scale with attack power (Sacred Shield, I’m looking at you here — also Light’s Hammer and Execution Sentence, but since we only get those abilities at level 90, they’re not really applicable here), and one can see how our level 80 guy was not only able to deal enough damage, but also keep himself alive.

But that’s only part of the story.  Matt Walsh over on WoW Insider has filled us on the rest: there is some bind-on-equip rare gear found in the levelling zones of Mists of Pandaria (intended for players levelling from 85 to 90) that can, strangely enough, be equipped by a level 80 player.  (Here’s an example.)  By equipping those, our level 80 paladin managed to gain amounts of secondary stats (dodge/parry/mastery/haste/etc.) that were not originally intended for a level 80 player (when gear item levels were in the high 200s, not the low 400s in the case of the gear he had equipped).  More importantly, because he was level 80, he was cleverly avoiding the combat rating drop-offs that occur at levels 81 and 86 (those levels coincide with players encountering Cataclysm and Mists of Pandaria content for the first time respectively).  This resulted in absolutely crazy character stats: Matt mentions that our level 80 paladin had 95% haste and 88% mastery, which one simply wouldn’t see on a level 90 character.

All of this came together to ensure our level 80 paladin could survive the raid bosses.  The haste and attack power from Vengeance meant that Seal of Insight was regularly overhealing him, and Sacred Shield was fully absorbing his attacks (not only that, but the insane haste percentage meant that it was constantly refreshing as well).  Plus, all of that mastery meant a damage reduction boost with Shield of the Righteous.

In a nutshell, all of this was simply our player using Blizzard’s design choices, and creating unintended consequences out of them.

Blizzard’s reaction to all of this has been to hotfix Vengeance so that it caps at a player’s maximum health (until a more elegant solution can be found); Vengeance previously had no maximum limit.  While I recognise that this is a temporary fix, I don’t believe it to be ideal: different tanking classes (protection paladins, protection warriors, blood death knights, guardian druids and brewmaster monks) are not created equally with regards to maximum health.  It remains to be seen how this will affect encounters that have the strategy relying on the tank having higher than usual Vengeance (10-player Wind Lord Mel’jarak coming to mind straight away); I’ll have to see what difference this makes in tonight’s raid.  (Although I may not notice much difference, since my personal gearing strategy seeks to maximise my health pool while still keeping an acceptable amount of secondary stats.)

I’ll end by throwing in this image, because it’s strangely relevant:

history-first-reported-critical-hit

Four seasons in four hours

You’ve got to love Cape Town weather.

Driving to work at around 08:45 – grey skies, and raining quite hard.  Had to switch the fog lights on while getting myself through Hospital Bend because the visibility was that bad.

And right now, just before 13:00 – clear blue skies…

I’m predicting a mix of snow and heatwave by the time I leave the office this evening.