Fake News lo dici a tua sorella

Definizione di notizia:

“una informazione che ho bisogno di sapere e che nessuno mi ha ancora detto”

Se questo è il metro, quasi tutto quel che passa per i canali tradizionali è “fake news”. Ma il termine viene usato oggi per enfatizzare il pericolo legato alla proliferazione delle fonti di informazione, dove non esiste più la voce autorevole di riferimento e ogni notizia ha la stessa potenziale visibilità indipendentemente dalla fonte.

Esiste davvero questo pericolo?

Ogni nuova tecnologia comporta dei rischi, e viene adottata dalla società quando i vantaggi superano di gran lunga gli svantaggi. Dal momento in cui viene adottata da tutti al momento in cui la società prende consapevolezza dei rischi e adotta misure per ridurli,  passano  di solito parecchie decine di anni: pensa per esempio all’elettricità e ai salvavita, pensa alle automobili e alle cinture, all’airbag, all’ABS, alla guida autonoma. E puoi già vedere l’avvicinarsi di un futuro in cui non dovrai più insegnare ai tuoi figli, come prima cosa, a non scendere dal marciapiede.

Allo stesso modo il web è stato adottato dalla maggioranza della popolazione mondiale perché offre innumerevoli e irresistibili vantaggi rispetto al passato: primo fra tutti la violenta accelerazione della velocità di diffusione delle informazioni, e la moltiplicazione infinita delle fonti.

Penso che nessuno onestamente possa dire che si stava meglio quando avevamo un solo canale televisivo e un solo telegiornale. Il filtro alla fonte (all’unica fonte) certificava l’attendibilità dell’informazione, senza  nessuna possibilità di controllo o replica da parte dei consumatori. Le false notizie non erano smascherabili, oppure venivano smascherate dopo mesi o anni.

La colpa è del modello economico

Ma specialmente adesso con la crisi dell’editoria, c’è il bisogno urgente di richiamare sempre più lettori (che invece calano inesorabilmente) per venderli alla pubblicità; e le notizie gonfiate, distorte o inventate di sana pianta, il solleticamento degli istinti più bassi, non sono più una eccezione alla regola ma sono una necessità di sopravvivenza.

Io ti propongo che le fake news sono sempre esistite e che oggi sono in sensibile aumento perché sono premiate dal modello economico informazione in cambio di pubblicità; ed è vero che oggi a causa di internet si diffondono molto più velocemente di prima, ma è anche vero che grazie a internet è molto più facile e più veloce scoprirle, a volte nel giro di pochi minuti.

Che fare?

Se su internet  non esiste più il filtro alla fonte, e se non vuoi rimanere in balia dell’algoritmo, devi per forza imparare a usare il filtro a posteriori: devi chiederti sempre davanti a ogni notizia perché mi arriva, da che fonte, con quale scopo. Si tratta di un lavoro necessario ma duro e noioso, e per fortuna si cominciano a sviluppare strumenti che lo rendono automatico e che possono concorrere, se adottati su larga scala, a mitigare il problema.

E poi ovviamente l’educazione. Conosco una signora che da sempre ripete al figlio (ormai cinquantenne) “non andare nei pericoli”. Ecco, bisogna insegnare ai nostri figli ad attraversare questa nuova strada.

Robot Street Challenge 2018: simulazioni con Scratch

Per mio divertimento, e in vista della Robot Street Challenge 2018, ho creato due progetti con Scratch che simulano un robot “line follower” e un robot che risolve un labirinto. Il divertimento consiste nel variare i diversi parametri (percorso, velocità numero di sensori, eccetera) per capire come influiscono sui tempi di percorrenza. Enjoy!

Se hai suggerimenti per migliorare il codice, te ne sarò grato.

In azienda le ciofeche costano carissime

Giro per le aziende insubriche e vedo gente capace, preparata e volenterosa, a cui vengono affidati compiti gravosi e importanti, che lavora ancora con PC di modernariato e software anziano.

“Lavora” è un eufemismo: in realtà dovrei dire “lotta, fatica, si dispera e si abbronza alla luce della clessidra”.

Faccio i conti della serva: metti che quel collaboratore costi almeno 50.000 €/anno, e che con meno di 2.000 € di hw/sw nuovo la sua produttività aumenti del 10% (e il suo stress diminuisca del 75%).

Penso quindi che queste aziende non sappiano far di conto, e che non dureranno a lungo.

(Più è grande l’azienda, più è grave è il problema)

(E non tocchiamo l’argomento “amministrazione pubblica”)

Il protocollo MQTT per la internet delle cose

Questa piovosa e fredda domenica mattina si presta perfettamente allo struso esplorativo, propiziato dall’arrivo dei nuovi Raspberry Pi 3.

Raspberry Pi 3

Leggevo del protocollo standard MQTT per la interconnessione degli apparecchi IoT, e ho deciso di dedicare un raspi a fare l’ MQTT broker.

MQTT-FAQ

  • Il broker consigliato per Linux è Mosquitto (di cui esiste anche il client).
  • Il client consigliato per Windows è Paho.
  • Il client consigliato per Android è MyMQTT.

L’installazione dei diversi componenti è andata al primo colpo senza problemi, e ho testato con successo sulla LAN casalinga lo scambio di messaggi da Arduino a Windows e viceversa. Per una connessione remota le cose diventano un poco più complicate, dato che occorre aprire una porta del router, usare un DNS dinamico e dotarsi diuna autenticazione robusta.

Esistono le librerie per Arduino  e anche per Particle, che spero di testare presto e che aprono scenari eccitanti.

Prima impressione: questo protocollo è molto promettente ma anche molto giovane, e si vede. Se otterrà la necessaria massa critica, come io spero, diventerà molto più usabile.

 

 

Dopo l’albero, le luci di Natale

Dopo l’albero di Natale con Scratch, ecco le luci di Natale con Arduino:

Il relativo codice (migliorabilissimo):

/*
  Arrays
 
 Demonstrates the use of  an array to hold pin numbers
 in order to iterate over the pins in a sequence. 
 Lights multiple LEDs in sequence, then in reverse.
 
 Unlike the For Loop tutorial, where the pins have to be
 contiguous, here the pins can be in any random order.
 
 The circuit:
 * LEDs from pins 3 through 11 to ground
 
 created 2006
 by David A. Mellis
 modified 30 Aug 2011
 by Tom Igoe
 modified 08 Dec 2014
 by Gaspar Torriero
 
 The original code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Array
 */

int N;
int timer = 100;           // The higher the number, the slower the timing.
int selector = 4;
int ledPins0[] = {
  3, 4, 5, 6, 7, 8, 9, 10, 11};       // an array of pin numbers to which LEDs are attached
int ledPins1[] = {
  3, 6, 9, 4, 7, 10, 5, 8, 11};       // an array of pin numbers to which LEDs are attached
int ledPins2[] = {
  3, 11, 4, 10, 5, 9, 6, 8, 7};       // an array of pin numbers to which LEDs are attached
int ledPins3[] = {
  3, 5, 7, 9, 11, 4, 6, 8, 10};       // an array of pin numbers to which LEDs are attached
int pinCount = 9;           // the number of pins (i.e. the length of the array)

void setup() {
  for (int N = 3; N < 12; N++) {
    pinMode(N,OUTPUT);
  }
}

void loop() {
  timer = analogRead(A0);
  // one of the next two lines must be uncommented
  selector = (analogRead(A1) / 255); // knob-selected status
  //selector = random(3); //random status

  if (selector == 0) {
    // loop from the lowest pin to the highest:
    for (int thisPin = 0; thisPin < pinCount; thisPin++) { 
      // turn the pin on:
      digitalWrite(ledPins0[thisPin], HIGH);   
      delay(timer);                  
      // turn the pin off:
      digitalWrite(ledPins0[thisPin], LOW);    

    }

    // loop from the highest pin to the lowest:
    for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { 
      // turn the pin on:
      digitalWrite(ledPins0[thisPin], HIGH);
      delay(timer);
      // turn the pin off:
      digitalWrite(ledPins0[thisPin], LOW);
    }
  }

  else if (selector == 1) {
    // loop from the lowest pin to the highest:
    for (int thisPin = 0; thisPin < pinCount; thisPin++) { 
      // turn the pin on:
      digitalWrite(ledPins1[thisPin], HIGH);   
      delay(timer);                  
      // turn the pin off:
      digitalWrite(ledPins1[thisPin], LOW);    

    }

    // loop from the highest pin to the lowest:
    for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { 
      // turn the pin on:
      digitalWrite(ledPins1[thisPin], HIGH);
      delay(timer);
      // turn the pin off:
      digitalWrite(ledPins1[thisPin], LOW);
    }
  }

  if (selector == 2) {
    // loop from the lowest pin to the highest:
    for (int thisPin = 0; thisPin < pinCount; thisPin++) { 
      // turn the pin on:
      digitalWrite(ledPins2[thisPin], HIGH);   
      delay(timer);                  
      // turn the pin off:
      digitalWrite(ledPins2[thisPin], LOW);    

    }

    // loop from the highest pin to the lowest:
    for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { 
      // turn the pin on:
      digitalWrite(ledPins2[thisPin], HIGH);
      delay(timer);
      // turn the pin off:
      digitalWrite(ledPins2[thisPin], LOW);
    }
  }

  else if (selector == 3) {
    // loop from the lowest pin to the highest:
    for (int thisPin = 0; thisPin < pinCount; thisPin++) { 
      // turn the pin on:
      digitalWrite(ledPins3[thisPin], HIGH);   
      delay(timer);                  
      // turn the pin off:
      digitalWrite(ledPins3[thisPin], LOW);    

    }

    // loop from the highest pin to the lowest:
    for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) { 
      // turn the pin on:
      digitalWrite(ledPins3[thisPin], HIGH);
      delay(timer);
      // turn the pin off:
      digitalWrite(ledPins3[thisPin], LOW);
    }
  }
}