lunedì 23 febbraio 2015

Video.js

Dopo l'esperienza con JwPlayer () e con JPlayer (), mi sono ritrovato a provare per un progetto di pubblicazione video Video.JS

Il problema maggiore per Jwplayer e' la necessita' di una chiave anche per la versione Free ed il logo sempre presente nell'angolo in alto a sinistra che puo' non essere gradito dai clienti.Peraltro la gestione delle skin su Jwplayer non e' proprio semplicissima (cambia da versione a versione) e nella versione free e' molto limitata

Video.JS e' invece un prodotto open source senza particolari limitazioni e con la presenza di una barra semi trasparente che non rende necessario portare la barra degli strumenti al di fuori della finestra del video


L'installazione e' banale in quanto basta copiare il pacchetto e modificare il file html modificando il puntamento del link del video)


Le configurazioni dell'aspetto della barra sono gestiti tutti a livello di CSS

Essendo un progetto in HTML5 non sono fiducioso che funzioni su tutti i browser ma almeno su Chrome 40, Firefox 33.1 ed Internet Explorer 8 e' stato testato e funziona

PCDuino

Grazie ad un prestito sono riuscito a provare la scheda PCDuino, un calcolatore basato su Arm che unisce due anime in una un quanto e' possibile utilizzarla come una Arduino

Di fatto la scheda si pone a meta' strada come prezzo tra una Raspberry ed una Arduino YUN

Sul modello che ho avuto in prova PCDuino Nano v3 e' disponibile una uscita HDMI, WiFi, connettore SATA, porta ad infrarossi, lettore microSD, Connettore Ethernet



Il sistema operativo non e' contenuto nella SD ma e' su una flash memory (al contrario di Raspberry).
Al boot compaiono due pinguini a testimoniare come il processore sia dual core
La distribuzione installata e' una Linaro-Alip (specifica per Arm che usa apt come gestore dei pacchetti) e LXDE come DM


Le impresssioni di uso di Linux sono decisamente buone ed e' molto piu' fluido ed usabile che su Raspberry
Per programmare la parte Arduino e' presente la IDE preinstallata che comunica su /dev/ttyS1 (di fatto non e' possibile programmare direttamente Arduino via cavo come si fa con le schede tipo Uno e Due ma si deve programmare direttamente da dentro PCDuino)
Al contrario di Raspberry sono presenti, oltre alle porte GPIO accessibili anche tramiti la parte Linux, anche delle porte analogiche con risoluzione anche fino a 12 bit

Sono presenti anche alcuni pulsanti fisici (tra cui quello di reset) al contrario di quanto su Raspberry

Considerando il prezzo vale veramente la spesa e non mi risulta chiaro il motivo della scarsa popolarita' di questo dispositivo (anche in funzione del prezzo di poco superiore a Raspberry a fronte di una dotazione hardware nettamente migliore, anche per la sola presenza del WiFi)

venerdì 20 febbraio 2015

Eagle has landed

Piu' o meno per me e' stata un'esperienza simile a spedire qualcosa sulla Luna.
Un paio di settimane fa un mini computer e' partito da Firenze (configurato per connettersi in automatico ad una VPN in cui il server e' il wrtg54 visto qui) destinazione vulcano Copahue per essere attaccato ad un rete di monitoraggio di cui non conosco i settaggi e le impostazioni di protezione.
Sul posto non c'e' nessuno che poteva modificare i settaggi per cui doveva funzionare alla prima e solo attaccando l'alimentazione ed il cavo di rete


Dopo un viaggio di 12280 km (per lo meno sulla geodetica) ed un paio di settimana di attesa e' arrivata la mail che il computer era stato connesso alla rete e qualche decina di secondi dopo e' comparso nel log del server vpn diventando quindi amministrabile a distanza

giovedì 19 febbraio 2015

XML 2 CSV con XQuery

Il problema di oggi e' prendere un file xml molto lungo, estrarne alcuni campi in base ad alcune regole e poi effettuarne l'esportazione in CSV


La prima cosa che  mi e' venuta in mente e' stata quella di importare l'XML in Mysql, agire con qualche query ed esportare il risultato (Mysql ha filtri nativi sia per xml che csv) ma poi mi sono messo a cercare ed ho trovato XQuery, un linguaggi similSQL che agisce sui file testo xml

Una delle implementazioni di questo linguaggio si trova in xqilla, facilmente reperibile nei repository di Debian

apt-get install xqilla

per semplificare le cose mostrero' come funziona su un file di piccole dimensioni (visualizzato in Firefox che ha un discreto visualizzatore di file xml)


Xqilla non permette di avere un uso interattivo e si deve creare un file con lo script Xquery. L'esempio lo riporto di seguito

esempio.xq
-------------------------------------------------------------
for $x in doc("eventi.xml")/Root/Evento
where $x/Durata>15
return
concat("luca;",
$x/Titolo/text(),
";",
$x/Luogo/text())

-------------------------------------------------------------

la sintassi e' piuttosto semplice
nella prima riga viene caricato il file xml con la gerarchia di interesse
nella seconda riga vengono selezionati i record con la durata maggiore di 15
nelle righe successive avviene l'output concatenando una stringa e due campi (senza specifiche viene mostrato il record con i suoi tag per esempio <Luogo>Firenze</Luogo> mentre con la specifica /text() si ottiene il contenuto del record senza i tag)

lanciando il comando
xqilla esempio.xq

il risultato sara'
luca;Calcio in costume;Firenze

comodo, veloce e scriptabile

mercoledì 18 febbraio 2015

FailOver con Corosync/Pacemaker per Apache su Debian/WmWare

Il failover e' un sistema per permettere la continuita' di un servizio di rete mediante due server (di cui uno attivo ed uno passivo) che si sostituiscono nel caso in cui il sistema primario non funzioni in modo corretto



Attenzione : Il sistema indicato gestisce solo i servizi ma non la sincronizzazione dei dati

Per la configurazione e' stata seguita (e parzialmente modificata) la guida a questo link

Per simulare il sistema sono stati creati due server virtuali (deb1 e deb2) ed un client su WMware Player. I server sono stati configurati in modo identico partendo da una Debian base ed installando i pacchetti corosync, pacemaker ed apache2.

Il servizio ad alta disponibilita' (HA) sara' disponibile su 192.168.32.150

deb1 : 192.168.32.138
deb2 : 192.168.32.139
debclient : 192.168.32.140
HA : 192.168.32.150

la prima verifica e' che le macchine siano in grado di pingarsi reciprocamente

per prima cosa e' stato modificato il file /etc/hosts per far risolvere il nome in modo statico dell'altra macchina

per esempio su deb1 e' stato aggiutno
192.168.32.139 deb2.nearbee.it deb2

cosi' da deb1 si puo' pingare direttamente deb2

poi e' stato modificato il file /etc/corosync/corosync.conf  utilizzando il set di indirizzi dei server

interface {
ringnumber: 0
bindnetaddr: 192.168.32.0
 mcastaddr: 226.94.1.1 mcastport: 5405 }

in seguito si verifica /etc/corosync/corosync.conf  abbia ver=0 (di default e' gia' cosi') e si imposta START=yes su /etc/default/corosync

si effettuano le stesse modifiche sia su deb1 che su deb2 e poi si avvia il servizio
/etc/init.d/corosync start

con il comando
crm_mon -1
si devono quindi vedere i due server online

visto che si tratta di una configurazione a due macchine si impostano i seguenti parametri

crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore

a questo punto viene impostato l'indirizzo HA 
crm configure primitive VIP ocf:IPaddr2 params ip=192.168.32.150 nic=eth0 op monitor interval=10s 

si verifica che l'ip virtuale 192.168.32.150 sia pingabile

si imposta quindi quale servizio deve essere impostato come high availability (nel nostro caso apache)
(HA-apache e' un nome che puo' essere impostato a piacere

crm configure primitive HA-apache lsb:apache2 op monitor interval=15s
(puo' essere configurato qualsiasi servizio presente in /etc/init.d/)
per verificare che il servizio sia stato modificato usare crm_mon -1
per semplicita' si puo' modificare il file index.html in /var/www inserendo il nome del server per rendere chiaramente visibile quale macchina sta rispondendo


a questo punto il sistema fail over e' completo
con i server deb1 e deb2 accesi e funzionanti, si puo' dal client collegarsi ad 

http://192.168.32.150

e rispondera' il server deb1. Spengendo la macchina virtuale deb1, l'indirizzo virtuale 192.168.32.150 sara' acquisito da deb2, collegandosi quindi ad http://192.168.32.150 sara' la macchina di backup a rispondere




And Now for Something Completely Different

Caserma dei pompieri 
Meccanici di auto
Batman e Joker

Capitan America

Star Wars (Yoda sulla sinistra)




martedì 17 febbraio 2015

RSync Linux to Mac

Dovendo scambiare qualche tera di dati tra una macchina Linux ed un Mac Os X Server 10.9 ho provato a lanciare un rsync al posto di un piu' comune scp

Il primo problema individuato e' stato che su Linux era installata una versione 3.1.1 di rsync mentre su Mac era presenta una vetusta 2.6.9 (rilasciata nel 2006!!!). Cioe' creava conflitto nella trasmissione dei dati

Grazie al progetto Rudix e' stato possibile installare la versione piu' recente e rendere compatibili nel numero di versione la parte Linux e Mac

Rilanciato lo scambio dati, questo e' iniziato ma non riusciva a copiare alcuni file perche' la codifica dei caratteri del nome file era in UTF-8 multibyte (caratteri speciali in particolar modo lettere accentate)

Uno dei suggerimenti trovati su Internet era quello di definire lo switch

--iconv=utf8,latin1

ma all'atto pratico non ha funzionato (alcuni utenti riportano che sia un problema specifico dello scambio da Linux a Mac

Ha invece avuto successo effettuare prima una conversione dei nomi prima di rsync con il comando

convmv -f latin1 -t utf8  --notest file_name

(l'ultimo switch e' quello che rende operativo il cambio di codifica, senza questo viene solo effettuata una simulazione)

Olivetti Da VInci DV3 PDA funzionante

Aspettavo da tempo l'acquisizione nel mio piccolo museo. Per alcune caratteristiche seguire il link