Category Archives: opensource

Arduino Uno, un po’ più di un “Hello, world!”

Primo esperimento significativo con Arduino Uno, qualcosa che va oltre il classico “Hello, world” con annesso blink del LED giallo.

Inizialmente mi sono accontentato di montare qualche componente esterno direttamente su due pin strip infilate nei connettori della scheda, ma la scarsa stabilità del sistema mi ha fatto desistere, e così ho acquistato cinque Proto Shield, cioè un circuito stampato preforato (tipo una scheda millefori) e preformato per essere sovrapposto alla board Arduino Uno. Ed ecco il circuito iniziale, riportato nel proto shield.

Arduino Uno Proto Shield

C’è un trimmer collegato ad un ingresso analogico, un dip switch a due vie collegato a due ingressi digitali, e due LED ad alta luminosità (per rendere il tutto più figo) collegati a due uscite PWM. Il loop principale del firmware funziona così: leggo il valore relativo al trimmer, e uso il valore per pilotare in PWM i due LED, solo se il corrispondente pin del dip switch è su ON, altrimenti spengo il LED. Inoltre, se la variabile legata al debug è vera, invio sulla seriale il valore letto sul trimmer.

Ecco il firmware.

// Do not remove the include below
#include "dimmer.h"
#include <SoftwareSerial.h>

#define LED_R 10
#define LED_V 11
#define TRIMMER A0
#define DIP1 5
#define DIP2 6

boolean debug = true;
int brigthness = 0;

//The setup function is called once at startup of the sketch
void setup() {
    pinMode(LED_R, OUTPUT); // Red LED, output
    pinMode(LED_V, OUTPUT); // Green LED, output
    pinMode(DIP1, INPUT); // 1st switch
    pinMode(DIP2, INPUT); // 2nd switch
    if (debug) Serial.begin(57600);
}

// The loop function is called in an endless loop
void loop() {
    brigthness = analogRead(TRIMMER);

    if (digitalRead(DIP1)) analogWrite(LED_R, (int)(brigthness / 4));
    else analogWrite(LED_R, 0);

    if (digitalRead(DIP2)) analogWrite(LED_V, (int)(brigthness / 4));
    else analogWrite(LED_V, 0);

    if (debug) {
        Serial.print("Brigthness: ");
        Serial.println((int)(brigthness / 4), DEC);
    }
}

Nel breve termine vorrei: 0] legare il debug ad un tasto fisico, invece che ad una variabile hard-coded; 1] verificare se tramite una coppia trasmettitore / ricevitore IR si può mettere in piedi un sensore di prossimità; 2] pilotare una barra LED usando il minor numero di pin; 3] (il vero obiettivo) interfacciare la board ad una macchina radiocomandata, in modo da sfruttare la meccanica e l’elettronica di base preesistenti.

Posted in opensource | Tagged , , | 2 Comments

Tre progetti tre

E’ maledettamente frustrante. Sei in qualche modo interessato a tre progetti, e su due di questi hai basato altrettanti tuoi lavori; poi in poco tempo scopri che:

* il team che sviluppa la ROM per il tuo vecchio smartphone Android ha smesso di supportarlo;
* l’estensione che usi per lo script che tanto ti ha reso famoso in FF ha un bug noto che nessuno sembra intenzionato a risolvere;
* il servizio al quale si appoggia il plugin WordPress che hai rimesso in sesto o funziona male o ha cambiato la modalità di funzionamento, e ti arrivano segnalazioni di bug che non puoi risolvere;

Valuto seriamente l’idea di mollare tutto, sistemare il giardino della padrona di casa e farci un orto.

Posted in life, opensource | Tagged , , | 5 Comments

Greasemonkey e localStorage

Tentando di scrivere una nuova e più completa versione dello script FFHideByKeyword mi sono scontrato con un subdolo e fastidioso bug di Greasemokey, il famoso script engine per Firefox che permette di modificare il comportamento ed il layout di una pagina HTML. Il bug in questione è legato all’utilizzo del localStorage, una tecnologia introdotta con HTML5 alternativa ai vecchi cookie, tecnologia che uso per archiviare le parole chiave indesiderate scelte dall’utente. La tecnologia è supportata dai maggiori browser [è possibile fare un test a questo indirizzo: HTML5 test], fornisce delle API chiare e facili da usare, e mi è quindi sembrato un peccato non sfruttarla.
Ma veniamo al bug. La parte subdola sta nel fatto che non tutte le API sono disponibili, e quella che manca è la proprietà window.localStorage.length, che riporta il numero di coppie chiave/valore presenti nello storage. La proprietà è molto importante, perché in assenza di iteratori conoscere questo valore è l’unico modo pulito per accedere agli elementi, con un classico ciclo for:

for (var i = 0; i < window.localStorage.length; i++) {
   k = window.localStorage.key(i);
   myFunction(window.localStorage.getItem(k));
}

Ho usato il termine pulito perché in effetti è si possibile usare un metodo alternativo, ma sinceramente lo trovo brutto e per nulla ottimizzato. Il seguente ciclo potrebbe funzionare, ma non l’ho testato:

var i = 0;
if (window.localStorage.key(i) != null) {
   do {
      k = window.localStorage.key(i);
      myFunction(window.localStorage.getItem(k));
      i++;
   } while (window.localStorage.key(i) != null);
}

Il bug è facilmente verificabile.
Il seguente codice HTML è funzionante:

<html>
<head>
</head>
<body>
<div id="out"></div>
<script language="Javascript">
   var out = document.getElementById("out");
   window.localStorage.setItem("test", "test");
   out.innerHTML += "Getting data: " + window.localStorage.getItem("test") + "<br />";
   window.localStorage.setItem("test1", "test1");
   out.innerHTML += "Total count: " + window.localStorage.length;
</script>
</body>
</html>

mentre il seguente userscript no:

// ==UserScript==
// @name           Length Test
// @namespace      me
// @description    A test for localStorage.length
// @include        http://www.google.it/
// ==/UserScript==


var out = document.getElementById("ghead");
window.localStorage.setItem("test", "test");
out.innerHTML += "Getting data: " + window.localStorage.getItem("test") + "<br />";
window.localStorage.setItem("test1", "test1");
out.innerHTML += "Total count: " + window.localStorage.length;

Qui c’è la segnalazione, direi scarsamente considerata, e qui il thread nel Google Group relativo. In attesa di un bugfix, lo sviluppo dello script è interrotto.

Technorati Tags: ,

Posted in javascript, opensource | Tagged , | 1 Comment

#BTCNew e i problemi lato Backtype

In seguito alle ultime installazioni, qualche amico ha riportato segnali di mancato funzionamento del plugin nell’importare nel blog i commenti relativi ad un post fatti su Friendfeed. Dopo diversi controlli [ed una nuova versione in arrivo a breve, code cleanup e una opzione per facilitare il debug] sono quasi convinto che il problema in effetti ci sia, ma che si trovi lato Backtype. Verificando il mio blog su BT noto che le reactions da Friendfeed si interrompono verso il 15 novembre; la medesima cosa accade con i blog degli amici che hanno riportato i problemi di cui sopra. Ho anche aperto un ticket nell’help system di Backtype, vediamo cosa rispondono. Mi dispiace amici, ma più di così per ora non posso fare.

Technorati Tags: ,

Posted in blog, opensource, php | Tagged , , | 1 Comment