La scrivania virtuale di Sdonk
non meno disordinata di quella reale ;-)-
OpenStreetMap: mapping party a Terlizzi
Pubblicato il gennaio 19th, 2010 Nessun commento31 gennaio 2010 – “Mappa Terlizzi”, il Mapping Party di Terlizzi
Il 31 gennaio alle ore 18.30 la comunità pugliese di OpenStreetMap invita tutti i cittadini al Mapping Party di Terlizzi, presso il Caffè Letterario DaDa in Largo Pappagallo 9.Chi conosce la città meglio dei suoi cittadini? La Comunità pugliese di OpenStreetMap chiede l’aiuto dei cittadini terlizzesi per creare la prima mappa libera della città, e per riempirla di tutte le informazioni possibili: strade, fontane potabili, negozi, beni culturali, ecc.Con questa iniziativa si vuole contribuire alla realizzazione di una mappa libera di Terlizzi, attraverso il progetto internazionale OpenStreetMap. Il progetto OpenStreetMap, una rivoluzionaria iniziativa di “mappatura collaborativa”, spesso definito anche “la Wikipedia delle mappe”, è stato avviato nel 2004 in Inghilterra, permette a chiunque di usare le mappe in modo creativo, per attività commerciali o in modi del tutto inattesi e innovativi. La creazione di una mappa libera è necessaria perchè l’uso delle mappe tradizionali è infatti ostacolato da vincoli legali e tecnici che limitano drammaticamente il loro uso. Lo scopo del progetto OpenStreetMap (abbreviato OSM) è quello di creare dati geografici liberi, che possano essere usati da chiunque e dovunque.Gli OpenStreetMapper sono dei “mappatori” volontari, che possono circolare a piedi, coi pattini, in bici, in moto, in auto, portando con sé dei normali apparecchi GPS (Global Positioning System) registrando il tracciato di quante più strade, piste ciclabili e punti di interesse possibile. I tracciati registrati vengono messi online sul sito di OpenStreetMap.org dove chiunque nel mondo potrà, con un semplice accesso a internet, visualizzare, aggiungere nomi, modificare e usare i dati in qualunque modo si desideri.La mappatura collaborativa è un’attività emergente e in rapida crescita, guidata in parte dalle nuove tecnologie disponibili, quali apparecchi GPS a basso prezzo e strumenti di collaborazione online, come OpenStreetMap.org, ma l’aspetto determinante in questi progetti è la spinta verso un accesso libero alla conoscenza.L’iniziativa è sponsorizzata da DaDa – Caffè Letterario che offrirà l’accogliente e suggestiva sede nel centro della Città, accesso ad internet e proiezione della mappa, e dall’Associazione Culturale C@lliope, che offrirà supporto tecnologico. -
OSMQuake
Pubblicato il luglio 23rd, 2009 Nessun commentoA quasi tre mesi dalla presentazione ufficiale ad OSMit, pubblico finalmente il codice di OSMQuake purtroppo ancora incompleto e con il codice ancora molto sporco e incasinato (l’ho scritto in tre ritagli di tempo la sera tardi).
Ho aspettato così tanto perché mi sarebbe piaciuto completare alcune parti del software che avevo implementato soltanto in parte purtroppo però in questo periodo non ho molto tempo e preferisco pubblicare il codice in modo che chiunque voglia contribuire (anche per disegnare un logo ad esempio) possa farlo.
Il codice sorgente si trova attualmente qui, se qualcuno volesse collaborare posso metterlo su google code e usare svn per la gestione della versione.
Questo è il risultato dell’elaborazione di stamattina sull’Italia centrale.
Già dalla mappa è possibile vedere cosa manca:
- Il raggio del marker è direttamente proporzionale alla magnitudo ma il colore dovrebbe essere inversamente proporzionale al tempo, cosicchè i terremoti più recenti siano di un rosos più intenso.
- Sarebbe bello avere una didascalia con qualche indicazione riguardo i range di dimensioni e di colori e delle statistiche generate automaticamente
Per generare la mappa precedente basta avviare OSMQuake e poi premere sul tasto “Scarica” per effettuare il parsing della pagina e salvare gli eventi in un database sqlite (notare in basso a sinistra il numero degli eventi scaricati):
A questo punto si possono scegliere i parametri di filtraggio, lo zoom della mappa e il tipo di mappa (Mapnik, Osmarender e OpenArial) e si clicca su Genera mappa. A questo punto il software mostra le tile da scaricare e le dimensioni della mappa in pixel e inizia a scaricare le tile necessarie. Dopo di che le unisce e disegna sopra la mappa i marker calcolando dinamicamente il raggio.
Il risultato finale è una nuova finestra con la mappa:
Cosa funziona in OSMQuake:
- Parsing della pagina
- Riempimento del database con gli eventi
- Filtraggio per magnitudo
- Filtraggio per profondità
- Scelta dello zoom
- Scelta del server
- Calcolo delle tile da scaricare
- Calcolo delle dimensioni della mappa in pixel
Cosa non funziona (ancora!) in OSMQuake:
- Filtraggio degli eventi in base alla distanza da un punto geografico
- Calcolo dell’area coperta dalla mappa
- Filtraggio in base alla regione (ho già i bbox delle regioni italiane che mi ha dato Niccolò Rigacci ma non ho avuto il tempo di creare un dizionario con i bbox)
- Per generare una nuova mappa con la stessa istanza è necessario cancellare a mano le tile (io uso uno script in bash)
- Prima di scaricare di nuovo gli eventi è necessario cancellare il file del database (il file prova)
Cosa sarebbe mi piacerebbe implementare in OSMQuake:
- Riscrivere il codice ad oggetti
- Implementare il threading per lo scaricamento delle tile (la policy del tile server di OpenStreetMap permette solo due thread)
- Permettere di mantenere un database storico degli eventi e di filtrarli anche per periodo per creare delle mappe mensili o settimanali di una determinata zona
- Permettere l’esportazione deglio eventi sismici in KML
Qualsiasi contributo è benaccetto!
-
Dfu-util tip and trick
Pubblicato il luglio 17th, 2009 Nessun commentoDa quando ho comprato il nuovo notebook, dfu-util non più riconosce automaticamente la porta usb a cui è collegato l’OpenMoko.
Per ovviare, è necessario passare come parametro il codice identificativo del device. Per ottenere una lista dei device collegati eseguire in un terminale:
$: sudo dfu-util --listIl device corrispondente all’OpenMoko è quello identificato da una stringa simile a questa:
Found Runtime: [0x1d50:0x5119] devnum=12, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"Possiamo creare due alias in .bashrc in modo da non dover digitare ogni volta il codice del device:
alias mk='sudo dfu-util --device 0x1d50:0x5119 -a kernel -R -D $1'alias mf=’sudo dfu-util –device 0×1d50:0×5119 -a rootfs -R -D $1′
A questo punto, per flashare l’OpenMoko, sara sufficiente digitare:
$: mk nome_file_kernel$: mf nome_file_filesystem -
Usare l’openmoko come antenna gps esterna (condividere gpsd sulla rete usb)
Pubblicato il luglio 14th, 2009 Nessun commentoPuò tornare utile utilizzare l’openmoko come antenna gps esterna o, in maniera più complessa, far leggere i dati gps forniti dal demone di gestione del gps dell’openmoko, fso-gpsd, a tutti i computer connessi alla stessa rete dell’openmoko.
Gpsd può rimanere in ascolto per fornire i dati via rete e siccome l’openmoko si collega alla rete tramite un pc, possiamo usarlo come antenna esterna. In questo modo è possibile, ad esempio, utilizzare tangoGPS sul proprio pc usano l’openmoko come un (costoso!) ricevitore gps semplicemente impostando nel campo “Server gpsd” l’ip dell’openmoko (grazie a Matthias Apitz per il felice suggerimento) .
In SHR fso-gpsd è configurato in modo da rimanere in ascolto solo su localhost, impedendo di fatto ad altri client di rete di accedere alle informazioni. Per modificare questo comportamento è sufficiente modificare una riga nel file /etc/init.d/fso-gpsd, cambiando:
-S localhost:gpsdin
-S 0.0.0.0:gpsdIn questo modo tutti i computer della rete, e l’openmoko stesso, potranno accedere a gpsd anche *contemporaneamente* (cosa che non si può fare via bluetooth ad esempio) semplicemente sfruttando l’indirizzo di rete dell’openmoko e la porta su cui è in ascolto gpsd: solitamente 192.168.0.202:2947.
-
Cambiare la cartella di salvataggio delle mappe di TangoGPS su OpenMoko
Pubblicato il giugno 22nd, 2009 Nessun commentoTangoGPS è sicuramente uno dei migliori software di tracking disponibili su OpenMoko, tra le tante funzioni utili sicuramente la migliore è quella di poter visualizzare la posizione attuale e il percorso che si sta tracciando sulle mappe di OpenStreetMap.
Purtroppo la memoria interna dell’OpenMoko è limitata e non è possibile, ad esempio, scaricare tutta l’Italia al livello massimo, per cui è comodo salvare le mappe sulla memory card esterna. Se si prova a cambiare il percorso di storage dalla tab config di TangoGPS, il software restituisce un errore di segmentation fault e va in crash.
Per cambiare la cartella di salvataggio dal terminale, basta loggarsi via ssh all’OpenMoko e digitare:
gconftool-2 -s /apps/tangogps/repos \
"[OSM|http://tile.openstreetmap.org/%d/%d/%d.png|/media/card/Maps/OSM|\
0,Topo|maps-for-free|/media/card/Maps/maps4free|\
0,Aerial|openaerial|/media/card/Maps/openaerial|\
0,Opencyclemap|http://a.andy.sandbox.cloudmade.com/tiles/cycle/%d/%d/%d.png|/media/card/Maps/opencyclemap|\
0,Google Sat (testing only)|http://khm1.google.com/kh?v=34&hl=en&x=%d&s=&y=%d&z=%d|/media/card/Maps/googlesat|1]" \
--type list --list-type string -
OSMit 2009
Pubblicato il giugno 9th, 2009 Nessun commentoChe dire di OSMit 2009? Semplicemente un’esperienza fantastica che ha riunito buona parte delle persone che gravitano intorno al progetto.
Guest star è stato il fondatore stesso di OpenStreetMap – Steve Coast – con cui non poteva mancare una foto che è stato così gentile sa spiegarmi personalmente come funziona il tile cache server personalizzato di Cloudmade.
Durante i due giorni della conferenza si sono discussi temi importanti e ci sono state dimostrazioni reali di possobili applicazioni di mappe e dati messi a disposizione dal progetto OpenStreetMap.
Io ho presentato il software OSMQuake, di cui a breve rilascerò il codice, per visualizzare gli ultimi eventi sismici dell’Istituto Nazionale di Geofisica sulle mappe di OpenStreetMap.
Di seguito poteve visualizzare le slide con slideshare e da scaricarle da qui.
-
Installare tastiere finger friendly per OpenMoko
Pubblicato il maggio 7th, 2009 Nessun commentoAnche se finalmente shr sta cominciando ad assomigliare a qualcosa di simile ad un telefono utilizzabile (la velocità di apertura delle applicazioni è molto migliorata), le tastiere di default di Illume non sono molto comode da usare con le dita.
Fortunatamente alcuni utilizzatori volenterosi hanno creato delle tastiere, anche con lettere accentate, più semplici da usare senza l’ausilio di un pennino, vediamo come installarne qualcuna.
La prima tastiera è quella scritta da Carlo Minucci, è molto utile per scrivere gli sms perché contiente le lettere accentate, per installarla basta un:
#: opkg install http://minucci.net/file/opkg/illume-keyboard-italian-sms_0.1_all.opkSe navigate su internet dal mokkolo allora dovete assolutamente installare la tastiera per il browser:
#: opkg install http://www.opkg.org/packages/illume-keyboards-browse_0.2_all.opk
Anche la tastiera dei numeri ha i tasti piccoli, per usarla con più comodità è possibile installare una tastiera numerica alternativa:
#:opkg install http://www.opkg.org/packages/illume-keyboards-numbers-alt_0.3_all.opk
Un’altra tastiera ottimizzata per gli sms -senza lettere accentate- è OptimSMS:
#: opkg install http://www.opkg.org/packages/OptimSMS_1.1_armv4t.opkTutte le tastiere possono convivere fra di loro e per passare da una tastiera all’altra si può usare il pulsante di alto a destra nella tastiera attuale:
-
Visualizzare gli ultimi eventi sismici dal sito INGV (usando OpenStreetMap)
Pubblicato il aprile 18th, 2009 11 commentiStamattina un amico (TheDom), studente dell’Università dell’Aquila fortunatamente scampato al terremoto, mi ha chiesto di aiutarlo a creare uno script che si interfacciasse con il sito dell’Istituto Nazionale di Geofisica e Vulcanologia e che visualizzasse i dati degli ultimi eventi sismici e restituisse un link ad OpenStreetMap per visualizzare la cartina.
Guardando il codice dell’homepage del sito mi sono accorto che i singoli eventi erano racchiusi nel tag <tr class=”print_light”> e i dati dell’evento erano racchiusi nei tag figli <td class=”td_events”>.
<tr class="print_light" [...]> <td class="td_events">1206577780</td> <td class="td_events"> </td> <td class="td_events">2009/04/11</td> <td class="td_events">16:18:34</td> <td class="td_events">42.264</td> <td class="td_events" width="45px">13.486</td> <td class="td_events">9</td> <td class="td_events">Ml:2.8</td> <td class="td_events"> </td> <td class="td_events">Valle_dell'Aterno</td> </tr>
Considerata la regolarità del codice, ho sfruttato le potenti funzionalità del modulo di parsing BeautifulSoup, per raccogliere facilmente i dati dal sito.Il cuore dello script è costituito dalla funzione DataCollect che, preso il codice della pagina in input, trova tutti i tag che corrispondono a <tr class=”print_light”>. In seguito, cercando all’interno dei singoli tag <tr>, restituisce, sotto forma di lista, il testo contenuto nei tag figli <td>.
def DataCollect(pagina,id): """Restituisce una lista con i dati desiderati""" lista = [] dati = pagina.findAll('tr',attrs={"class":"print_light"})[id] dati = dati.findAll('td',attrs={"class":"td_events"}) for i in dati: lista.append(i.string) return lista
La riga di codice numero 4 trova tutti i tag tr avente gli attributi definiti nel dizionario {“class”:”print_light”} passato come variabile. Considerando che l’istanza findAll dell’oggetto pagina restituisce, sotto forma di tupla, il contenuto dei singoli tag tr, è possibile accedere al contenuto di un solo tag tr usando gli indici della tupla (il numero tra parentesi quadre). Dopodiché è possibile rieseguire una seconda istanza findAll sull’oggetto dati (riga 5), che come abbiamo visto in precedenza contiene solo il contenuto di un solo tag, cercando questa volta tutti i tag td. A questo punto l’oggetto dati è una tupla contenente tutti i tag td, figli del tag tr (quelli mostrati nel codice html precedente). Infine basta iterare all’interno di questa tupla (riga 6), assegnando ad una lista (inizializzata alla riga 3) il contenuto dei signoli tag td ottenuti attraverso l’istanza string (riga 7).La funziona Parsing legge semplicemente il contenuto della pagina html e lo passa a BeautifulSoup per l’elaborazione.
def Parsing(link): """Restituisce il parsing della pagina""" try: socket = urlopen(link) testo = BeautifulSoup(socket.read()) socket.close() except: return ("""Si è riscontrato un errore durante l'apertura del link, prima \ di procedere:\t 1) controllare la connessione ad internet\t 2) assicurarsi che il link esista\t 3) assicurarsi che il link sia scritto correttamente (ricordarsi di scrivere \ anche http://)\t 4) controllare i permessi per accedere alla rete.""") return testo
Alla riga 5 la funzione apre il link dell’home page dell INGV e alla riga 6 l’istanza read(), che restituisce il contenuto html della pagina, viene passata all’elaboratore BeautifulSoup.Infine l’ultima funzione, formatta l’output in maniera colorata e più “umana” sfruttando il modulo scritto da Checkm.
def HeartquakePrint(lista): """Formatta e stampa i dati dell'evento sismico""" print cms.color("<red>Dati riepilogativi evento sismico</red>") print cms.color("<green>Link diretto:</green> <yellow>http://cnt.rm.ingv.it/~earthquake/data_id/%s/event.php</yellow>") % lista[0] print cms.color("<green>Data:</green> <yellow>%s</yellow>") % lista[2] print cms.color("<green>Ora:</green> <yellow>%s</yellow>") % lista[3] print cms.color("<green>Latitudine:</green> <yellow>%s N</yellow>") % lista[4] print cms.color("<green>Longitudine:</green> <yellow>%s E</yellow>") % lista[5] print cms.color("<green>Link OpenStreetMap:</green> <yellow>http://www.openstreetmap.org/?lat=%s&lon=%s&zoom=17&layers=B000FTF</yellow>") % (lista[4],lista[5]) print cms.color("<green>Magnitudo:</green> <yellow>%s</yellow>") % lista[7] print cms.color("<green>Distretto sismico:</green> <yellow>%s</yellow>\n") % lista[9]Il modo più semplice per eseguire lo script (sia su windows che su linux) è quello di scaricare l’archivio contenente tutti i file necessari all’esecuzione da qui. Scompattarlo ed eseguirlo digitando in un terminale:
$: python script.py
Questo è il risultato finale:
-
Pycp: usare cp con una progress bar
Pubblicato il aprile 11th, 2009 Nessun commentoPer quanti usano ancora il comando del terminale cp per copiare i file risuslterà comodo installare pycp, un wrapper di cp scritto in python che implementa una progress bar tetstuale per ogni singolo file trasferito.
E’ molto comondo nel caso di trasferimento di grosse cartelle, in cui il cursore rimane immobile (sembra quasi bloccato) fino a trasferimento completato. Con pycp è possibile vedere, oltre alla progress bar, anche la velocità di trasferimento e l’ETA (estimated time of arrival) di ogni singolo file!
Per installarlo è necessario scaricare ed installare prima il modulo python-progressbar:
$: wget http://pypi.python.org/packages/source/p/progressbar/progressbar-2.2.tar.gz
$: tar xvf progressbar-2.2.tar.gz
$: cd tar xvf progressbar-2.2.tar.gz
$: sudo python setup.py install
A questo punto scarichiamo ed installiamo pycp:
$: wget http://yannick-lm.dyndns.org/soft/pycp/pycp-3.2.tar.gz
$: tar xvf pycp-3.2.tar.gz
$: cd tar xvf pycp-3.2.tar.gz
$: sudo python setup.py install
Per evitare di ricordarsi di digitare pycp al posto di cp è possibile creare un alias per la nostra shell, editando il file ~/.bashrc:
$: vim .bashrc
Inserendo la riga:
alias cp=’pycp’
Carichiamo le modifiche:
$: source .bashrc
In questo modo al comando cp verrà automaticamente sostituito pycp.
-
[How-to] Installare Lighttpd con MySQL e PHP5 su Debian Lenny
Pubblicato il marzo 24th, 2009 Nessun commento
Lighttpd (pronuncia lighty) è un web-server , rilasciato sotto licenza BSD modificata, progettato per un uso ottimizzato delle risorse. Scritto da Jan Kneschke nel 2003, per distrarsi dal suo lavoro di tesi, è un potente web server che fa della scalabilità, dell’uso parsimonioso di risorse e dell’aderenza agli standard i suo cavalli di battaglia. E’ consigliato per macchine obsolete o per server con carichi di lavoro massicci, tra gli utilizzatori più famosi c’è Wikipedia ed OpenStreetMap.
Per installare Lighttpd con supporto MySQL e PHP5 su una macchina con Debian 5.0 Lenny, è sufficiente installare i seguenti pacchetti:
#: sudo apt-get install mysql-server mysql-client lighttpd php5-cgi php5-mysql
Durante l’installazione il sistema chiederà di inserire due volte la password di root, per cui non sarà necessario configurarla successivamente.
Puntando il browser su localhost, si ottiene la pagina di benvenuto di lighttpd in cui è descritta anche la configurazione del server:
Ricapitolando:
- la document root è /var/www (come per apache)
- il file di configurazione è /etc/lighttpd/lighttpd.conf
- il programma cercherà i moduli cgi in /usr/lib/cgi-bin e il loro utilizzo deve essere abilitato con la direttiva
- i file di log sono salvati in /var/log/lighttpd e la loro rotazione può essere cambiata modificando il file /etc/logrotate.d/lighttpd
Abilitare il fastcgi per i file php
Per abilitare il fastcgi per i file php, per installare ad esempio un forum o un blog in php, è necessario editare due file.
In /etc/php5/cgi/php.ini, decommentare la riga
; cgi.fix_pathinfo = 0Eliminando il punto e virgola e modificando la variabile zero in uno
cgi.fix_pathinfo = 1In questo modo il percorso che indica il PHP-CGI viene impostata in maniera fissa piuttosto che essere ricavata da SCRIPT_FILENAME.
Nel file /etc/lighttpd/lighttpd.conf aggiungere la riga:
"mod_fastcgi",dopo la riga
"mod_accesslog",e in fondo al file aggiungere il percorso del PHP-CGI (per le personalizzazioni e altri moduli si faccia riferimento alla documentazione ufficiale)
fastcgi.server = ( ".php" => ("localhost" => ( "bin-path" => "/usr/bin/php5-cgi",
"socket" => "/tmp/php.socket")))
Riavviare Lighttpd
#: /etc/init.d/lighttpd restartSpostarsi nella DocumentRoot di Lighttpd e creare il file info.php in questo modo:
#: cd /var/www#: vi info.php
Premere il tasto i e aggiungere nel file la seguente riga:
<?php phpinfo(); ?>Salvare e chiudere premendo Esc :wq.
Puntare il browser su localhost/info.php per controllare che tutto funzioni.















