Friday, November 18, 2005

So long SWG

I guess all good things must eventually come to an end, and the only thing guaranteed not to change is the fact that things (and people) change.

I certainly changed. In 1996, I started PC gaming with my QuakeWorld clan. I've been gaming ever since. The majority of that time was spent playing first person shooter (FPS) games. Occasionally I would play some real time strategy games like StarCraft or Age of Empires, but for the most part I played Quake and its successors. I looked down on the MMORPG games and said I wouldn't enjoy them. That was until about a year ago...

A little over a year ago, a good friend of mine was passing through my neck of the woods here in Southwestern Virginia and stayed with me for a few weeks. He was in the process of temporarily moving back home to Toronto while his job and some other personal matters sorted themselves out in Texas. He brought his PC with him, and had been playing Star Wars Galaxies (SWG) for a while. I had heard about SWG and even considered trying it when it was first released in mid 2003. My wife and I have always been big Star Wars fans, so I was naturally intrigued by the game. Everything about the game was so immersing that I decided to give it a try. My wife picked me up a copy of the game, and I installed it and started playing as soon as I returned from a family fishing trip.

I loved it. SWG has been my leisure/hobby/pasttime for the past year. My friend invited me to join his guild in the game (XWING), and I have been playing with them and making great friends over the course of the past year. I've seen and done it all. Combat, crafting, space flight... you name it. I even ended up as the leader of the guild. What a great and fun way to spend free time! Unfortunately, the fun has pretty much come to an end. First a little history lesson:

In the spring of 2005, approximately six months after I began playing SWG, Sony decided to change the core mechanics of the game. When they released the second expansion pack (the wookie world of Kashyyyk), they also released the "Combat Upgrade." Many veteran players left because of this combat upgrade. Some came back, some didn't. I decided to stick with it and rushed to Sony's defense touting that they were simply trying to improve the game. I finished my jedi template and had a blast playing the game even after the combat upgrade was introduced. The combat upgrade introduced major changes to the mechanics of the game. The "combat level" system was introduced, and most of the combat abilities were changed to try and "level the playing field". Because there were so many jedi who unlocked around this time, the jedi profession got a HUGE cut in overall power/defenses. Seeing as how I was a new jedi, I wasn't too happy about the cut, but I was able to adapt.

Fast forward to the end of October, 2005. Due to some real-life circumstances (fire! fire!), I had to spend some time away from the game. In the SHORT (like... less than a week or two) time I was gone, Sony announced yet ANOTHER complete change in the game and dang near had it rolled out (albeit untested and full of bugs). This time, rather than call it a "combat upgrade" (and get all of the negative feelings that come with the term), they decided to call them "New Game Enhancements" or "NGE". Basically, they morphed an MMORPG into an MMORPG/FPS. Rather than select a target and attack it, you have to target enemies with your mouse (FPS style) and keep them targetted for the duration of the attack. Having come from an FPS background, I really don't have much of a problem with the AWSD movement and the mouse targetting. Unfortunately, Sony, in my opinion, did a complete crap of a job implementing the system. NGE pretty much sucks. Strike 1.

When I began playing SWG, the path to becoming a jedi was long and hard. Jedi were very powerful at the time, so to become a jedi required a lot of dedication and time. It wasn't necessarily "hard", but it was definitely a long road. I decided from day one to follow that road. Six months into the game, I became a jedi. I ground out my template and eagerly awaited the re-introduction of what was called the Force Ranking System (FRS). Basically, the FRS was a way of advancing through the jedi ranks from Knight to Chancellor (light side) or Overlord (dark side). Unfortunately, they decided to completely scrap the game's 32 professions and whittle them down to 9. Jedi is now a starting profession. This means that from day 1, a new player can be a jedi. Granted, being an "elder" jedi has it's benefits (additional abilities plus enhancements through "elder reward" items). Nevertheless, the time I sunk into attaining jedi and grinding out my template seems pretty pointless now that everyone in the game can be a jedi with much, MUCH less effort. Strike 2.

This brings us to why I enjoyed the MMORPG: the community. I played exclusively on the Bloodfin server. Bloodfin was the "unofficial" PVP (player vs. player) server. The players on Bloodfin were most definitely a rauccous bunch, but they were my peers and I thoroughly enjoyed playing with them. In addition, I would be remiss if I didn't mention XWING.

I was accepted into the XWING guild on day one and stayed in the guild through thick and thin. They are, without a doubt, one of the best group of gamers I have ever had the privilege of gaming with. Many of the veteran members of XWING are not satisfied with the NGE and have decided to cancel their SWG accounts. Strike 3.

Well... that about covers it I think. Three strikes and you're out. Sony has earned the last cent they will ever see of my income. This doesn't just apply to online games, this applies to everything they have their hands in: software, hardware, media (including music CD's with DRM rootkits on them... good call on that one, morons), etc. etc. Some have suggested to cancel the account for a month and then come back. I won't even go that far. I'm leaving for good. It's not the game or the people playing it, it's Sony's decision to a) listen to marketing idiots instead of paying customers, b) continually release new, buggy software instead of fixing the bugs in what they already have, c) repeatedly screw over their veteran players, and d) generally be lowdown, greedy thieves. So... in short... up yours, Sony.

So long, and thanks for all the fish. I'm cancelling my SWG account, and my wife is out shopping right now. She is purchasing a copy of World of Warcraft for me to try. From what I've read about the game thus far, I will thoroughly enjoy being a Blizzard customer. I really wish I could continue playing an MMORPG with a Star Wars setting, but to be honest... even SWG doesn't seem to have the Star Wars feel anymore. Why not play a better game?

Tuesday, November 01, 2005

Paint me a pretty... uhm... error?

Obviously I've been following TurboGears (duh... it's a blog). I wouldn't call it "closely". Mostly, I've been lurking in the IRC channel and skimming the newsgroup traffic. The additions of an identity/security module and the CatWalk model browser are obviously big steps towards a viable web platform. There had actually been some changes and updates (nothing major) to the base systems as well, so I decided to run through the 20 minute Wiki tutorial again (coding it, not just watching it).

I can type rather quickly, but nobody's perfect. Thanks to my typos, I generated some rather interesting errors that made TurboGears misbehave. I mean... like... really misbehave. Sure I had my share of misspelled variable names. I kept hitting refresh only to find that I didn't have an object called "pate". A quick glance in my controller allowed me to change it to "page" and get back on track. Luckily, I'm familiar enough with Python to decode all of the gibberish it spits out and get straight to the error for logic problems that display in the page. However, I feel for the unwashed who see what the errors produce and have no idea where to even start looking. I think this can probably be handled better (and possibly even provide a little automated hand-holding).

Before I continue, there is one particular situation I need to directly address. One particular typo was a complete showstopper. By "complete showstopper" I mean it stopped the entire TurboGears daemon dead in its tracks. Trying to load http://localhost:8080/ threw up a "Connection refused" message. Naturally, I looked in the console where I was running TG and found the error. As it turns out, TG had attempted to reload my model.py and barfed on a typo. I had tried to call the comple (typo for compile) method on my wikiwords re object. Whoops! Again, this was easily fixed, but I pity the remote developer who may not have access to such information.

So how can these be improved? Some obvious suggestions come to mind. One particular thought is to have the error handling page load the Simple Description, TraceBack, and any other pertinent information in JSON format. Perhaps display the true error in a simple format (e.g. "No such method comple in model.py on line 123") and have a "Click here for traceback" link that would display the full traceback information.

As far as the model.py error completely stopping TG, I think that would (obviously) be relegated to error handling code elsewhere in the MVC chain.

Monday, October 31, 2005

Rapidly Developing Rapid Application Development Frameworks

No sooner had my Turbogears post hit the web than I found that the project's maintainer, Kevin, laid out some intentions as they march towards version 1.0. Specifically, they're going to be implementing some of the features I mentioned (including a CRUD framework for form generation). In addition, the CatWalk model browser was added to the project. Originally written with the TurboGears stack, CatWalk was integrated as part of the project itself. Who knew!? CatWalk makes a great addition to an already great web development stack.

In addition to identity management and CRUD, the project definitely has some high hopes for their 1.0 release; and given the current pace of development, I think they're going to hit their goals right on the mark. In addition, the sub-projects that comprise TurboGears are under active development as well (CherryPy just had their 2.1 release, and Mochikit hit version 1.0). This, among other factors, makes TurboGears a definite project to watch. It's user-base is growing leaps and bounds, and I think there is definitely a lot of potential for the project as a whole. If this level of activity can be maintained throughout the development of the project, I think we'll definitely see a whole mess of features integrated and added as the project progresses through it's infancy into "mature" stages.

Monday, October 17, 2005

Gun's Initial Take on TurboGears

I recently discovered TurboGears: Front-to-Back Web Development thanks to a post on Slashdot. I downloaded and installed the software and perused the available documentation. I must say that I am thoroughly impressed the with technology. The Slashdot article called it "Python on Rails", which is a reference to Ruby on Rails (RoR). The RoR stack of applications is a (very) Rapid Application Development environment which can be used to very quickly whip out web-based, database-driven applications. While I think TurboGears has a lot of potential, I don't think it merits the "Python on Rails" badge just yet.

Disclaimer: I'm a huge Python fan and I've never used RoR in a production environment. In fact, I've only fiddled with it to see how it works. Don't think I'm bashing TurboGears here. I'm just trying to think of how we can make it better.

Automatic form creation

In the RoR environment, when I add a field (or column... whatever) to a database table, the RoR software notices the new data and updates the MVC to take into account that there is new data present which may or may not need to be modified in the future. The forms are updated to include the new field as are the methods necessary for the controller to update/add/delete information to the new field whenever working with records in the table. Personally, I think this is a great feature. The fact that all of the forms are automagically generated for you based on your data is just fantastic.

Imagine deciding to dump an archaic PHP interface and roll out a new front end using all of the latest and greatest technologies. I want to be able to say something along the lines of, "here... this is my Postgres database over here with all of its views, triggers, foreign keys, transactions, sequences, etc. etc. etc." and have a basic, functional web front end auto-created for me. Not just any web frontend, but one that I can modify, build on, add to, etc. etc. RoR even does this without any code. To generate the actual code to do it, you use some sort of "scaffold" function to see what is really going on behind the scenes.

I think TurboGears, using the SQLObject code to pull metadata from the database, would greatly benefit from having this sort of functionality. Currently, the preffered method is to define the data model in SQLObject syntax and run "tg-admin sql create" on the command line to create the schema in the database. In a perfect world, I want to be able to do it any of the following ways:
  1. Create the database using SQL and have TurboGears read it
  2. Create the schema using SQLObject syntax and have it populate my database for me
  3. Create the database using some nifty [web-based] modelling tool and have it update both the databse AND the model code.
This is obviously still a ways off, but I'm thinking I may write some code in a TurboGears app to see what can be accomplished. Imagine that... a TurboGears app used to create TurboGears apps.

Incomplete Package

I'm somewhat of a dabbler. This means I don't really have time to sit down and go through each technology in detail to learn every nuance. My job function requires me to be jack of all trades and master of a handful.

I use primarily Open Source Software on my development PC, but I use it in a Windows environment and will continue to do so (dual boot to the rescue!) thanks to Flash utilities I am required to run from time to time. While the ez_setup.py script did most of the heavy lifting for me to get TurboGears up and running, it left out a few key parts. Namely, the database modules. I had to download the database frontends for sqlite and MySQL. When I finally downloaded the sqlite frontend, I realized that the sqlite databases aren't automatically created if they don't exist. I also realized that my version of sqlite (2.x.x) was incompatible with the version installed from PyPI (3.x.x).

Database schema alterations don't exactly go with the flow when attempted upon an sqlite database, so I decided to install MySQL so I could test more features related to my project mentioned above (a web-based frontend for building TurboGears apps). Disaster! The mysql-python module won't install cleanly on Windows with the ez_setup.py.

See... Windows users are somewhat lazy. They don't like to get under the hood. They just want to double click setup.exe (or .msi) and click "I agree->Next->Next->Next->Finish" and be ready to roll. Imagine if this were accomplished with a TurboGears installer. The package could include everything needed: the base packages, the database modules, and even the sqlite.exe program for initiating and manipulating sqlite databases on the command line.

Where to from here?

I understand that TurboGears isn't even to version 1.0 yet. I also understand that as much as I wish, I probably won't see the two items mentioned here "magically" appear in 1.0. Nevertheless, I think that such goals are easily attainable for future versions if properly planned. I have to get my TurboGears installation sane before I can try some of it on my own. In the meantime, I guess I'll just keep up to date on the docs and try to soak up whatever information I can.