Blog

  • Calcolare la dimensione totale di un gruppo di directories su MacOSX

    Piccolo tip ma molto utile che mi segnala Andrea: per calcolare la dimensione totale di più cartelle su OSX è necessario selezionarle e premere CTRL+⌘+I; non conoscevo questa funzionalità ed è davvero molto utile!

  • Misurare la quantità di codice di un progetto

    In questo post affronto un argomento abbastanza delicato: come si misura la quantità di codice di un progetto?

    La soluzione più immediata è quella di contare le linee di codice (Source Lines of Code, SLOC). Un esempio che ho personalmente applicato per contare le righe di codice di un progetto Java a partire dalla root del progetto, usando gli strumenti che Linux ci mette a disposizione:
    find . -type f -name *.java | xargs wc -l

    Un tool che svolge lo stesso compito, più raffinato e con un supporto ad un numero maggiore di linguaggi, è sloccount [sicuramente consigliato].

    Ma quanto è indicativo il numero delle righe di codice per indicare un progetto? A mio avviso dipende da molti fattori, come:

    1. lo stile con cui si programma (un’istruzione condizionale, tipo if può occupare 3 righe come ne può occupare una, a discrezione del programmatore).
    2. l’utilizzo di librerie esterne e framework (il codice è effettivamente utilizzato ma le righe di codice non vengono conteggiate)
    3. il conteggio deve includere i test?

    In definitiva, il conteggio delle righe di codice (e/o di altre metriche relative al codice) è una grandezza che non riesce ad esprimere in modo chiaro ed esauriente la grandezza di un progetto software.
    Esistono altre metriche che ci possono aiutare nella stima della dimensione di un progetto? Voi cosa ne pensate?

  • QR Codes e la Google Chart API

    Piccola intro: i QR Codes sono analoghi ai “normali” codici a barre, ma rappresentano un’evoluzione: possono contenere più dati (a parità di dimensione) e possono essere letti da una serie più ampia di dispositivi, come gli smartphone (su iOS segnalo l’ottima e gratuita QR Reader for iPhone). Dopo aver scaricato un lettore di QR Codes per il vostro smartphone, fate una fotografia all’oggetto qui accanto: il browser del vostro telefonino vi porterà nella pagina più visitata di questo sito…

    Fatto! Avete utilizzato il vostro primo QR Code. Ma come si generano?

    A questo proposito, segnalo quest’utilissima API di Google per generare QR Codes: è molto semplice da utilizzare e in modalità RESTful (specificate i parametri direttamente nell’URL della chiamata); la tabella di documentazione di Google è estremamente chiara a riguardo. Consigliatissima!

  • Scambiare il contenuto di due variabili int senza utilizzare una variabile temporanea: XOR swap

    Una domanda interessante che mi è stata posta è: “com’è possibile scambiare il contenuto di due variabili senza utilizzare una variabile temporanea?”.

    Infatti, per scambiare il contenuto di due variabili, di solito si utilizza una variabile temporanea (vediamo un esempio in Python):

    a = 13
    b = 17
    c = a
    a = b
    b = c
    >>> a
    17
    >>> b
    13
    

    Ora, per scambiare due variabili senza una variabile temporanea (nel nostro caso l’abbiamo chiamata ‘c’), ho pensato di utilizzare un procedimento di questo tipo:

    a = 13
    b = 17
    a = a+b
    b = a-b
    a = a-b
    >>> a
    17
    >>> b
    13
    

    La soluzione a cui sono arrivato viene classificata come una variante del più diffuso XOR swap algorithm, che, in forma più generale, permette di scambiare due variabili semplicemente usando l’operazione di XOR:

    a = 13
    b = 17
    a = a ^ b
    b = a ^ b
    a = a ^ b
    >>> a
    17
    >>> b
    13
    

    Lo XOR swap può essere utile in casi molto particolari, come ad esempio quando la memoria disponibile è notevolmente limitata.
    Bonus point: in Python non c’è bisogno di utilizzare l’algoritmo di XOR swap:

    a = 13
    b = 17
    a, b = b, a
    >>> a
    17
    >>> b
    13
    

    E c’è di più: questo “trucco” funziona anche per i tipi di dato non intero!

    a = 'homer'
    b = 'marge'
    a, b = b, a
    >>> a
    'marge'
    >>> b
    'homer'
    
  • I componenti certificati per Ubuntu

    Ora, anche per Ubuntu, esistono componenti hardware certificati: li trovate nel catalogo Ubuntu-certified hardware.

    Prima di acquistare dei componenti per un nuovo PC, quindi, verificate sul catalogo. A quando i primi PC con lo sticker “Designed for Ubuntu”?

  • Davide Cassani: Quelli che pedalano. La mia recensione

    Fin da piccolo sono sempre stato appassionato al ciclismo, e utilizzare la bicicletta (sia per sport, sia come mezzo di trasporto) è un’attività a cui non rinuncio mai. Dopo aver visto in libreria il libro del famoso ciclista e commentatore Davide Cassani, ho deciso di comprarlo e di leggerlo.

    Il libro è costituito da 157 pagine, ed è anche piuttosto economico: 9.50€. Cassani parte con uno showcase delle possibilità offerte dalla bicicletta come strumento di divertimento – ma anche come mezzo per tenersi in forma.Ci vengono poi presentati i vari tipi di bicicletta (da corsa, mountain bike, biciclette ibride, etc.), i diversi settaggi per adattare la bicicletta al corridore (e non il contrario) e i vari tipi di equipaggiamento che si possono scegliere, oltre ad una prima indicazione sui prezzi e sugli equipaggiamenti a cui è meglio non rinunciare. A proposito di settaggi: degna di nota è la formula di Hinault, illustrata nel libro. La formula ci permette di calcolare la corretta altezza a cui regolare la sella della bici: basta moltiplicare la misura del cavallo per 0.885, oppure misurare il piantone della bicicletta e moltiplicare il cavallo per 0.65.

    Vengono poi presentate le basi di un buon allenamento ciclistico: dalla dieta all’uso del cardiofrequenzimetro, dal riscaldamento allo stretching, dal metodo di pedalata alla risoluzione dei problemi di affaticamento, fino ad arrivare a definire un piano di allenamento declinato in microcicli e macrocicli per un totale di 1 anno di programmazione.

    Il libro si chiude con una panoramica delle corse e dei corridori che Cassani ha incontrato durante la sua carriera; parlando di Ivan Basso, mi ha entusiasmato la descrizione che Cassani ne dà:

    Il segreto della sua forza è anche nella sua scrupolosità. […] Uno come Ivan, se sa di aver fatto tutto per bene, si convince che allora, lì, è lui il più forte. E questa convinzione può essere determinante in un momento cruciale.

    In definitiva il libro è molto semplice ed utile: la prima parte è interessante e nozionistica; più di una volta mi sono ritrovato ad inserire segnalibri per approfondire l’argomento trattato prima in teoria e poi sulla bicicletta. La seconda parte, essendo più narrativa, è decisamente più lineare, scorrevole, e al tempo stesso coinvolgente proprio perché si parla di campioni e gare storiche come la Parigi-Roubaix.

    Per concludere, un libro da avere se siete appassionati di bicicletta e di ciclismo.

  • Linux: monitorare i consumi energetici

    Dopo aver parlato dei consumi energetici di Windows 7 e di come tenerli sotto controllo, vorrei oggi illustrarvi le potenzialità di PowerTOP, un utility per Linux (e Solaris) per monitorare i consumi energetici della Linux box su cui è installato. PowerTOP, infatti, analizza i programmi in esecuzione, i drivers e altre variabili (es. il polling del CD-ROM) per identificare i problemi (programmi, opzioni del kernel e non, etc.) che causano un consumo energetico eccessivo (in particolare, un numero eccessivo di wakeups della CPU che impediscono di entrare negli sleep states della CPU).

    Il programma è molto semplice da installare: lo trovate nei repositories Ubuntu e si può lanciare semplicemente da terminale. Una volta identificati eventuali problemi, il programma si offre inoltre di suggerire alcune soluzioni per risolverli. Da avere!

  • Sulla localizzazione dei sistemi operativi e dei servizi

    I lettori più attenti hanno notato che, tipicamente, gli screenshot che posto sono relativi a schermate in inglese (raramente in italiano). Perché sono in inglese?

    La risposta è molto semplice: normalmente installo i sistemi operativi in inglese (e/o customizzo le lingue dei servizi che uso in inglese). Tutto è cominciato quando utilizzavo Debian localizzata in italiano. Nonostante l’uso fantasioso di alcuni termini, quello che più mi divertiva era leggere gli aggiornamenti compiuti da dpkg/apt: “Spacchetto il rimpiazzo di <componente>“; una terminologia un po’ strana per indicare l’aggiornamento di un componente. Anche in OSX, il menù “File” viene localizzato in italiano come “Archivio”. E questo crea disorientamento, almeno nei nuovi utenti. Ugualmente su iPhone/iOS: l’interfaccia in italiano, per attivare/disattivare le opzioni, utilizza l’interruttore “I/O” anziché “ON/OFF” della versione inglese. A voi sembra più chiaro? A me no. Ecco perché uso la lingua inglese anche su iPhone.

    Oltre alle ragioni più pratiche appena esposte, e anche per una questione di “tenere allenato l’inglese”, preferisco utilizzare sistemi operativi localizzati in inglese.
    Una delle poche volte in cui leggo e scrivo in italiano è questo sito, anche se ultimamente sto pensando di incominciare a scrivere in inglese. Cosa ne pensate?

  • Python e il metodo setdefault

    Note to self (pun intended): questo post rappresenta una sorta di appunto mentale per ricordarmi il funzionamento di setdefault in Python, visto che puntualmente mi trovo ad utilizzarlo.

    setdefault è utilizzato sui dizionari (dict) e permette di impostare una chiave di default durante una set. Mi spiego meglio con un esempio:

    >>> D
    {1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh'}
    

    Vediamo come funziona il metodo setdefault:

    >>> D.setdefault(1, 'penny')
    'leonard'
    >>> D
    {1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh'}
    >>> D.setdefault(5, 'penny')
    'penny'
    >>> D
    {1: 'leonard', 2: 'sheldon', 3: 'wolowitz', 4: 'rajesh', 5: 'penny'}
    

    Ovvero, setdefault valuta la chiave passata come primo argomento:

    • se è già presente nel dizionario, viene ritornato il valore della chiave presente nel dizionario;
    • altrimenti viene aggiunta al dizionario con il valore specificato come argomento.

    in termini pythonici:

    def setdefault(d, key, val):
        if key in d:
            return d[key]
        else:
            d[key] = val
    
  • Twitter via HTTPS: da abilitare!

    Dopo aver fatto la segnalazione per quanto riguarda Facebook, segnalo che anche Twitter ha aggiunto un’opzione per usufruire del servizio via HTTPS: è sufficiente visualizzare i settings e poi selezionare l’opzione HTTPS. Ovviamente io consiglio di abilitare l’opzione per i “soliti” motivi di sicurezza e privacy.