<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="it-it"><title>Qix.it</title><link href="http://qix.it/" rel="alternate" /><id>http://qix.it/</id><updated>2010-06-30T09:26:58+02:00</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/qixit" /><feedburner:info uri="qixit" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>45.465511</geo:lat><geo:long>9.204708</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-sa/2.0/" /><entry><title>Gola profonda</title><link href="http://feedproxy.google.com/~r/qixit/~3/P1zUU9-JHX4/" rel="alternate" /><updated>2010-06-30T09:26:58+02:00</updated><author><name> </name></author><id>http://qix.it/2010/06/gola-profonda/</id><category term="Motori di ricerca" /><category term="liquida" /><category term="wiki" /><content type="html">&lt;p&gt;No, non &lt;a href="http://it.wikipedia.org/wiki/La_vera_gola_profonda"&gt;questa qui&lt;/a&gt;, ma un nuovo servizio lanciato dal team di Liquida: &lt;a href="http://www.wikideep.it/"&gt;Wikideep&lt;/a&gt;, un bel motore di ricerca per pescare contenuti dai wiki sparsi per la rete. E' un servizio davvero ben fatto, anche dal punto di vista tecnico (che &amp;egrave; poi quello che a me intriga di pi&amp;ugrave;): nei miei passaggi periodici in Liquida ho avuto occasione di parlarne con&amp;nbsp;&lt;a href="http://it.linkedin.com/in/pioclemente"&gt;Pio&lt;/a&gt;&amp;nbsp;che l'ha sviluppato, e spero che prima o poi pubblichi qualcosa sull'architettura di Wikideep perch&amp;egrave; ne varrebbe davvero la pena. Nel frattempo, andate a dargli un occhiata.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=P1zUU9-JHX4:BN-JTi_3smw:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=P1zUU9-JHX4:BN-JTi_3smw:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=P1zUU9-JHX4:BN-JTi_3smw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/P1zUU9-JHX4" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2010/06/gola-profonda/</feedburner:origLink></entry><entry><title>Quant’è bello l’Ipad</title><link href="http://feedproxy.google.com/~r/qixit/~3/fJPZh96dkFM/" rel="alternate" /><updated>2010-05-31T08:38:41+02:00</updated><author><name> </name></author><id>http://qix.it/2010/05/quant-e-bello-l-ipad/</id><category term="Tecnologia" /><category term="ebook" /><category term="editoria" /><content type="html">&lt;p&gt;Stamattina, passando in edicola per prendere il settimanale ATM, sono rimasto a bocca aperta davanti a una pila di iPad nuovi di zecca, e dato che costavano poco mi sono detto: perch&amp;egrave; no? E quindi dopo un road test di mezz'ora sui mezzi pubblici, ecco le mie prime impressioni.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I pro.&lt;span style="font-weight: normal;"&gt;&amp;nbsp;E' leggerissimo! E cosa ancora pi&amp;ugrave; incredibile, alla Apple hanno fatto il miracolo: si piega senza rovinarsi. Lo schermo poi &amp;egrave; nitido e con un contrasto fantastico: i caratteri sono davvero neri, la pagina bianca, e in condizioni di luminosit&amp;agrave; normale non affatica assolutamente gli occhi. Ma la cosa pi&amp;ugrave; incredibile &amp;egrave; il &lt;em&gt;multi touch&lt;/em&gt;, per chi non l'avesse mai sperimentato funziona cos&amp;igrave;: si piegano indice e pollice fino a farli quasi toccare, li si porta sull'angolo dell'iPad, lo si afferra, e si fa un movimento diagonale. A quel punto, parte un'animazione (fatta cos&amp;igrave; bene che sembra davvero di spostare un oggetto fisico), e l'iPad cambia pagina. Fantastico! C'&amp;egrave; anche una modalit&amp;agrave; per chi odia far sbirciare i vicini in metropolitana, che permette di piegare il &lt;em&gt;device&lt;/em&gt;&amp;nbsp;fino a oscurare completamente i contenuti. Devo dire che le hanno pensate davvero tutte! Il collegamento dati poi ha funzionato a meraviglia, anche in galleria: sono riuscito a leggere senza interruzioni per una ventina di minuti.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I contro.&lt;/strong&gt;&amp;nbsp;Mi aspettavo qualche animazione alla Harry Potter, ma le fotografie sono tutte statiche: poco male, tanto trovo i video assolutamente noiosi e non li guardo nemmeno sul PC e tantomeno in televisione, e in movimento poi mi avrebbero probabilmente fatto venire il mal di mare. Il suo vero problema per&amp;ograve; &amp;egrave; che costa troppo poco: in metropolitana ce l'avevano quasi tutti. Peccato, speravo di fare un figurone, ma nessuno mi ha degnato neanche di un'occhiata di invidia o curiosit&amp;agrave;. Anzi, ho visto addirittura un modello pi&amp;ugrave; compatto, che sembra offrire contenuti gratuiti. Sar&amp;agrave; vero?&lt;/p&gt;
&lt;p&gt;Concludo con una foto, per farvi apprezzare il design rivoluzionario di questo splendido oggetto.&lt;/p&gt;
&lt;p&gt;&lt;img src="/site_media/luambo/uploads/2010/05/31/31052010.jpg" border="0" alt="iPad" width="520" height="390" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=fJPZh96dkFM:C4IkJDEn97c:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=fJPZh96dkFM:C4IkJDEn97c:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=fJPZh96dkFM:C4IkJDEn97c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/fJPZh96dkFM" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2010/05/quant-e-bello-l-ipad/</feedburner:origLink></entry><entry><title>Yes, I am a data geek / 3</title><link href="http://feedproxy.google.com/~r/qixit/~3/uJTGdi-9rIE/" rel="alternate" /><updated>2010-05-26T09:27:28+02:00</updated><author><name> </name></author><id>http://qix.it/2010/05/yes-i-am-a-data-geek-3/</id><category term="Sviluppo" /><category term="datageek" /><category term="mysql" /><content type="html">&lt;p&gt;Un piccolo intermezzo in cui vi racconto come far inserire a MySQL un grafico ASCII nei risultati di una query.&lt;/p&gt;
&lt;p&gt;Spesso un grafico &amp;egrave; la soluzione migliore per cogliere a colpo d'occhio la distribuzione e l'andamento di una serie di dati. Il problema &amp;egrave; che, per la maggior parte delle persone, fare un grafico vuol dire estrarre i dati, importarli in Excel (o equivalente), aggiustare il formato delle celle, e smanettare qualche minuto con il mouse per trovare la rappresentazione giusta.&lt;/p&gt;
&lt;p&gt;Io invece sono un pigro, e se posso fare tutto da linea di comando con qualche pressione di tasto in pi&amp;ugrave;, e qualche movimento del mouse in meno, sono contento. E poi i grafici ASCII fanno tanto &lt;em&gt;vintage&lt;/em&gt;. :P&lt;/p&gt;
&lt;p&gt;Come esempio prendiamo una tabella le cui righe hanno un campo data, e proponiamoci di esaminare i giorni in cui si raccolgono il maggior numero di dati, e la loro distribuzione. La tabella dei post di un blog &amp;egrave; un esempio calzante, io user&amp;ograve; la tabella che raccoglie i post dal database di test di BlogBabel. Il campo che ci interessa &amp;egrave; uno solo, date_published, un campo di tipo datetime che raccoglie appunto la data di pubblicazione. Come prima cosa, vediamo quale &amp;egrave; il suo valore massimo per capire con che tipo di numeri abbiamo a che fare&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select
    -&amp;gt;    cast(date_published as date) as day,
    -&amp;gt;    count(*) as num
    -&amp;gt; from crawler_entry
    -&amp;gt; group by day
    -&amp;gt; order by num desc
    -&amp;gt; limit 1;
+------------+-------+
| day        | num   |
+------------+-------+
| 2010-05-21 | 22837 | 
+------------+-------+
&lt;/pre&gt;
&lt;p&gt;Ci sono probabilmente modi pi&amp;ugrave; sofisticati di fare la stessa cosa, ma per i nostri scopi va bene quanto vedete qui sopra: facciamo un cast del campo datetime a date in modo da ridurlo al valore del giorno scartando ora minuti e secondi, raggruppiamo e contiamo le righe ottenendo i singoli totali per giorno (se avessimo un campo valore nelle singole righe useremmo sum() invece di count()), ordiniamo i risultati per i totali in ordine discendente, e teniamo solo il primo scartando tutto il resto. Phew, pi&amp;ugrave; lungo da spiegare che da fare.&lt;/p&gt;
&lt;p&gt;A questo punto, possiamo studiare un altro po' i dati per decidere quanti sono i giorni singoli e quali sono quelli con un totale significativo, in modo da limitare l'insieme dei risultati generati e renderlo pi&amp;ugrave; facilmente analizzabile. Proviamo ad esempio a vedere quanti sono i giorni che hanno almeno 1000 post&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select count(day) from (
    -&amp;gt;    select cast(date_published as date) as day
    -&amp;gt;    from crawler_entry
    -&amp;gt;    group by day
    -&amp;gt;    having count(*) &amp;gt; 1000
    -&amp;gt; ) as aggregate;
+------------+
| count(day) |
+------------+
|         79 | 
+------------+
&lt;/pre&gt;
&lt;p&gt;Il meccanismo &amp;egrave; lo stesso che abbiamo usato sopra: facciamo un cast del campo datetime a date, raggruppiamo in modo da avere i singoli totali, e infine usiamo i risultati come una tabella virtuale di cui contiamo le righe. Semplice, no?&lt;/p&gt;
&lt;p&gt;A questo punto abbiamo tutte le informazioni che ci servono per estrarre i risultati definitivi e creare il nostro grafico ASCII: quale &amp;egrave; il valore massimo del dato (22.000 e rotti), quale &amp;egrave; la soglia minima che ci interessa (1.000), quante righe otterremo (79). Pronti? Via!&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select
    -&amp;gt;    cast(date_published as date) as giorno,
    -&amp;gt;    concat(lpad(count(*), 7, ' '), ' ', rpad('', count(*) / 1000, '#')) as `numero di post`
    -&amp;gt; from crawler_entry
    -&amp;gt; group by giorno having count(*) &amp;gt;1000
    -&amp;gt; order by giorno desc;&lt;/pre&gt;
&lt;p&gt;Gli elementi di base sono gli stessi che abbiamo gi&amp;agrave; visto sopra: il campo data ottenuto con il cast, il raggruppamento per avere i totali singoli, un limite per ottenere solo le righe con totale maggiore di 1.000, l'ordinamento discendente per giorno. La novit&amp;agrave; introdotta in questa query &amp;egrave; il campo che abbiamo chiamato &lt;em&gt;numero di post&lt;span style="font-style: normal;"&gt;, che sono poi le singole barre del nostro grafico ASCII. Per ottenerlo:&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;facciamo un pad a sinistra del valore numerico del totale, in modo che sia allineato a destra&lt;/li&gt;
&lt;li&gt;facciamo un padding di una stringa vuota che usi il carattere # come riempimento, e lo ripeta per un numero di volte uguale al totale diviso per 1.000 (la nostra soglia minima)&lt;/li&gt;
&lt;li&gt;concateniamo i due valori ottenuti (il totale allineato e i #) con uno spazio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il risultato &amp;egrave; una cosa cos&amp;igrave;&lt;/p&gt;
&lt;pre&gt;+------------+---------------------------------+
| giorno     | numero di post                  |
+------------+---------------------------------+
| 2010-05-25 |    4597 #####                   | 
| 2010-05-21 |   22837 ####################### | 
| 2010-05-20 |   21067 #####################   | 
| 2010-05-19 |   16395 ################        | 
| 2010-05-18 |   14056 ##############          | 
| 2010-05-17 |   12090 ############            | 
| 2010-05-16 |    5683 ######                  | 
| 2010-05-15 |    4623 #####                   | 
| 2010-05-14 |    8579 #########               | 
| 2010-05-13 |    8506 #########               | 
| 2010-05-12 |    8310 ########                | 
| 2010-05-11 |    7390 #######                 | 
| 2010-05-10 |    7113 #######                 | 
| 2010-05-09 |    3639 ####                    | 
| 2010-05-08 |    2863 ###                     | 
| 2010-05-07 |    5291 #####                   | 
| 2010-05-06 |    5339 #####                   | 
| 2010-05-05 |    5381 #####                   | 
| 2010-05-04 |    4959 #####                   | 
| 2010-05-03 |    4832 #####                   | 
| 2010-05-02 |    2653 ###                     | 
[... snip...]
&lt;/pre&gt;
&lt;p&gt;Semplice, no?&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=uJTGdi-9rIE:xtz-uiKbgOs:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=uJTGdi-9rIE:xtz-uiKbgOs:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=uJTGdi-9rIE:xtz-uiKbgOs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/uJTGdi-9rIE" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2010/05/yes-i-am-a-data-geek-3/</feedburner:origLink></entry><entry><title>Yes, I am a data geek / 2</title><link href="http://feedproxy.google.com/~r/qixit/~3/bmqAIJZP5Js/" rel="alternate" /><updated>2010-05-24T15:33:20+02:00</updated><author><name> </name></author><id>http://qix.it/2010/05/yes-i-am-a-data-geek-2/</id><category term="Sviluppo" /><category term="blogbabel" /><category term="datageek" /><content type="html">&lt;p&gt;Mi ero &lt;a href="/2009/11/blogbabel-30/"&gt;ripromesso&lt;/a&gt; di raccontare un po&amp;rsquo; delle esperienze tecniche fatte con &lt;a href="http://orientalia4all.net/post/vi-piace-la-nuova-blogbabel"&gt;Blogbabel&lt;/a&gt;, poi i mesi passano e non sembra mai essere il momento buono, cos&amp;igrave; ho deciso di buttare gi&amp;ugrave; qualche appunto sperando di trovare nei prossimi giorni le motivazioni per arricchirli ed espanderli.&lt;/p&gt;
&lt;p&gt;Se dovessi scegliere una sola delle tante cose imparate in questi ultimi  anni, non avrei molti dubbi nell'indicare la dimestichezza con le  basi dati relazionali. Non solo perch&amp;egrave; giocare con i dati mi diverte,  ma anche perch&amp;egrave; credo sia un aspetto spesso trascurato da chi sviluppa,  e di importanza fondamentale per le prestazioni e la congruenza  delle informazioni presentate.&lt;br /&gt;&lt;br /&gt;Il mio percorso in questo senso  con BlogBabel &amp;egrave; stato forzato da due condizioni: le risorse hardware  limitate (per un anno e mezzo BlogBabel ha convissuto su un vecchio  Celeron 900 con poca RAM e dischi lenti insieme ad altre  applicazioni), e la mole di dati che cresceva a ritmo esponenziale  (quando ho passato a Liquida, il db era gi&amp;agrave; maggiore di 50Gb).&lt;br /&gt;&lt;br /&gt;Le  ottimizzazioni fatte al db hanno quindi seguito fasi successive: completato  un ciclo, si rendeva necessario dopo poco tempo passare a un livello  di ottimizzazione superiore per non dover buttare altro hardware  dentro al progetto. Semplificando, le fasi di ottimizzazione che ho  attraversato sono state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;analisi delle query e ottimizzazione  degli indici&lt;/li&gt;
&lt;li&gt;denormalizzazione di alcuni campi e tabelle, per  ottimizzare filtri e ordinamento nei join&lt;/li&gt;
&lt;li&gt;calcolo periodico  (batch) dei dati aggregati pi&amp;ugrave; importanti&lt;/li&gt;
&lt;li&gt;creazione di trigger  per l'alimentazione online di aggregati&lt;/li&gt;
&lt;li&gt;spostamento dei trigger  su una coda di eventi processata da programmi esterni&lt;/li&gt;
&lt;li&gt;utilizzo  di pi&amp;ugrave; livelli di aggregati ibridi batch e online&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L'insegnamento principale che  ho tratto da questo lungo e laborioso processo &amp;egrave; che non tutti i  dati devono essere sempre consistenti: molte informazioni (e spesso  sono quelle pi&amp;ugrave; onerose da generare) possono avere fluttuazioni nella  loro consistenza rispetto al resto dei dati, senza per questo avere  un impatto significativo sull'usabilit&amp;agrave; o sull'esperienza utente;  quello che importa &amp;egrave; che siano "periodicamente consistenti".&lt;br /&gt;&lt;br /&gt;Da  cui discende un altro aspetto fondamentale: anche se a prima vista elaborare  alcuni tipi di dati o reagire a certi eventi direttamente all'interno  del database, sembra l'operazione pi&amp;ugrave; semplice e lineare, &amp;egrave; in  realt&amp;agrave; il modo migliore per incrementarne in maniera esponenziale la complessit&amp;agrave;  e i rischi.&lt;br /&gt;&lt;br /&gt;Nei prossimi giorni vedr&amp;ograve; di trovare il tempo per  entrare un po' nei dettagli di questi argomenti, sempre che a  qualcuno interessi.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=bmqAIJZP5Js:moAWb7msEEA:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=bmqAIJZP5Js:moAWb7msEEA:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=bmqAIJZP5Js:moAWb7msEEA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/bmqAIJZP5Js" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2010/05/yes-i-am-a-data-geek-2/</feedburner:origLink></entry><entry><title>Blogbabel 3.0</title><link href="http://feedproxy.google.com/~r/qixit/~3/rqaTgC7BJTE/" rel="alternate" /><updated>2009-11-16T15:21:48+02:00</updated><author><name> </name></author><id>http://qix.it/2009/11/blogbabel-30/</id><category term="Varie" /><category term="blogbabel" /><category term="top100" /><content type="html">&lt;p&gt;Come alcuni di voi si saranno accorti, settimana scorsa Blogbabel ha cambiato aspetto. Avrei voluto scrivere qualcosa prima, ma il poco sonno accumulato in queste ultime settimane e un ritorno di influenza mi hanno fatto rimandare fino ad ora.&lt;/p&gt;
&lt;p&gt;Le modifiche rilasciate sono il primo risultato della collaborazione con il team di Liquida (che per chi non lo sapesse ha rilevato Blogbabel ormai quasi due mesi fa), e non sono state solo cosmetiche ma hanno avuto un impatto significativo anche sul backend, la struttura dei dati raccolti, l'ottimizzazione per i motori di ricerca e l'usabilit&amp;agrave;. Non sto a ripetere&amp;nbsp; qui l'elenco di cosa &amp;egrave; cambiato, &lt;a href="http://orientalia4all.net/post/vi-piace-la-nuova-blogbabel"&gt;altri l'hanno fatto&lt;/a&gt; prima di me e anche &lt;a href="http://www.banzai.it/generali/cs/12112009blogbabel.php"&gt;il comunicato stampa di Banzai&lt;/a&gt; &amp;egrave; abbastanza trasparente al riguardo.&lt;/p&gt;
&lt;p&gt;Quello che posso aggiungere a quanto gi&amp;agrave; scritto, sono le mie impressioni dopo un paio di mesi di lavoro a stretto contatto con il team di Liquida. Partiamo dalla cosa pi&amp;ugrave; importante: le aspettative che mi ero creato durante la fase di negoziazione, che hanno avuto un peso rilevante nella scelta di vendere a Liquida, sono state ampiamente soddisfatte e anzi superate.&lt;/p&gt;
&lt;p&gt;Da Liquida ho trovato entusiasmo, e non solo quel tipo di entusiasmo che dovrebbe contraddistinguere le startup con investitori alle spalle, persone giovani e capaci nel team, e progetti interessanti da sviluppare. Certo, in Liquida non manca tutto questo e quando passo da loro in ufficio mi sembra di respirare una boccata d'aria rispetto all'atmosfera stagnante e piuttosto deprimente del mio lavoro "normale". Quello che non mi aspettavo &amp;egrave; l'accoglienza riservata a Blogbabel, l'energia creativa che ho visto spendere in brainstorming su come valorizzare il lavoro fatto in questi anni, l'attenzione per le specificit&amp;agrave; del progetto. La differenza emotiva per me che sviluppo rispetto agli anni precedenti &amp;egrave; stata enorme, l'entusiasmo (per un progetto che ho partorito e amato per molto tempo) contagioso e mi sono ritrovato a lavorare e immaginare Blogbabel come non succedeva ormai da tanto.&lt;/p&gt;
&lt;p&gt;Insieme a questo, trovare nel gruppo persone davvero in gamba con competenze specifiche su SEO, design, usabilit&amp;agrave; e altre discipline in cui da solo mi barcameno con scarso successo, &amp;egrave; servito a scaricarmi da responasabilit&amp;agrave; che mal sopporto e farmi concentrare su quello che mi piace di pi&amp;ugrave; e credo di saper fare meglio: lo sviluppo e la modellazione dei dati.&lt;/p&gt;
&lt;p&gt;Come dicevo sopra, il risultato &amp;egrave; solo l'inizio di quello che sembra sar&amp;agrave; un lavoro lungo, intenso e (speriamo) pieno di soddisfazioni. Nei prossimi giorni, appena mi sono ripreso un po', vedr&amp;ograve; di pubblicare qualche post su alcune tecniche che ho utilizzato per ottimizzare l'accesso ai dati, condito magari da considerazioni un po' pi&amp;ugrave; generali sulle specificit&amp;agrave; di servizi web di medie dimensioni (o grandi, se guardiamo alle dimensioni del db di Blogbabel che &amp;egrave; arrivato a una cinquantina di Gb di dati "live"). Se nel frattempo avete qualche curiosit&amp;agrave; particolare, chiedete pure nei commenti.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=rqaTgC7BJTE:7jXWH7HtO98:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=rqaTgC7BJTE:7jXWH7HtO98:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=rqaTgC7BJTE:7jXWH7HtO98:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/rqaTgC7BJTE" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2009/11/blogbabel-30/</feedburner:origLink></entry><entry><title>Yes, I am a data geek / 1</title><link href="http://feedproxy.google.com/~r/qixit/~3/DYwgTOLeUu0/" rel="alternate" /><updated>2009-09-11T13:42:51+02:00</updated><author><name> </name></author><id>http://qix.it/2009/09/yes-i-am-a-data-geek-1/</id><category term="Smanettando" /><category term="datageek" /><category term="mysql" /><content type="html">&lt;p&gt;
Riprendo a parlare di cose serie, dopo i deragliamenti di questi giorni, con il primo di una serie aperiodica di post sulla manipolazione dei dati. E' un argomento che mi ha sempre affascinato, e in questa serie descriver&amp;ograve; per ogni post un piccolo problema che mi &amp;egrave; capitato di dover risolvere lavorando, e una delle sue possibili soluzioni. Edit: questo post &lt;a href="http://stacktrace.it/2009/09/yes-i-am-a-data-geek-1/"&gt;&amp;egrave; anche su Stacktrace&lt;/a&gt;, pensavo fosse troppo semplice per Stacktrace ma Antonio la pensa diversamente.
&lt;/p&gt;
&lt;p&gt;In questo primo post vi racconto un problemino che mi &amp;egrave; capitato sottomano giusto ieri in ufficio: come calcolare degli aggregati periodici (ad esempio ogni 5 minuti) da un elenco di rilevazioni del traffico di un servizio. I dati che ho ricevuto erano in formato Excel, ma per semplificarci la vita senza inciampare in tabelle pivot e soprattutto dato che siamo &lt;em&gt;geek&lt;/em&gt;, per trattarli utilizzeremo un database relazionale (nel mio caso MySQL).&lt;/p&gt;
&lt;p&gt;Iniziamo a dare un'occhiata ai dati, che sono semplici e consistono in righe ognuna composta da due colonne: l'ora di rilevazione, e il numero di kbyte inviati. Ogni riga rappresenta una singola transazione. Disegniamo una semplice tabella MySQL, con una chiave primaria generica (potremmo anche farne a meno) e un indice sul campo con l'ora di rilevazione:&lt;/p&gt;
&lt;pre&gt;CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `tstamp` time NOT NULL,
  `size` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `idx_tstamp` (`tstamp`)
) ENGINE=InnoDB;
&lt;/pre&gt;
&lt;p&gt;Carichiamo i dati (io ho usato la console di Python, ma ci sono altri mille modi per farlo tra cui &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/load-data.html"&gt;LOAD DATA LOCAL INFILE&lt;/a&gt;), e vediamo come si presentano un paio di righe:&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select * from test limit 2;
+----+----------+------+
| id | tstamp   | size |
+----+----------+------+
|  1 | 07:02:06 |    2 | 
|  2 | 07:02:09 |    2 | 
+----+----------+------+
&lt;/pre&gt;
&lt;p&gt;Il primo problema &amp;egrave;: come facciamo a raggruppare tutte le righe in intervalli di 5 minuti? Se proviamo a disegnare un paio di serie di minuti, la risposta &amp;egrave; abbastanza evidente (almeno per chi come me + abituato a ragionare in modo visuale):&lt;/p&gt;
&lt;pre&gt;minuti                indice per l'aggregazione
 0  1  2  3  4        0
 5  6  7  8  9        1
10 11 12 13 14        2
&lt;/pre&gt;
&lt;p&gt;Capito come fare? Semplice: basta dividere il minuto per l'intervallo che vogliamo considerare (in questo caso 5), e scartare i decimali utilizzando la funzione &lt;em&gt;floor&lt;/em&gt;. Vediamo come si fa in MySQL:&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select tstamp,
       floor(minute(tstamp)/5) as indice
       from test limit 2;
+----------+--------+
| tstamp   | indice |
+----------+--------+
| 07:02:06 |      0 | 
| 07:02:09 |      0 | 
+----------+--------+
&lt;/pre&gt;
&lt;p&gt;Ovviamente per aggregare le nostre righe, oltre all'indice dei minuti avremo bisogno anche l'ora:&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt; select
      hour(tstamp) as ora,
      floor(minute(tstamp) / 5) as intervallo,
      sum(size) as traffico from test
      group by ora, intervallo
      order by tstamp limit 3;
+------+------------+----------+
| ora  | intervallo | traffico |
+------+------------+----------+
|    7 |          0 |        6 | 
|    7 |          1 |     1604 | 
|    7 |          2 |       42 | 
+------+------------+----------+
&lt;/pre&gt;
&lt;p&gt;Funziona? Direi di si, peccato solo che i risultati aggregati siano poco eleganti: due campi diversi per ora e intervallo, nessuno dei quali formattati, non aiutano certo la leggibilit&amp;agrave;. Possiamo fare di meglio: un campo unico per ora e intervallo, formattato e con il giusto &lt;em&gt;padding&lt;/em&gt; (lo zero per ore e minuti a singola cifra), un intervallo descrittivo che non sia l'indice opaco che funziona per MySQL ma dice molto poco a chi dovr&amp;agrave; utilizzare i dati, e aggiungiamo anche un campo ulteriore con il numero di pacchetti del periodo oltre alla somma del traffico:&lt;/p&gt;
&lt;pre&gt;mysql&amp;gt;
      select concat(
          lpad(hour(tstamp), 2, '0'),
          ':',
          lpad(floor(minute(tstamp) / 5) * 5, 2, '0'),
          '-',
          lpad(floor(minute(tstamp) / 5) * 5 + 5, 2, '0')
       ) as periodo,
       count(*) as trasmissioni,
       sum(size) as traffico
       from test
       group by hour(tstamp), floor(minute(tstamp) / 5)
       order by tstamp limit 3;
+----------+--------------+----------+
| periodo  | trasmissioni | traffico |
+----------+--------------+----------+
| 07:00-05 |            3 |        6 | 
| 07:05-10 |            1 |     1604 | 
| 07:10-15 |            3 |       42 | 
+----------+--------------+----------+
&lt;/pre&gt;
&lt;p&gt;Chiaro? No? Ok, guardiamo in dettaglio come &amp;egrave; costruita la query.&lt;/p&gt;
&lt;p&gt;Il primo campo che estraiamo &amp;egrave; il periodo su cui vengono aggregati i dati, composto con valori diversi uniti dalla funzione  &lt;em&gt;concat&lt;/em&gt;, che altro non fa che unire insieme in un unico campo i valori che gli vengono passati: l'ora, il separatore ':', il primo minuto dell'intervallo, il separatore '-', l'ultimo minuto dell'intervallo. Su ora e minuti facciamo poi il &lt;em&gt;padding&lt;/em&gt; premettendo uno zero se il numero &amp;egrave; in singola cifra, utilizzando la funzione &lt;em&gt;lpad&lt;/em&gt;. Il secondo e il terzo campo sono le semplici funzioni aggregate di conteggio del numero di righe dell'intervallo, che ci restituisce il numero di trasmissioni, e la somma del traffico.&lt;/p&gt;
&lt;p&gt;Dato poi che in questa query non abbiamo estratto l'indice di aggregazione come campo visibile, dobbiamo dichiararlo esplicitamente come clausola del &lt;em&gt;group by&lt;/em&gt; invece di richiamarlo per nome come abbiamo fatto nella query precedente.&lt;/p&gt;
&lt;p&gt;A questo punto, se dobbiamo passare i dati a qualche collega che deve importarli in Excel per generare un grafico, ci basta passare la query al client mysql come valore dell'argomento '-e', aggiungere '--batch' in modo da ottenere i risultati come campi delimitati da tabulatore, e redirigere l'output su un file.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=DYwgTOLeUu0:DFse9BHGQoc:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=DYwgTOLeUu0:DFse9BHGQoc:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=DYwgTOLeUu0:DFse9BHGQoc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/DYwgTOLeUu0" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2009/09/yes-i-am-a-data-geek-1/</feedburner:origLink></entry><entry><title>Piccoli chiarimenti</title><link href="http://feedproxy.google.com/~r/qixit/~3/WA_TpZrzH3o/" rel="alternate" /><updated>2009-09-10T13:36:14+02:00</updated><author><name> </name></author><id>http://qix.it/2009/09/sfatiamo-un-po-di-miti/</id><category term="Blogging" /><category term="blogbabel" /><content type="html">&lt;p&gt;Gli ultimi giorni sono stati abbastanza faticosi, cosa che certo non aumenta il mio gi&amp;agrave; scarso interesse per le polemiche intorno a BlogBabel. Credo ci sia per&amp;ograve; bisogno di qualche chiarimento, in particolare rispetto al post di Gianluca che propone una versione astiosa, grottesca, offensiva e con molte falsit&amp;agrave; di una trattativa svoltasi nei mesi scorsi.&lt;/p&gt;
&lt;p&gt;
Qualche mese fa avevo messo in giro la voce che avrei voluto vendere BlogBabel, e tra gli altri si era fatto avanti anche Gianluca facendosi tramite dell'interesse di due aziende. Fin da subito l'affare sembrava poco chiaro: delle due aziende potevo incontrarne solo una, ma sapevo gi&amp;agrave; che non avrei dovuto accettare una loro offerta; la seconda non era interessata a vedermi, e avrebbe comprato a scatola chiusa. Non ho grandi esperienze di trattative commerciali, ma nei miei 15 anni di lavoro per grandi aziende, spesso su progetti da milioni di euro, una cosa cos&amp;igrave; non l'avevo mai vista e mi era sembrata da subito poco seria. Decido comunque di proseguire, per vedere dove si sarebbe andato a parare.
&lt;/p&gt;
&lt;p&gt;
In circa un mese e mezzo riesco ad incontrare una volta solo la prima azienda (quella la cui offerta, secondo Gianluca, avrei dovuto rifiutare), mentre per la seconda scrivo una paginetta generica su BlogBabel ma non si arriva poi a discutere di come &amp;egrave; strutturato il servizio, come si pu&amp;ograve; trasferire, cosa serve per farlo girare, e tantomeno cosa vorrebbe farne il possibile acquirente. Nel frattempo, ricevo ogni tanto le telefonate dell'&amp;ldquo;assistente&amp;rdquo; di Gianluca, che sostiene che la seconda offerta &amp;egrave; sempre valida e si sta considerando come procedere, fino a quando mi viene chiesto un appuntamento per discuterne con Gianluca.
&lt;/p&gt;
&lt;p&gt;
Decidiamo di prendere una pizza vicino a casa mia (se non altro per minimizzare lo sforzo dedicato a una trattativa che gi&amp;agrave; mi sembrava &lt;em&gt;doomed&lt;/em&gt;), e Gianluca mi presenta l'offerta: 60.000 euro (non 80 come hai scritto, Gianluca...), non trattabili, da accettare entro una manciata di ore pena il ritiro immediato, senza niente di scritto e nessun dettaglio su chi/cosa/come. Come ulteriore fattore di pressione nei miei confronti, mi viene detto che una societ&amp;agrave; di consulenza &amp;egrave; gi&amp;agrave; pronta per sviluppare un servizio simile a BlogBabel, nel caso io non avessi voluto vendere o avessi fatto difficolt&amp;agrave;. Peccato che io abbia una certa esperienza su grandi progetti IT in ambito Enterprise (caro Gianluca, non puoi pensare sempre di avere a che fare con dei fessi, sono 15 anni che faccio questo mestiere...), e so benissimo quanto tempo ci vuole, quanto costa, e quale di solito &amp;egrave; il risultato di operazioni di questo tipo, e la pressione sia quindi in senso opposto (&amp;ldquo;volete il software? io ce l'ho pronto, me lo pagate il 40% in meno rispetto alla societ&amp;agrave; e ve lo installo domani, con il resto pagate il supporto e la manutenzione da chi vi pare, ecc.&amp;rdquo;).
&lt;/p&gt;
&lt;p&gt;
Dato che la serata non butta bene e l'offerta mi sembra molto poco seria, provo a far scoprire Gianluca per capire cosa veramente ci sia sotto, e inizio a tirare sul prezzo e a prospettare soluzioni diverse e pi&amp;ugrave; articolate. Di fronte, come prevedibile, mi trovo un muro e soprattutto con il passare dei minuti la maschera di affabilit&amp;agrave; di Gianluca e del suo &amp;ldquo;assistente&amp;rdquo; si fa sempre pi&amp;ugrave; tirata e alla fine scompare del tutto, quando diventa chiaro che non ho nessuna intenzione di proseguire a certe condizioni.
&lt;/p&gt;
&lt;p&gt;
E qui finisce la storia, fino a quando Gianluca decide di dare sfogo al suo rodimento interiore con il post dell'altro ieri. Caro Gianluca, nonstante le tue indubbie capacit&amp;agrave; di comunicatore credo che questa volta tu abbia decisamente esagerato, andando contro i tuoi stessi interessi:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dare del pazzo incapace a chi da 15 anni lavora nell'IT ad alti livelli per aziende di grandi dimensioni, e sostenere di converso che l'unica speranza per un progetto &amp;egrave; che venga preso da te e &amp;ldquo;rimesso in ordine&amp;rdquo; sta facendo sorridere parecchie persone di qua e di l&amp;agrave; dell'Atlantico&lt;/li&gt;
&lt;li&gt;adottare un comportamento mafioso (&amp;ldquo;o fai come dico io o ti distruggo la reputazione&amp;rdquo;) credo dar&amp;agrave; da pensare ad alcune aziende che in passato hanno avuto rapporti con te&lt;/li&gt;
&lt;li&gt;non so quanti dei tuoi clienti saranno contenti di sapere che pubblichi informazioni commerciali su una trattativa che dovrebbe essere riservata, oltretutto facendolo in modo grottesco e falsandone i dati; inoltre, mi chiedo con che coraggio ti affideranno in futuro un'altra trattativa da condurre per conto loro, visto come hai gestito questa &lt;/li&gt;
&lt;li&gt;provare a ridicolizzarci pubblicamente con affermazioni false o distorte prima o poi ti si potrebbe ritorcere contro, il mondo del web italiano &amp;egrave; piccolo e chiss&amp;agrave; che in futuro le nostre strade non si incrocino di nuovo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Da te ci aspettiamo delle scuse, che so gi&amp;agrave; che non verranno mai. Credo di avere imparato un po' a conoscerti in questi anni, e la correttezza o l'educazione non mi sembrano il tuo forte. Poco male, per fortuna ci muoviamo in ambienti differenti, e spero che anche se dovessi avere la sfortuna di incontrarci in futuro, avrai il buon senso di girare alla larga ed evitare di aggiungere altre falsit&amp;agrave; a quelle che hai gi&amp;agrave; scritto.
&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=WA_TpZrzH3o:5rOuB_nvSpE:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=WA_TpZrzH3o:5rOuB_nvSpE:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=WA_TpZrzH3o:5rOuB_nvSpE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/WA_TpZrzH3o" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2009/09/sfatiamo-un-po-di-miti/</feedburner:origLink></entry><entry><title>Perchè BlogBabel non è più in vendita</title><link href="http://feedproxy.google.com/~r/qixit/~3/wJKPIOWIDOA/" rel="alternate" /><updated>2009-09-08T19:53:59+02:00</updated><author><name> </name></author><id>http://qix.it/2009/09/perche-blogbabel-non-e-piu-in-vendita/</id><category term="Varie" /><category term="blogbabel" /><content type="html">&lt;p&gt;Immagino che alcuni di voi si staranno chiedendo come mai l'asta per BlogBabel &amp;egrave; stata ritirata da ebay. Sapevo che la chiusura avrebbe scatenato i (pochi) soliti noti, e che le voci di corridoio sarebbero state che BB non aveva raggiunto un prezzo adeguato, o peggio. Quello che &amp;egrave; successo &amp;egrave; in realt&amp;agrave; molto pi&amp;ugrave; semplice: tra le tante offerte e manifestazioni di interesse ricevute in questi giorni ce ne sono state due (edit: tre) particolarmente significative, che al di l&amp;agrave; del mero trasferimento di codice, dati e dominio prevedevano una collaborazione con idee chiare, e risorse adeguate per sostenerle.&lt;/p&gt;
&lt;p&gt;Non &amp;egrave; difficile quindi capire che offerte di questo tipo, dove la maggior parte del valore economico dell'operazione non &amp;egrave; attribuito alla vendita ma a quello che succede dopo, siano difficilmente paragonabili a quelle "anonime" che avrei ricevuto negli ultimi minuti dell'asta, e proseguire con questo formato non avrebbe solo fatto un torto a chi ha le migliori idee imprenditoriali e pu&amp;ograve; dispiegare risorse significative, ma anche a tutta la fatica e l'impegno messo in BlogBabel in questi anni.&lt;/p&gt;
&lt;p&gt;Da qui la sospensione dell'asta che rientra nei termini previsti da ebay, dato che le due offerte in questione altro non sono state che la prosecuzione di colloqui avviati parecchi mesi fa, cui la messa in vendita di questi giorni ha solo dato una accelerata finale. Spero quindi che chi aveva intenzione di partecipare all'asta (per non dire dei soliti, per fortuna pochi, facinorosi che hanno circondato BlogBabel in questi anni) si astengano dal ricorrere ad ebay perch&amp;egrave; ne ricaverebbero poche soddisfazioni, dato che gli incontri dei mesi scorsi con chi ha presentato le due offerte sono documentabili in maniera oggettiva.&lt;/p&gt;
&lt;p&gt;Questi ultimi giorni sono stati un vero &lt;em&gt;tour de force&lt;/em&gt;, ma sono molto soddisfatto di come si &amp;egrave; conclusa la vicenda e sono convinto che lo spirito e la tecnologia di BlogBabel verranno valorizzate al massimo nell'immediato futuro, grazie anche a un gruppo di persone entusiaste e con le idee molto chiare.&lt;/p&gt;
&lt;p&gt;Un'ultima considerazione su ebay: lo uso da anni sia come venditore che come acquirente, ma non avrei mai pensato che mettere in vendita BlogBabel sarebbe stata una mossa cos&amp;igrave; azzeccata. In un mercato tutto sommato stagnante e molto poco tendente al rischio come quello italiano, le trattative si trascinano per mesi e spesso chi compra adotta di proposto una tattica attendista, ben sapendo che le opportunit&amp;agrave; sono davvero poche. Mettere all'asta un servizio (e vi assicuro che se non avessi ricevuto offerte complesse che con l'asta poco avevano a che fare, BlogBabel sarebbe stata venduta su ebay) ha innescato due meccanismi: da un lato ha fatto intravedere ad alcuni la possibilit&amp;agrave; di acquistare qualcosa ad un prezzo basso, inferiore a quello reale e alla portata di budget tutt'altro che faraonici; dall'altro, ha spinto chi gi&amp;agrave; aveva interesse ad un'acquisizione ad accelerare i tempi per cercare di raggiungere un accordo prima della scadenza dell'asta, costringendo a spingere sull'acceleratore e permettendo anche di saltare parecchie delle pastoie burocratico/aziendali (budget, approvazioni, ecc.) tipiche di processi di vendita normali.&lt;/p&gt;
&lt;p&gt;Dov'&amp;egrave; il nome di chi ha comperato? Per ora da nessuna parte, ho firmato un accordo di riservatezza e per una volta, finalmente, non tocca a me gestire modi e tempi di comunicazione. E credo, d'ora in poi, nemmeno pi&amp;ugrave; trattare con i soliti pochi facinorosi. Delle soddisfazioni di questi giorni sicuramente la pi&amp;ugrave; a buon mercato, ma non per questo meno gustosa.&lt;/p&gt;
&lt;p&gt;PS -- se siete tra quelli che hanno collaborato a BlogBabel in passato, abbiate un pochino di pazienza: non mi sono dimenticato di voi.&lt;/p&gt;
&lt;p&gt;PPS -- la frase "migliori idee imprenditoriali" &amp;egrave; un po' forte e qualcuno se l'&amp;egrave; presa, scusatemi ma a questo punto sono davvero cotto e non mi esprimo con chiarezza, avrei dovuto scrivere "le idee imprenditoriali pi&amp;ugrave; vicine allo spirito originario di BB"; quello che volevo esprimere era che certe idee (incluse quelle di una terza offerta discussa in extremis e seguita da una puntatona su ebay) mi sembravano valorizzare il mio impegno di questi anni, altre (l'utilizzo come strumento di SEO massiccio ad esempio) un po' meno.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/qixit?a=wJKPIOWIDOA:f0QaIE_sHss:mmftqF6nsUE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?i=wJKPIOWIDOA:f0QaIE_sHss:mmftqF6nsUE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/qixit?a=wJKPIOWIDOA:f0QaIE_sHss:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/qixit?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/qixit/~4/wJKPIOWIDOA" height="1" width="1"/&gt;</content><feedburner:origLink>http://qix.it/2009/09/perche-blogbabel-non-e-piu-in-vendita/</feedburner:origLink></entry></feed>
