venerdì 27 giugno 2008

La guerra delle mappe

Sono lontanissimi i tempi in cui non si riusciva a trovare una cartina decente su Internet. Infatti in questi ultimi anni un sacco di società hanno colto l'importanza di queste informazioni e si sono buttate a capofitto in questo nuovo servizio.

Dai tempi in cui si usava le mappe con un'interfaccia old-school (ogni spostamento faceva ricaricare la pagina) si è passati ad una versione più interattiva, con i primi esempi in formato applet java (map24), che permetteva anche operazioni prima impensabili (calcolo della distanza, per esempio).

E poi arriva Google con il suo GoogleMaps. Interfaccia a dir poco innovativa, con la possibilità di passare a visualizzazione delle foto satellitari/aeree. Ed i mashup, davvero un'ottima ciliegina sulla torta.. Poi compare anche il servizio di MS Live ed altri. Tra tutti questi prodotti si inserisce un progetto a dir poco interessante: OpenStreetMap che cerca di raggiungere un obiettivo particolarmente ambizioso: creare delle mappe in modo _collaborativo_. Infatti, in quanti non hanno trovato mai un errore o un'imprecisione nelle mappe?

Un'idea così semplice e banale (soprattutto dopo wikipedia) che ora ha attirato l'attenzione di google, che ha pubblicato un tool per editare le sue mappe.. (MapMaker)
Strumento sicuramente importante per gli utenti di google maps, che potranno trovarsi i dati aggiornati continuamente, ma tra il coro di entusiasti, si leva alta la voce di OpenStreetMap: se dovete aiutare qualcuno ad aggiornare le mappe aiutate me:

> If you contribute to Google MapMaker, you are contributing
> to one single map view that looks how Google wants it to look.
> If you contribute to OpenStreetMap, you are contributing to
> a myriad of possibilities … most not even thought of yet.

E come dargli torto..

mercoledì 18 giugno 2008

Esportare feed da liferea

Ecco quello che è uscito dopo un po' di lavoro su liferea ed il suo database sqlite..


#!/bin/bash

FILENAME=feed-`date +%m-%d`.html
DATABASE=$HOME/.liferea_1.4/liferea.db

echo -e '<html>\n' > $FILENAME
echo -e '<body>\n\t<table>' >> $FILENAME

sqlite3 -html $DATABASE "select title, source, description from items where read = 0;" | sed 's/^<TD>/<\/TR><TR><TD>/' | sed 's/\&lt;/</g' | sed 's/&amp;amp;/\&/g' >> $FILENAME

echo -e '\n\t</table></body></html>' >> $FILENAME



In questo modo si ha un file html feed-$mese-$giorno.html da spostare sullo smart phone, per leggere i feed allegramente in treno.

il formato per ogni entry è:
riga col titolo
riga con l'url
testo

TODO:
* sostituire i caratteri particolari (apici inversi) che si sputtanano
* rimuovere tutti gli http:// interni (per le immagini soprattutto) per poterlo visualizzare offline
* evidenziare meglio il titolo (spaziato da quello sopra e magari bold)
* provare ad aggiungere un foglio di stile

MIGLIORIE POSSIBILI
* sqlite supporta altri formati di esportazione, provare se viene più leggibile lo script (tipo la riscrittura dei tag) con altri formati (anche se saltano fuori altri problemi.. tipo il csv che non sostiuisce le virgole interne..)

domenica 15 giugno 2008

Idea per progetto su RSS

Un sacco di volte ho parlato della mia passione per i feed RSS.
Sono così comodi quanto semplici concettualmente, visto che si tratta semplicemente di un xml fatto in un certo modo. Ormai da tempo uso liferea sotto gnome. Ne ho provati altri, come ad esempio RSSOwl,che ha sicuramente molte più funzionalità.

Forse per il motivo principale per cui non sono passato a quest'ultimo è il fatto che sfrutta fin troppo la piattaforma Eclipse e visto già quanto tempo passo usando Eclipse per lavoro la cosa non mi ha convinto troppo.. e poi mi piace che liferea è semplice, senza puttanate, chiaro ed integrato bene in gnome.

Ora, visto il periodo particolarmente delirante da qui a fine mese, ho pensato di ottimizzare i tempi e leggere gran parte dei feed la mattina in treno.

La prima soluzione è accendere il portatile prima di uscire di casa, fargli scaricare tutte le novità, poi spegnerlo e riaccenderlo in treno. Il problema è che la tratta che faccio io non è molto lunga e che è sempre abbastanza affollato (non voglio fare come le persone che corrono sul treno facendosi largo a spintoni e lo attraversano in lungo e largo disperati alla ricerca di un posto.. ).

Allora ho pensato di cercare un RSS reader per il nintendo ds. Non ho avuto molto successo, quello integrato in ndsmail non mi pare un granchè, mentre DSOrganize non l'ha ancora integrato.

Ho anche un palm treo 500v, ma non sono mai riuscito ad installarci un cazzo (che fosse java oppure no).. decisamente una delusione..soprattutto per windows mobile. Ma vabbè, ora il punto è un altro: sto cercando un modo di scaricare i feed in automatico dal portatile e spedirli sul telefono o sull'nds e poterli visualizzare offline.

Per cui sono partito da capire come funziona liferea, e se c'è un modo per esportare i feed non ancora letti. Visto che lo scripting integrato non pare andare ("Sorry, no scripting support available" cliccando su "Script Manager"), ho pensato di andare ancora più a basso livello..

Per esempio potrei partire dal database sqlite ~/.liferea_1.4/liferea.db in cui salva tutti i feed scaricati.. se devo lavorare con sql mi sento meglio che non con dovermi interfacciare con un linguaggio di cui non avevo mai sentito parlare.. lua, usato per gli script liferea..

In questi giorni indago sulla struttura di questo database, poi pubblicherò i risultati..

sabato 14 giugno 2008

Che bot mi compro oggi?

Leggendo qua e là sul mio feed reader, sono approdato, attraverso il blog di RSnake su un ottimo sito che vende bot per l'iscrizione/manipolazione/spam sui social network.

Infatti allo stato attuale, quello che attira più attenzioni ed utenti in assoluto in ambito internet è il social networking. E cosa c'è di meglio che modificare il numero di viste al proprio account myspace? Oppure, quanto ci può costare pubblicizzare un account youtube spammando commenti su altri video?

La risposta è su allbots.info (non è un caso che non sia un link)

L'importanza (ed il guadagno più o meno immediato) che si può raggiungere sui siti di social networking hanno creato un nuovo settore di mercato di sicuro interesse;

da parte mia l'interesse sta nel lato tecnico, nel bypass del captcha (l'unica parte un po' complessa di un bot del genere), e poco altro visto che sono fuori da siti come myspace, youtube (sul pc che uso di più non ho neanche il player flash) e facebook.

Ed anche il proliferare degli odiosissimi CAPTCHA sui vari siti ha aperto una nuova frontiera: il loro breaking.

Gli unici che resistono sono quelli incomprensibili anche all'occhio umano..

giovedì 12 giugno 2008

L'impegno da record per firefox 3

Per chi non ne avesse ancora sentito parlare, firefox 3 punta a stabilire il record di download in un giorno unico. Quindi appena verrà deciso il download day, tutti pronti a scaricare la nuova versione del browser di Mozilla, per dare un segnale forte (al mondo informatico e non).

La data è martedì prossimo, 17 giugno.

Download Day 2008

A parte questo, ci sono diversi motivi per cui aspetto la versione definitiva: da una parte i benchmark a dir poco incoraggianti. Fosse davvero così sarebbe un bel colpo per gli altri browser ed un passo in avanti per gli utenti e la fruibilità di internet. Dall'altra parte vorrei vedere se sono confermati o meno i problemi con certe librerie javascript ajax..

Infatti ho testato la beta 5 su un mio progetto lavorativo, che si basa fortemente su jquery e su sztreeview. Un sacco di funzionalità andavano a singhiozzo. Ovviamente non bisogna dargli troppo peso, visto lo stato di beta, ma è un motivo in più per aspettare il download day

mercoledì 11 giugno 2008

Utilizzo di wireless non protette

10 giorni fa circa ero in montagna per un weekend di relax e aria pulita. Domenica sera accendo il portatile per guardarmi un film, e già che ci sono lancio un

> iwlist wlan0 s

Con ben poche pretese, visto che ero in un paese a 1200 m slm praticamente deserto visto il periodo.. Eppure vedo due reti wireless, entrambe sprotette.

Mi attacco a quella col segnale più potente, DHCP abilitato. Non avendo nessuna intenzione di fare cose losche, ma solo di accedere ad internet, non modifico mac address nè prendo altre precauzioni (non ho firewall ma non partono in automatico servizi importanti) e non cerco nè di sniffare traffico nè di studiare la sotto rete nè di capire che access point è.

Dubito che ci sia qualcuno in ascolto, vista la situazione, ma essere paranoici a volte è anche divertente. E visto che non tutte le webmail che uso sono in https, decido che è comunque consigliabile affrontare questo problema.

ora: sul portatile ho una vpn (OpenVPN) per attaccarmi ai server in farm a Milano. Il gateway della lan virtuale effettua il nat delle connessioni che arrivano dall'interno, ed io, con la vpn, raggiungo direttamente l'interno della lan.
Il fatto che effettui il nat anche delle connessioni dalla vpn è un prerequisito fondamentale.

Quindi:
> /etc/init.d/openvpn start

Ora ho l'interfaccia tun0 che mi fa accedere direttamente ai server.

> route
La tabella di routing ha come default gateway 192.168.1.1 (l'access point), il che non mi sta bene, se voglio includere tutto il traffico nella vpn ed uscire su internet passando dalla farm. Quindi:

Elimino la rotta di default
> route del default

gli aggiungo la rotta per il server vpn (questo passo sembra non essere obbligatorio se si ha già tirato su la vpn, ma a me sembra più chiaro e "rigoroso" metterlo), dicendogli di passare dall'access point
> route add -host ip_pubblico_server_vpn gw 192.168.1.1

ed ora incapsulo tutto il traffico nell'interfaccia tun0:
> route add default tun0

Ora basta andare su una pagina che mostra l'ip da cui si arriva per notare che l'ip pubblico è ip_pubblico_server_vpn. Ora tutto il traffico generato dal mio portatile viene incapsulato nella vpn, passa quindi crittato a livello 4 iso/osi per la wireless e per il percorso dall'access point al mio server vpn per poi uscire in chiaro solo a partire dalla farm.

In realtà non è nulla di complesso o di innovativo, anzi, ma può tornare utile..

giovedì 5 giugno 2008

[Howto] create fedora 9 xen images (on fedora)

A little howto on creating xen images (using torrent to download the iso instead of using http/ftp during installation).

**On Domain-0**

Get DVD iso
-----------

retrieve the .torrent
> wget http://torrent.fedoraproject.org/torrents/Fedora-9-x86_64-DVD.torrent

download the image with rtorrent (text-based) or any other bittorrent client
> rtorrent Fedora-9-x86_64-DVD.torrent

check the file
> sha1sum -c Fedora-9-x86_64-DVD/SHA1SUM


Mount the image and "create" a repository
--------

Mount the iso image using loop device
> mkdir /mnt/fedora_loop/
> mount -o loop Fedora-9-x86_64-DVD/Fedora-9-x86_64-DVD.iso /mnt/fedora_loop/

Make a symlink in apache (so http://localhost/fedora will be the content of the iso image
this is also helpful if you don't have internet connection here but only the dvd: you can link directly the dvd content and proceed ahead
> ln -s /mnt/fedora_loop/ /var/www/html/fedora

Start httpd service
> service httpd start

Install
-------

Start the install process with virt-install (parameters are optional)
> virt-install -b xenbr1 -s 16 -f /xen/fedora9.img -n fedora9 -r 256 --nographics -l http://192.168.1.1/fedora

*where 192.168.1.1 is Domain-0's IP address*

mercoledì 4 giugno 2008

Utilizzo avanzato di PostgreSQL

Per la prima volta vengo a contatto, per lavoro, con qualcuno che usa il database in modo avanzato ed ecco qualche tip che ho estratto (da mettere come campi della select):

Concatenazione
--------------

> 'pref-' || nome :: varchar (5) as "nome con prefisso"

dove || concatena il prefisso alla sotto stringa di lunghezza 5 del campo nome

Condizione
---------

> case when data is null then NULL
> else to_char(data :: date, 'dd/mm/yyyy')
> end as "data_str"

con il controllo sul campo data che viene trasformato in stringa impostata a null se era null, altrimenti formattata secondo un modo diverso


Differenza tra date
-------------------

> extract(year from age(data_arrivo :: date, data_partenza :: date))
> as "anni impiegati"

calcola la differenza tra date e ne estrae il solo anno

Formattazione ore
-----------------

> case
> when ora is null then null
> else to_char(((ora :: varchar(2)) || ':00:00') :: time, 'hh24:mm')
> end as "ora formattata"

controlla il campo ora (varchar(2) con valori "00" -> "23") e se è non nullo lo trasforma in "00:00" -> "23:00"

Altro esempio di age()
----------------------

> case
> when age(data1 :: date + time1 :: time, data2 :: date + time2 :: time) < '6 hour' then 0
> when age(data1 :: date + time1 :: time, data2 :: date + time2 :: time) < '24 hour' then 1
> else -1
> end as 'interval'

calcola la differenza tra due somme di date+time, e mette nel campo interval un flag intero -1 -> 1


che dire.. troppe volte ho dovuto fare a livello superiore controlli che andavano fatti direttamente nel database, per cui sono rimasto positivamente colpito da questo script, che tra l'altro viene usato per creare una view.. altro strumento che troppo spesso viene ignorato
ah, sto cercando di usare questo: markdown