Lo specchi magico

Il Magic Mirror, sviluppato da: The New York Times Research & Development Lab e Alexis Lloyd è stato da poco selezionato dal Time tra le 50 migliori invenzioni del 2011. E’ sicuramente un bel gadget che sostituisce il vostro smartphone in quei pochi momenti in cui non potete usarlo.

A prima vista, lo specchio appare come un normale superficie riflettente, però è anche in grado di fornire notizie e dettagli meteo mentre vi lavate i denti o vi pettinate. Lo specchio è dotato di TV Philips con un Kinect di Microsoft che consente di accedere a ogni tipo di informazione, guardando il proprio riflesso. Potrete così ad esempio controllare il vostro calendario giornaliero e feed rss preferiti e visualizzare tutti i tipi di statistiche che riguardano la vostra salute, compresi grafici del sonno e la vostra attività motoria.

Reveal Project – Personal Data Mirror from NYT R&D on Vimeo.

La leggenda di Moore

Ringrazio Sax, l’amico di avventure informatiche, sperimentazioni e mille altre cose, per la segnalazione di:

La leggenda di Moore
Nota di approfondimento al capitolo 26
di L’umanità dell’internet

di

Giancarlo Livraghi
gian@gandalf.it
luglio 2001

Ottima lettura che giro ai miei studenti.

La cosiddetta “legge di Moore” non è una legge. Cioè non è un principio scientifico che sia stato enunciato come tale – o che abbia conferma nell’osservazione dei fenomeni.

È una delle tante affermazioni che circolano (sull’informatica come in altre materie) trattate universalmente come “verità rivelata” e continuamente ripetute senza verificarne l’attendibilità. E per di più interpretate in vari modi che nulla hanno a che fare con il loro reale significato…

continua la lettura su gandalf.it.

Imparare a programmare su iPhone con il corso gratuito di Elettronica In

Qualche mese fa un mio allievo di quinta, che ha da poco fatto switch su piattaforma MacOS acquistando uno splendido iMac 27′ super accessoriato, mi chiedeva indicazioni in merito alla realizzazione di applicazioni su dispositivi iOS!

Alleluia! grida il Prof. finalmente le curiosità che servono ad una giovane mente!

Realizzare un corso per iOS a scuola è cosa ancora difficile vista la scarsità di risorse economiche, però come insegnante e utente Mac, guiderò l’allievo in questa nuova avventura.
Magari un giorno riuscirò a realizzare un bel corso di Alternanza Scuola Lavoro per insegnare a programmare su iOS (sogni di un Prof.)… mi servirebbe solamente un laboratorio di Mac 🙂

Devo ringraziare Elettronica In mi sta dando diversi suggerimenti per implementare nuove idee per la didattica ed è di aiuto e di sprono anche ad alcuni dei miei allievi e l’ultimo generoso regalo che ha voluto donare alla comunità ne è una prova:

il corso di programmazione per iPhone da scaricare gratuitamente servirà sicuramente.

L’iPhone integra una vasta gamma di sensori che lo rendono un’ottima piattaforma embedded ideale per sviluppare svariate applicazioni anche a livello amatoriale: sono le tanto amate App, che sviluppatori professionisti e semplici appassionati realizzano per venderle o condividerle secondo la filosofia open-source.
Impariamo dunque ad utilizzare la piattaforma di sviluppo software iOS di Apple, uno dei più innovativi ambienti di sviluppo software, che tramite l’objectiveC, permette il rapido sviluppo di applicazioni di diversi generi per i dispositivi “mobile” di classe iPhone, iPod Touch ed iPad.

E allora via! Scaricate il corso ed incominciate una nuova avventura!

P.S. per scaricare il corso bisogna registrarsi sul sito.

Appunti di programmazione su Arduino: strutture

Incomincio questa nuova serie di lezioni per i miei studenti di 4′ che in questo anno scolastico incominceranno il corso di Arduino. Questi appunti non sono disgiunti dalle lezioni di base sull’utilizzo di Arduino (che trovate nella sezione Arduino di questo sito), ma sono da considerare come integrazione ampliando la parte dedicata alla pura programmazione.

Inolte ho deciso di incominciare questa nuova serie di lezioni perché sollecitato anche dalle mail di diversi utenti che mi hanno chiesto più volte dettagli sulla programmazione… e poi visto che devo insegnare programmazione in C, tanto vale usare il C usato in Arduino che mi permette di far percepire “fisicamente” il risultato della programmazione e quindi maggior gratificazione da parte dello studente. Ho constatato che la voglia di studiare aumenta se la programmazione ha effetto su una struttura fisica (led, motori, relè ecc….) si contestualizza sul pratico e lo studente comprende che ciò che fa a scuola serve (a molti ancora non è chiaro questo aspetto…)

Molto più difficile sarebbe se restassi sul virtuale e insegnassi il C facendo progetti che non hanno un riscontro sul mondo fisico… provare per credere dopo più di 20 anni di insegnamento ne sono convinto.

Fatta la premessa… lo scopo utilizzare, come indice degli argomenti da trattare, il libro di Brian W. Evans: Arduino programming notebook, che ricordo essere sotto licenza Creative Commons Attribution-Noncommercial-Share Alike 3.0 License (che è la stessa di questo sito), per strutturare un nuovo libro on-line in cui aggiungere gli appunti del mio corso.  Cercherò di dare al tutto una struttura “scolastica” in modo da renderla più semplice per lo studente.

Il libro subirà variazioni e correzioni, quindi anche ad opera conclusa, nei mesi che seguiranno effettuerò variazioni ed integrazioni che evidenzierò con data e versione.

Se desiderate scaricare gratuitamente il libro di Brian W. Evans trovate il link al pdf nella sezione Arduino al paragrafo libri free.

Spero che queste lezioni possano servire e se durante l’esposizione trovate errori o incongruenze o avete suggerimenti non esitate a darmene comunicazione, pubblicherò volentieri i vostri contributi.

Grazie.

Strutture

La struttura base di un programma Arduino è abbastanza semplice e si sviluppa in almeno due parti.
Queste due parti, o funzioni, necessarie racchiudono parti di istruzioni.

void setup()
{
statements;
}

void loop()
{
statements;
}

Dove setup() indica il blocco di settaggio e loop() è il blocco che viene eseguito. Entrambe le sezioni sono necessarie per far si che un programma funzioni.

setup() è la prima funzione ad essere invocata verrà eseguita una volta sola e in essa vengono dichiarate le variabili usate nel programma, è usata per impostare il pinMode o inizializzare la comunicazione seriale.

La funzione loop() contiene il codice che deve essere eseguito ripetutamente, in essa vengono letti gli input, i segnali di output ecc…
Questa funzione è la parte principale di un programma Arduino (sketch), esegue la maggior parte del lavoro.

setup()
La funzione setup() è chiamata una volta sola quando il programma viene fatto funzionare. E’ usata per inizializzare il pinMode e la seriale e deve essere incluso in un programma, anche se non ci sono istruzioni da eseguire.

void setup()
{
	pinMode(pin, OUTPUT);	//inposta il 'pin' come output
}

loop()
Dopo che è stata eseguita la chiamata alla funzione setup(), la funzione loop() fa esattamente quello che suggerisce il suo nome, esegue ripetutamente un loop, permettendo al programma di modificare, rispondere e controllare la scheda Arduino.

void loop()
{
	digitalWrite(pin, HIGH); // imposta 'pin' ad on
	delay(1000);             // effettua una pausa di 1 secondo
	digitalWrite(pin, LOW);  // imposta 'pin' ad off
	delay(1000);             // effettua una pausa di 1 secondo
}

funzioni

Una funzione è un blocco di codice a cui è attribuito un nome, è da intendersi come un blocco di istruzioni che vengono eseguite quando viene invocata la funzione.

Delle funzioni void setup ()void loop () abbiamo già discusso, parleremo di altre funzioni più avanti.

Le funzioni personalizzate possono essere scritti per eseguire compiti ripetitivi e ridurre confusione in un programma. Quando si dichiara una funzione in primo luogo bisogna dichiarare il tipo della funzione, cioè il tipo di valore restituito dalla funzione, quindi se la funzione è di tipo ‘int’ (intero), vorrà dire che restituirà un valore intero.

type functionName(parameters)
{
statements;
}

La funzione di tipo intero: delayVal() è utilizzata per fissare un valore di ritardo in un programma che legge un valore da un potenziometro. Per prima cosa dichiariamo una variabile locale v di tipo intero, impostiamo v al valore restituito dalla funzione analogRead(pot), che può restituire un valore compreso tra 0 e 1023, dividiamo il valore ottenuto per 4 per ottenere un valore compreso tra 0 e 255 e infine restituiamo questo valore al programma principale (quello che ha invocato delayVal() ).

int delayVal()
{
  int v;               // varibile temporanea intera 'v'
  v = analogRead(pot); // lettura del valore del potenziometro
  v /= 4;              // conversione da 0-1023 a 0-255
  return v;            // restituisce il valore finale
}

{} Parentesi graffe

Le parentesi graffe (dette anche solamente “parentesi” o “parentesi graffe”) definiscono l’inizio e la fine di un blocco funzione e blocchi istruzione così come la funzione void loop() e le istruzioni for e if

type function()
{
  statements;
}

Una parentesi graffa aperta deve essere sempre seguita da una parentesi graffa chiusa. Questo è spesso indicato come bilanciamento delle parentesi. Parentesi non bilanciate possono creare diversi problemi al compilatore e talvolta possono essere difficili da rintracciare in un programma molto esteso.

L’ambiente Arduino include una funzione utile per controllare il bilanciamento delle parentesi graffe. E’ sufficiente selezionare una parentesi o fare click immediatamente dopo la parentesi affinchè venga evidenziata la parentesi logicamente corrispondente.

; punto e virgola

Il punto e virgola deve essere usato al termine di un’istruzione e separa gli elementi di un programma. Il punto e virgola è usato per separare elementi in un ciclo for.

int x = 13; // dichiara che la variabile ‘x’ è un intero

dimenticare un punto e virgola al termine di una riga produrrà un errore di compilazione. La rilevazione di un punto e virgola mancante non è sempre semplice da rilevare, alcune volte il compilatore potrebbe darvi dei messaggi di errore che possono sembrare illogici, in questo caso la prima cosa da fare è controllare la mancanza di un punto e virgola nei pressi della linea di codice dove il compilatore ha evidenziato l’anomalia.

/*…*/ blocco commenti

I blocchi commenti, o commenti multi-linea, sono aree di testo che sono ignorate dal programma e sono usate per una descrizione lunga del codice oppure commenti che aiutano la comprensione di parti del programma. Il bloccco commento incomincia con /* e termina con */ e può occupare più righe.

/* questo è un blocco commento chiuso
non dimenticare di chiudere il commento
anche i segni di blocco commento sono bilanciati
*/

poiché i commenti vengono ignorati dal programma, essi non occupano spazio di memoria, quindi è opportuno usarli frequentemente, abbondando il più possibile nello specificare le azioni dei vari blocchi del programma, agendo in questo modo sarà anche più semplice effettuare il debug del programma.

Nota: non è possibile annidare blocchi di commenti, cioè inserire un blocco commento all’interno di un altro blocco commento.

// commenti in singola linea
I commenti in singola linea incominciano con // e terminano con la successiva linea di codice. Come per il blocco commento, anche i commenti in singola linea sono ignorati dal programma e non occupano spazio di memoria.

// questo è un commento su una sola linea

I commenti su un’unica linea sono spesso usati dopo un’istruzione per fornire maggiori informazioni sull’azione che compie e per futura memoria.

Tutti gli appunti realizzati potete trovarli nalla sezione: Appunti di programmazione nella sezione Arduino di questo sito.

Umanizzazione della tecnologia

Ho trovato su Socialcast un interessante post, che condivido e ve ne do una mia personale traduzione. Nell’articolo viene mostrata un infografica che pone in evidenza come storicamente l’uomo ha utilizzato la tecnologia e come oggi stiamo vivendo un cambiamento di tendenza, sia nell’utilizzo che nella creazione di nuova tecnologia.

La tecnologia è da sempre creata per un unico scopo: aumentare la produttività e migliorare lo stile di vita dell’essere umano… ed aggiungerei dare un motivo in più per spendere….

In generale non è stato mai importante se l’oggetto tecnologico fossero ingombranti o complicato, l’importante e che potesse aumentare la produttività degli utenti che erano obbligati, per avere successo nel loro lavoro, ad investire parecchio tempo per impararne l’uso.
Oggi credo che si stia vivendo un cambiamento di tendenza, i prodotti che hanno maggior successo commerciale sono proprio quelli che sono stati progettati intorno alla persona, progettati osservando come le persone svolgono naturalemente le azioni del loro vivere quotidiano. Quindi l’esperienza degli utenti è più importante che mai.

Quindi è il caso di dire che nel mondo moderno la tecnologia impara dall’uomo.

Click sull’immagine per vedere l’infografica completa.