Smarter than a toaster.
Project Name: | Chicken Awards |
Years: | 2011-2016 |
Language: | PHP + Java |
Status: | Ended |
I worked on Chicken Awards together with a bunch of friends at the university. The idea came about as a joke, merging together the "achievement" mechanic of videogames with the (mis)use of social networks. At the time we were all very active on Twitter, and we started noticing a few common behaviours of some users. Most of the time we noticed because they were annoying, such as tweeting each and every song they were listening to, or every video they were watching or tagging multiple people in the same tweet to get some attention.
So we asked ourselves how fun it would be if there was something to monitor these behaviours and awarded satirical prizes to users that were able to complete a high number of annoying actions. So Chicken Awards was born. On the surface, there was a website were users could register and check their progress, and a Twitter account ((@Chicken_Awards) that they had to follow to finish their registration process.
A second Twitter account (@Chicken_Judge) would tweet at the users to award them their achievements, while a Java backend followed their interactions and stored metadata in a database for further analysis.
Since we were a group of friends, nobody really had a defined role and anyone could do anything, so I worked on the less visible aspects of the project: the Java and PHP backends.
The Java backend was entirely written by us, with the sole exception of the Twitter4j library to connect to Twitter's API. These APIs had a few limitations that we feared we would hit, like for example the rate limits on tweet per day ( which in reality was just one of the advertised limits, but there were more granular rate limits that were not publicly stated). So we started poking at the Twitter API to discover what the more granular limit were (such as tweet per hour) and developed an internal "credit" system, that would prevent the bots from tripping Twitter's limit and being forced into a temporary silent state.
One of our goals was also not to store any more user data that we actually needed (and GDPR wasn't even a thing yet!): in the end we were storing counters, so we didn't really need much data for those, and we didn't want to have to deal with cloning a subset of Twitter data, even if it was just for a few hundred accounts. For this reason, we never stored the content of any tweet: we parsed them as they came, then we tagged them based on the results of the parsing, then we could store the tweet id and its tags and metadata, but not its contents.
Our tags encoded enough information to support all the achievements we had (around 100) and also gave us enough room to develop more. A separate process would process the tweets and their tags to crunch the numbers needed for our stats and to award the related achievements.
Without even knowing it, while we were developing the Java backend, we invented a few design patterns, that we weren't yet aware of (like thread pool and dependency inversion container), whose names we would learn only a few years later.
We launched Chicken Awards after a couple of years of development, as a free service that accepted donations. Although we never worked on anything like it, the system was surprisingly stable for the next three years, and we didn't really have to intervene too often to fix issues. After the university, our lives took different paths, and it was increasingly difficult to find enough time for this project.
Chicken Awards was discontinued in 2016, just a couple of years before Twitter discontinued the Streaming API that we were using to make everything work.
Copyright © 2020 - 2024 Riccardo Bastianini — All rights reserved.