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…
kairos
kairos provides time series storage using Redis or Mongo backends. As of the 0.3.0 release, we have implemented support for Gregorian data intervals (daily, weekly, monthly, yearly) and there is a new API for Timeseries.series(). Check the README for more details.
Contributor(s): Aaron Westendorf (GitHub, Twitter)
leaderboard
leaderboard allows you to build leaderboards using Redis. The leaderboard (Ruby), leaderboard-python and leaderboard-coffeescript libraries all saw updates this week. In leaderboard 3.1.0, we added support for a members_only option when making various leaderboard requests to only return the member data and not rank or score data. This same functionality was ported to leaderboard-coffeescript 1.1.0 and leaderboard-python 2.3.0.
Contributor(s): David Czarnecki (GitHub, Twitter) and Simon Zimmerman (GitHub).
torus
torus is a service implementing the Carbon protocol to store time series data using kairos and an HTTP server to query and analyze the data. With the 0.3.0 release, we upgrade to kairos 0.3.0 to add support for Gregorian dates and date ranges to “/series”, added support for UNIX timestamps or parsedatetime-compatible strings for ‘start’ and ‘end’ parameters to “/series” and added support for ‘steps’ parameter to “/series”.
How to do Open Source: A Case Study in 1 Issue and 6 Pull Requests
I wanted to highlight a recent set of contributions from Simon Zimmerman to our leaderboard-python that, in my opinion, reflect how to effectively participate in open source projects. The pull requests are as follows:
- StrictRedis not considered when passing connection argument to Leaderboard
- don’t deepcopy options (branch: performance)
- ASC sorted page_for was broken due to a spelling error (branch: page_for-fix)
- leaders() should return an empty list in case of an empty result set. (branch: leaders-return-type)
- remove unused calculation in leaders_in method. (branch: unused-calculation)
- proposal: consider using named key word arguments instead of **options (branch: options)
- add members_only option. (branch: members_only-option)
Aside from the first issue, which is a very clear and concise explanation of where an underlying and undocumented check in the library could trip up potential users of the library, all of the pull requests follow the same pattern:
- Meaningful title
- Separate branch with a meaningful branch name per pull request
- Small, focused and tested pull request that could be evaluated independently
- Clearly identify a proposal pull request before embarking on code changes that may go against the convention or direction of the project
How does all of this help me as a library maintainer? Well, meaningful titles in a pull request or issue help me to mentally narrow down the extent of the change(s) or the code I might be looking at without having to actually look at the code. To quote George Costanza from Seinfeld, “I like stuff you don’t have to think about too much.” Meaningful titles go a long way to making that happen. Separate branches are nice because I can evaluate the change(s) in the code independently of other feature changes. It also indicates that the contributor took the time to actually read the “contributing to this project” section in the README. None of the pull requests were more than a few lines of code and the ones that added or changed functionality included tests. That always helps since I’m more likely to integrate a pull request immediately if I can pull the feature branch, run the tests and know that the library won’t break in strange and unusual ways. And finally, it’s nice to propose larger feature changes that may affect the entire library in a small spike and to gauge interest from the library maintainer(s). It saves everyone a lot of time if it’s functionality that isn’t desired given conventions or direction of the project.
Hack-a-Thon 12 Pull Request Recap
Now that our latest Hack-a-Thon has wrapped up here, we’ve got a few pull requests and issues filled out with various projects. Here’s a recap:
- zurb / foundation – Update andSelf call (deprecated in jQuery 1.8+) to addBack
- zurb / foundation – Custom selects inside Reveal dialogs cause visibility bug using jQuery 2.0.0 (Safari 5.1)
- andymccurdy / redis-py – from_url supports URI without a port number, defaults to 6379
- rubymotion / Joybox – Fix misspelling from jbpLenght to jbpLength
- rubymotion / Joybox – Fix continuous_physics typo
- rubymotion / Joybox – Fix typo in continuousPhysics property/setting
- CurveBeryl / Joybox-Box2D – Fix typo in continuousPhysics getter and setter
- CurveBeryl / Joybox-Examples – Fix spelling error for jbpLength
New Hydra Beta Features – April & May 2013
April was another busy month for the Hydra team and the Hydra closed beta. We accomplished another set of significant milestones that moves us even closer to launching the Hydra closed beta to the public later this year.
Below is an overview of the new features we released during April and the first week of May. Take a quick read, and then head to the Hydra dashboard and give everything a test run. Make sure you let us know your thoughts on the Beta Support Forum as your feedback is extremely valuable.
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 is our Nokogiri-based scraper of Battle.net profiles. In 0.6.0, we added a GrandmasterScraper to pull all grandmasters by region, improved the portrait code as well as updating portrait names for anniversary.
Contributor(s): Andrew Nordman (GitHub, Twitter)
confirm-with-reveal
confirm-with-reveal is a replacement for window.confirm() using the Reveal modal popup plugin from Zurb Foundation. The latest release this week addresses form confirmation on submit, not on click. You can also check out the plugin in action on the project page.
Contributor(s): Jack Letourneau (GitHub, Twitter)
leaderboard_factory
leaderboard_factory is a gem to help you define and work with a bunch of leaderboards, from, e.g. an ActiveModel object. The latest release fixes the specs to work with the leaderboard 3.0+ gem.
Contributor(s): Matthew Wilson (GitHub, Twitter)
stache
stache is our Rails 3.x compatible Mustache/Handlebars Template Handler, with support for partials and a couple extra niceties to make sharing the raw templates with client-side javascript a little easier. The 1.0.1 release fixes a regression in mustache layout handling.
Contributor(s): Matthew Wilson (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_feed is our Ruby gem for storing and managing activity feeds in Redis. The 2.3.0 release adds a check_item?(…) method to see if an item is in an activity feed.
Contributor(s): David Czarnecki (GitHub, Twitter)
homebrew
homebrew is the “missing package manager for OS X”. We submitted a pull request that was integrated for adding Redis 2.6.13 support.
Contributor(s): David Czarnecki (GitHub, Twitter)
kairos
kairos provides time series storage using a Redis backend and, as of 0.2.0, MongoDB. The latest release is a major refactor, and with the new MongoDB backend, supports many more use cases. The 0.2.1 release also includes optimizations for processing multiple transforms on each data set query.
Contributor(s): Aaron Westendorf (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…
confirm-with-reveal
confirm-with-reveal is a replacement for window.confirm() using the Reveal modal popup plugin from Zurb Foundation. See example jsFiddle for a demo.
Contributor(s): Jack Letourneau (GitHub, Twitter)
Ruby-MAPI-Wrapper
brightcove-api is a Ruby gem for interacting with the Brightcove Media API. This week we integrated a pull request to allow an UploadIO object to be passed to the post_io_streaming method.
Contributor(s): Mihail Szabolcs (GitHub)
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…
factory-worker
factory-worker is a node.js library that creates the Factory pattern for object stores. The 0.7.0 release integrates a pull request to allow inheritance from already-defined models in Factory.create. We also updated the jessie library as well as cleaning up the npm contact information.
Contributor(s): Joseph Kenneth (GitHub) and Andrew Nordman (GitHub, Twitter)
tassadar
tassadar is our fast Starcraft 2 replay parser written in pure Ruby. We will cut a new release soon, but we integrated a pull request to remove random <sp/> in player names that have clan tags.
Contributor(s): Robert Ross (GitHub)
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 is our Nokogiri-based scraper of Battle.net profiles. There are quite a few changes in the 0.5.0 release, most notably more “Heart of the Swarm” support. Be sure to check out the CHANGELOG for all the details on new functionality in this release.
Contributor(s): Andrew Nordman (GitHub, Twitter)
chai
chai provides a very easy to use api for mocking/stubbing your python objects, patterned after the Mocha library for Ruby. In 0.3.0, expectations have been improved on by not insisting that one knows how many times an expectation will be called unless explicitly set as well as assuming any arguments on an expectation unless explicitly set. Finally we fixed stubbing properties on an instance.
Contributor(s): Aaron Westendorf (GitHub, Twitter)
forecast.io
forecast-ruby is a forecast.io API wrapper in Ruby. The gem now uses Faraday to allow for swapping of the underlying HTTP library.
Contributor(s): Norbert Crombach (GitHub)
tassadar
tassadar is our fast Starcraft 2 replay parser written in pure Ruby. No release, but if you’re doing development, we did update things to use guard-rspec.
Contributor(s): Logan Koester (GitHub, Twitter)
torus
torus is a service implementing the Carbon protocol to store time series data using kairos and an HTTP server to query and analyze the data. As of 0.1.4, we have updated to kairos 0.1.5 with a bug fix for reading data from timeseries with relative time interval schemas. Aggregates can now cascade to other aggregates, with a simple failsafe on infinite loops.
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…
forecast-ruby
forecast-ruby is a forecast.io API wrapper in Ruby. forecast.io is the best weather service out there today and we’re happy to have helped bring the Ruby wrapper to life.
Contributor(s): David Czarnecki (GitHub, Twitter)
hipchat-rb
hipchat-rb is the official Ruby gem for interacting with the HipChat service. This past week a pull request was integrated to only send HipChat notifications on capistrano deploys if the –dry-run (-n) was not passed.
Contributor(s): David Czarnecki (GitHub, Twitter)







