EDT791: Follow-up on Persona 3

Ten hours in to Persona 3, I felt like I had picked a truly special game to study for this class. Atlus had melded a dating / relationship simulator, a genre I thought I'd venture in to, and a role-playing game into what felt like a fresh, new experience. Up to that point, the game's story and premise was, well... weird, but I like challenging narrative in my entertainment. So, a tale of quirky J-pop teenagers mixing night-time demon hunting with day-time high school romance wasn't so much a problem as a challenge. The mechanics of actually playing the game were quite strong. The battle system was rock solid, quick and deep, and the relationship simulator's integration with character's abilities was a fun and interesting take on genre conventions. At the ten hour mark, I felt I had played enough to get into all the fine details of the gameplay: managing relationships, equipping my characters, traveling to Tartarus at night to battle demons, and gathering and raising Personas to help me in battle. I could see only one potential, but major, flaw in the game: level design.

Tartarus is essentially the inverse of an enormous dungeon. It contains what seem to be dozens, maybe hundreds, of floors that change each time you enter. The designers attempt to explain this away in the context of the story, but it essentially means that each floor you enter is randomly generated. As I worked my way through the first several floors of gray-walled corridors, occasionally fighting monsters or picking up treasure, I figured that once I reached the foretold 20th-floor boss, I would be on to more interesting environs. After spending several days in game-time (many hours of my real-life time) entering the dungeon, battling until my characters were too weak to continue, then coming back the next night, I finally gained enough strength to beat the boss and moved on up to... slightly creepier, randomly generated, gray corridors.

Luckily, up until this point, the game had held my attention with the excellently designed battle system. Running through Tartarus wasn't exactly interesting, but fighting the monsters and leveling up my characters was fun enough to keep me going. However, after that 20th floor boss, each night that I entered Tartarus felt more and more like work. I kept at it, though, setting my eyes on the next prize: the 40th floor. But, you guessed it - nothing changed after that, either. In fact, the artwork used to render the corridors was exactly the same. It hadn't changed at all by the 50th floor, either - which was at about twenty-eight hours of my play time.

The complete lack of progression and reward for your journey through Tartarus is echoed in the rest of the game's design. I worked my way through entire relationship chains, but nothing interesting ever happened. My friend who had a crush on a teacher didn't end up running away with her. She had a boyfriend and, for some strange reason, didn't dig on teenage boys. Shocking. Essentially, the entire game revolves around visiting the exact same locations (school, the dorms or town shops, and Tartarus), while doing the exact same things (relationship building and battling in grey corridors).

I really wanted to like Persona 3. Atlus did so much right with it, and took a pretty big risk by essentially throwing a dating sim into a hardcore RPG. It's just missing so much in way of content and level design. Worse yet, in a painful twist and what feels like a way to make up for the lack of content, the designers have made progression through the game excruciatingly time consuming. Maybe the levels in Tartarus do get interesting at some point. Who knows? After twenty-eight hours of repeating essentially the exact same dungeon over and over, I'm not willing to give it the time to find out.

EDT791: My "Dear John" Letter

Dear Persona 3,

I want to like you. I did like you... and maybe I still do. I just don't think you want me to like you any more.

Throughout our first ten hours together, you guided me through experiences I never dreamed I would enjoy. You showed me how to have a relationship, and even how to make my relationships with others stronger. We would sit in my living room and talk until the early morning about everything from love to death to psychology. I felt like I barely had to do a thing and you would shower your affection upon me through gifts and attention. It was a special time I'll not soon forget.

But, somehow, things have changed. It happened slowly and without notice, but now, twenty-five hours into it, I suddenly realize that somehow we've fallen into an inescapable rut. Our relationship feels like work; like a routine. You take me to the same places again and again, and we haven't done anything new in weeks. I feel like the only time I ever have any fun with you is when we're in school. Even then we're just doing the same things we've always done.

All you ever want to do at night is take me to that boring tower with its monotonous gray corridors, and there's nothing to do there but walk around and ride the elevator. Does that sound like something I want to do? Worse yet is that you don't ever reciprocate for the effort I put into our relationship. I work for hours to do something nice for you, only to have you shun me and ask me to work twice as long. Then, when I've finally made you happy, my only reward is an hour of fun followed by a relapse into our routine again.

Maybe one day we'll run into each other again, and we can hang out for a while as friends. I might even enjoy going back to the tower occasionally, for old time's sake. But I just can't commit to this relationship any more. I will never look at another game in the same way again, and I thank you for that. There are a lot of other gamers out there who will love you for what you are - but I'm just not one of them.

EDT791: Interview with Shawn Andrich

Note: For those of you coming to this article outside of the context of the Video Games, Literacy and Learning course (EDT791), I reference topics discussed by James Paul Gee in his book What Video Games Have to Teach Us About Learning and Literacy. If you have even the slightest interest in the topic of gaming in the context of education, I highly recommend the book, even as a casual read.

I met Shawn Andrich in July of last year (2007), when I made the mistake of asking him if he needed help with the popular gaming website he co-founded, Gamers With Jobs. The site runs on an application-, content-, and community-building platform called Drupal, and I spend pretty much the bulk of every day building websites that use it, so I figured I could use my knowledge to give back in some small way to the site that had given me, week after week, free content in the form of amazing front page articles, intelligent gaming discussion, and a wonderful podcast. Little did I know what I was getting myself into.

Shawn, being the discerning community manager he is, knows pretty quickly when there's a sucker he can take in and abuse for the good of the site. Within a couple of days, I was rolling forward on getting the site upgraded to a new version of Drupal, completely blind to what was coming. Shawn sent me an email one day, introducing Eric Carl, another member of the community and a fantastic web designer. Now, over half a year later, what would have been a small project has turned into a complete overhaul of the site's look-and-feel and the addition of some great functionality, which we should be rolling out sometime early this year. And despite the countless hours of work, I couldn't be happier with how the whole thing ended up going. It's secretly what I wanted to see happen anyway.

Shawn was and continues to be a fast friend. When it came time to decide on a gamer to interview for an assignment in my Video Games, Literacy and Learning master's class, I immediately thought of him and the unique perspective he would offer on the topic. In our interview, I talked to Shawn about his general gaming interests, what sorts of influences he feels gaming has on his life, why he plays what he plays, and dug a bit into his thoughts on learning and games. I'll say before I start that, because I've known Shawn for a bit of time, there are many things I already know about him. He's well-informed on what's happening in the gaming world, has some connections to relatively prominent figures in the industry, and can talk intelligently at length about games, game design, and the industry as a whole.

Shawn is the kind of guy that sort of feels like Michael Keaton in Multiplicity - except he manages to get by without the clones. (I guess that effectively makes the Multiplicity reference irrelevant... but you get the idea.) At only 27, he has a full time job as a Tech Director for a security and video monitoring technology company and runs, moderates and writes for Gamers With Jobs. He does all this while also keeping a healthy and happy marriage and what he considers a well-balanced life.

Due to his fairly time-consuming involvement with running Gamers With Jobs, full-time employment and maintaining a real life, Shawn keeps a pretty tight reign on his gaming schedule and doesn't play an excessive amount. Shawn was self-employed from the time he was 18, which caused him to adopt rules and habits that would allow him to be successful. Even now, as an employee working for someone else, he has trouble playing during normal work hours on a day off. As a result, he never plays before 5 PM, and usually waits until between 7 PM and midnight when he does. He ends up playing several times a week, around five sessions depending on his schedule. While Shawn doesn't feel like gaming ever takes away from his time with his friends or family, he does feel that the inverse of that can be true. As someone who runs a gaming community, online games such as Team Fortress 2 are frequently the place where relationships are built and maintained. At times, he feels that if he doesn't connect with the staff or community in all the ways possible he runs the risk of becoming completely disconnected from the site and, therefore, his friends. It's little surprise then, that he enjoys social gaming just as much as gaming alone.

Gaming time for Shawn is generally spent playing a variety of genres on a variety of systems. He tends to prefer first person shooters, third person action-adventures, platformers, RPGs and sports games, but essentially enjoys "anything good." This is typical among the Gamers With Jobs staff, and fairly common within the community as well, and is most likely the reason he can talk intelligently and at length about the industry. While he has played MMOGs in the past, and can talk at length about the time he has sunk into Everquest, he doesn't play them any more as he feels they require too much time for the little reward they offer, and, "I don't have a particular need to have my social itch scratched, so there's not a lot to draw me in from a purely "gameplay" level. I get that camaraderie and community feel of a shared experience across a spectrum of games, rather than pouring all of my time and attention into one."

In an effort to start drawing some parallels to some of the psychology behind how and why we play games identified by Gee, I tried to dig a bit deeper into why it is that Shawn plays games. "I play games because I enjoy them, primarily. Why we enjoy something is tough to qualify, but I'll try. It's because when playing you're mentally engaged, you often experience it with others, as an industry it's constantly evolving in both design and technical achievement. There's basically a lot of different aspects that make the whole very appealing as a hobby."

His interest in gaming comes from several directions. The act of playing games is fun for him, and more engaging then other forms of entertainment (as he unsurprisingly said to me, "it's not like I'm running a book fan-club"). He finds gaming to be a way to connect socially with friends and a community, and following the industry is interesting to him. Yet, despite an obvious interest in and dedication to gaming, Shawn does not think of gaming as an important part of his identity. He considers it to be something that he happens to do with his time, and thinks of it pimarily as a means to interact with people, whether that be playing or just talking about games. "It's no more a part of my identity than a hammer is a part of a carpenter's."

While Gee's writing tends to indicate that over time players develop an understanding of systems at play and how games are designed at a macro-level, there's an implication that the great part about this is that the players don't usually realize that it's happening. In the couple of days since our interview, I've thought about this idea of games teaching intangible concepts, such as the incredibly broad and difficult to describe notions of cause-and-effect or economies. I tried to see what Shawn thought about this by asking if he paid attention to these sorts of things while he played. While he feels like he has a "broad, conceptual level" understanding the systems that are working behind the scenes of a game, he tries not to think about them much until he looks back critically on a game as a whole, saying, "Trying to see past the curtain while you play makes for a tedious experience." I found this quite interesting, and I have an inkling that most gamers would respond in a similar fashion. While he doesn't like to pry too hard into a game's design as he plays it, he does appreciate it when developers include features like Half Life 2's commentary mode that allows the player to get a sense for how the game was created. However, features like world editors aren't as valuable to him, as he doesn't have a huge interest in modding games ("My enjoyment is in the playing, not the creating"). While we didn't have time to get into it in the interview, I know from listening to countless Gamers With Jobs podcasts that in spite of his desire to not peek behind the curtain of game design while playing, Shawn can discuss critically and at length the various merits or flaws of a given game's design and clearly enjoys discussing topics of game design with developers.

When it comes to game difficulty, if a game gets too hard or frustrating, Shawn will generally stop playing for a while. If it happens often enough in a game, though, he'll usually stop playing the game altogether. When he encounters extreme difficulty like this, he considers it to be more of a flaw in the game's design than a challenge presented by the designers. Before giving up on it, though, he will generally use the Gamers With Jobs community or a website like GameFAQs as a resource, "so long as it's something preventing forward progress rather than an overall difficulty like poor camera controls, cheap A.I. tactics, etc." While difficulty can be frustrating, Shawn does enjoy mastering a game when possible. However, he doesn't go out of his way to do so, citing time as the main factor that keeps him from attempting to master a game. For example, in Team Fortress 2, he tends to pick the class that his team needs in a given moment, over picking the class that he wants to get better at playing.

I asked Shawn if he felt like his years of past experiences with games influenced his ability to enjoy particular games now. He cited times when he's watched inexperienced players attempt to grapple with a 3D space using a controller and their inability to connect the use of the controller with movement on screen as a primary indicator that "experiencing the organic ramp-up in design through the years absolutely informs your ability to understand a game quickly and enjoy something that would otherwise be unapproachable." He does feel, however, that platforms like the Nintendo Wii and DS are, to a certain degree, making 3D worlds and games in general more accessible to new players and cites Mario Galaxy as an example of a game that does a good job of simplifying the experience. When learning to play a new game, he appreciates a well-designed and presented tutorial, and feels that the best games integrate the teaching directly into the game play. He mentions how Zelda games do this subtly by introducing new features while the player is accomplishing tasks within the game proper.

Shawn and I spend the bulk of our time communicating with each other over IM, whether it's discussing work that needs to be done on the site, the games we're playing, car buying or conducting an interview for my master's class. Clearly the session for conducting this interview was a long one. (Praise be to the inventor of the chat log!) The interview covered a smorgasbord of topics, and I thank Shawn for his patience while I fumbled through it like some amateur gaming blogger. Err, wait a sec... I was intrigued and surprised by many of his answers, and while I've tried to give my thoughts on some of them here, there's simply too much to cover in a reasonable number of words. Needless to say, I'll probably be coming back to this interview over and over throughout the semester for reference, and Shawn will have to put up with random late-night instant messages about semiotic domains and projective identity. I'm sure he'd appreciate, instead, news that I just fixed a nasty bug on the website but, well... let's just consider this payback.

EDT791: Relationships, butt kicking and learning to play

Note: I've put together a playlist of a set of videos that a user named SplitInfinity put together on YouTube. I reference a few of the videos in this post, but I've included all of the videos in the playlist for those of you who'd like to watch the full thing.

Here's what I learned from the intro to Persona 3 (see the first two videos in the playlist above): a blue-haired, headphone wearing teenager is on his way somewhere; a teenage girl is about to commit suicide; wherever the guy was going is a messed up place with bloody (literally) streets, creepy contract-bearing, blue-eyed kids, and teenagers that carry guns when they're not in school.

Blue-haired teenager? Check. Close-ups on shaky-eyed crying? Check. Creepy looking kid with discolored eyes? Check. Teenage girl wearing a short skirt? Check. Yep, I'm definitely playing a Japanese role-playing game.

While the introduction animation to P3 is jarring and - let's face - strange, it does a great job of giving me a taste of the world I'll be experiencing. It also leaves no question as to the content and theme of the game's story and presentation. It tells me that the game is going to be weird, dark, mature and complex. There's no chance I'm going to get a couple hours into the game and suddenly be put off or surprised by mature content. In stark contrast to the intro animation, the first few minutes of gameplay (the second video above) are incredibly friendly and lighthearted. I'm eased into the world through verbal and textual explanations of what I'll be doing. But, it's all contextual and doesn't feel out of place. These first few minutes of gameplay also tell me that the game is going to be story- and dialog-heavy, and that it will have a unique and strong focus on school and relationships.

Relationships and butt-kicking

As shown in the third video in the playlist, I'm playing as the blue-haired guy (I called him Doogie Mac), a transfer student attending Gekkoukan High School, in modern day Japan. I start school the next day, and am directed to find my way around. I end up learning more about my identity by talking to various students and teachers, and I establish my relationship with these students by selecting responses during conversations that have various contextual meanings but essentially boil down to, "I like you," "I kinda like you," and, "I don't like you." The emotion of the person I'm speaking with it shown in portraits as I talk to them. For example, notice Yukari's reactions and expressions as her mood changes while she talks.

Following a conversation, I'll occasionally be told that I made someone happy, or impressed or charmed them. When I do this enough with people, I form relationships with them. Talking to another student about the crush he has on a teacher strengthened my relationship with him. Helping out a fellow student in class by giving him the answer when the teacher called on him caused other students in the class to comment on how much I pay attention and raised my popularity. At this point, it's was clear that relationships are important in the game.

I proceed through a few more school days, making friends and getting accustomed to the interface of the game and how school "works" as a game mechanic. Then, the "Dark Hour" is introduced (see the sixth video in the playlist). The Dark Hour is an extra, "hidden" hour between midnight and 1 AM when only a select few people are conscious of their surroundings, and it's a time when the world fills with evil creatures called "Shadows." It turns out I'm one of the people that can stay awake through the Dark Hour which means, in short, it's the time when I get to kick butt.

Learning to play

Through all of this introductory material, which has now lasted for quite some time, I've been engaged in discovering the game world, learning about my surroundings, and figuring out just what the heck is going on. While I don't know it yet, I've also been learning about key game mechanics. I've learned how to use the game's interface by walking around in the consequence free zone of school. I've learned how to build relationships with characters, and that those relationships are important. I've learned that the Dark Hour is a time for fighting and that crazy stuff happens while I'm in it, and I've learned how to fight, shop, equip and use items and more.

During this time, I've realized that the designers of Persona 3 have streamlined the traditional role-playing game experience into something that's very easily digestible for new players. While I have experience playing role-playing games such as Final Fantasy, the simplified approach of P3's presentation is much appreciated. There's very little wandering around, and the game takes control over what's happening at just the right times, so you don't feel like you're wasting time getting from place to place or doing things you don't need to do. The game is also chock-full of just-in-time learning, whether it's learning how to use battle skills just as you need them or learning how to save my game right at the time I'm presented with the tools to do so, new material is presented in just enough detail to help me accomplish the task.

Personas

I'm now about 10 hours into the game. A lot of stuff has happened since the videos you see above, but most of what has happened is repeating and ramping up the difficulty on the things you see in those videos. Me and all my friends have started to get pretty good at fighting Shadows during the Dark Hour, and I've built up some strong relationships with quite a few characters. As I played through the first few hours, I learned that my relationships with other characters influenced the skills and abilities of my Personas, which are summoned beings that help me fight the Shadows. I even got a new Persona by having a strong enough relationship with the kid who's in love with his teacher.

Personas are all based on certain character types, such as leadership, love, solitude, humor, etc. For example, I joined student council, which raised my leadership skills and, therefore, my ability to use Personas based on leadership. I tried to join the track team, which I'm guessing would raise something related to athletics, but I didn't have time for it due to my other school and social obligations. I can also "fuse" Personas, which allows me to create new Personas that are a melding of two or three existing ones. The strength of these fused Personas is based on my social relationships, and the ones I can and should use are based on those relationships as well.

The Persona system is pretty complex, but it's introduced in phases, and only then when the information is needed to proceed. In fact, once I was eight hours into the game, I was given the ability to "store" existing Personas for retrieval later - kind of like a bank. Many games don't even last eight hours, let alone try to teach you new things eight hours after you started. Yet it wasn't painful or awkward. It was just what I needed at the time, too - I had run out of room for my existing Personas.

So much more...

There's quite a bit more to mention about regarding the game's mechanics and how they're presented, but I could go on for hundreds of more words about traveling around the city, shopping, participating in various social activities, building relationships with shop keepers, learning how battles are initiated and much more. For the rest of entries in my EDT791 journal, I'll be focusing more on the various educational implications of the game, and I'll explain these sub-systems when necessary. Overall, I'm incredibly impressed by the game's tactful presentation of complex systems and rules, and I'm excited to explore them in more depth over the coming weeks.

Feed off of my gaming brain

Yes, you too can be a gaming news zombie! If you're interested in following the various things I find interesting in the world of gaming - including news, indie games, interesting commentary, etc. check out my gaming-specific feeds below. For my overall Del.icio.us and Google Reader feeds, see the sidebar.

EDT791: Choosing a game

It took me over a week to do so, but I think I've finally chosen a game to play for class. Picking a game was actually more difficult than you might imagine. The requirements are pretty open-ended - the game needs to be something I've never played, and should (hopefully) last me fifty hours or more. The hard part? I have this tendency, due to what I like to call "Gamer ADD," to buy, borrow or rent a game I'm interested in, play it for anywhere from an hour to several or countless hours, and then stop when the next must-play game comes along. The effect of this has ended up being that I've me played a good portion of the games I'm interested in, while having not really played them.

Rogue Galaxy box coverI certainly thought about quite a few games during the process: RPGs such as Rogue Galaxy or Neverwinter Nights 2; MMOs like Hellgate: London or Lord of the Rings Online (LOTRO); or completely non-RPG games such as The Sims 2 or Starcraft. I played a bit of the original Neverwinter Nights several years ago, so it's sequel would have been pretty familiar. I played a demo of Hellgate: London, and reviews have been so mixed that I tossed it off the list quickly. LOTRO was definitely an option... but my countless hours with World of Wacraft (which is why it wasn't an option) spoiled me on MMOs, and would certainly taint my view of the experience. The Sims 2 would probably be really interesting, but it seemed so... obvious; and Starcraft may have been cool, too, but something tells me it could be a bit... scary. So, none of these games would work. Rather, they would work, but none of them felt right, and if I'm going to be given the opportunity to play a game for school, it's got to be perfect.

I decided to make the decision a bit easier on myself. I'd pick a couple of role-playing games that have been on my wish list, and I made sure they came out within the last year. There were two games that had been calling to me for months and, I've got to be honest, they were each at the front of my mind as I went through the exercise of weeding out the other games. But I had to be sure, so I went through the others anyway. I'll preface these two by saying that once I decided they were contenders for my list, I tried to essentially ignore any media coverage about them. They've both been out for months, so I obviously couldn't do so retroactively, but I have a a fairly short term memory, so I was able to approach both games with pretty fresh eyes. I say that to essentially buy myself the ability to be completely wrong about my impressions of the games and have no accountability for it.

The Witch box coverThe Witcher intrigues me to no end. Everything I've heard about it says that it's one of the few mature-rated games that really takes its rating seriously. From the ground up, it's a game built for adults. It's dark, gloomy, curse-filled and violent. The narrative is complex, deep, full of moral ambiguity and tough decisions. It has sex. Gamers I trust recommend it whole-heartedly. As a late-twenties gamer, it's pretty much everything I want in a game, with the veritable cherry on top. As the industry grows, we're starting to see more experimentations and risks with genres and audiences like this. Much in the way the massive size of the film industry allows incredibly niche indie films to find success, the explosive growth of the gaming industry opens up room for games like The Witcher, which is really one of the reasons I'm so interested in the game.

In spite of how badly I wanted (and still want) to play The Witcher, there's a game that ended up calling to me even more: Persona 3 (P3), mostly because of its convenient relevance to the topics of the class. P3 is the latest entry in the Shin Megami Tensei (SMT) series of games, of which I've played (and not yet finished) Digital Devil Saga (DDS). The SMT games all have the same general premise: demons (or "devils") are trying to do something bad, and you're there to try and stop them. The stories are generally fantastic, if occasionally quirky or melodramatic.

Persona 3 box coverYet, however similar the background is, P3 seems to be quite a departure from the DDS-style of presentation. DDS was a hardcore RPG with a story that took itself pretty seriously - occasionally too seriously. P3 seems to embrace the quirky nature of its premise, while also blending role-playing, adventure and simulation genres in a way not really seen yet in the western marketplace. The same "terrible creatures lurk[ing] in the dark" premise exists, along with the fairly standard (yet also innovative in its own way, from what I gather) console-style RPG battle system. Yet, what pulls me to the game, is the emphasis on what happens when you're not battling demons and trying to save the world.

P3 bases a large amount of its game play on the relationships you establish with other characters in the game. During the daytime hours, you play a student (or group of students? not sure yet...) who has to do all the normal things a kid does in at school - attend class, make and keep friends, study, etc. Ideas like this have been explored before to pretty good effect in games like the very misunderstood Bully, but in this case P3 seems to take the general idea of throwing the player into a school environment one step further. I can't say it much better than is written on the back of the game's box, "Tap into the power of Social Links: as your friendships grow stronger, so will your mastery over Persona." Relationships in the Persona universe become vital to the game play. I can infer from this that if I choose to ignore my friends, I will be worse at the game; and, to flip that around, as I strengthen my relationships with my school mates, I will succeed in the game. The implications of this concept are pretty powerful, when abstracted from the game world that it exists in.

So, I've chosen Persona 3 as the game I'll be spending my time playing, analyzing and critiquing for the next few months of class. Throughout the process, I'll cover a bunch of topics, including whether or not my impressions of the game are realized once I start playing it (an interesting study unto itself). One of the incredible things about the process of picking the game - which is not one I generally spend much time thinking about - is the sheer number of things I now realize I subconsciously consider every time I decide what to play next. A lot of this has to do with my identities as a gamer, as a real-world person (who happens to be a gamer) and as the person I want to become (notice how sports, racing and war games weren't even in my list of considerations). But I'll save that discussion for the next post...

EDT791: Video Games, Literacy and Learning

This past Wednesday, I started my second semester of the Educational Technology (EDT) master's degree at ASU. Last semester, I realized just how difficult having a demanding job and going to school could be, so I decided to cut back this semester to just one class. That one class is Video Games, Literacy and Learning, and if the first class is any indication, it should be a real blast.

I've had a hard time explaining the course to my wife, friends and colleagues without getting eyes rolled skyward and sarcastic mumbles about how "hard" my homework will be. In spite of that, I do believe the class will be more difficult, and much more work, than they think. Our main assignment for the semester is to play at least 50 hours of a game (or multiple games, if we beat one before 50 hours is up), keeping a weekly journal of writings about our experience as it relates to the material we're learning in our readings and course discussions. These readings will be fun, but based on educational theory, concepts of learning, and won't exactly be "easy." However, if know my enthusiasm for gaming, you'll know right away how exciting this is for me. If you don't, well, continue reading...

I've been playing games for as far back as I can remember. I literally cannot remember a time when we didn't have some sort of gaming system in the house growing up. At some point when I was no older than 5, my dad brought home an Atari 2600. I can't remember every game we had at the time, but I have remarkably clear memories of sitting in the living room on beach towels with my brother - both of us in wet swimsuits and eating Peter Piper Pizza - and playing Pitfall, Missile Command, Pac-Man, or the absolutely terrible game that for some unholy reason we loved at the time: E.T.

Around this time, both my dad and my grandfather were getting into computers, and I was able to get exposed to quite a few cool PC games. On our old XT, I had the good fortune of playing text adventures like Zork, whiz-bang games like Mean 18 and a few fun educational games that I can't remember the titles of now ([something] Castle, sounds familiar...). These games were my initiation into the world of the personal computer. I give large credit to my dad and grandpa's interest in computers, and their encouragement and desire for me to explore them, to my passion and success as a web developer today.

Eventually, we got a Nintendo for Christmas, along with Super Mario Bros., Metroid and Kid Icarus. We played, rented and bought games for it until one summer, when we got a Super Nintendo, for good grades. The Super Nintendo was my introduction to "real" role-playing games, with Final Fantasy II and III (now known as IV and VI, respectively), Chrono Trigger, Secret of Mana and similar games. It was also the home of Super Street Fighter, Super Mario World, and countless other games that truly made me fall in love with gaming. During this time, we also got a 386 PC, which I used to play King's Quest VI, Doom, Tie Fighter, Civilization, SimCity and dozens of other fantastic games.

From there, the rest isn't entirely worth relating in detail, as it's really just more of the same, albeit on different systems and with different games. I can't emphasize enough, though, the importance of the fact that throughout our childhood our parents never tried to prevent our gaming - in fact they frequently encouraged it. When I was broke in college, my mom threw me a bone for Christmas and bought me a PlayStation 2 with Final Fantasy X and Grand Theft Auto III. Both my mom and dad put up with literally hours upon hours of my brother and his friends obnoxiously playing Goldeneye 007, calling each other names and arguing over whether the "computer was cheating." It probably seems like no big deal, but as a grownup who now witnesses, on a daily basis, other grownups look down their noses at gamers as though their entertainment is somehow less valid than theirs, I now realize how lucky I was to have parents who were so open to gaming as a hobby.

This post is just the first of many for EDT791. We'll be exploring topics such as Games as complex systems: Domains of meaning and practice; Fish tanks and sandboxes: Entering the game; Identity and learning in games: Motivation and commitment; Complex and specialist language learning through games; Playing and learning: Failure, practice and mastery; and much, much more. So, if you're interested in following my work in the course, I'll be tagging all everything for it as EDT791 and Gaming, so you can follow along with the posts on those pages, or just by following the feed for my front-page posts.

Just got rolling with a VPS on Linode (Part 2)

Now that I had a demonstrably working and functional web server going on my Linode (see Just got rolling with a VPS on Linode (Part 1)), it was time to get the rest of my toolkit on the box, setup users and secure the server a bit.

Installing Subversion and migrating repositories

Well, installing Subversion couldn't be any simpler:

apt-get install subversion

Login to old server and dump current repositories:

svnadmin dump /path/to/repository > repository.dump

Copy dump file to new server, and on new server:

svnadmin create /path/to/repository
svnadmin load /path/to/repository < /path/to/dump/repository.dump

Adding users and groups

I decided I didn't want to be logged in as root all the time, especially since I'll most likely be bringing some other folks in to work on the server in the future. So, I setup the admin group, created myself a new user and put myself in both the admin and staff groups.

addgroup admin
adduser jrbeeman
usermod -G staff,admin jrbeeman

Next, I wanted to make sure admins could sudo to root, so that they could install programs and do other root-y things. The sudoers file, as far as I can tell, can only be edited with the command visudo:

visudo

...and added the line:

%admin  ALL=(ALL) ALL

Setting up the firewall

This was probably the least-traveled territory in the whole VPS setup for me. Thankfully, there is an awesome resource in the website IP Tables Rocks, with a full rundown of how to lock down unneeded ports. It emphasizes locking down everything, and then only opening up those services you want open. I essentially followed the tutorial, but proceeded to lock down every port except those that I knew I would need for web services and working with the server (22, 80, 443, etc.)

Performance

By this point, I've started working on getting the Gamers With Jobs development site migrated over, and I'm working on nailing down any performance issues. As I said in part 1, the main reason for going to a VPS was the sheer size and load on the GWJ site and how shared hosting was really hosing the speed. Most of the tweaks from here on out are related to the GWJ site.

Tweak MySQL settings

Since the Gamers With Jobs site is very database intensive, getting MySQL to perform optimally given the site's load is important. I'm still tweaking these settings here and there, but here's what I'm at so far. I'm attempting to go for large enough buffers and caches to keep things snappy, but without bloating out the caches to the point that things slow down.

#
# * Fine Tuning
#
key_buffer              = 256M
max_allowed_packet      = 16M
thread_stack            = 128K
thread_cache_size       = 8
#max_connections        = 100
table_cache             = 256
thread_concurrency      = 4
sort_buffer_size        = 1M
read_buffer_size        = 1M
read_rnd_buffer_size    = 4M
myisam_sort_buffer_size = 64M
#
# * Query Cache Configuration
#
query_cache_limit       = 1M
query_cache_size        = 16M
#
# Turn on slow query logging to help track down performance killers
#
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 5
#
# Some further table-type tweaks
#
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
 
[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

Bringing over the GWJ site required quite a bit of scripting of INSERT and DELETE statements that fudged with table lengths, so I also optimized all the tables with free data space:

-- Get the table names...
SHOW TABLE STATUS WHERE Data_free > 0;
-- ...and run the following for each
OPTIMIZE TABLE TABLE_NAME;

Tweak Apache settings

The YSlow utility from Yahoo is a great way to track down potential end-user performance issues, so I ran it against the GWJ dev site and tweaked quite a few things to improve the rating and speed reported there.

First, I needed to enable a few Apache modules:

a2enmod deflate
a2enmod expires
a2enmod cache

Then, in /etc/apache2/httpd.conf, I added the following lines to the stanza of the GWJ virtual host definition:

# Gzip html, css, js, etc.
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/json
# Set expires headers on html, css, js, etc.
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/x-javascript "access plus 1 month"
</IfModule>
# Set ETags
FileETag MTime Size

Install memcached

In order to squeeze a bit more performance out of the server, I decided to install memcached and the related Drupal module, which allows you to configure Drupal to store certain cache data in memory. I essentially followed the instructions in Robert Douglass's article on Lullabot, but with a couple of modifications.

First, libevent1-1.3b and memcached-1.2.1-1 can be installed via apt-get on Ubuntu gutsy, all with:

apt-get install memcached

Then, I enabled the Apache module:

a2enmod mem_cache

Install eaccelerator

Not much to write here, aside from noting that I followed the great article on 2Bits to get going.

Done... sorta

Seeing how I started writing this article a couple of weeks ago and am just getting around to publishing it, I think I'll call it "finished," for now. I hope that someone out there finds this useful!

Useful TextMate Snippets for Drupal

I took a few minutes this evening to whip up some TextMate snippets that I think will be useful for Drupal development. They're nothing fancy, and certainly not as ambitious as Steven Witten's kitchen sink approach, but I think it'll simplify one of the most repetitive tasks I usually find myself in when writing a new module.

These snippets all use TextMate's built-in tab stop handling, which allows you to quickly insert the snippet and then just tab through all the relevant places where you'd need to change something. Give it a try - especially with the .module file snippet.

Initial setup

  1. Open up TextMate
  2. Go to the Bundle Editor (Bundles -> Bundle Editor -> Show Bundle Editor, or ctrl+option+cmd+b)
  3. Add a new bundle and call it "Drupal"
  4. From here out, each snippet can be added by choosing "New Snippet"

The .info file

I called this one "Module info file" and gave it the tab trigger drupmod_info. I haven't figured out how to get this one to actually render via a tab trigger, but it's easy enough to just navigate to the Drupal bundle and choose the snippet.

; \$Id\$
name = "${1:Example module}"
description = "${2:Example module description}"
dependencies = $0

The .module file

This snippet uses TextMate's variable mirroring to let you quickly rename all the hooks in the snippet with the first tab stop. I used the hooks below because most of my modules implement these hooks. Just follow the pattern for naming, etc. to add your preferred hooks.

I called this one "Module general hooks" and assigned it the tab trigger drupmod_m.

<?php
// \$Id\$
 
/**
 * Implementation of hook_perm
 */
function ${1:example}_perm() {
  return array(
    '${2:example permission}',
  );
}
 
 
/**
 * Implementation of hook_menu
 */
function ${1:example}_menu($may_cache) {
  $items = array();
 
  if ($may_cache) {
    $items[] = array(
      'path' => 'admin/settings/${1:example}',
      'title' => t('${3:Example}'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('${1:example}_admin_form'),
      'access' => user_access('administer site configuration'),
    );
  }
 
  return $items;
}
 
 
/**
 * Menu callback - Admin settings form.
 */
function ${1:example}_admin_form() {
  $form = array();
  return system_settings_form($form);
}
 
 
/**
 * Implementation of hook_form_alter
 */
function ${1:example}_form_alter($form_id, &$form) {
  switch ($form_id) {
    // Alter node edit form
    case $form['type']['#value'] .'_node_form':
    break;
  }
}
 
 
/**
 * Implementation of hook_nodeapi
 */
function ${1:example}_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'delete':
    break;
 
    case 'insert':
    break;
 
    case 'load':
    break;
 
    case 'submit':
    break;
 
    case 'update':
    break;
 
    case 'view':
    break;
  }
}

The .install file

This one is pretty similar to the .module file, but I tried to make sure it handled some common uninstall tasks I usually forget to tackle until I absolutely have to.

I called this one "Module install hooks" and assigned it the tab trigger drupmod_i.

<?php
// \$Id\$
 
/**
 * Implementation of hook_install
 */
function ${1:example}_install() {
  switch ($GLOBALS['db_type']) {
    case 'mysqli':
    case 'mysql':
      db_query("CREATE TABLE IF NOT EXISTS {${1:example}} (
        id int unsigned NOT NULL auto_increment,
        field varchar(128) NOT NULL default ''
        PRIMARY KEY (id),
      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
    break;
  }
}
 
 
/**
 * Implementation of hook_uninstall
 */
function ${1:example}_uninstall() {
  db_query("DROP TABLE {${1:example}}");
  $variables = db_query("SELECT name FROM {variable} WHERE name LIKE '${1:example}%%'");
  while ($variable = db_fetch_object($variables)) {
    variable_del($variable->name);
  } 
}

Just got rolling with a VPS on Linode (Part 1)

Note: A large part of this is taken from Victor Kane's article on Awebfactory about setting up Drupal on a fresh Linode, but I've documented some other things here and did some things a little differently than he did, so I figured it'd be worth writing up a post on the process. I've kept the details thin here in places where Victor's notes are more than satisfactory, but I've made sure to note where that happens.

Update: Be sure to check out part 2 of this article, as well.

I've spent the last several months of my off-work hours plugging away at helping the folks over at Gamers With Jobs get rolling with an upgraded version of Drupal, and in the process we decided to move from a shared hosting environment to a place where we've got a lot more control over performance and site configuration. In the meantime, Victor Kane's article on getting Drupal up and running on a Linode came across my RSS reader and provided the kick in the pants I needed to really investigate it. I looked at several VPS options, but in the end Linode seemed to be the best. They offered a seven day money back guarantee, which honestly isn't much, but it was long enough for me to feel comfortable giving it a shot without being out sixty bucks, so I decided to try it out.

Syndicate content