Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Immutable Page
  • Info
  • Attachments

Indice Di Popolarità (di un pacchetto DEB)

Fa un po' ridere...se uno ci pensa, ma in questa uggiosa domenica di Febbraio è il meglio che posso inventare.

Prefazione

OBBIETTIVO OBIETTIVO: Tirar fuori un numero che possa rappresentare il voto per un pacchetto, cioè un programma specifico. Le votazioni si fanno su tutto o quasi, e, se non si vogliono stabilire troppi parametri per dare un giudizio numerico ad un programma, scegliamo allora il voto della massa. Che cos'è? È quello che si ottiene facendo una media dei gusti degli utenti che utilizzano quel programma rispetto all'insieme dei programmi installati sulle loro macchine. Tutto sarà anonimo, automatizzato, semplice più che mai: il risultato sarà un numero da 1 a 100, quello che chiamo l'Indice Di Popolarità (d'ora innanzi IDP™ ;-) )

Azione


I dati provengono dall'Ubuntu popularity contest chiamato popcon, progetto che si occupa di elaborare localmente i dati relativi all'accesso settimanale dei pacchetti installati, e una volta inviati ad un server centrale di analizzare i campioni ricevuti. Anche se non propriamente (o non ancora) molto affidabili i campioni (ad oggi ~10000) si riferiscono (o almeno il sottoscritto spera che non siano dati forgiati ad-hoc da qualche zuzzurellone) a dati di utenti concreti che hanno installato, aggiornato, utilizzato pacchetti. Questi dati di default vengono inviati al server popcon.ubuntu.com una volta a settimana (tramite un crontab settato la domenica mattina). Nelle ultime due settimane i campioni stanno lievitando con incrementi ragguardevoli. Stiamo a vedere se è una questione di passaparola*.
Voto
I dati ci sono, pochi o tanti che siano (e ammesso che non siano di fantasia): il dato che più mi interessa tra quelli figuranti nelle statistiche del popcon è il cosiddetto voto.

Voto: definizione
dal sito del popcon {{{voto: numero di persone che usano il pacchetto regolarmente }}} dalla FAQ (/usr/share/doc/popularity-contest/FAQ)

 Un computer vota per un pacchetto se, secondo i dati raccolti nel rapporto (inviato dal computer verso il server che raccoglie le statistiche), un programma facente parte o strettamente dipendente dal pacchetto è stato usato in un lasso di tempo inferiore ai 30 giorni. Il computo viene effettuato lato server.

Graduatorie
Ora che sappiamo cosa rappresenta in concreto un voto, dobbiamo anche sapere che le statistiche sono stilate in due tipi principali di graduatorie:

  • globale

  • di categoria

La globale ovviamente comprende l'insieme di *tutti* i pacchetti coperti dai dati statistici, non propriamente tutti i pacchetti reperibili per Ubuntu, ma circa.
Quella di categoria comprende, invece, solo i pacchetti che fanno parte di una particolare sezione, che cioé hanno cioè un preciso utilizzo. Le categorie attualmente utilizzate su Ubuntu sono: admin, kde, python, comm, libdevel, science, devel, libs, doc, mail e molte altre. Vista la particolarità della graduatoria di categoria, è facilmente intuibile che di per sè sarà più competitiva (il pacchetto verrà equiparato a suoi 'simili'), ma al contempo, non terrà conto della globalità del software disponibile sulla distribuzione.
Questa generica considerazione mi ha portato a considerarle entrambe nel ricavare l'IDP.
Se è così allora l'IDP può essere rappresentato dalla media semplice (aritmetica) delle due graduatorie:

  • (1) ( voto Globale + voto di Categoria ) diviso 2.


Ma da cosa scaturiscono in pratica voto Globale e voto di Categoria? Prendiamo il Globale, la sua graduatoria consiste in una lista ordinata per voto decrescente e posizione assoluta crescente (voto + alto, n°1 in graduatoria, via via fino a voto + basso, ultima posizione in graduatoria). Nella graduatoria isoliamo i dati essenziali: sono posizione, numero dei pacchetti totale (che coincide con l'ultima posizione in graduatoria).
Il voto globale, espresso in forma percentuale può essere dato da:

  • (2) ( totale - posizione ) diviso totale per 100.


Nella stessa misura si trova il voto di Categoria applicando il dato totale ed il dato posizione relativi alla categoria di appartenenza del pacchetto, in esame.



Ricapitolando

  • L'IDP si calcola come (1) (voto Globale + voto di Categoria) / 2

  • Il voto Globale sarà dato da (2) (totale G - posizione G) / totale G * 100

  • Il voto di Categoria similmente sarà dato da (2) (totale C - posizione C) / totale C * 100



Formula
Sostituendo e semplificando si avrà:

  • IDP = (vG + cG) / 2 = [(tG - pG) / tG * 100 + (tC - pC) / tC * 100] / 2 = {[(tG - pG) / tG + (tC - pC) / tC]*100} / 2 =

= [(tG - pG) / tG + (tC - pC) / tC] * 100 / 2 = [(tG - pG) / tG + (tC - pC) / tC] * 50


Postfazione

Aiuta il popcon!

Bene ora che sappiamo cosa è l'IDP e come si fa e..anche tutto quello che non vi ho detto (perchè in realtà l'avevo scritto solo che poi non ho salvato e ho modificato una nuova pagina perdendo circa 3-4 paragrafi), passo al dunque:

  • Partecipa al popcon di Ubuntu
    1. sudo /usr/bin/software-properties e abilita nella linguetta :-p Statistiche l'opzione relativa. Grazie anche a nome di chi non sa di doverne.

Script

Siccome uno dei possibili utilizzi dell'IDP è quello in progetto per la recensione di programmi sulla NewsletterItaliana, e visto il ripetersi dei comandi per il calcolo (vd.su) la faccenda si presentava tediosa, ho messo insieme un breve script Python che assolvesse al compito. Considerato che è il mio 2°script (il 1°l'ho scritto due-tre giorni fa) fatto per Python e che non sono un tipo molto script kiddie :-p .. Be' a me funziona ;-).

APPENDICE

In pratica: l'IDP di k3b

Passo a passo

TIP: i seguenti comandi sono stati racchiusi 'tra singoli apici', facendo copia&incolla accertati di eliminarli entrambi

  • Scarichiamo la graduatoria Globale aggiornata, contenente l'elenco di tutti i pacchetti
    1. 'wget http://popcon.ubuntu.com/by_vote.gz'

  • Scarichiamo la graduatoria della Categoria aggiornata: qui dobbiamo sapere il RAMO(main|contrib|..) e la CATEGORIA(x11|kde|mail) di appartenenza
    1. wget http://popcon.ubuntu.com/RAMO/CATEGORIA/by_vote.gz, ovvero 'wget http://popcon.ubuntu.com/main/otherosfs/by_vote.gz' TIP:per scoprire il ramo e la categoria, usa il tuo package manager preferito, oppure una ricerca su http://packages.ubuntu.com/

  • Dai due file scaricati estraiamo le informazioni di cui abbiamo bisogno: Posizione e Totale in ambo le graduatorie
    1. 'zcat by_vote.gz |grep -m 1 "k3b    ";zcat by_vote.gz |grep -m 1 "Total    ";zcat by_vote.gz.1 |grep -m 1 "k3b    "  ;zcat by_vote.gz.1 |grep -m 1 "Total    ";'
      Se hai eseguito il comando esattamente dovresti vedere qualcosa di simile:

      capa@rezza:~$ zcat by_vote.gz |grep -m 1 "k3b    ";zcat by_vote.gz |grep -m 1 "Total    ";zcat by_vote.gz.1 |grep -m 1 "k3b    "  ;zcat by_vote.gz.1 |grep -m 1 "Total    ";
      760   k3b                             3210  1600  1170   439     1 (Jean-michel Kelbert)
      35702 Total                          13501258 4197887 3335640 1360082 4607649
      4     k3b                             3210  1600  1170   439     1 (Jean-michel Kelbert)
      10    Total                          38899 16463 18166  4263     7
  • Individuiamo i dati interessanti ai fini dell'IDP: pG=760 tG=35702 pC=4 pG=10

  • Procediamo alla sostituzione nella formula:
    • IDP=[(35702 - 760) / 35702 + (10 - 4) / 10] * 50~=78,94%

Con lo script

Tutto è come previsto ;-)

capa@rezza:~$ chmod 755 idp.py; ./idp.py k3b

                                     =====
                                      K3B
                                     =====
Ramo: main
Categoria: otherosfs
Recupero graduatoria globale   (http://popcon.ubuntu.com/by_vote.gz)...
OK
Recupero graduatoria di categoria   (http://popcon.ubuntu.com/main/otherosfs/by_vote.gz)...
OK

                                   I.D.P.=79%


CategoryHomepage