Il diario di viaggio di un corsaro dell'informatica

Ultima

Diaspora: facebook open source

Molti di voi probabilmente usano facebook, pochi di voi magari si sono posti i problemi relativi alla privacy delle cose che condividiamo sul noto social network di Zuckerberg (esiste un dibattito molto acceso al riguardo, per il quale vi rimando a http://punto-informatico.it/3097300/PI/News/privacy-prospettiva-facebook.aspx e a tutto cio` che reperite in rete).

Casomai vi siate posti il problema e siate in cerca dell’ alternativa, probabilmente diaspora ( http://www.joindiaspora.com ) potrebbe fare al caso vostro.

Innanzitutto, cosa e` diaspora? E` un social network, completamente open source e scritto con l’ausilio di Ruby On Rails (http://www.rubyonrails.org/) che si propone di essere in futuro un rivale di facebook. Le idee cardine di diaspora sono 3, di seguito descritte:

Choice

Diaspora ti consente di organizzare le tue connessioni sociali in gruppi, detti “aspects”, che fanno si che tu condivida le tue foto e i tuoi messaggi di stato solo con chi vuoi.

Ownership

Diaspora ti garantisce il possesso di tutto cio` che condividi su di esso, garantendoti il controllo totale su come viene condiviso

Simplicity

Diaspora rende semplice la condivisione, facendo si che tu non debba effettuare configurazioni complicate solo per proteggere il tuo profilo.

Attualmente gli mancano parecchie cose rispetto a facebook, tuttavia per una versione alpha c’e` da sperare: chiunque sia interessato, inoltre, puo` contribuire al progetto sia scaricando il sorgente con git https://github.com/diaspora/ oppure semplicemente ospitarne un server https://github.com/diaspora/diaspora/wiki/Installing-and-Running-Diaspora .

Happy sharing!

Se sapessero quello che penso, amici…

Vi propongo un grande monologo del teatro contemporaneo dell’attore americano Eric Bogosian che talvolta, come in questo momento, sento molto vicino.

Mai parlato con uno di questi senza tetto? Tutti dicono che sono pazzi!
Ma provate a vivere in strada per un po’, e vedete che idee vi vengono. Non diventate pazzi, vi dico, incominciate a vedere la verità. E cominciate anche a dirlo in giro, a dire anche come stanno le cose: ecco perché tengono questa gente in strada. Il sistema ha paura di loro. Paura della loro libertà. La libertà è l’opposto della responsabilità. La libertà è una minaccia al sistema.
Ecco perché non c’è più nessuno che si fa le canne, la libertà fa paura a tutti.
Hanno paura che se la gente si fuma una canna e diventa un po’ più allegra capisce che merda di vita fa…e manda tutto per aria. È per questo che ho smesso di fare arte, capito? Non c’è più speranza. Che cosa si può fare in una situazione del genere?
Mettiamo anche che scriviate un libro, il migliore che sia mai stato scritto, che vada in classifica e lo leggano tutti. Due mesi dopo è dimenticato, e c’è qualche altro capolavoro che tutti devono leggere.
O che scriviate una canzone, bellissima e che finiate in super classifica. Che cosa pensate che vi aspetti dopo? al massimo un jingle per uno spot di qualche birra.
O che dipingiate un quadro: lo compra un milionario e se lo appende negli uffici della sua compagnia. In passato, i ricchi appendevano alle pareti teste di leoni, tigri. Li facevano sentire potenti, sicuri.
Oggi il sistema colleziona le menti degli artisti, capite?
La notte dorme meglio sapendo che i migliori, i più svegli sono morti dal collo in su.
Ecco perché non gli do nessuna soddisfazione, la mia mente me la tengo dentro la testa, dove non possono venire a prendermela.
Tutto diventa parte del sistema, capite?
E l’unico modo per sfuggire al sistema è fare nulla. Come faccio io!
Voglio dipingere un quadro? Voglio scrivere qualcosa? Lo faccio nella mia testa, dove non possono vedere.
Se sapessero quello che penso, amici, sarei già morto!

Traduzione di Alberto Pezzotta

Se siete interessati ai lavori di Eric Bogosian (http://www.ericbogosian.com/), eccovi i link rispettivamente delle pagine di facebook, twitter e myspace:

http://www.facebook.com/pages/Eric-Bogosian/16328194015 (facebook)

http://www.twitter.com/bogosiana (twitter)

http://www.myspace.com/ericbogosian (myspace)

Il testo da cui e` stato preso il brano proposto e` “I grandi monologhi del teatro contemporaneo” di Gremese Editore, autori Rodolfo Di Giammarco e Claudia Di Giacomo  (http://books.google.it/books?id=ODlaVZqsccYC&printsec=frontcover)

Per rinfrancar lo spirito…

Segnalo questa web-radio che mi e` stata molto utile durante ore passate a programmare: http://www.108.pl/

Si tratta di Radio Nirvana, una radio che trasmette musica per rilassamento e meditazione. Nessuno puo` immaginare quanto sia davvero utile, in certi contesti.

Alla prossima!

P != NP, Deloalikar vs Aaronson

Tanto tempo fa, più precisamente nel 1971, un signore chiamato Stephen A. Cook pubblicò un articolo intitolato “The complexity of theorem proving procedures” in cui veniva introdotto il problema dei problemi dell’informatica, ovvero se la classe di complessità P fosse o meno uguale alla classe NP, per il quale vi rimando a una breve lettura di http://it.wikipedia.org/wiki/Classi_di_complessit%C3%A0_P_e_NP (o magari alla più dettagliata versione inglese http://en.wikipedia.org/wiki/P_versus_NP_problem o meglio ancora a un qualsiasi libro di algoritmi degno di tal nome, in attesa che prepari per voi qualcosa di più potabile). Da allora nessuno è stato in grado di risolverlo e l’istituto Clay (http://www.claymath.org/) ha stanziato un milione di dollari come premio per chiunque ci riuscisse.

Tanti ci hanno provato e hanno miseramente fallito. L’ultimo tentativo è stato di Vinay Deloalikar, che nell’Agosto di quest’anno ha pubblicato un interessante paper di più di 100 pagine http://www.scribd.com/doc/35539144/pnp12pt in cui dimostrava che P!=NP. Tuttavia, secondo Scott Aaronson, ci sono alcune incongruenze di fondo nella sua prova, esposte nelle risposte a 3 domande postegli al riguardo http://web.mit.edu/newsoffice/2010/3q-pnp.html .

Chi ha ragione? chi ha torto? chissà 🙂 una cosa è certa, se Aaronson ha ragione, il milione di dollari è ancora lì che attende qualcuno di noi 🙂 che ne pensate?

Ciao a tutti!

Programming challenges

Avete mai pensato di confrontare le vostre abilita` nella programmazione con altri pirati? Se si, questo e` il sito che fa per voi

http://uva.onlinejudge.org/

Nel sito e` presente una lista di problemi algoritmici da risolvere attraverso lo sviluppo di un programma in un linguaggio a scelta tra ANSI C, Java, C++ o (se proprio volete) Pascal. Una volta sviluppato il programma che secondo voi risolve il problema, lo sottomettete al sito attraverso l’apposito form e il sistema si preoccupera` di valutarne la correttezza e il tempo di esecuzione, in base al quale finirete in classifica.

Io attualmente sono al posto 13357 in classifica, con 22 problemi risolti. Pensate di poter fare di meglio? Siete i benvenuti 🙂

Alla prossima!

I problemi del C++

Nel vasto mare della conoscenza siamo soliti scontrarci con fanatici religiosi che espongono nella loro bandiera questo o quel linguaggio e sono pronti a partire all’arrembaggio di chi non fa lo stesso. Io, personalmente, non ritengo di appartenere a nessuna di queste folli schiere, pur non disdegnando di passare a fil di spada chiunque la spari grossa o lanci invettive dettate da fanatismo. Per il vero pirata, il linguaggio non conta: non sara` il linguaggio che credete di conoscere a fare di voi dei veri pirati. Quindi, non dimenticate di inserire il cervello quando avete a che fare con queste persone: usate la vostra testa e difendete cio` che per voi e` giusto, senza curarvi del resto ne dimenticare di mettervi sempre in discussione. Detto questo, mi ricollego al titolo del post, segnalandovi una interessante discussione sul blog di codeimproved.net riguardo alcuni problemi del C++:

http://blog.codeimproved.net/2010/07/whats-wrong-with-c/

stranamente si mantiene su toni abbastanza civili, quindi vi pregherei, se volete prenderne parte, di mantenere lo stesso tenore, sperando che possa essere di aiuto anche per voi nel capire tante cose che potrebbero esservi di aiuto, se, come me, intendete approfondire  maggiormente lo studio del C++ … perche`, personalmente, piu` mi trovo a scendere nelle profondita` del linguaggio e piu` mi rendo conto di esserne del tutto ignorante. Alla prossima!

Programmazione funzionale, un assaggio di Haskell

Tantissimi programmano in C, C++, Java o affini, ma pochi bucanieri conoscono il paradigma a oggetti o imperativo e ancora di meno sanno che esistono altri paradigmi, come il paradigma funzionale. Cominciamo con il dire che il paradigma rappresenta l’insieme di strumenti concettuali forniti da un linguaggio di programmazione e che determinano il modo in cui il programmatore concepisce e scrive il programma, dunque mentre nei linguaggi cosiddetti “a oggetti” tendiamo un insieme di oggetti che interagiscono tra di loro e in quelli imperativi il programma viene inteso come un insieme di istruzioni da eseguire, nei linguaggi che usano il paradigma funzionale il programma assume la forma di un insieme di valutazioni di funzioni matematiche. I marinai d’acqua dolce che si troveranno per le mani un manuale di un linguaggio funzionale, noteranno innanzitutto la mancanza di alcuni costrutti a loro noti, come l’iterazione e l’assegnamento esplicito di variabili e senza i quali crederanno di non poter lavorare, bollando questo linguaggio come inutile e troppo complesso. Beh, fossi in voi, io farei fare un giro di chiglia a a tutta la gentaglia di quella risma: il vero pirata sa bene che

  1. La ricorsione e` equivalente all’iterazione, quindi si puo` fare tranquillamente a meno di quest’ultima, con un po’ di sforzo.
  2. Assenza di assegnamento esplicito significa anche assenza di side-effect.

Quest’ultimo punto necessita di particolare attenzione: dato che l’assegnamento di variabile non e` esplicito, ma avviene solo quando una funzione viene invocata, implica innanzitutto che un programmatore distratto non puo` modificare il valore di una variabile se non invocando un’altra funzione e di conseguenza che ogni funzione restituira` lo stesso output se invocata sullo stesso input, cosa non sempre vera con i linguaggi imperativi. Questo fenomeno, detto Trasparenza referenziale, comporta una maggiore facilita` nel testing e la dimostrazione di correttezza dei programmi; inoltre, l’assenza di variabili globali comporta che i programmi scritti utilizzando questo paradigma sono automaticamente thread-safe. Per cio` che riguarda l’efficienza del linguaggio, vi rimando al solito http://shootout.alioth.debian.org/ .  Per cio` che concerne lo stile, chiudo l’articolo con un assaggio di Haskell (http://www.haskell.org) , un linguaggio puramente funzionale che personalmente adoro, in modo che possiate ammirarne la sintassi.

Alla prossima!

quicksort.hs

qsort[] = []
qsort(x:xs) = qsort smaller ++ [x] ++ qsort larger
where
smaller = [a | a <- xs, a <= x]
larger = [b | b <- xs, b > x]


Usare Flex e Bison in Eclipse

Ogni buon corsaro deve ogni tanto, suo malgrado, tenersi buone le cosiddette autorità. Ragion per cui, tra una sortita casuale nel grande mare della conoscenza e l’altra, ho scritto alcuni moduli di un compilatore per la compagnia Olandese delle Indie Orientali. Perchè possiate seguirmi in questo viaggio, mi aspetto che abbiate almeno i rudimenti della scienza dei compilatori (se così non fosse, vi rimando all’ottimo testo “Compilers: Principles, Techniques & Tools” scritto da degli autentici mostri sacri in materia, vale a dire Alfred V. Aho, Monica S. Lam, Ravi sethi e Jeffrey D. Ullman). Il task da eseguire riguardava la scrittura di un analizzatore lessicale, o lexer, e di un analizzatore sintattico, o parser. Il tutto doveva essere integrato con un progetto in C++, ragion per cui la scelta degli strumenti da utilizzare è caduta su Flex per la scrittura del lexer e su Bison per il parser. Dovendo inoltre gestire a parte una mole abbastanza elevata di codice, ho scelto di utilizzare come ambiente di sviluppo integrato Eclipse CDT (http://www.eclipse.org/cdt/). Il problema principale in questi casi è riuscire a far interagire tutti questi elementi in modo costruttivo. Nel caso specifico, sussisteva la necessità di riuscire ad eseguire in un singolo colpo una serie di comandi all’interno dell’IDE, in particolare

  1. Compilare la specifica lessicale con flex
  2. Compilare la specifica sintattica con bison
  3. Compilare il codice generato con g++

conservando allo stesso tempo la possibilità di eseguirli separatamente. Fortunatamente, navigando nel wiki di Eclipse (http://wiki.eclipse.org/Main_Page) e l’help apposito (http://help.eclipse.org/ganymede/index.jsp) mi sono imbattuto in una funzionalità molto interessante, vale a dire la configurazione degli strumenti esterni (external tools configuration), da dove è possibile eseguire dei comandi esterni opportunamente configurati. Immaginiamo di voler creare una regola per eseguire la compilazione della specifica lessicale: basta procedere nel seguente modo:

  1. Run->External tools->External tools configurations
  2. Valorizziamo i campi nel modo seguente: inseriamo un nome che preferiamo (io ho scelto flex, con molta fantasia), come location inseriamo il path dell’eseguibile di flex (io ho lavorato su linux, quindi /usr/bin/flex), come working directory la directory in cui risiede il file e come argomenti il file con la specifica flex .
  3. Clicchiamo su Applica
  4. A questo punto, è necessario che il progetto venga automaticamente aggiornato, includendo i file generati con flex. Ragion per cui, clicchiamo sulla scheda Aggiorna
  5. Dalla scheda Aggiorna, selezioniamo “aggiorna risorse al termine/refresh resources upon completion” (a seconda del linguaggio del vostro IDE) e poi selezioniamo come opzione la directory che contiene la risorsa selezionata.

D’ora in poi, per eseguire la compilazione del file con la specifica flex, ci basta selezionare Run->External tools e da li cliccare sulla configurazione appena creata.

Questo strumento messo a disposizione di eclipse tuttavia ha a disposizione molte più opzioni rispetto a quelle dimostrate in questo articolo: se siete interessati, vi rimando a (http://help.eclipse.org/ganymede/index.jsp?topic=/org.eclipse.platform.doc.user/concepts/concepts-exttools.htm).

Alla prossima!

Behind deep blue

copertina

Behind deep blue

Ecco un bel libro per tutti voi bucanieri, ottimo per tenervi compagnia nei lunghi viaggi per i sette mari: si tratta di Behind deep blue , scritto da Feng Hsiung Hsu, padre fondatore del progetto Deep Blue, ovvero la macchina che riuscì a sconfiggere dopo un lungo match il campione mondiale di scacchi Garry Kasparov nel 1997, una vittoria che rappresentò la risoluzione di un problema posto da Claude Shannon nel 1949 (se vi sentite coraggiosi, potete leggere il suo articolo al riguardo, intitolato proprio “Programming a computer for playing chess“, che potete trovare digitando il titolo su google e cliccando su “mi sento fortunato”) sulla possibilità di creare un computer che fosse in grado di giocare a scacchi. Un altro aspetto interessante è il punto di vista dell’autore su questa vittoria, da molti ritenuta una vittoria della macchina sull’uomo; lo scrittore infatti vede questa vittoria piuttosto come una vittoria dell’uomo “toolmaker”, artefice, contro l’uomo “performer”, che potremmo tradurre come “artista”, insomma una battaglia tra due aspetti dell’umanità, entrambi a modo loro geniali e interessanti. È importante avere bene a mente questo punto di vista, a mio avviso, anche per ricordarci che una macchina non è intelligente di per se, ma siamo piuttosto noi esseri umani a renderla tale.

Feng Hsiung Hsiu si è laureato alla Carnegie Mellon University nel 1985 ed ha lavorato al progetto Deep Blue tra il 1989 e il 1997. Attualmente è un ricercatore presso Microsoft Research Asia.

Il libro è ovviamente in inglese, ma questo per dei veri pirati non costituirà un problema 🙂 inoltre l’autore cita tra le persone che gli hanno fornito aiuto e incoraggiamento alla Carnegie Mellon il professor Roberto Bisiani , laureato al politecnico di Milano in ingegneria elettronica. Ricordatevene, quando parlano male della qualità dei nostri ricercatori.

Essere dei bravi programmatori

Nessun marinaio d’acqua dolce puo` semplicemente imparare un linguaggio di programmazione, magari studiando da un qualsiasi manuale comprato in edicola per qualche monetina di rame e definirsi dopo questo inutile sforzo un vero pirata; Un vero pirata non conosce semplicemente un linguaggio, un vero pirata ragiona come tale e non si accontenta di avere conoscenze superficiali e fini a se stesse, utili per solcare un unico mare: il vero pirata impara talmente bene la lezione dell’amico/nemico mare da riuscire a solcare facilmente qualsiasi mare anche senza averci mai navigato prima, evitando facilmente le infide correnti e gli scogli nascosti con il solo aiuto delle sue conoscenze pregresse. Oltre a cio`, secondo il grande libro “Programming Perl”, scritto da Randal L. Schwarz e Larry Wall, temibili pirati, per il grande vascello della O’ Reilly, reperibile al porto http://oreilly.com/catalog/9780937175644/ per essere dei veri pirati bisogna acquisire quanto prima le Tre grandi virtu`, di cui vi parlo di seguito:

  1. Laziness – Pigrizia Questa virtu` vi spinge a compiere un grande sforzo per risparmiare il dispendio di energie globale, vi fa scrivere programmi che vi fanno risparmiare energia e che altre persone troveranno utili, al punto da documentarli al posto vostro e da risparmiarvi di rispondere a troppe domande su di essi.
  2. Impatience – Impazienza Cio` che ti fa sentire rabbia quando il computer non collabora e ti fa scrivere programmi che non si limitano a rispondere alle tue necessita`, ma addirittura le anticipano. O almeno, ci provano.
  3. Hubris – Arroganza Un orgoglio smisurato, tale da meritare una punizione divina di Zeus, e` la virtu` che ti fa scrivere (e mantenere) programmi buoni al punto che nessuno osera` parlarne male, o allo stesso modo cio` che ti fa riscrivere da zero software gia` esistenti, per la presunzione di poterli scrivere migliori.

Queste sono universalmente riconosciute come le virtu` fondamentali di ogni temibile bucaniere che si rispetti. Non sottovalutatele e non ridete di questo scritto, tradotto in italiano perche` aiuti la nascita di altri pirati italiani, anzi tenetelo sempre presente, perche` quando infuria la bufera nei sette mari, emerge la differenza tra un vero pirata e un marinaio d’acqua dolce nel vasto mare dell’informatica… e io mi auguro che voi non affoghiate tra i flutti, ma ne emergiate vittoriosi e pronti per una nuova avventura… e magari ritorniate a leggere questo blog. Saluti!