Wednesday, March 23, 2011

Large Hadron Rap

This is an evergreen which dates back to 2008, when this huge experiment was set up at CERN, to find the presence of antimatter... I came again into this some hours ago... And I had to republish this, along with its text and a translation for my fellow Italians... :)



(by the way, alongside there is a second experiment, which demonstrates why scientists should never try to play as showmen... :))

Saturday, March 12, 2011

Come scrivere codice incomprensibile: camuffaggio

Molte delle abilità alla base della scrittura di codice incomprensibile è l'arte del camuffagio: nascondere le cose, o farle apparire per quello che non sono. Molte di queste abilità dipendono da fatto che il compilatore è più bravo dell'occhio umano nel fare fini distinzioni.


Codice che si maschera da commento, e viceversa
Un'ottima idea è quella di includere del codice commentato, che però non sembra esserlo:

for(j = 0; j %lt; array_len; j += 8) { 
   total += array[j+0]; 
   total += array[j+1]; 
   total += array[j+2]; /* Il corpo principale
   total += array[j+3]; * del ciclo è espanso
   total += array[j+4]; * per aumentarne la
   total += array[j+5]; * velocità
   total += array[j+6]; */
   total += array[j+7]; 
}

Se non ci fosse il coloratore della sintassi, qualcuno si accorgerebbe mai che quattro righe di codice sono commentate?


Wednesday, March 9, 2011

Showing a Tree

In these GUIful days, where everything we do on a computer involves using the mouse pointer, sometimes there comes situations where we want an old-fashioned visualization of data.

For example, in these days I'm working hard on the restyling of an application which be released soon. This entails cutting old functions, adding comments, rewriting Makefiles, and rearranging the directory tree. Yes, the boring part off programming.

For easiness, I decided to print the whole directory tree listing of my project, to better visualize the changes I have to apply to my project. Thus, before coming into tree(1) I opted for the hard-coded solution, and produced this command:
ls -R | grep ":" | sed -e 's/://' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
Which will draw the currents' directory tree listing. Surely, using tree is much easier and more efficient, but this old-fashioned approach is what I like most!

Monday, February 21, 2011

Intercepting Keystrokes in any Application

This post is about one simple question: is Windows' software secure?

The answer is: no, it's not.

In the next few lines, I will show you how to easily write some code which will allow you to intercept text which is being typed into any other application! In particular, I will illustrate how to write a simple dll which will delete any lowercase vowel typed by the user...
And yes, this is one of the techniques behind keyloggers...

Since these are multimedial days, here there is a video showing how this dll can interact with a common application (Microsoft Word):



Tuesday, January 25, 2011

Hacking

L'idea di hacking può riunire assieme preconcetti come vandalismo elettronico, spionaggio, capelli tinti e piercing. La maggior parte della gente associa l'hacking all'infrazione della legge, etichettando quindi tutti coloro che si dedicano all'hacking come criminali. Sicuramente in giro c'è gente che utilizza tecniche di hacking per infrangere la legge, ma tutto questo non c'entra nulla con l'hacking in sé.

L'essenza dell'hacking è quella di trovare usi delle leggi o delle proprietà di una data situazione che non erano previsti oppure venivano tenuti segreti, al fine di riapplicarli con modalità nuove e con inventiva per risolvere un problema. Il problema in questione può essere la mancanza di accesso ad un computer, oppure cercare di trovare il modo per utilizzare vecchi apparecchi telefonici per gestire un modello di controllo ferroviario. Di solito, le soluzioni hackerate risolvono questi problemi in modo unico ed inimmaginabile da coloro che sono confinati nella metodologia convenzionale.


Friday, August 13, 2010

hippopotomonstrosesquipedaliophobia

Main Entry: hippopotomonstrosesquipedaliophobia
Part of Speech: n
Definition: Fear of long words

Oh, irony!

Thursday, April 29, 2010

Sunday, April 25, 2010

Pippo e le metavariabili

Qualsiasi programmatore si scontra, neanche troppo tardi, con la necessità di spiegare qualche algoritmo a qualche amico.
Se eccettuiamo casi di alto livello (come algoritmi sui grafi, o sui flussi, o di programmazione dinamica), il metodo migliore è quasi sempre partire dal codice.

Ed immediatamente, ecco che ci si imbatte in qualche variabile d'appoggio, di cui capiamo perfettamente il senso, ma a cui non sappiamo che nome dare...
Ed ecco quindi che, qualsiasi programmatore, ricorre agli stra abusati pippo, pluto, ciao, mamma, o che dir si voglia...



Queste variabili sono chiamate variabili metasintattiche. Una variabile metasintattica è un nome usato per indicare un generico elemento all'interno di una determinata categoria; l'uso è analogo a quello che in matematica si fa del nome x o y e z per indicare tre valori o tre variabili qualsiasi; oppure, in numerosi contesti, all'uso di Tizio, Caio e Sempronio per indicare tre generiche persone.


Saturday, March 20, 2010

Thursday, March 18, 2010

Multitasking

Sto scrivendo questo post mentre parlo al cellulare con una persona e mentre scrivo in chat ad un'altra. Mi sto autoconvincendo di poter fare queste tre cose contemporaneamente senza alcuna perdita di qualità? No... semplicemente perché non posso. Mi rendo conto che quello che la maggior parte di noi chiama "multitasking" si ottiene soltanto pagando un prezzo esorbitante.

Ma se un tempo credevo che il mito del multitasking fosse errato solo in riferimento al tempo (ossia, fare quattro cose contemporaneamente richiede molto più tempo di quanto ne sarebbe richiesto se facessimo le stesse quattro cose in sequenza), ora gli scienziati sanno anche che intacca la qualità. Ed è ancora peggio: non si parla solo del fatto che la qualità di quelle quattro cose portate avanti in parallelo sarà inferiore, ma anche del fatto che la nostra capacità di pensare ed apprendere sarà inferiore. Alcuni ricercatori credono che la costante, sempre più veloce e sempre impegnativa attività multitasking stia facendo sì che i giovani in particolare diventino meno capaci di seguire qualsiasi argomento con profondità.

Tuttavia, credo che il problema più grande (e che riguarda tutti) sia che la maggior parte delle persone coinvolte in attività mediatiche portate avanti in parallelo non si accorga minimamente di quanto faccia schifo in quello che fa.

Siamo convinti che possiamo scrivere e-mail ed allo stesso tempo parlare al telefono, senza un tangibile deterioramento di ciascuna delle comunicazioni.

Siamo convinti di poter studiare mentre guardiamo un film.

Siamo convinti di poter navigare in Internet mentre parliamo ad amici/compagni/colleghi.

Ma non possiamo! (Almeno, non senza conseguenze su vari livelli: tempo, qualità e la capacità di concentrazione)

Da un articolo di fondo sul Times:
"Decenni di ricerca (senza citare il buon senso comune) indicano che la qualità dei risultati e la concentrazione di pensiero di una persona si deteriorano quando uno affronta sempre più compiti".

E secondo Jordan Grafman, capo del dipartimento di neuroscienza cognitiva al National Institute of Neurological Disorders and Stroke:
"Sostengo che i bambini che chattano mentre studiano, mentre giocano online e mentre guardano la TV non riusciranno a fare un gran che, alla lunga".

E da questo studio sui giovani e l'uso dei media:
"Circa un terzo (30%) dei giovani afferma di parlare al telefono, di chattare, di guardare la TV, di ascoltare musica o di navigare su Internet per svagarsi “nella maggior parte del tempo” mentre studia".

La notizia non è completamente negativa, comunque. Dall'articolo sul Times:
"L'ampiezza della loro conoscenza e la loro capacità di trovare risposte è cresciuta rapidamente, ma la mia impressione che la loro abilità di scrivere in modo chiaro, concentrato o in modo narrativo si è in un certo senso consumata".

E sì, siamo tutti quanti capaci di fare qualcosa in parallelo (alcuni possono anche vincere una medaglia d'oro alle Olimpiadi mentre ascoltano musica da un iPod). Ma la scienza del cervello ci aiuta a spiegare questo fatto: possiamo fare due cose contemporaneamente nel momento in cui una delle due cose è stata praticata e ripetuta per talmente tanto tempo che non richiede più alcuna sorta di progetto cognitivo. (nell'articolo sul Times si parla moltissimo di questo).

Il problema maggiore, oggi, è che il sovraccarico cognitivo, provocato da talmente tante cose mediatiche sulle quali ci si deve concentrare, avviene ad un passo tale che il nostro cervello da cacciatori/raccoglitori non è stato in grado di evolversi così da poterlo sostenere e la modifica delle interconnessioni nervose non può fare più di tanto. E ovviamente è un fenomeno estremamente recente. Quando mio fratello era al liceo non c'erano gli iPod. Non c'erano i cellulari. Non c'era Internet, la posta elettronica o le chat. Non c'erano i blackberry. Non c'era la PSP. Ed io stesso ho visto con i miei occhi la nascita di tutte queste cose, forse (per fortuna?) molto molto prima di molti miei coetanei. Posso considerarmi come la linea di demarcazione tra "il vecchio" e "il nuovo". (I più giovani chiederanno sicuramente: come avrete fatto a sopravvivere?). Fino a 20 anni fa, il multitasking al liceo consisteva nel giocare a Pong a 1 bit mentre si flirtava con la ragazza un po' più sveglia della classe dell'epoca.

Ogni volta che parlo del grande mito del multitasking, le persone se ne escono sempre dicendomi come, in maniera molto semplicistica, loro hanno il cervello per fare queste cose. Eggià. Ma non ce l'hanno! Io non ce l'ho! Tu non ce l'hai! E forse ve ne rendereste conto se spegneste il vostro cellulare, chiudeste le vostre chat, toglieste quel "ding" che vi avvisa che avete ricevuto nuove email e vi limitaste a stare seduti per qualche momento.

Il problema più grande, per i giovani, sembra essere che essi non sanno come "limitarsi a stare seduti". Si agitano se per qualche momento non ricevono stimoli.

Una delle cose più interessanti discusse in quell'articolo è che i neuroscienziati hanno stabilito la specifica area del cervello responsabile del "cambio di contesto". E fortunatamente per alcuni di noi, sembra che questa parte del cervello funzioni sempre peggio, man mano che l'età avanzi. In due parole, più diventiamo vecchi, meno velocemente e meno efficacemente siamo in grado di portare avanti più cose in parallelo. Ma già la maggior parte dei genitori di questo periodo sanno che non riescono a capire come cavolo facciano i ragazzini a gestire tutte quelle cose che fanno insieme. La chiave della questione, però, è che anche se sappiamo di non essere più bravi di loro nel fare le cose contemporaneamente, loro non sono nemmeno la metà bravi rispetto a quanto pensano di esserlo.

E forse, c'è la possibilità che tu non sia così bravo come credi. ;)