Appunti, scoperte e invenzioni

Tutto quello che mi viene in mente (se permettete l’esagerazione…)

  • Universal Declaration of Human Rights

    Article 19. Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.
  • My Last Twits

    • evviva il ponte! peccato che domani sera sarà finito, ma intanto almeno mi sono rilassato un pò :-) 20 hours ago
    • progetti che scompaiono ed esami che si rimandano all'inifinito.. e sopra di tutto il panico da regali di Natale... che pazienza! :-) 2 days ago
    • google wavin'!!! 1 month ago
    • chi è così buono da spedirmi un invito per la beta di Google Wave a mario.piccinelli@gmail.com? 2 months ago
    • perde tempo su internet.. la tesi aspetterà.. bah 2 months ago
  • Meta

  • Delicious Links

  •  

    Dicembre: 2009
    L M M G V S D
    « Nov    
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • Archivi

  • Disclaimer

    Questo blog non rappresenta una testata giornalistica [...]

    L’autore del blog dichiara di non essere responsabile per i commenti inseriti dai lettori.[...]

    Le immagini pubblicate sono quasi tutte tratte da internet e quindi valutate di pubblico dominio. [...]

    L'autore declina qualunque responsabilità per danni a cose o persone derivanti dall'applicazione di istruzioni apprese da questo blog.[...]

    Per ulteriori info legali vi consiglio di passare da qui.

Posts contrassegnato dai tag ‘linux’

Internet mobile con Ubuntu, LG U960 e Naviga Tre

Pubblicato da piccimario su Aprile 29, 2009

Come forse saprete da post passati, ho di recente messo le mani su un LG U960 e grazie all’opzione Naviga Tre ho potuto apprezzare i vantaggi della mobilità (9 euro al mese per 50 megabyte al giorno, uniti a Opera Mini e al client GMail fanno spettacolo).

Stasera ho voluto fare il passo successivo: tentare di utilizzare un pò di quel traffico dati col mio Asus eee, con Ubuntu. Un pò di smandruppamenti, ma il sistema funziona: posso navigare in assoluta libertà anche col computer, almeno finchè tengo d’occhi la soglia di traffico. Che figata!

Posto qui un riassunto delle procedure. Non mi dilungherò troppo, dato che altri blogger (di cui indicherò i link) hanno fatto un ottimo lavoro al riguardo.

1) Configurare la connessione tra il computer e il cellulare (io userò il bluetooth). Suppongo che il sistema bluetooth sia già installato e funzionante sul computer. Individuare l’indirizzo fisico del proprio cellulare con un “hcitool scan“, indi individuare il canale per il dialup con un “sdptool scan XX:XX:XX:XX” (le X rappresentano ovviamente l’indirizzo bluetooth del cellulare individuato in precedenza).

2) Modificare il file /etc/bluetooth/rfcomm.conf, aggiungendo una sezione (nel mio esempio rfcomm1) seguendo la sezione d’esempio presente commentata nel file. I dati da inserire sono “yes” (specifica di mantenere attiva la connessione BT col cellulare, non ha a che fare col traffico dati, tranquilli), l’indirizzo, il canale e una breve descrizione del dispositivo. Per concludere, dopo aver salvato il file riavviare il bluetooth (sudo /etc/init.d/bluetooth restart). A questo punto il computer dovrebbe tentare automaticamente la connessione al cellulare, chiedendo il pin prima sul cellulare stesso e poi sul desktop. Come sempre, usate il pin che volete basta che sia uguale su entrambi i dispositivi. Ulteriori dettagli sulle procedure sono descritti con più amore qui.

3) Installare gnome-ppp (sudo apt-get install gnome-ppp ppp). Ah, ovviamente bisogna essere connessi a internet in qualche altro modo.

4) Avviare gnome-ppp (come root, quindi con sudo). Per la configurazione vi rimando a questo post (lo stesso di prima), faccio solo un riassunto rapido delle configurazioni:

Username: uno a caso
Password: una a caso
Memorizza password: selezionato
Numero: *99***1#
Dispositivo: rfcomm1 (quello creato in precedenza)
Tipo: modem analogico
Velocità: la più alta
Composizione: Toni
Volume: Spento
Stringhe di inizializzazione: AT+CGDCONT=1,”IP”,”naviga.tre.it”,,0,0

Tutto il resto va lasciato come di default, tranne che per le opzioni, che vanno tutte deselezionate tranne due, che invece vanno attivate: “Controlla l’instradamento di default” e “Ignora le stringhe del terminale (modo stupido)”. Anche le prime due possono essere tranquillamente attivate.

A questo punto dovremmo essere a posto: avviando gnome-ppp (sempre come root) e premendo il tasto “connetti” il sistema dovrebbe essere funzionale. Se qualcosa non andasse consiglio di provare a ricontrollare le impostazioni, e magari di riavviare il computer (per essere sicuri che tutti i servizi siano avviati correttamente).

Per finire vi consiglio di utilizzare un software per tenere conto della navigazione effettuata, per evitare di sforare il limite del proprio piano (ricordiamo che per il Naviga 3 mensile è di 50 megabyte al giorno, e sappiamo bene che 50 megabyte finiscono in fretta). Ho sentito parlare molto bene di vnstat; stasera non ho tempo di provarlo, ma se vi interessa qui potete trovare qualche spiegazione.

Ciao a tutti!

Pubblicato su Uncategorized | Contrassegnato da tag: , , , | Lascia un commento »

Evoluzione dell’interfaccia grafica

Pubblicato da piccimario su Aprile 24, 2009

Tutti sappiamo, o perlomeno intuiamo, che l’invenzione dell’interfaccia grafica è stato uno dei momenti chiave della storia dell’informatica domestica e non solo; e sappiamo tutti che senza l’intuizione di poter comandare i computer mediante disegni e simboli e non solo righe di comandi il nostro mondo sarebbe molto, molto diverso.

Ma molti di noi (io compreso fino a poco fa) non sanno come è nata e si è evoluta l’interfaccia grafica, dai primi esperimenti della Xerox (eh si, proprio quelli delle stampanti, non ve lo aspettavate, eh?) fino alle meraviglie grafiche di KDE4 o MacOsX Leopard (si, ci sarebbe anche MSVista, ma preferisco ignorarlo…).

Vi rimando quindi a un bellissimo articolo che elenca, con tanto di immagini storiche, le interfacce grafiche dalla loro nascita fino ai giorni nostri. Qualcosa che non può mancare nel bagaglio culturale di qualunque utente consapevole. Buona visione!

Xerox 8010 Star (anno 1981)

Xerox 8010 Star (anno 1981)

Sono solo sconvolto che nell’elenco non sia presente il famigerato Microsoft BOB

Pubblicato su Uncategorized | Contrassegnato da tag: , , , , | 2 Commenti »

Creare una mappa personalizzata da OSM: lo script

Pubblicato da piccimario su Febbraio 27, 2009

Come prometto a vuoto da mesi, finalmente mi voglio mettere a scrivere un articolo per spiegare un sistema completamente automatico mediante script bash per generare una mappa a partire dai dati di OpenStreetMap. Lo script è un allegro guazzabuglio di utility da riga di comando destinate a scaricare i dati dal server OSM sotto forma di xml, “compilarli” per generare un file SVG, convertire tale file in un PNG e aggiungerci qualche particolare utile: un header, un footer con il copyright, un frame di contorno e una scala kilometrica. Questo articolo, come i miei fedeli lettori avranno già intuito, nasce da una fusione di precedenti post: questo, questo, questo, questo.

Per iniziare i requisiti:

  • Avremo bisogno di un computer linux connesso alla rete (e fin qui…); io uso Ubuntu, non posso garantire il funzionamento di tutte le utility richiamate da questo script su altre piattaforme, anche se probabilmente su Mac si può fare (se qualcuno ci prova mi faccia sapere che aggiornerò l’articolo). Ovviamente Windows non è neanche preso in considerazione.
  • Avremo bisogno di queste utility, scaricabili dal repository: xsltproc (nell’installazione di default, a quanto mi risulta), wget (idem), convert+composite (nella suite ImageMagick), bc.
  • Avremo bisogno del programma per calcolare la distanza in chilometri tra due punti espressi in coordinate GPS, di cui ho parlato in precedenza (in questo post, nella sezione “un programma in C”). Copiarlo in un editor di testo, compilarlo seguendo le istruzioni nel post e avere cura che l’eseguibile si chiami “calcola” (senza alcuna estensione), non “converti” come nell’esempio.
  • Per finire, avremo bisogno di una serie di files da scaricare dai repository di openstreetmap, che ci serviranno per compilare la mappa vera e propria.

In riferimento all’ultimo punto dell’elenco, avremo bisogno di un ambiente di lavoro costituito dalla seguente struttura di cartelle:

data
|– osm-map-features-z17.xml
|– calcola
|– renderizza (così chiameremo lo script che andremo a utilizzare)
|– osmarenderer.xsl

stylesheets
|– symbols
|– il contenuto di questa cartella

Uhm.. dovremmo avere tutto, spero di non aver dimenticato nulla.. Per semplificarvi la vita, ho provveduto a uppare su una condivisione box.net uno zip con tutto il necessario per cominciare a renderizzare (sempre se non mi sono dimenticato nulla); scaricate pure qui. A questo punto manca solo lo script, che come ho detto prima si chiamerà, con molta fantasia, “renderizza” (beh, potete anche cambiargli il nome).

Ecco dunque l’agognato script, pezzo per pezzo:

Impostiamo un pò di variabili che ci verranno buone per dopo. Le uniche da modificare sono ovviamente le coordinate GPS (latitudine e longitune) della zona che vogliamo inserire nella mappa

# coordinate gps zona
# nb: max 0.25 gradi sia latitudine che longitudine

MAXLAT=45.8239
MINLAT=45.8045
MAXLON=10.0841
MINLON=10.0584

# nomi file
OSM=”data.osm”     # nome del file dati OSM
SVG=”map.svg”    # nome dell’output in formato svg
PNG=”map.png”    # nome dell’output in formato png

Recuperiamo i dati aggiornati:

echo “recupero dati dal server OSM…”
wget -O ${OSM} http://api.openstreetmap.org/api/0.5/map?bbox=$MINLON,$MINLAT,$MAXLON,$MAXLAT

Eseguiamo il rendering:

# livello del rendering
livello=17

# identifica il livello di dettaglio del rendering;
# per aree piccole conviene usare il livello 17;
# per eseguire il rendering sarà richiesto il
# file osm-map-features-zXX.xml (XX = livello).

echo “rendering mappa..”
xsltproc osmarender.xsl osm-map-features-z${livello}.xml > ${SVG}

Convertiamo la mappa (in formato SVG) in un file grafico PNG, più facilmente utilizzabile:

# —- conversione mappa in png

density=600     # risoluzione del file grafico.
scale=1000         # dimensione in px del file grafico

echo “conversione in PNG…”
convert -density ${density} -scale ${scale} ${SVG} ${PNG}

Aggiungiamo un header con un testo a scelta. In questo caso inserisco il mio nome e la data dell’aggiornamento (ovvero la data corrispondente al file dati).

# —- aggiunta header

echo “aggiunta della data alla cartina..”
convert xc:white -resize 1×15! blank.ppm
convert -append blank.ppm ${PNG} intermediate.ppm
convert intermediate.ppm -gravity “North” -draw “text 0,3 ‘Updated on: $(date -r ${OSM}) by PicciMario’” ${PNG}
rm blank.ppm intermediate.ppm

Aggiungo un footer con un copyright OSM.

# —- aggiunta footer

echo “aggiunta copyright alla cartina..”
convert xc:white -resize 1×20! blank.ppm
convert -append  ${PNG} blank.ppm intermediate.ppm
convert intermediate.ppm -gravity “South”
(continua) -draw “text 0,3 ‘Copyright 2008 OpenStreetMap (openstreetmap.org)’” ${PNG}
rm blank.ppm intermediate.ppm

La parte più incasinata: creo il simbolo della scala e lo inserisco nella mappa

# —- aggiunta scala

echo “aggiunta scala 1km”

# calcola larghezza in km della mappa
larghezza=$(./calcola $MINLON, $MAXLON, $MINLAT, $MINLAT )
# misura la larghezza in px della mappa
larghezzapixel=$(identify -format %w $PNG)
# calcola l’equivalenza px/km
pixel1km=$(echo “$larghezzapixel/$larghezza” | bc)

# creazione simbolo scala
framewidth=1
scalesymbol=scale.png
scaleheight=10
scalecolor1=xc:blue
scalecolor2=xc:white

pixel100m=$(echo “($pixel1km-(2*framewidth))/10″ | bc)
convert ${scalecolor1} -resize ${pixel100m}x${scaleheight}! block1.ppm
convert ${scalecolor2} -resize ${pixel100m}x${scaleheight}! block2.ppm
convert +append block1.ppm block2.ppm block1.ppm block2.ppm block1.ppm block2.ppm block1.ppm block2.ppm block1.ppm block2.ppm ${scalesymbol}
convert -mattecolor blue -frame ${framewidth}x${framewidth} ${scalesymbol} ${scalesymbol}
rm block1.ppm block2.ppm

# aggiunta del simbolo alla cartina
composite -geometry +10+30 -gravity southwest ${scalesymbol} ${PNG} ${PNG}

rm ${scalesymbol}

E per finire l’aggiunta di un bordino blu di rifinitura.

# —- aggiunta frame di contorno al file completo

echo “aggiunta frame…”
convert -mattecolor blue -frame 1×1 ${PNG} ${PNG}

echo “operazione completata.”

Facile, no? Si, lo so, è abbastanza contorto.. Ma ha l’innegabile vantaggio che, una volta pronto, non devo fare altro che andare nella cartella, scrivere ./renderizza e lui fa tutto e mi presenta la bellissima cartina completa.

map

Ad esempio, mi piacerebbe metterlo nel cron del mio server per mostrare su una pagina web la cartina del mio paese con aggiornamenti giornalieri (peccato che il mio server è un computer di 10 anni fa e per fare il rendering ci mette 20 minuti). Se poi pensiamo alla possibilità di modificare il file xml (osm-map-features ecc..), che descrive il modo in cui la mappa è creata, possiamo ottenere infinite potenzialità di personalizzazione della mappa da noi creata (modificare i simboli, le dimensioni e i colori delle strade, scegliere cosa inserire e cosa no, …).

Beh, per oggi mi accontento di questo.. Fatemi sapere se il sistema vi piace e in caso mandatemi un link delle vostre opere d’arte :-)

Ciao a tutti!

Pubblicato su Uncategorized | Contrassegnato da tag: , , , , , | 7 Commenti »

Map Tricks: aggiungere un riferimento di distanza a una mappa

Pubblicato da piccimario su Dicembre 5, 2008

Supponiamo di avere un file grafico rappresentante una mappa, e di volerci aggiungere un qualcosa che permetta di comprenderne le proporzioni. Normalmente le mappe prevedono, oltre alla dicitura della scala, anche un simbolo grafico di dimensione nota, ad esempio un chilometro. E’ possibile aggiungere un simbolo del genere a una mappa di cui si conoscono solo le coordinate geografiche in modo semplice ed automatico.

Lavorando sotto Linux (Ubuntu, per l’esattezza) ci occorreranno le utility ImageMagick (una suite di tool grafici da riga di comando), bc (un’utility per eseguire operazioni matematiche da riga di comando) e il programmino in C “calcoladistanza” che ho descritto in un precedente post (che calcola la distanza tra due punti in km a partire dalle loro coordinate geografiche). Se non li abbiamo li possiamo scaricare così (sotto ubuntu):

sudo apt-get install bc imagemagick

Per compilare il programmino invece basta seguire le istruzioni riportate sul post originale.

Le operazioni da svolgere sono le seguenti:

MINLON=…
MAXLON=…
MINLAT=…
MAXLAT=…

scriviamo in quatto variabili numeriche i valori estremi di latitudine e longitudine della mappa

larghezza=$(./calcoladistanza $MINLON, $MAXLON, $MINLAT, $MINLAT )

salva nella variabile “larghezza” la larghezza in km della superficie riportata sulla mappa, come distanza tra due punti sugli estremi della mappa stessa (notare che ho usato lo stesso valore di latitudine, altrimenti avrei calcolato la distanza diagonale).

larghezzapixel=$(identify -format %w immagine.png)

misura la larghezza in pixel dell’immagine, utilizzando il tool “identify” contenuto nella suite ImageMagick.

pixel1km=$(echo “$larghezzapixel/$larghezza” | bc)

calcola la larghezza in pixel di un km effettivo sulla mappa, dividendo (con l’utility “bc”) i due risultati precedenti

convert xc:white -resize ${pixel1km}x15! -frame 2×2 blank.ppm

crea (usando l’utility “convert” di imagemagick) un’immagine di nome blank.ppm, alta 15 pixel e larga esattamente un chilometro (ovvero il numero di pixel calcolati prima); poi vi aggiunge una cornice di 2 pixel

convert blank.ppm -gravity “Center” -draw “text 0,0 ‘Un kilometro!!’” blank.ppm

scrive il testo “Un kilometro!!” nel file precedentemente creato

composite -geometry +10+30 -gravity southwest blank.ppm immagine.png immagine_scala.png

usando “composite” (sempre contenuta in imagemagick, ovviamente) sovrappone la scala creata all’immagine di partenza e salva il risultato nel file “immagine_scala.png”. Il risultato sarà una cosa del genere:

lovereconscala

Che ve ne pare? Bello, eh? In realtà si può fare meglio.. ad esempio, invece di creare un rettangolo con una scritta si potrebbe usare un simbolo un pò più serio, tipo:

dili_1943_scale

(ovviamente opportunamente scalato e con tutti i controlli del caso), ma questo ve lo lascio come compito a casa :-) . Potete trovare un’infinità di informazioni ed esempi sull’utilizzo della suite ImageMagick qui. Ciao a tutti!

Pubblicato su Uncategorized | Contrassegnato da tag: , , | 2 Commenti »

Creare mappe personalizzate con i dati di OpenStreetMap

Pubblicato da piccimario su Novembre 28, 2008

Una delle cose più interessanti del progetto OpenStreetMap, a mio avviso, è il fatto che tale progetto mantiene un archivio non di semplici mappe bensì dei dati necessari a realizzarle; parliamo di descrizioni vettoriali di strade con relativi tag descrittivi, descrizioni di aree, ma anche infinite tipologie di punti di interesse (si va dai negozi fino alle strisce pedonali, passando per i parcheggi e le fontanelle d’acqua potabile).

Questa mole di dati non può entrare tutta in un’unica mappa, sarebbe inutile. Esiste però la possibilità di utilizzare questi dati per generare una mappa personalizzata, scegliendo ad esempio che tipo di POI (Point Of Interest) inserire; se voglio fare una passeggiata in bici, vorrò una mappa con le fontanelle dell’acqua potabile e i sentieri di montagna, e non avrò certo bisogno di conoscere la posizione di parcheggi o delle autostrade nella zona.

Oppure voglio solo renderizzare la mappa con gli ultimi dati disponibili, che magari ho inserito io: la mappa disponibile sul sito viene aggiornata solo una volta alla settimana, mentre i dati disponibili come vedremo in seguito sono sempre alla verione più recente.

Come posso fare a procurarmi i dati aggiornati da osm, selezionare la posizione che mi occorre, generare la mappa ed esportarla in un file grafico? Procediamo con ordine.

Recupero dei dati OSM

Il modo più semplice per recuperare i dati OSM è dalla mappa principale del progetto, su www.openstreetmap.org. Clicchiamo sulla tab “Export” in alto sulla pagina, scegliamo la zona desiderata sulla mappa e il livello di zoom richiesto. Sotto la voce “Format to Export” scegliamo “OpenStreetMap XML Data” (dimenticavo, l’opzione è disponibile solo per aree relativamente modeste (una cittadina al massimo, non una provincia) altrimenti i dati diventerebbero troppi). Volendo possiamo utilizzare l’opzione “Manually select a different area”, per selezionare un rettangolo particolare della mappa. A questo punto clicchiamo su “Export”, e rinominiamo il file scaricato in “data.osm” (vedremo poi il perchè).

osmper1

Compilazione della mappa

Il prossimo passo è sfruttare il file osm appena scaricato per creare la mappa, per ora ancora in formato vettoriale. Per questa fase avremo bisogno dell’utility “xsltproc”, disponibile di default in Linux e Mac Os (gli utenti Winzoz si arrangino :-) ). Questa utility altro non è che una sorta di compilatore per file xml: gli diamo in pasto un file xml (i dati scaricati), un file di comandi, un foglio di stile e lui in cambio creerà un file grafico vettoriale che rappresenta la mappa. Procediamo con ordine.

  • Il file di comandi è l’”OsmRenderer”, il sistema di rendering utilizzato per le mappe complete del progetto OSM. Possiamo scaricarne l’ultima versione qui dall’svn di openstreetmap, nella cartella xslt/osmarender.xsl.
  • Il file di stile è quello che, appunto, descrive cosa rappresentare sulla mappa e come rappresentarlo. Per iniziare scarichiamo il file utilizzato dal sistema di rendering di OSM per il livello di zoom 17 (quello più dettagliato). Lo possiamo trovare in stilesheets/osm-map-features-z17.xml. Non vale la pena perdere troppo tempo nel descriverne la sintassi, è tanto semplice e ben commentato che la cosa migliore è fare prove e confrontare i risultati finali, alla ricerca della soluzione migliore per le nostre esigenze. Basti sapere che è questo che dobbiamo modificare per decidere come sarà la nostra mappa personalizzata.
  • Per finire, dobbiamo procurarci i files corrispondenti ai simboli speciali che saranno inseriti sui POI sulla mappa: la troviamo sempre nell’svn, nella cartella symbols/, che dovrà essere copiata (sempre con questo nome) all’interno della cartella in cui già si trovano i files procurati in precedenza. E’ possibile saltare questo passaggio, verranno mostrati dei warning in fase di compilazione ma la mappa verrà creata comunque.

A questo punto abbiamo il tutto, non ci resta che mescolare bene gli ingredienti:

xsltproc osmarender.xsl osm-map-features-z17.xml > map.svg

A questo punto abbiamo creato un file in formato svg contenente la rappresentazione della nostra bella mappa.

Ultimi ritocchi

C’è un problema solo da sistemare: il formato SVG non è certo un formato amichevole. E’ un formato vettoriale, il che significa che può essere ridimensionato a piacere senza perdere qualità, ma non è gestito da tutti i programmi di grafica in giro. Tanto vale trasformarlo in un comodo PNG, no?

Per la semplice visualizzazione (giusto per vedere se ci piace) possiamo aprirlo con Firefox3. Safari lo apre ma ho notato che lo visualizza male (non so perchè). Idem GIMP, almeno sul mio mac.

Per esportarlo in png ci conviene usare l’utility “convert”, della suite “ImageMagick”. Se non l’abbiamo sul sistema, possiamo installarla così:

su mac: con MacPorts installato è sufficiente un “sudo port install imagemagick”, altrimenti possiamo scaricare i binari precompilati dal sito.

su Ubuntu: basta un semplice “sudo apt-get install imagemagick”

Una volta installata possiamo utilizzarla per trasformare la nostra immagine svg in un comodo png. Il comando seguente, ad esempio, ci permette di creare un png di altezza 500px e qualità medio-alta:

convert -density 300 -scale 500 map.svg map.png

Ecco gli ultimi aggiornamenti che ho apportato alla mappa del mio paesello, in questa bellissima mappa fresca fresca di rendering:

osmpermappa

Per un qualche motivo che non ho ben capito (e potrebbe benissimo essere dovuto all’accumularsi di esperimenti software dolorosi sul mio computer) il convert sul mac non mi funziona a dovere, quindi ho dovuto scavare alla ricerca di un’alternativa. L’utility migliore che sono stato capace di individuare è Squiggle. Con questo programma è possibile aprire l’svg, zoomarlo, spostarmi dove voglio e alla fine esportare comodamente l’inquadratura come file PNG.

osmpersquiggle

Unica nota: spesso durante l’apertura del file svg Squiggle dà qualche problema, legato alla non perfetta aderenza del file creato con lo standard svg; basta dargli l’OK a qualunque indicazione di errore e poi ridimensionare la finestra aperta: la mappa verrà visualizzata correttamente lo stesso.

Pubblicato su Uncategorized | Contrassegnato da tag: , , | 6 Commenti »

TorrentFlux: un sistema automatico per scaricare torrent

Pubblicato da piccimario su Novembre 20, 2008

I torrent (di cui parlo diffusamente qui) sono ottimi per scaricare materiale voluminoso (e legale, ovviamente!!). Presentano però un problema: un download richiede tempo (da qualche minuto a qualche giorno, a seconda delle fonti disponibili), e per tutto questo tempo il computer deve rimanere acceso e connesso alla rete. Inutile dire che richieste del genere non si adattano troppo bene a chi come computer possiede un portatile; d’altra parte, il computer di casa risolve questi problemi ma pone una problematica diametralmente opposta, ovvero il fatto che, essendo un computer “fisso”, per forza di cose se devo interagire con esso mi devo spostare fisicamente nella sua posizione, in genere occupata dal grosso sedere di un familiare intento a giocare a FootBall Manager.

La soluzione ideale sarebbe un sistema che gira sul computer fisso (o meglio, su un server) e si occupa di gestire i download mediante il suo client torrent, mettendo a disposizione dell’utente un’interfaccia web (quindi raggiungibile da tutta la rete locale e, volendo, da tutto il mondo) per l’inserimento di nuovi torrent o la gestione dei download già avviati.

Un sistema che fa esattamente quello che ho scritto sopra esiste e si chiama TorrentFlux. E’ progettato per essere installato in un server linux (penso possa girare anche sotto winzoz, ma la sola idea mi traumatizza) e usa interfacce web realizzate in php/mysql.

L’installazione non è banale ma nemmeno troppo complicata. Per prima cosa i requisiti, ovvero quanto deve essere già presente sulla macchina.

  • Un server web che supporti il php (Apache va più che bene)
  • Un database SQL (come MySQL)
  • PHP 4.3 o superiore
  • Python 2.2 o superiore

Normalmente un server ha già tutte queste cosette. Se il nostro non ce le ha, possiamo installarle molto semplicemente:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2 php5 libapache2-mod-php5
sudo apt-get install
mysql-server libapache2-mod-auth-mysql php5-mysql
sudo apt-get install python
sudo /etc/init.d/mysql restart
sudo /etc/init.d/apache2 restart

(spero di non aver dimenticato nulla). A questo punto dovremmo avere tutto quello che ci occorre, passiamo all’installazione di TorrentFlux. Scarichiamo la “current version” dalla pagina di download. Apriamo un terminale e posizioniamoci nella cartella dove è avvenuto il download.

tar -xvzf torrentflux_2.4.tar.gz (il nome potrebbe essere diverso)

Prima di proseguire dobbiamo predisporre il database su cui lavorerà TorrentFlux. Supponendo di avere installato mysql, iniziamo creando un database di nome, per l’appunto, torrentflux:

mysqladmin -u root -p create torrentflux

a questo punto verrà richiesta la password dell’utente root di mysql. A seconda della distribuzione, la password è in bianco oppure corrisponde alla password dell’utente amministratore del server.

(ps: se la password è in bianco, conviene prendere tempo ora e pensare a modificarla:
mysqladmin -u root password nuovapassword
(verrà chiesto di inserire la vecchia password per conferma)
)

Una volta creato il database, provvediamo a popolarlo mediante il file di comandi già bello e pronto nella cartella di installazione di torrentflux:

mysql torrentflux < torrentflux_2.4/sql/mysql_torrentflux.sql

Se tutto è andato per il verso giusto, il prossimo passo è modificare il file di configurazione di torrentflux:

sudo vim html/config.php

In questo file cerchiamo la riga

$cfg["db_pass"] = “”;

e tra i doppi apici prima del punto e virgola inseriamo la password dell’utente root di mysql. Salviamo e chiudiamo. L’ultimo passo è piazzare la cartella del programma in un posto dove sia raggiungibile facilmente attraverso apache. Potremmo cambiargli nome, per prima cosa: io la chiamerò “torrent”.

sudo mv torrentflux_2.4/ torrent/

Spostiamo il tutto nella cartella di lavoro di apache2, che nel mio caso (Ubuntu) è in /var/www:

sudo mv torrent/ /var/www/

Assegniamo per stare sicuri la proprietà di tutta la cartella all’utente di apache2, (nel mio caso www-data):

sudo chown -R www-data /var/www/torrent/

A questo punto possiamo puntare il nostro browser sull’interfaccia del programma. E’ sufficiente inserire nella barra dell’indirizzo del browser

http://ip.del.server/torrent/html

(se non sappiamo l’IP del server possiamo vederlo col comando “ifconfig”; teniamo presente che potrebbe cambiare col passare del tempo, ma d’altra parte se stai installando questa roba su un server vuol dire che sai perfettamente di cosa sto parlando :-) ).

Per accedere è necessario inserire le credenziali del superutente, che di default sono pari a quelle per l’accesso al database: “root” come utente e la password root di mysql come password. Per prima cosa conviene creare un utente per l’uso comune, a cui possiamo comunque dare in fase di creazione i permessi di amministrazione.

Per iniziare conviene fare un salto nell’interfaccia di configurazione: pulsante “admin” in alto a destra, poi click su “settings” nel menu in alto. Tra le impostazioni cui dare un occhio vi sono sicuramente:

  • Path: la cartella di destinazione dei download. Deve appartenere a (o quantomeno essere scrivibile da) l’utente in cui gira apache (in Ubuntu è l’utente www-data).
  • Max Upload Rate
  • Max Download Rate

A questo punto (dopo aver salvato le impostazioni) l’interfaccia utente è talmente semplice da usare che non sto nemmeno a parlarne.

sc21_01

Vi dico solo che abbiamo a che fare con un sistema completo e molto ben studiato, che ben si adatta sia al singolo sia a un gruppo intero di utenti indipendenti, con code, priorità e cose così. Ma penso che la cosa migliore per rendersene conto sia fare qualche esperimento.

Per chi invece vuole iniziare a scaricare indico immediatamente i primi due campi di testo in alto a sinistra:

  • Il primo permette di uploadare dal computer locale un file .torrent
  • Il secondo permette di specificare un file torrent trovato in rete mediante il suo indirizzo, provvederà torrentflux a scaricarselo.

In ogni caso i file corrispondenti ai torrent attivati appariranno nell’elenco sottostante; i file appena inseriti normalmente sono fermi, per avviarli è necessario cliccare sul pulsante verde alla loro destra. Et voilà!

E la cosa bella, ormai l’avrete capito, è che anche se chiudo il browser il sistema continua silenziosamente a funzionare, a scaricare, scaricare.. materiale legale, materiale legale, mettetevelo in testa, materiale legale…

Pubblicato su Uncategorized | Contrassegnato da tag: , , , | 5 Commenti »

Aprire una console seriale sul proprio cellulare

Pubblicato da piccimario su Ottobre 28, 2008

Qualche tempo fa ho scritto un breve articolo sui comandi AT nel mondo dei cellulari. Mediante questi comandi è possibile interfacciarsi al modem del telefono attraverso una console seriale, e attraverso questo accedere a una serie di funzionalità che variano da telefono a telefono e possono includere cose tipo fare chiamate, mandare sms, leggere gli sms nella memoria e così via. Però prima di questo è necessario creare la connessione tra il computer e il telefono: vediamo un pò come si fa.

Siccome i cavi sono sempre scomodi, tenteremo di instaurare questa connessione via bluetooth. Per prima cosa bisogna verificare che il computer abbia un adattatore bluetooth configurato a dovere e pure il cellulare (che deve avere il bluetooth attivo e in modalità “visibile a tutti”).

Lavoreremo sotto Ubuntu Linux (non voglio nemmeno immaginare quanto potrebbe essere complicato tentare di fare quello che sto per fare sotto winzozz :-) ). Dovremo avere installato lo stack bluetooth e i pacchetti bluez-sdp e bluez-util:

mario@ninfa:-$ sudo apt-get install bluez-utils bluez-sdp
mario@ninfa:-$ sudo /etc/init.d/bluetooth restart

Per prima cosa scopriamo l’indirizzo bluetooth (univoco) del nostro telefono:

mario@ninfa:-$ hcitool scan

scanning…
00:11:22:33:44:55    Mario

Il tool di ricerca ha individuato un telefono di nome Mario e indirizzo univoco 00:11:22:33:44:55 (segnamolo da qualche parte, sarà con quello che il computer potrà identificare il telefono). Passiamo ad esaminare i servizi a disposizione sul telefono:

mario@ninfa:-$ sdptool browse 00:11:22:33:44:55

Il risultato sarà un sacco di testo, che rappresenta una voluminosa e dettagliata descrizione di tutti i servizi messi a disposizione dal telefono mediante bluetooth (si va dallo scambio di file fino alla connessione dell’auricolare). Quello che interessa a noi in questo caso è il servizio di Dial Up Networking, corrispondete al modem:

[...un sacco di roba...]

Service Name: Dial-up Networking
Service RecHandle: 0×10002
Service Class ID List:
“Dialup Networking” (0×1103)
“Generic Networking” (0×1201)
Protocol Descriptor List:
“L2CAP” (0×0100)
“RFCOMM” (0×0003)
Channel: 2
Profile Descriptor List:
“Dialup Networking” (0×1103)
Version: 0×0100

[...un sacco di roba...]

Nel testo ho evidenziato l’informazione importante: il canale da usare per la comunicazione. NB: su alcuni telefoni esiste anche il servizio “serial console”, ma non sono sicuro di quale sia la sua funzione. Vale la pena di fare qualche prova se il canale indicato sopra non funziona.

Una volta scelto il canale, predisponiamo il computer per la connessione. Modifichiamo il file hcid.conf, quello che sovrintende alle connessioni bluetooth del computer:

mario@ninfa:-$ sudo vim /etc/bluetooth/hcid.conf

Per cominciare, bisogna impostare la modalità di autenticazione tra telefono e computer. Come sappiamo, l’autenticazione su bluetooth avviene mediante impostazione di un PIN. Potremmo configurare Linux per domandare il PIN ogni volta che instaura una connessione, ma al momento non vale la pena di perderci tempo: imposteremo un PIN unico per il computer; teniamo presente di stare attenti, dato che un PIN statico significa che chiunque lo conosca si può collegare ai servizi bluetooth del nostro computer!

In questo caso sarà sufficiente verificare che la riga security del file abbia questo aspetto:

security auto;

e che la riga passkey riporti il PIN statico da noi scelto (in questo caso quattro zeri):

passkey “0000″;

Salviamo e chiudiamo il file. Riavviamo il sistema bluetooth:

mario@ninfa:-$ sudo /etc/init.d/bluetooth restart

Inizializzazione della comunicazione

Il passo successivo è creare il binding tra cellulare e computer. Per questo è necessario utilizzare la “ricerca dispositivi bluetooth” del telefono, individuare il computer e iniziare la connessione. Verrà richiesto il PIN, e noi inseriremo quello specificato prima (nell’esempio 0000). NB: questo passaggio è facoltativo: nel caso venga inizializzata la comunicazione (mediante i comandi descritti in seguito) senza un binding preventivo, questo dovrebbe essere comunque avviato automaticamente; in ogni caso durante il binding verrà richiesto il PIN.

A questo punto dobbiamo creare la connessione tra una console seriale e il canale desiderato sul telefono.

mario@ninfa:-$ sudo rfcomm bind rfcomm0 00:11:22:33:44:55 1

dove:

  • rfcomm0 è il nome della console seriale
  • 00:11:22:33:44:55 è l’indirizzo fisico del cellulare
  • 1 è il canale (sostituire col valore trovato prima)

Per verificare l’avvenuta connessione è sufficiente utilizzare ancora il comando rfcomm:

mario@ninfa:-$ rfcomm

rfcomm0: 00:11:22:33:44:55 channel 1 clean

A questo punto la connessione è attiva. Non ci resta che accedervi, ad esempio così:

mario@ninfa:-$ screen /dev/rfcomm0

Si aprirà una console completamente vuota, dato che il modem non ha prompt. Per verificare il funzionamento basta inviare il comando AT seguito dal tasto invio; il telefono dovrebbe rispondere con un OK. Funziona!!!!

Per chiudere la comunicazione basta un control+c.

Per un elenco dei comandi AT con cui si può giocherellare vi lascio questo link, con un elenco di comandi supportati da Nokia (e parzialmente anche da altri telefoni). Tenete sempre presente che solo una parte di essi sarà utilizzabile, dipende dal modello del vostro telefono. E tenete presente di andarci piano, e fare prove a ragion veduta, perchè sennò rischiate di incasinarvi il telefonino!

Rendere le impostazioni permanenti

Un’ultima cosa: per rendere le impostazioni di comunicazione permanenti, bisogna modificare il file /dev/bluetooth/rfcomm.conf:

mario@ninfa:-$ sudo vim /etc/bluetooth/rfcomm.conf

e aggiungervi una sezione simile a questa:

rfcomm0 {
bind no;
device 00:11:22:33:44:55;
channel 1;
comment “il mio telefonino bello bello”;
}

Ovviamente i valori di device e channel devono essere impostati correttamente. Salviamo e chiudiamo il file. A questo punto per avviare la connessione è sufficiente digitare:

mario@ninfa:-$ sudo rfcomm bind /dev/rfcomm0

E per terminarla:

mario@ninfa:-$ sudo rfcomm release /dev/rfcomm0

Senza doversi ricordare indirizzo o canale. Comodo, no? Esiste infine una terza strada: nel file rfcomm.conf modificato prima, nella riga bind della sezione che abbiamo aggiunto mettiamo yes invece di no: in questo modo il computer tenterà automaticamente di connettersi al cellulare ogni volta che questo sarà vicino e col bluetooth attivo. Per questi esperimenti è in effetti inutile, ma potrebbe risultare utile in futuro.

Beh, per ora è tutto, spero di essermi spiegato bene. Se avete dubbi non esitate a scrivere nei commenti, farò il possibile per rispondere. Ciao a tutti!

Pubblicato su Uncategorized | Contrassegnato da tag: , , , | Lascia un commento »

Scalpel: data carving facile e multipiattaforma

Pubblicato da piccimario su Settembre 30, 2008

Giocherellando per la tesi, ho scovato un’interessante utility per il data carving. Per dirla in breve, data carving significa “scavare alla ricerca di dati”, ovvero tentare di identificare e isolare determinate informazioni all’interno di un blocco più esteso. Un esempio concreto è il tentare di isolare singoli files all’interno di un’immagine binaria, ad esempio una copia bit-a-bit di una partizione.

Per identificare files il modo più semplice è cercare headers e footers specifici: ogni tipo di file inizia con una determinata sequenza di caratteri che lo identifica, e spesso termina con una sequenza altrettanto specifica. Non devo fare altro che ritagliare quello che c’è attorno, e ho il file che stavo cercando.

… altroaltroaltro <header> file da estrarre <footer> altroaltroaltro …

Questa procedura può servire a vari scopi: ad esempio, per estrarre files da un disco danneggiato di cui riesco comunque ad avere un’immagine, seppure incompleta (e quindi impossibile da montare). Oppure per estrarre files da immagini che non posso montare: ad esempio per la tesi devo estrarre files da dump della memoria fisica di cellulari, e questa è l’unica strada percorribile.

Scalpel fa esattamente questo: esamina un’immagine binaria alla ricerca di header e footer specificati, e dove li trova estrae il contenuto e ne crea un file. Installarlo è facile: sotto Ubuntu linux è presente nel portage, basta fare:

sudo apt-get install scalpel

Ma la parte divertente è senz’altro la possibilità di installarlo anche sotto mac, essendo open source e quindi allegramente compilabile. Basta scaricare i sorgenti dal sito, scompattarli e compilare:

tar -xzf scalpel-xyz.tar.gz

cd scalpel-xyz

make bsd

Una volta pronto l’eseguibile, bisogna dedicare un pò di attenzione al file di configurazione. Nella cartella dei sorgenti è disponibile un file denominato scalpel.conf, che andrà modificato (facciamone prima una copia di backup, che non fa mai male). Questo file altro non è che un descrittore di tutti i possibili files che il sistema è in grado di estrarre, descritti come segue:

png  y  20000000  \x50\x4e\x47?  \xff\xfc\xfd\xfe

Il primo campo (png) è l’estensione che avrà il file una volta estratto. Il secondo campo è un booleano y/n che indica se header e footer sono case sensitive. Il terzo campo è la dimensione massima che può avere un file di questo tipo (se ci sono errori nel carving, almeno a un certo punto il sistema sa di doversi fermare). Il quarto e quinto campo sono rispettivamente header e footer da cercare.

Nel file di configurazione sono presenti una serie di possibili descrittori di file, in origine tutti commentati (le righe che cominciano con #). Prima di eseguire il carving bisogna togliere il # dall’inizio delle righe corrispondenti ai file che stiamo cercando.

A questo punto lanciamo il programma:

./scalpel -o cartella_risultati -c file_configurazione dumpfile

Il software esamina il file dumpfile e ne estrae tutte le occorrenze di files, descritti nel file_configurazione; tutto quello che riesce a estrarre viene piazzato in cartella_risultati. Tale cartella deve essere vuota, altrimenti il programma non funziona (può anche non esistere, in tal caso viene creata al momento).

Et voilà! Il gioco è fatto!

Processing of image file complete. Cleaning up…
Done.
Scalpel is done, files carved = 294, elapsed = 3 seconds.

Pubblicato su Uncategorized | Contrassegnato da tag: , , , | Lascia un commento »

Condivisione windows-linux con SAMBA

Pubblicato da piccimario su Settembre 28, 2008

Di recente mi sono assemblato un serverino; il motivo principale è stato il tentare di utilizzare al meglio un paio di dischi per un totale di circa 300 giga di spazio, troppi per lasciarli a fare polvere in un armadio.

Detto fatto, ho raccattato un pò di ciarpame elettronico che avevo sparso per la mia stanza e sono riuscito a mettere assieme un mostro le cui caratteristiche peculiari possono essere riassunte come segue:

  • processore: Pentium II
  • frequenza cpu: 400 MHz
  • RAM: 190 MB (non chiedetemi come ho fatto)
  • Sistema: Ubuntu Hardy Heron (ultima versione disponibile)

A questo punto mi sono chiesto quale fosse il modo più semplice per sfruttare i preziosi giga a disposizione nei dischi fissi. Da buon sistemista vecchio stampo ho subito pensato alla soluzione arcaica: un bel serverino ftp; si installa in un secondo, si configura in meno e funziona; non è sicurissimo, ma per i miei scopi va benone.

Problema: richiede un client ftp; non ci sono infatti metodi nativi, rapidi e comodi (che io sappia) per accedere a condivisioni ftp da windows, a meno di non abbassarsi a usare explorer. Ma meglio la morte, direi. Di conseguenza ho scelto di tentare un’altra strada: la condivisione samba, ovvero la condivisione di default di windows (la famosa “cartella condivisa” con la manina sotto l’icona, che si suppone la renda visibile in tutto il workgroup; il fatto che funzioni per magia nera e solo quando ha voglia è uno spiacevole effeto collaterale di inesattezze nella teoria della relatività allargata).

Detto fatto, vediamo come impostare in 30 secondi una condivisione samba su un server linux (nello specifico una Ubuntu Hardy, ma penso sia quasi lo stesso su qualunque altro sistema).

Per prima cosa installiamo il server: da root utilizziamo il comando:

apt-get install samba

Adesso il server è installato e pronto per essere configurato. Il file di configurazione è

/etc/samba/smb.conf

(facciamone prima una copia di backup che non si sa mai). Per prima cosa andiamo a settare un paio di configurazioni per il server, per ora giusto le cose fondamentali; in particolare dobbiamo impostare (all’inizio del file, nella sezione [global]) il valore “workgroup”, che deve coincidere con il workgroup del resto delle macchine della rete (se non sapete che significa lasciate il valore predefinito, ovvero per l’appunto “workgroup”) e il valore “server string”, che sarà la descrizione del server sulla rete; anche in questo caso se non avete le idee chiare lasciate tutto com’è che va bene lo stesso.

In questo file sono già presenti delle possibili configurazioni commentate, ma per ora non ci interessano; ne vogliamo creare rapidamente una da zero, quindi andiamo in coda al file e aggiungiamo semplicemente queste righe:

[nome_condivisione]

path = cartella locale da condividere

read only = yes/no (a seconda che la vogliamo di sola lettura o modificabile dagli utenti)

browseable = yes

guest ok = yes/no (se la vogliamo oppure no a disposizione di tutti, anche utenti non registrati)

Se decidiamo che la cartella sarà riservata solo agli utenti, potremmo anche decidere a quali utenti sarà consentito l’accesso; se voglio ad esempio limitare l’accesso alla cartella solo a me, aggiungerò al file di cui sopra anche la seguente riga:

valid users = mario

e così solo l’utente mario può accedere alla cartella (a meno che non sia guest-ok, ovviamente). Se voglio assegnare più utenti, devo scrivere tutti i nomi separati da virgole. A questo punto è sifficiente riavviare il demone samba per rendere effettive le modifiche, con il comando:

sudo /etc/init.d/samba restart

Un’ultima cosa: di default gli utenti validi per samba sono gli stessi utenti linux della macchina; però la password è diversa, e deve essere impostata a parte prima di poter accedere alla condivisione. Per impostare la password è sufficiente il comando:

sudo smbpasswd nomeutente

e il gioco è fatto! Adesso da un qualunque computer windows presente in rete posso accedere alla cartella semplicemente andando su “risorse di rete” -> “mostra computer del gruppo di lavoro” (nel menu di sinistra), e poi cliccando sul nome del server che apparirà nella finestra. Facile, no?

Pubblicato su Uncategorized | Contrassegnato da tag: | Lascia un commento »

Meno male che c’è S.M.A.R.T.!

Pubblicato da piccimario su Settembre 22, 2008

mario@beholder> smartctl -H /dev/hdc

smartctl version 5.34 [i686-pc-linux-gnu] Copyright (C) 2002-5 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: FAILED!

Drive failure expected in less than 24 hours. SAVE ALL DATA.

Failed Attributes:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE

  5 Reallocated_Sector_Ct   0×0033   001   001   063    Pre-fail  Always   FAILING_NOW 1276

Carino.. beh, che dire, ho fatto bene a non usare questo disco per installare il mio serverino.. Un messaggio minatorio del genere farebbe cambiare idea a chiunque circa l’utilizzo di un disco riesumato da un armadio polveroso. Devo smetterla di mettere insieme computer con pezzi raccattati in giro! :-)

Pubblicato su Uncategorized | Contrassegnato da tag: , | 2 Commenti »