<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>OMGPOP Development</title><generator>Tumblr (3.0; @omgdev)</generator><link>http://dev.omgpop.com/</link><item><title>Now open sourced: Avery.</title><description>&lt;p&gt;Avery is a real-time time-based metric storage, retrieval, and graphing service.  It is entirely javascript.&lt;/p&gt;
&lt;p&gt;At OMGPOP we use Avery to see real-time, and historical, metrics across all of our games, applications and systems to help predict trending for resource(servers/people) allocation. When needed, Avery also allows us to get a high-resolution view of certain metrics from only a few parameters.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;&lt;img align="middle" height="306" src="http://staticcdn.iminlikewithyou.com/backend/avery/avery-animated.gif" width="509"/&gt;&lt;/p&gt;
&lt;p&gt;You can find out more about Avery over on GitHub: &lt;a href="https://github.com/OMGPOP/avery"&gt;https://github.com/OMGPOP/avery&lt;/a&gt;&lt;/p&gt;</description><link>http://dev.omgpop.com/post/14314155197</link><guid>http://dev.omgpop.com/post/14314155197</guid><pubDate>Fri, 16 Dec 2011 12:40:00 -0500</pubDate></item><item><title>Game Hack Day - NYC</title><description>&lt;p&gt;We are sponsoring Game Hack Day this weekend, and will be doing a short presentation about some secret projects we&amp;#8217;ve been working on.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://gamehackday.org/"&gt;&lt;img src="http://gamehackday.org/images/logobg.png" width="258" height="105"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s not too late to register &amp;#8212; &lt;a href="http://gamehackday.eventbrite.com/"&gt;&lt;a href="http://gamehackday.eventbrite.com/"&gt;http://gamehackday.eventbrite.com/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://dev.omgpop.com/post/6885643078</link><guid>http://dev.omgpop.com/post/6885643078</guid><pubDate>Fri, 24 Jun 2011 21:16:00 -0400</pubDate></item><item><title>(score a free ticket and) Join OMGPOP at GoRuCo 2011!</title><description>&lt;p class="p1"&gt;The Gotham Ruby Conference (GoRuCo) is a one-day event that will take place in New York City on June 4, 2011. It is a technical conference aimed at highly motivated programmers interested in all things Ruby.&lt;/p&gt;
&lt;p class="p1"&gt;You&amp;#8217;ll spend the day among Rubyists, Rails developers, and language enthusiasts in New York City, home of Silicon Alley. The agenda will feature 7 speakers and an open session of lightning talks by attendees.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;10:00 a.m. - Few Constraints More Concurrency, Ryan Smith&lt;/li&gt;
&lt;li&gt;10:55 a.m. - Less - The Path to Better Design, Sandi Metz&lt;/li&gt;
&lt;li&gt;11:50 a.m. - Blow Up Your Views, Jeff Casimir&lt;/li&gt;
&lt;li&gt;1:45 p.m. - HysteriaEngine: Ruby Does Violence in the Name of Science, Casen Rosenthal&lt;/li&gt;
&lt;li&gt;2:40 p.m. - CoffeeScript for the well-rounded rubyist, Jeremy Ashkenaz&lt;/li&gt;
&lt;li&gt;3:45 p.m. - Using your Database, John Crepezzi&lt;/li&gt;
&lt;li&gt;4:40 p.m. - Build it and they will come (Rubinius Edition), Evan Phoenix&lt;/li&gt;
&lt;/ul&gt;&lt;p class="p1"&gt;OMGPOP is giving away 2 tickets (valued at $199 each, no strings attached) to GoRuCo. This event is SOLD OUT, so this might be the only way left to attend this event. Why is OMGPOP giving two tickets away? As you may have read through the rest of our engineering blog, our entire API is written in Ruby. We love what Ruby does for us, and want to return the favor to the community.&lt;/p&gt;
&lt;p class="p1"&gt;If you are interested in scoring a free ticket, send an e-mail to chris@omgpop.com with the subject &amp;#8220;GoRuCo Ticket&amp;#8221; with a brief synopsis of yourself (or your website), and the winners will be announced no later than Thursday evening.&lt;br/&gt;Good luck!&lt;/p&gt;
&lt;p class="p1"&gt;&lt;strong&gt;Update:&lt;/strong&gt; We had a whole bunch of entries, but congratulations to our two winners &amp;#8212;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Cedric Howe, &lt;a href="http://www.kickstarter.com/"&gt;Kickstarter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Serena Wales, &lt;a href="http://www.purpose.com/"&gt;Purpose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Thanks to everyone for expressing interest, next year we&amp;#8217;ll have to give out more!&lt;/p&gt;</description><link>http://dev.omgpop.com/post/6038352871</link><guid>http://dev.omgpop.com/post/6038352871</guid><pubDate>Tue, 31 May 2011 11:06:00 -0400</pubDate></item><item><title>short blog post: use the mysql2 gem. (updated)</title><description>&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;# gem install mysql2&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.omgpop.com/backend/blog/mysql2gem.png" width="818" height="251"/&gt;&lt;/p&gt;
&lt;p&gt;a day later, we can see a more obvious impact:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.omgpop.com/backend/blog/mysql2gem-daylaterdatabase.png"/&gt;&lt;/p&gt;</description><link>http://dev.omgpop.com/post/5673109687</link><guid>http://dev.omgpop.com/post/5673109687</guid><pubDate>Fri, 20 May 2011 15:35:00 -0400</pubDate></item><item><title>Follow Up: New Relic, Redis and Resque (and now also redis-repeater)</title><description>&lt;p&gt;It&amp;#8217;s been exactly a month since we posted about solving production-woes with iowait blocked Redis.  If you haven&amp;#8217;t yet read that &amp;#8212; please do: &lt;a href="http://dev.omgpop.com/post/3217710227/praise-for-new-relic-redis-and-resque"&gt;Praise for New Relic, Redis and Resque&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In that blog post I talked about what our next steps would be:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span&gt;Going forward, we are planning to implement a non-blocking local buffer (another level of queueing) before being put into resque to reduce the latency of the API to the clients, which in turn gives an overall better user experience. &lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;Well.. fate stepped in, and while at the &lt;a href="http://www.nycruby.org/events/16525702/"&gt;NYC Ruby meetup on Tuesday night&lt;/a&gt; which had a focus of Resque, John Crepezzi from &lt;a href="http://www.patch.com"&gt;Patch&lt;/a&gt; (your source for local knowledge you can&amp;#8217;t live without) did a lightning talk about a utility he put together called redis-repeater.  I won&amp;#8217;t give too many details on how they use it at Patch, but for us at OMGPOP it made perfect sense.  In the possible scenario that our redis server becomes iowait bound, which we have unfortunately again seen a few times since our change to no longer persisting to disk, our main API will become dependent on waiting for this Resque enqueue method to return.  To quell that iowait, and rather than implementing a &amp;#8220;non-blocking local buffer&amp;#8221;, we theorized that using redis-repeater we could put in another Redis &amp;#8216;hop&amp;#8217; before the main Redis machine. This piqued my interest, and so I went back to the office to put theory into proof of concept.&lt;/p&gt;
&lt;p&gt;I ran into a few issues with redis-repeater so I made some modifications which led me to doing my first ever (personal) GitHub &lt;a href="https://github.com/seejohnrun/redis-repeater/pull/1"&gt;pull request&lt;/a&gt; for, but not longer after that we had a working redis-repeated resque hop.&lt;/p&gt;
&lt;p&gt;Unfortunately, Wednesday was spent working through JS/CSS bugs in IE7 for a new awesome game we are making, but we managed to work in the New Relic &lt;a href="https://github.com/newrelic/rpm_contrib/blob/master/lib/rpm_contrib/instrumentation/redis.rb"&gt;redis intrumentation&lt;/a&gt; from their &lt;a href="https://github.com/newrelic/rpm_contrib"&gt;rpm_contrib gem&lt;/a&gt;.  The benefit, beyond seeing the duration and type of all Redis calls, is that all Redis calls are now registered as &amp;#8220;Database&amp;#8221; rather than &amp;#8220;Ruby&amp;#8221;.  The large spike of &amp;#8220;Ruby&amp;#8221; in the chart from the previous blog post would have been &amp;#8220;Database&amp;#8221; which now would give us quicker insight into what the problem could be.&lt;/p&gt;
&lt;p&gt;In the breakdown of a web transaction, we now see this:&lt;/p&gt;
&lt;p&gt;&lt;img height="454" width="683" alt="newrelic transaction breakdown" src="http://static.iminlikewithyou.com/backend/blog/followup/newrelic_breakdown.png"/&gt;&lt;/p&gt;
&lt;p&gt;Now today is Thursday, and we have pushed the changes to use redis-repeater in production:&lt;/p&gt;
&lt;p&gt;&lt;img height="313" width="691" alt="newrelic api breakdown" src="http://static.iminlikewithyou.com/backend/blog/followup/newrelic_mainchart.png"/&gt;&lt;/p&gt;
&lt;p&gt;Of note is to mention that the goal of this change is not to greatly decrease the latency between the OMGPOP API Servers and the Redis server (it&amp;#8217;s already less than 1ms), but mainly to keep it at that low latency.  In the event that the main Redis server now gets backed up with jobs our API will not be harmed.&lt;/p&gt;
&lt;p&gt;Before:&lt;/p&gt;
&lt;p&gt;&lt;img height="296" width="367" alt="redis without redis-repeater" src="http://static.iminlikewithyou.com/backend/blog/followup/redis_without_repeater.png"/&gt;&lt;/p&gt;
&lt;p&gt;After (and now in production):&lt;/p&gt;
&lt;p&gt;&lt;img height="404" width="360" alt="redis with redis-repeater" src="http://static.iminlikewithyou.com/backend/blog/followup/redis_with_repeater.png"/&gt;&lt;/p&gt;

&lt;p&gt;So far, we&amp;#8217;ve already `repeated` more than 3 million items (and Resque has now processed 9.78 billion items).&lt;/p&gt;
&lt;p&gt;Next step (as made obvious by the above graphs): Distributed redis using &lt;a href="https://github.com/ezmobius/redis-rb/blob/master/examples/dist_redis.rb"&gt;Redis::Distributed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;
&lt;p&gt;Some links:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/seejohnrun/redis-repeater"&gt;redis-repeater&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.patch.com/"&gt;Patch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.newrelic.com/"&gt;New Relic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nycruby.org/"&gt;NYCrb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.omgpop.com/post/3626710354/come-join-omgpop-at-rubynation-on-april-1-2-2011-in"&gt;We&amp;#8217;ll be at Ruby Nation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://omgpop.com/jobs"&gt;OMGPOP is hiring!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://dev.omgpop.com/post/3770100957</link><guid>http://dev.omgpop.com/post/3770100957</guid><pubDate>Thu, 10 Mar 2011 16:47:40 -0500</pubDate></item><item><title>Come join OMGPOP at RubyNation on April 1-2, 2011 in Reston, VA </title><description>&lt;p&gt;&lt;p class="p1"&gt;&lt;a href="http://www.rubynation.org/"&gt;Ruby Nation&lt;/a&gt; is an annual two-day, dual-track technical conference presented by the Washington, DC area Ruby Community. The next RubyNation conference will be held April 1-2, 2011, at the Sheraton Hotel in Reston, VA.&lt;/p&gt;
&lt;p class="p1"&gt;We&amp;#8217;re proud to announce that OMGPOP is a Platinum level sponsor of the event.&lt;/p&gt;
&lt;p class="p1"&gt;&lt;a title="OMGPOP JOBS" href="http://omgpop.com/jobs"&gt;&lt;img src="http://staticcdn.omgpop.com/backend/blog/halfpagead.jpg" alt="OMGPOP" width="735" height="461"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="p1"&gt;If you plan on attending don&amp;#8217;t be afraid to get in touch with us at the event, we&amp;#8217;ll make sure to bring some stickers!  Tickets are selling out fast.. so get them while they are still available.&lt;/p&gt;
&lt;p class="p1"&gt;Links:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.rubynation.org/"&gt;RubyNation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://omgpop.com/jobs"&gt;OMGPOP Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Play our latest game on Facebook: &lt;a href="http://fb.com/drawmything"&gt;Draw My Thing!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;!-- p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica} --&gt;&lt;/p&gt;</description><link>http://dev.omgpop.com/post/3626710354</link><guid>http://dev.omgpop.com/post/3626710354</guid><pubDate>Thu, 03 Mar 2011 17:16:00 -0500</pubDate></item><item><title>Migration of some core services to SoftLayer's CloudLayer.</title><description>&lt;p&gt;In August 2010 we moved our physical infrastructure from Rackspace to ThePlanet,  and this past November SoftLayer completed their merger with ThePlanet; for multiple reasons, this was great news to us.  You can read more about the merger over on &lt;a href="http://techcrunch.com/2010/11/08/the-planet-softlayer/"&gt;Tech Crunch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As the article states, the new SoftLayer now provided us additional benefits:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;An expanded product line, with new products and services not available to you before.&lt;/li&gt;
&lt;li&gt;Industry-leading automation, Customer Portal, and Open API, for direct access to more than 150 backend systems and activities.&lt;/li&gt;
&lt;li&gt;Increased geographic diversity and the ability to choose where your servers reside.&lt;/li&gt;
&lt;li&gt;High-speed network and multiple PoPs, providing more than 1,500G of connectivity and direct connections for lower latency.&lt;/li&gt;
&lt;li&gt;Exclusive network architecture that weaves together distinct Public, Private and Data Center-to-Data Center networks.&lt;/li&gt;
&lt;li&gt;Improved Service Level Agreement with 100% uptime and 2-hour or less hardware replacement (failure or upgrade) guaranteed.&lt;/li&gt;
&lt;li&gt;Greater value for your business, including more performance per dollar, a larger international presence and expanded partnerships with industry leaders.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;One of the changes I noticed immediately was SoftLayer&amp;#8217;s Customer Portal.  It&amp;#8217;s very intuitive and everything you need to do is within a few clicks &amp;#8212; sometimes I get nervous I might impulse buy that server I always wanted, it&amp;#8217;s too easy.  The &lt;a href="https://www.softlayer.com/dedicated/"&gt;Order Server&lt;/a&gt; portion of the Portal reminds me of when I was younger and would price out the must ridiculous computers on Dell&amp;#8217;s product configuration website of yesteryear, only this time when I click order it gets turned up in only a few hours (and it&amp;#8217;s actually a quality product &amp;#8212; sorry Dell!). We had previously built our own server management portal off of ThePlanet&amp;#8217;s beta RESTful API, but for now SoftLayer&amp;#8217;s Customer Portal is good enough that we don&amp;#8217;t need to migrate that over to using their new API.&lt;/p&gt;
&lt;p&gt;So what&amp;#8217;s the next thing I did?  Turned up a whole army of CloudLayer instances!  CloudLayer is SoftLayer&amp;#8217;s implementation of on-demand and scalable computing.  So far we&amp;#8217;re using CloudLayer for production level services such as an &lt;a href="http://www.ejabberd.im/"&gt;XMPP Cluster&lt;/a&gt; and &lt;a href="http://www.cloudera.com/"&gt;Flume/Hadoop/HDFS Cluster&lt;/a&gt; and many development projects such as a &lt;a href="http://nodejs.org/"&gt;node.js&lt;/a&gt; farm.  Previously some of these services existed in &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt;, but the ability to choose the specific amount of CPU Cores and RAM resulted in great cost savings compared to using the limited amount of instance types that Amazon provides. Additionally, latency between our physical infrastructure of servers at our Dallas co-location facility (via ThePlanet) to SoftLayer&amp;#8217;s CloudLayer facility (our choice was naturally their Dallas facility) reduced to 6ms from 40ms.&lt;/p&gt;
&lt;p&gt;We plan on migrating many of our other core services to CloudLayer as soon as possible, as well as much of our existing physical infrastructure over to SoftLayer&amp;#8217;s new &amp;#8220;Dallas 5&amp;#8221; facility. These days, the ability to exist in such a hybrid environment is key to the scalability of most web applications, and we&amp;#8217;re happy to start playing with the new possibilities that SoftLayer brought to our doorstep.&lt;/p&gt;
&lt;p&gt;As always, if you&amp;#8217;re interested in joining OMGPOP we are hiring &amp;#8212; &lt;a href="http://omgpop.com/jobs"&gt;JOBS @ OMGPOP&lt;/a&gt;.&lt;/p&gt;</description><link>http://dev.omgpop.com/post/3370264900</link><guid>http://dev.omgpop.com/post/3370264900</guid><pubDate>Fri, 18 Feb 2011 18:28:00 -0500</pubDate></item><item><title>Praise for New Relic, Redis and Resque.</title><description>&lt;p&gt;New Relic strikes again!  Kudos to &lt;a href="http://www.newrelic.com/"&gt;New Relic&amp;#8217;s RPM&lt;/a&gt; for helping us isolate an issue in production.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.omgpop.com/backend/blog/newrelic-deployment.png" alt="New Relic w/ Deployment" width="856" height="314"/&gt;&lt;/p&gt;
&lt;p&gt;We noticed an increase in latency (12 -&amp;gt; ~25ms) over the past week and did a deployment this morning (marked by the vertical line) to see if it would fix the issue.&lt;/p&gt;
&lt;p&gt;Unfortunately it didn&amp;#8217;t fix the issue. We did some additional troubleshooting and tracked the slowness down to only happening on calls that were using &lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; for &lt;a href="https://github.com/defunkt/resque"&gt;Resque&lt;/a&gt; jobs.  Turns out, redis was recently reconfigured to persist to disk every 10 minutes (configuration: save 600&amp;#160;100000). This is completely the wrong configuration to have when using resque at the level we use it. Our resque environment handles over &lt;strong&gt;50 million&lt;/strong&gt; queue jobs a day. In the 10 minutes it will take to write this blog post it will have completed nearly half a million jobs.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s quite a large amount of throughput, and it makes no sense to be writing all these changes to disk. This led me to make a change in redis&amp;#8217; configuration which caused additional high load on the systems. This is reflected by the large spike after the deployment, which confirmed my belief that redis was experiencing increased latency of enqueuing items via resque.  The fix?  Good question.  There are multiple ways to fix this scenario &amp;#8212; turn off persisting to disk entirely, increase the save configuration flag to a higher interval, decrease the IO latency when writing to disk (faster disks), and many others.&lt;/p&gt;
&lt;p&gt;For now, I changed persisting to disk to once an hour, and as you can see the change was immediately reflected.  Going forward, we are planning to implement a non-blocking local buffer (another level of queueing) before being put into resque to reduce the latency of the API to the clients, which in turn gives an overall better user experience. &lt;/p&gt;
&lt;p&gt;Onward we scale!&lt;/p&gt;
&lt;p&gt;If you haven&amp;#8217;t yet played around with &lt;a href="http://www.newrelic.com/"&gt;New Relic&lt;/a&gt; I believe they have a free version which could be of great use to you &amp;#8212; we at OMGPOP can&amp;#8217;t recommend it enough.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.newrelic.com/"&gt;New Relic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/defunkt/resque"&gt;Resque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://omgpop.com/jobs"&gt;We&amp;#8217;re Hiring!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://dev.omgpop.com/post/3217710227</link><guid>http://dev.omgpop.com/post/3217710227</guid><pubDate>Thu, 10 Feb 2011 11:54:00 -0500</pubDate><category>troubleshooting</category><category>api</category><category>redis</category><category>resque</category><category>newrelic</category></item><item><title>facebook's Hacker Cup: the fourth question</title><description>&lt;p&gt;The &lt;a target="_blank" href="http://www.facebook.com/hackercup"&gt;facebook Hacker Cup&lt;/a&gt; is an annual facebook programming competition where hackers compete against each other for fame, fortune, glory and a shot at the coveted Hacker Cup.  A few of the software engineers here at &lt;strong&gt;&lt;a href="http://omgpop.com"&gt;OMGPOP&lt;/a&gt;&lt;/strong&gt; decided to participate in this year&amp;#8217;s Hacker Cup.  The qualification round had three questions, each with varying difficulty and methodology.  Each of us from &lt;strong&gt;OMGPOP&lt;/strong&gt; that participated met the requirements to continue on past the qualification round, and after seeing the scoreboard &lt;a href="http://www.facebook.com/hackercup/scoreboard.php/?round=4"&gt;[link]&lt;/a&gt; our eyes lit up as if we were presented with a fourth question.&lt;/p&gt;
&lt;p&gt;&lt;img height="367" width="500" src="http://staticcdn.iminlikewithyou.com/fb/hcup/scoreboard.png"/&gt;&lt;/p&gt;
&lt;p&gt;Out of &lt;strong&gt;98,348&lt;/strong&gt; people who RSVP&amp;#8217;d for the Qualification Round &lt;a href="http://www.facebook.com/event.php?eid=148059031890072"&gt;[link]&lt;/a&gt; only &lt;strong&gt;5,846&lt;/strong&gt; qualified to continue.  That&amp;#8217;s a lot less than any of us expected.  What stood out most is only &lt;strong&gt;527&lt;/strong&gt; correctly answered each of the questions.  That&amp;#8217;s only &lt;strong&gt;0.54%&lt;/strong&gt; of the initial group!  We then wondered: What noteworthy analytical data can be inferred from the scoreboard of the qualification round?  This would be our fourth question.&lt;/p&gt;
&lt;p&gt;We started by extracting as much authoritative data as possible from the scoreboard.  In the true fashion of facebook (or at least the film &lt;strong&gt;&lt;a href="http://www.thesocialnetwork-movie.com/"&gt;the social network&lt;/a&gt;&lt;/strong&gt;), we simply curl&amp;#8217;d each scoreboard page and parsed out the following tid bits of information:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;rank&lt;/li&gt;
&lt;li&gt;image url&lt;/li&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;penalty&lt;/li&gt;
&lt;li&gt;p1 (problem 1: correct/incorrect)&lt;/li&gt;
&lt;li&gt;p2&lt;/li&gt;
&lt;li&gt;p3&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;p1/p2/p3 refers to questions 1/2/3.  correct means they had a check in that column, and incorrect means they had a dash (note: incorrect may mean they did not submit an answer).&lt;/p&gt;
&lt;p&gt;image url refers to the profile picture shown between the rank and name. The example for me (cwh) would be: &amp;#8220;http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs714.ash1/161268_8802104_6084533_q.jpg&amp;#8221;&lt;/p&gt;
&lt;p&gt;which is: &lt;img height="50" width="50" src="http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs714.ash1/161268_8802104_6084533_q.jp" align="middle"/&gt; (flower in my ear was from peer pressure)&lt;/p&gt;
&lt;p&gt;What&amp;#8217;s interesting is that you can determine my facebook user id from that image url, my facebook user id is 8802104 (see it in the url above?).  This is where this question became fun.  Rather than just stop there, we used facebook&amp;#8217;s graph api to gain a few more pieces of data (this is public information) based on each user&amp;#8217;s facebook id:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;gender&lt;/li&gt;
&lt;li&gt;locale (country)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We put all the data together, and came up with some interesting analytical charts.&lt;/p&gt;
&lt;p&gt;Hacker Cup Qualifiers Avg Rank by Country &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_1.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_1.png" width="500" height="202"/&gt;&lt;/p&gt;
&lt;p&gt;Here is the averaging ranking of countries for the hacker cup. In red shows the average rank, and in white is the number of participants in that category. Some questions that come to mind… has china surpassed the US? Has communism beat democracy? Of note is that Estonia now has a stable internet connection, and even the Vatican brought its blessed coders to the challenge.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Hacker Cup Qualifiers Gender by Correct Answers &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_2.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_2.png" width="500" height="318"/&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a breakdown of how each gender did on each question. P1 refers to the first problem, P2 to the second problem, etc. We looked into the lone female who got just problem 2 correct, and posted her picture on here for novelty and viewing pleasure (however, there are rumors that maybe a friend submitted through this account).&lt;/p&gt;
&lt;p&gt;Hacker Cup Qualifiers Gender Breakdown &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_3.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_3.png" width="500" height="492"/&gt;&lt;/p&gt;
&lt;p&gt;Most people who qualified were guys. Nuff said. The first female appears around rank 70ish according to the data.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Hacker Cup Qualifiers average facebook id &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_4.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_4.png" width="500" height="244"/&gt;&lt;/p&gt;
&lt;p&gt;No matter what anyone tells you, how big your facebook id is matters. This graph proves it, definitively (and arbitrarily).&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;facebook id vs. hackercup qualifying rank &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_5.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_5.png" width="500" height="363"/&gt;&lt;/p&gt;
&lt;p&gt;The above chart and next are just looking at the distribution of the users facebook ids and how well they did. While this may not be interesting from a hacker cup perspective, you can notice the apparent &amp;#8216;gaps&amp;#8217; between users facebook ids. Probably, facebook decided at some point (maybe coinciding with the move to use big-ints as ids instead of integers) that &amp;#8216;all new users ids should start at 1,000,000,000&amp;#8217;. Then, looking at the next picture (and after significant Facebook growth) they did this again at around 100,000,000,000,000.&lt;/p&gt;
&lt;p&gt;for people with large facebook ids &lt;a target="_blank" href="http://static.iminlikewithyou.com/fb/hcup/chart_6.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_6.png" width="500" height="363"/&gt;&lt;/p&gt;
&lt;p&gt;Hacker Cup Qualifiers Avg Rank by Gender &lt;a target="_blank" href="http://static.iminlikewithyou.com/fb/hcup/chart_7.png"&gt;[link]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="318" width="500" src="http://staticcdn.iminlikewithyou.com/fb/hcup/chart_7.png"/&gt;&lt;/p&gt;
&lt;p&gt;In this graph, we have an arbitrary trend line on a bar graph that hints somehow that if your gender cannot be gleaned from the graph api OR you didn&amp;#8217;t have a public photo, that your average rank is lower than that if you are a male or a female. Another way of saying this is that if your gender is somehow ambiguous, that you have super facebook hacking powers &amp;#8212; data doesn&amp;#8217;t lie.&lt;/p&gt;
&lt;p&gt;If you have any other ideas for analytical charts, &lt;a target="_blank" href="http://staticcdn.iminlikewithyou.com/fb/hcup/omgpop-fb_hacker_cup.xlsx"&gt;here is the raw data&lt;/a&gt; (in excel format). We&amp;#8217;d be happy to post any of your findings, and don&amp;#8217;t forget.. &lt;a target="_blank" href="http://omgpop.producteev.com"&gt;OMGPOP is hiring!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;kudos to &lt;a target="_blank" href="http://www.omgpop.com/#/profile/cwh"&gt;cwh&lt;/a&gt;, &lt;a target="_blank" href="http://www.omgpop.com/#/profile/nartzpod"&gt;nartzpod&lt;/a&gt; and &lt;a target="_blank" href="http://www.omgpop.com/#/profile/andweez"&gt;andweez&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a target="_blank" href="http://omgpop.com"&gt;OMGPOP&lt;/a&gt; is the best place to play fun multiplayer games online, for free. We have a diverse portfolio of games, both on our own platform and on Facebook, and develop them all in-house. &lt;/span&gt;&lt;/p&gt;</description><link>http://dev.omgpop.com/post/2719716403</link><guid>http://dev.omgpop.com/post/2719716403</guid><pubDate>Wed, 12 Jan 2011 18:13:00 -0500</pubDate><category>facebook</category><category>omgpop</category><category>hacking</category><category>programming</category></item></channel></rss>

