venerdì 3 aprile 2015

HTML Dom Parser in PHP

In questo post viene descritto come estrarre i dati da una pagina HTML. Cio' mi e' stato richiesto perche' una ditta offre un servizio di pubblicazione dati (peraltro forniti con licenza Common Creative) in formato CSV solo a seguito di autenticazione mediante un Captcha impedendo di fatto il download automatico

I medesimi dati sono pero' pubblicati anche all'interno di una tabella di una pagina HTML piuttosto complessa. Per "catturare" i dati si puo' analizzare il Document Object Method HTML (DOM) mediante la libreria Simple HTML Dom (http://simplehtmldom.sourceforge.net/) che indicizza i tag e permette di creare per esempio degli array php a partire da tag table

una volta importata la pagina html (anche da un link web oltre che file) nell'esempio sottostante e' stata selezionata la seconda tabella presente nel codice (linea evidenziata in giallo). Il contenuto della tabella e' salvato nell'array rowData

--------------------------------------------------------
<?php
require('simple_html_dom.php');
$html = file_get_html('http://xxxxxxx');

$table = $html->find('table', 2);
$rowData = array();

foreach($table->find('tr') as $row) {
    $flight = array();
    foreach($row->find('td') as $cell) {
        $flight[] = $cell->plaintext;
    }
    $rowData[] = $flight;
}
--------------------------------------------------------

La libreria funziona anche su pagine html non perfettamente formattate (per esempio con tag aperti e non chiusi)

giovedì 2 aprile 2015

Ubuntu 14.10 su Lenovo X201

Avendo fretta di mettere in servizio un Lenovo X201 ho installato su questa macchina Ubuntu al posto della mia solita Debian sperando di non aver problemi..vana speranza.

Al riavvio della macchina non funzionava il touchpad mentre era possibile muovere il mouse mediante il trackpad (il piccolo joystick rosso al centro della tastiera tipico delle macchine IBM/Lenovo)




la soluzione e' stata inserire i seguenti comandi
modprobe -r psmouse 
modprobe psmouse proto=imps

la soluzione definitiva e' quella di creare un file /etc/modprobe.d/psmouse.conf con all'interno
options psmouse proto=imps
un altro problema veramente fastidioso e' che la tastiera, nonostante in fase di installazione fosse stata indicata la lingua italiana, era rimasta settata in inglese/americano. So scrivere su una tastiera muta americana ma e' veramente difficile ricordarsi la posizione di tutti i caratteri speciali (tipo apice inverso)


Con un po' di settaggi sono riuscito a settare in italiano GNOME ma nel momento in cui aprivo una shell di terminale la tastiera ritornava in inglese. Questo problema si e' risolto da solo a seguito di un aggiornamento automatico ma mi ha perseguitato per febbraio e marzo 

Google Maps vs Openlayers

Ho praticamente sempre usato Google Maps per fornire informazioni geografiche via Web ma ultimamente mi e' stato richiesto che


  1. Fosse possibile avere un evento mouseover quando il cursore passa su marker in modo da avere le informazioni senza necessariamente cliccare
  2. Usare gif animate come icone dei marker
  3. L'aggiornamento dei dati via KML doveva essere in tempo reale
Ho quindi dovuto affrontare Openlayers come piattaforma alternativa


Di seguito un medesimo file kml con due vestizioni differenti in Openlayers e GMaps
Openlayers
Google Maps
Un po' di indicazioni di confronto
  • GoogleMaps non permette di fornire dati realtime quando si usano i KML. Di fatto i layer Kml vengono gestiti dai server di Google ed hanno un tempo di cache variabile anche superiore ai 15 minuti; con Openlayers invece la pubblicazione e' completamente gestita in proprio senza nessun ritardo
  • GoogleMaps non ha un evento mouseover quando si usano i kml. In Openlayers la funzione puo' essere programmata
  • GoogleMaps ha una comodo InfoWindow mente fornire informazioni contestuali con Openlayers e' piu' complicato e ci si appoggia a JQuery
  • Openlayers permette marker con gif animate mentre le animazioni su GMaps viene effettuata mediante trucchi e non in modo diretto
  • Openlayer non ha una base cartografica fissa, vengono usate varie sorgenti dati, e non esiste un layer di foto da satellite con dettaglio comparabile con quello di GMaps
  • Scrivere applicazioni per GMaps e' piu' semplice per gli esempi e la compattezza dei comandi. La corrispondente applicazione di Openlayer risulta essere un po' piu' complessa


Openlayers basato su http://openlayers.org/en/v3.4.0/examples/kml-earthquakes.html





giovedì 26 marzo 2015

Kinect v1 vs Kinect v2

Un po' di considerazioni sulla differenza tra Kinect 1 e Kinect2



Le maggiori differenze sono a livello dell'immagine RGB, passata da 640x480 a 1920x1080, ed IR, molto migliorata perche' e' presente in K2 un illuminatore infrarosso che rende la scena leggibile anche nel buio completo.

Per quanto riguarda il sensore di profondita' in K2 la matrice e' passata da 320x240 a 514x424 ma a causa dell'aumento dell'angolo di vista la densita' di punti per grado angolare e' solo passata da 5x5 pixel/grado a 7x7 pixel grado. Rimangono i problemi di acquisire la profondita' su oggetti molto scuri o di materiali particolari per cui la scena di profondita' puo' presentare dei buchi

Per prova ho ripreso in profondita' questi due oggetti, in particolare ero interessato a vedere se Kinect 2 riesce a vedere meglio i pulsanti del telecomando



Questa e' la visione di profondita' di K1 


mentre questa e' la visione di profondita' di K2

Non ci sono sensibili miglioramenti a parte il fatto che K2 produce una mappa piu' smussata perche' registra anche i decimi di millimetro


Giocattoli per la geomatica - Urbino 20 Marzo 2015

Il 20 Marzo 2015 sono stato ospite presso la Facolta' di Scienze e Tecnologie dell'Universita' di Urbino a presentare parte del materiale presente su questo blog, in particolare quello ad indirizzo geologico




La presentazione puo' essere scaricata a questo link http://goo.gl/Euyi0Z

Yubico Security Key su Ubuntu


In preda ad una smania di sicurezza ho attivato l'autenticazione a due passi su Google e mi sono comprato anche una chiavetta compatibile con il protocollo FIDO


In pratica nella chiave e' contenuta una firma digitale non modificabile che viene letta da Chrome per accedere ai servizi di Google senza la necessita' di un codice via telefono
La chiave era vendita come perfettamente trasparente su tutti i sistemi operativi dato che si presenta come una periferica USB di tastiera senza nessun driver da installare

L'indirizzo per registrare la chiave e' il seguente
https://security.google.com/settings/security/securitykey/add?pli=1

Su Windows XP e MacOsX nessun problema. Chrome ha visto la chiave al primo tentativo senza nessuna operazione aggiuntiva oltre all'inserimento nella porta

Su Ubuntu le cose sono state differenti. Per problemi di sicurezza interni a Linux la periferica USB non viene letta in automatico dal sistema operativo. Si deve creare il file 70-u2f.rules
------------------------------------------------------------
# this udev file should be used with udev 188 and newer
ACTION!="add|change", GOTO="u2f_end"

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0402|0403|0406|0407|0410", TAG+="uaccess"

LABEL="u2f_end"
------------------------------------------------------------
ed inserirlo /etc/udev/rules.d/. Al successivo riavvio la chiavetta funziona correttamente

mercoledì 25 marzo 2015

Westermo Lynx DSS L205-S1


Mi e' stato da configurare il dispositivo Westermo Lybx DSS L205-S1. Francamente non conoscevo i prodotti Westermo ma ho potuto vedere che sono prodotti di tipo industriale di tipo rugged

Il dispositivo si monta su sbarra DIN (quella dei quadri elettrici), si caratterizza per una doppia alimentazione ridondante da 24 V CC/290 mA (l'alimentatore non e' fornito) ed ha un peso non indifferente
Non e' indifferente nemmeno il prezzo che si aggira attorno ai 1400 euro per un dispositivo che di fatto e' un piccolo routerino con le stesse funzione del gia' provato WRT54G



L'indirizzo di rete di fabbrica e' 192.168.2.200 e non ha il DHCP attivo per cui si deve mettere il portatile sulla stessa rete con IP in manuale. L'interfaccia Web ha come credenziali admin/westermo ed e' anche attivo un servizio SSH con le stesse password

La prima cosa che ho dovuto fare e' stato l'aggiornamento del firmware perche' quello di fabbrica non prevedeva OpenVPN. Adesso gli aggiornamenti del firmware vengono distribuiti in formato pkg mentre per il vecchio sistema operativo e' necessario effettuare l'upload del file .img.
Scaricato quindi il file pkg si scompatta con 7zip e si trova il file img corrispondente in

\WeOS-4.15.3\upgrade\mxc\Lynx

L'aggiornamento si effettua tranquillamente dall'interfaccia Web

Opencv camera calibration in cpp

Oltre che con uno script Python come visto qui la calibrazione della camera si puo' fare anche con il programma in CPP Questo il proce...