Chicken Awards

Nome progetto: Chicken Awards
Anni: 2011-2016
Linguaggio: PHP + Java
Stato: Concluso

Chicken Awards è un progetto che ho portato avanti insieme ad alcuni amici dell'università, iniziato mentre stavamo ancora frequentando le lezioni. L'idea è venuta quasi per scherzo, fondendo insieme la meccanica degli "obiettivi" (o achievements) dei videogiochi con le azioni nei social network. In quel periodo eravamo tutti molto attivi su Twitter e ci siamo resi conto di come alcuni comportamenti tendessero a ripetersi tra utenti diversi. La maggior parte delle volte ce ne accorgevamo perché questi comportamenti erano fastidiosi, come il condividere tutti i brani che ascoltavano o tutti i video che guardavano, o ~taggare~ importunare molte persone con un solo messaggio.

Così ci siamo chiesti quanto sarebbe stato divertente avere un sistema che monitorasse questo tipo di comportamenti e che assegnasse dei premi satirici agli utenti che riuscivano a compiere il maggior numero di azioni fastidiose. Così nacque l'idea di Chicken Awards. In superficie Chicken Awards era composto da un sito web dove gli utenti potevano registrarsi e verificare il loro progresso e da un account Twitter (@Chicken_Awards) che dovevano seguire per iscriversi al servizio.

Un secondo account Twitter @Chicken_Judge segnalava agli utenti iscritti quali achievement avessero ottenuto, mentre un sistema backend basato su Java seguiva il flusso delle interazioni degli utenti iscritti, annotandone le azioni in un database per analisi successive.

Essendo un gruppo di amici, nessuno aveva un ruolo preciso e tutti potevano occuparsi di tutto, di conseguenza io mi sono concentrato sugli aspetti meno apparenti del progetto, lavorando al backend Java e PHP.

Il backend Java, scritto interamente da noi con l'unica eccezione delle librerie Twitter4J per la connessione alle API di Twitter. API che comunque avevano delle limitazioni abbastanza stringenti che temevamo di non riuscire a rispettare: ad esempio, il limite di tweet inviabili da ciascun utente tramite le API era noto solo per grandi lassi di tempo (tweet al giorno), mentre sapevamo che esistevano anche dei limiti più granulari (tweet all'ora), per cui ci siamo messi pazientemente a infastidire le API di Twitter con diverse configurazioni, fino a determinare quali fossero i limiti effettivi ai quali eravamo soggetti, e gestendo il quantitativo di messaggi disponibili per ciascuna fascia di tempo a disposizione dei nostri account.

Una cosa di cui volevamo essere sicuri, era di non mantenere più dati degli utenti di quanti non fosse strettamente necessario: in fin dei conti ci interessava mantenere dei contatori, quindi non dovremmo aver avuto bisogno di grandi moli di informazioni, inoltre non volevamo costruire una copia dei dati di Twitter, per cui il contenuto di ciascun messaggio non doveva essere mantenuto. I tweet in ingresso venivano sottoposti ad una serie di controlli e marcati sulla base dei risultati di questi controlli, scartando poi il contenuto del messaggio.

Le etichette associate ai contenuti erano sufficienti a mantenere abbastanza informazioni per poter assegnare i premi, cosa che comunque avveniva in un secondo momento, ad opera di un processo separato che utilizzava i dati già processati e salvati nel database.

Senza saperlo, sviluppando il backend in Java abbiamo inventato diversi design pattern dei quali non conoscevamo l'esistenza (come ad esempio thread pool e dependency inversion container), i cui nomi avremmo appreso solo qualche anno dopo, con il proseguire dell'università o addirittura del mondo del lavoro.

Abbiamo lanciato Chicken Awards dopo un paio di anni di lavoro, come servizio gratuito che accettava donazioni. Nonostante non avessimo mai realizzato niente del genere, il sistema è rimasto sorprendetemente stabile per circa altri tre anni, nei quali non abbiamo dovuto intervenire praticamente mai per la manutenzione del sistema. Tuttavia, finita l'università, le nostre vite hanno tutte preso delle direzioni diverse, era difficile continuare a dedicare abbastanza tempo per proseguire il lavoro sul progetto.

Abbiamo interrotto il servizio nel 2016, appena uno o due anni prima che Twitter deprecasse le Streaming API che utilizzavamo per far funzionare tutto il sistema.

Scopri Chicken Awards Il muro degli achievement Statistiche Domande poste sovente Achievement ottenuto Achievement personali