Come trasformare Safari in una distopia orwelliana

Safari è un servizio bellissimo, non certo economico, ma O’Reilly comprensibilmente non può rendere troppo economica la possibilità di leggere centinaia di libri tecnici (e sappiamo bene quello che costano) comodamente online.

Detto questo posso vantarmi di aver l’anno scorso proposto e in fine ottenuto l’accesso a Safari illimitato per tutti i dipendenti della mia società.

Ho sempre voluto provarlo e, se posso permettermi la auto-pacca sulla spalla, è stato un colpo da maestro : ora posso leggere tutti i libri che voglio senza sborsare quantità smisurate di soldi ogni tre mesi (continuo a comprare il cartaceo ogni tanto, per quei libri che trovo capolavori e che mi piace rileggere).

Ovviamente c’è un però : gli accounts a nostra disposizione sono di tipo illimitato, parecchio costosi, e quindi non c’è un account per ogni dipendente.

Di fatto sono stati acquistati un certo numero di accounts (penso una ventina) che fungono da pool da cui, a ogni login da parte di un dipendente, ne viene estratto uno. Se troppa gente si connette a Safari contemporaneamente ovviamente si esauriscono i venti accounts e si rimane a bocca asciutta.

E’ indicativo il fatto che su migliaia di dipendenti io non abbia mai avuto problemi ad accedere… ma sorvoliamo.

Questo sistema a pool ha un chiaro difetto : i libri che uno ha consultato rimangono certamente nella lista dei preferiti dell’utente, ma sfortunatamente la prossima volta che mi connetterò ho solo una possibilità su venti di cascare di nuovo sullo stesso utente.

Ho anche il sospetto che l’assegnazione degli account non sia perfettamente randomica, in particolare direi che è maliziosamente randomica.

Io ad esempio tendo a finire frequentemente su un utente che ha i suoi preferiti per lo più ricolmi di tomi sui DB, in particolare MS SQL Server. Che ironia. Ci dev’essere stato un DBA che un giorno ci ha proprio dato dentro, oppure che è stato molto fortunato ed è ricarduto giorno dopo giorno sullo stesso utente.

Immagino il suo stupore quando la sua fortuna si è esaurita ed è cascato sull’utente che avevo pescato io il giorno prima : “Ma chi sono ‘sti pragmatic programmers?”, “TDD chi?!”

Ciò che mi ha spinto a raccontare la cosa è però il feeling surreale, molto 1984, che viene a crearsi con questo sistema del pool. Si perchè chiunque abbia creato quegli utenti ha in sè, nascosto da qualche parte, il germe del burocrate nazista.

Chiunque avrebbe colto l’occasione per dare dei nomi interessanti a quei venti account, creando una sorpresa ai fruitori che, giorno dopo giorno, avrebbero scoperto di essere l’utente “Holy Hand Grenade”, “Bond, James Bond”, “Unexpected Surgery”, “Catbert” e così via. Quantomeno, io, non me la sarei fatta sfuggire, sarò infantile.

La realtà dei fatti è invece questa.

“Buongiorno Safari! Vediamo… cosa potrei leggere di bello oggi?”

“Buongiorno UTENTE NUMERO 15, oggi potresti leggere un altro po’ di ‘SQL Server Forever’!”

Ma si può?

Non invidio chiunque sia stato. Non trovare un momento per inventarsi dei nomi che valesse la pena lanciare addosso a casaccio a centinaia di utilizzatori e scegliere invece di eseguire a mano una for k < 20 print ‘UTENTE k’ può solo significare un’appartenenza traversa alla stirpe di Goebbels, la completa alienazione dalla propria giornata lavorativa o un forte desiderio di farla finita e infilare la testa nel microonde. Un’opzione non esclude le altre.

L’unica speranza è che sia tutta una sottile citazione da “The Prisoner” mirata a satirizzare l’inquadramento del dipendente nella grande famiglia del villaggio corporativo, ma ho i miei dubbi.

Ultima versione di lazy-db

Avevo pensato di limarla un altro po’ prima di renderla pubblica, ma tant’è…

Ecco l’ultima versione di lazy-db, che è l’erede dei miei primi esperimenti di creazione dello schema di un db in tdd, come raccontato qui .

In questa versione :

  • ho aggiunto un po’ di compatibilità, per MySQL e per PostgresSQL
  • sono passato a hypersonic 2 come db in-memory
  • ho aggiunto la possibilità di definire delle chiavi primarie
  • una classe per facilitare l’interrogazione
  • il metodo “insert” dentro a Column per facilitare la popolazione del db in casi semplici

Restano poche linee di codice, e quindi fa davvero poco, però è comodo.

Trovate lo zip con il jar compilato e il pom di maven2 che descrive le dipendenze su questa pagina del jug torino.