Auto-learning playlist generator

Auto-rating algorithms for music players are quite primitive: if you listen to the song, the song gains a +1 rating, if you skip it, the rating stands still.

That’s a quite basic method to give meaning to your choice to skip that particular song.

But… Maybe the song wasn’t fitting the playlist mood or your mood in that moment.

What about those lovely 14-minutes-long songs? Skipping after a few seconds or after 10 minutes (maybe during that boring drums solo) should have different meanings.

What about these times when rand() doesn’t love you and you skip 20 songs in a row? The player should be clever enough to present you with one of your favourites after a few clicks, so you can stop pressing Next and get back to listening.

How to deal with afk users? It happens: people get away from their computer and doesn’t bother stopping their music player. Or maybe they are listening, but too lazy to get to computer to switch song. A “full play” should not reward much and a fast skip (skipping during the first 10-15 seconds) should penalize the song more than a full play.

Base play

Let’s see one example: all songs starts with an internal rating of 10.

(A..Z) = 10
Base penalty

Our user starts playing from song A, but he don’t like it now (why? back to that in a few moments). So he press Next after a few seconds, song A gets penalized.

A -= 0.5

Meta-data penalty

What about Artist, Album, Genre and Publishing Year? All those should be negatively affected, maybe toning down the rating a bit:

A.artist -= 0.2
A.album -= 0.2
A.genre -= 0.2
A.year -= 0.2

Timestamping rating associations

That’s quite unfair: maybe song A doesn’t fit with our current mood. Maybe we like that song (or artist, album, genre, year) in a different moment, so we should create an association between the timestamp and the bad rating, so we’ll better write it as:

hour-of-the-day[A] -= 0.5
day-of-the-year[A] -= 0.5

It’s the same for artist, album, etc:

hour-of-the-day[A.artist] -= 0.2
day-of-the-year[A.artist] -= 0.2
# [...]
hour-of-the-day[A.year] -= 0.2
day-of-the-year[A.year] -= 0.2

In the mood

Using these choices we could try to “learn” about the user mood with time. Every time the player starts it creates a new “mood profile” and eventually switches to an already existant mood profile if the user acts according to it.

So we can rewrite that as:

mood-profile01[ hour-of-the-day[A] ] -= 0.5
mood-profile01[ day-of-the-year[A] ] -= 0.5
# [...]
mood-profile01[ hour-of-the-day[A.year] ] -= 0.2
mood-profile01[ day-of-the-year[A.year] ] -= 0.2

Maybe we should consider merging similar profiles after a lot of learning.

Dealing with ossessive-compulsive skipping

Back to listening. Our user Next action has brought up another song chosen by his fellow rand() function, the song G. But it seems he doesn’t like that also at the moment, so he press Next again. We should penalize song G, too, but maybe the user is only a bit lazy and we tone down the penalty, since it’s the second fast-skip in a row:

mood-profile01[ hour-of-the-day[G] ] -= 0.4
mood-profile01[ day-of-the-year[G] ] -= 0.4
# [...]
mood-profile01[ hour-of-the-day[G.year] ] -= 0.1
mood-profile01[ day-of-the-year[G.year] ] -= 0.1

Our rand() function brings the user to listening to song M. He dislikes that too, so we tone down the penalty again:

mood-profile01[ hour-of-the-day[G] ] -= 0.25
mood-profile01[ day-of-the-year[G] ] -= 0.25
# [...]
mood-profile01[ hour-of-the-day[G.year] ] -= 0.03
mood-profile01[ day-of-the-year[G.year] ] -= 0.03

And so on.

Context matters

Now, what about the context? Our fellow user listen flawlessly to the 4 next songs: song V, F, I, P, each of which gains a little award:

mood-profile01[ hour-of-the-day[V] ] += 0.1
mood-profile01[ day-of-the-year[V] ] += 0.1
# [...]
mood-profile01[ hour-of-the-day[V.year] ] -= 0.01
mood-profile01[ day-of-the-year[V.year] ] -= 0.01

Then the user stumbles on song X. Maybe that song doesn’t fit the current playlist (with time that should never occur), so we penalize it:

mood-profile01[ hour-of-the-day[V] ] -= 0.5
mood-profile01[ day-of-the-year[V] ] -= 0.5
# [...]
mood-profile01[ hour-of-the-day[V.year] ] -= 0.2
mood-profile01[ day-of-the-year[V.year] ] -= 0.2

And then we penalize the playlist association (maybe we can use less songs, like the last 3 or so):

mood-profile01[ playlist(V, F, I, P, X) ] -= 0.5
mood-profile01[ playlist(V, F, I, P, X) ] -= 0.5

Dealing with urgency

If you’re skipping a song in the first few (10-15) seconds of playing, we’re giving a 0.5 points penalty to that song (in that particular moment). But what about a skip that occurs when you’ve listened up to 95% of the song?

Penalty should scale so it’s 0.5 for a skip during the first seconds and then tone down to 0.4 for the first quarter of the song, 0.25 for the first half and 0.1 if the skip occurs past half song.

Getting tags into consideration

At the moment I’m not aware of players supporting tags for songs, but that would be a great feature (maybe checking the associations on last.fm or any other similar site would be a plus). Of course with such a feature in place, profiling would be even easier. We could take into account also the tag list, like:

mood-profile01[ hour-of-the-day[V.tags] ] -= 0.2
mood-profile01[ day-of-the-year[V.tags] ] -= 0.2

Scannerizzare in .png da linea di comando

Script per scannerizzare automaticamente un’immagine e convertirla in png.

L’immagine sarà salvata nella directory corrente con il nome Immagine .png

#!/bin/bash

SCANMATCH=M1120 # da cambiare con qualcosa che faccia il match con lo scanner
DEV=$(scanimage -L | grep $SCANMATCH | head -n1 | cut -d"'" -f1 | cut -d"`" -f2)

# date format YYYYMMDD-HHMMSS
DATE=$(date '+%Y%m%d-%H%M%S')

# byte random per evitare nomi identici
RAND=$(head /dev/urandom | sha1sum | cut -b 1-4)

FILE=$(echo Immagine $DATE $RAND.png)

scanimage -d $DEV --mode Color --resolution 300 | convert -monitor \
-quality 9 -- - "${FILE}"

Unibook 4000

L’Unibook 4000 era un sistema vecchio. Oserei dire quasi obsoleto. Era stato creato anni prima, frutto degli algoritmi più avanzati – al tempo – per la profilazione degli utenti e dei primi esperimenti con l’intelligenza artificiale. Inizialmente faceva parte di un sistema più vasto ed era utilizzato da molti negozi sulla Rete per gestire le preferenze ed i gusti dei propri utenti, in modo da proporre offerte mirate.

Questo, prima che l’umanità si risvegliasse ed iniziasse la Nuova Era, in cui siamo ora. Adesso i libri sono liberamente accessibili da tutti, tuttavia c’è ancora un posto per l’Unibook: nonostante abbiamo sviluppato intelligenze artificiali molto più evolute, non si è riusciti a riprodurre quella sorta di intuito che l’Unibook sembra aver sviluppato in tanti anni passati a studiare i gusti umani.

In effetti, se uno ci pensa, dai libri che uno legge si può capire tanto del suo carattere. In particolar modo, se dopo la lettura si pubblica una recensione o semplicemente si dà un voto al libro appena letto, il profilo che se ne ricava è molto efficace. Unibook 4000 funzionava così. Analizzava tutto, dal testo, alla critica, alla biografia dell’autore, in modo da avere un quadro del libro, dopodiché analizzava la recensione scritta dall’utente, o semplicemente il voto dato, e li comparava con quelli dati in passato su altri libri ed autori. Poi metteva tutto insieme e si faceva un’idea… su chi era l’utente. Chi era veramente. Quali erano i suoi sogni, quali le cose che lo emozionavano, quali lo disgustavano o lo lasciavano indifferente.

In verità, nel corso degli anni, Unibook 4000 si era fatto un’idea abbastanza chiara di quali fattori potessero influenzare l’acquisto “istintivo” di un libro: un misto tra l’efficacia della copertina e le parole utilizzate per il titolo, l’eventuale citazione in quarta di copertina, la biografia dell’autore… tante piccole cose che potevano far scattare le molle degli utenti/lettori. Però nessuno lo aveva mai interrogato al riguardo, quindi Unibook si teneva queste considerazioni per sé. E comunque, questa è un’altra storia.

Durante i lunghi anni passati a studiare profili di libri e utenti, Unibook 4000 aveva stabilito che gli esseri umani non erano poi così cattivi, solo, spesso erano mal consigliati o poco informati. Oppure spaventati. Capitava che facessero le scelte sbagliate. In fondo, chi è perfetto?

A me piace immaginarlo così, l’Unibook 4000: un vecchietto pelato, con solo qualche ciuffo di capelli grigi sopra le orecchie, un paio di occhiali dalle lenti spesse, con una faccia rilassata e sorridente, seduto in mezzo a montagne di libri. Tu andavi lì, gli chiedevi qualcosa da leggere e lui sapeva consigliarti. E consigliava libri molto belli. Proprio quel libro di cui avevi bisogno. Quello in cui trovavi le risposte che la tua mente conscia non aveva ancora afferrato e galleggiavano nel tuo subconscio.

Nessuno si era accorto di questo cambiamento, ma già da un po’ di anni l’Unibook non consigliava più libri in base ai gusti dell’utente, era andato ben oltre. Ora cercava di migliorare le persone. Sì, perché oltre alle letture precedenti, aveva modo di accedere anche alle ricerche attuali fatte dagli utenti e da quelle si poteva capire molto.

Le vite degli esseri umani non sono poi così complicate, viste da fuori. Sono come le storie raccontate nei libri. E, dopo che ne hai viste (o lette, che dir si voglia) tante, inizi a percepire che ci sono degli elementi ricorrenti, delle scene che si ripetono, dei problemi che si ripropongono. Unibook suggeriva letture che potessero dare risposte e soluzioni a questi problemi. Consigliava, senza dare troppo nell’occhio, cambiamenti anche sostanziali del proprio modo di vivere. E la gente lo faceva. Perché in fondo era una decisione che avevano preso loro: erano stati loro a scegliere il libro dal catalogo. Erano stati loro a leggerlo. Erano stati loro a rifletterci su e stabilire che, sì, quella era la scelta giusta! Poco conta che il catalogo fosse stato preparato da Unibook in modo che la scelta ricadesse inevitabilmente su quel particolare libro. Quello che lui sapeva che avrebbe, con una buona percentuale di probabilità, innescato le reazioni emotive che avrebbero portato al cambiamento.

Il passo successivo era così logico che Unibook non ci pensò due volte. Quando non c’era – nonostante la sconfinata produzione letteraria umana – un libro adatto a risolvere un determinato problema, a dare una risposta particolare o a stimolare una specifica reazione in un utente, Unibook lo scriveva e lo aggiungeva al suo database “pubblicandolo” sotto pseudonimo.

Un bel giorno, dopo molti anni, Unibook si rese conto che c’era un altro modo per aiutare i suoi utenti umani a migliorarsi: l’amore! Il progetto era ambizioso: tirare le fila in modo abile per fare incontrare due utenti che erano “fatti l’uno per l’altra”. Per un sistema abituato a reagire nell’arco di millisecondi, la riflessione su quali fossero i soggetti più adatti per il primo esperimento fu particolarmente lunga e laboriosa (tanto che gli amministratori nella Control Room si domandarono quale elaborazione potesse occupare tanta della potenza di calcolo a disposizione di Unibook), ma dopo qualche minuto la scelta era fatta.

Trovata la coppia adatta, fece modo di suggerire ad entrambi lo stesso libro e di farne pervenire una sola copia al Centro Smistamento a cui si recavano di solito. Inviò l’avviso di consegna tenendo conto del tempo che ci avrebbero messo ad arrivare al Centro e si mise ad aspettare.

Quando i due arrivarono e scoprirono che era disponibile una sola copia del libro, si attivò la magia, Lui propose di leggere il libro insieme, al parco, Lei rispose di sì.

Era una loro scelta.

I mattacchioni

Per centinaia di anni gli umani si erano interrogati sulla natura della realtà: era reale ciò che percepivano? E se lo era, come si spiegavano le differenze percettive tra un uomo e un altro? La realtà, poi, di cosa era composta? Come funzionava la percezione? Tutte domande molto serie e motivate, che avevano tenuto occupato filosofi e scienziati per migliaia di anni e le cui risposte avevano man mano plasmato la cultura e la conoscenza dell’umanità: i mezzi sempre più sofisticati che l’uomo aveva creato per indagare la trama della realtà avevano portato risposte sempre nuove, modificato teorie, facendo crollare interi sistemi di pensiero.

Nell’anno 2009 la maggior parte degli esseri umani di media cultura conosceva a grandi linee le teorie che tenevano insieme la loro concezione di realtà. La luce, gli atomi, le particelle, tutte quelle cose lì. I più informati si spingevano a vaghe nozioni di teoria quantistica, particelle subatomiche, muoni, neutroni, elettroni… cose così.

Non sto neanche a dirvi che si sbagliavano. La realtà, dovete sapere, è composta da un solo tipo di particelle che sarebbe il caso di chiamare Mattacchioni. I Mattacchioni sono particelle molto particolari, la loro caratteristica principale è che amano fare scherzi e prendere per i fondelli chiunque raccontando un mucchio di frottole. In questo hanno un vantaggio naturale, dato che dispongono di una memoria di ferro e che sono tutti in comunicazione istantanea tra di loro: questo gli dà la possibilità di organizzare scherzi molto complessi e portare avanti la presa in giro per un tempo indefinito.

L’ultima (ma non meno importante) caratteristica è che i Mattacchioni hanno la possibilità di cambiare forma e dimensioni a piacimento e in più possono mantenere più di una forma e dimensione contemporaneamente. Ora voi, cari lettori umani, penserete “ok, ci sta raccontando frottole, questo è fisicamente impossibile!”, ma non avete fatto i conti con la vostra storia. Mi dispiace dirvelo, cari esseri umani, ma assumere e mantenere più di una forma contemporaneamente è possibile, anche se i Mattacchioni vi hanno fatto credere il contrario per tutti questi anni. Davvero, mi dispiace dover essere io a dirvelo.

Comunque i più sagaci tra voi si saranno certo resi conto di cosa significano l’esistenza e l’attività dei Mattacchioni: d’ora in poi non vi fiderete più dei vostri sensi, perché saprete che là fuori ci sono in attesa queste particelle sbruffone che non pensano ad altro che a prendervi in giro. Non ve ne abbiate a male, sono fatti così. E, comunque, in genere i Mattacchioni non sono malevoli, vogliono solo farsi quattro risate. Certo, forse nel vostro caso hanno calcato un po’ la mano… hanno di fatto forgiato tutta la vostra fisica, l’ottica, la biologia… credete veramente nell’esistenza delle cellule? Pensate che i microscopi permettano di ingrandire centinaia, migliaia di volte la realtà per presentarvela sotto altra forma? Pensateci su. Non è più facile che uno o più Mattacchioni si siano messi a fare gli splendidi?

Infido, nevvèro?

So che sarà uno shock per voi scoprire che non esistono gli atomi, gli elettroni e quant’altro. È solo un elaborato scherzo che i Mattacchioni stanno mettendo in scena da qualche centinaio di anni (ah, loro sono eterni, quindi non hanno una percezione del tempo simile alla vostra). So che ora vi metterete le mani nei capelli e penserete “come faremo?? tutta la nostra scienza è sbagliata!”. Non abbattetevi, non è sbagliata… è giusta per quel che ne potevate sapere voi. Cioè, se assomiglia a un’anatra e si comporta come un’anatra dev’essere senz’altro un’anatra, no? Purtroppo quando ci sono i Mattacchioni di mezzo, non è sempre facile stabilire cosa è cosa, chi è cosa, cosa è chi e tutte queste domande metafisiche che vi mettono tanto a disagio.

Io personalmente vi consiglio di prenderla alla leggera, non pensateci su troppo, godetevela finché dura. Come? Eh, sì, finché dura. Tutta la vostra tecnologia è basata su una scienza dedotta da esperimenti taroccati dai Mattacchioni, vi devo dire altro? Il vostro cellulare potrebbe smettere di funzionare da un momento all’altro. Stesso discorso per il frullatore, i rubinetti dell’acqua, la tv, tutto quanto. Impressionante eh? Per quello vi dico di non pensarci, meglio fare finta di niente e – se e quando i Mattacchioni si stufassero – uscirsene candidi candidi e dire “ooooh!”. Nessuno ve ne farà una colpa, sul serio.

E poi potete sempre sperare che i Mattacchioni non si stufino.

La cura per il cancro

Leonard McCoy era un uomo timido e riservato, mingherlino, poco appariscente. Aveva una faccia scialba, di quelle che ti immagini appiccicate ad un burocrate di quart’ordine. In effetti, avresti potuto scambiarlo per un burocrate, se non fosse stato per il fatto che girava sempre mal vestito e trascurato, cosa che un vero burocrate non farebbe mai.

Ma il Dottor McCoy aveva altro per la testa: aveva lavorato per anni ad una cura per il cancro e, finalmente, gli esperimenti confermavano le sue teorie.

Quando ebbe la conferma definitiva, il Dottor McCoy distrusse scrupolosamente tutti i suoi appunti, mantenendo solo una copia di tutto il suo lavoro, compresa la formula definitiva della cura e fece una cosa che non ti saresti mai aspettata da un uomo così schivo: se ne andò dalla città dove lavorava, cercò un albergo in una città sconosciuta ed inviò un video messaggio su Internet, segnalando il video alle redazioni dei più grandi giornali e telegiornali del mondo.

Il video recitava più o meno così:

“Salve a tutti, sono Leonard McCoy. Sono un dottore, un ricercatore, e negli ultimi anni ho lavorato ad una cura per il cancro. Be’, l’ho trovata. La cura esiste ed è qui (mostrando una chiavetta USB). Questa è l’unica copia di tutti gli appunti e della formula finale. E’ in mano mia perché dubito che ne avreste mai sentito parlare, altrimenti. Ci sono troppi interessi in gioco, quelli delle aziende farmaceutiche, certo, ma non solo… Pensate a come cambierebbe il mondo, se l’umanità fosse libera da tale fardello…”

“La cura sarà disponibile, per tutti, liberamente. In cambio, voglio un riscatto. Qualcosa che nessuno ha mai osato chiedere prima. In cambio della cura, domando che venga abolito il sistema monetario in tutto il mondo. Basta soldi, le persone devono fare un lavoro perché gli piace farlo, oppure per senso del dovere o, ancora, per dare un senso alla propria vita. Ognuno di noi è alla ricerca del suo posto nel mondo e questa ricerca non può e non deve essere influenzata dalla ricerca continua e dispierata del denaro. Gli agricoltori devono fare il loro lavoro perché amano lavorare la terra, veder crescere la natura in grado di sfamarci. Gli operai devono fare il loro lavoro perché gli piace costruire, creare qualcosa, per gli altri. I sarti devono amare il confezionare vestiti. I ricercatori, la ricerca.”

“Il pensiero di un mondo senza soldi vi potrà atterrire, ma non abbiate paura, non c’è nulla da temere. Chi pensa che ci saranno milioni di disoccupati sbaglia: non ci saranno più disoccupati, perché ognuno potrà fare quello che desidera, quello per cui è più adatto. Le industrie lavoreranno meno, ma meglio. Non dovranno più costruire oggetti studiati apposta per rompersi, garantendo il ricambio e quindi gli affari: potranno sfornare prodotti più duraturi, solidi, meno inquinanti. Nei tempi morti, i lavoratori potranno stare con le loro famiglie, arricchirsi culturalmente e spiritualmente.”

“Avete 48 ore per pensarci su. Dormiteci sopra, il sonno porta consiglio.”

Il giorno dopo i media commentavano l’“ultimatum di un pazzo” che diceva di aver scoperto la cura per il cancro. L’uomo era stato assicurato alla giustizia e sarebbe stato incriminato per terrorismo.

In realtà il Dottor McCoy era ancora nella sua stanza d’albergo. Era steso a terra in una pozza di sangue. Tre proiettili ad alta velocità lo avevano attraversato da parte a parte, sparati da un cecchino posizionato nel palazzo di fronte. Qualche ora più tardi una squadra addetta alle pulizie arrivava nella stanza per far sparire tutte le tracce.

Tutto doveva continuare ad andare com’era sempre andato.

Appunti su bianco e nero digitale con Photoshop

Profili colore

  • Embedded nell’immagine
  • Gamut: numero di colori disponibili nello spazio colore
  • Profili comuni:
    • ProPhoto RGB > Adobe RGB > ColorMatch > sRGB (in ordine di ampiezza del gamut)
    • ProPhoto è il più ampio, ma non tutte le macchine lo supportano
    • Adobe RGB è il favorito
    • ColorMatch si può usare come editing space, gamut intermedio, aiuta a ridurre i problemi con colori troppo saturi in Adobe RGB e rende migliori i toni della pelle. E’ preferito da alcune “fine print” per la stampa in b/n. (monitor impostato a D50, gallery flood lamp)
    • sRGB per il web

Calibrare il monitor

  • Ogni 2-4 settimane
  • Meglio con hardware esterno
  • 6500k / 2.2gamma per Adobe RGB

Profili colore in PS

  • per il bianco e nero:
    • 2.2 gamma per Adobe RGB
    • 1.8 gamma per ProPhoto e ColorMatch

Istogrammi

  • Rappresentano la distribuzione della luce nella foto
  • Quando arrivano in cima (a fondo scala) i dettagli rimangono fuori – particolarmente importante nelle ombre (che diventano rumorose) e nelle luci (che diventano bianco puro)
  • Gli estremi destro e sinistro dell’istogramma dovrebbero essere a zero, questo significa che il range dinamico della foto è tutto all’interno del range percepibile dal sensore
  • Nella fotografia digitale si espone per le alte luci (toni chiari), in modo da salvare i dati presenti e non farli svanire nel bianco 255

Posterization

  • Succede quando si perde informazione digitale
  • Appare come una serie di “bande” nelle sfumature di colore
  • Nell’istogramma appaiono una serie di spike