Vizi e virtù di un programmatore

Alla facoltà di ingegneria informatica di Modena ho appreso, per la prima volta, che la pigrizia è una dote fondamentale per i programmatori. Il concetto è abbastanza semplice… se c’è già un programma che funziona bene, è inutile cercare di fare un programma che faccia la stessa cosa… o si usa il programma esistente o si cerca di migliorarlo/modificarlo per “piegarlo” alle proprie esigenze. Questa è una caratteristica fondamentale che ha, fra le altre cose, ispirato le librerie per la programmazione (API). Se poi uno usa un ambiente Linux, sa benissimo che utilizzando la shell e i programmi disponibili nel sistema operativo, può fare qualsiasi cosa combinandoli insieme senza dover riscrivere i programmi base.

Facendo qualche ricerca in internet ho trovato questo sito che conferma questa teoria… e inoltre vengono individuate altre due caratteristiche che i programmatori devono possedere che sono l’impazienza e la tracotanza.

L’elenco delle tre virtù di un programmatore sono state codificate da Larry Wall, l’inventore del linguaggio di programmazione Perl (pagina Wiki e sito ufficiale)… programmatore con un grande umorismo…

Permalink link a questo articolo: http://www.andrea.rustichelli.name/vizi-e-virtu-di-un-programmatore/

Radersi come un Uomo Alfa – Capitolo 4: Razorock the other italian one

Avevo voglia di un rasoio nuovo e mi sono fatto invogliare dagli sconti di Novembre per acquistare un rasoio Razorock Lupo Black.

Il rasoio è in alluminio e lavorato al tornio a CNC e quindi garantisce una finitura perfetta ed elegante. La testina copre interamente la lametta e questo secondo me è un plus non indifferente, sia a livello estetico ma anche a livello pratico perchè la particolare conformità dell’alloggiamento garantisce il corretto allineamento della lametta (che quindi risulta sempre perfettamente allineata e perpendicolare al verso del taglio).

La lavorazione in alluminio si fa sentire, tanto è vero che il peso del rasoio con la lametta montata è pari a 32 grammi (quindi nettamente inferiore agli altri rasoi che che utilizzato recentemente). Ricordo che il Fatip pesa 70 grammi, mentre il rasoio Wilkinson Classic 43 grammi.

Insomma, in poco tempo è diventato il mio rasoio preferito e faccio veramente molta fatica a passare agli altri rasoi. E’ molto deciso anche se non l’ho trovato troppo aggressivo sulla pelle. Il baricentro si trova proprio nella parte zigrinata del manico. Con questo rasoio (e la giusta lametta) è possibile tagliare la barba di una settimana senza nessun problema.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/radersi-come-un-uomo-alfa-capitolo-4-razorock-the-other-italian-one/

Il mio rapporto con i social network

Non è che odio i social network.

Cioè… alla fine sono presente su tutti i principali social network, ma non li frequento attivamente.

Il problema è che sono pieni di tag, di slogan, di hastag (che poi non sono altro che tag con un nome più accattivante) e di vuoto.

I social network partono bene, ma poi si perdono… sono pochi quelli che continuano a mantenere un certo “appeal” nel tempo. Un esempio su tutti Facebook (che secondo me tra 3 anni da ora non ci sarà più)… o G+ che non è neanche decollato. All’inizio, su Facebook, tutti postavano qualcosa di originale e personale… adesso ci sono solo dei link a dei link e ad altro materiale spazzatura presente in giro per la rete (che lucra sul traffico generato).

E poi sono drammaticamente vuoti di contenuti interessanti. Se si ricerca qualcosa (ad esempio per interesse personale, per hobby, perchè si vuole trovare una soluzione ad un problema, ecc.), si verrà reindirizzati verso siti, blog, forum, newsgroup ma sicuramente non verso un social network, perché li è impossibile trovare contenuti degni di nota.

Ecco, questo penso che sia il problema principale dei social… devono essere utilizzati solamente per scopo “ludico”.

Quindi massimo rispetto per tutte quelle persone che perdono tempo a scrivere e mantenere attivi i siti e i blog sparsi per la rete. Conosco benissimo quanto tempo e passione ci vuole…

Permalink link a questo articolo: http://www.andrea.rustichelli.name/il-mio-rapporto-con-i-social-network/

Radersi come un Uomo Alfa – Capitolo 3: The Plastic Choice

Ho comprato (in occasione di un regalo per alcuni amici) un rasoio Wilkinson Classic a pettine chiuso in plastica. L’ho pagato circa 5 euro con anche le lamette Wilkinson (che non sono affatto male, anche se le trovo non all’altezza delle altre lamette che uso normalmente).

Questo rasoio è lungo circa 10 cm e quindi risulta più lungo rispetto al Fatip e pesa 43 grammi con la lametta montata. Quindi risulta molto più leggero del Fatip ma risulta comunque un ottimo rasoio nonostante il prezzo praticamente irrisorio. E’ un rasoio a 2 pezzi e rende il montaggio molto facile perchè basta ruotare il manico per avvitare o svitare la testa per montare la lametta. Tra l’altro, a differenza del Fatip, la testa del rasoio protegge completamente la lametta che risulta completamente racchiusa nel corpo del rasoio. E’ una soluzione che trovo molto bella esteticamente oltre che pratica.

Non sarà il rasoio della mia vita, però come alternativa o da portare in vacanza non è affatto male.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/radersi-come-un-uomo-alfa-capitolo-3-the-plastic-choice/

Paolo Villaggio – Fantozzi, rag. Ugo (La tragica e definitiva trilogia)

Dopo aver visto tutti i film del famoso “Ragionier Fantozzi” decido di buttarmi nella lettura dei libri che li hanno ispirati.

Praticamente è un frullato dei film, con gli eventi, i personaggi e i nomi sparsi qua e là tra le pagine dei 3 libri raccolti in un unico eBook.

Carino il primo, bello il secondo, il terzo a tratti diventa imbarazzante. Si ride a tratti. Però rimane una delle migliori e più longeve analisi della società italiana.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/paolo-villaggio-fantozzi-rag-ugo-la-tragica-e-definitiva-trilogia/

Factotum BOT – il sorgente completo e funzionante

Ed ecco finalmente il codice completo del bot perfettamente funzionante. Visto che il codice è particolarmente lungo lo potete trovare continuando a leggere questo post.

Ogni commento o contributo è particolarmente gradito.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-il-sorgente-completo-e-funzionante/

Factotum BOT – analizza_audio(…)

Ed eccoci all’ultima funzione del bot.

Quella che mi ha dato più problemi e quella che mi ha dato maggiori soddisfazioni.

Quando passiamo al bot un messaggio audio registrato all’interno di Telegram, questa funzione, come prima cosa, converte il file audio dal formato OGG al formato WAV. E per fare questo ho trovato una meravigliosa quanto pratica libreria PYDUB.

Successivamente la funzione passa il file audio in formato WAV all’engine di speech recognition di Google per riconoscere il messaggio vocale ed ottenere una stringa di testo.

Infine, la stringa di testo riconosciuta dal messaggio vocale, viene passata alla funzione formula_risposta(…) per formulare una risposta basata sul testo dettato (direi meraviglioso).

"""
=== ANALIZZA_AUDIO ===
Funzione per convertire in WAV il file audio registrato
in Telegram (nativo in formato OGG) e analizzare il messaggio audio
contenuto nel file WAV
======================
"""
def analizza_audio(bot, chat_id, msg):
    print("Funzione ANALIZZA_AUDIO: START")
    ogg_file_id=msg["voice"] ["file_id"]
    print("Funzione ANALIZZA_AUDIO:",ogg_file_id)
    print("Funzione ANALIZZA_AUDIO: Downloading file in formato OGG...")
    bot.download_file(ogg_file_id, "audio_da_telegram.ogg")
    print("Funzione ANALIZZA_AUDIO: Salvataggio file OGG terminato.")
    file_ogg = AudioSegment.from_ogg("audio_da_telegram.ogg")
    file_handle = file_ogg.export("output.wav", format="wav")
    print("Funzione ANALIZZA_AUDIO: Convesione file WAV terminato.")

    r = sr.Recognizer()
    with sr.WavFile("output.wav") as source:
        audio = r.record(source)

    try:
        domanda=r.recognize_google(audio,language="it_IT")
        print("Trascrizione del file audio: " + domanda)   # recognize speech using Google Speech Recognition
        formula_risposta(bot,chat_id,msg,domanda)
    except LookupError:                                 # speech is unintelligible
        print("Impossibile riconoscere del testo nel file audio analizzato")

    return

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-analizza_audio/

Factotum BOT – leggi_QR_code(…)

Ancora grazie agli amici del sito http://www.allafinedelpalo.it/ per il codice sulla lettura dei codice QR code che ho copiato dal loro post e che ho applicato all’interno del mio bot.

Pubblico anche le 3 immagini che contengono i codici QR che vengono riconosciuti dal bot. Non sono altro che 3 immagini che contengono le stringhe qrcode1, qrcode2 e qrcode3.

Quando viene inviata una immagine nella chat, il bot prova a controllare se nell’immagine è presente un QR code e legge il contenuto. Confronta il testo contenuto nel QR code con le 3 variabili definite a livello di programma e così definite:

QRCODE1="qrcode1"
QRCODE2="qrcode2"
QRCODE3="qrcode3"

Il bot, nella sua versione base, non fa altro che visualizzare il testo riconosciuto e comunicare se coincide con il valore di una delle 3 variabili.

Se il bot non riconosce nessun codice QR valido, visualizza un messaggio all’utente. E’ meglio stampare il codice QR e utilizzare la fotocamera dello smartphone per caricare l’immagine del QR code, perchè se si fotografa il codice QR dallo schermo del computer, il bot fa fatica a riconoscere correttamente il contenuto dell’immagine (forse i pixel disturbano l’identificazione).

Ecco il codice della funzione completa:

"""
=== LEGGI_QR_CODE ===
Funzione per analizzare l'immagine passata al BOT nella chat
e cerca se il testo presente nel QR code coincide con il testo
definito nelle 3 variabili di programma con lo scopo di
effettuare delle scelte sulla base del contenuto del QR code.
=====================
"""
def leggi_QR_code(bot,chat_id,msg):
    bot.sendMessage(chat_id, 'Ricerca dei QR Code in corso...')
    raw_img = BytesIO()
    bot.download_file(msg['photo'][-1]['file_id'], raw_img)
    img = Image.open(raw_img)
    qrcodes = decode(img)

    if len(qrcodes) > 0:
        for code in qrcodes:
            print("Il contenuto del QR code è:", qrcodes)
            qr_string=str(code.data)
            qr_string_unicode=qr_string[2:-1]

            bot.sendMessage(chat_id, "Il QRCode contiene il testo: " + qr_string_unicode)
            if qr_string_unicode==QRCODE1:
                bot.sendMessage(chat_id, "Trovato il QRCODE1")
            elif qr_string_unicode==QRCODE2:
                bot.sendMessage(chat_id, "Trovato il QRCODE2")
            elif qr_string_unicode==QRCODE3:
                bot.sendMessage(chat_id, "Trovato il QRCODE3")

    else:
        bot.sendMessage(chat_id, "Non ho trovato QRCode nella foto...")
    return

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-leggi_qr_code/

Factotum BOT – attiva_maggiordomo(…)

Di seguito riporto il codice per attivare l’Inline Keyboard all’interno di Telegram. Sinceramente pensavo che fosse più utili/pratica, ma alla fine non mi ha convinto come pensavo. Per questo motivo il codice non è ottimizzato e ho creato tante funzioni quante sono le Inline Keyboard da attivare. Ho anche creato una funzione che contiene molti cicli if per gestire i tasti premuti dall’utente, ma sono sicuro che ci sono modalità più raffinate per gestire questo tipo di input.

"""
=== ATTIVA MAGGIORDOMO ===
Funzione attivare l'Inline Keyboard presente in Telegram.
L'InlineKeyboard visualizza 3 pulsanti
 Il pulsante key1 visualizza un sottomenù con altri 2 pulsanti e quello per tornare indietro
 Il pulsante key2 visualizza un elenco di anni e il pulsante per tornare indietro
 Il pulsante key3 visualizza direttamente un testo
Questa è la funzione base. Ci sono altre funzioni per gestire le risposte dell'utente.
==========================
"""
def attiva_maggiordomo(chat_id):
    print("Maggiordomo attivato")

    keyboard = InlineKeyboardMarkup(inline_keyboard=[
                     [InlineKeyboardButton(text='Testo key1', callback_data='key1'),
                      InlineKeyboardButton(text='Testo key2', callback_data='key2'),
                      InlineKeyboardButton(text='Testo key3', callback_data='key3')]
                 ])
    bot.sendMessage(chat_id,"Attivazione del Maggiodomo in corso...",reply_markup=keyboard)

Di seguito riporto le altre funzioni necessarie per attivare e gestire i sotto menù dell’Inline Keyboard. Ricordo che il valore presente nel campo callback_data è quello che viene utilizzato per gestire il flusso all’interno del programma.

def attiva_maggiordomo_key1(chat_id):
    print("Maggiordomo KEY1 attivato")
    key1_keyboard = InlineKeyboardMarkup(inline_keyboard=[
                     [InlineKeyboardButton(text='Testo key1 sub 1', callback_data='key1_1'),
                     InlineKeyboardButton(text='Testo key1 sub 2', callback_data='key1_2')],
                     [InlineKeyboardButton(text='Torna indietro', callback_data='from_key1_back')]
                 ])
    bot.sendMessage(chat_id, "Entro nella sezione KEY1...",reply_markup=key1_keyboard)

def attiva_maggiordomo_key2(chat_id):
    print("Maggiordomo KEY2 attivato")
    key2_keyboard = InlineKeyboardMarkup(inline_keyboard=[
                     [InlineKeyboardButton(text='2016', callback_data='2016')],
                     [InlineKeyboardButton(text='2017', callback_data='2017')],
                     [InlineKeyboardButton(text='2018', callback_data='2018')],
                     [InlineKeyboardButton(text='Torna indietro', callback_data='from_key2_back')]
                 ])
    bot.sendMessage(chat_id, "Entro nella sezione KEY2...",reply_markup=key2_keyboard)

def attiva_maggiordomo_key3(chat_id):
    print("Maggiordomo KEY3 attivato")
    bot.sendMessage(chat_id, "Entro nella sezione KEY3...")

Infine, ecco la funzione per gestire i pulsanti una volta che vengono premuti dall’utente.

def on_callback_query(msg):
    query_id, chat_id, query_data = telepot.glance(msg, flavor='callback_query')
    print('Callback Query:', query_id, chat_id, query_data)
    if query_data=="key1":
        attiva_maggiordomo_key1(chat_id)
    elif query_data=="key2":
        attiva_maggiordomo_key2(chat_id)
    elif query_data=="key3":
        attiva_maggiordomo_key3(chat_id)
    elif query_data == 'from_key1_back':
        attiva_maggiordomo(chat_id)
    elif query_data == 'from_key2_back':
        attiva_maggiordomo(chat_id)
    elif query_data == 'from_key3_back':
        attiva_maggiordomo(chat_id)
    elif query_data == '2016':
        bot.sendMessage(chat_id, "Hai scelto l'anno 2016")
    elif query_data == '2017':
        bot.sendMessage(chat_id, "Hai scelto l'anno 2017")
    elif query_data == '2018':
        bot.sendMessage(chat_id, "Hai scelto l'anno 2018")
    elif query_data == 'key1_1':
        bot.sendMessage(chat_id, "Hai premuto il tasto KEY1_1")
    elif query_data == 'key1_2':
        bot.sendMessage(chat_id, "Hai premuto il tasto KEY1_2")
    elif query_data == 'key2_1':
        bot.sendMessage(chat_id, "Hai premuto il tasto KEY2_1")
    elif query_data == 'key2_2':
        bot.sendMessage(chat_id, "Hai premuto il tasto KEY2_2")

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-attiva_maggiordomo/

Factotum BOT – trova_posizione(…)

Ed eccoci alla funzione che, quando viene passata una posizione geografica al bot, tramite l’interrogazione di un web service, vengono visualizzati dei punti geografici nelle vicinanze del punto indicato. Ovviamente questa funzione ha uno scopo solo dimostrativo, ma serve per testare le potenzialità legate alla geolocalizzazione.

Inoltre è presente un pezzo di codice molto utile per la gestione del risultato dell’interrogazione del web service, in quanto l’output in formato json è stato reso “leggibile” tramite una conversione utilizzando la codifica UTF-8.

"""
=== TROVA_POSIZIONE ===
Funzione per scrivere i dati sulla posizione che viene passata al Bot
tramite l'interrogazione di un web service
=======================
"""
def trova_posizione(bot, chat_id, msg):
    bot.sendMessage(chat_id,'Mi hai passato la posizione geografica')
    print(msg["from"] ["first_name"])
    gps_lat=msg["location"] ["latitude"]
    gps_lon=msg["location"] ["longitude"]
    gps_url="http://www.geoplugin.net/extras/nearby.gp?lat=" + str(gps_lat) + "&lon=" + str(gps_lon) + "&format=json"
    with urlopen(gps_url) as response:
      html_response = response.read()
      encoding = response.headers.get_content_charset('utf-8')
      decoded_html = html_response.decode(encoding)

    data_json=json.loads(decoded_html)
    for posti in data_json:
        print(posti["geoplugin_place"], posti["geoplugin_distanceKilometers"], posti["geoplugin_directionHeading"])
        bot.sendMessage(chat_id, "Ti trovi a " + str(posti["geoplugin_distanceKilometers"]) + " Km da " + str(posti["geoplugin_place"]) + " in direzione " + str(posti["geoplugin_directionHeading"]))
    return

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-trova_posizione/

Factotum BOT – formula_risposta(…)

Vediamo la prima funzione utilizzata all’interno del BOT Factotum.

Il suo scopo è quello di prendere in input il testo digitato dall’utente all’interno della chat, spezzare la frase nelle singole parole che la compongono e confrontare le parole con le 3 HOT WORD inserite come variabili all’interno del programma stesso (e quindi a “compile time” e non a “run time”).

"""
=== FORMULA_RISPOSTA ===
Funzione per analizzare il testo digitato dall'utente nella chat
e formulare la risposta più appropriata sulla base delle 3 HOT_WORD definite
a livello di programma
========================
"""
def formula_risposta(bot, chat_id, msg, domanda):
    print("Funzione FORMULA_RISPOSTA: START")
    print("Funzione FORMULA_RISPOSTA: La domanda è ",domanda)

    parole=domanda.split(" ")
    parole_chiave=[]
    risposta=""
    for i in parole:
      if i in HOT_WORD1:
          parole_chiave.append(i)
          bot.sendMessage(chat_id,"Trovata la HOT_WORD1")
      if i in HOT_WORD2:
          parole_chiave.append(i)
          bot.sendMessage(chat_id,"Trovata la HOT_WORD2")
          #bot.sendDocument(chat_id, open('file_name.pdf', 'rb'))
      if i in HOT_WORD3:
          parole_chiave.append(i)
          bot.sendMessage(chat_id,"Trovata la HOT_WORD3")
          #bot.sendMessage(chat_id, "https://www.google.it")

    if len(parole_chiave)==0:
      bot.sendMessage(chat_id,"Spiacente, non sono riuscito a individuare la richiesta.")
    return

Le HOT_WORD non sono altro che liste che contengono le parole chiave che fanno attivare il BOT. Nel BOT di esempio sono descritte nel seguente modo:

HOT_WORD1=["pippo","Pippo","PIPPO"]
HOT_WORD2=["pluto","Pluto","PLUTO"]
HOT_WORD3=["paperino","Paperino","PAPERINO"]

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-formula_risposta/

Caleb Hattingh – 20 Python Libraries You Aren’t Using (But Should)

Giusto per affinare ulteriormente la programmazione in Python (e poter implementare migliorie al bot Factotum che sto realizzando) mi sono letto questo libro.

L’ho scaricato dal sito della biblioteca di Reggio Emilia tra le risorse disponibili gratuitamente.

Le librerie più utili sono le collections (soprattutto l’oggetto namedtuple) e il modulo logging (per evitare di inserire il comando print come se non ci fosse un domani). Usando opportunamente il modulo logging è possibile utilizzare i livelli di debug per avere un output di controllo più o meno “verboso” a seconda delle necessità e scrivendo poco codice aggiuntivo.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/caleb-hattingh-20-python-libraries-you-arent-using-but-should/

Factotum BOT – La presentazione

Finalmente, dopo un lungo periodo di preparazione, sono riuscito a terminare la presentazione per il progetto Factotum BOT.

Cos’è Factotum BOT? E’ sostanzialmente un bot per Telegram creato in Python utilizzando la libreria TELEPOT (anche se al momento il progetto di sviluppo di questa libreria è fermo) per testare alcune funzionalità e possibilità offerte da questo tipo di implementazione.

Come prima cosa devo ringraziare gli amici del sito “Alla fine del palo” perchè ho letteralmente utilizzato il loro codice per la parte che si occupa di leggere un QR Code (ma ho chiesto preventivamente l’autorizzazione).

Qui di seguito trovate la presentazione (l’attuale versione pubblicata è aggiornata a Settembre 2019) del progetto e nei prossimi giorni pubblicherò sia le singole funzioni sia il codice dell’intero bot funzionante. Ovviamente se lo volete provare dovrete creare un vostro bot tramite TheBotFather e utilizzare il vostro codice di attivazione del bot.

Permettetemi un’ultima divagazione…

Mi sono imposto (per motivi etici) di realizzare il progetto unicamente con software libero e quindi anche la presentazione l’ho voluta realizzare con lo strumento Impress della suite per ufficio LibreOffice. L’impressione che ho avuto è che sia un programma orrendo rispetto al suo parente più blasonato di casa Microsoft.

E a questo proposito mi viene in mente la diatriba tra Torvalds e Stallman quando, nella conferenza del 1996 organizzata dalla Free Software Foundation, Torvalds ammise di ammirare il software per la presentazioni delle diapositive della Microsoft. “Da qualche parte nell’universo del software libero stava nascosto un programma che forse un giorno qualche hacker avrebbe trasformato in alternativa a Power Point. Ma fino a quel momento, perchè invidiare alla Microsoft l’idea di aver realizzato quel programma e di essersene riservata i diritti?”

Beh posso tranquillamente dire che quel giorno non è ancora arrivato. Per fortuna di Microsoft e per sfortuna nostra.

Trovate tutti i link utili nell’apposita sezione del sito.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/factotum-bot-la-presentazione/

J. G. Ballard – La mostra delle atrocità

ballard_la mostra delle atrocità

Libro dichiaratamente sperimentale e, direi, provocatorio.

Strepitosa la caduta dei confini tra spazio interno e spazio esterno… gli edifici non hanno pareti e e lo “spazio esterno” è un continuum con le stanze vissute e frequentate da personaggi folli.

Le geometrie e i piani dello spazio si innestano, continuano o irrompono sui lineamenti dei personaggi.

Molto sperimentale. E la cosa bella delle sperimentazioni è che solo i critici le possono apprezzare positivamente. Consiglio la lettura di questo libro sotto l’effetto degli allucinogeni (ma quelli sperimentali).

Permalink link a questo articolo: http://www.andrea.rustichelli.name/j-g-ballard-la-mostra-delle-atrocita/

Sam Williams – Codice libero – Richard Stallman e la crociata per il software libero

Libro che ho preso a caso in seguito ad una ricerca sui libri “informatici” disponibili nella biblioteca elettronica di Reggio Emilia. La prima cosa che mi ha colpito è che il libro proviene da Wikisource e che è soggetto alla licenza “Attribuzione – Condividi allo stesso modo 3.0 Unported (CC BY-SA 3.0)“. L’edizione elettronica del libro (è presente anche una normale versione cartacea) può essere pagata con l regole vigenti per il software libero. L’editore O’Reilly & Associates ha deciso di distribuire il volume sotto la licenza GNU Free Documentation License.

codice libero e richard stallman

Poi mi interessava l’argomento… ma mi spaventava l’idea di leggere una biografia.

Alla fine l’ho letto sotto l’ombrellone

Prima di trascrivere le prime epiche righe del libro, devo anticiparvi che è stata una lettura fondamentale per la mia crescita personale, umana, culturale, informatica e spirituale. E non sto scherzando. Mi si è aperto un mondo. Ecco come si apre il libro:
È successo raramente nella storia, ma è successo, che in un momento in cui sembrava che le regole del gioco fossero immutabili, che i vincitori fossero imbattibili e i perdenti senza alcuna possibilità di riscatto, un uomo solo, assolutamente privo di potere, ricchezze, fama, bellezza, amicizie, un uomo qualunque della specie innumerevole dei perdenti, riuscisse a sovvertire le regole del gioco e a far saltare il banco. La storia raccontata in questo libro è la storia di uno di quegli eventi rari ed è la storia di un uomo eccezionale che nasce perdente e diventa vincente, che non è bello ma affascinante, che non è simpatico ma è adorato come un dio; non ha amicizie vere ma conta migliaia di ammiratori; mette i lunghi capelli in bocca o nel piatto ove sta mangiando ma è conteso ospite alla tavola dei ricchi e dei potenti; non sorride mai ma si traveste da santo mettendosi in testa, a mo’ di aureola, la superficie attiva di un hard disk della prima generazione; non ha i soldi per pagarsi una cena al ristorante ma ha sconvolto un mercato da migliaia di miliardi di dollari.

In questo libro c’è la vera essenza degli hacker e del loro mondo, delle loro caratteristiche e della loro storia passata e presente… perchè il significato è cambiato con l’arrivo dell’informatica di massa e dei personal computer. E si può arrivare, per estrapolazione, alla terza definizione di “cracker”.
Nella mia cultura, il termine “cracker” poteva indicare:

  • l’utilizzo di attacchi “brute force” o comunque invasivi e distruttivi verso sistemi informatici;
  • una persona abile nello sproteggere i programmi come rimuovere il limite temporale nei programmi a tempo, creare keygen e fare crack in modo da bypassare la presenza di “dongle” da collegare al pc.

Ma poi scopro che “la cultura hacker è caratterizzata da un rigoroso senso morale, per cui un vero hacker non danneggerebbe mai un sistema informativo o un programma applicativo; e da una istintiva vocazione per la fraternità, la solidarietà e l’uguaglianza” e allora scopro che se non segui queste regole sei un “cracker”. E questa è la terza definizione di “cracker”. Alla luce di questo aspetto e leggendo la biografia di Stallman, possiamo dire che lui sia un grandissimo hacker… questo aspetto fa passare in secondo piano la sua incredibili capacità come programmatore.

Una cosa è certa… se indossi una cravatta non sei sicuramente un hacker perchè la cravatta viene definita come uno “strangling device” che riduce l’irrorazione cerebrale che si indossa insieme al “suit” che è uno scomodo abito da lavoro.

In questo libro c’è tutto. Non solo la vita di Stallman ma anche tutta l’evoluzione di un mondo che in pochi conoscono. C’è l’informatica degli albori, di quando i computer non erano “personal” e occupavano intere stanze nelle principali università americane, c’è la nascita del software libero, del movimento “open source”, di GNU, di Linus Torvalds e di Linux, c’è la vita e le azioni di altri hacker famosi, c’è la cattedrale e il bazaar, c’è la lotta contro le grandi multinazionali dell’informatica e c’è la libertà.

Inoltre sono contento di aver trovato all’interno dei Jagon Files la conferma di quello che ho appreso nelle mie ricerche e nelle mie immersioni nel mondo digitale… ovvero quali sono le definizione del termine hacker che non corrispondo al vero. Come, ade esempio, il fatto che derivi dal verbo “to hack”… tagliare, fare a fette.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/sam-williams-codice-libero-richard-stallman-e-la-crociata-per-il-software-libero/