Confrontare gli hash con == o ===?

Prima di rispondere alla domanda, cerchiamo di capire la differenza nell’utilizzare == o === come operatori di confronto.

  • $a == $b TRUE se $a è uguale a $b dopo la manipolazione dei tipi.
  • $a === $b TRUE se $a è uguale a $b, e sono dello stesso tipo.

Se usiamo == per comparare gli hash, abbiamo questa sorpresa:

var_dump(md5('240610708') == md5('QNKCDZO')); // true

Se invece usiamo ===, non c’è alcuna sorpresa:

var_dump(md5('240610708') === md5('QNKCDZO')); // false

Qui non siamo davanti a nessun hash collision bensì al fatto che la comparazione con == è più “approssimativa” rispetto a quella con ===.

var_dump(md5('240610708')); // 0e462097431906509019562988736854
var_dump(md5('QNKCDZO')); // 0e830400451993494058024219903391

Se confrontiamo gli hash con === giustamente scopriamo che le 2 stringhe sono diverse, ma se usiamo == possiamo vedere come i due valori sono uguali perchè il primo hash corrisponde al numero 0*10462097431906509019562988736854 cioè 0, così come il secondo 0*10830400451993494058024219903391 (quindi 0 è uguale a 0).

Morale della favola? per comparare gli hash è vivamente consigliato utilizzare === oppure la funzione hash_equals.

Fossdroid: una settimana dopo

Bhe ragazzi, che dire?! posso ritenermi molto soddisfatto di come il web sta accogliendo Fossdroid dopo il post di lancio.

Fortunatamente prima del lancio avevo provveduto a mettere il sito sotto CDN (Cloudflare) e, a seguito di un upgrade del server, sono quindi riuscito a far fronte alle numerose visite.
Il sito che ha dato inizio alle danze è stato ycombinator in quanto Fossdroid è stato in frontpage per un bel po’ di ore, per darvi un’idea del traffico che ho dovuto affrontare ecco qui una screenshot di Google Analytics:

Lo si può proprio definire un Slashdot effect in quanto il sito è passato da 0 a più di 30.000 visitatori in pochi attimi (nelle prime 24h).
Adesso il sito si è stabilizzato e ha una media di 20/30 utenti attivi contemporaneamente: i backlinks stanno aumentando e credo occorra un mesetto per capire quello che sarà il traffico “definitivo”.
Colgo l’occasione di ringraziare chiunque abbia detto la sua sul progetto: ho cercato nel mio piccolo di rendere effettivi gran parte dei consigli/suggerimenti dati.

Stay tuned!

Fossdroid: Free and open source Android applications

Ciao ragazzi,
vi presento il mio ultimo side project: Fossdroid.
Fossdroid si interfaccia a F-Droid (che ringrazio infinitamente per il lavoro che svolge giorno dopo giorno) e ha lo scopo di mostrare, con una semplice interfaccia, tutte le applicazioni open source per Android (dando rilievo anche a quelle più popolari).

Colgo l’occasione anche per ringraziare i ragazzi di /r/fossdroid su Reddit.

Buona navigazione!

jQuery it’s a library, not a framework!

Purtroppo mi trovo ancora a leggere qualcuno che definisce jQuery come un framework: ciò che mi rende più triste è trovare riferimento di ciò in alcune proposte di lavoro o in qualche curriculum.
jQuery non è un framework!
Un framework solitamente forza il programmatore ad utilizzare un certo metodo/percorso per risolvere un determinato problema (seguendo solitamente qualche architectural pattern), una libreria invece non è altro che un insieme di funzioni/metodi.
Anche nel sito di jQuery viene palesemente scritto:

jQuery is a fast, small, and feature-rich JavaScript library.

Lo so che sono pignolo, però essendo jQuery ormai come il prezzemolo mi aspetto che la gente sappia cosa sia, ossia una libreria e non un framework.

Montare SSD su portatile ASUS ASUSPRO ESSENTIAL

Bene ragazzi, scrivo questo post per salvare la vita a chi come me desiderava montare una SSD nel suo portatile appena acquistato.
Il portatile in questione è l’ASUS PU551LD che considero un buon device escludendo le performance dell’HDD incluso (nel mio caso un HGST Travelstar Z5K500 HTS545050A7E680 500GB 5400 RPM 8MB Cache); l’SSD che andrà a sostituire l’HDD è un Samsung 850 EVO.


Dopo aver tolto la batteria dovete svitare le viti presenti nel case posteriore, a seguito di ciò dovrete sbloccare i ganci vicini alla batteria (sono 4 in tutto) con un piccolo cacciavite a taglio (o con le unghie).
Se siete riusciti nell’intento dovreste vedere un’immagine come la seguente:

La prima volta che ho avuto questa visione mi sono venuti i brividi a vedere quel cavo avvolgere l’HDD ma non preoccupatevi, è molto semplice da togliere e rimettere: dovete alzare la leva nera che lo blocca ed estrarlo pian piano da sinistra verso destra (c’è una linguetta azzurra che vi può essere d’aiuto).

Una volta liberato l’HDD non vi resta che svitare le 4 viti che tengono fermo il supporto al case e successivamente trascinarlo verso destra (scivolerà molto facilmente da sinistra verso destra).

Ora avete in mano l’HDD e quindi non vi resta che metterci l’SDD e ripercorrere al contrario tutto il percorso! Congratulazioni, ora siete i felici possessori di un portatile super veloce!