The Blog

Posts from April 2012

Apr 27

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

activity_feed

activity_feed is a gem for doing activity feeds (aka activity streams, aka timelines) in Redis. GitHub user, jc00ke, submitted a pull request to cleanup the README and remove the irb output.

Contributor(s): Jesse Cooke (GitHub, Twitter)

brightcove-api

brightcove-api is a gem for interacting with the Brightcove Media API. The README got a cleanup to remove irb output.

Contributor(s): David Czarnecki (GitHub, Twitter)

haigha

haigha is a simple to use client library for interacting with AMQP brokers. The 0.5.0 release offers a number of enhancements

  • Fix message reading in basic.get
  • Added optional open_cb kwarg to Connection constructor
  • Added optional callback to basic.consume for notifications when broker has registered the consumer
  • Moved channel state out of ChannelClass and into Channel to fix access problems after Channel has been cleaned up
  • Added support for Channel open notification listeners
  • All AMQP timestamps are in UTC
  • Most exceptions will now propagate to user code, fixing problems with gevent.GreenletExit and SystemExit
  • Preliminary support for synchronous clients

 

Contributor(s): Aaron Westendorf (GitHub, Twitter)

hipchat-api

hipchat-api is a gem for interacting with the HipChat API. The README got a cleanup to remove irb output.

Contributor(s): David Czarnecki (GitHub, Twitter)

kairos

kairos is a library that provides time series storage using a Redis backend. The 0.0.6 release added “optional compression on a series which will count unique hits on a value within an interval. Exact time resolution is traded in favor of a (possible) significant reduction in storage requirements. The resolution of the compression is up to the user in how they cast the data on insert.”

Contributor(s): Aaron Westendorf (GitHub, Twitter)

leaderboard

leaderboard is a gem that allows you to develop leaderboards for your application or game, where the leaderboards are backed by Redis. The 2.0.6 release adds an “accessor for the reverse option so that you can set reverse after creating a leaderboard to see results in either highest-to-lowest or lowest-to-highest order.”

Contributor(s): David Czarnecki (GitHub, Twitter)

silver_spoon

silver_spoon is a new gem for doing entitlements in Redis. It is a “simple semantic wrapper around Redis hashes for adding, removing, retrieving and checking existence of entitlements.”

Contributor(s): David Czarnecki (GitHub, Twitter)

strumbar

strumbar is another new gem that acts as “a wrapper around ActiveSupport::Notifications with pre-configurations for basic instrumentation to be sent to statsd.” Current instrumentations exist for ActionController, ActiveRecord and Redis.

Contributor(s): Andrew Nordman (GitHub, Twitter) and Matthew Wilson (GitHub, Twitter)

tasty

tasty is a gem for interacting with the del.icio.us API. The README got a cleanup to remove irb output.

Contributor(s): David Czarnecki (GitHub, Twitter)

Apr 27

Don't Let Your Community Website Become a Red-headed Stepchild

By Mike Jodon

Each new game project that The Hydra Team at Agora Games works on has us smack dab in the middle of game and web development teams.  Together, these game and web development teams set out to build a game and community website experience that will be very tightly aligned.  We like being in the middle.

Our technology puts us in a unique spot where we integrate directly into the game, and this is when we work directly with the game development teams. A few key examples below:

  • Tracking and storing all user profile stats.
  • Tracking and storing all user match stats.
  • Powering in-game MOTDs.
  • Supporting the upload/download of in-game UGC (user generated content).

Our technology also puts us in a spot to then help translate those in-game features onto the web, and this is when we work directly with the web development teams.  A few key examples below:

  • Providing the stored game data and APIs to showcase a full user profile.
  • Providing the stored game data and APIs to showcase a user’s historical match stats.
  • Providing APIs for a community team to build web tools so they can push new MOTDs in-game.
  • Providing the stored game data and APIs to support a per user UGC queue so that UGC created in-game can be showcased on edited on the web.

The nice one-two punch of awesome in-game integration combining with a spiffy community website package is hard to achieve.  We’ve helped game projects achieve this game-to-web Nirvana on numerous occasions, but a good majority of the time we see the community website fall very short of its original expectations.  We’ve been on early project marketing calls where a super excited marketing representative lays out an amazing game and community website combination, with all the bells and whistles that “they must have!"  12 months later an awesome game launches, but the community website is a barren wasteland of a basic user profile and community forums.  We’ve seen this happen too many times.

I’ll preface the next section by saying that Agora Games totally understands that the game is king.  The game is 60 bucks a pop, and all in-game integration gets first dibs at all times.  We understand, and we fall in, we like your business.  With that said, it so deeply saddens us to see community websites fall into the red-headed stepchild role, playing second fiddle, and inevitably hitting the cutting room floor [I think I hit the max on cliches in that last sentence].  This doesn’t have to happen.  A community website might not get you 60 bucks every time a user signs on, but a strong community website with solid integration into the ever so popular social networks can keep your user-base playing well into the next fiscal year and buying every single piece of DLC you throw at them.  How do we make it work you ask?

We like being in the middle, we’ve been in the middle, we HAVE seen it work, and we have 3 easy tips!  Note: These tips do not require you work with us – we’re not that sneaky.

1.) Don’t leave so fast Mr. Marketing - That same super excited marketing guy that I mentioned above tends to disappear fast.  He/she usually has a really awesome dream scenario of what a game and its community website equivalent should look like, they speak the hell out of it at the beginning of a project, but then they fade out of regular communication with that plan shortly after.  Weekly calls get setup with the engineering team.  Weekly calls get setup with the web team.  Mr. Marketing tends to not show up at either.  This means that the already tight engineering resources and deadlines pummel community website features in the face, slowly knocking them off one-by-one because all in-game features must be there on launch day.  If there was a marketing presence checking in more often throughout the lifetime of the project, there would be many less angry marketing people that cry when they sign onto the community website on launch night (only to see community forums and a "community profile coming soon” message).

2.) Community Managers are smart, let them play early and often - As I mentioned above, marketing folks tend to have 15 other projects to move onto right after they give their game and community website speech at the beginning of a project.  Since they can’t make it to bi-weekly and weekly tech calls as actual development picks up, they should send someone in their place.  Community Managers can fill this role!  Send at least one voice to all weekly calls that fights and reminds the team of that original game and community website plan.  If a community manager can hear there is the possibility that things might get cut (because of deadlines and resources), they can at least go back and report these facts so the top community website features can be re-prioritized and fought for on next week’s call.  The best community features WILL actually launch if there is a voice to fight for them.

3.) Don’t be afraid to let game developers and web developers mix - Too often game developers want nothing to do with web developers, and web developers don’t particularly enjoy developing a community website if they’re dealing with half-assed game code on features that we’re deemed as “they can be cut if we don’t get to them community website features."  It’s almost going to sound too easy, but get a web developer presence on weekly tech calls as early as possible!  Don’t force producers to waste time and run two different calls (a weekly game tech call and a weekly web tech call) when they can be easily joined into one.  Get both game and web developers on a weekly call, have a precise agenda that you follow each and every week, and hit the ground running.  Game and web developers will actually know each other, like each other, and will ultimately make Mr. Marketing very happy.  As a third party producer I will now purposely force my will upon the game projects our Agora team works on, because I am so passionate about this particular tip.  We’ll run the weekly tech and web calls for you, we’ll send out the precise agendas, and we’ll keep the communication between all teams open very early on for you.  We do it first and foremost because it helps our development get done on time, but it also makes YOUR game and community website projects successful!

This is what happens when these tips aren’t used (I purposely left this in a "ramble-on” format): Marketing folks disappear, no community voice is on weekly calls, game development teams dig in (concentrating on their in-game features first and foremost), time goes along and things get built – with no one reminding the teams of community website needs on the weekly calls (we bring community needs up the best we can, but ultimately we can only push when a web team has priorities), the web development team gets brought into the fold months later (too late usually), they look at the list of features they should be building onto the community website (handed to the them from Mr. Marketing), they ask the game development team whats ready to go, and the game development team says, “uhhhhhhhhh, not a whole lot,  but you do have a user profile!"  This leads to additional community website feature cuts after the web development team is left scrambling having to re-prioritize the small set of community features they actually can build, wasting time not getting to the actual web development itself.  We’ve seen it happen too often.

In conclusion, if you’re reading this, we want you to take our tips because in-game and community website integration is something we ALL need to see improving on a regular basis – we all need our jobs after all.

 

Apr 20

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

bnet_scraper

bnet_scraper, our Nokogiri-based scraper of Battle.net profiles, got an update this week to allow you to check if Battle.net is online for a given region. This is available in the 0.0.2 release.

Contributor(s): Logan Koester (GitHub, Twitter)

kairos

kairos is one of our newer libraries and is a Python module for storing time-series data in Redis. Version 0.0.5 was released this week which added an optional prefix for time-series keys.

Contributor(s): Aaron Westendorf (GitHub, Twitter)

prometheus

prometheus is a lightweight, modular framework built on Thor to quickly create beautiful command-line interfaces for your gems. It provides a standardized layout with generators, smart configuration, and an interactive console to work with your tasks.

Contributor(s): Logan Koester (GitHub, Twitter)

rduration

rduration is a simple utility for parsing durations from strings and comparing them. Basic math is also supported.

Contributor(s): Matthew Wilson (GitHub, Twitter)

redistat

redistat is a pretty bad-ass library for doing statistics storage and querying in Redis. David Czarnecki contributed a patch to allow for a configurable group separator when storing and querying statistics in Redis. This is available in the 0.5.0 release of redistat.

Contributor(s): David Czarnecki (GitHub, Twitter)

streak

streak is a gem for calculating win/loss streaks. It uses Redis as its backend for collecting the data. streak is configurable with respect to its keys to allow for tracking other positive/negative things in a game like wins and losses, kills and deaths, etc.

Contributor(s): David Czarnecki (GitHub, Twitter)

Apr 13

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

active_merchant

Remember the vindicia-api gem from a few weeks ago that we open sourced? One of our ex-interns, Steven Davidovitz, developed a Vindicia Payment Gateway for the active_merchant gem. Check out his pull request that adds this functionality.

Contributor(s): Steven Davidovitz (GitHub, Twitter), Tom Quackenbush (GitHub, Twitter)

brewscribe

The 0.2.0 release of the brewscribe gem this week adds a number of new classes: Mash, Carbonation, Equipment and Style as well as being able to parse Style listings and Recipe now following the type conversion system. If you use Ruby and Beersmith2, you should be involved with this project.

Contributor(s): Andrew Nordman (GitHub, Twitter)

constant-redefinition

constant-redefinition had its first functional changes in over a year. You can now pass a block when defining or re-defining constants to have them unset or reset to their original value.

Contributor(s): David Czarnecki (GitHub, Twitter)

kairos

Kairos is a new Python library for performing time-series data storage in Redis. Kairos is intended to replace RRD in situations where the scale of Redis is required, with as few dependencies on other packages as possible. It should work with gevent out of the box.

Contributor(s): Aaron Westendorf (GitHub, Twitter)

python-leaderboard

python-leaderboard is our port of our ruby leaderboard library. The 1.1.5 release adds support for ascending (low-to-high) leaderboards.

Contributor(s): Vitaly Babiy (GitHub, Twitter)

 

 

 

Apr 6

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

brewscribe

brewscribe, a Beersmith2 (.bsmx) file parser, saw an update this week with version 0.1.0. Various parts of the API now use a Brewscribe::Document to represent the .bsmx file.

Contributor(s): Andrew Nordman (GitHub, Twitter)

constant-redefinition

The constant-redefinition Ruby gem allows you to define constants if not defined on an object (or Module) and redefine constants without warning. You might use this when you’ve got large limits defined as constants in an application that you want to change under test so that you can still test edge cases, but with a smaller limit so that your test suite runs faster. Its test suite was converted from Test::Unit to RSpec.

Contributor(s): David Czarnecki (GitHub, Twitter)

gamercard

gamercard is a new Ruby gem that can retrieve and parse an Xbox Live Gamercard for a player. It will provide a hash of the relevant data about the player or the raw HTML.

Contributor(s): Matthew Wilson (GitHub, Twitter)

leaderboard

The leaderboard Ruby gem allows you create leaderboards backed by Redis. Its test suite was converted from Test::Unit to RSpec.

Contributor(s): David Czarnecki (GitHub, Twitter)

tasty

tasty is a Ruby gem for interacting with the del.icio.us API. It was originally written to be able to pull bookmarks from del.icio.us when Yahoo announced it would no longer be maintaining the service. Its test suite was converted from Test::Unit to RSpec.

Contributor(s): David Czarnecki (GitHub, Twitter)