The Blog
Game Face
“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…
coffeescript-streak
coffeescript-streak is a port of the streak Ruby gem which handles calculating win/loss streaks. It uses Redis as its backend for collecting the data. It has also been uploaded to the npm registry.
Contributor(s): David Czarnecki (GitHub, Twitter)
haigha
haigha, our client library for interacting with AMQP brokers saw an update to 0.5.1 this past week. You can review the CHANGELOG in full. FYI, the rabbitmq-extensions branch of haigha, currently in-development is laying the foundation for publisher confirms.
Game Face
“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…
kairos
GitHub user, Greg Banks, submitted a patch to kairos, our Python library that provides time series storage using a Redis backend, to add Python 2.6 support. Thanks Greg!
Contributor(s): Greg Banks (GitHub)
tassadar
We finally got around to pushing a gem of tassadar, our pure Ruby library for parsing Starcraft 2 replay files. The 0.0.2 update converts serialized strings ASCII-8BIT => UTF-8. This was the source of serious encoding problems in replay parsing. Version 1.0 will be out in the next week or so.
Game Face
“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.
Don’t Let Your Community Website Become a Red-headed Stepchild
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.
Game Face
“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.
Game Face
“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)
Game Face
“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.
Game Face
“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…
coffee_bean
If you’re starting a new project in any framework, you always end up generating a lot of boilerplate code. The coffee_bean Ruby gem abstracts that for new CoffeeScript projects to help you get your new project started quicker and without you having to necessarily copy and remove “bits” from your other CoffeeScript projects.
Contributor(s): David Czarnecki (GitHub, Twitter)
geocoder
If you’re doing any geocoding in Ruby, chances are you’ve come across the geocoder gem. David Czarnecki contributed a patch to only load the appropriate code depending on whether you’re using geocoder with ActiveRecord, Mongoid or MongoMapper.
Contributor(s): David Czarnecki (GitHub, Twitter)
haigha
We do a fair amount with AMQP in our middleware product and so we have written haigha, a AMQP libevent client in Python. 0.4.2 and 0.4.3 were released this week. These 2 releases encompass a number of important changes with respect to transport requirements, defaulting to gevent, notifications for channel close listeners and sending out heartbeat frames.
Contributor(s): Aaron Westendorf (GitHub, Twitter)
weary
Weary is a “framework and DSL for building clients for (preferably RESTful) web service APIs” that is built around Rack. However, it only ships with one adapter for Ruby’s Net::HTTP library. The Net:HTTP is demonstrably slower than other Ruby HTTP libraries, so Matthew Wilson decided to submit a pull request to add Excon and Typhoeus adapters to Weary.
Game Face
“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
Are you into brewing your own beer? Do you use Beersmith? Want to parse Beersmith2 (.bsmx) files in Ruby? Grab a pint of brewscribe, or rather the gem, and enjoy!
Contributor(s): Andrew Nordman (GitHub, Twitter)
factory-worker
Factory Worker is our Node.js library that creates the Factory pattern for object stores. The 0.6.0 release integrates a pull request from GitHub user, Szymon Nowak, to return the saved object from the Factory.create method.
Contributor(s): Szymon Nowak (GitHub)
darksky
Gray skies are gonna clear up, put on a happy face! Why? We’ve got 2 darksky-related releases this week. darksky continues to expand their API and they added two new endpoints: “brief_forecast” and “interesting”. The 1.0.4 release of the darksky gem adds support for the “brief_forecast” endpoint. The “interesting” endpoint was supported as of the 1.0.3 release.
Contributor(s): David Czarnecki (GitHub, Twitter)
java-leaderboard
One of the leaderboard gem’s spawn, java-leaderboard, saw a release with version 2.0.2 that integrates a pull request from GitHub user, Jon Barber. His pull request added some logic to cope with cases where no such user is in the leaderboard. Thanks again Jon!
Contributor(s): Jon Barber (GitHub)
node-darksky
You want to integrate the darksky API into your Node.js application? Aaron Westendorf has you covered. He released version 0.1.0 of the node-darksky package last Saturday. And so, the darksky ecosystem got a little brighter!
Contributor(s): Aaron Westendorf (GitHub, Twitter)
vindicia-api
We use Vincidia’s CashBox for SaaS billing in the Major League Gaming store. A ruby gem that integrates with the Vincidia CashBox SOAP API doesn’t do the development community any good if it’s hidden away. So one of our engineers, Tom Quackenbush, polished off some rough edges and released version 0.0.2 of the vindicia-api gem.
P.S. Totally unrelated, but Tom may also be working on a social network for cats called Kitty City. Stay tuned!
Contributor(s): Tom Quackenbush (GitHub, Twitter)
Game Face
“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 feeds can be complicated to do correctly, which is why we developed the activity_feed gem. The 1.3.0 release adds functionality to update the timestamp for a given activity feed item, which is useful when you want items to “bubble up”. You can also remove items from activity feeds.
Contributor(s): David Czarnecki (GitHub, Twitter)
amico
It was an exciting week for the amico project, which allows you to express relationships (e.g. friendships) backed by Redis. The 2.0.1 release adds support for an all call that can return all the relationships for a given relationship type, such as following or followers. We would also like to highlight acts_as_amico, developed by GitHub user John Metta, which is an ActiveRecord injectable version of the Redis-backed friendship system. He originally submitted this as a pull request to amico.
Contributor(s): David Czarnecki (GitHub, Twitter)
bettertabs
bettertabs is a simple Rails 3.1+ Engine that includes a helper and a jquery plugin to render the needed markup and javascript for a section with tabs in a easy and declarative way, forcing you to keep things simple and ensuring accessibility and usability, no matter if the content is loaded statically or via ajax. The 1.3.6 release this week allows this to be used in Rails 3.2 as well.
Contributor(s): Jeffrey Lee (GitHub)
bnet_scraper
We released a new gem this week, bnet_scraper. This is a Nokogiri-based scraper of Battle.net profiles. Currently this only includes Starcraft 2 data scraping. It has support for scraping profiles, league data, achievements, and match history. Let us know if this gem is useful to you.
Contributor(s): Andrew Nordman (GitHub, Twitter)
leaderboard
One of our most popular gems, leaderboard, has a new release this week with version 2.0.5. leaderboard allows you to create leaderboards (aka high score tables, aka scoreboards) in Redis. This releases addresses the first future idea from the README when the gem was released over a year ago to add a method allowing for bulk insert of data into a leaderboard. Performance of the bulk insert indicates this is preferable to individual inserts if you ever need to insert a large amount of data into a leaderboard.
Contributor(s): David Czarnecki (GitHub, Twitter)
darksky
The darksky gem saw a couple of releases this week. 1.0.2 removed the default to disable SSL peer verification now that the DarkSky API server has a signed certificate. 1.0.3 added the new “interesting” API endpoint to return a list of interesting storms happening right now. It also fixes a bug in the precipitation API endpoint where multiple locations were not correctly passed to the API.
Contributor(s): David Czarnecki (GitHub, Twitter)
Upcoming
We have a number of pull requests that we need to get integrated into various projects. Part of the reason these sat for so long is that we forgot to turn on GitHub notifications for the engineering team for these projects. So, look for releases next week of java-leaderboard, our port of the leaderboard gem to Java, and for errship, a Rails 3.1 engine for rendering error pages inside your layout.
A special thanks to GitHub user, vitaly-krugl, for reporting so many issues on haigha, our simple to use client library for interacting with AMQP brokers.






