Friday, May 15, 2009

How Early? How Often?

When I was working in the exciting world of Sales Performance Management software, the philosophy of releasing early and releasing often really worked well. Since the business was so sales-oriented, potential clients were constantly asking for features that were either in development or not even conceived of yet. It was our job in development to make sure that the sales team got what they needed to win the sale.

Hence when we had a feature request for a potential customer which was going to be demoed in 1 month but really required 3 months of work, we'd architect the entire project as if we had no time constraints and then start pruning the non-essentials to make it fit into whatever time we did have. Whatever we didn't need in the sales demo was put off, but the overall design was never compromised which surprisingly resulted in an effective way to win sales and yet retain product quality.

However, back then I had the convenience of having a salesperson stand in between the software and the client, cleverly hiding any inequities and carefully demoing around unfinished components. Now that I've made the shift from business software to game development with my sales guy replaced by the harsh reality of the internet, I feel... exposed. I no longer have the luxury of doing a shallow development pass. Once I put my app up on the store, it will be judged by the masses - and we all know that the internet can be a harsh wasteland of "OMG DIS SUX LOLOLOLOLO!!!!!!111!!!"

So now instead of asking myself "When's the earliest we can ship this?" I find that the question is more "When's the last day we can ship and omg there's so much stuff to do why am i blogging about this isntead of coding?!1!?!eleven!!!!"

Saturday, April 18, 2009

Dear Books: I Thought I Left You in University

This past week has been filled with nothing but reading. The last time I did this much reading was probably for my last exam in university - and that was with a real tangible book. Reading OpenGL books in pdf form is nice since my weak developer arms are only good for making quarter circle motions and not for you know, actual physical labour. That's what robots are for after all! (Until they rebel and eliminate all of mankind in a nuclear pyrotechnics display, but i hope to be long gone by the time that happens).

Any progress I had hoped to make during this week was trampled under an avalanche of OpenGL specification documents. Really makes me wish I took that graphics course in university instead of Information Systems where the professor used business-y terms like "touch base," "synergy" and "ubiquitous" instead of the more accurate developer counterparts: "business spam," "work from home" and "YouTube comments"

This gap between my ideas and implementation really sucks though. I lie in my bed at night thinking of all these fantastic ideas of what my game could look like if I was as good with OpenGL as I am with SQL. I then get up in the morning and google "how make triangle in openGl programz??" Yes, I google in lolcat speak.

Enough typing! I gotta get back to reading pdfs! Only 34 more chapters to go in the OpenGL bible!

Sunday, April 12, 2009

Hello World!

I'm one week into my self-employment (altho it feels more like unemployment) and I've been surprisingly productive. Before I left my job at Varicent, I was afraid that once I was actually out and about on my own that I would regress to my post-university days. During the days between my last day as a student and my first day as a contributor to society, I gorged myself on Vietnamese sandwiches and gratuitous amounts of video games. Thankfully, I've only indulged in the less destructive one of those activities (the delicious kind).

During this time of re-adjustment, I've found that one problem with the software development field in general is that developers work best at different times of the day. I always thought that I was most productive during the hours of 3pm to 6pm. This was really only because I left the office at 6pm and 3pm was around the time I said to myself "oh god i haven't done anything since i got here today." The reality is that my best coding is done between dinner (a light meal of saltines and cheese) and the moment my face meets my keyboard around 3am. Some of you who play WoW may be familiar with the term "waffleface." Let me assure you, waffleface isn't as painful as it sounds. Sometimes it's actually quite comfortable. The worst part is deleting the long string of "gggggggggggggggggggggggggggggggggggggg"s from whatever text editor you had open at point of face impact.

Transitioning from developing a business application where requirements appear in a faceless bug queue or an ambiguous feature request to a game development environment where requirements come to you as you type is quite a change. I like the latter a lot. Half of my brain is in development mode and the other half is in (for lack of a better term) brain-puke mode. One side keeps on pumping out ideas saying "hey wouldn't it be awesome if we could have hippos riding rainbows while shooting rockets at unicorns wearing gang bandanas?" while the other half says "omg wtf i'm still trying to figure out how to make shurikens come out of a surfboard here..." Is this what it's like to be in sales? I can see the appeal now. =)

From a technical standpoint, iPhone development has been frustrating. Gone are the niceties of a good IDE (sorry, Xcode, you suck compared to VS) and helpful errors messages. In Xcode, "Please put a break point in malloc" is a good example of the standard error message I get. Maybe i'm doing something wrong, but that's the point of error messages right? Is it just me or does that error message sound more like a suggestion? A suggestion which really says "dear programmer: think harder plz."

I find most of my time is spent debugging things I just take for granted in C#. Things like the compiler not warning me that I defined a variable name twice in the same scope, GDB being completely useless when debugging since it doesn't dereference pointers, etc. Some may say that I'm not hardcore enough and yeah, I have to agree with them. When I want to drill down into a member variable in a debugger, the last thing I want to see is Ox135OMGHI2U.

Yes yes I know, I've been coddled by VS and working in higher level languages for the past 4 years... let's not even get started on managing my own memory. =)

Thursday, July 24, 2008

The Resurrection of pewpew.exe

I've decided to quit World of Warcraft for a while (resting up for the expansion) and suddenly I find myself with oh.... 4-5 hours more per day with nothing to do. After spending a couple of nights rolling around on the floor of my bedroom due to pure boredom, I dusted the cat dandruff off of my shirt, rolled up my coding sleeves and started to breath some life back into the game I started writing 6 months ago: pewpew.exe

The first thing I did was port it over from standard DirectX to XNA, thinking that I would have some richer libraries to use. Nope. None so far. Well, I guess considering my game is now a super complex masterpiece of a square that shoots square bullets and a large red circle (still runs at 60 fps btw!), 3d rendering libraries is probably the last thing I need right now. Truth be told, I don't even really know what XNA offers over the standard DirectX libraries (which I assume are still there, but wrapped in a fancy XNA namespace). At least with the recent announcement from MS that I can publish my game to an XNA marketplace, XNA isn't looking that bad.

I also recruited Tom to work on this with me. Who would have thought that from our early days of meeting through our QWTF clan and then romping through the undeveloped suburban landscape of Newmarket, that we would have ended up as coworkers and then coding random stuff together? Life is funny like that. Well, it's not really funny... it's mildly amusing at best.

Turns out Tom is actually pretty handy with a keyboard. Our early attempts at a collision detection algorithm were designed together, but coded mostly by him. We have zero knowledge in game development so it's pretty interesting figuring out things on our own. We'll come up with an algorithm, implement it and then check online to see if anyone's done it the same way we have and mark it down when our algorithm matches some paper from a reknowned professor who teaches collision detection algorithms.

So far we have: Zero hits on matching algorithms with genius professors. We're not discouraged tho. That's called innovation, folks! O(n^2) runtime is finite which is less than infinite! Go team! UW would be proud of us.

And here is the new and improved pewpew.exe: (still 60fps! try to hold your applause!)

Wednesday, February 06, 2008

Earthly Inspiration

A while back I bought Rock Band. It was a harrowing experience since Rock Band was extremely scarce after its initial release and I had scrounged every single electronics retailer on my drive home from work every day for about a week before I could find a copy for the PS3.

As I triumphantly stumbled my way back to my car carrying the mammoth Rock Band box I thought to myself: "This is awesome. Now I just need to buy a PS3 to play this on!" Ah yes, nothing like the unrestrained spending habits of a gaming nerd fueled by electronic bit-lust. Continuing on my consumerism rampage, I bought a PS3 the next day and hooked it up to my trusty 17" CRT TV. Top of the line TV I might add - this was the monstrosity I used to play Super Mario Brother 3 on after all. It had all the luxuries: mono sound, RF input, manual controls (i.e. I lost the remote) and when you turned it off, all the visuals would converge on a single dot in the middle of the screen. Yes, this TV was 480i - with extra emphasis on the "i." The refresh rate on Methuselah (my TV) was probably around 40hz on a good day.

However, in spite of Methuselah's attempts to put itself out of its long, labour-filled life, I made him play nice with my PS3 and eventually made my way to the PS Store where I fell in love with a tiny little indy game called Everyday Shooter. This game was so simple, yet so deep and while I could just gush about it for pages on end, I'll digress off this mess of tangents back to the original intents of this post - it's inspired me to write my own game.

Unfortunately for me, I don't know a thing about game development. All my computer science knowledge is centered around databases, business applications and neat little algorithms you never thought would ever be useful until that one gleaming moment where you can use it in a glorious optimization method that nobody will ever know existed. I took the easy way out of 4th year - opting to enroll in classes where the climax of the course would be to write an essay with a title along the lines of "omg teknologiez lol." So while I didn't have to endure the suffering that is the 4th year graphics or real time course at the University of Waterloo, I am a poorer man for it now because I have no clue on how to even create a simple graphics engine, let alone a complete game.

This lack of knowledge isn't gonna stop me from trying tho. I've got (what I think) is an awesome concept for a game. It's a shameless reduction of some of my favourite games mashed together into what I hope will eventually be a cohesive whole. Now I just have to coax it into reality. I imagine it'd be similar to materializing a [Conjured Manna Biscuit] out of thin air.

So far I've got a black screen, a square, a triangle and it runs at a whopping 60 FPS.