Categoria: 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.

  • K&R[IP]

    Dennis Ritchie (a destra) con Ken Thompson

    Se n’è andato pure lui. RIP.

  • 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.

  • 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:








    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") + "
    ";
    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.

    [tags]greasemonkey, ffhidebykeyword[/tags]

  • #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.

    [tags]backtype, btcnew[/tags]

  • BTCNew, un fork di Backtype Connect

    Sembra che il primo tentativo di forkare il plugin Backtype Connect non più funzionante sia andato a buon fine. Il vecchio plugin è stato scritto in modo abbastanza chiaro, quindi non è stato troppo complicato il riadattamento alle nuove API di Backtype; se dovessi fare una stima del tempo richiesto per mettere in piedi questa prima versione direi che ho impiegato una decina di ore. Il nuovo plugin, chiamato con molta fantasia BTCNew, fa quello che deve fare e lo ha fatto con successo nel mio blog, quindi oserei dire che funziona. Si tratta comunque di codice sporco, quindi se volete provarlo: 0] non siate troppo severi riportando eventuali bug 1] fate as.so.lu.ta.men.te un backup del database, ché non si sa mai 2] potrebbe essere utile impostare la moderazione dei commenti importati, almeno per la prima volta, in modo da verificare il corretto funzionamento. Ah, dimenticavo, il plugin si trova qui, e qui c’è la pagina dedicata.

    [tags]backtype connect, wordpress plugin[/tags]

  • Coapp, Microsoft e l’opensource

    Notizia interessante da OssBlog riguardante l’approccio di Microsoft verso il mondo opensource. L’articolo propone una intervista a Garrett Serack, il leader del progetto Coapp, progetti il cui scopo è quello di integrare al meglio i software opensource all’interno dei sistemi Windows per garantirne una corretta usabilità.

    Dall’intervista:

    “Faccio il lavoro più bello del mondo”. In sostanza, lo zio Bill lo paga per fare in modo che i validissimi software open source richiesti dalle aziende non sia appannaggio solo dei sistemi Linux. Detto che non lo sono, è sicuramente più semplice installarli dall’Ubuntu Software Center (tanto per dirne uno) direttamente dentro la nostra linux box che non farli funzionare su Windows

    E ancora:

    Coapp nasce così, per portare tutto l’open source possibile alla gente che vuole usarlo su Windows. Microsoft non vuole ignorare gli sviluppatori opensource, cosa che ha fatto in passato, ora vogliamo che si sentano a casa quando lavorano su un pc con Windows. Possiamo collaborare, non c’è alcun motivo per non lavorare insieme. L’obiettivo è fare prodotti migliori. Microsoft si è svegliata da sei anni a questa parte, imparando molto dalla comunità open source.

    L’intervista è interessante, così come questo nuovo accostarsi di Microsoft al mondo opensource. Non solo entrambe le parti ne hanno da guadagnare, ma anche gli utenti finali.

    [Fonte OssBlog]

  • Linux e opensource a Cesenatico

    La libertà non ha prezzo

    So già di non poterci andare, ma lo pubblicizzo ugualmente.
    Sabato 25 settembre, ore 9, presso il Museo della Marineria di Cesenatico si terrà “La libertà non ha prezzo”, una conferenza sul software libero organizzata da UIELinux, uno dei LUG attivi e presenti in zona, e patrocinata dal Comune di Cesenatico. Mi sembra una iniziativa importante per questo piccolo pezzetto di Romagna.

    [tags]uielinux,opensource[/tags]

  • [Tip] Esportare la wishlist di IBS

    Ecco il risultato di un piccolo esercizio di stile di shell programming messo a punto per risolvere un problema a Lawrence, un mio contatto su Friendfeed.

    C’è modo di esportare la wishlist di IBS verso Amazon oppure Anobii?

    In effetti IBS non consente alcun tipo di esportazione dei libri messi nella lista dei desideri, e si potrebbe essere portati ad rispondere “No” alla domanda, ma una breve analisi visiva/CTRL-F ai sorgenti della pagina mi hanno dato qualche speranza, ed ho intensificato le ricerche salvandola in locale ed sottoponendola a qualche tool da riga di comando. La prima cosa che mi è saltata all’occhio è stata la scarsa eleganza del codice generato, ed ho passato il file .html a tidy, un potente strumento per la validazione e la correzione del codice [X]HTML, in modo da renderlo più leggibile; poi ho individuato le parti più “interessanti” relativamente alla soluzione del problema, e cioè questo testo:

    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590

    che contiene appunto il codice ISBN di uno dei libri presenti nella wishlist.
    Sono quindi passato a grep, costruendo man mano la stringa di ricerca fino ad ottenere un risultato più o meno pulito, tipo questo:

    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590"
    http://www.ibs.it/ser/serdsp.asp?isbn=9788874241590"

    La presenza della doppia linea non è un errore di scrittura nel post, ci sono realmente due linee del genere per ogni libro nella wishlist. Dopo grep ho chiamato in causa sed per ripulire l’output ed ottenere solo l’elenco dei codici ISBN, la soluzione al problema, facendogli eseguire due cose in successione:

    sed -e 's/[^0-9]*//g'

    con questa chiamata cancello tutto ciò che non è numerico, mentre con

    sed -n 'p;n'

    stampo in output solamente le linee dispari.
    Et voilà, ecco la riga di comando completa:

    tidy -f errs.txt -imu lista.html; grep '."http://www.ibs.it/ser/serdsp.asp?isbn=[0-9]\{13\}' lista.html | sed -e 's/[^0-9]*//g' | sed -n 'p;n'

    Leggendo il codice si nota la presenza del file lista.html, che corrisponde alla pagina della wishlist salvata in locale: utilizzando questa accortezza ed eseguendo la riga di comando nella medesima directory contenente il file si ottiene in output l’agognato elenco di codici ISBN pronto per essere copiaincollato in Anobii. Sono convinto che il codice possa essere ottimizzato ma, come confermatomi da Lawrence, già in questo modo è pienamente funzionante.

    Happy coding

    [tags]shell, linux, internetbookshop, ibs[/tags]