Monday, 29 November 2010

Forum Emoticons

Any respectable forum needs emoticons, and FORJ shall be no different! I've based these on the 'Like' icon in Google Reader, because the style is a nice match with FORJ's default theme.

:) :( :D :'( :p ;) :$ :O :O

There's still a few more I need to do – 'angry' and 'rolls eyes', for example – but after that they're more or less done, until I think of some others I'm missing.

The forum also allows linking directly to posts, so here is the link to the emoticon forum post.

Tuesday, 16 November 2010

FORJing ahead

The forum is coming along rather nicely now – I recently added the functionality to store each registered user's count of how many posts they've read in each thread, and soon I'll be able to implement thread list filtering based on this or other criteria (such as 'interest').

It's actually getting close to the point where I'd feel comfortable with saying the forum is ready for limited general use, so long as the users aren't expecting something as full-featured as vBulletin or Beehive. Still, the foundations are there, and the basic structure is more or less done, I just need to add furniture and stuff now. And maybe wallpaper.

Also, what it really needs more than anything is for a lot of people to test it out, poke it and see if it falls over. As much as I test it myself, there's bound to be some things I miss. If you sign up, you don't have to use a real (or even valid, I think) e-mail address – it's effectively just a username, and there's no mechanism in place to send anything to it. I'm not even sure yet how to do that if I wanted to.

Sidetrack

While the forum is taking up most of my coding time, I've also started working on another project, ostensibly for work but with the aim of making it generally available if it turns out to be useful beyond the circumstances in which it'll initially be used. In a nutshell, it's a non-realtime messaging application that's a sort of hybrid of e-mail and IM, for the purpose of basic information requests. The main selling point, and the reason you'd use it in preference to e-mail, is that it will make tracking and reporting on such requests much simpler, and easier to collaborate on.

So, not much to say about it yet, as I'm still working out the basics of how it's all going to work, and even what it's actually going to do, but once I have something worth showing, I'll talk about it here.

GitHub

If you're of a coding bent, these two projects are on my GitHub profile.

Sunday, 31 October 2010

Ostensibly Here

ALERT: this post is about programming and stuff, so if you're not interested, best skip it! That said, I'd love it if you had a look at the new forum I'm working on and had a play. If it breaks, please let me know :D

Hello!

Gosh it's been a while, hasn't it? There's a good reason for that, however, and it does sort of involve WoW. Or rather, it involves a distinct lack of WoW: I haven't played since I broke my Windows 7 install by messing up the installation process of Ubuntu, about two months ago (I told it to put the bootloader on my external drive. Don't ask). Anyway, in lieu of WoW-playing, I have been doing something to break out of the rut of career mediocrity I've been in for years: I have been learning how to make web-based programs. That is, how to write in Javascript, Python and Ruby, how to run servers, and all (well, some) about the stuff that holds it all together.

Said the client to the server

Javascript, as it happens, is a really nice language. Apparently it gets a lot of stick for being a toy, but I feel it's more like a surprisingly versatile yet lightweight tool. The best part is, pretty much every desktop and laptop computer comes with the tools necessary to begin with Javascript: a text editor and a web browser. Of course, the real power comes when you can communicate with and store data on a server, as then you can split an application into two parts: the server-side which does all the data-retrieval, and the client-side which does all the presentation and interaction.

A common framework for developing the server-side web applications is MVCModel, View, Controller. This is all well and good for presenting mostly static pages that the user doesn't interact with much, but when you involve Javascript on the client side more than for a few nice effects, you can start offloading a lot more of the page rendering to the client. Rather than sending fully-formed HTML from the server, you can just send the relevant data (in JSON format, ideally) and have the client set up the HTML on the fly. Until fairly recently this wasn't a practical way to do things, as browser incompatibilities and slow Javascript performance meant the DOM manipulation required just wasn't practical. However, efforts by Google, Mozilla and Opera to vastly improve their Javascript engines, combined with the emergence of Javascript frameworks like jQuery and Prototype, has resulted in a new style of developing large, complex web applications.

Enter Andy, stage left

It was into this environment that I entered more or less in ignorance. Ten years ago I'd done some programming for a while in Delphi, writing some handy little utilities like a font browser (sadly no longer available since the host it was on closed down). However, writing Windows desktop software is really quite different to writing for the web. For one thing, the applications tend to be more monolithic and closed – all compiled up into one neat .exe file. Web apps on the other hand are invariably run directly from source code, albeit often minified, and can easily pull their various parts from different servers around the web; they feel looser and more open to write.

On Javascript

Speaking of 'loose and open', that's generally how I see Javascript. It's a very easygoing language, due in large part to its loose typing. It's that and the fact that functions are first-class object that really make Javascript so nice to use. You almost never have to declare the type of a variable, and a function definition (which itself can be a variable) has a list of parameters that doesn't specify their type:

var add = function(a, b) {
    return a + b;
}

The thing about that function is that its parameters don't even have to be numbers:

var foobar = add("foo", "bar"), // foobar = "foobar"
    forty_two = add(40, 2);     // forty_two = 42

Or how about:

var arbitrary = function(a, b, func) {
    a *= 2;
    b *= 1.5;
    return func(a, b);
};

var number1 = 64,
    number2 = 99,
    number3 = arbitrary(number1, number2, add);

alert(number3);

There's just so much I could write here, about objects, closures, AJAX, jQuery and so on, but it'd get kinda boring I reckon, so I'll move one.

The future's bright

But it's Ruby-coloured, at least for me. It took a lot of prompting and hinting and suggesting, but my brother finally persuaded me to dive into all this stuff, and after a nice chat with his boss I've begun to focus my attention on Rails, pretty much just because it apparently has better (i.e. more) job prospects than the language and framework I initially chose, Python and Pylons.

Job prospects is what I need, as I'm currently working fixing computers, which, while not boring, is hardly challenging. One of the things I love about programming is solving problems, and there is an endless supply of those. There's always something new to learn, to try and understand, and maybe even eventually to teach others about.

I feel with programming I can do something more directly useful to people than just being a cog in a black box machine that takes in broken computers and spits out working ones. That's a large part of the motivation for writing my forum – I want to do something that people will use and appreciate. The idea was born of dissatisfaction with the way most existing forum software works: too many page loads, cumbersome to navigate and slow to use. Another part of the motivation, of course, is so that I have something to show to prospective employers, as it's not like I have x years of commercial programming experience. From what I've heard and read, though, I stand a good chance of getting hired based on what I know and can do, rather than how long I've been doing it.

So, here's to hoping for an improvement in my general state of affairs! Who knows, maybe one day I'll even come back and have a pop at ol' Deathwing.

Friday, 27 August 2010

/usr/bin/python

I tried, but doing Python/database/Apache things in Windows just isn't nice. All the guides for doing it are like afterthoughts to the Linux guides. Consequently, I am downloading Ubuntu. uTorrent says it'll be done in 6 minutes, but that's assuming the speed holds, which it hasn't for the previous 72.3%.

I have a Grand Scheme to make some simple blogging software as a way to learn Python, Pylons, SQL et al, possibly even moving this very blog to it. We shall see. In any event, it means I'll probably be playing WoW less as I'm lazy and rebooting back into Windows just to play will seem like an insurmountable obstacle. This is a good thing, honestly, as I need to aim higher than my current "career".

Anyway, must go, takeaway Chinese food should be ready for collection now!

Wednesday, 25 August 2010

Class Body

Chas' recent post at Righteous Orbs got me thinking about a few things (unsurprisingly—it's a thought-provoking post). The thing I want to write about here is about body shapes in games, and how they relate to the character's role in the game. I'm going to use World of Warcraft for my examples in this post as it's the game I'm most faimilar with.

In most role-playing games, the character you play uses the same basic model regardless of what class it is, and as Chas noted, they're invariably well-build musclemen if male, or "sexy" if female. Naturally there are exceptions: I don't think female orcs, trolls or tauren (or even dorfs) in WoW are supposed to be "sexy", and apparently Blizzard's artists consulted real actual women when designing the Horde females. Imagine that! Maybe it explains why the Horde women are able to stand upright, rather than walking around dragging their fists on the floor.

To use a rather extreme example of body-to-role mismatch, let's look at the male draenei:

Comparison of male draenei mage and warrior characters.

Clearly one is a HULK SMASH melee fighter and the other is a sissy robe-wearing flinger of girly magic.

My first character in WoW was a rogue. Rogues are supposed to be sneaky-stealthy types who stab people in the back and then vanish if things get too confrontational. They do not take hits to the face very well at all. And yet, because my rogue was male and human, he was build like Conan the Barbarian, which really grates rather.

My second character was a priest, and this time I made it female. It took a lot of fiddling to come up with one that didn't look like an empty-headed bimbo.

Caera the human female priest.

I fully intended her to be a shadow priest, hence the serious face. Alas, her voice doesn't match her appearance in the slightest: she sounds like a bimbo in the same way that my rogue sounds like an 80s action movie character.

Coming from the other end of the spectrum we have the female characters in melee fighter or tank roles. Female blood elves are notoriously thin, and even kitted out in plate armour they look frail, so much so that they looks out of place up front getting smacked in the face by a boss. It's rather silly to imagine them being able to hit as hard, and take hits as hard, as someone three times larger and heavier than they are.

A male orc and a female blood elf, both of whom can tank.

His forearms are thicker than her waist.

Make It Fit

So what could be done about this? I think it's quite simple, at least conceptually: make it so your character's body shape reflects the role it performs. Tanks and plate-wearing melee fighters would be stocky and strong-looking, regardless of whether they were male or female. Rogues and hunters would be lithe and agile, relying on stealth, subtlety and accuracy of attacks rather than brute force. And finally, spellcasters would be thin and physically weak-looking, reflecting their inability to do any meaningful physical damage. Hybrid classes like shaman, druids and paladins could simply have their body shape determined by their primary talent tree (although this may introduce oddness should a player re-spec, unless the body shape adjusted over a few days or something).

I imagine this might annoy some players (anything will annoy someone), so it could easily be made an option - some people might not like the idea of a tough-looking female character, or a thin and weak-looking male. Still, it would be nice to have the option to control a character that actually looks like they would be performing their role.

update:

A reply to Chas' post brought up another point related to my post: animations. As things are now, if you make a priest melee something with a mace, they'll do it in exactly the same way as a warrior, paladin or shaman. The jumping animation, the running animation, it's the same across all the classes for a particular race/gender set.

This, however, is not something I can get too worked up about, as it starts to wander into development constraints territory. Animation is expensive and time-consuming, and creating a different animation for every class, race and sex combination could well be prohibitively so given the relatively minor difference it would make. That's not to say I think it's a bad idea; in fact I'd love Blizzard to do something like that—it's not like they're short of money—but I just don't feel they'd see it as worth the effort, which is a shame. It's small details like that which can really help immersion, even if they're not immediately obvious.

Tuesday, 24 August 2010

Post Is Late

Good day! Well it is for me, as good as work days can be, which on balance is actually around average. 50% good. So, WoW then, eh? I've not stopped playing in the long time since my last post, but I've also not really had a lot I've felt like writing about. Drama happened with the guild (again), resulting in me pretty much losing interest in raiding altogether. I think I've been on one raid in the past 2 months, and that only because Zoe begged me to come and tank Patchwerk for the weekly. Tanking Patchwerk in a mostly 251-geared Blood-spec DK tank is kinda dull. Zoe did did 360 DPS on her Disc priest. I think she was the only healer, too.

And speaking of tanking! I might have mentioned in these hallow'd posts my orc warrior. He's called Sibher and he's a tank. He's also now level 77, and has been Prot spec from day one. Well, from level 10 at least, as much as a level 10 character can be said to have any spec at all with just one talent point. So warrior tanking. There's a lot more to it than DK tanking, that's for sure. Many more buttons to press, or at least that's how it feels. Definitely more dynamic, and zooming about like a bit spiky pinball of doom is great fun. I just seriously with you got Heroic Throw sooner, and not damn level 80.

I actually levelled all the way to 75 as Prot spec, and to be honest I think this is the best way to do it - you are really really hard to kill, and with DPS gear on you still do a pretty high amount of damage. Soloing elites of your own level or maybe 1 higher is often possible. Rounding up a bunch of 9 mobs and killing them all at once is routine stuff - they don't hit very hard individually, so while Shield Block is up you're more or less invincible. Unless there's more than one spellcaster in the mix, then you're stuffed. Hate spellcasters.

At level 75 I got him a Fury spec, then bought him another Bloodied Arcanite Reaper, and... well, did crap DPS to be honest. I don't really know what I'm doing wrong but other classes (hunters, warlocks and boomkins in particular) seem to do vastly more damage than me in dungeons. At 77 with full heirloom gear I can manage about 1300 DPS on a training dummy, but in instances it barely gets above 1000. I discovered that having enough Hit rating is essential, as not only do missed melee swings lower your DPS, they also generate no rage, with has an even bigger impact on your damage output.

And maybe I'm doing it wrong or something but Fury DPS is kinda... simplistic. All I seem to do is hit Whirlwind and Bloodthirst on cooldown, and Slam when it procs. Maybe Execute on a boss but they're usually dead by the time I notice their health is below 20%. Four buttons, then, none of which are spammable. I dunno, it just seems weird not to be constantly using GCDs for something. Maybe I should put Sunder Armor on my bars.

And Another Thing

I didn't play WoW at all last night. Instead, I worked on my new Project: learning how to program for the web. Specifically, Python. I didn't actually get much done, having managed to install Apache and Python, then Pylons, and I still need to get some kind of SQL going (Bob recommends PostgreSQL instead of MySQL so I'll give that a pop).

The purpose for all this is two-fold. Firstly, I need to wean myself off WoW. I am too easily tempted by distraction for it to be good for me, and I would be better off spending my time doing something with real-world benefits. Which leads into the second point: I want eventually to make this a career. I enjoy programming, having done a lot of Delphi, HTML, CSS, and lately at work some VBA (yuck), and I've dabbled a bit in Javascript. I believe web programming is going to be very important in the coming decades, so I want to make sure I'm prepared. Programming jobs are usually well-paid, so hopefully with Zoe becoming a teacher we'll have a comfortable life together :-)

Thursday, 15 July 2010

Healers Are Overrated

Recount from Keristraza in heroic Nexus:

The druid was actually a tree until we downed Anomalous. After that, he apparently decided he'd be more useful as DPS, and… well, nobody died, so I guess he was right.