Regression Testing

Test di Regressione, ovvero la pratica di eseguire una intera serie di test sul codice pre-esistente, in occasione di ogni nuova modifica apportata, alla ricerca di un potenziale errore introdotto con la modifica stessa. Sistemo il nuovo, rompo il vecchio. Capita più spesso di quanto possiate immaginare.

La pratica della Continuous Integration, e soprattutto dell’esecuzione automatica dei test aiuta molto, ed è ormai diffusa nelle software house anche di piccola o media dimensione.

Allora proprio non mi spiego perché questo errore nel codice del Google Reader ricompaia periodicamente.

Errore di Regressione
Errore di Regressione

Facebook, il pulsante “Mi Piace” e la Privacy (alle ortiche!)

GET /widgets/like.php?width=300&show_faces=1&layout=standard&href=http://www.imdb.com/title/tt1470023/
HTTP/1.1 Host: www.facebook.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.38 Safari/533.4
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __utma=87286159.95024650.1229115815.1257501181.1257504432.15;
locale=it_IT; lsd=oXejW; c_user=713360587; datr=1232743389-2[…..][…..]a82db3f71bcfb4e652b6;
lo=bG3rNTGVwNb_XhGkftfasg; lxe=eugenio%40schinina.it; lxs=2; sct=1274172610; xs=ca120d8ee7341b01dc86ee8a74c18154;
x-referer=http%3A%2F%2Fwww.facebook.com%2Fhome.php%23%2Fhome.php;
presence=DJ274172612G27[…..][…..]72612QQQ
RESPONSE
HTTP/1.1 200 OK P3P: CP=”DSP LAW” Content-Encoding: gzip Content-Type: text/html;
charset=utf-8
X-Cnection: close Date: Tue, 18 May 2010 08:50:49 GMT
Transfer-Encoding:  chunked
Connection: keep-alive
Vary: Accept-Encoding Connection: Transfer-Encoding

Qualche giorno fa ho espresso agli amici le mie preoccupazioni sulla presenza ormai irrimediabilmente diffusa del pulsante “Like” (da poco riadattato in italiano con “Mi piace”).

Davanti alle loro facce un po’ spiegavo che Facebook è in grado adesso di conoscere le nostre abitudini di navigazione. Sa cioè esattamente quando e su che pagina passiamo, da quale link arriviamo e varie altre cose, probabilmente.

La cosa incredibile è che – in barba a qualunque criterio di privacy – è in grado di associare in maniera diretta questa serie di informazioni al nostro profilo. Vedere sotto per credere.

I (don’t) like this fu*%#g pixel tracking!

Ogni sito che intenda inglobare il pulsante “I like” non fa altro che aprire un IFRAME verso un altro dominio (facebook.com, nella fattispecie). Nella chiamata che ne consegue vengono scambiate interessanti informazioni.

Quello che segue è l’estratto di uno sniffing effettuato accedendo non a Facebook ma ad uno di questi partner sites, nella fattispecie IMDB.com. Di tutto il traffico ho isolato la porzione che accede al widget di FB.

Nei log ho evidenziato quello che mi interessa far notare: nella seconda chiamata, quella fatta da un computer su cui l’utente (il sottoscritto) è loggato su Facebook, noterete la presenza di un paio di dati interessanti, fra cui il mio facebook userid. Devo andare oltre o posso fermarmi qui?

GET /widgets/like.php?width=300&show_faces=1&layout=standard&href=http://www.imdb.com/title/tt1470023/
HTTP/1.1 Host: www.facebook.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT ...... Safari/533.4
Accept: application/xml,application/x[.....]age/png,*/*;q=0.5
Accept-Encoding: gzip,d[.....].8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __utma=87286159.95024650.1229115815.1257501181.1257504432.15;
lo=6xfx4qgM83b_WezVn2tp-Q; datr=1232743389-2c1f750af4cf324[.....]e652b6;
locale=it_IT

Il server risponde

HTTP/1.1 200 OK P3P: CP="DSP LAW" Content-Encoding: gzip Content-Type: text/html;
charset=utf-8
X-Cnection: close Content-Length: 2465
Vary: Accept-Encoding Date: Tue, 18 May 2010 08:48:51 GMT
Connection: keep-alive
Set-Cookie: reg_fb_gate=http%3A%2F%2Fwww.facebook.com%2Fwi[.....][.....]e%252Ftt1470023%252F;
 path=/; domain=.facebook.com
Set-Cookie: reg_fb_ref=http%3A%2F%2Fwww.facebook.com%2Fwi[.....][.....]e%252Ftt1470023%252F;
path=/; domain=.facebook.com

Poco male. Tanti dati in qualche modo oscuri (c’è sicuramente già qualche tipo di tracking), ma niente di così evidente come invece avviene nella caso che segue…

GET /widgets/like.php?width=300&show_faces=1&layout=standard&href=http://www.imdb.com/title/tt1470023/
HTTP/1.1 Host: www.facebook.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows[.....] ri/533.4
Cache-Control: max-age=0
Accept: application/xml,application/xhtm[.....]=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch[.....]US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __utma=87286159.95024650.1229115815.1257501181.1257504432.15;
locale=it_IT; lsd=oXejW; c_user=713360587; datr=1232743389-2[.....][.....]a82db3f71bcfb4e652b6;
lo=bG3rNTGVwNb_XhGkftfasg; lxe=lamia%40email.it; lxs=2; sct=1274172610; xs=ca120[.....]c18154;
x-referer=http%3A%2F%2Fwww.facebook.com%2Fhome.php%23%2Fhome.php;
presence=DJ274172612G27[.....][.....]72612QQQ

E la risposta del server…

HTTP/1.1 200 OK P3P: CP="DSP LAW" Content-Encoding: gzip Content-Type: text/html;
charset=utf-8
X-Cnection: close Date: Tue, 18 May 2010 08:50:49 GMT
Transfer-Encoding:  chunked
Connection: keep-alive
Vary: Accept-Encoding Connection: Transfer-Encoding

Ho omesso il resto in quanto non interessante.

Notare che il parametro c_user è quello usato da Beacon, prima che venisse spento proprio per questioni di privacy.

Embè, dove sarebbe il problema?

Il problema non c’è, se accettate di fornire gratuitamente ad un operatore d’oltre oceano i dettagli delle vostre abitudini di navigazione. Probabilmente (ma io non ho modo di saperlo, vedi disclaimer) Facebook utilizza questi dati per personalizzare gli annunci che vi propone. O forse li vende ad altri. Chi lo sa?

Cosa posso fare per evitarlo?

Al momento credo che evitare di stare loggati su Facebook (Account, poi Logout) possa mitigare il problema, come documentano i traffici che ho riportato sopra, ma dovrei approfondire.

Alcuni doverosi disclaimer: primo, non sono uno specialista di sicurezza, anche se me ne interesso, quindi è possibile che in alcuni passaggi abbia preso delle cantonate. Secondo, non ho alcun elemento per dire che Facebook con quei dati ci faccia chissà che porcherie. Anzi, per essere precisi non ho neanche elementi di prova per dire che li memorizzino e li utilizzino in qualche modo. So però che cosa sarei in grado di farci io, avendoli a disposizione. E vi assicuro che potrebbe non piacervi. Terzo, Facebook non è certamente il primo è certamente non sarà l’ultimo sito web a fare uso di qualche variazione della tecnica del pixel tracking: la cosa (per me) sconvolgente è che lo faccia associando la navigazione in maniera assolutamente diretta al singolo utente. Infine, devo precisare che la mia analisi è tutt’altro che completa, per questioni di tempo, principalmente. Spero di poter dedicare un altro paio d’ore per completare gli scenari. Mi interessa capire in particolare se il problema si presenta anche quando non si è loggati in Facebook.

Twitter Powered Presentations

Ecco lo scenario.

Mentre fate la presentazione ad una ampia e qualificata audience, segnalate ad ogni avanzamento di slide il concetto chiave anche via twitter, a chi vi segue con quel comodo strumento.

Alla fine della presentazione mostrate una slide che raccoglie tutti i commenti di risposta che vi sono arrivati, lasciando l’aula a bocca aperta.

Si può fare davvero, con una semplice macro (o due) ed un Flash incorporato nella presentazione.

Fortunatamente qualcuno ha già pensato a preparare il tutto, scaricabile da qui.

Twitter Powerpoint Integration

Eclipse Galileo e i proxy

Uno di queli problemi che potrebbero portare via una mattinata intera…se non affrontati con una buona dose di …fortuna.

La mia fortuna è stata atterrare su questa pagina, dove si spiega che c’è un bug (la libreria apache httpclient non si comporta bene con i proxy con autenticazione NTLM, tipo ISA Server) e che c’è un modo per aggirarlo, ovvero aggiungere in fondo al file eclipse ini le seguenti informazioni:

-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer.httpclient
-Dhttp.proxyPort=8080
-Dhttp.proxyHost=myproxy
-Dhttp.proxyUser=mydomain\myusername
-Dhttp.proxyPassword=mypassword
-Dhttp.nonProxyHosts=localhost|127.0.0.1

Adesso siamo noi a dare qualche informazione a Google…

In realtà è così da sempre. Solo che adesso l’informazione rischia di essere un filo delicata.

Funziona così: voi dite a Google quanto velocemente vi state muovendo, e loro possono immaginarsi quanto traffico c’è sulla strada che state percorrendo. E naturalmente possono mettere a disposizione questa informazione anche per altri utenti. Più o meno.

If you use Google Maps for mobile with GPS enabled on your phone, that’s exactly what you can do. When you choose to enable Google Maps with My Location, your phone sends anonymous bits of data back to Google describing how fast you’re moving. When we combine your speed with the speed of other phones on the road, across thousands of phones moving around a city at any given time, we can get a pretty good picture of live traffic conditions.

La mappa del traffico
La mappa del traffico

[via]

Location Based Twitter

Mi è sempre sembrata una cosa molto sensata ed utile, associare la location ad ogni tweet.

I servizi che fanno già uso di questa feature (o quelli che potrebbero usarlo, mi viene in mente YouPosition del bravissimo Roberto) obbligano gli utenti a scrivere informazioni sulla location dentro il tweet, rubando alcuni preziosi caratteri ai pochi (140) disponibili.

Adesso pare che gli sviluppatori di twitter ci stiano finalmente lavorando, a rendere la funzione di localizzazione parte integrante della piattaforma. Trovandosi in una città straniera si potrebbe ad esempio decidere di seguire per qualche ora non i propri “friends” ma i propri vicini.

Mi aspetto interessanti applicazioni…

Simulatore di Vela con Google Earth

E’ stato già scritto che questo è “…il miglior esempio di utilizzo delle API del plugin di Google Earth”. C’è da crederci!
In realtà si tratta di un simulatore di navi, e non proprio di imbarcazioni a vela (la cui fisica, tra l’altro, è un po’ più complessa). Ugualmente stupefacente.

Qui il post del blog di Google Earth che ne spiega l‘origine e le potenzialità.

Cambia qualcosa nella ricerca di Google

Una cosa non troppo evidente e probabilmente non troppo significativa. Però è lì. E siccome si tratta di una pagina visitata parecchie milioni di volte al giorno, ecco, magari dal punto di vista del carico dei server cambia. O chissà quali motivi ci sono dietro…

Di che sto blaterando? Semplicemente di un piccolo ed ininfluente cambiamento (ancora non so se temporaneo o permanente) nel modo in cui Google visualizza i risultati di ricerca. Aggiungo anche che io l’ho notato solo adesso, ma magari è così già da qualche giorno o settimana…

Ok, ok, so che volete sapere di che sto parlando. Bene, date un’occhiata allo screenshot che ho catturato, qui sotto (click per ingrandire, se non fosse sufficiente la dimensione).

 

Una semplice ricerca su Google
Una semplice ricerca su Google

Visto? Che vi dicevo?

Ah, non avete notato niente? Ma la URL nella status bar, non vi sembra strana?

Precisiamo: è quella che Google ha sempre utilizzato, almeno da che mi ricordi io. Però fino a qualche tempo fa nella pagina c’era un javascript, attivato dall’evento “onMouseOver” sul link del risultato, che faceva comparire nella status sbar non quella url coi parametri di google (che altro non fa che fare il redirect, dopo aver plausibilmente conteggiato il click), ma la url di destinazione. Adesso invece viene esposta la vera url attivata dal click.

Qualcuno può confermare?

Fratello, dove sei?!?

Volete condividere la vostra posizione con gli amici? Se avere un account Google potete farlo, con il servizio Google Latitude.

E la privacy?

No, niente privacy. A differenza che nel caso di utilizzo di un GPS, il vostro terminale non è l’unico a sapere dove vi troviate. La vostra posizione viene infatti condivisa con i server di Google, e comunicata alla lista di amici che avrete selezionato (ed ammesso che loro accettino le condizioni di utilizzo del servizio).

Cosa fa esattamente Google Latitude?

Google Latitude “chiede” al vostro dispositivo le coordinate del punto in cui vi trovate, e come detto le condivide in rete.

Se non vedete il testo cerchiato di rosso, non avete tutti i prerequisiti per usare Latitude. Ma basta cambiare la lingua del browser.
Se non vedete il testo cerchiato di rosso, non avete tutti i prerequisiti per usare Latitude. Ma basta cambiare la lingua del browser.

Funziona solo dal cellulare, quindi…
No, funziona anche dal PC di casa o di ufficio. Mentre il cellulare mette tipicamente a disposizione delle API che il sistema può interrogare per conoscere la posizione via GPS o A-GPS, sul PC il framework Gears
(prerequisito obbligatorio) mette a disposizione una Geolocation API che sfrutta varie fonti dati, fra cui una mappa di moltissime reti wifi cittadine, per piazzarvi con una precisione piuttosto imbarazzante nel punto esatto in cui vi trovate.

 

Ok, voglio provarlo. Ma…a me dice che funziona solo dal cellulare!!!

Guarda bene l’immagine allegata a questo post. Se non vedi la porzione cerchiata di rosso, vuol dire che sul tuo browser non è possibile utilizzarlo. Magari non hai Gears installato (o attivato). Alcuni amici che hanno Chrome in Italiano mi dicono che non vedono quel messaggio: credo che il servizio (come nel caso delle funzionalità beta per Gmail Offline) venga messo a disposizione solamente degli utenti di lingua inglese. In tal caso è sufficiente installare la versione in inglese del browser. Oppure aspettare!

Da Blogger a WordPress, con l’aiuto di Google!

blogger2wpDovete convertire un blog da Blogger a WordPress, o il viceversa? Più facile a dirsi che a farsi, per una serie di ragioni legate all’imperfetto match fra i rispettivi formati (oltre ad una serie di problematiche legate alle impostazioni locali del server, che impattano sulle date, sui caratteri accentati etc etc.

Adesso però c’è un’arma in più, messa a disposizione proprio da Google, che peraltro ve la fa pure ospitare sui propri server.

Sono disponibili delle librerie python per la conversione fra i formati di importazione/esportazione di Blogger, WordPress e Live Journal, oltre che un discreto supporto al formato open BlogML.

Attenzione: usando la piattaforma di Google c’è un limite molto stringente (1 MB) per la dimensione dell’xml prodotto, quindi in questa configurazione il tool può essere usato solo per un numero limitato di articoli o per un blog piuttosto piccolo. Ovviamente potete sempre utilizzare il codice per conto vostro, nel qual caso il problema no si pone.

[via]