The Blog

Posts from 2014

Dec 12

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…

globalize

globalize builds on the I18n API in Ruby on Rails to add model translations to ActiveRecord models. A pull request to fix a problem with dup and instance variables was recently integrated.

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

Dec 5

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…

chai

chai provides a very easy to use api for mocking/stubbing your python objects, patterned after the Mocha library for Ruby. This week we released chai 1.0.1. chai 1.0.1 fixes tests and unbound method support in Python 3.

Contributor(s): Graylin Kim (GitHub) and Pierre-Yves Chibon (GitHub)

haigha

haigha is our simple to use client library for interacting with AMQP brokers. In 0.7.2, we fixed installation under Windows.

Contributor(s): Anton Khlynovskiy (GitHub)

Nov 14

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…

leaderboard

leaderboard allows you to build leaderboards using Redis. The leaderboard (Ruby), leaderboard-python and leaderboard-javascript libraries all saw updates this week. All 3 updates were to add support for the change_score_for(...) method in the TieRankingLeaderboard class.

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

Oct 17

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…

chai

chai provides a very easy to use api for mocking/stubbing your python objects, patterned after the Mocha library for Ruby. This week we released chai 1.0.0. chai 1.0.0 added spies, a variation of an expectation that asserts a call has happened.

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

sidekiq-failures

sidekiq-failures “keeps track of Sidekiq failed jobs and adds a tab to the Web UI to let you browse them.” We submitted a pull request to add the paging links to the bottom of a page of failures.

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

stache

stache is our Rails 3.x and Rails 4.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. In the stache 1.1.0 release, we accepted a pull request to cache compiled templates between requests. You may see a 200-300% boost in rendering performance.

Contributor(s): Markus Harmsen (GitHub.

Aug 15

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…

leaderboard

leaderboard allows you to build leaderboards using Redis. The leaderboard (Ruby), leaderboard-python and leaderboard-coffeescript libraries all saw updates a few weeks ago. In leaderboard 3.7.0, we added TieRankingLeaderboard and CompetitionRankingLeaderboard classes to handle ties in leaderboards. Specifics on ranking between those 2 different leaderboards are described in the alternate leaderboard types documentation. This same functionality was ported to leaderboard-python 3.0.0 and leaderboard-coffeescript 1.8.0.

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

Jul 28

Hackathon 15

By Sam Toews

Thursday, July 24 - Friday, July 25 was Agora’s first ever Hydra themed Hackathon.

Kafka Scripts

Andrew implemented a simple utility allowing users to view filtered subsets of Hydra Studio API traffic (request response pairs). Filtering is done by request time window, environment, and API key as well as request processing time and response HTTP status code. This tool can be used to tail traffic as it occurs as well as view historical traffic via a unified interface. It’s a simple program that is around 100 lines of Python reading messages from a Kafka topic.

Oculus Unity Demo + Hydra

John worked on getting familiar with Agora’s Hydra Studio features as well as our Unity SDK. Looking through the Unity store there’s a lot of services similar to ours integrated into the Unity demo projects to help developers get an idea of how to use them. Following this pattern he took the 2D example project and started integrating Hydra features into it.

Hydra UI for Achievements

Nick worked on making a customizable yet easy to use achievement system for the Hydra SDK for Unity3d. It was made with Unity’s Editor Script, so users can adjust all kinds of settings (Display time, color, trophy/picture) without looking at any code. Proof of concept as to what tools for unity can be made once Hydra Studio comes out of beta.

Tournament Seeding Gem UI

Matt worked on a plain-ruby library for managing and tracking multi-round tournaments. It knows about two types of tournament structures right now (random pairing and swiss pairing), with the promise of more to come, via bracket-tree and a couple swiss variations. You can customize various things about the tournament and also track player metadata, so it should be pretty easy to serialize data to and from.

Next steps are a more formal data serialization layer and cleaning up some known edge cases (mostly around byes) in the current code, then wrapping bracket_tree to handle elimination style tourneys.

It’s not open source yet, but it will be once he has cleaned up the codebase.

Text Web Game (MUD)

David A. worked on a text-based, RPG style, game with Hydra integration. You can play it here.

It is written in Dart, and compiled to javascript.

It uses the following Hydra features:

  • Match Templates: Store metadata about how to generate maps
  • Matches: Store map data in the match
  • Profiles: Save basic stats
  • Achievements: Display achievements for the logged in user

Lua for OAuth

Aaron finished extracting last hack-a-thon hacks into a legit project, adding most of the features and documentation a user would need to add Google OAuth to their nginx hosts, available here.

Tie Handling in Leaderboard Libraries

David Cz. worked on tie handling in the Ruby, Python and JavaScript leaderboard libraries. Two types of tie handling are now supported, Tie Ranking and Competition Ranking. In Tie Ranking, you define a leaderboard where members with the same score are given the same rank. In Competition Ranking, you define a leaderboard where members with the same score will have the same rank, and then a gap is left in the ranking numbers. The documentation for each of the libraries goes into more detail on what the tie rankings look like.

Confirm with Reveal Bug

Jack fixed a bug with Agora’s open-source “confirm-with-reveal” JavaScript plugin that stopped it from working with Rails' unobtrusive JavaScript jQuery plugin.

See here for details/commit.

He also made some progress toward extending that plugin to allow users to provide an existing popup already on the page as the confirmation dialog, rather than using one generated by the plugin.

HTML/CSS

Brett used the day to learn the basics of HTML and CSS using codeacademy. He made a really simple HTML file and a simple CSS file to show off a little bit of what he learned.

Jun 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…

I was going to use the excuse that we’re still playing a bit of catch up since migrating our blog, but I’ve just been lazy :P

activity_feed

activity_feed is a Ruby library for creating activity feeds or timelines backed by Redis. In the 3.1.0 release, we added a trim_to_size(user_id, size, aggregate = ActivityFeed.aggregate) method to trim activity feed to a certain number of items.

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

chai

chai provides a very easy to use api for mocking/stubbing your python objects, patterned after the Mocha library for Ruby. As of 0.4.8, released this past week, we addressed PEP8 compliance as well as fixing an issue to not pollute the global module namespace.

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

Apr 3

Hackathon 14

By Sam Toews

Friday, March 28th, Agora completed our 14th Hackathon. As always, the team delivered great projects.

Open Source Updates/Plugin Work - Presentation

Jack updated Agora’s open-source confirm-with-reveal plugin with some new features, including additional customization options for the HTML UI, and JavaScript events hooks on confirmation and cancellation of user prompts.

OAuth Support and Misc. Repo Updates - Presentation

Aaron used Lua to integrate Google Apps OAuth into nginx so that Agora has centralized authentication for all of our tools.

Load Test Chart Enhancements - Presentation

David A. worked on a javascript wrapper around the Google Visualization API to better support overlaying multiple data sets, available here. It allows users to hide and show lines after the graph is rendered and to group lines by any number of axes.

Hydra Support Website - Presentation

Elliott completed the next evolution of the Hydra Support website. With the Hydra Studio platform becoming more popular and well known to game developers, the amount of Hydra Studio support tickets that come into Agora on a weekly basis have greatly increased. Where as prior to the March 28th Hackathon, our support website was heavily weighted towards Hydra Pro support (with a small amount of Hydra Studio support), Elliott’s Hackathon work moved to strike a more suitable balance between Hydra Pro & Hydra Studio support. Hydra Studio now has it’s own dedicated discussion forums (broken out by features), and our knowledge-base has been updated to include all of the most relevant Hydra Studio feature & documentation updates from the past four months. We still have the base level Hydra Pro support that clients have used up to this point, but overall Hydra Studio now has the proper real-estate it deserves on the support website.

Django Auth and PyCharm Integration - Presentation

Vitaly worked on a Django auth back for the hydra service, available here. It allows people to quickly build a site that ties user auth on the site to a hydra user account.

Leaderboard Updates: Ranking - Presentation

David C. worked on two alternate styles of ranking for Hydra’s leaderboard library.

Storm

Andrew spent his time becoming acquainted with Storm. He had hoped to do some real useful data processing, but instead spent the time familiarizing himself with the technologies involved.

Mar 25

GDC 2014 - Thanks from Agora Games!

By Sam Toews & Elliott Haase

Steve, Elliott, and Brad of Agora Games joined an estimated 24,000 attendees at this year’s Game Developers Conference. While in San Francisco, they had the opportunity to meet with a number of clients, partners, and industry professionals to talk about what is new and exciting at Agora.

We are happy to report that interest in the Hydra platform was once again very strong throughout our entire week at GDC. The many connections and conversations that our team participated in during this year’s GDC conference will be showcased in a number of exciting titles planned for release in 2014 and 2015.

We want to take this opportunity to thank all of the individuals who met with the Agora Games team at GDC 2014. Your support and feedback is greatly appreciated, and we look forward to another exciting year working with our development partners.

Mar 20

New Hydra Studio Features

By Sam Toews

It has been a few months since our last Hydra Studio Features post. This is in part because the Hydra Studio Team has been hard at work developing a lot of new features, all of which are available to our users now!

Below is an overview of the new features that have been released. Please take a moment to review, and then head to the Hydra Studio dashboard and give everything a test run. Make sure to share your thoughts on the Beta Support Forum as your feedback is extremely valuable.


Username/Password Auth

One of our major enhancements was the expansion of our Authentication System. Made available late fall, Hydra Studio now supports a variety of authentication schemes to fit your game’s needs.

  • UUID - Given a unique identifier, Hydra will map it to a game account
  • Facebook - Given a valid Facebook auth token, Hydra will map it to a game account
  • Anonymous - A one time, pass-through, scheme which will return a valid auth token for a new account every time it is used
  • Hydra - A username/password account per the environment of your API key
  • Windows Live - Given a valid Windows Live auth token, Hydra will map it to a game account
  • Google - Given a valid Google auth token, Hydra will map it to a game account
  • Steam - Given a valid, hex encoded, encrypted app ticket for a user of your Steam game, Hydra will map it to a game account
  • Custom - Tells Hydra to use an existing authentication system. Given a token that is accepted by your custom authentication url, Hydra will map it to a game account. If a game account does not exist for this token, Hydra will crete a new game account and associate it with the account in your system.

Additionally, we now provide a way for user to recover an account in case they cannot access it by any other authentication method. However, this requires an email being set on their account. If there is no email set, their account cannot be recovered.

Technical notes may be found in the Authentication Documentation page.


Realtime Networking

Early February, we deployed a number of important infrastructure improvements to Hydra Studio. These enhancements included an update to a new Realtime protocol. Our platform now provides the following:

  • Added support for UDP realtime connection - full reliable/unreliable support
  • Added support for multiple realtime connections for the same account
  • Realtime Connected and Disconnected events now pass the protocol of the underlying connection that was connected or disconnected

More detailed information may be found in the Realtime Networking Documentation page.


REST API

We recently added REST API documentation to our Hydra Studio Game Integration Docs. The Guide provides a general overview of the Hydra REST API, a Getting Started section for those beginning the process, and a REST Endpoint Reference.

For an example of how Hydra REST API may be used, visit our Demo site.


AgoraSaurus

Meet AgoraSaurus, the official mascot of Agora Games, now starring in his very own continuous run mobile game. Available for download on Google Play, AgoraSaurus is an in-house developed, sample application of a Hydra Studio integrated game.

In-game features include:

  • User account creation and login
  • Top 10 global leaderboard
  • Achievement listing and live pop-up notification

Coming soon, we will be adding player-vs-player challenges, an iOS app, and providing source code.


Everything Else

In addition to the top level features above, we released a number of smaller updates during the last few months.

  • Matchmaking service - Added ability to cancel pending matchmaking requests, cancel events
  • Achievements - Added methods to load progress for one achievement
  • Matches service - Added match expiration warning
  • Notifications - Broadcast messaging over push notifications
  • Better error reporting

Still To Come

Here is a list of the features that are currently under development, or will be in the near future, and that you will be able to get your hands on soon.

  • Cloud/Title Storage - Provides secured access to stored user content
  • Clans - Allows for multiple players to be voluntarily grouped together for social and competitive online experiences
  • Xbox One & PS4 Support - C++ SDK support for next-gen consoles
  • User-Generated Content - Provides secure, cross-device storage of player information, content, game saves and other data

Those who want to stay informed of the very latest developments are encouraged to follow our Hydra Studio Announcements Forum and the Agora Games Blog.

If you have questions, comments, or suggestions, please post them in our Beta Support Forum, and continue to put our platform to the test. Thanks a ton!

- The Hydra Team