Category Archives: Gadgets

Altro post tecnico e scacciafiga, ma a fini pucciosi

FotoProblema: non c’avevo abbastanza da fare.

Problema 2: i miei genitori hanno tre gatti, tre ciotole da riempire periodicamente di croccantini e acqua da rabboccare.

Soluzione: mi son messo di buzzo e ho realizzato un progetto che avevo in ponte da quando i gatti erano ancora due ma che era fallito per problemi meccanici: la NUTRIGATTI.

Come potete vedere dalla foto, la cupola sopra contiene non solo la circuiteria e i due selettori per i tempi, ma anche una presa per la fontanella a ricircolo che costruirò a brevissimo.

Come spero invece si capisce dallo schema qui sotto, il cuore della circuiteria è un Teensy , in quanto non c’è bisogno di aggiungere connettività WiFi, a questo progetto, ma avendolo appoggiato su una breadboard in miniatura invece che su uno stampato rende il circuito modificabile con pochissimo sforzo: sostituire il Teensy fritzingcon un Photon e aggiungere un comando via web sarebbe questione di qualche minuto e un paio di righe di codice.
Due moduli relay, convenientemente già optoisolati e alimentati dal Teensy, comandano direttamente un motore da girarrosto scelto per il basso numero di giri, la discreta potenza e l’alimentazione da rete e, attraverso la presa che si vede frontalmente alla cupola (un contenitore per alimenti dell’IKEA, che ho scoperto comodissimi per questi scopi), la pompa per l’acqua, una da acquario a 220V.

I due selettori dei tempi forniscono quattro selezioni dei due tempi, di alimentazione e di intervallo: ogni selettore mette a GND uno dei quattro piedini del Teensy preposti alla scelta di tempi preimpostati. Ovviamente i “fili” sono solo tre, in quanto uno dei tempi è già in “default” e corrisponde a un piedino non connesso alla sua posizione del Teensy; il cablarlo avrebbe solo fornito una “conferma” non necessaria.

nutrigatti sezioneIl lato meccanico, fallito alla prima mandata (costituita da una coclea da tritacarne che però talvolta sbriciolava i croccantini contro le pareti del contenitore) è costituito da una spazzola cilindrica per capelli mossa direttamente dal motore da girarrosto e resa solidale con un perno quadrato, nello specifico una vite a legno “grossa” fissata con resina da una parte e molata a sezione quadra dall’altra.. Risulta indifferente il senso di rotazione della spazzola stessa, in ogni caso i croccantini verranno spinti verso uno scivolo di metallo che, oltre a contenerli e indirizzarli verso la ciotola, produce uno scampanellìo inaspettato ma che potrebbe essere una sorta di “campanella del rancio” per i gatti che non ne sembrano infastiditi.

Questo il codice, non elegante ma funzionale:

#define RELAY1 21
#define RELAY2 20

int led = 11;

void setup()
{
// Initialise the Teensy data pins for OUTPUT
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);

// Serial.begin(38400);   Apre la comunicazione seriale, serviva per il debugging
}

void loop()
{

digitalWrite(1, HIGH);  //si settano tutti gli imput
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(led, HIGH);  //si comunica la funzionalità del Teensy

long time1 = 30000;  //20000 per 20 sec, in questo caso sono trenta secondi. Tempo in cui gira la spazzola
long time2 = 2400000; //1800000 per 30′, un cicloogni ora e mezzo. Tempo di pausa tra una “operazione” e l’altra.

// assegna la durata alimentazione – pin staccati 20sec
if (digitalRead(1) == LOW) (time1 = 30000 ); // 30sec – disconnesso da selettore
if (digitalRead(2) == LOW) (time1 = 60000 ); // 1 minuto
if (digitalRead(3) == LOW) (time1 = 90000 ); // 90sec
if (digitalRead(4) == LOW) (time1 = 120000 ); // 2 minuti

// assegna la durata pausa – pin staccati ogni 30min

if (digitalRead(5) == LOW) ( time2 = 2400000 ); // 40min – una volta ogni due circa – disc da selettore
if (digitalRead(6) == LOW) ( time2 = 3600000 ); // 1h – una volta ogni tre ore circa
if (digitalRead(7) == LOW) ( time2 = 4800000 ); // 1h20 una volta ogni quattro ore circa
if (digitalRead(8) == LOW) ( time2 = 7200000 ); // 2h una volta ogni sei ore circa

//Serial.println(digitalRead(1));   legge lo stato dei piedini e lo riporta sulla seriale. Serviva per il debug.
//Serial.println(digitalRead(2));
//Serial.println(digitalRead(3));
//Serial.println(digitalRead(4));
//Serial.println(digitalRead(5));
//Serial.println(digitalRead(6));
//Serial.println(digitalRead(7));
//Serial.println(digitalRead(8));
//Serial.println(time1);
//Serial.println(time2);

delay(5000); // Attende 5 seconds prima di iniziare tutto. Poi aziona i due relay.

digitalWrite(RELAY1,HIGH); // Turns ON Relays 1
digitalWrite(RELAY2,HIGH); // Turns ON Relays 2

delay(time1); // Attende time1, da 30sec a 2min

digitalWrite(RELAY1,LOW); // smette alimentazione dei croccantini

delay(90000); // Attende 90 seconds: la fontanella gira per un altro minuto e mezzo.

digitalWrite(RELAY2,LOW); // Turn Relay Off

delay(time2); // Wait time2 – da 30’ a 2h

digitalWrite(RELAY2,HIGH); // Turn ON Relay 2

delay(120000); // Wait 120 seconds: la fontanella gira per altri due minuti,

digitalWrite(RELAY2,LOW); // Turns Relay Off

delay(time2); // Attende time2 – da 30’ a 2h
delay(time2); // Attende time2 – da 30’ a 2h

}

Niente pulsanti di reset o di alimentazione manuale? No, perchè deve essere di facile utilizzo e comando: “Mamma, sfili la spina e la reinfili”. Niente display? Neppure, quattro più quattro scatti e una legenda scritta. Niente tempo reale? No, perchè? Non deve servire per fornire pranzi a ore precise, ma gli spuntini “poco e spesso” che servono ai gatti.

Ora si tratta di farla piacere ai miei, più che ai gatti.

Ah, costo totale, compreso Teensy, relays, motore da girarrosto, minuterie e connettori, e legno occasione IKEA: meno di trenta euro.
Un pomeriggio di lavoro, ma cos’è essere nerd se non trovare problemi sovraingenerizzati e costosi per problemi che non esistono?

 

 

Every N.O.W. and T.H.E.N.

Questa edizione è stata la 4.0.10407217_10204048666679496_4608977935272595405_n

Densa da far paura di eventi, ma ancor più di soddisfazioni.10440228_10204048665359463_3734151969820109866_n

Quando all’inizio del 2012 chiesi nel gruppo Facebook di Lega Nerd, grossomodo, “Ma se ci ritrovasse tutti assieme a insegnarci l’un l’altro qualcosa? Mica per forza roba nerd.” non credevo sarebbe finita così bene. Nacque il Nerd Open Workshop, al quale partecipò una dozzina di persone, dal costo piuttosto esoso per gli esagerati costi della Casa del Popolo di Pozzolatico – che poi, astutamente, ci trattò malissimo alle edizioni successive (e allora ciao) -, ma ricca di entusiasmo.

Una giornata, sei corsi in tutto, subito raddoppiati all’edizione successiva, però.

10385385_10204048665879476_2648911941435321833_nCome potete vedere da questa pagina,  l’idea piacque. E piacque tanto, che siamo alla quinta edizione e a un ritrovo di “facciamo il punto”. E già c’è lo spinoff, il T.H.E.N., Troubleshooting Heuristic Event for Nerds, che all’interno del N.O.W. (e fuori) si preccupa di trovare soluzioni ai guasti hardware e software degli oggetti portati dagli intervenuti. Così, gratis e per il gusto di farlo.

10426633_10204048666719497_7868426425754879139_n

L’ultima edizione, il N.O.W. 4.0, ha portato nei locali messici a disposizione gratis et amore dei dalla Casa del Popolo di San Donnino qualcosa come 35 intervenuti e 26 corsi in programma, più tre tavoli permanenti, ma non sono mancate esperienze estemporanee.10346534_10204048665559468_5948398058035028809_n  E un servizio fotografico degli amici della Daywedding, mica cotiche. (Che tra parentesi sono quelli che manutengono il sito del N.O.W., e hanno pure sviluppato il sistema di gestione dei biglietti su plugin wordpress. Tanta roba).

Il tutto, dicevo,  per i venti euro che servono solamente a coprire i TRE ottimi pasti, visto che i docenti fanno e insegnano gratuitamente.10341761_10204048666119482_4042832248008605353_n

Insomma, scaldava il cuore, come me lo scalda ogni volta, anche se la10401466_10204048665839475_5488747487818810925_n notte tra sabato e domenica ho dormito tre ore, vedere questi genii dal cuore grosso come una casa condividere mestieri e passioni, abilità ed esperimenti.   E ‘sta gente è bravissima coi computer, sì, magari pure per mestiere, ma poi scopri che sanno cucinare di tutto, dai tortelli al seitan ai pancakes e impastare e far pane e pizze, sanno suonare e fare sapone e origami meravigliosi, risolvono un cubo di rubik in mezzo minuto, fanno shibari e viaggiano per mezzo mondo in con due lire, che sanno scrivere e disegnare e fare i  deejay, sono maestre di trucco e di cucito, 10406369_10204048666159483_5084826672579151239_nfanno sottotitoli per telefilm e parlano latino e greco,  praticano scherma antica e rugby, che incidono su vetro e metallo, che fanno foto bellissime con metodi alternativi, cuciono tovaglie e pelouches, 10378222_10204048665759473_2451148116292304663_n realizzano app per cellulare e stampe 3d e, davvero, sono sicuro di star dimenticandomi qualcosa e non ricordo cosa.

E la parte più bella è che te10418845_10204048665239460_1579211195986357678_n lo insegnano, gratis (non mi stancherò mai di dirlo), volentieri e con passione, solo per il gusto di condividere una soddisfazione personale, i trucchi di un mestiere, di un hobby o di una attività. Lo fa10419568_10204048665399464_2199838725531940791_nnno perché insegnare una cosa che ci piace è una forma di altruismo che costa poco e rende tantissimo.

E ‘sta gente non è solo bravissima come ho detto prima, ma è pure buona come il pane di Argo e Antonio; non fa fatica fare tre volte lo stesso corso in 10478146_10204048666439490_6039026775356832346_notto ore solo perché è arrivata gente nuova che s’è persa l’esposizione precedente (vero, Dario?), o non riuscire a seguire un corso fino in fondo perché devi coordinarne altri due di cui sei codocente.

E poi beh, ci sono i pasti assieme, che da soli valgono tutte e due le giornate, in cui si ride, si scherza e si mangia benissimo -giuro, a me la Casa del Popolo non dà una lira; c’è stata l’asta, in cui ci si aggiudicano a cifre ridicole oggetti ridicoli che qualcun altro ha regalato.

Insomma, ne sono uscito a malapena vivo, e già è aperto il sondaggio per la data del 5.0. Se non son soddisfazioni queste, quella di vedere una mia idea che piace, è condivisa e cresce, che cosa si vive a fare?

 

Post a richiesta

.
..
…..
Voi non ci crederete, ma me l’hanno chiesto davvero.
Mi hanno chiesto un consiglio per una custodia per un e-reader, e alla mia risposta, grossomodo un “Boh, io me le son fatto da solo”, mi han chiesto un tutorial.
Siccome sono più vanitoso che sovrappeso (e sono molto sovrappeso), e di solito sono piuttosto orgoglioso dei miei smanacciamenti, sono più che contento di accontentare. Le foto fanno schifo, lo so, ma l’unica batteria carica è quella del cellulare. Provvederò alla sostituzione appena trovo il tempo e l’occasione.
In ordine cronologico:
.
..
….
.

La Moleskinny


Realizzata per un PMP, è stata costruita in due versioni. La prima, che non ritrovo, tracciando la forma del lettore medesimo sulla prima pagina di una agenda. Poi, trincetto e vinavil, quest’ultimo sia tra le pagine che sui bordi, interno ed esterno. Nulla di trascendentale.
La seconda versione ha richiesto l’asportazione totale di tutte le pagine, la copertura della costola, e un po’ di velcro. Funziona anche da stand in versione portrait.
.
..
….
.

Il diario di River Song


Per il Kindle della Figlioluccia.
Costruita a partire dal cartone di un raccoglitore a due anelli, tagliato a quadretti e listelle, prova a copiare il modello di una rilegatura mostrato in una serie che non potete non seguire. Ovviamente all’originale non assomiglia che grossolanamente, non è che una pallida copia: Ho tagliato i quadrettoni e le listelle dal cartone spesso, ho incollato il tutto su due pezzi grande poco più del Kindle, uno per il fronte e uno per il retro, entrambi tenuti alla costola da una garza. Il ricoprire tutto di vinavil -lattice per chi ce l’ha-, più scuro prima, in modo di fare una sorta di drybrushing con la seconda mano, più chiara, assicura l’unione dei pezzi e la flessibilità delle giunture. E dà anche un effetto “organico” che non mi dispiace.
All’interno c’è, con la parte stampata verso la copertina, un manifesto patinato, tagliato a misura. Il Kindle è tenuto in posizione, con tutti i pulsanti e connettori a vista, da quattro gancetti di gomma flessibile realizzati con del Sugru.
La Figlioluccia lo usa, le piace, a me tanto basta.
.
..
….
.

Il PADD


Il Nook è un animalaccio anfibio: ha il pulsante di accensione dietro in alto, il connettore in basso, i pulsanti per scorrere delle pagine sul davanti, l’alloggiamento per la SD su un lato.
M’è toccato fare una cover più invasiva delle altre.
del solito cartone spesso ho tagliato quattro pezzi: uno per coprire, ovviamente, lo schermo, uno per provvedere un aggancio, e due per fare uno snodo. Questi ultimi tre hanno uguale larghezza, uguale spessore, ma diversa lunghezza. Ho per primo incollato -stavolta mastice, non vinavil- la parte che sarebbe andata verso l’esterno sulla stoffa di un vecchio jeans. Ad opportuna distanza, nè troppo lontani nè a contatto, in modo da poter poi piegare il tutto verso il retro del lettore, gli altri tre pezzi, ben centrati. Ho sagomato la stoffa e opportunamente piegato i bordi.
Ho spillato del nastro elastico sul davanti, e su di esso ho incolato del velcro, in modo sia da dissimulare le spillature che da aggiungere con la colla robustezza al fissaggio. Sopra ci sta benissimo una toppa velcrata e quindi intercambiabile. Il nastro è della lunghezza precisa per poter tenere la copertura chiusa, non credo importasse dirlo. La parte di spillatura che sporge sul lato interno è schiacciata e ricoperta con nastro telato.
Sulla superficie interna della copertina ho incollato del panno in microfibra -ex spolverino, due euro, credo, all’uopo acquistato- che dovrebbe proteggere dai graffi, e copre l’antiestetico nastro telato.
Ci sono pure due gommini per cassetti dell’IKEA sugli angoli per evitare che la copertina prema i tasti di scorrimento.
Come si fissa il tutto al lettore? Velcro adesivo, la soluzione meno invasiva a cui ho saputo pensare (oltre all’infattibile, per me, clip negli alloggiamenti laterali deputati).
Come si vede dalla foto, funziona anche come stand.

Costo delle tre copertine? Praticamente nullo, tempo di realizzazione variabile dalla mezz’ora del PADD alle otto ore asciugatura compresa del Diario.

Spero di esser stato esaustivo e chiaro. Nel caso, ci sono i commenti 😉

L’avevo detto e non l’ho fatto…

.

Ecco qua l’altra tastierina.

Più piccola, più sottile, per cambiare la legenda dei tasti basta sostituire un foglio di carta tra lo chassis in plexiglass e uno trasparente più sottile.
La parte inferiore ha i piedini in Sugru che coprono le viti di fissaggio e un’imbottitura adesiva che fa da base antiscivolo e copre saldature e cablaggi.
Il codice è più o meno lo stesso.

Facciamo…

Facciamo che la Figlioluccia mi ha regalato una bilancia per Natale.
Ma non una bilancia qualsiasi, no.
Una Withings, una bilancia che ti analizza e smonta e, soprattutto, comunica via WiFi con mille siti, se glielo dici.
Facciamo che la prima volta che ci son salito ho fatto “oddio, oddio, non è possibile”, e mi sia, diciamolo accademicamente, ricacato in mano per la mia salute.
Facciamo che col sottocitato IFTTT ho messo su un foglio di calcolo su Google Docs per mettere in grafico sette-otto parametri tra bilancia e centimetro, che mi avvisan subito quando sgarro.
Facciamo che nel pannello di controllo della bilancia ho visto che si linka anche con diversi siti di fitness, primi tra tutti Endomondo e Myfitnesspal.
Facciamo che la Figlioluccia dice che son diventato ossessivo, che peso e segno tutte le calorie e i nutrienti di quello che mangio, anche se poi sgarro spesso.
Facciamo che ho perso sette chili in meno d’un mese.
Facciamo che di Endomondo mi son tirato sul cellulare l’applicazione che fa un log GPS di quanto cammini, corri, e poi passa i dati a Myfitnesspal.
Facciamo che mi son comprato anche un Fitbit, per quando non sono all’aperto, che mi incentiva a far le scale.
Facciamo che adesso tutte le mattine mi faccio lasciare non proprio al cancello del lavoro, e la sera faccio un pezzetto a piedi prima di farmi raccogliere per andare a casa.
Facciamo che m’è venuta voglia di mettermi a correre. No, dai, questo no, non facciamolo, che non è proprio vero.
Facciamo però che oltre che per la salute mia, tutto ‘sto casino lo faccio perché ho scoperto Earndit, che i miei passi, i miei minuti di corsa e le rampe di scale che strappo all’ascensore li trasforma in punti e i punti in beneficienza.
Facciamo che la stessa beneficienza la può fare anche chi ha un Garmin di quelli da corridori serii, o anche solo un cellulare col GPS.
Facciamo che anche voi vi fate prendere dal trip della camminata che trasforma la vostra trippa in medicine per un bambino guatemalteco? E avvisatemi, così divntm trp amc, e C add ksì ci tifiamo a vcnd!

Facciamo del bene.

Teensy (post nerd e scacciafiga)

Tra i tanti progetti che porto avanti contemporaneamente, uno è quello della tastiera USB per macro universale.
Ricordate che di tanto in tanto faccio sottotitoli?
Ricordate che nel mio rozzissimo tutoriali per VSS decantavo l’utilità di una tastiera esterna con le macro?
Bene, quelle in commercio o non sono programmabili, o sono care impestate, o hanno troppi pochi tasti, o sono dispositivi per gaming troppo ingombranti.
Quindi ne ho messi in cantiere (sei mesi fa, credo, ormai) due modelli, uno molto piatto (una volta finito sarà poco più alto del circuito di comando, la cui altezza è influenzata soprattutto dalla presa USB) e uno pieghevole.
Com’è come non è (tagliare e forare il plexiglass è un lavoro di fino) il primo è rimasto indietro, ed ho terminato il secondo, più grezzo.
Sono partito da Arduino, nello sviluppo del progetto, ma ho ripiegato immediatamente su Teensy, molto più piccola, economica, e soprattutto ai tempi era l’unica a fornire una HID USB nativa.
Ne ho studiato la documentazione, ho rotto le scatole a diversi amici per un’estate sulla modificabilità di codici e librerie trovati online, ho provveduto all’acquisto.

Per la tastiera, il modello flat è una matrice di pulsanti su millefori (vedrete), per quello pieghevole, come vedete, sono quattro tastierini pseudo-telefonici acquistati su ebay collegati in matrice:

Come si può vedere, il fatto che colonne e righe avessero i pin mescolati e non in ordine non ha facilitato la cablatura.

C’è una sola vite per cerniera perché, fisicamente, l’altro occhiello andava in corrispondenza di una pista: mettere le altre quattro viti avrebbe significato danneggiare la tastiera, cosa che ho evitato per il resto del fissaggio inserendo le viti nei “montanti” plastici più esterni.

Ovviamente a lavoro finito ho rivestito il lato posteriore con una gomma antiscivolo, ho messo dei piedini alti quanto il chip+USB in modo da dare stabilità e ho lasciato una finestra trasparente per il LED e il pulsante di reboot (che serve per il caricamento del codice).

Già, il codice. Ho copiato e attinto da codice di diverse applicazioni, ho chiesto aiuto su un paio di forum quando la mia bozza non funzionava. M’hanno fatto levare gli apici dai case dello switch -boh?- e rileggendo le specifiche della libreria ho visto che dovevo togliere una colonna dal pin del LED (ebeh, RTFM).

È legnoso, ridondante, ma funziona.

#include < Keypad.h>

   int led = 11;
  const byte ROWS = 6;
  const byte COLS = 8; 
  char keys[ROWS][COLS] = {
    {38, 37, 36, 35, 14, 13, 12, 11},  
    {28, 27, 26, 25, 24, 23, 22, 21},
    {18, 17, 16, 15, 34, 33, 32, 31},
    {48, 47, 46, 45, 64, 63, 62, 61},
    {58, 57, 56, 55, 54, 53, 52, 51},
    {68, 67, 66, 65, 44, 43, 42, 41},
   
  };
  
  byte rowPins[ROWS] = {10, 12, 13, 14, 15, 16}; //connect to the row pinouts of the keypad
  byte colPins[COLS] = {1, 2, 3, 4, 5, 6, 7, 8}; //connect to the column pinouts of the keypad
  
  // Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup ()
{
  // initialize control over the keyboard:
  Keyboard.begin();
}  // end of setup

void loop () 
  {   
   
   
  digitalWrite(led, HIGH); 
    
    
    
   byte key =  kpd.getKey();
   if (!key)
     return;
     
  switch (key)
    {
    case 11: Keyboard.set_key1(KEY_F5); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//start -100
    case 12: Keyboard.set_key1(KEY_F6); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//start -10
    case 13: Keyboard.set_key1(KEY_F7); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//start +10
    case 14: Keyboard.set_key1(KEY_F8); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//start +100
    case 15: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //70%
             Keyboard.set_key1(KEY_7); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 16: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //80%
             Keyboard.set_key1(KEY_8); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 17: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //90%
             Keyboard.set_key1(KEY_9); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 18: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //100%
             Keyboard.set_key1(KEY_0); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 21: Keyboard.set_key1(KEY_F12); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//stop -100
    case 22: Keyboard.set_key1(KEY_F11); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//stop -10
    case 23: Keyboard.set_key1(KEY_F10); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//stop +10
    case 24: Keyboard.set_key1(KEY_F9); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now(); break;//stop +100
    case 25: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //show pipe
             Keyboard.set_key1(KEY_H); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 26: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //Replace from pipe
             Keyboard.set_key1(KEY_R); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 27: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //Save
             Keyboard.set_key1(KEY_S); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 28: Keyboard.set_modifier(MODIFIERKEY_ALT);  Keyboard.send_now(); //play pause VLC
             Keyboard.set_key1(KEY_TAB); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_key1(KEY_LEFT); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now();
             Keyboard.set_key1(KEY_LEFT); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now();
             Keyboard.set_key1(KEY_SPACE); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(MODIFIERKEY_ALT); Keyboard.send_now();
             Keyboard.set_key1(KEY_TAB); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 31: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //wav display left
             Keyboard.set_key1(KEY_O); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 32: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //goto
             Keyboard.set_key1(KEY_G); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 33: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //find
             Keyboard.set_key1(KEY_F); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 34: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //wav display right
             Keyboard.set_key1(KEY_P); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 35: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //delay
             Keyboard.set_key1(KEY_D); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 36: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //redo
             Keyboard.set_key1(KEY_Y); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 37: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //strip tags
             Keyboard.set_key1(KEY_T); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 38: Keyboard.set_modifier(MODIFIERKEY_ALT); Keyboard.send_now(); //È
      Keyboard.set_key1(KEYPAD_0); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
      Keyboard.set_key1(KEYPAD_2); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
      Keyboard.set_key1(KEYPAD_0); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
      Keyboard.set_key1(KEYPAD_0); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
      Keyboard.set_modifier(0);  Keyboard.send_now(); Keyboard.print(" "); break;
    case 41: Keyboard.print ("Signor"); break; 
    case 42: Keyboard.print ("Professor"); break;
    case 43: Keyboard.print ("Dottor"); break;
    case 44: Keyboard.print ("Perché "); break;
    case 45: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //pause
             Keyboard.set_key1(KEY_P); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 46: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //previous sub
             Keyboard.set_key1(KEY_B); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 47: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //next sub
             Keyboard.set_key1(KEY_N); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 48: Keyboard.set_modifier(MODIFIERKEY_ALT);  Keyboard.send_now(); // play to end
             Keyboard.set_key1(KEY_RIGHT); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 51: Keyboard.print ("signor"); break;
    case 52: Keyboard.print ("professor"); break;
    case 53: Keyboard.print ("dottor"); break;
    case 54: Keyboard.print ("perché "); break;
    case 55: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //split
             Keyboard.set_key1(KEY_S); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;Keyboard.println ("55"); break;
    case 56: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //merge with next
             Keyboard.set_key1(KEY_M); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 57: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //merge dialog
             Keyboard.set_key1(KEY_D); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 58: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //loop
             Keyboard.set_key1(KEY_L); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 61: Keyboard.set_modifier(MODIFIERKEY_CTRL );  Keyboard.send_now(); //spell check
             Keyboard.set_key1(KEY_H); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 62: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //check error
             Keyboard.set_key1(KEY_K); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 63: Keyboard.set_modifier(MODIFIERKEY_CTRL | MODIFIERKEY_ALT);  Keyboard.send_now(); //error fix
             Keyboard.set_key1(KEY_F); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 64: Keyboard.set_modifier(MODIFIERKEY_ALT);  Keyboard.send_now(); //next error
             Keyboard.set_key1(KEY_N); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 65: Keyboard.print("- "); //dialogo
             Keyboard.set_key1(KEY_ENTER);Keyboard.send_now();Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.print("- ");
             Keyboard.set_key1(KEY_UP);Keyboard.send_now();Keyboard.set_key1(0); Keyboard.send_now();
             break;
    case 66: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); // Undo   
             Keyboard.set_key1(KEY_Z); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 67: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //text in italic
             Keyboard.set_key1(KEY_I); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    case 68: Keyboard.set_modifier(MODIFIERKEY_CTRL);  Keyboard.send_now(); //add subtitle
             Keyboard.set_key1(KEY_W); Keyboard.send_now(); Keyboard.set_key1(0); Keyboard.send_now();
             Keyboard.set_modifier(0);  Keyboard.send_now(); break;
    
    
    
    
      
    } // end of switch
  } // end of loop

Questo è il risultato finito:

E funziona, pure. Ne sono tanto stupito che questo post è grossomodo per chiedere “cosa ho sbagliato due volte per farla giusta?”.

If This Than That

Quant’era che non parlavo di un servizio internet o di un gadget?
Dai tempi di Second Life (abbandonata solo perchè mi soddisfa molto di più la first, da un bel po’), perlomeno.

Okay, oggi devo esprimere tutti i miei “wow” per un servizio che ho scoperto da un annetto ma che uso a modino solo da un paio di mesi:

IFTTT.COM

Già il motto ben promette: “Put the internet to work for you”, “Fai lavorare Internet per te”. È quello che fa: interfaccia diversi servizi internet di uso comune, da Facebook a WordPress a Dropbox, e pure un ottimo servizio SMS -per ora; in USA funziona anche il servizio chiamata, che legge anche testi-.

Con una interfaccia di immediata comprensione, consente di creare delle “recipes”, ricette, che leghino un servizio all’altro secondo delle regole scelte di volta in volta da menù -niente programmazione o codice, per intenderci, al contrario di un altro servizio, più flessibile ma più complicato, Paraimpu*– e pure di condividerle.

Faccio un po’ di esempi: io ho creato delle ricette che
IF THIS: esce un RSS di un torrent di telefilm che seguo THAN THAT: mi manda un SMS.
oppure
IF THIS: è il tramonto THAN THAT: mi manda un SMS coi dati del tempo odierno e le previsioni per domani.
oppure
IF THIS: pubblico un post su WordPress THAN THAT: pubblica su Twitter e Facebook.
oppure ancora
IF THIS: esce una nuova tavola di Zerocalcare THAN THAT: me la manda in mail.
o ancora
IF THIS: mando una mail, anche da cellulare, con tag #spese a un dato indirizzo THAN THAT: aggiunge una riga a un foglio spese excel in Google Drive rispettando la formattazione da me specificata.

Posso andare avanti per 35 ricette. Solo 35 perchè non uso tutti i servizi -i canali- che questa macchinetta mette a disposizione.
Davvero, non se ne esce vivi: al momento sono 50 “trigger”, azioni/eventi riconosciuti, da App.net a Youtube -senza dimenticare dei trigger non internet quali data/ora, meteo, domotica e SMS**- e 53 canali con almeno due o tre azioni in uscita cadauno.
Fate voi i conti di quante combinazioni sono possibili, senza contare che ogni tre per due viene aggiunto un nuovo canale (vabbè, di contro Twitter si è tolto dai trigger, per esser sicuro di generarsi traffico umano. Poveri).

Insomma, giocateci un po’.
Da quando ci smanaccio con un po’ di attenzione, il mio cellulare è diventato un hub di servizi net-related, e anche non, visto che mi avvisa se l’indomani sarà troppo caldo o troppo freddo, o se si aspetta pioggia, mi avvisa di compleanni e -ahem- nuovi torrents disponibili.

E un’altra cosa, secondo me fondamentale: ‘sta gente risponde alle mail di richiesta supporto in tempi brevi, cortesemente e competentemente. E ti ringraziano per il feedback.
Lo stesso Paraimpu, ed entrambi hanno capito che non sono solo i bit che fanno grande un servizio, ma anche la gente che ci sta dietro.

.
.
.
.
.
.
.

* Paraimpu consente di utilizzare il Karotz (se non sapete cos’è non siete davvero nerd, e questo post vi ha solo annoiato) come attuatore. C’ha di ottimo che gestisce roba tipo sensori ambientali, smart-TV, Arduino e Netduino, quindi l’unico limite (altrui) è la fantasia. Il mio è la competenza.
** Fatemi sapere se a voi riconosce i tag

Giusto per non restare con le mani in mano…

Mi son fatto partire la mattana del rasoio a mano libera.
Dalla shavette -mano libera con lame intercambiabili- il passo è stato breve ma soddisfacente.
Però ha richiesto il lavoro sugli accessori. Come negarsi due-tre ore nel garage genitoriale tra basette in plexiglass, trapani a colonna e pasta lucidante, volte alla costruzione di un supporto per tutti gli ammennicoli utili alla rasatura “all’antica”?



Si accettano ordinazioni.

(Scherzo, no, po’ero babbo)

Aggiornamenti

La tastiera con jog è finita è funzionante.
Ricordo che mi è costata un mouse con rotella, una tastiera, un tastierino a matrice. Poi tutto sostituito.
Ma eccola qua:

Se non che già l’ho cannibalizzata, che era troppo ingombrante e pesante -lo so, potevo pensarci prima- per un uso sul campo.
Ecco qua il cannibalizzato, nella scatolina fatta colla macchinetta di cui sotto:

Lo so, le etichette fanno recere, ma per ora van più che bene. I pulsanti sono “sotto traccia”, così posso trasportare il tutto senza stroncarli in una tasca. Magari farò un coperchio “a ruotare” con un chiodo e un pezzo di plastica non troppo spessa. Ma poi.
Prossimo passo, Ubertastiera.

Quando uno è nerd, è nerd.

Ricordate che ho sei progetti in ponte, ognuno dei quali ramificato in almeno altri tre?

Sono arrivato a metà di uno dei rami.

Cosa fai quando non trovi una scatoletta porta-progetti in plastica adatta alla wannabe-Ubertastiera su clone arduino?
Te la fai, no?
Come? Prendi un fondo, dei listelli, e la fai con una cornice di legno, ovvio.
E la cornice come la fai, come ci fai le incisioni che reggano il circuito, il fondo e il pannello frontale?
Le incidi con una fresa, visto che non hai nè una CNC nè una stampante 3d.
Ma le frese da hobbysti non hanno punte così fini, che vanno solo sui simil-dremel.
Già, ma come fai a spostare il dremel in linea retta?

Ecco la soluzione:

Gli manca solo il Bluetooth.

Non sentite?

Al momento, questi sono i progetti che ho in corso e il relativo materiale che mi porto dietro:

– Sottotitolatura e timing di tre film: chiavetta con materiale e software, netbook, tastiera programmabile con le scorciatoie e le macro utili.

– Scrittura del mio romanzo a puntate: chiavetta con materiale e software, un libro e un ebook reader con la documentazione, una dispensa di corso di scrittura creativa.

– Creazione di una stazione portatile di timing e sottotitolatura jog, pulsanti e tastiera, ottenuta con una testina di videoregistratore, un mouse cannibalizzato, una tastiera cannibalizzata, un tastierino 16 tasti a matrice righe/colonne con le piste abrase, un micro hub USB: per fortuna, niente materiale dietro salvo gli acquisti quotidiani (due pulsanti).

– Replica del medesimo tastierino mediante teensy, un clone Arduino: documentazione sul C+ su ebook reader, libro su Arduino.

Insomma, sto contemporaneamente provando a
– imparare un minimo di C+
– imparare un minimo della piattaforma Arduino
– studiare per il mio racconto
– scrivere il medesimo
– mettere assieme un progetto hardware che l’ultima volta che l’ho assemblato l’ho battuto a terra per la frustrazione insegnargli chi comanda, visto che “volante” funzionava, assemblato no, a caso, nonostante l’abbia smontato e rimontato quattro volte, con ustioni da colla a caldo, tagli da trincetto, getto del cloneDremel fottuto.

Per rilassarmi con la solita smanaccioterapia, ho messo TROPPA carne al fuoco, lo so.

Non sentite il mondo che ride di me, che per hobby mi stresso?

Leggere le avvertenze e le modalità d’uso

http://www.leevalley.com/wood/page.aspx?c=2&p=53927&cat=1,43413,45992

Una cintura portaattrezzi magnetica. Si sono accorti anche loro che è una boiata, vero? 🙂

Disclaimer – Not for use in proximity to large masses of ferritic steels. Do not wear when operating power machinery, particularly (but not limited to) hand-held grinders, drills, weed-whackers, and chainsaws. Ineffective for use with bronze tools (the bronze age is over). Not for use as a human suspension device. We cannot ship by air. Use prohibited within 50m of navigational devices. Keep off migratory bird paths. Keep away from pacemakers, credit cards, active forges, and MLEV tracks. Do not enter VHS rental premises. Limit one per household – do not approach other belt users. Does not improve blood flow, automobile mileage, or the taste of food.

Good Companies

Sabato e ieri io e la Figlioluccia eravamo di corvee lavatrice.
La suddetta macchina è una Ocean PK100 di seconda mano, acquistata da un collega quando casa mia contava a malapena un letto matrimoniale con un materasso singolo, una cucina difettata della Emmelunga e un paio di scaffalature industriali utilizzate come libreria.
A fine lavaggio, lo sportello non si apre. Aspettiamo.
Nulla. Facciamo ripetere l’ultima fase, e aspettiamo il nuovo sblocco.
Ancora nulla.
Andiamo a letto, e appena sveglio iermattina provo a riaprire lo sportello.
Hop, un gioiellino. Capisco che non è questione di programma, visto che la macchina è spenta da dodici ore, ma di temperature, effetti ventosa e quant’altro possa fisicamente impedire la corretta apertura, tant’è che il secondo carico viene estratto senza problemi dopo aver spento la macchina per venti minuti.
Per sicurezza, cerco il manuale della macchina sul sito della Ocean. Ottimo, ben organizzato, intuitivo, ma per il mio modello non c’è un pdf da scaricare. C’è però un indirizzo di mail al link “richiesta manuali”.
Clicco, compilo come si deve e mi preparo ad un’attesa eterna.
Invece no.
Stamattina arriva questo:

Gentile Cliente,
in risposta alla Sua richiesta La informiamo che il libretto specifico per la sua lavatrice non è disponibile in supporto informatico e quindi provvederemo a spedirLe gratuitamente con servizio di posta prioritaria un libretto cartaceo generico.

La invitiamo a comunicarci il Suo indirizzo ed autorizzarci al trattamento dati ai sensi della legge 196/03

Porgiamo nell’occasione i nostri più cordiali saluti

Servizio Clienti
BRANDT ITALIA SpA

Insomma, l’esempio più lampante di OTTIMO servizio assistenza, e ricerca della soddisfazione del cliente. E merita, come meritava Emmelunga tutta la mia pubblicità negativa, una gran pubblicità POSITIVA, visto che quando le cose funzionano bisogna ringraziare e premiare chi si impegna per renderle funzionanti -ricordate la mia avventura con l’ottima Logitech e con l’altrettanto ottima Weider? ecco.

Della stessa risma è Brando, che mi ha sostituito senza far domande una penna USB PICO-C che aveva cessato di funzionare con una nuova, appena ho inviato loro quella guasta. Mi hanno comunicato la ricezione e contestualmente il reinvio. Arrivata sabato direttamente a casa senza spese se non quelle di invio.

Che dire?
Grazie. E’ un piacere separarmi dai miei soldi quando so che oltre a un bene avrò un servizio, e la cortesia di un interlocutore. Ormai la differenza sta tutta lì.

Se lo vede l’esercito svizzero, mi nuclearizza il garage

DSCN0015No, che uno trova un vecchio coltello dell’esercito svizzero, mentre sistema il garage.

Lo trova colle guancette tutte battute, scheggiate, disfatte, come se questo povero Victorinox non avesse avuto altra utilità che essere usato come un martello, cosa che rende impossibile che il Victorinox già fosse appartenuto al Cicali, e rende probabile che sia un ritrovamento del vecchio bar.

Allora che fa? Visto che alla Figlioluccia non disgarba, prova prima a stuccare le guancette col fimo, ma visto che il risultato è tragico, prende e fa delle guancette nuove.
Illumìna i pesciolini

Prima gnuda il coltello delle vecchie. Prende due colori di fimo e li mescola ma non troppo. Ricostruisce due guancette grossolane.  Effettua una prima cottura a 60° dei due pezzi già attaccati al coltello, in modo che acquistino una certa resistenza, li stacca dal medesimo e poi ricuoce come si deve.

Poi scatta il lavoro di rifinitura, carteggiatura, scavo col Dremel degli alloggiamenti per la penna, le pinzette e lo stuzzicadenti, poi una nuova carteggiatura e lucidatura fine. Col lucido per fimo si da una mano protettiva, e prima che asciughi si applica il logo Victorinox certosinamente staccato dalle guancette vecchie. Un’altra mano di lucido, e meno di ventiquattr’ore dopo il multiuso messo a nuovo è nella borsa della Figlioluccia, che sarà libera di dimenticarsi di averlo e/o borbottare perchè pesa troppo.

Il Cicali, invece, avrà dimostrato come ama bullarsi di qualsiasi sua opera manuale, per quanto minore o nerd essa sia.