Sunday, 21 April 2013

Image and reality in the Ford-Chewbacca conflict

La cosiddetta stampa italiana oggi:


http://it.cinema.yahoo.com/blog/gossip-celebrity/harrison-ford-litiga-con-chewbecca-da-jimmy-kimmel-161641567.html

http://www.tgcom24.mediaset.it/televisione/articoli/1091357/harrison-ford-litiga-con-chewbacca.shtml

Solo il Corriere.it scrive,l forse dopo che qualcuno si è preso la briga di avvertirli, che si tratta solo di una gag:



 

Sunday, 31 March 2013

Corsi e ricorsi

L'altra settimana è diventato virale questo spot



l'avrete ricevuto anche voi sul 'uoll o sulla mail.

Peccato che l'idea l'avessero già avuta un anno fa
i bravissimi ragazzi del terzo segreto di satira...




E mi ricorda ancora qualcosa.. 

Monday, 25 February 2013

Occasioni mancate per la campagna elettorale.

http://www.repubblica.it/cronaca/2013/02/25/news/centri_imigrati-53351554/?ref=HREC1-2

In questa campagna elettorale, a parte il solito wishful thinking sulla cittadinanza à la carte 'per tutti i nati in Italia' (in pratica inedita nel resto d'Europa), il tema dell'immigrazione si è fatto notare solo per la sua assenza. Per non parlare di quello della sicurezza, proprio quando almeno certi tipi di crimine sono in aumento.
Ora leggo come se nulla fosse che dal 28 febbraio il governo lascerà in giro per la penisola circa tredicimila (13000) rifugiati (o aspiranti tali). E' un numero di persone equivalente alla popolazione di una cittadina come Fiesole o San Severino Marche, o, a seconda dei gusti, agli effettivi di una divisione militare.

Con 500 euro a testa di buonuscita e dopo aver speso una somma equivalente a...  un miliardo e mezzo di euro. Circa 1/3 dell'IMU sulla prima casa - per usare un paragone da campagna elettorale.

Saturday, 23 February 2013

Niscemi in a Coma

Oggi sulla homepage del Corriere, il maggior quotidiano italiano, si trova un titolo...

"Il radar Usa? Serve contro gli asteroidi"

che porta a questo interessante intervento di Antonino Zichichi 

http://corrieredelmezzogiorno.corriere.it/palermo/notizie/cronaca/2013/22-febbraio-2013/zichichi-muos-smentisce-crocetta-il-radar-usa-serve-contro-asteroidi-2114153146834.shtml

"Essendo la cultura detta moderna, pre-aristotelica.."

Il MUOS in realtà più o meno è questo:

http://en.wikipedia.org/wiki/Mobile_User_Objective_System

Non ha niente a che vedere ne con i radar, ne con proiettili di alcun genere, ne cosmici, ne terroristici. Tantomeno con gli asteroidi, ma è una stupidaggine del titolista del Corrierone.
D'altra parte nemmeno le potenze in gioco coi trasmettitori del MUOS sono trascurabili. Tuttaltro, anche se questo non vuole dire che il MUOS sia pericoloso. Zichichi, oltre ad essere un astrofisico emerito, è un assessore di Crocetta, eletto col PD.

Quella del MUOS è un polemica locale in cui ovviamente ora entrano anche i grillini, alla loro prima esperienza, col loro prezioso apporto...

http://www.linksicilia.it/2013/02/muos-trizzino-m5s-le-rassicurazioni-usa-sono-una-provocazione/

Niscemi è, incidentalmente, il paese di origine di mia nonna materna.Negli anni 20 e 30 del secolo scorso dal Sud della Sicilia provenivano molti coloni diretti in Libia. La famiglia di mia nonna era nel novero. Però mi hanno sempre parlato di Niscemi, ai tempi, come di una bella cittadina.

Domani in Italia si vota.

Tuesday, 19 February 2013

La Prevalenza del Giannino


Da circa un giorno è scoppiato il caso Zingales-Giannino . Poco fa ho visto Giannino da Mentana al TG La7 parlare del suo inesistente master alla Chicago Booth e delle sue altrettanto inesistenti lauree in Giurisprudenza ed Economia. Il giornalista diversamente elegante parla di 'qualcosa che è montato in rete. Il video in cui dice chiaramente di aver fatto un master a Chicago però rimane.

Rimane anche la cronologia della pagina della Wikipedia italiana che mostra tutte le modifiche avvenute nel tempo alla voce 'Oscar Giannino'. Ecco il link:

http://it.wikipedia.org/w/index.php?title=Oscar_Giannino&offset=&limit=500&action=history

Provate a leggere partendo dal basso, da quando è stata creata la voce di wikipedia, ovviamente campionando le letture delle varie versioni della voce. Il link che porta al testo è quello della data di inserimento. E' interessante dare un'occhiata anche alla pagina delle discussioni relative alla stessa voce.

 Il risultato è sorprendente: dapprima Giannino è il semplice figlio di operai che si mette a fare il giornalista. Poi appare la laurea in legge. E quella in Economia e il master alla prestigiosa Chicago Booth. A un certo sparisce una laurea, poi riappare.

Leggere la pagina http://it.wikipedia.org/wiki/Discussione:Oscar_Giannino come dicevo è interessante: c'è anche chi, ben prima dell'inizio della sgangherata campagna elettorale 2013 si era anche premurato di chiamare la Chicago Booth. La pagina di Wikipedia era stata corretta, ma non per molto. Comunque il CV taroccato di Giannino si era talmente diffuso che persino il sito della Treccani ancora in questo momento (19/2/13, 20:45) ( http://www.treccani.it/enciclopedia/oscar-fulvio-giannino/ ) riporta:

Giannino, Oscar Fulvio. - Giornalista italiano (n. Torino 1961). Laureato in Giurisprudenza e in Economia, tra gli anni Ottanta e Novanta è stato portavoce nazionale del PRI (1987-94) nonché direttore del quotidiano del partito, La Voce Repubblicana. Esperto in politica e finanza, ha curato la pagina economica de Il Foglio ed è stato vicedirettore de Il Riformista e Finanza&Mercati; tra il 2007 e il 2009 ha diretto l’inserto finanziario di Libero (Libero Mercato). Negli stessi anni si è riavvicinato alla politica attiva riprendendo la tessera del PRI e nel 2011 è diventato membro della Direzione nazionale del partito. G. conduce una trasmissione di approfondimento giornalistico su Radio 24 (Nove in punto, la versione di Oscar) e scrive per Panorama e Il Mattino (tra gli altri); è condirettore del mensile Capo Horn. 

NB: 20/2/13 la voce è stata cambiata!

Fino a ieri qualunque persona ragionevolmente informata e capace di usufruire dei media di oggi non avrebbe avuto dubbi sui titoli accademici di Giannino, a meno di non fare una specifica e approfondita ricerca. Questo è un dato di fatto. E' anche un dato di fatto che la panzana del CV taroccato non è nata per FARE, per fini elettorali. E' nata da un bel pezzo: almeno due o tre anni. Ho letto di uno stagista, di errori di inserimento. Tutto può essere, può darsi che Giannino non sia responsabile direttamente. Certo, se non lo è (al netto del video di Repubblica) è però certo che ne lui ne il suo staff è in grado di usare bene la Rete. Possibile che non gli sia mai venuto in mente di cercare il suo nome e cognome su Google?

Non gli auguro troppi danni. FARE è un movimento che perlomeno avrà il merito di togliere a Berlusconi i voti di chi è deluso dallo stesso Banana ma ancora è fedele alla sharia neoliberista. E in effetti ha tra i suoi promotori gente molto competente, in generale: niente a che vedere con un esercito di formiche deficienti come i Grillini.

Ma tant'è. Comunque è più preoccupante constatare come funzionino veramente i media 'liquidi' Web 2.0. Proprio l'altro giorno ho noleggiato (sono all'antica, ormai anche a Firenze i videonoleggi cominciano a scarseggiare)  http://en.wikipedia.org/wiki/Burn_After_Reading , l'ho visto e apprezzato, poi sono andato a leggere la pagina Wikipedia di cui al link. Nella sezione 'plot', trama della voce, il personaggio di Brad Pitt non muore. Nel film che ho visto il personaggio di George Clooney lo uccideva: una rapida verifica (clip, trailer, imdb, etc) mi assicura che, come nel mio Blu-ray, in realtà muore sempre:  non ci sono versioni alternative del film. Ho corretto la pagina: non si può certo essere trattato di un errore a ben pensare. Una forma di strano vandalismo, ampiamente oltre lo psicopatologico.

Wednesday, 9 January 2013

Hindenburg - Der Mann, der von Frederick der Grosse bis zum Hitler lebte.

Heute abend bei arte gab es Hindenburg - Der Mann, der Hitler zum Kanzler machte:
ein Doku über Marschall Hinderburg von Cristoph Weinert. Hindenburg, als junger Mann, kämpfte im deutsch-französischen Krieg von 1870–1871.

Und hier sind die passende Bilder, laut den Autoren, für den deutsch-französischen Krieg von 1870-1871 (oder 1770-1771 vielleicht?)








Wednesday, 2 January 2013

The joys of floating point variables

The other week I had to examine a rather simple data import program, written in VB6. The program reads some numbers from a CSV file, and creates a bunch of SQL INSERTs to transfer them to a database: it worked flawlessly, except for some values with .15 or .45 as the decimal part.

In the end it all boiled down to a code snippet like this (it's VB6, but should compile in VB.NET too, just create a form with a button and a click event in both cases)

Dim s  As Double
Dim s3 As Double

s = 8.45 - 5.45
s3 = 3

MsgBox "8.45 - 5.45  =  :" & s
MsgBox "8.45 - 5.45  =  :" & Format(s, "0.000000000000000000000")
MsgBox "8.45 - 5.45 = 3 :" & (s = s3)
MsgBox "Int(8.45-5.45)  :" & Int(s)
MsgBox "Fix(8.45-5.45)  :" & Fix(s)


Now, the funny part is that if you print, even with as many decimal digits as you like, 8.45 - 5.45, you get, apparently, the number 3.000. Then, why s = 3 is equal to False ? Why Int(s) and Fix(s) = 2?

Never mind that using Double is not recommended in cases like this, in any way - one should use Currency : I wanted to know exactly why there is such an apparently disconcerting behaviour.

I tried to replicate the snippet in C# (using Math.Floor instead of Int()) : same result. After that I extended the snippet with a routine found searching stackoverflow.com (look in the comments for the URL) to decode the internal IEEE 754 format used to store doubles (it is the same for each and every language using double precision floating point numbers since the last iterations of microsoft compilers for DOS I believe. Here's the code:

using System;

using System.Text;

namespace TestDouble
{
    class Program
    {
        static void Main(string[] args)
        {
            double s,  s3;

            s = 8.45 - 5.45;
            s3 = 3;

            Console.WriteLine("s = 8.45 - 5.45 :" + s.ToString());
            Console.WriteLine("s (formatted)   :" + String.Format("{0:0.00000000000000000000000000000000}", s));

            Console.WriteLine("s3 = 3          :" + s.ToString());
            Console.WriteLine("s == s3         :" + (s == s3).ToString());
            Console.WriteLine("Math.Floor(s)   :" + Math.Floor(s).ToString());
            Console.WriteLine("Math.Floor(s3)  :" + Math.Floor(s3).ToString());

            Console.WriteLine("s =  8.45-5.45 IEEE 754 : " + d2s(s));
            Console.WriteLine("s3 = 3         IEEE 754 : " + d2s(s3));
         


            Console.WriteLine();
        }

        static string d2s(double d)
        {
            // yanked from: http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
            // Translate the double into sign, exponent and mantissa.
            long bits = BitConverter.DoubleToInt64Bits(d);
            // Note that the shift is sign-extended, hence the test against -1 not 1
            bool negative = (bits < 0);
            int exponent = (int)((bits >> 52) & 0x7ffL);
            long mantissa = bits & 0xfffffffffffffL;


            // Subnormal numbers; exponent is effectively one higher,
            // but there's no extra normalisation bit in the mantissa
            if (exponent == 0)
            {
                exponent++;
            }
            // Normal numbers; leave exponent as it is but add extra
            // bit to the front of the mantissa
            else
            {
                mantissa = mantissa | (1L << 52);
            }

            // Bias the exponent. It's actually biased by 1023, but we're
            // treating the mantissa as m.0 rather than 0.m, so we need
            // to subtract another 52 from it.
            exponent -= 1075;

            if (mantissa == 0)
            {
                return "  0";
            }

            /* Normalize */
            while ((mantissa & 1) == 0)
            {    /*  i.e., Mantissa is even */
                mantissa >>= 1;
                exponent++;
            }

            return (negative ? "-" : "+") + " " + mantissa.ToString() + " * 2 ^ " + exponent.ToString();
        }
    }
}


Now we're starting to shed some light: 8.45-5.45 and 3 are stored in a completely different way in IEEE 754.

8.45 - 5.45 is stored with a mantissa of 3377699720527871 and an exponent of -50.

I fired up Mathematica to check the numbers:

In[5]:= +3377699720527871 * 2^-50
Out[5]= 3377699720527871/1125899906842624

The fraction above is the exact value of 8.45-5.45, as stored in the 64 bit double variable.

With a 15 decimal digit precision this is..




In[21]:= N[3377699720527871/1125899906842624, 15]
Out[21]= 3.00000000000000




But with a precision of more than 15 digits..

In[22]:= N[3377699720527871/1125899906842624, 16]
Out[22]= 2.999999999999999

The problem with VB6/VB.NET and C# is that a double precision number is apparently converted to a string representing a decimal number with a maximum of 15 decimal digits. This is in compliance with the standard, as far as I've seen, but it's all that the language can churn out - if I specifiy more decimal digits in the formatting string I end up with the same precision anyway, not surprisingly of course. By the way, '3' is stored as what the IEEE 754 standard defines a 'subnormal' number, all in the mantissa with a zero exponent.

It seems that I stumbled on a really pathological case of double precision rounding. In the original program the numbers represented hours (the integer part) and minutes (the decimal part): it looked like the calculations were wrong only with quarter of an hour! I've event translated the C# program in Java. It seems that Java uses one decimal digit (but only one) more formatting double data - in my case it would have helped though...

public class TestDouble {

      public static void main(String[] args) {
   
        double s,  s3;



        s = 8.45 - 5.45;
        s3 = 3;

        System.out.printf("s = 8.45 - 5.45 :%f\n",s);
        System.out.printf("s (formatted .14f)   :%.14f\n",s);
        System.out.printf("s (formatted .15f)   :%.15f\n",s);
        System.out.printf("s (formatted .30f)   :%.30f\n",s);
        System.out.printf("s3 = 3          :%f\n",s3);
        System.out.printf("s == s3         :%b\n",(s == s3));
        System.out.printf("Math.Floor(s)   :%f\n",Math.floor(s));
        System.out.printf("Math.Floor(s3)   :%f\n",Math.floor(s3));
       

        System.out.println("s =  8.45-5.45 IEEE 754 : " + d2s(s));
        System.out.println("s3 = 3         IEEE 754 : " + d2s(s3));
       

    }
   
     static String d2s(double d)
      {
          // adapted from http://stackoverflow.com/questions/389993/extracting-mantissa-and-exponent-from-double-in-c-sharp
          // Translate the double into sign, exponent and mantissa.
          long bits = Double.doubleToLongBits(d);
          // Note that the shift is sign-extended, hence the test against -1 not 1
          Boolean negative = (bits < 0);
          int exponent = (int)((bits >> 52) & 0x7ffL);
          long mantissa = bits & 0xfffffffffffffL;
                            

          // Subnormal numbers; exponent is effectively one higher,
          // but there's no extra normalisation bit in the mantissa
          if (exponent == 0)
          {
              exponent++;
          }
          // Normal numbers; leave exponent as it is but add extra
          // bit to the front of the mantissa
          else
          {
              mantissa = mantissa | (1L << 52);
          }

          // Bias the exponent. It's actually biased by 1023, but we're
          // treating the mantissa as m.0 rather than 0.m, so we need
          // to subtract another 52 from it.
          exponent -= 1075;

          if (mantissa == 0)
          {
              return "  0";
          }

          /* Normalize */
          while ((mantissa & 1) == 0)
          {    /*  i.e., Mantissa is even */
              mantissa >>= 1;
              exponent++;
          }

          return (negative ? "-" : "+") + " " +  String.format("%4d * 2 ^ %4d", mantissa, exponent);
          
      }

}