Play other people online: login | register

Vying Games : Blog

State of the Site

March 25, 2008 at 03:30PM
In Vying Games
By eki
2 Comments

Or, where are we and where do we go from here?

We're quickly approaching Vying Games' 1-year anniversary. I'll commemorate that moment with another blog post when we reach it on March 29th, right now I'd like to focus more on the present and the future.

In the last week we saw a major update to the play page, and the release of a new game, Cephalopod. There were a number of bugs, mostly minor and fixed pretty quickly, but there were also a couple severe bugs. Internet Explorer 6 proved again how fragile it can be, complaining of javascript errors when in fact it didn't like a div that was set to position: relative.

Browsers

A few words about web browsers: Firefox, Safari, and Opera are all wonderful browsers. This site makes heavy use of the canvas tag. These three browsers all provide excellent native support for it. Internet Explorer doesn't support the canvas tag. There's a javascript library called Explorer Canvas that adds canvas support to Internet Explorer, but it's (a little) buggy and (a lot) slow.

In a lot of respects, I think Internet Explorer is holding up a lot of progress on the web. If it had native support for the canvas tag, for example, there's so much more I could do with the games on this site. That said, Vying Games will continue to support Internet Explorer 7. I'll keep trying to make everything work in Internet Explorer 6 as well, and when Internet Explorer 8 comes out of beta I'll make Vying Games compatible with it as well.

A Traffic Surge

Anyway, back to the last week. On Sunday night I posted Cephalopod on reddit. Last time I posted a game on reddit it was quickly buried and we only got about 100 new visitors. This time, I'd estimate we had around 4000 new visitors. All of whom wanted to play Cephalopod against the bot. I would estimate that each bot game consumes 400-500x the server resources as a single human vs human game. So, the server was swamped throughout the day.

If you take a look at the traffic for the week, you can see that this was no small incremental step up in traffic. To add insult to injury, I also discovered a bug that would cause the server to get into an infinite loop. It only struck two of the server processes (out of 10), but it would have been enough to kill the server even without the extra traffic. I fixed that bug, but with upwards of 50 simultaneous bot games the server was still toast for much of the day.

Server Architecture Changes

I think it's pretty clear that the bots need to have their own server resources separate from the main server. Ideally, on a day like yesterday, the bots become less responsive, but the server itself continues to be fast. Everyone playing human vs human games continue to play without realizing how heavily loaded the bots are.

Right now the bots execute in the web server processes (a cluster of Mongrels running Rails). This setup was simply convenient. In the future, I'd like to setup a DRb (Distributed Ruby) server that houses all the games. The Rails processes would hold connections to the DRb server and it would manage the games. The bots would run as clients of the DRb server.

One upshot of this architecture is that it will allow the bots to be persistent. This'll make it easier for the bots to cache game-tree search results between moves, dynamically build opening books, start analyzing a position during your turn, etc. All of these things should be possible now, but they become easier with these architectural changes.

More generally, I suspect this setup might perform and scale better. Right now there are just so many round trips to the database, or bringing objects in and out of memcached (fast but has a lot of serialization overhead).

These are major changes, and I intend to tackle them in a separate branch of development. There's no reason that development and the release of new games and UI improvements can't continue while the server is being restructured.

Funneling People into Games with Each Other

While separating the bots from the rest of the server is a good thing. Even better, for the server's resources and the site's community, would be to get those new visitors into games with each other. I'm less sure how to accomplish this. Ultimately, I think, it means making a lot more progress into realtime play. However, it's accomplished I think this clearly needs to be one of the highest priority goals for the site.

Open Source 'Vying' Library

The heart of Vying Games, the library aptly called vying, has been open source for a while now. I've been holding off on making a major announcement about it until I meet a few more of my goals for it. At this point, there's really only one major goal remaining (not that the library is anywhere near complete).

In the next couple weeks I'll add a clear and simple api to the Vying Games server. It'll be http-based and hopefully make it simple for people to write scripts to interact with the server. This should allow people to write bots capable of playing games, accepting invites, joining tourneys, chatting, etc. I've already talked to one developer who's shown interest in doing just that.

These bots would be different from the built-in bots. They'd appear just like any human user, and play the games in the same turn-based fashion. With the built-in bots my goal is to provide a realtime experience, which severely limits the amount of time available to think about a move. Naturally, this results in weaker bots. Not that stronger bots can't be made to play quickly, it's just more difficult to accomplish.

As I develop the Vying Games server api, I'll also add client functionality to the 'vying' library and try developing a couple new bots. The new bots would connect through the new client functionality, and play more slowly (deliberately?), but hopefully much better than the existing bots.

Once these goals are reached I'll announce the 'vying' project on the Ruby mailing list. Hopefully, I can interest a few developers in contributing to the project.

New Games

I've released 17 games this past year. That's a pretty good clip, and I'd like to see that pace continue over the next year. I would like to see a little more variety though. The site is heavily populated with 2 player, perfect information, deterministic, abstract strategy games right now. I'd like to see some games for more than 2 players, as well as more games with random elements or hidden knowledge. Hopefully we can also expand beyond board games. The one thing that will remain constant though, all the games will continue to be multi-player turn-based strategy games.

User Interface Improvements

We made some huge steps forward recently, but there's still a long ways to go. I'd like to improve / update the blog, the forums, the messages (inbox) pages. The tourney pages are also in need of a major update. Additionally, I'd like to make significant changes to the user profile page.

Okay, I'd like to update almost every part of the site. I have a long list of user suggested improvements and I need to make significant progress on them.

Membership

At some point in the next year, the site needs to start supporting itself. This will likely mean a value added membership and/or advertising. I'd prefer to keep the site advertising free, so it's likely we'll explore adding a membership fee first. The site will remain free and open to newcomers, so we'll have to come up with some extra benefits for paying members.

Personal Work Situation

I just finished some contract work, so I'll be at a crossroads again fairly soon. I'll need to decide whether to look for more contract work or a full-time job. I'd like -- and intend -- to complete a lot more of my goals for Vying Games before considering for full-time employment. Either way Vying Games development will continue to be a big part of my life.

Many Thanks

In the 1-year anniversary blog post I'll get more into thanking everybody for such a great year, but, well, thanks for a great year! Developing and running Vying Games has been so much fun, and that's in no small part thanks to all the great people I've gotten to know in the process. So... thanks!

Comments

Red says,

I'd be more than happy to buy a subscription with even minimal perks. This is a great site and I'd be proud to support it.

As far as perk ideas, one that comes to mind is the ability to color names. I get the idea from Legend of the Green Dragon where maybe it's a little more impressive in that it's more or less a text based mud-style game with a lot of chatting, so names are more prevalent. But I'm a sucker for seeing my name in red.

Speaking of LoGD, a possible alternative income system might be a donation points sort of system. X dollars buys Y points which can be traded in for Z perks. This would make more sense if you have more one-time perks, which is easier to pull off in an adventure game.

Eric says,

Thanks for the kind words, Red.

I think username coloring would be an okay perk. Along the same lines, I've considered allowing users to have a small image accompany their username. Some other sites do this, notably GoldToken, where I think it's a little out of control. A lot of their images are animated, and I personally don't like having anything animated on the page. Particularly when I'm playing. So, I'd expect that to be a case of making one user happy but annoying most of their opponents.

But just coloring a username wouldn't be a big deal. Or providing a small set of static icons, might also be okay.

One of the standard perks for a site like this is vacation days. For those not familiar with the term, it works like this: You've been away from the site for an extended time for whatever reason, and today 3 of your games are going to timeout. But, you have 7 vacation days... so instead the site extends the time limit on all your games by 1 day, at the expense of one vacation day. If you're still not back tomorrow the same thing happens. I don't think this'll be too useful for regular games (1 month time limit), but for tourney games (7 day time limit), I think it'd be a nice perk.

I've got ideas for other perks, but I'm having a hard time deciding whether each idea is a perk, or just an improvement that the site needs for all users. Ultimately, I think I'll solicit feedback on the forum.

Got Something to Say?