Agora Games. Lead Engineer. Ruby. Python. Java. Rails. Gamer. Foodie. Author. Snowboarder. Beekeeper. You can find me on Twitter @CzarneckiD, GitHub (personal): and GitHub (work):
Posts by David Czarnecki
  1. Put On Your Game Face (revisited) ( Counting comments... )
  2. The Costco-ification of Leaderboards ( Counting comments... )
  3. Put On Your Game Face ( Counting comments... )
  4. What Makes You "Tick" #3? ( Counting comments... )
  5. The Waiting Game ( Counting comments... )
  6. Leaderboard Benchmarking ( Counting comments... )
  7. Leaderboard Hack-A-Thon Post-mortem ( Counting comments... )
  8. Hack-A-Thon ( Counting comments... )
  9. What Makes You "Tick" #2? ( Counting comments... )
  10. Re-Education (Through Leaderboards) ( Counting comments... )
  11. I'll Show You Mine If You Show Me Yours ;) ( Counting comments... )
  12. Continuous Notification ( Counting comments... )
  13. What Makes You "Tick"? ( Counting comments... )
  14. To Catch A Completionist ( Counting comments... )
  15. I Am Data (And So Can You!) ( Counting comments... )
  16. What are you playing tonight? ( Counting comments... )
  17. Meta Leaderboards ( Counting comments... )
  18. How I Got Into The Video Game Industry ( Counting comments... )
  19. Leaderboards: A How-To Guide ( Counting comments... )
Technology/ Code /


In the last 2 weeks I've ported my leaderboard library, originally written in Ruby, to PHP and Java. It has been an extremely fulfilling endeavor for a number of reasons.


Let's face it, we've all been on epic e-mail threads where someone poses a problem, e-mail armchair development ensues and people argue back and forth about what will and what not work, and at the end of the thread, the original author is left with more questions than answers, more what could be than what should be. That happened to me about two weeks ago. It all started with a Friday evening e-mail to engineering, "We have a vexing leaderboard issue I'm opening up for suggestions." It was for a property we didn't write, but one that was in dire need of help. The thread was 20 e-mails in before I responded at 9 AM the next day with (paraphrasing here): "I made this for you. Use it or don't. At the very least, it can be tested right now as a potential solution."

And so the php-leaderboard library was born. I had unleashed PHP unto this world. But, it was fully tested. And I also went through the steps to ensure that other developers could find it via the PearHub package system (php_leaderboard package).

If it had turned out, given the constraints, that php-leaderboard wasn't going to be a viable solution, it really wasn't going to phase me. I learned some PHP. I was like Jojo the idiot circus boy with a pretty new pet. Now the pet is my possible solution. "Oh, my pretty little pet, I love you. And then I stroke it, and I pet it, and I massage it. Hehe, I love it, I love my little naughty pet, you're naughty! And then I take my naughty pet and I go ..." Wait ... what? The point is I found some inspiration to try something new and to present a reasonably complete solution to the problem at hand.


You could say that after the PHP port, I developed shpillka in my ganektagazoink, but that's besides the point. No, that is the point. I had the bug. The bug to learn new languages and re-learn old languages. So, before coming to Ruby, I developed in Java for nearly 15 years, with a 3 year stint of C# in there as well. And so this past weekend I ported the leaderboard library to Java and the java-leaderboard library was born. I also took the steps there to figure out how to properly release that as a library that other Java developers could integrate using Maven. Thankfully, after 3 or 4 days of what seems like more process than progress to me, I was able to get the java-leaderboard library out to the world. Search for it and you'll find it.


The PHP port was also inspiration for two colleagues to release the python-leaderboard package.


It felt really good to work in a new language and to re-connect with an old language. And for whatever reason, I need that mental disruption to continue. And so it shall. My current in-progress ports of the leaderboard library are to NodeJS and Go. Porting the leaderboard library works for me because of a number of factors:

1. It is well-defined in terms of behavior/functionality.

2. It requires integration of a service and a service client library.

3. It requires some knowledge of control statements, types and higher-level data structures.

4. It has a well-defined set of tests.

I've had to become comfortable with being uncomfortable. New syntax, new packaging, new test framework, new release mechanism. Conformity be damned!


I would encourage anyone who feels they're set in their ways or in need of a change to undertake a similar endeavor. I can imagine this applies to any number of disciplines in the video game industry. Find a well-defined, testable problem that you've solved again and again and solve it differently.

It's that simple.

You can find more hilarity over on my Twitter account, @CzarneckiD.