Computer Programming n. 181

Page 1



EDITORIALE

L’inizio di una nuova avventura Noi abbiamo deciso di ricominciare. Aiuto!

Computer Programming e` una rivista realizzata da Infomedia Editori Coop. e Ass. Turing Club Direzione e Amministrazione: Via Iannacchini, 28 - Avellino In attesa di registrazione presso il Tribunale di Avellino (richiesta del 4/3/2009) D R

Non cambierai mai le cose combattendo la realt`a esistente. Per cambiare qualcosa, costruisci un modello nuovo che renda la realt`a obsoleta. R. Buckminster Fuller

COMPUTER PROGRAMMING e` la rivista di programmazione che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori d’informatica italiani. Sono pi`u di 800 gli autori che hanno realizzato per le testate Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e trabocchetti. Oltre 6 milioni di copie distribuite trentamila pagine stampate fanno di questa impresa la pi`u grande ed influente realt`a dell’editoria specializzata nel campo della programmazione e della sistemistica. In tutti questi anni le riviste hanno vissuto della passione di tanti, come te, che vedono nella programmazione non solo una professione ma una passione vitale e un vero divertimento. Mettere in condivisione le soluzioni adottate nello sviluppo di un programma, ripercorrendone le tappe e` un ottimo modo per documentare al meglio il proprio lavoro, fissare i concetti e verificare la qualit`a delle proprie realizzazioni. E` uno splendido modo per dare agli altri la possibilit`a di impare nuove tecniche e progredire nelle proprie competenze e per rendere il nostro ambiente pi`u vitale, competitivo ed attivo. La programmazione o la soluzione dei problemi sistemistici ci d`a molta gioia, perch´e e` necessario superare i limiti della nostra conoscenza. A volte abbiamo la sensazione che questo piacere non e` possibile da comunicare. Questo e` il luogo giusto per farlo. I tuoi “pari” sono interessati a queste soluzioni, ai passi che hai compiuto per raggiungere un risultato e perch´e no, agli errori che commesso nei tuoi tentativi. L’informatica e` un ambito professionale unico, in cui le spinte competitive sono sempre state forti, ma altrettanto forti ed importanti e` stata la tensione a cooperare. La condivisione delle informazioni e la diffusione delle conoscenze sono l’anima costitutiva di questa Comunit`a. Le nuove Computer Programming, Dev e Login vogliono incentivare questi aspetti per essere ancora di pi`u al centro di questa Comunit`a. Aiutateci. Perch´e senza queste riviste programmatori e sistemisti italiani rimarrebbero senza voce. Chiunque tu sia, quindi, quale che sia la tua storia, i tuoi strumenti di lavoro, il tuo linguaggio di programmazione, la tua piattaforma o framework, il tuo sito o il tuo programma. . . contribuisci a questa Storia per permetterci di andare avanti.

A. Somma M E G. Spagnuolo (kirash@infomedia.it) M. Monti (micky@infomedia.it) L  C

XED.it

(info@xed.it)

G Redsign (www.redsign.it grafica@infomedia.it)

A

S. Carpenter L. Dal Col G. Pignalberi G. Richmond E. Somma D. Treffiletti

L’     `   100%   O S  OO, E, BHL, LATEX, G, I    L, P  BASH

For copyright information about the contents of Computer Programming, please see the section “Copyright” at the end of each article if exists, otherwise ask authors. Infomedia contents is © 2009 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is © 2009 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di Computer Programming sono riportate nella sezione “Copyright” alla fine di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e` © 2009 Infomedia e rilasciato con Licenza Creative Commons 2.5 BY-NCND. Il contenuto Turing Club e` © 2009 Turing Club e rilasciato con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. E` in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch´e vengano integralmente citati gli autori e la completa identificazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%.

Computer Programming [None 2009] $LastChangedDate:: 2009-04-03 11:03:05 #$ $Rev: 45 $


Indice

Numero , None 2009

EDITORIALE

L’inizio di una nuova avventura

3

GEOGRAFIA COMPUTAZIONALE

Trasformazione di coordinate geografiche in Javascript 14 Lorenzo Dal Col In numerose applicazioni e` necessario risolvere il problema della trasformazione delle coordinate geografiche tra sistemi di riferimento differenti. In questo articolo verr`a illustrato un applicativo che effettua la trasformazione delle coordinate del sistema WGS84 a quelle UTM. L’obiettivo e` di fornire una procedura di trasformazione che possa funzionare anche con dati acquisiti in tempo reale, senza la necessit`a di eseguire post-elaborazioni; e` stato inoltre scelto il linguaggio Javascript in modo che possa funzionare in un qualsiasi browser web che supporti lo scripting e in un qualsiasi sistema operativo, anche quello degli smart-phone, che sempre pi`u spesso integrano un ricevitore GPS.

Trasformare le coordinate geo6 grafiche da WGS84 a UTM Lorenzo Dal Col, Emmanuele Somma La cartografia si occupa di rappresentare la superficie terrestre sul piano secondo norme e segni convenzionali. La rappresentazione della superficie fisica terrestre e` un’operazione complessa poich´e la superficie da rappresentare non e` piana, il terreno ha una forma molto irregolare e le dimensioni dell’oggetto da rappresentare eccedono le normali capacit`a di misura dell’uomo. Quest’articolo fornir`a una breve introdurr`a alla teoria matematica delle trasformazioni geografiche pi`u comuni e se ne mostrer`a una veloce implementazione in linguaggio SQL da usare come stored procedure in MySQL. Si vedr`a inoltre anche come utilizzare il noto pacchetto PROJ per realizzare le trasformazioni geografiche. 4

USER SPACE

Konqueror: tutto da una interfac22 cia Gary Richmond Suggerimenti, trucchi e funzionalit`a per sfruttare al massimo le caratteristiche di Konqueror. Si vedr`a come migliorarne le prestazioni, utilizzarlo al meglio come file manager e come browser e aggiungere nuove funzionalit`a attraverso i Service Menu.

Computer Programming n. 181 [None 2009]


Indice

PROGRAMMING

Estensioni Google in Firefox

32

Gary Richmond Questo articolo illustrer`a come far interagire Firefox con i servizi offerti da Google attraverso con Gmail Notifier, Better Gmail, FireGPG, Get Things Done, Better GCal, Remember The Milk, GSpace, FEBE, Cleo, Zotero, Customize Google...

Estendere Nautilus: (fotocamere e) rotazione di immagini JPG 43 Scott Carpenter Partendo dall’esigenza di ruotare un’immagine direttamente da Nautilus si vedr`a come come personalizzare il menu popup per adattarlo alle proprie esigenze sfruttando la potenza di bash.

Filtri audio ... con Gimp

48

Gianluca Pignalberi Gimp viene universalmente utilizzato per la manipolazione di immagini. Tuttavia, con un po’ di creativit`a e un paio di trucchi, pu`o anche essere utilizzato come filtro audio! Ecco come...

Photo Credit: Mappa dell’Europa di Mercatore RUBRICHE

Thread contro Thread

52

Danilo Treffiletti Windows Thread e Posix Thread a confronto...

Pensare – Progettare – Programmare 53 Hanno collaborato a questo numero... 55

Gerhard Mercator nacque nel 1512 nelle Fiandre. Ebbe una formazione classica: latino, greco, logica, grammatica e retorica. Pubblic`o una mappa della Terra Santa, un piccola mappa del globo terrestre, una mappa delle Fiandre e un libro sulla grafia corsiva. Fu infatti il primo a usare sulle mappe geografiche il carattere corsivo italic. Per questa attivit`a cartografica Mercator fu perseguitato dalle autorit`a religiose cattoliche, accusato di eresia e incarcerato per circa sette mesi. Solo le proteste dell’Universit`a gli permisero di essere scagionato dalle accuse. Fu per`o poi perseguitato dall’Inquisizione poich´e protestante e dovette trasfer`ırsi a Duisburg in cui all’epoca il duca Guglielmo il Ricco era riuscito a mantenere indipendente tra le le confessioni e vi aveva creato un significativo circolo di intellettuali. L`ı insegn`o liberamente geometria, matematica e cosmologia presso il ginnasio, e nel 1563 venne nominato cartografo ducale. Mercator mor`ı dopo aver raggiunto una invidiabile posizione economica a Duisburg. La sua tomba e` situata nella Chiesa del Salvatore di Duisburg (Salvatorkirche). Image Credit: WikiMedia

Computer Programming n. 181 [None 2009]

5



Trasformare le coordinate geografiche da WGS84 a UTM Le formule di Molodenskij e Gauss rese semplici

Lorenzo Dal Col, Emmanuele Somma

a cartografia si occupa di rappresentare la superficie terrestre sul piano secondo norme e segni convenzionali. La rappresentazione della superficie fisica terrestre e` un’operazione complessa poich´e la superficie da rappresentare non e` piana, il terreno ha una forma molto irregolare e le dimensioni dell’oggetto da rappresentare eccedono le normali capacit`a di misura dell’uomo. Quest’articolo fornir`a una breve introdurr`a alla teoria matematica delle trasformazioni geografiche pi`u comuni e se ne mostrer`a una veloce implementazione in linguaggio SQL da usare come stored procedure in MySQL. Si vedr`a inoltre anche come utilizzare il noto pacchetto PROJ per realizzare le trasformazioni geografiche.

L

Le trasformazioni Per realizzare una trasformazione corretta e` necessario che a ciascun punto del terreno sia associato univocamente un punto sulla superficie di riferimento (mappa) in modo che: • la sua trasformazione inversa dia un punto ’vicino’ a quello alla superficie terrestre (con un errore accettabile) • la sua rappresentazione matematica sia semplice • si possa stabilire una corrispondenza biunivoca fra i suoi punti e quelli della superficie terrestre

• si possa istituire sulla mappa una geometria per eseguire semplicemente calcoli geodetici Il passaggio dalla Terra alla carta avviene in due passaggi. Innanzitutto si proietta il terreno sulla superficie curva di riferimento e poi se ne realizza una rappresentazione piana bidimensionale. Proiezione sulla superficie di riferimento

Questo primo passaggio consiste nel far coincidere un punto della superficie terrestre con uno preso su una superficie di riferimento tramite una proiezione verticale. La superficie di riferimento ideale e` detta “geoide”, che e` la superficie equipotenziale del campo gravitazionale terrestre. Il geoide approssima abbastanza bene la superficie terrestre, ma poich`e non possiamo conoscere il valore della gravit`a terrestre in ogni punto della Terra non e` esprimibile con formule analitiche. Per ovviare a questo problema solitamente si adotta come superficie di riferimento un ellissoide di rotazione, che si descrive facilmente con formule analitiche. Attraverso calcoli astronomici sono stati definiti diversi ellissoidi di riferimento, nel 1924 furono adottati universalmente quali parametri dell’ellissoide di riferimento i valori proposti da Hayford. L’ellissoide cos`ı dimensionato e` da allora indicato come “ellissoide internazionale”. Poich´e l’ellissoide di riferimento si discosta rispetto al geoide deve essere ruotato e centrato il pi`u vicino pos-

Computer Programming n. 181 [None 2009]

7


GEOGRAFIA COMPUTAZIONALE

Figura 1: Rapporto tra la superfice terrestre, l’ellissoide e la geoide

sibile alla zona terrestre che vogliamo mappare (punto di emanazione), in modo da ridurre al minimo la distanza tra i due. Rappresentazione bidimensionale

Per passare dalla rappresentazione su supporto curvo ad una rappresentazione piana si ricorre ad una rappresentazione cartografica, stabilendo per ciascun punto una corrispondenza biunivoca fra le coordinate curvilinee e le coordinate cartesiane ortogonali. La rappresentazione piana che si ottiene e` deformata rispetto quella disegnata sul supporto curvo. Ad esempio, la Proiezione universale trasversa di Mercatore (UTM) o conforme di Gauss e` una proiezione pseudocilindrica assimilabile alla cilindrica inversa, ma le sue equazioni della carta sono state costruite in modo da ottenere l’isogonicit`a.

di rotazione utilizzati per descrivere la forma della Terra e ogni posizione sulla sua superficie. Ciascun sistema e` identificato dal suo DATUM che identifica la forma, la posizione e l’orientamento del modello rispetto alla Terra e alla sua superficie. Quando si esprime una posizione geografica in orizzontale tramite coordinate oppure in verticale con l’altezza, e` necessario sempre associare il valore espresso al DATUM di riferimento. Infatti esistono diversi sistemi di riferimento geodetico ed il datum e` l’unico modo univoco per indicare quello prescelto.

I sistemi di riferimento geodetici

I vari sistemi di riferimento geodetico differiscono tra loro per la definizione dell’ellissoide di rotazione (la forma geometrica usata per approssimare la forma della Terra). Ad esempio il datum WGS72 definisce un ellissoide con semiasse maggiore di 6.378.135 metri e schiacciamento ai poli di 1/298.26, mentre per WGS84 i valori sono 6,378,137 e 1/298.257223563 rispettivamente. Nel DATUM si indica anche l’orientamento e l’origine delle coordinate.

I sistemi di riferimento sono basati su coordinate per descrivere in modo matematico una posizione geografica. Si tratta di modelli geometrici basati su ellissoidi

La conversione delle coordinate di un punto da un sistema di riferimento ad un altro non e` operazione semplice, si pu`o generalmente usare la corposa ed efficace libreria Proj per questo scopo.

8

Computer Programming n. 181 [None 2009]


GEOGRAFIA COMPUTAZIONALE

UTM – Universal Transverse Mercator Figura 2: Proiezione universale trasversa di Mercatore (UTM) o conforme di Gauss.

Talvolta per`o e` necessario programmare direttamente queste trasformazioni e ci`o e` tutt’altro che complesso, come si vedr`a in seguito. Ma prima e` necessario conoscere alcuni sistemi di riferimento standard. In particolare: WGS84 World Geodetic System 1984 UTM Universal Transverse Mercator ITA40 Roma Monte Mario o Gauss-Boaga WGS84 – World Geodetic System 1984

E` il sistema di riferimento utilizzato nel posizionamento con la tcnologia GPS. E’ espresso tramite le coordinate geodetiche X,Y,Z, riferite all’ellissoide di rotazione geocentrico: • l’asse Z e` diretto verso la posizione del polo medio definito nel 1984 • l’asse X e` definito dall’intersezione del piano equatoriale medio nel 1984 con il meridiano di Greenwich • l’asse Y e` definito in modo tale da completare la terna destrorsa

E` la cartografia pi`u diffusa al mondo, nota anche come Gauss-Boaga. Questa proiezione e` approssimata notevolmente dalla cilindrica trasversa inversa. Questo tipo di cartografia e` conforme. Le trasformate del meridiano centrale (di tangenza) e dell’Equatore sono rette e rappresentano gli assi del sistema di riferimento (N e E). Poich´e pi`u ci si allontana dal meridiano centrale pi`u il modulo di deformazione lineare sale, nel sistema UTM l’ampiezza di un fuso e` di 6 gradi, il sistema risulta essere quindi policilindrico. Ogni fuso ha un sistema N,E indipendente. Viene inoltre applicato alle coordinate un coefficiente di contrazione di 0,9996 per ridurre le deformazioni. Infine all’origine delle ascisse viene applicata una falsa origine di 500000 m, per evitare valori negativi di E. Il riferimento geodetico e` basato sull’ellissoide internazionale con orientamento europeo (ED50), cio`e orientato a Postdam. ITA40 – Roma Monte Mario o Gauss-Boaga

La proiezione cartografica Gauss-Boaga e` stata adottata quasi interamente dalla cartografia ufficiale italiana dal 1940. E’ stata proposta dal prof. Giovanni Boaga quando era a capo dell’Istituto Geografico Militare, e utilizza il sistema di riferimento Roma40, con ellissoide orientato a Roma Monte Mario. La Carta d’Italia dell’IGM in scala 1:25.000 (serie 25V), e` stata redatta in coordinate Gauss-Boaga, poi abbandonate in favore della Proiezione Universale Trasversa di Mercatore (UTM).

Le formule di trasformazione La trasformazione delle coordinate avviene in due passi. La prima funzione converte le coordinate ellissoidiche WGS84 in coordinate ellissoidiche ED50 usando le formule di Molodenskij; la seconda converte le coordinate ellissoidiche ED50 in coordinate piane UTM usando le formule di Gauss adatte a questo scopo. Le formule di Molodenskij

Le formule di Molodenskij complete a partire dalle coordinate ellissoidiche WGS84 ϕ, λ e h sono le seguenti:

Computer Programming n. 181 [None 2009]

9


GEOGRAFIA COMPUTAZIONALE

a(1 − e2 ) ρ= p (1 − e2 sin ϕ2 )3

Figura 3: Mikhail Sergeevich Molodenksy (1909 - 1991)

dove ρ e` il raggio di curvatura del meridiano, a e` il semiasse equatoriale dell’ellissoide WGS84, e2 e` l’eccentricit`a dell’ellissoide WGS84 a(1 − e2 ) NG = p 1 − e2 sin ϕ2

dove NG e` la Gran Normale

dϕ =

sin ϕ cos λ sin ϕ sin λ cos ϕ x0 + y0 + z0 + ρ+h ρ+h ρ+h a2 /NG + h a2 /NG + h (sin λ)E x + (cos λ)Ey + ρ+h ρ+h (1 − (1 − α)2 )NG cos ϕ sin ϕ (K + da /a) − ρ+h ρ + (1 − α)2 NG cos ϕ sin ϕ (dα /α) ρ+h

in cui da e` la differenza tra semiasse maggiore WGS84 e ED50 e dα e` la differenza tra schiacciamento WGS84 e ED50, x0 , y0 , z0 sono le traslazioni fra i centri del sistema WGS84 e ED50 ed infine E x , Ey , Ez sono le rotazioni attorno agli assi dell’ellissoide ED50 mentre K e` il fattore di scala.

dλ =

cos λ sin λ x0 + y0 − (NG + h) cos ϕ (NG + h) cos ϕ (1 − α)2 NG + h (tan ϕ cos λ)E x − NG + h (1 − α)2 NG + h (tan ϕ sin λ)Ey + Ez NG + h

dh = cos ϕ cos λx0 − cos ϕ sin λy0 − sin ϕz0 − (1 − (1 − α)2 )NG (cos ϕ sin ϕ sin λ)E x − (1 − (1 − α)2 )NG (cos ϕ sin ϕ cos λ)Ey − ! a a2 +h K + da − NG NG dα (1 − α)2 NG (sin ϕ)2 1−α 10

Sebbene queste formule sembrino molto complesse la loro scrittura con un qualsiasi linguaggio di programmazione e` semplice e diretta, ad esempio nel Listato 1 e` riportato l’inizio del sorgente di una stored procedure SQL per il database MySQL che realizza questa trasformazione. In particolare dopo la dichiarazione della funzione e la definizione dei tipi: CREATE PROCEDURE ‘MOLODENSKIJ‘(PHI DOUBLE, LAMBDA DOUBLE, H DOUBLE, A DOUBLE, e DOUBLE, OUT D_PHI DOUBLE, OUT D_LAMBDA DOUBLE, OUT D_H DOUBLE ) BEGIN DECLARE RHO DOUBLE DEFAULT 0.0; DECLARE N_G DOUBLE DEFAULT 0.0;

sono scritte le formule relative alle variabili RHO e N G

Computer Programming n. 181 [None 2009]


GEOGRAFIA COMPUTAZIONALE

Nome WGS 84 WGS 72 Hayford Elliss. Internaz. 1924 Bessel Clarke 1880 Clarke 1866 Everest Airy Krassovsky South American

Anno Semiasse maggiore Semiasse minore Schiacciamento 1984 6378137 6356752,3142449996 1/298,257 1972 6378135 6356750,5199149996 1/298,258 1909 6378388 6356911 1/297,0 1924 6378388 6356911 1/297,0 1841 6377397 6356078 1/299,1 1880 6378249 6356514 1/293,5 1866 6378206 6356583 1/294,9 1830 6377301 6356100 1/300,8 1830 6377563 6356256 1/299,3 1940 6378245 6356863 1/298,3 1969 6378160 6356774 1/298,3 Tabella 1: Principali ellissoidi di riferimento

Le formule di Gauss

# RHO - Raggio di curvatura del meridiano SET RHO = (A * (1- eˆ2)) / ( SQRT( 1- eˆ2 * SIN(PHI)ˆ2)ˆ3 ); # N_G - Gran Normale SET N_G = (A * (1- eˆ2)) / SQRT( 1- eˆ2 * SIN(PHI)ˆ2) ;

ed infine le formule delle coordinate trasformate: SET D_PHI =

SIN(PHI) * COS(LAMBDA) * x_0 / (RHO + H) + SIN(PHI) * COS(LAMBDA) * y_0 / (RHO + H) + COS(PHI) * z_0 / ( RHO + H ) + (Aˆ2 / N_G + H ) / (RHO + H) * SIN(LAMBDA) * E_x + (Aˆ2 / N_G + H ) / (RHO + H) * COS(LAMBDA) * E_y + (1 - (1 - ALFA)ˆ2 ) * N_G / (RHO + H) * COS(PHI) * SIN(PHI) ( K + D_a / A ) (RHO -+ (1 - ALFA)ˆ2 ) * N_G / (RHO + H) * COS(PHI) * SIN(PHI) ( D_a / ALFA )

Una volta ottenute le coordinate ellissoidiche nel sistema ED50 e` necessario trasformarle nel sistema piano attraverso le formule di Gauss. Nelle formule seguenti si cercheranno i punti X e Y avendo come parametri di input le coordinate ellissoidiche ED50 (qui rinominate per semplicit`a ϕ, λ e h piuttosto che le dϕ , dλ e dh ottenute dal passaggio precedente) e come costanti i parametri a che misura il semiasse dell’ellissoide ED50 questa volta e e2 l’eccentricit`a dell’ellissoide ED50. La prima delle equazioni di Gauss e` : 1 a cos (ϕ)3 1− λ+ p Y = g(ϕ, λ) = p 6 1 − e2 sin ϕ2 1 − e2 sin ϕ2 e2 2 tan (ϕ)2 + √ cos (ϕ)2 λ3 + 1 − e2 a cos (ϕ)5 1 5− p 120 1 − e2 sin ϕ2 18 tan (ϕ)2 + tan (ϕ)4 + e2 2 i 14 cos (ϕ)2 − 58 cos (ϕ)2 tan (ϕ)2 λ5 √ 1 − e2 Anche in questo caso l’introduzione della funzione all’interno del sistema programmato non comporta particolari complessit`a. La formula e` lunga e abbastanza arzigogolata, ma facilmente esprimibile utilizzando funzioni matematiche e trigonometriche elementari alla portata di qualsiasi linguaggio. a cos ϕ

+

Come si pu`o vedere l’introduzione di queste formule, anche in un sistema con limitate capacit`a di programmazione non comporta particolari problemi essendo la formula chiusa e basata su funzioni matematiche elementari. I parametri adottati nei calcoli sono delle formule di Molodenskij : a 6378388.297 e2 0.00669438 x0 , y0 , z0 (0, 0, 0) E x , Ey , Ez (0, 0, 0) K 0 da 251.297 Computer Programming n. 181 [None 2009] dα 1.257222101

11


GEOGRAFIA COMPUTAZIONALE

La seconda equazione di Gauss e` :

X = f (ϕ, λ) =

Z

ϕ

Figura 4: Carl Friedrich Gauss (1777 -1855)

a(1 − e2 )

dt+ p (1 − e2 sin t2 )3 1 sin ϕ cos (ϕ)3 1 sin ϕ cos ϕ + · p p 2 1 − e2 sin ϕ2 24 1 − e2 sin ϕ2 h e2 2 i · 5 − tan (ϕ)2 + √ 9 cos (ϕ)2 + 4 cos (ϕ)4 λ4 + 1 − e2 1 sin ϕ cos (ϕ)5 · p 720 1 − e2 sin ϕ2 h · 61 − 58 tan (ϕ)2 + tan (ϕ)4 + e2 2 i 270 cos (ϕ)2 − 330 cos (ϕ)2 tan (ϕ)2 λ6 √ 1 − e2 0

In questo caso l’equazione comporta qualche complessit`a in pi`u a causa della presenza dell’integrale definito al primo termine della formula. In questo caso e` necessario programmare un semplice algoritmo per l’integrazione numerica della formula, ad esempio quello basato sul metodo dei trapezi. Il programma in SQL per la soluzione dell’integrale e` : CREATE FUNCTION( IBEGIN DOUBLE, IEND DOUBLE, PARTS INTEGER) RETURNS DOUBLE BEGIN DECLARE STEP DOUBLE DEFAULT 0.0 ; DECLARE RESULT DOUBLE ; DECLARE P DOUBLE ; DECLARE C INTEGER DEFAULT 1 ; DECLARE TMP1 DOUBLE DEFAULT 0.0 ; SET P = BEGIN; SET STEP = (IEND - IBEGIN) / PARTS; SET TMP1 = A_FACTOR(P) / 2; loop1: WHILE C < PARTS DO SET TMP1 = TMP1 + A_FACTOR(P); SET P = P + STEP; END WHILE loop1; SET TMP2 = TMP1; SET TMP1 = TMP1 + A_FACTOR(P) / 2; SET RESULT = TMP1 * STEP; RETURN RESULT; END

CREATE FUNCTION ’A_FACTOR’( VAR DOUBLE ) RETURNS DOUBLE BEGIN # ED50 - SEMIMAJOR DECLARE A DOUBLE DEFAULT 6378388.297 ; # ED50 - SEMIMINOR DECLARE B DOUBLE DEFAULT 6378388.297 ; DECLARE E2 DOUBLE DEFAULT 0.0066943800042605865 ; # SET E2 = (Aˆ2 - Bˆ2) / Aˆ2; RETURN

La funzione applicata e` definita nella procedura A FACTOR e rappresenta il fattore: Z

0

ϕ

a(1 − e2 )

dt p (1 − e2 sin t2 )3

che in SQL diventa 12

A*(1-E2)/SQRT(POW(1 - e2 * SIN(val)ˆ2,3));

END

L’insieme delle procedure sviluppate per la trasformazione sono quindi: MOLODENSKIJ(PHI,LAMBDA,H,D_PHI,D_LAMBDA,D_H)

Computer Programming n. 181 [None 2009]


GEOGRAFIA COMPUTAZIONALE

che prende in input i parametri PHI, LAMBDA e H con le coordinate WGS84 e restituisce i parametri trasformati in ED50 D PHI, D LAMBDA e D H, e poi: GAUSS(PHI,LAMBDA,X,Y)

che prende in input i parametri superficiali in ED50 restituiti dalla funzione precedente e genera le coordinate piane X e Y. I parametri distintivi delle trasformazioni realtivi ai DATUM scelti sono stati introdotti come costanti nelle funzioni. La funzione GAUSS fa affidamento su una funzione che calcola l’integrale definito ed una che esprime il fattore da integrare, rispettivamente:

trasformare coordinate geografiche in coordinate cartesiane secondo le regole della proiezione cartografica. Viene solitamente utilizzato in altri progetti come GRASS, MapServer, PostGIS, Thuban, OGDI e OGRCoordinateTransformation. L’utilizzo da linea di comando e` semplice e diretto. Tra le opzioni del programma cs2cs vanno indicate le dichiarazioni relative al sistema di riferimento di partenza e poi, dopo l’opzione +to quelle relative al sistema di riferimento d’arrivo. E` possibile indicare questi riferimenti esplicitando i parametri dell’ellissoide, ad es: +ellps=WGS84 +a= 6378137.0 + rf= 298.257223563

RESULT = A_FACTOR(VALUE) INTEGRAL(IBEGIN, IEND, PARTS)

o direttamente i DATUM conosciuti A causa delle limitazioni del linguaggio SQL e` necessario utilizzare le procedure realizzate in questa forma esclusivamente all’interno di una ulteriore stored procedure esterna come ad esempio: CREATE PROCEDURE ’TRANS’() BEGIN DECLARE PHI,LAMBDA,H DOUBLE DEFAULT 0.0; DECLARE D_PHI,D_LAMBDA,D_H DOUBLE DEFAULT 0.0; DECLARE X,Y DOUBLE DEFAULT 0.0; SET PHI = ; SET LAMBDA = ; SET H = ; CALL MOLODENSKIJ(PHI,LAMBDA,H, D_PHI, D_LAMBDA, D_H); CALL GAUSS(D_PHI,D_LAMBDA,D_H,X,Y); SELECT X,Y; END

Trasformazione su linea di comando Quando e` possibile avere accesso alla linea di comando o nei programmi che possono utilizzare liberie collegate piuttosto che riprogrammare ogni volta gli algoritmi di proiezione e trasformazione delle coordinate e` possibile utilizzare la libreria PROJ e i relativi comandi proj e cs2cs. PROJ e` un progetto open source (con una licenza di tipo MIT che ne permette l’inclusione anche in sistemi proprietari), usato da riga di comando (soprattutto in ambito Unix, GNU/Linux, ecc.), che permette la

+datum=WGS84

o ancora attraverso un insieme di dizionari noti che e` possibile scoprire sul sito http://www.epsgregistry.org, ad esempio: +init=epsg:22022

in cui epsg e` un dizionario noto e 22022 e` l’oggetto definito in quel dizionario. I dizionari sono file di testo presenti solitamente nella directory /usr/local/share/proj in cui e` possibile verificare a cosa queste inizializzazioni corrispondono. cs2cs e` un filtro e risponde generando sullo standard output la trasformazione delle coordinate che riceve nello standard input. Ad esempio nel modo seguente e` possibile realizzare l’equivalente delle trasformazioni ottenuta con le formule di Molodenskij: echo 688146.8125 4931557.6875 | \ cs2cs -f "%.6f" +init=epsg:23032 +to +init=epsg:4326

oppure cs2cs +proj=latlong +datum=WGS84 +to +proj=utm +zone=32 +datum=ED50 r <<EOF 45d15’33.1" 111.5W 45d15.551666667N -111d30 +45.25919444444 111d30’000w EOF

Computer Programming n. 181 [None 2009]

13


GEOGRAFIA COMPUTAZIONALE

Conclusioni Per lo sviluppo di funzioni di trasformazione geografica e` sufficiente riportare le funzioni matematiche di Molodensky e Gauss in codice sorgente con un minimo di supporto per le funzioni matematiche complesse. Avendo a disposizione progetti liberi come PROJ questo non e` neppure necessario ma, a parte il valore didattico di una tale implementazione, esistono casi in cui queste librerie non possono essere utilizzate. In questi casi si possono seguire le tracce riportate in questo articolo o approfondirne l’implementazione nel prossimo.

14

Computer Programming n. 181 [None 2009]


Trasformazione di coordinate geografiche in Javascript L’implementazione in Javascript delle formule di Molodenskij e Gauss Lorenzo Dal Col

Problema n numerose applicazioni e` necessario risolvere il problema della trasformazione delle coordinate geografiche tra sistemi di riferimento differenti. In questo articolo verr`a illustrato un applicativo che effettua la trasformazione delle coordinate del sistema WGS84 a quelle UTM. L’obiettivo e` di fornire una procedura di trasformazione che possa funzionare anche con dati acquisiti in tempo reale, senza la necessit`a di eseguire post-elaborazioni; e` stato inoltre scelto il linguaggio Javascript in modo che possa funzionare in un qualsiasi browser web che supporti lo scripting e in un qualsiasi sistema operativo, anche quello degli smart-phone, che sempre pi`u spesso integrano un ricevitore GPS. Tutti gli applicativi odierni, ad esempio i ricevitori satellitari GPS, i software con riferimenti geografici (come Google Earth/Maps) e le varie applicazioni collegate all’aeronautica utilizzano la codifica WGS84, mentre quasi tutte le carte ufficiali antecedenti al 1984 utilizzavano il sistema UTM con “datum” ED50 nel caso dei paesi europei. Grazie alle funzioni presentate in questo articolo si possono trasformare i dati raccolti con un sistema GPS moderno come Google Maps e confrontarli con dati di vecchie carte europee codificati in UTM-ED50 (oppure “Roma Monte Mario”) direttamente in una pagina web.

I

Figura 1: Una semplice interfaccia HTML del programma

Soluzione La trasformazione deve essere effettuata in tre passi: 1. Con le formule di Molodenskij si passa dalle coordinate ellissoidiche WGS84 alle coordinate ellissoidiche ED50 2. Con le formule di Gauss si ricavano le coordinate piane UTM 3. Infine si applica un fattore di correzione e una

Computer Programming n. 181 [None 2009]

15


GEOGRAFIA COMPUTAZIONALE

falsa origine per evitare valori negativi, come vogliono le specifiche UTM. Le superfici di riferimento

I sistemi di riferimento sono basati su degli ellissoidi con una certa dimensione e posizionati nello spazio in modo differente per WGS84 e ED50; sono state quindi create due classi Javascript per esprimere l’orientamento e l’ellissoide stesso:

Esistono in realt`a diversi “pattern” per la definizione di classi in javascript, per supportare l’ereditariet`a (anche multipla) e il polimorfismo; in questo caso ci siamo accontentati dell’implementazione pi`u semplice. Gli ellissoidi sono costanti e possono essere definiti direttamente in questo modo: // inizializzo gli ellissoidi noti (DATUM) var WGS84 = new RotationElipsoid(6378137.0, 1/298.257222101, new Orientation(0,0,0,0,0,0,0)); var ED50

function RotationElipsoid(a, alpha, orientation) { this.orientation = orientation; this.a = a; this.alpha = alpha; var semiminor = this.a - this.a * this.alpha; this.e2 = (Math.pow(this.a,2) - Math.pow(semiminor,2)) / Math.pow(this.a,2); // RHO - Raggio di curvatura del meridiano this.RHO = function(LAMBDA) { return this.a * (1 - this.e2) / Math.sqrt(Math.pow(1 - this.e2 * Math.pow(Math.sin(LAMBDA),2),3)); } // N_G - Gran Normale this.N_G = function(LAMBDA) { return this.a / Math.sqrt(1 - this.e2 * Math.pow(Math.sin(LAMBDA),2)); } } function Orientation(x0, y0, z0, K, Ex, Ey, Ez) { this.z0 = z0; this.x0 = x0; this.y0 = y0; this.K = K; this.Ex = Ex; this.Ey = Ey; this.Ez = Ez; }

Pur essendo Javascript un linguaggio object-oriented non esiste il costrutto nativo per definire le classi poich´e in realt`a vengono implementate usando il concetto di “prototype” cio`e il prototipo di un oggetto che e` leggermente diverso. Dal punto di vista semantico le classi sono scritte come delle funzioni che possono avere al loro interno membri dati e metodi (rispettivamente variabili e funzioni interne). Si possono creare oggetti utilizzando il costrutto “new” e chiamando la funzione prototipo. ------------------------------------

In JavaScript il modo piu` semplice per creare gli oggetti e` farli discendere da un prototipo -----------------------------------16

= new RotationElipsoid(6378388, 1/297, new Orientation(-87,-98,-121,0,0,0,0));

var ITA40 = new RotationElipsoid(6378388, 0.00672267002, new Orientation(-104.1,-49.1,-9.9,-11.68, 0.971,-2.917,0.714));

I parametri passati sono il semiasse maggiore a, lo schiacciamento alpha, e l’orientamento: inizializzato con i valori di traslazione sui tre assi (x,y,z), riscalamento e rotazioni. La classe “RotationElipsoid” ha i metodi RHO e N G, che calcolano rispettivamente il raggio di curvatura del meridiano passato per argomento e la gran normale rispetto al meridiano. Le funzioni di conversione delle coordinate si chiamano rispettivamente “molodenskij” e “gauss”, esse sono abbastanza complesse ma non fanno altro che implementare le formule analitiche dei due rispettivi matematici: La prima si esegue passando l’ellissoide di partenza, quello di arrivo e le tre coordinate geografiche del punto da trasformare: PHI, LAMBDA, H che sono rispettivamente longitudine, latitudine e altitudine; viene ritornato un oggetto da passare direttamente alla funzione “gauss” che ritorna un array con rispettivamente le coordinate Nord, Est e altitudine in UTM-ED50. All’interno della funzione “gauss” viene calcolato un integrale definito di una funzione matematica grazie a una procedura di supporto che usa il metodo dei trapezi: // esegue l’integrale definito di di una funzione con // il metodo dei trapezi in N parti function Integral(myFunction, scope, begin, end, parts) {

Computer Programming n. 181 [None 2009]


GEOGRAFIA COMPUTAZIONALE

var step = (end - begin) / parts; var temp = myFunction.call(scope, begin) / 2; begin += step; for (var c = 0; c < parts - 1; c++) { temp += myFunction.call(scope, begin); begin += step; } temp += myFunction.call(scope, begin) / 2; return temp*step;

function molodenskij ( fromElipsoid , destElipsoid , PHI , LAMBDA , H) { var alpha = fromElipsoid .alpha; var a = fromElipsoid .a; var Da = fromElipsoid .a - destElipsoid .a; var Dalpha = fromElipsoid .alpha destElipsoid .alpha; var DEx = destElipsoid . orientation .Ex fromElipsoid . orientation .Ex; var DEy = destElipsoid . orientation .Ey fromElipsoid . orientation .Ey; var DEz = destElipsoid . orientation .Ez fromElipsoid . orientation .Ez; var Dx0 = destElipsoid . orientation .x0 fromElipsoid . orientation .x0; var Dy0 = destElipsoid . orientation .y0 fromElipsoid . orientation .y0; var Dz0 = destElipsoid . orientation .z0 fromElipsoid . orientation .z0; var DK = destElipsoid . orientation .K destElipsoid . orientation .K; var RHO = fromElipsoid .RHO( LAMBDA ); var N_G = fromElipsoid .N_G( LAMBDA );

}

La trasformazione viene fatta infine mettendo insieme le diverse conversioni: // funzione che esegue la conversione completa // da WGS84 a ED50 function convert(PHI, LAMBDA, H) { var m = molodenskij(WGS84, ED50, PHI, LAMBDA, H); var g = gauss(ED50, m); // correzione coordinate per UTM g[0] = g[0] * 0.9996; g[1] = g[1] * 0.9996 + 500000; return { x: g[0], y: g[1], h: g[2] }; }

// scorciatoie var sinPHI = Math.sin(PHI ); var cosPHI = Math.cos(PHI ); var sinLAMBDA = Math.sin( LAMBDA ); var cosLAMBDA = Math.cos( LAMBDA ); var tanLAMBDA = Math.tan( LAMBDA ); var tempVar = RHO + H; var tempVar2 = Math.pow(a ,2) / N_G + H; var tempVar6 = Math.pow (1 - alpha ,2); var tempVar5 = (1 - tempVar6 ) * N_G; var tempVar3 = ( N_G + H ) * cosLAMBDA ; var tempVar4 = ( tempVar6 *N_G + H) / (N_G+H); var o1 = ( sinLAMBDA * cosPHI / tempVar )* Dx0; var o2 = ( sinLAMBDA * sinPHI / tempVar )* Dy0; var o3 = ( cosLAMBDA / tempVar ) * Dz0; var o4 = ( tempVar2 / tempVar ) * sinPHI *DEx; var o5 = ( tempVar2 / tempVar ) * cosPHI *DEy; var o6 = ( tempVar5 / tempVar ) * cosLAMBDA * sinLAMBDA * ( DK + Da / a ); var o7 = (( RHO + tempVar6 * N_G) / tempVar )* cosLAMBDA * sinLAMBDA * ( Dalpha / (1 - alpha )); var dLAMBDA = o1+o2 -o3+o4 -o5 -o6 -o7; var dPHI = sinPHI / tempVar3 * Dx0 -cosPHI / tempVar3 * Dy0 tempVar4 * tanLAMBDA * cosPHI *DEx tempVar4 * tanLAMBDA * sinPHI *DEy+ DEz; var dH = - cosLAMBDA * cosPHI * Dx0 cosLAMBDA * sinPHI * Dy0 sinLAMBDA * Dz0 + tempVar5 * sinLAMBDA * cosLAMBDA * sinPHI * DEx tempVar5 * sinLAMBDA * cosLAMBDA * cosPHI * DEy tempVar2 * DK + a / N_G * Da tempVar6 * N_G * Math.pow(sinLAMBDA , 2) * ( Dalpha / (1 - alpha )); return { LAMBDA : LAMBDA + dLAMBDA , PHI: PHI + dPHI , H: H + dH }; }

La funzione “convert” accetta come argomenti la longitudine PHI, latitudine LAMBDA e altitudine H espresse in radianti. Se si vogliono convertire dei valori espressi in gradi, primi e secondi si usa la seguenti funzione: // converte gradi, primi, secondi in radianti function toRadians(d, m, s) { return (Math.PI/180)*(d + m / 60 + s / 3600); }

A questo punto possiamo testare il tutto con dei dati noti in WGS84: longitudine: 44° 45’ 12.20809’’ latitudine: 14° 1’ 30.28015’’ altitudine: 589

ci aspettiamo come risultato i seguenti: x: 5067303, y: 424247, h: 547

// funzione per testare il funzionamento // (esegue una conversione e confronta con risultati noti) function test() { // preparo le variabili di ingresso (sono in gradi, // le converto in radianti) var LAMBDA = toRadians(45, 45, 12.20809); var PHI = toRadians(14, 1, 30.28015); var H = 589; // eseguo la conversione var converted = convert(PHI, LAMBDA, H); // accedo al risultato usando: converted.x, // converted.y, converted.h // controllo i risultati if (Math.round(converted.x) != 5067303) return false; if (Math.round(converted.y) != 424247) return false; if (Math.round(converted.h) != 547) return false; return true; }

Listato 1: La formula di Molodenskij in JavaScript Computer Programming n. 181 [None 2009]

17


GEOGRAFIA COMPUTAZIONALE

Discussione

function gauss(surface , m) { var precision = 10000; var PHI = m.PHI; var LAMBDA = m. LAMBDA ; var H = m.H; var a = surface .a; var e2 = surface .e2; // funzione da integrare Integral_Function = function (val) { var tempVal = (a * (1 - e2 )); return tempVal / Math.sqrt(Math.pow (1 e2 * Math.pow(Math.sin(val ),2), 3)); } // calcolo il fuso e sistemo la longitudine var fuse_length = 6 * Math.PI / 180; var fuse; if (PHI > Math.PI) fuse=Math.floor ((PHI -Math.PI)/ fuse_length ); else fuse=Math.floor (( PHI+Math.PI)/ fuse_length ); var deltalength =(fuse -30) * fuse_length + fuse_length /2; var dPHI = PHI - deltalength ; // scorciatoie var sinLAMBDA = Math.sin( LAMBDA ); var cosLAMBDA = Math.cos( LAMBDA ); var tanLAMBDA = Math.tan( LAMBDA ); var tempVar1 =Math.sqrt (1-e2* Math.pow(sinLAMBDA , 2)); var tempVar2 =Math.pow(e2/Math.sqrt (1 - e2), 2); var valoreIntegrale = Integral ( Integral_Function , this , 0, LAMBDA , precision ); var x = valoreIntegrale + (1/2 * a* sinLAMBDA * cosLAMBDA / tempVar1 ) * Math.pow(dPHI ,2) + (1/24 * a* sinLAMBDA *Math.pow(cosLAMBDA ,3)) / tempVar1 * (5 - Math.pow(tanLAMBDA ,2) + 9* tempVar2 *Math.pow(cosLAMBDA ,2) + 4 * Math.pow(tempVar2 , 2) * Math.pow(cosLAMBDA ,4)) * Math.pow(dPHI ,4) + 1/720 * a* sinLAMBDA *Math.pow(cosLAMBDA ,5)/ tempVar1 * (61 - 58* Math.pow(tanLAMBDA ,2) + Math.pow(tanLAMBDA , 4) + 270 * tempVar2 * Math.pow(cosLAMBDA ,2) 330 * tempVar2 * Math.pow(cosLAMBDA ,2) * Math.pow(tanLAMBDA ,2)) * Math.pow(dPHI , 6); var y = (a * cosLAMBDA / tempVar1 ) * dPHI + (1/6) * a * Math.pow(cosLAMBDA , 3) / tempVar1 * (1 - Math.pow(tanLAMBDA ,2) + tempVar2 * Math.pow(cosLAMBDA , 2)) * Math.pow(dPHI , 3) + (1/120) * a*Math.pow(cosLAMBDA , 5) / tempVar1 * (5 - 18 * Math.pow(tanLAMBDA , 2) + Math.pow(tanLAMBDA , 4) + 14 * tempVar2 * Math.pow(cosLAMBDA , 2) 58 * tempVar2 * Math.pow(cosLAMBDA , 2) * Math.pow(tanLAMBDA , 2)) * Math.pow(dPHI , 5); return [x,y,H]; }

Listato 2: La formula di Gauss in JavaScript 18

Osservazioni sulla precisione

Sono stati confrontati i risultati forniti da questa applicazione con dei valori noti ed e` ne e` conseguito che il calcolo viene fatto in modo preciso, con uno scarto di al massimo una decina di millimetri per coordinata. In tutti i calcoli sono state mantenute tutte le cifre significative gestite dal linguaggio Javascript. ------------------------------------

Sono state mantenute tutte le cifre significative gestite dal linguaggio Javascript. -----------------------------------Il calcolo pi`u dispendioso in termini di tempo e` l’integrale (per via numerica) della funzione non lineare (contenente radice quadrata, funzioni trigonometriche, potenze, ecc). Facendo alcuni test con diverse funzioni e` stato visto che sono sufficienti 10 000 passi per il calcolo dell’integrale. Aumentare ulteriormente il numero di passi allunga notevolmente l’attesa e non migliora il risultato, almeno per le prime 9 cifre significative. Javascript e` un linguaggio interpretato, pertanto non permette il raggiungimento delle prestazioni ottimali della macchina, tuttavia la velocit`a di esecuzione in questo caso (alcuni decimi di secondo) e` completamente soddisfacente, e permette un utilizzo completo in tempo reale. Il programma e` stato testato con Internet Explorer (5+, 6, 7), Mozilla Firefox (1.5, 2, 3), Opera (9.5) e Safari (3+).

Futuri sviluppi

Si potrebbe rifattorizzare tutto il codice Javascript e renderlo completamente ad oggetti, come e` gi`a stato fatto per la classe dell’ellissoide di rotazione. Se ad esempio trasformassimo in classi anche le due lunghe funzioni analitiche potremmo riutilizzare la stessa istanza per elaborare molte coordinate in sequenza, guadagnando in velocit`a perch´e potremmo mantenere nello stato alcuni calcoli parziali.

Computer Programming n. 181 [None 2009]


GEOGRAFIA COMPUTAZIONALE

<! DOCTYPE html PUBLIC "-// W3C // DTD XHTML 1.0 Transitional //EN" "http :// www.w3.org/TR/ xhtml1 /DTD/xhtml1 - transitional .dtd"> <html xmlns =" http :// www.w3.org /1999/ xhtml" xmlns:v=" urn:schemas -microsoft -com:vml"> <head > <title >WGS84 -UTM </ title > <meta http -equiv =" Content -Type" content =" text/html; charset =utf -8" /> <link rel =" stylesheet " type =" text/css" href =" style.css"></link > <script type =" text/ javascript " src =" RotationElipsoid .js"></script > <script type =" text/ javascript " src =" Molodenskij .js"></script > <script type =" text/ javascript " src =" Gauss.js"></script > <script type =" text/ javascript " src =" Main.js"></script > </head > <body > <script type =" text/ javascript "> function trasforma () { var latD = parseFloat ( document . getElementById (’latD ’). value ); var latM = parseFloat ( document . getElementById (’latM ’). value ); var latP = parseFloat ( document . getElementById (’latP ’). value ); var lngD = parseFloat ( document . getElementById (’lngD ’). value ); var lngM = parseFloat ( document . getElementById (’lngM ’). value ); var lngP = parseFloat ( document . getElementById (’lngP ’). value ); var H = parseFloat ( document . getElementById (’h ’). value ); var LAMBDA = toRadians (latD , latM , latP ); var PHI = toRadians (lngD , lngM , lngP ); var converted = convert (PHI , LAMBDA , H); var output = ’\n<strong >UTM </ strong >\n’ + ’N: ’ + Math.round( converted .x) + ’ m\n’ + ’E: ’ + Math.round( converted .y) + ’ m\n’ + ’h: ’ + Math.round( converted .h) + ’ m\n’; document . getElementById (" risultato "). innerHTML = output ; } </script > <h1 > Conversione di coordinate WGS84 -UTM </h1 > <h3 > Inserisci latitudine , longitudine , altezza :</h3 > <pre > Esempio :° 45 45’ 12.20809"° 14 1’ 30.28015" 589 m <strong >WGS84 </ strong > Lat: <input type =" text" style =" width: 25px;" id=" latD" value ="0" <input type =" text" style =" width: 25px;" id=" latM" value ="0" <input type =" text" style =" width: 75px;" id=" latP" value ="0" Lng: <input type =" text" style =" width: 25px;" id=" lngD" value ="0" <input type =" text" style =" width: 25px;" id=" lngM" value ="0" <input type =" text" style =" width: 75px;" id=" lngP" value ="0" h: <input type =" text" style =" width: 25px;" id="h" value ="0" /> <input type =" button " value =" calcola " onclick =" trasforma ();" /> <input type =" button " value =" test" onclick =" alert(test ());" /> <span id=" risultato " style =" margin : 1em;"></span > </pre > </body > </html >

°/> />’ />" °/> />’ />" m

Listato 3: Codice HTML per richiamare il programma Computer Programming n. 181 [None 2009]

19


GEOGRAFIA COMPUTAZIONALE

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

Si potrebbe inoltre estendere la trasformazione anche ad altri “datum” come ad esempio ITA40 (gia` suggerito tra gli ellissoidi disponibili). -----------------------------------Lo sviluppo pi`u interessante potrebbe essere di integrare la trasformazione con un sistema di mappe su web (come Google Maps o Live Search Maps), in modo da leggere le coordinate direttamente in metri.

Riferimenti La teoria della trasformazione delle coordinate e alcuni esempi realizzati come stored procedure per mysql si trovano nell’articolo “Trasformazione di coordinate geografiche da WGS84 a UTM”.

Per approfondire l’argomento sulla trasformazione di coordinate e` consigliato il sito dell’Associazione Italiana Topografi, in particolare l’articolo “Alcuni metodi per il passaggio dal Sistema WGS84 ai Sistemi Geodetici Locali” all’indirizzo http://www.asit.biz/public/portale/articles.asp?id=5 Per imparare la basi sulla programmazione in Javascript sono disponibili nelle librerie numerosi libri, e nel web centinaia di tutorial. Per i pattern avanzati di javascript come classi, ereditariet`a, prototipi e altro si troveranno sicuramente informazioni sulla pagina di Douglas Crockford, un guru di questo linguaggio che lavora per Yahoo: http://javascript.crockford.com/




Konqueror: tutto da una interfaccia Sfruttare al massimo il gioiello della corona di KDE

Gary Richmond

TAVA riferendosi alla vittoria romana della battaglia di Zela o stava facendo un saluto “a due dita” al Senato patrizio di Roma, Giulio Cesare quando disse, come riportato da Seutonio e Plutarco, “veni, vidi, vici”? Ogni studente che ha dovuto tollerare le squisite torture del latino conoscer`a questa famosa frase. Premiamo il pulsante avanzamento veloce fino al presente e queste parole potrebbero non essere fuori luogo sulle labbra delle brave persone che hanno sviluppato Konqueror, il browser e file manager “tutto in uno”, meglio descritto come visualizzatore universale di documenti. Dipendendo solo da kdebase e` una parte standard del desktop KDE e gran parte degli utenti GNU/Linux ad un certo punto hanno navigato o gestito file utilizzando Konqueror. Precisamente perch´e viene pre-installato tendiamo a darlo per scontato; inoltre, nel periodo successivo al lancio avvenuto nel 2000, molte estensioni e alternative sono diventate disponibili: in modo particolare l’immensamente diffuso Firefox. Prima di dar vita a una guerra infiammata tra utenti di KDE e di GNOME e ai sostenitori dei vari file manager e browser, lasciatemi premettere che questo articolo non e` un esercizio comparativo delle caratteristiche concorrenti. Lo scopo di questo articolo e` di far conoscere al lettore le caratteristiche di Konqueror, delle quali possono non essere consapevoli e di dimostrare che, con alcune eccezioni, e` possibile utilizzare e configurare Konqueror in modo tale che si possa trascor-

S

rere un’intera sessione senza abbandonarne i confini. Naturalmente, ci`o pu`o tendere a renderlo una sorta di factotum e signore del nulla, pertanto se avete necessit`a di un particolare strumento GNU/Linux mette a disposizione una scelta imbarazzante anche per il “power user”. Se molte di queste caratteristiche vi sono gi`a note, si spera che le altre non lo siano e che possiate utilizzarle per migliorare la vostra esperienza di navigazione. Ci`o che segue e` appunto la mia scelta personale di suggerimenti, trucchi e funzionalit`a che trovo pi`u utili. Inevitabilmente, avrete anche voi delle preferenze (scorciatoie per la ricerca sul web, movimenti del mouse, file remoti) e vi chiederete perch´e non le ho trattate: beh .. vi faccio le mie scuse anticipate.

Piu` intelligente, piu` veloce I tesori sepolti sono i pi`u affascinanti, pertanto tiriamo fuori la vanga e iniziamo a estrarre alcuni delle gemme di Konqueror. Una delle prime, migliori e pi`u semplici cose che si possa fare e` ottenere facilmente un incremento di velocit`a. Si pu`o ottenere che Konqueror si carichi pi`u velocemente modificando le impostazioni: cliccate su Impostazioni, poi Configura Konqueror e scorrete in basso all’ultima opzione, Prestazioni. Si pu`o minimizzare l’utilizzo della memoria e “precaricare” un certo numero di istanze del browser. Fate degli esperimenti con queste impostazione finch´e non ottenete una combinazione che meglio si adatta alle vostre necessit`a e alle specifiche della macchina in termini

Computer Programming n. 181 [None 2009]

23


USER SPACE

Figure 1: Konqueror in modalit`a browser e file

Figura 2: Konqueror in “modalit`a FTP”

di capacit`a di memoria e di processore. Se piuttosto non volete armeggiare con queste impostazioni e state utilizzando Konqueror da GNOME, un trucco sporco e veloce e` avviare una piccola applicazione KDE e minimizzarla. In questo modo, l’avvio di Konqueror richieder`a un minor sollevamento pesi. Si pu`o anche avviare Konqueror con una pagina vuota digitando

pagina web che volete e trascinate la favicon (sulla sinistra dell’indirizzo) sul Desktop e selezionate Collega qui e verr`a creata una scorciatoia sul Desktop. Meglio ancora, se si desidera creare una serie di scorciatoie a pagine web sul desktop, selezionate Bookmarks e poi scegliete Modifica Bookmark e trascinate i link che volete sul Desktop per quante icone di bookmark desideriate. Inoltre, questo metodo non vi chieder`a di copiare o do creare collegamenti sul desktop. Installer`a automaticamente un’icona Desktop. La stessa cosa vale per il trascinamento al pannello.

about:blank

in una finestra di dialogo KDE ottenuta premendo Alt + F2 o con

Sfogliare e archiviare

about:konqueror

una pagina di default che vi permetter`a di scegliere verso dove procedere. (Pi`u oltre vedrete come incorporare queste viste nei vostri profili Konqueror). Se volete queste opzioni di avvio sul desktop, effettuate un clic destro su un’area libera (del desktop) e selezionate Crea Nuovo e poi Collegamento a locazione (URL) e al prompt digitate un nome idoneo per il “profilo” e, nella casella sottostante, digitate uno di questi comandi. Un ultimo modo per aprire Konqueror rapidamente e da dove si vuole e` sfruttare il fatto che l’etichetta della locazione e` effettivamente trascinabile. Navigate alla 24

Una caratteristica che rende unico Konqueror, e dico unico, e` che mentre altri web browser hanno molte caratteristiche eccellenti, e effettivamente uniche, particolarmente Flock, Firefox e Opera, Konqueror non ha pari in virt`u della sua capacit`a di navigare il web e il filesystem del computer dalla stessa interfaccia. S`ı, lo so, Firefox ha un’estensione che permette di suddividere lo schermo e di visualizzare due differenti siti web, ma si tratta di “siti web” e non di “un sito web e di un file personale” come si vede nella Figura 1. In questo esempio, avete effettivamente un client FTP a due pannelli: basta trascinare il collegamento FTP nella schermata destra del browser alla scher-

Computer Programming n. 181 [None 2009]


USER SPACE

Figura 3: Selezionando di file contigui con il metodo a “elastico”

mata del browser dei file e Konqueror vi chieder`a di spostare/copiare l’immagine ISO (Figura 2). Se non avete impostato una cartella specifica per questi download non e` necessario perdere tempo a cercarla. (Se avete impostato KGet per intercettare tutte le richieste di download per le cartelle preimpostate KGet ridefinir`a questa impostazione). Se si preferisce si pu`o aprire una finestra terminale in Konqueror e trascinare, rilasciare e scaricare un file l`ı (dir`o di pi`u su questa tecnica pi`u oltre). Per ottenere questo risultato, selezionare Impostazioni dal menu a discesa e scegliere Suddividi lo schermo verticalmente. Tuttavia, per una azione pi`u veloce da tastiera basta eseguire semplicemente una delle seguenti operazioni per aprire e chiudere le configurazioni di suddivisione dello schermo: • Ctrl + Shift + L suddivide lo schermo verticalmente • Ctrl + Shift + T suddivide lo schermo orizzontalmente • Ctrl + Shift + R chiude lo schermo(i) suddiviso attivo

Figura 4: Konqueror in modalit`a file e terminale

anche i supporti esterni: CD, DVD, drive USB e penne USB. Non potete costruire una catapulta da Konqueror, ma potete utilizzare il suo metodo a “elastico” per selezionare i file contigui e selezionare dal menu di contesto le opzioni. Basta utilizzare il mouse per disegnare un’area attorno ai file desiderati (Figura 3). Se dovete svolgere delle operazioni da riga di comando, Konqueror vi pu`o far risparmiare la seccatura di aprire una console separata. Se selezionate il menu a discesa Impostazioni vedrete una voce per “mostrare l’emulatore di terminale” (o per aggiungere l’icona per esso attraverso il menu a discesa Impostazioni, sotto Configura barra degli strumenti e trascinarla sulla toolbar): ci`o far`a aprire un’istanza di un terminale all’interno di Konqueror. Per i neofiti di GNU/Linux, si tratta di un modo utile per seguire la struttura dei file di sistema, poich´e cliccando su una cartella non solo vi porter`a a quell’elemento in modo grafico ma sar`a anche seguito dalla riga di comando. Dopo aver aperto la scorciatoia alla directory desiderata potete eseguire comandi su un particolare file nel terminale integrato (Figura 4).

La copia e o il trasferimento di file e` reso molto pi`u facile dall’utilizzo degli schermi suddivisi poich´e rende il drag&drop ancora pi`u semplice. E ci`o riguarda Computer Programming n. 181 [None 2009]

25


USER SPACE

Figura 5: Schermo suddiviso che mostra la pagina HTML e l’editor di testo integrato

Gestione e navigazione di file preimpostati Una ulteriore ottima caratteristica di Konqueror far`a risparmiare tempo e faciliter`a la navigazione: si tratta del filtro di visualizzazione (View Filter). Si pu`o accedere ad esso dal menu Strumenti e si pu`o anche aggiungere l’icona alla toolbar selezionandola e aggiungendola da Impostazioni e poi scegliendo Configura barra degli strumenti. Se si seleziona il tipo di file che avete scaricato, allora tutti i file di quel tipo appariranno. Come tutti i menu ben fatti, il filtro di visualizzazione e` contestuale. Non lo vedrete se Konqueror e` in modalit`a browser web. Un vantaggio per i “terminalmente disorganizzati”! Il filtro di visualizzazione funziona anche in modo incrementale; cio`e, se dopo un primo esercizio di filtraggio selezionate un ulteriore tipo di file, questo viene aggiunto alla selezione. Si deve selezionare Reimposta per ripristinare le impostazioni di default del file manager. Se si sta navigando una pagina web, il filtro di vista viene negato per ovvie ragioni; tuttavia, il filtro di vista offerto in modalit`a browser pu`o offrire all’utente un utile strumento di apprendimento. Ad esempio, nella scrittura di articoli che prevedono dei tag XML spesso mi dimentico quali sono i tag ammessi (o non ne conosco neanche uno). In questo caso mi avvalgo della 26

Figura 6: Konqueror “dopato”: ogni visualizzazione che si possa desiderare

suddivisione dello schermo. Apro sul web un articolo pubblicato che contiene i tag corretti, suddivido lo schermo (replicando cos`ı la pagina), clicco sul nuovo schermo per renderlo attivo (un “led” verde si accender`a nella parta in basso del browser) e seleziono il menu Visualizza e modifico la Modalit`a visualizzazione in Editor di testo avanzato integrato. Cos`ı facendo appariranno i tag XML dell’articolo e posso effettuare un confronto riga per riga per capire come l’articolo e` stato costruito a livello di tag (Figura 5). Si tratta di un aiuto molto utile. Certo, Visualizza → Sorgente pagina in Firefox fa la stessa cosa, ma in due finestre separate, mentre Opera aprir`a un’altra scheda (Ctrl + UM nella versione 9.5 alfa). Tuttavia, questi non facilitano il confronto riga per riga. Per inciso, se si vuole duplicare lo schermo suddiviso per seguire la navigazione dell’originale, basta cliccare sul piccolo riquadro vuoto in basso al browser. Apparir`a un piccolo simbolo “a catena”. Devo ammetterlo, non riesco tuttavia a immaginare un utilizzo di questa funzionalit`a. E voi? Se nel browser si vuole una navigazione senza mouse sui collegamenti ipertestuali, premete Ctrl e i collegamenti verranno contrassegnati con un piccolo riquadro beige con delle lettere. Per seguire un link basta premere la lettera corrispondente sulla tastiera. Il vostro proverbiale vantaggio pu`o comunque variare: se anda-

Computer Programming n. 181 [None 2009]


USER SPACE

Figura 7: schermo suddiviso di Konqueror con colori preimpostati

te sul sito Distrowatch, un sito fitto di link molto ravvicinati, la navigazione dei link per mezzo della tastiera pu`o essere problematica. Come ogni browser che si rispetti, si pu`o naturalmente impostare la propria homepage nei file di configurazione di Konqueror ma a differenza di Firefox non potete impostare pi`u homepage da aprire in schede separate. In Firefox il trucco si ottiene digitando quanto segue: http://www.google.com/linux | http://www.distrowatch.com | http://www.bbc.co.uk.

Ci`o non funzioner`a in Konqueror, ma almeno e` versatile. Konqueror supporta il caricamento dei profili (come fanno Firefox e Opera) per aggirare questo problema, tra l’altro. Per inciso, ho notato che Konqueror pu`o variare nel menu profili da distro a distro. Se si utilizza Ubuntu si vedr`a che mancano alcuni caratteristiche. Si possono comunque ripristinare, basta che puntiate il vostro browser all’indirizzo

Figura 8: File di configurazione di Konqueror

impostate tutte. Poi cliccate su Impostazioni e selezionate Salva profilo visualizzazione “navigazione Web”, scegliendo un nome pertinente e idoneo per il profilo e spuntate la casella salva url nel profilo. E` tutto. In base alle dimensioni del vostro schermo potreste voler aumentare la superficie premendo il tasto F11. Se avete uno schermo realmente grande o state utilizzando una TV ad alta risoluzione una combinazione di queste impostazioni vi dar`a spazio in abbondanza di cui potreste aver bisogno se volete visualizzare una schermata come quella mostrata nella Figura 6. Se lo spazio e` da preservare si pu`o invece impostare un profilo a schede e chiamare il profilo, ad esempio, “homepage a schede” invece di “homepage a schermo splittato”. La stessa cosa pu`o essere fatta con i profili Konqueror in modalit`a file. Un bonus in pi`u in modalit`a visualizzazione file e` che si pu`o impostare il colore di sfondo per distinguere le differenti aree suddivise dello schermo. La Figura 7 illustra le possibilit`a.

http://awebfactory.com.ar/node/91

Mettilo sulla scheda

Aprite Konqueror. In base a quante homepage volete per default, suddividete lo schermo e ridimensionatelo come desiderato e a turno, rendete ciascuna area attiva, navigate a una pagina web e ripetete questo procedimento per tutte le schermate finch´e non le avete

Nei preistorici giorni bui di Internet Explorer il concetto di navigazione a schede era esotico quanto il concetto di calcolo sicuro in Microsoft, ma Konqueror, come Firefox, Opera, Galeon, Epiphany e altri hanno offerto agli utenti gli indispensabili vantaggi della navigazio-

Computer Programming n. 181 [None 2009]

27


USER SPACE

Figura 9: Konqueror con i pulsanti di chiusura sulle schede

Figura 10: Tweak GUI con schede

ne a schede da anni. La navigazione a schede di Konqueror si integra bene con profili, ma pu`o fare anche pi`u di ci`o, con un po’ di impegno. La via pi`u lunga e` selezionare dal menu File l’opzione Nuova Scheda e con un clic destro su questa selezionare Chiudi Scheda. Ci sono anche altri modi: clic “centrale” su un link in modalit`a browser per aprire una nuova scheda, o clic centrale su una directory o su uno specifico file in modalit`a file per lo stesso effetto. Se si preferisce si pu`o trascinare e rilasciare un collegamento web nello spazio vuoto sulla destra dell’ultima scheda. Aspetto frustrante e` che Konqueror non ha per default il pulsante di chiusura sulle schede, ma potete aggiungere questa caratteristica molto utile. I file di configurazione di Konqueror sono tutti in semplice testo, facili da leggere e da modificare (come utente root). Aprite il vostro editor di testo preferito come root e navigate alla cartella:

la hanno. E anche Konqueror pu`o averla. Basta andare sul wiki di KDE (http://wiki.kde.org/tikiindex.php?page=Hidden%20configuration) e prendere un piccolo e utile tool GUI per la modifica delle impostazioni nascoste di configurazione o prenderlo da

/home/__nomeutente__/.kde/share/config/konquerorrc

scorrete in basso alla sezione intitolata FMSettings e modificate la riga MouseMiddleClickClosesTab a true (Figura 8). Un pulsante di chiusura e` una caratteristica utile nella navigazione a schede. Opera, Firefox e Flock 28

http://www.kde-apps.org/content/show.php/ Tweaking+Konqueror+tabs?content=44376

Per eseguirlo basta aprire con Alt + F2 una finestra di comando e digitare tweak, o digitare il seguente kioslave nella barra degli indirizzi di Konqueror: settings:/Components/

e l’icona dell’applet Tweak sar`a disponibile (Figure 9 e 10). Se si vuole rendere il lavoro con le schede pi`u facile, passate il mouse su una scheda e fate scorrere la rotellina avanti e indietro per passare da una scheda all’altra; se si vuole anche riorganizzare l’ordine delle schede, trascinatele e rilasciatele altrove sulla riga delle schede. Konqueror ha un ulteriore utile trucco nella manica. A volte vorreste che aprisse una visualizzazione di un file sempre in un particolare modo e non solo durante una specifica sessione: che si tratti della visualizzazione di una icona, di un file, dei dettagli di un file, ecc. Di nuovo, aprite

Computer Programming n. 181 [None 2009]


USER SPACE

Figura 11: Impostazione di Konqueror della visualizzazione per cartella

/home/__nomeutente__/.kde/share/config/konquerorrc

e modificate (come root) nella sezione MainViewSettings il valore a true (Figura 11). SaveViewPropertiesLocally=true

Dopo aver apportato questa modifica e aver selezionato la visualizzazione del file desiderata dal menu Visualizza (selezionate Modalit`a visualizzazione) per una particolare directory, chiudete Konqueror e riapritelo: questa sar`a la visualizzazione di default della directory finch´e non la modificate. I pi`u acuti di voi avranno capito che questa modifica pu`o essere “fusa” con le configurazioni di profilo per creare le vostre impostazioni preferite di navigazione dei file. Un ultimo suggerimento sulle schede. Se preferite le schede di Konqueror in basso, basta modificare (come root) nella sezione di configurazione FMSettings la propriet`a TabPosition=Top in TabPosition=Bottom.

Liberta` attraverso la schiavitu` Bench´e possa sembrare un incrocio tra un brano di “Newspeak” di Orwell e la saggezza gnomica di Blake ci porta a una delle pi`u utili e potenti caratteristiche di Konqueror: i kioslave. Kio e` l’abbreviazione

Figura 12: Kioslave audio in azione

di KDE input/output, che gli fornisce una omogenea trasparenza in rete. Assumono la forma, giusto per citarne alcuni, di help:/, man:/ e info:/. Un elenco dei kioslave supportati e` disponibile nella sezione Protocols di KInfoCenter ed e` un elenco abbastanza grande. Se siete allergici alla riga di comando e alla visualizzazione delle pagine man in un terminale, aprite Konqueror e digitate nella barra degli indirizzi man:/ seguito dalla pagina man che volete e otterrete una gradevole e lineare pagina HTML. State scrivendo un articolo su Amarok e non volete aprire questa applicazione solo per conferma su qualche piccolo dettaglio? Bene, basta digitare help:/amarok e Konqueror lancer`a il manuale dell’applicazione. E` qualcosa di lineare e pratico ma i kioslave possono fare cose molto pi`u potenti.

Schiavi del ritmo e qualcosa sulla barra laterale Chiunque ha le sue preferenze e la mia antologia e` del tutto personale, in base alle mie preferenze e all’utilizzo: e voi avrete certamente le vostre. Ecco una breve antologia che ritengo dimostri la grande potenza e utilit`a della loro trasparenza. GNU/Linux ha molti buone utility di ripping e codifica per file musicali (compresa l’ultima release di K3B che ora comprende una fun-

Computer Programming n. 181 [None 2009]

29


USER SPACE

Figura 13: Un file mp3 trascinato sulla barra laterale di Konqueror

Figura 14: Il kioslave “sysinfo” vi fornisce una gran quantit`a di informazioni azionabili

zionalit`a di ripping) e io le uso. Tuttavia, audiocd:/ e` un kioslave che pu`o fare molto da un’unica interfaccia Konqueror quando serve al volo. Se inserite un CD musicale, aprite Konqueror e digitate audiocd:/ nella barra degli indirizzi vi verr`a presentato ci`o che mostra la Figura 12. Ci`o che otterrete e` l’elenco dei file WAV originali presenti nel CD (e se lo fate mentre siete connessi a Internet verranno visualizzati i titoli delle canzoni grazie a CDDB, http://en.wikipedia.org/wiki/CDDB, altrimenti verranno semplicemente elencati come traccia 1, traccia 2, ecc.). Konqueror crea anche dei file virtuali in tutti i codec musicali che la vostra distro supporta in modo nativo, compreso quelli proprietari che avete scaricato e installato. Eseguire il ripping e la codifica di tutte le tracce selezionate e` semplicemente una questione di drag&drop del codec selezionato in una directory del disco rigido. Konqueror far`a il resto. Ci`o che non pu`o fare, senza un vostro precedente intervento diretto, e` configurare i parametri. Pertanto, nello spirito di questo articolo, aprite una ulteriore scheda e digitate nella barra degli indirizzi

I devoti della riga di comando che hanno molto spazio libero su disco possono trascinare il file WAV in una finestra terminale in Konqueror e kfmclient (uno script Konqueror) vi offrir`a diverse opzioni. cp e` quella che fa al caso vostro. Questa opzione copier`a il file nella directory di default. Se si vuole copiare il file altrove baster`a cambiare directory con cd e poi copiare. Konqueror non ha ancora finito con i file musicali. Se non state memorizzando i file sul disco rigido o su un drive esterno USB potreste voler masterizzare il tutto su CD. Bene, se avete installato Konqburn (in precedenza Kio–burn) potete anche masterizzare con Konqueror. Basta trascinare le tracce selezionate sull’icona CD nella barra laterale e procedere.

settings:/Sound/

selezionate Audio CD e potete manipolare le varie impostazioni (bitrate, tag ID3) per MP3 e Ogg Vorbis. 30

Se volete campionare la musica che avete appena “rippato” e codificato con Konqueror, non e` necessario avviare un media player di grosso calibro (a meno che non abbiate necessit`a di caratteristiche avanzate). Basta cliccare sul pulsante Media Player nella barra laterale di Konqueror. (Se non lo vedete, aggiungetelo con un clic destro su una parte vuota della barra laterale, selezionando Aggiungi nuovo e aggiungetelo. Per inciso, si pu`o avere pi`u di una barra laterale. Sempre con un clic destro su una parte libera della barra laterale selezionate Visualizzazione multipla). Cliccate sull’icona Media Player nella barra laterale, trascinate la traccia e state incidendo (Figura 13). (Per qualco-

Computer Programming n. 181 [None 2009]


USER SPACE

Figura 15: Opzioni del menu di Kim

Figura 16: Opzioni di Audiokonvert

sa di pi`u sostanziale provate il pulsante Amarok nella barra laterale).

ra laterale, potete ottenere molti seri vantaggi da una interfaccia Konqueror ben configurata.

Un ulteriore kioslave che permette di fare qualcosa senza abbandonare i confini di Konqueror e` Kio–sysinfo. E` necessario che sia installato apt slave perch´e funzioni ma come potete vedere i risultati sono abbastanza impressionanti (Figura 14) Se utilizzate una distro basata su apt c’`e un pulsante azionabile per apt collegato al repository che vi permette di eseguire una ricerca in locale e online e di effettuare il download; tutti i pulsanti sotto Cartelle comuni e Informazioni sui dischi sono anche azionabili. Potete scaricare i binari precompilati di Kio-sysinfo per le distro pi`u diffuse dall’indirizzo http://jerrad.tuxfamily.org/kiosysinfo eng.html. Se non vi va a genio l’overhead di ricerca relativamente alto di Beagle e della sua stirpe e/o la vostra macchina e` poco potente, il kioslave locate:/ sar`a una utile alternativa. Questo kioslave presenta i risultati in file e cartelle, queste ultime con colori non di default, ed e` molto veloce. Ci sono molti altri kioslave eseguibili. Ho senza dubbio tralasciato il vostro preferito, specialmente i protocolli remoti come fish, ssh, webdav, smb, vnc, ecc. Ho smesso di contare il numero di IO slave elencati in Kinfocenter a settanta; comunque utilizzandone molti o pochi, specialmente in combinazione con la bar-

Lieto di essere d’aiuto! I preveggenti, comp`ıti, esistenzialmente stressati, ascensori progettati dalla Sirius Cybernetics Corporation che tanto annoiavano Marvin l’androide paranoico potrebbero aver tratto l’ispirazione dai progettisti di Konqueror e dalla stretta integrazione con KDE. Entrambi sono ansiosi di piacere e di fornire un buon servizio. I felici trasportatori verticali di persone lo fecero in un modo (a parte il saltuario broncio ai piani interrati come protesta) e Konqueror lo fa con i Service Menu. Per molti aspetti, sono molto simili alle estensioni di Firefox; installando una propria selezione personale otterrete quelle caratteristiche che rendono possibile trascorrere un’intera sessione in Konqueror senza staccarsi dalla sua interfaccia. Naturalmente, tutti i browser di file e i web browser hanno i loro menu di contesto, ma ulteriori menu di servizio metteranno il turbo a Konqueror. Il posto migliore per incrociarli e` il sito KDE Apps (http://www.kde-apps.org/). Selezionando “service menus” avrete subito accesso a 251 di essi. Al solito, la mia selezione riflette le mie preferenze e i miei requisiti.

Computer Programming n. 181 [None 2009]

31


USER SPACE

Uno per utenti Debian Figura 17: Il menu di servizio Debian

Di solito, aprite il gestore dei package (Synaptic, Kynaptic, Adept, ecc.) per installare un file binario o da riga di comando utilizzate apt-get

Se state eseguendo delle operazioni rudimentali con il pacchetto lo potete fare da Konqueror con Debian Menu, un menu di servizio che vi permette di installare, disinstallare e interrogare le informazioni sul pacchetto. Questi sono solo alcuni dei miei favoriti. Voi avrete i vostri. Ce ne sono 250 tra cui scegliere! E se non trovate ci`o che vi serve e` disponibile un rapido tutorial su come si creano su: http://techbase.kde.org/Development/Tutorials/ Creating_Konqueror_Service_Menus

KIM

Siccome mi piace aggiungere delle schermate ai miei articoli e talvolta devo fare qualche modifica senza invocare un vero pacchetto grafico, trovo molto utile il menu di servizio KIM (KDE Image Menu). Tra i comandi contenuti nel menu Action ci sono le seguenti operazioni: ridimensiona, converti, ruota, comprimi, aggiungi testo, aggiungi bordi. Le funzioni di Undo sarebbero utili, ma ci`o nonostante KIM aggiunge alcune funzioni molto veloci e utili a Konqueror quando si ha necessit`a solo di qualche modifica di “post produzione” su queste schermate catturate dalla riga di comando (Figura 15). Audiokonvert

Questo menu di servizio integra la capacit`a di Konqueror di eseguire il ripping e la codifica di un CD musicale. Per le volte in cui avete scaricato un file musicale e non e` in un formato che potete riprodurre, o in cui lo volete, Konqueror vi permetter`a di convertire i file audio da e verso cinque differenti formati (Figura 16). Nonostante il messaggio di errore, il file viene convertito senza problemi. Se lo state convertendo nel formato per l’iPod (M4A) allora potete trasferirlo sul riproduttore attraverso il kioslave iPod:/ dalla barra degli indirizzi di Konqueror. 32

PDF toolkit

Quest’ultimo e` una perla. E` un menu di servizio con un’ampia gamma di potenti opzioni, ed e` disponibile dal sito Kde-look (http://www.kdelook.org/content/show.php/konq-pdf+(new+PDFsmp)?content=37321).

Conclusioni Konqueror come visualizzatore universale di documenti si e` dimostrato degno del suo nome; con l’aggiunta dei menu di servizio e dei kioslave e di un po’ di configurazione, Konqueror pu`o supportarvi per una intera sessione, purch´e non abbiate particolari esigenze da “power user”. Certo, supera il test di compatibilit`a Web Acid2 ma non funziona bene con ogni sito (quale browser lo fa?); funziona con GMail ma solo nella versione di base in HTML (e potete sempre selezionare Modifica identificazione del browser nel menu Strumenti e impostarlo a “Firefox”), e non ha estensioni alla Firefox. Ci`o nonostante, spero che questo articolo abbia dimostrato sia la potenza sia la versatilit`a di Konqueror a fare molto pi`u degli altri browser senza abbandonare la sua interfaccia.

Computer Programming n. 181 [None 2009]


Estensioni Google in Firefox Interagire con le utility Google attraverso Firefox

Gary Richmond

oglio dare un’occhiata in dettaglio su come “superdotare” il browser Firefox con una selezione d’´elite di utility Google. Firefox ha le sue critiche e i suoi difetti, ma ad oggi e` stato scaricato oltre 400 milioni di volte: e come si dice “quello che mangiano gli flies, non possono sbagliarsi tutti!”. Firefox e` abbastanza buono cos`ı com’`e, ma ognuno sa che la funzionalit`a di Firefox si estende enormemente con la semplice aggiunta di estensioni, nonostante i problemi di sicurezza [1].

V

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

In questo articolo descrivero` come estendere Firefox in modo che possa interagire meglio con Google. -----------------------------------La scelta delle utility Google abilitate per mezzo di estensioni e` naturalmente del tutto personale, basata sulle mie necessit`a e preferenze mentre navigo. Qual e` la mia scelta? Gmail, GSpace, Better Gmail, Better Gcal, Customise Google, Gmail Notifier, Minimap Sidebar. Per`o . . . dovrebbe essere sufficiente come assortimento!

Una nota su Google Quando Google inizia a parlare messianicamente su ci`o che chiamano la loro missione da 300 anni [2] inizia a sembrare come un’incrocio tra James T Kirk e Giovanni il Battista e inizio a preoccuparmi che il mantra “non essere malvagio” si sia tramutato nell’impero malvagio di Microsoft. Quando iniziano a parlare di linkare tutti a tutti e tutto il resto, posso vedere Richard Stallman che si strofina la sua sindrome del tunnel carpale. Inizio ad avere allucinazioni che Google estender`a la sua portata a estensioni chiamate “Google Murder”, “Google Blackmail” e “Google Torture” [3]. Larry Page e Sergy Brin possono non essere Steve Ballmer e Bill Gates, i Ronnie e Reggie Kray del mondo del computer, (a right pair of diamond geezers and no bleeding mistake) ma un bisticcio con Ebay, il Grande Firewall della Cina e le preoccupazioni generali sulla sicurezza personale quando si usano le utility Google hanno alquanto offuscato la nostra visione del grande ciclopico motore di ricerca. Gi`a, almeno Google e` stato relativamente “GNU/Linux friendly”. Pensate a Picasa e a Google Earth per cominciare e anche alla sponsorizzazione del Summer of Code. Indubbiamente, hanno anche dei motivi commmerciali ma almeno non sono entrati far parte di una duplice unanimit`a con Microsoft sui brevetti: ma sono abbastanza riservati. Tuttavia, ci`o non mi impedisce di testare queste estensioni per Firefox.

Computer Programming n. 181 [None 2009]

33


PROGRAMMING

Una nota sull’installazione delle estensioni In questo articolo, tratter`o diverse estensioni. Nel caso non abbiate mai usato le estensioni, ci sono tre modi per installarle: 1. cliccare semplicemente sull’icona installa ora e tutto verr`a eseguito automaticamente; 2. clic destro sull’icona, scegliere salva collegamento come dal menu e salvare l’estensione in una cartella prescelta. Poi, cliccare sul menu a discesa File e selezionare Apri File, spostarsi nella cartella in cui si e` salvato il file con estensione xpi e installarlo. (Scommetto che non in molti utilizzerete questo percorso tortuoso!) 3. trascinare e rilasciare il file xpi su una istanza di Firefox in esecuzione, che si occuper`a di tutto. In questo articolo fornir`o i link diretti alle estensioni dai repository ufficiali, e un link alla homepage del progetto se disponibile. Tenete presente che il download e l’installazione delle estensioni dal sito web ufficiale e sicuro di Mozilla minimizza la possibilit`a di un attacco “man-in-the-middle”.

Gmail e roba associata Sono arrivato tardi, molto tardi, a Google Mail (d’ora in poi “Gmail”) ma dopotutto, non sono mai stato un’icona della moda. Una crudele necessit`a, come avrebbe detto Oliver Cromwell. E` probabile che molti di voi stiano gi`a utilizzando Gmail, ma nella remota possibilit`a che cos`ı non fosse, potete puntare il vostro browser al sito ufficiale (https://www.gmail.com/) e iscrivervi al servizio. Da quando e` stato inaugurato il servizio, l’insieme di funzionalit`a di GMail e` sbocciato. Quando mi iscrissi a Google Mail e installai l’estensione per Firefox mi furono messi a disposizione circa 2.9 GB di spazio su disco che consideravo essere pi`u che sufficiente per i miei scopi. La buona notizia, specialmente per chi e` alla ricerca di una capacit`a realmente importante, e` che dal Gennaio 2008 sono disponibili fino a 6 GB [4]. Il 34

link [4] vi mostrer`a l’incremento dinamico dello spazio di memorizzazione in tempo reale, facendo parte del programma di storage che Google chiama “Infinity+1”. Dovreste inviare e-mail di proporzioni bizantine per esaurire questa capacit`a, tuttavia l’offerta di Google non e` l’offerta pi`u capiente [5]. Va sottolineato che avrete accesso ad allegati e-mail fuino a 20 MB e questa sar`a una caratteristica pi`u utile (nonostante la vostra ampiezza di banda). Una caratteristica gradevole e` che questi allegati (inviati o ricevuti) verranno scanditi automaticamente da un antivirus. A parte lo spazio di memorizzazione, Gmail vi d`a una ovvia portabilit`a su vari computer e dovunque sul globo abbiate accesso a una macchina. Il cuore di Gmail sono caratteristiche come labels, voicemail, chat e l’integrazione con altri servizi Google come calendar, Docs e Reader. Torner`o a parlare di alcuni di questi pi`u oltre. Suppongo che Gmail sia un buon punto di partenza per la ricerca di estensioni Firefox, poich´e porter`a a variazioni su questo tema: Gmail Notifier, Better Gmail e FireGPG. Pertanto, mettiamoci al lavoro. Gmail Notifier

L’estensione Gmail Notifier [5] ha una licenza GPL ed e` compatibile con le versioni di Firefox dalla 1.5 alla 3.0 pertanto gran parte degli utenti dovrebbero essere coperti. Ha senso installarla prima di Better Gmail poich´e questa estensione vi permetter`a di ricevere notifiche nel browser Firefox (dopo aver eseguito il login) e dopo aver impostato l’estensione potete iniziare a testare realmente le capacit`a di Gmail con Better Gmail. Al solito, vi verr`a richiesto di riavviare Firefox per completare l’installazione di Gmail Notifier. Dopo che Firefox si e` riavviato, selezionate il menu a discesa Strumenti e scegliete Add-Ons e cliccate su Estensioni. Scorrete verso il basso e localizzate l’estensione (sono in ordine alfabetico). Selezionatela e cliccate su Preferenze e vi verranno presentate le seguenti opzioni modificabili: Le opzioni sono in gran parte autoesplicative e questa videata illustra le impostazioni di default. Potete impostarle a ci`o che vi soddisfa di pi`u. Forse la caratteristica pi`u interessante e` la capacit`a di abilitare pi`u account Gmail. Siccome questa caratteristica impatta su un’al-

Computer Programming n. 181 [None 2009]


PROGRAMMING

Figura 1: Preferenze di Gmail Notifier

fatto che i bookmark di Firefox possono integrare feed RSS. Tutto ci`o che dovete fare e` creare una cartella nei bookmark di Firefox. Selezionate il menu a discesa Bookmarks e cliccate su Manage Bookmarks. Ora, selezionate il menu a discesa File e scegliete New Live Bookmark e si aprir`a una finestra di dialogo e vi verr`a richiesto un nome, la locazione del feed e una descrizione (opzionale). Nome e descrizione sono arbitrari, ma si deve seguire un rigido protocollo per il titolo del feed. Deve assumere il seguente formato: https://username:password@gmail.google.com/gmail/feed/atom

tra estensione descritta in questo articolo, la terr`o per dopo, come far`a per la checkbox di abilitazione delle connessioni non protette. Per default avrete ora un’icona disattivata sulla barra di stato nella parte inferiore del browser. Portando il mouse su di essa vi verr`a richiesto di effettuare il login. Cliccando si aprir`a una finestra di dialogo di login: una volta effettuato il login l’icona diventer`a rossa; finch´e siete loggati rester`a in questo stato. Se spostate ora il mouse sull’icona vi avviser`a se ci sono nuovi messaggi (il colore diventa blu); ci sar`a anche una notifica accanto all’icona colorata sul numero di e-mail non ancora lette. In base a come avete impostato le preferenze, cliccando sull’icona Gmail si aprir`a in una nuova finestra, nella scheda corrente, in una nuova scheda o in una nuova scheda senza focus. Se avete impostato le preferenze di Gmail Notifier per reimpostare il contatore di Notifier quando l’icona viene cliccata per aprire una e-mail, questo verr`a decrementato/incrementato ogni volta. Per inciso, solo perch´e vi siete loggati in Gmail in qualche altro modo non significa che siete automaticamente loggati via Firefox. Dovete effettuare il login da Firefox. Gmail Notifier e` una eccellente estensione ma probabilmente vi starete chiedendo perch´e dovete aprire Gmail per vedere effettivamente quali sono queste email. Non chiedetevelo pi`u. La risposta a questa seccatura e` impostare un “live bookmark” per sfruttare il

La buona notizia e` che la connessione e` SSL, ma la notizia meno felice e` che username e password vengono memorizzati in chiaro nel file del bookmark. Effettuate il login a Gmail e nella barra degli indirizzi vedrete l’icona di un feed RSS. Cliccate si questa icona per aggiungere un live bookmark e seguite le richieste. Ora, ogni qualvolta Gmail Notifier vi avvisa che avete nuova posta, basta andare nel menu Bookmarks e vedrete il live bookmark del feed Gmail/RSS. Evidenziaziondolo vi indicher`a il titolo(i) della(e) e-mail. Due avvertimenti: primo, talvolta il live bookmark e Gmail Notifier vanno fuori sync in termini di numero di e-mail non lette. La soluzione e` semplice: basta un clic destro sul bookmark live nel menu Bookmarks e selezionare Reload Live Bookmark. Secondo, il feed non verr`a scaricato se non ci sono nuove e-mail nella cartella inbox. Better Gmail: un moustrap migliore

La cosa che amo degli hacker dell’open source e` che proprio non possono lasciare le cose come sono. Hanno un desiderio irresistibile di armeggiare e migliorare e Firefox e` una grotta di Aladino per queste persone. Gli script Greasmonkey [6] sono ben noti ai devoti della piccola volpe. Wikipedia ha un eccellente articolo a tal riguardo [7]. Persone pi`u esperte di me (penso siano molte) hanno messo assieme questi script e hanno prodotto un’agile estensione in Better Gmail [8] (potete anche visitare la homepage di Better GMail [9] che aggiunge alcune serie caratteristiche potenti a Gmail come illustrano le opzioni sottostanti) . Se i pilchard sono sardine giganti on steroids, allora Better Gmail e` un barracuda. Ed e` anche accompagnato da un bonus: l’approvazione formale di Tim O’Reilly [10].

Computer Programming n. 181 [None 2009]

35


PROGRAMMING

Figura 2: Schede delle opzioni di Better Mail

indicibile bestialit`a. Ho provato questa caratteristica con un allegato PDF e ha funzionato a dovere. (Il solo svantaggio e` che, poich´e Gmail e` uno strumento Web, gli allegati non si trovano sul vostro disco rigido locale e anche dopo che l’e-mail e` stata “scaricata” sar`a ancora necessario scaricare l’allegato prima di poterlo visualizzare, il che pu`o essere scomodo se e` un grosso file). Labels e` un’altra utile caratteristica per l’organizzazione di Gmail. Dopo che Better Mail e` installato ed e` abilitata l’opzione Labels, troverete un’etichetta nell’angolo in basso a sinistra della finestra di Gmail. Se si clicca su Edit Labels apparir`a una videata e una finestra di dialogo in cui potete eliminare, modificare o creare nuove etichette per gestire le vostre e-mail. ------------------------------------

Nella scheda General avete la possibilit`a di opportunit`a di selezionare le checkbox delle seguenti opzioni: avere una connessione sicura crittografata con Gmail, integrare Google Reader e aggiungere una gradevole piccola caratteristica per mostrare l’utilizzo del disco come barra di avanzamento. L’opzione pi`u interessante della scheda Compose e` Attachment Reminder. Questa opzione vi ricorda di allegare un file a Gmail nel caso lo aveste dimenticato, se c’`e un riferimento a un allegato nel subject di Gmail. Se questa caratteristica e` abilitata, quando si clicca su invia Gmail vi segnaler`a di non aver allegato il(i) file, con la possibilit`a di premere annulla e di eseguire l’attach prima di reinviare, o di inviarla comuqnue. Non vincer`a alcun premio, ma e` una piccola caratteristica ben fatta e ancor meglio quando il riferimento all’allegato si trova anche nel testo principale o invece nel titolo della e-mail. La scheda Messages vi d`a accesso a diverse caratteristiche realmente utili: Conversation Preview e` , ritengo, una delle migliori. Una volta abilitata, si sar`a in grado con un click destro su una e-mail di visualizzarne il contenuto senza aprirla effettivamente nel modo normale. Inoltre, ci sono delle opzioni all’interno di questa caratteristica per archiviare o spostare nel cestino l’elemento selezionato. Ottimo. Attachment Icons sembra banale ma in effetti potrebbe essere un vantaggio per i patiti dell’iper-sicurezza visto che sostituisce l’anonima icona a graffetta che potrebbe celare ogni sorta di 36

Se i pilchard sono sardine giganti on steroids, allora Better Gmail e` un barracuda. -----------------------------------Abilitando Filter Assistant otterrete la stessa funzionalit`a che vi attendereste da un client e-mail convenzionale come Evolution o Thunderbird per instradare la posta desiderata in cartelle preimpostate o per eliminarla come spam o robaccia. L’ultima scheda importante in Better Mail e` Sidebar. Le due checkbox pi`u utili da attivare sono Add Google calendar Link e Add Google Reader Link. Fatto ci`o, questi link verranno aggiunti a Gmail e vi permetteranno, se lo desiderate, di accedere a queste applicazioni Google da Gmail stesso, senza lasciarne i confini. Utilizzo di GMail con IMAP e POP

Se si clicca sul link Settings in alto alla pagina si vedr`a un certo numero di impostazioni. Selezionate Forwarding and POP/IMAP dove sarete in grado di predisporre l’abilitazione di questi due protocolli in Gmail (Figura 3). Si pu`o scegliere una delle due opzioni ma in ogni caso si avr`a una discreta quantit`a di configurazione nel normale client e-mail. Questo aspetto e` al di l`a degli scopi immediati di questo articolo, ma si possono ottenere istruzioni molto dettagliate e degli screenshot alla pagina GMail Help Centre [11]. Dopo aver se-

Computer Programming n. 181 [None 2009]


PROGRAMMING

Figura 3: Scheda delle impostazioni di Gmail per la configurazione POP e IMAP

guito queste istruzioni, ritornate alle impostazioni di forwarding e salvate le modifiche. Si pu`o avere la posta di Gmail inoltrata al normale client e-mail senza esguire il login a Gmail o scaricarla direttamente nel proprio programma di e-mail. Il che non va confuso con l’impostazione del servizio di Mail Fetcher in Gmail che permette di scaricare la posta dal POP server di un client e-mail (purch´e il vostro ISP supporti l’inoltro), pur conservando la possibilit`a di lasciare il(i) messaggio(i) sul server. Si pu`o iniziare il processo di impostazione del Mail Fetcher nella scheda Accounts di Settings, seconda voce in basso. GMail Help Centre fornisce una spiegazione e un howto [12]. Un’estensione per Firefox per chi non si fida di nessuno

Molte estensioni per Firefox sono rivolte a utenti che non si fidano neanche della propria madre che gli da il bacio della buonanotte. Se siete una di queste persone, ho un’estensione per voi che si integra con Gmail e offrir`a un sonno tranquillo e sicuro sapendo che nessuno pu`o sbirciare o ficcare il naso su ci`o che inviate tramite Google. Molti lettori avranno sentito parlare del software di crittografia Pretty Good Privacy (PGP) [13] che viene utilizzato, tra l’altro, per crittografare le e-mail. E`

Figura 4: Preferenze di FireGPG

stata solo questione di tempo prima che qualcuno decidesse di scrivere un’estensione per Firefox. Questa estensione e` FireGPG [14] e utilizza GnuPG sviluppato dalla Free Software Foundation e fortunatamente supporta Gmail. Al momento in cui scrivo non e` disponibile dal sito ufficiale degli addon di Mozilla (il che sarebbe pi`u sicuro), ma non avuto alcun problema con il precedente link. Tuttavia, prima di farlo funzionare in Firefox e` prima necessario installare GnuPG sulla propria macchina GNU/Linux. In molti casi sar`a gi`a installato. Altrimenti, controllate sui repository del software e installatelo (o reperitelo dal sito ufficiale [15]). Si tratta di un tool a riga di comando (si veda man gpg) ma ci sono diversi frontend disponibili [16], tra cui i due principali sono KGpg per KDE e Seahorse per Gnome. Entrambi genereranno le coppie di chiavi necessarie per crittografare e apporre la firma digitale alle e-mail. Il mio amico-collaboratore, Dmitri Popov, ha scritto un breve ma eccellente howto su questo passaggio [17]. Ora si pu`o installare l’estensione e la schermata Preferences fornir`a le opzioni mostrate nella Figura 4. La prossima volta che componete un messaggio in Gmail, FireGPG avr`a aggiunto il pulsante Sign, Crypt and Send che, se cliccato, vi far`a una doppia richiesta: una volte per la chiave pubblica e una per la chiave privata. Ci saranno anche altri pulsanti con variazioni di queste opzioni in base alle proprie preferenze. (Que-

Computer Programming n. 181 [None 2009]

37


PROGRAMMING

Figura 5: Configurazione delle etichette GTD nelle impostazioni Gmail

ste opzioni appariranno nella schermata di composizione). Se vi fidate di Google per le chiavi private, ed e` un grosso se, allora ora avete una connessione secura e la posta crittografata. Dopo aver iniziato questo articolo FireGPG e` stato aggiornato (alla versione 0.4.6) per lavorare con l’ultima versione di Gmail: crea un pulsante utilizzato per aggiungere un file crittografato come allegato. Perche´ non utilizzare un Gmail ancora migliore per far tutto?

Gmail, Better Mail, Gmail crittografato. Perch´e fermarsi? Perch´e non estendere ulteriormente le cose e aggiungere qualche stimolo organizzativo realmente valido a Google in Firefox? Mi riferisco all’estensione GTD (Getting Things Done), all’estensione Better Gcal e all’estensione Minimap sidebar. GTD: Get Things Done

Se siete fanatici del controllo e dovete semplicemente essere iper-organizzati, allora questa estensione per Firefox fa per voi. Giusto quando si pensa che qualsiasi altra estensione a Gmail dovr`a ottenere una concessione edilizia, si fa avanti GTD [18] per aggiungere una gran quantit`a di ulteriori funzionalit`a a un’interfaccia 38

Figura 6: Il riquadro GTD search

gi`a stipata di caratteristiche che sgomitano a vicenda. Citando le parole del sito web ufficiale, GTD rappresenta il massimo di sinergia di gestione e comunicazione pur garantendo cautela e sicurezza. Perbacco! Se si e` interessati alla filosofia alla base di GTD, la rivista Wired ha pubblicato un articolo su GTD [19]. Si pu`o utilizzare il precedente link [18] per installare questa estensione super piccola, ma GTD e` ora felicemente presente nel sito ufficiale Mozilla degli addon [20]. Come FireGPG, con Gmail aggiornato alla versione 2.0, GTD non funzioner`a opportunamente a meno di non tornare a eseguire la vecchia versione di Gmail. Basta individuare le impostazioni older version nell’angolo in alto a destra di Gmail e cliccando verranno ripristinate tutte le configurazioni di queste estensioni (se, come me, avete gi`a installato GTD). Questa e` la buona notizia, pi`u il fatto che gli sviluppatori GTD stanno lavorando alla versione 2.0 per renderla compatibile con Gmail 2.0. Nel frattempo, la cattiva notizia e` che se avete selezionato le impostazioni pi`u vecchie di Gmail per ripristinare le impostazioni GTD, dopo che effettuate il logout e nuovamente il login, riappare la versione pi`u recente di Gmail come per vendetta e siete costretti a ripetere di nuovo il trucco delle impostazioni: e continuerete a doverlo fare fino all’aggiornamento di GTD; ma questo e` un piccolo prezzo da pagare per questa super piccola estensione. Dopo aver installato questa estensione, riavviato Fire-

Computer Programming n. 181 [None 2009]


PROGRAMMING

Figura 7: Gmail con le opzioni avanzate di GTD

Figura 8: Google calendar attivato da GTD

fox e effettuato il login in Gmail, si vedr`a che ci`o che fa e` espandere notevolmente la funzionalit`a della caratteristica Labels. Le etichette ora appaiono sotto varie intestazioni: Contexts, Status, Projects e References con la possibilit`a di aggiungere quante sottointestazioni si vuole. Mentre tutte le etichette extra (collassabili) sono situate nella parte inferiore del lato sinistro di Gmail, tre altre caratteristiche vengono aggiunte: un link GTD nell’ultima colonna di ciascuna e-mail, un link Show GTD Search all’inizio dello schermo e un pulsante nell’angolo inferiore destro per permettervi di stampare Hipster PDA cards [21]. Cliccando su una delle categorie delle etichette si aprir`a la scheda Gmail Labels Setting in cui si possono selezionare le sottocategorie o crearne di nuove (Figura 5).

la possibilit`a di salvare le ricerche. Si pu`o effettuare una ricerca, poi aggiungere Categorie/Etichette a singole e-mail e quando si ritorna alla propria inbox queste e-mail saranno ora contrassegnate di conseguenza (Figura 6).

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

GTD rappresenta il massimo di sinergia di gestione e comunicazione pur garantendo cautela e sicurezza -----------------------------------Il servizio “GTD search” apre una finestra di dialogo con molte opzioni di ottimizzazione fine basate sulle etichette impostate, sulle date e sul fatto che le e-mail siano contrassegnate da stellette o abbiano allegati, con

Infine, quando si vuole comporre una e-mail si vedr`a che l’estensione GTD ora vi fornisce tre opzioni: Compose E-mail, Compose Myself an action e Compose Myself a Reference. La prima e` autoesplicativa e le altre due, se selezionate, apriranno ulteriori finestre di dialogo contestuali (Figura 7). Con questa caratteristica potete inviarvi un’azione o un riferimento, compreso qualsiasi allegato, e cliccando su Add event info si pu`o inserire dove e quando. Subito sopra l’area principale di composizione del testo vi e` un pulsante di azione more event options. Se si clicca su di esso si aprir`a una finestra Google calendar e permetter`a una ulteriore configurazione (Figura 8). GTD e` una delizia per il power user con sufficienti opzioni (ben sette schede) da tenere occupato il pi`u inveterato smanettone (Figura 9). Questo e` solo un assaggio di ci`o che questo meraviglioso addon per Firefox pu`o fare per un’applicazione Google come Gmail. Il sito web ufficiale vi dir`a molto di pi`u e in modo anche pi`u dettagliato.

Computer Programming n. 181 [None 2009]

39


PROGRAMMING

Figura 9: Le opzioni di GTD: sette schede, un paradiso per gli smanettoni

e la quantit`a di informazioni rivelate era sorprendente e scioccante. Le informazioni erano tali che era possibile sapere esattamente quando qualcuni sarebbe stato via per gite o vacanze facilitando cos`ı le effrazioni e sufficienti dettagli personali e finanziari da facilitare il furto di identit`a. Visitate il sito [23] e vedrete voi stessi. E` una lettura che impensierisce. La lezione e` chiara: scegliere l’impostazione privata in Google calendar e se si deve condividere qualcosa perlomeno configuratelo per limitare la condivisione a specifiche persone di cui vi fidate. Ricordati il latte: non un’estensione ma estendera` Google Calendar

Better Gcal: Google Calendar imbellettato

Google Calendar ha alcune buone caratteristiche ma al solito i demonietti smanettoni hanno rovistato a fondo rummaging e hanno tirato fuori un’estensione detta, ehm . . . , Better Gcal [22]. Come Better Gmail, lo scopo e` semplice: aggiungere funzionalit`a realmente utili al calendario di default di Google. Non e` pieno zeppo di caratteristiche come Better Gmail ma ha alcune ben fatte opzioni di configurazione (Figura 10). Queste, come per Better Gmail, sono una gentile concessione degli script Greasmonkey acclusi e aggiungono, letteralmente, un po`ı di colore al calendario. Che si utilizzi Google calendar come applicazione standalone o integrandola con tutti gli altri pacchetti Google, un’opzione che si deve assolutamente abilitare e` forzare una connessione sicura (https). In base alla dimensione delle voci del vostro calendario, text wrap events e` utile. Le altre opzioni attivabili sono essenzialmente estetiche. Google Calendar: un avvertimento

Un avvertimento sull’utilizzo di Google calendar. Se rendete pubblico il vostro calendario potete, in base a ci`o che inserite, esporvi a qualsiasi cosa, dal furto in casa al furto di identit`a al pedinamento. Ho dato un’occhiata ad alcuni calendari pubblici di “singoli privati” 40

Sfortunatamente, Better Gcal non fa per Google calendar ci`o che fa GTD per Gmail; se si vuole questo tipo di valore aggiunto, si potrebbe considerare Remember the Milk for Google Calendar [24]. Andate alla homepage di RTM, cliccate su Signup Now! e seguite le indicazioni per iscriversi a uno speciale calendario che aggiunger`a piccole icone di task a ciascun giorno (un segno di spunta blu). E` anche disponibile una guida rapida [25]. Questi segni blu appariranno solo dopo che vi siete assicurati che il calendario Remember the Milk e` nella vostra Calendars List e che la casella della checklist sia selezionata. Fatto ci`o, potete cliccare sulle icone dei task in alto a ciascun giorno del Google Calendar, effettuare il login (con username e password che avete impostato quando avete installato RTM) e creare i task da visualizzare. Attraverso la funzionalit`a Locations feature, Remember the Milk vi offe una mappa relativa ai task che hanno un componente location (pratico se state condividendo Google calendar con amici che non hanno familiarit`a con la vostra localit`a). Questo funger`a da supplemento a un’altra extension Firefox di nome Mini Map Sidebar [26], essenzialmente Google Maps nella barra laterale di Firefox, che ha molte caratteristiche al di l`a dello scopo di questo articolo (elencate sul sito ufficiale dell’add-on). Comunque, RTM e` popolare e la popolarit`a e` fonte di pi`u richiesta di feature creep. Pertanto, non sorprende che ci sia un’estensione per Firefox per questo tool di gestione dei task. Si chiama Delegate to Remember the Milk e si basa sull’estensione DelegateGCal di

Computer Programming n. 181 [None 2009]


PROGRAMMING

Figura 10: Preferenze di Better Gcal

ano.malo.us. Se vi state struggendo come un Python parrot per le caratteristiche di RTM in Google Calendar allora installatelo [27] e, happy days, un pulsante verr`a aggiunto ai messaggi Gmail per generare messaggi verso RTM che crea un nuovo task. Come per FireGPG, questa estensione e` stata colpita dall’aggiornamento di GMail e funzioner`a solo con la versione pi`u vecchia, richiedendo cos`ı la modifica della versione nelle impostazioni di Gmail che ho citato prima. Tuttavia, sarete ancora in grado di utilizzarla per convertire le e-mail in task pur conservando un collegamento all’indietro alla e-mail originale; proprio cos`ı. Se vi piace realmente RTM non siete limitati a Gcalendar e Gmail; potete averlo anche nella barra laterale di Firefox. Con il gadget iGoogle abilitato, aprite Bookmarks Manager e create un nuovo bookmark e digitate la seguente URL: http://www.rememberthemilk.com/services/modules/googleig/

e assicuratevi che sia spuntata la casella “Carica questo bookmark nella barra laterale”. Ora, purch´e siate loggati in RTM potete visualizzarlo da una barra laterale di Firefox semplicemente selezionando questa opzione dal menu a discesa Bookmarks. Nel descrivere RTM ho scalfito solo la superficie di ci`o che pu`o fare e su come si integra con Firefox e le applicazioni Google, SMS e gli instant messenger (AIM, Gadu-Gadu, Goo-

Figura 11: GMailFS non e` il solo modo per accedere a GMail come se fosse un disco remoto.

gle Talk, ICQ, Jabber, MSN, Skype e Yahoo! sono tutti supportati). Gspace: spazio online gratuito tramite Firefox

Gli utenti GNU/Linux avranno familiarit`a nell’utilizzo di Fuse (File User Space) in combinazione con Gmail per creare filesystem Linux virtuali e montabili, meglio noti come GmailFS [28]. GmailFS vi permetter`a effettivamente di utilizzare GMail come un filesystem. Se Fuse o GmailFS non fanno parte dei repository software delle vostre distribuzioni, potete reperirli sul sito ufficiale [29]. Molti principianti possono rifiutarsi di installare i moduli Fuse Kernel (tuttavia in gran parte delle versioni recenti e` installato per default) e inseguire le dipendenze, tuttavia l’impegno ne sar`a valsa la pena: sarete in grado di utilizzare Gmail senza dipendenze dagli aggiornamenti del browser che possono corrompere l’estensione (anche non dovendo accedere ai comandi per i file). Se si preferisce un’estensione Firefox che funziona con Gmail, bench´e non ufficialmente, allora Gspace [30] fa per voi. Si tratta di uno spazio online remoto di memorizzazione di file con tutti i fronzoli. Siete distanti una sola estensione dai fino a sei Gigabyte di facile e comoda capacit`a di memorizzazione attraverso il vostro account Gmail. E` facile da usare, e` come

Computer Programming n. 181 [None 2009]

41


PROGRAMMING

Figura 12: L’interfaccia a quattro pannelli di Gspace

spostare i file localmente sul vostro computer. Ai file caricati su Gmail via Gspace potete accedere e recuperarli da dovunque, su qualsiasi macchina: compreso permettere l’accesso ad altri a cui vi fidate di fornire i dettagli del vostro account Gmail. E` una caratteristica molto utile per grossi file che potrebbero soffocare il vostro normale client e-mail, anche su una decente connessione a banda larga. Una volta installato, Gspace aggiunger`a un’icona alla barra di stato di Firefox. Dal menu add-on delle estensioni potete configurare le opzioni di Gspace e questo dovrebbe essere il vostro primo scalo: Gspace Preferences Settings. Qui, potete impostare le icone, le miniature, la dimensione dei file allegati, ec. Per aprire l’applicazione basta cliccare sull’icona Gspace. In base a come avete configurato Firefox, Gspace dovrebbe aprirsi in una scheda separata (Figura 12). Chiunque ha utilizzato FireFTP, un’estensione client FTP per Firefox, riconoscer`a l’organizzazione dell’intefaccia: una schermata contenente i files della propria directory home, una schermata per il trasferimento di questi file su Gspace, una schermata Transfer e una schermata Status (tutte ridimensionabili). Una volta loggati, selezionate un o pi`u file cliccate sulla freccia blu di upload e i file selezionati verranno trasferiti nella schermata destra. Allo stesso tempo, nella schermata in basso a sinistra Transfer, una barra d’avanzamento indicher`a lo stato dell’upload. Ai file caricati potete in 42

seguito accedere (e ritrasferirli) da qualsiasi altra macchina su cui sono installati Firefox e Gspace. Se ora aprite Gmail questi file verranno mostrati come una normale e-mail che pu`o essere visualizzata, scandita e/o scaricata. Questa caratteristica e` utile per il trasferimento di grossi file con tutti quelli con cui volete condividerli che hanno un account Gmail, specialmente per chi lavora, ad esempio, in un gruppo di progetto. Una delle migliori caratteristiche dell’estensione Gspace e` la gamma dei Transfer Modes che permette di trasferire file, visualizzare file di immagini caricati e scaricare da un drive Gmail. Si possono anche riprodurre i propri file musicali caricati, bench´e per fare ci`o avrete bisogno del plugin Flash Player (Gspace vi fornir`a un link di download). Per questa caratteristica, dovrete concedere all’estensione Gspace il permesso di accedere a host esterni come gmail.com. Potete ottenere le istruzioni da [31]. Si possono anche gestire pi`u account GMail da Gspace ma solo sequenzialmente, e non consecutivamente, poich´e Firefox mantiene i cookie attraverso la session di login: pertanto, pi`u acount GMail su pi`u schede Firefox non e` compreso nel menu! ------------------------------------

L’installazione di Customise Google vi dara` accesso a un ventaglio fenomenale di impostazioni Google per migliorare la sicurezza del browser. ------------------------------------

Il meglio di tutto il resto: una rapida panoramica Avevo intenzione di includere Google Browser Sync [32]. Anche se i dati sono opzionalmente crittografati utilizzando un PIN alfanumerico in modo che dati, password e cookie siano protetti (anche da Google?), una possibilit`a migliore e` di utilizzare Gspace in combinazione con due eccellenti piccole estensioni per Firefox: FEBE [33] e CLEO [34]. Queste estensioni vi permetteranno, rispettivamente, di eseguire il backup di tutte le vostre estensioni, temi, bookmark, preferenze, password, cookie, profili e di impacchettare tutte

Computer Programming n. 181 [None 2009]


PROGRAMMING

le estensioni e i temi in un unico file compresso xpi installabile. Potete poi usare Gspace per caricare il file CLEO e accedere ad esso per installare il tutto su un’installazione Firefox in esecuzione su un’altra macchina dovunque altro sia. Per lo stesso motivo, Google Notebook [35] (un blocco appunti a scratch pad and shoe in per del.icio.us?) e` un piccolo tool di ricerca ben fatto da utilizzare in Firefox, specialmente se desiderate collaborare online e integrarlo con Gmail e Google calendar [36], ma se volete una reale estensione da “power user” per Firefox, allora Zotero [37] e` una soluzione molto migliore. E` standalone ma pi`u potente, e la uso regolarmente nelle mie ricerche. Il potente insieme di caratteristiche pu`o essere realmente apprezzato solo installando l’estensione [38]. Infine, bench´e sia considerato da maleducati mordere la mano di chi ti porge il cibo, non ci sono scuse per permettere a Google di prendersi delle libert`a con la vostra sicurezza e i vostri dati. L’installazione di Customise Google [39] vi dar`a accesso a un ventaglio fenomenale di impostazioni Google per migliorare la sicurezza del browser. Consideratelo come l’aggiunta di meta-preferenze a tutte le altre estensioni Google.

Conclusioni Le estensioni Google vi permettono di ingranare la potenza di Firefox e di trascorrere un’intera sessione online senza doverne lasciare i confini. I soli avvertimenti riguardano la sicurezza e gli aggiornamenti alle estensioni e ai browser che corrompono la compatibilit`a. Se questo assortimento non e` sufficiente a esaurirvi o se la mia selezione non e` di vostro gradimento, allora fate una visita a http://geekpedia.wordpress.com/category/gmail/ un sito web che elenca non meno di ottanta tool e suggerimenti per Gmail e sguazzate nell’abbeveratoio per Google. ------------------------------------

Ci sono abbastanza estensioni da durare almeno quanto una causa intentata da SCO. -----------------------------------le note dell’articolo sono presenti all’indirizzo http://www.infomedia.it/note/CP181/richmond


Estendere Nautilus: (fotocamere e) rotazione di immagini JPG Personalizzare il filemanager di GNOME con gli script

Scott Carpenter

ecentemente stavo cercando un modo per ruotare immagini JPG da Nautilus, e ho trovato un modo per fare questo e altro. Non e` difficile personalizzare il menu popup che si apre con un clic destro in Nautilus per eseguire azioni personalizzate sui file. In questo articolo presento alcune istruzioni e script da cui partire. Spesso ho immagini fotografiche orientate verticalmente che voglio ruotare dal file manager. L’explorer di Windows ha una utile funzionalit`a con cui si possono selezionare pi`u immagini in modalit`a thumbnail, e con un clic destro si ottiene un menu popup (noto anche come menu di contesto), e si pu`o selezionare una rotazione in senso orario o anti oario. Si tratta di una trasformazione senza perdita di informazione, al contrario di ci`o che probabilmente si ottiene se si apre un’immagine con il proprio programma di grafica preferito, la si ruota, e la si salva nuovamente. Questo metodo e` anche scomodo se, come accade a me, volete solo ruotare le immagini dopo averle estratte dalla vostra fotocamera. Si tratta di una delle tante cose che ho appreso gradualmente nel sostituire le mie precedenti competenze Windows, e come di solito accade quando trovo una soluzione in GNU/Linux, sono rimasto compiaciuto dal raffinato approccio costruttivo dei sistemi *nix. Mi sono reso conto di avere la potenza di bash a portata di mano da Nautilus, con script che sfruttavano l’ulteriore vantaggio di alcune eleganti utility che descriver`o pi`u oltre.

R

44

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

Non e` difficile personalizzare il menu popup che si apre con un clic destro in Nautilus per eseguire azioni personalizzate sui file -----------------------------------E` vero che molti programmi di importazione ruoteranno automaticamente le immagini mentre vengono estratte dalla fotocamera, ma non tutti lo fanno, e non sarete sempre in grado di utilizzare il programma di importazione del caso. E` anche possibile che la vostra fotocamera non memorizzi gli opportuni metadati Exif (http://en.wikipedia.org/wiki/Exif) nel file dell’immagine, lasciando inerme il vostro super fantastico programma di importazione. Pertanto ritengo che possiamo convenire sul fatto che si tratti di qualcosa che e` necessario avere per facilitare la gestione delle foto. Mi occuper`o in modo specifico delle operazioni sui file immagine per dimostrare come Nautilus pu`o essere esteso. Tratter`o il caso dei file JPG che in pratica rappresentano il formato universale delle fotocamere digitali (almeno in quelle utilizzate da noi comuni mortali) e utilizzer`o i dati Exif che ci permettono di fare diverse cose utili. Dalla lettura di questo articolo, sarete in grado da Nautilus di effettuare un clic destro sulle votre immagini e di avere delle opzioni di menu come quelle mostrate nella Figura 1. Questo corrisponde alla seguente gerarchia nella vostra directory home:

Computer Programming n. 181 [None 2009]


PROGRAMMING

-----------------------------------Figura 1: Il menu popup del file manager Nautilus di GNOME attivabile con un clic destro

Mi sono reso conto di avere la potenza di bash a portata di mano da Nautilus, con script che sfruttavano l’ulteriore vantaggio di alcune eleganti utility ------------------------------------

Possibili sorprese

˜/.gnome2/nautilus-scripts/img/ autorotate.sh change-date-and-rename-with-exif.sh change-mod-date-to-exif.sh rename-with-exif-date.sh rotate-left.sh rotate-right.sh caution/strip-exif.sh

Preliminari Il codice di questi script rilasciato come pubblico dominio appare pi`u oltre. Si pu`o anche scaricare il file allegato all’articolo downloads.tgz e estrarlo nella propria directory nautilus-scripts: /.gnome2/nautilus-scripts$ tar -xvf downloads.tgz La pagina GNOME su come estendere Nautilus e` un buon punto da cui partire. Riporta che si pu`o anche utilizzare il menu File → Scripts per eseguire gli script, e da l`ı o dal menu di contesto che si ottiene con un clic destro, si pu`o selezionare l’opzione “Open Scripts Folder” per aprire la directory in Nautilus. Se non avete alcuno script installato, non otterrete queste opzioni di menu. Accertatevi che gli script che create siano eseguibili.

Inizialmente non riuscivo a far apparire il menu degli script quando inserivo gli script nella radice di nautilus-scripts, e pensavo dovessero essere posizionati nelle sottodirectory. Ma quando ho ricontrollato mentre scrivevo, funzionava bene in questo modo. Poi dopo aver rimosso e ripristinato i file nella mia gerarchia preferita, non riuscivo di nuovo a far apparire gli script nel menu, anche dopo aver chiuso e riaperto Nautilus. Ho dovuto forzare un ricaricamento delle directory in Nautilus per vedere nuovamente il tutto nel menu, utilizzando la piccola freccia circolare blu della toolbar. Forse ci`o aveva qualcosa a che fare con il mio problema iniziale. In ogni caso, se le cose non appaiono come previsto, accertatevi di ricaricare la directory nautilus-scripts. (Disponibile anche nel menu View → Reload e tramite la scorciatoia di tastiera CTRL + R). C’`e ancora una cosa da fare prima di potere iniziare a osservare gli script in azione. E` necessaria l’utility jpegtran (http://en.wikipedia.org/wiki/Libjpeg) prelevabile dal sito Independent JPEG Group (http://www.ijg.org/) e jhead di Matthias Wandel (http://www.sentex.net/ mwandel/jhead/). Entrambi sono piccoli e robusti programmi free software. jhead e` di pubblico dominio, e jpegtran ha una sua licenza che appare essere pienamente free. La buona notizia e` che probabilmente avete gi`a jpegtran, e jhead e` facilmente disponibile. Nelle mie macchine dotate di Ubuntu 7.04 (Feisty Fawn) e di Fedora FC5, jpegtran fa parte dell’installazione di default. Su Ubuntu ho installato jhead con il comando sudo apt-get install jhead e su Fedora, come utente root, con il comando yum install jhead Per scopi di sperimentazione, raccomando di utilizzare una directory temporanea con copie di alcune im-

Computer Programming n. 181 [None 2009]

45


PROGRAMMING

Figura 2: L’immagine monkey.jpg

tamento di Exif. Se avete ruotato le vostre immagini in precedenza, questo flag pu`o essere azzerato. Si pu`o utilizzare come immagine di prova monkey.jpg (Figura 2). E ora passiamo finalmente agli scripts!

rotate-right.sh (in senso orario) #!/bin/bash while [[ -n "$1" ]]; do #if a file and not a dir if [[ -f "$1" ]]; then # per default jpegtran copia solo # alcuni dati Exif; specificare "all" jpegtran -rotate 90 -copy all \ -outfile "$1" "$1" # azzera il tag di rotazione/orientamento # in modo che alcuni visualizzatori # (ad es. Eye di GNOME) non vengano ingannati jhead -norot "$1" fi shift done

Ecco cosa fa lo script: • Processa tutti i file specificati sulla riga di comando in un ciclo. (Se invocato da Nautilus, passer`a tutti i nomi di file come argomenti allo script).

magini. Molto probabilmente non vorrete utilizzare le vostre ordinarie directory di immagini mentre lavorate inizialmente con questi script, poich´e non si pu`o effettuare l’undo delle operazioni.

• Finch´e ci sono file, e se il file e` in effetti un file e non una directory, invocher`a jpegtran per ruotare l’immagine di 90 gradi. Facendo s`ı che il file di output abbia lo stesso nome del file di input, andr`a semplicemente a sostituirlo.

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

• Dopo la rotazione dell’immagine, invoca jhead per azzerare il flag di orientamento nei metadati Exif. Come evidenzia il commento nello script, se non modificate il tag di rotazione, programmi come Eye di GNOME (il visualizzatore di default di GNOME) verr`a confuso e ruoter`a l’immagine poich´e e` abbastanza astuto da leggere i dati Exif e cercare di orientare al meglio l’immagine per una corretta visualizzazione.

Una delle cose che vi mostrer`o e` come creare uno script di “autorotazione” che sfrutta i dati di orien-

Per ottenere la rotazione in senso antiorario, potete creare lo script rotate-left.sh copiando il codice

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

Per scopi di sperimentazione, raccomando di utilizzare una directory temporanea con copie di alcune immagini

46

Computer Programming n. 181 [None 2009]


PROGRAMMING

precedente, in cui sostituirete -rotate 90 con -rotate 270. Una volta salvato questo script, si pu`o aprire una finestra terminale ed eseguirlo da riga di comando per verificare che funzioni come previsto: ˜/.gnome2/nautilus-scripts/img/rotate-right.sh ˜/tmp/monkey.jpg

Un motivo per effettuare questa verifica e` che quando si eseguono delle cose dal menu degli script di Nautilus, non otterrete alcun feedback in caso di errori. Gli script falliscono semplicemente dietro le quinte. Ad esempio, se i vostri script non sono eseguibili, sembrer`a che uno script non abbia eseguito niente. ------------------------------------

Una delle cose che vi mostrero` e` come creare uno script di autorotazione che sfrutta i dati di orientamento di Exif ------------------------------------

autorotate.sh Il prossimo script e` ancora migliore. Mi e` capitato di consumare un sacco di tempo in Windows Explorer a setacciare una grossa directory di immagini thumbnail per trovare quelle che erano state scattate verticalmente e di multi-selezionarle per poterle ruotare. E` un lavoro noioso: non e` sempre ovvio dal thumbnail qual e` l’orientamento, e mentre si scorre la finestra si possono accidentalmente sia deselezionare i file sia selezionare delle immagini orizzontali. Se la vostra fotocamera memorizza nel file i dati di orientamento Exif (ad esempio, la mia Canon lo fa), potete selezionare tutti i file e utilizzare la funzionalit`a di “autorotate” di jhead che ruoter`a solo le immagini verticali. (Nella pratica ho constatato che non e` garantito al 100%, forse perch´e la fotocamera a volte non rileva correttamente l’orientamento?).

find "$1" -iname "*\.jpg" \ -exec jhead -autorot {} \; fi shift done

Per questo script, ho fatto in modo che possiate selezionare anche una directory, poich´e e` pi`u probabile che vogliate eseguirlo su intere directory. Ho notato che se si clicca col tasto destro su una directory nel pannello sinistro “ad albero” di Nautilus, non si ottiene il menu degli script, ma e` disponibile dal menu File → Scripts. Il menu degli script e` anche disponibile se si effettua un clic destro su una directory nel pannello destro di Nautilus. Ecco cosa fa lo script: • Come negli script di rotazione “manuale”, processa in un ciclo tutti gli argomenti (file e/o directory) passati al programma. • Se e` un file (-f ), lo passa semplicemente a jhead -autorot. • Se e` una directory (-d), esegue il comando find su questa directory, alla ricerca di file .jpg (non tenendo conto della grafia), e per ciascun file trovato, invoca jhead -autorot. jhead azzera il flag di orientamento come parte di questa operazione. Queste erano le principali caratteristiche che avevo iniziato a cercare (beh, non avevo previsto di arrivare a una “auto” rotazione!), ma dopo questi script ho proseguito per vedere cos’altro potevano fare jhead e jpegtran:

change-mod-date-to-exif.sh #!/bin/bash

#!/bin/bash

while [[ -n "$1" ]]; do # se un file e non una directory if [[ -f "$1" ]]; then jhead -ft "$1" fi shift done

while [[ -n "$1" ]]; do if [[ -f "$1" ]]; then jhead -autorot "$1" elif [[ -d "$1" ]]; then # iname -- case insensitive

Se si copiano i file direttamente da un lettore di schede USB (o da alcune fotocamere che vi permettono di leggere via USB come dispositivi rimovibili, come la Computer Programming n. 181 [None 2009]

47


PROGRAMMING

mia vecchia Olympus ma non come la mia nuova Canon), la data di modifica viene preservata per i file sul computer. Mi piace questa caratteristica poich´e andr`o poi a utilizzare un programma Visual Basic che utilizza le date di modifica per rinominare i file con un timestamp. I miei file di immagini iniziano prevalentemente con AAMMGG HHMMSS. E` utile perch´e mantiene le immagini in sequenza e le identifica in modo univoco. (E vado anche oltre e aggiungo del testo identificativo al prefisso “data ora”). Quando ho provato a importare questo programma in GNOME, ho scoperto con disappunto che aggiornava l’ora di modifica dei file mentre li copiava sulla macchina desktop. Bene, ora potete correggere ci`o con lo script change-moddate-to-exif.sh. Se l’orologio della vostra fotocamera e` impostato correttamente, probabilmente avrete la data in cui ogni immagine e` stata scattata memorizzata nei dati Exif. Jhead ripristiner`a l’ora di ultima modifica del file in base alle informazioni Exif. ------------------------------------

Se la vostra fotocamera memorizza nel file i dati di orientamento Exif potete selezionare tutti i file e utilizzare la funzionalita` di “autorotate” di jhead che ruotera` solo le immagini verticali ------------------------------------

rename-with-exif-date.sh

simile a autorotate.sh. A questo punto si pu`o anche creare facilmente un nuovo script, change-date-andrename-with-exif.sh, che invoca semplicemente gli altri due script in modo da poter modificare la data di modifica del file e rinominarlo con un timestamp in un solo passo.

strip-exif.sh E in ultimo, attenzione: #!/bin/bash while [[ -n "$1" ]]; do # se un file e non una directory if [[ -f "$1" ]]; then jhead -purejpg "$1" fi shift done

Ho messo questo script in una directory di nome attenzione (sotto la directory nautilus-scripts/img) in modo da ridurre la possibilit`a di avviarlo accidentalmente. Questo script elimina tutti i dati Exif da un’immagine, cosa che il pi`u delle volte non si desidera fare. Utilizzo questo script per alcune immagini che carico sul mio sito (http://www.movingtofreedom.org/), in modo da ridurre l’utilizzo della banda e il tempo di caricamento della pagina. Ad esempio, monkey.jpg e` di 51 KB con i dati Exif, e di 44 KB senza. Non una grossa cosa per le immagini memorizzate sul proprio disco rigido, specialmente perch´e di solito le immagini odierne superano 1 MB, ma pu`o essere di aiuto nel caso improbabile (per me!) di un post su slashdot o su digg.

Ancor meglio, quel vecchio programma VB pu`o essere buttato via e possiamo utilizzare jhead per rinominare direttamente il file con la data Exif: #!/bin/bash while [[ -n "$1" ]]; do # se un file e non una directory if [[ -f "$1" ]]; then jhead -nf%y%m%d_%H%M%S "$1" fi shift done

Questo script utilizza un’altra opzione di jhead per rinominare il file con un timestamp AAMMGG HHMMSS. Cos`ı com’`e opera solo su file, ma pu`o essere facilmente modificato per operare anche su directory, in modo 48

Computer Programming n. 181 [None 2009]


Filtri audio ... con Gimp Utilizzare Gimp come un ideale filtro audio digitale

Gianluca Pignalberi

imp viene universalmente utilizzato per la manipolazione di immagini. Tuttavia, con un po’ di creativit`a e un paio di trucchi, pu`o anche essere utilizzato come filtro audio! Ecco come. . .

G

Figura 1: Risposta di frequenza di un reale e di un ideale filtro passa-basso

Filtri audio Se avete familiarit`a con i filtri audio, potete saltare questa introduzione. Per chi non conosce i filtri, ecco una breve spiegazione. Un suono, come tutti i segnali, viene misurato in Hz (Hertz). Questa misura esprime la frequenza del segnale. Pi`u bassa e` la misura, pi`u bassa e` la frequenza. Un filtro e` uno strumento che migliora una o pi`u frequenze del segnale, in base a un criterio. In un mondo ideale, un filtro sopprime completamente le frequenze indesiderate. Sfortunatamente, non viviamo in un mondo ideale. ------------------------------------

Un reale filtro passa basso e` qualcosa che riceve in input un segnale e emette in output le componenti di frequenza piu` basse -----------------------------------Mi concentrer`o su un solo tipo di filtro: il fitro passabasso. Un reale filtro passa-basso e` qualcosa che riceve in input un segnale e emette in output le componen-

ti di frequenza basse. Ad essere pi`u precisi, “attenua” queste frequenze pi`u alte di una frequenza impostata (frequenza di taglio). Come si vede nella Figura 1, il filtro approssima il comportamento teorico. In questo articolo propongo un metodo in tre passi per ottenere un ideale filtro passa-basso per segnala audio. Gimp e` lo strumento principale di questo metodo. Naturalmente, sto un po’ bluffando: devo utilizzare un programma che trasforma un file audio in una immagine idonea. Poi, posso applicare un “filtro passa-basso” a questa immagine e ottenere da questa l’audio filtra-

Computer Programming n. 181 [None 2009]

49


PROGRAMMING

to. Si noti che ho scritto “filtro passa-basso” tra apici: non utilizzer`o Gimp per applicare un filtro passa-basso grafico (ossia, un operatore blur). Ma siate pazienti: tra poche righe sveler`o il “trucco”.

Figura 2: Una schermata che mostra come utilizzare Arse per eseguire l’analisi audio e la sintesi dello spettrogramma

Pre e post-elaborazione audio con Arse Prima di passare a Gimp, l’audio in input deve essere processato. Ho scelto Arse (http://arse.sourceforge.net/) come tool di preelaborazione. Arse, acronimo di “Analysis and Reconstruction Sound Engine”, e` un tool a riga di comando suddiviso in due parti principali: uno spettrografo e un sintetizzatore a spettrogramma. Utilizzer`o entrambi i tool per pre-processare e post-processare un file audio. Nel passaggio di pre-elaborazione fornisco in input un file audio a Arse, che restituir`a in output uno spettrogramma (ossia un’immagine, buona da fornire in input a Gimp). Nel passaggio di post-elaborazione, fornisco ad Arse lo spettrogramma filtrato, per ottenere in output un file audio. ------------------------------------

Sfortunatamente, la generazione dello spettrogramma di un segnale e la successiva sintesi con Arse non porteranno al segnale originale -----------------------------------Sfortunatamente, la generazione dello spettrogramma di un segnale e la successiva sintesi con Arse non porteranno al segnale originale. Ci`o significa che il metodo che propongo e` in teoria perfetto, ma non si pu`o utilizzarlo effettivamente senza accettare qualche trasformazione audio (ad esempio, un suono di basso che viene riprodotto come un suono di piano, o una voce umana riprodotta come voce sintetica). Comunqne, procediamo: un utilizzo intelligente di Arse vi dar`a risultati abbastanza buoni. Non so se esista o meno un tool pi`u efficiente e affidabile di Arse: se cos`ı fosse, utilizzatelo e verificate i risultati; e fatemelo sapere! L’immagine che Arse genera ha le seguenti caratteristiche: 50

• e` a toni di grigio (i pixel neri rappresentano il silenzio); • le righe rappresentano l’analisi di una banda di frequenze; • ciascuna colonna rappresenta 1 secondo del segnale. Nella Figura 2 si vedere the user interaction with Arse, mentre nella Figura 3 e` mostrato un segnale, l relativo spettrogramma e i grafici di sintesi. Arse e` un progetto molto giovane, la versione corrente e` la 0.1. Ha alcune maggiori limitazioni. L’autore le descrive sul sito Web del progetto e nel file README allegato al programma, che fornisce ulteriori informazioni sull’utilizzo e sulle specifiche.

Il filtro passa-basso proposto Una volta ottenuto lo spettrogramma, apritelo con Gimp. Ricordate che la riga 0 dello spettrogramma contiene le informazioni sulla frequenza pi`u alta, e che la riga n contiene quelle della frequenza pi`u bassa. Graficamente, il filtraggio passa-basso di un a “intervallo di frequenze” consiste nel colorare di nero le righe di pixel tra 0 e x, dove x e` la riga dove e` situata la

Computer Programming n. 181 [None 2009]


Figura 3: Analisi e sintesi del file d’esempio drama.wav, un file che fa parte della suite OpenOffice. Da destra a sinistra: segnale originale, spettrogramma e segnale ricostruito

frequenza di taglio. Per farlo, basta selezionare l’opportuna sezione rettangolare dell’immagine, e riempirla di nero. E` tutto. Cos`ı facendo, avrete soppresso le frequenze pi`u alte della frequenza di taglio, senza incidere sulle altre frequenze: proprio ci`o che farebbe un filtro ideale.

Conclusioni In questo articolo ho proposto un metodo (una trasformazione) per ottenere un filtro ideale. Questa trasformazione vi permette di applicare un filtro passa-basso audio attraverso la relativa immagine dello spettrogramma. Sintetizzando l’immagine “filtrata” vi verr`a fornito il corrispondente audio filtrato. Al momento il solo motivo per cui la trasformazione non “funziona” e` per via del tool di post-elaborazione. Una volta che Arse migliorer`a, otterrete un opportuno filtro passa-basso ideale.



RUBRICHE Windows Thread e Posix Thread a confronto

Thread contro Thread Danilo Treffiletti

l titolo e` decisamente da cineteca a rievocare un famoso film del 1979. A differenza del film, qui non parliamo di nessuna causa legale, di nessun abbandono e non ci sono affidamenti di cui parlare. Parliamo di due modi diversi di realizzare lo stesso concetto: il Thread.

I

Il Thread e` una parte atomica di esecuzione di una elaborazione. Un processo, che rappresenta l’istanza in esecuzione di un programma e che comprende oltre al codice del programma stesso anche i dati che sta elaborando, pu`o essere composto da pi`u Thread che possono eseguire in modo autonomo e concorrente condividendo gli stessi dati e lavorando per ottenere lo scopo comune dell’intero processo. I moderni sistemi operativi sono ormai multi-task da parecchio tempo: questo significa che e` possibile eseguire processi diversi in parallelo (poi, in realt`a questo parallelismo pu`o essere reale o virtuale a seconda dell’architettura hardware della macchina che esegue). Molti sistemi operativi, per`o, sono anche multi-threading: permettono ad un processo di dividersi in tante sottoparti autonome che lavorano in parallelo per raggiungere il risultato. Attualmente sono presenti due filosofie diverse di concepire i Thread: la prima e` quella di Microsoft con i Windows Thread, la seconda e` quella nata dalla comunit`a *NIX con i POSIX Thread detti anche PThread. Sul blog e sul forum di Intel sono presenti due articoli in cui si parla a favore di uno o dell’altro tipo di Thread.

I thread di Windows L’articolo sul blog si esprime a favore dei Thread di Windows, affermando che questi sono pi`u comodi da usare in quanto e` presente un solo tipo di dato per Thread, Mutex e segnali e dunque si pu`o usare una sola funzione per creare un blocco su un thread che deve terminare, un mutex che e` bloccato o un evento che deve essere segnalato. Inoltre i segnali sono persistenti e permettono dunque di essere rilevati anche con controlli effettuati dopo che l’evento sia stato segnalato. Infine e` presente la funzione WaitForMultipleObjects che permette di bloccare un Thread in attesa che terminino una serie di Thread, vengano sbloccati una serie di Mutex e arrivi un segnale per una serie di eventi, il tutto invocando una sola funzione. Tutto questo, secondo l’autore dell’articolo, porta ad una maggior eleganza di programmazione.

I thread POSIX L’articolo presente sul forum, invece, considera soprattutto questi punti uno svantaggio dell’implementazione dei Win Thread, a favore dunque dell’uso dei PThread. L’uso di tipi di dati diversi per le tre entit`a migliora la gestione e rende pi`u facile la lettura di codice altrui. Inoltre e` pi`u facile verificare il codice in quanto sono necessarie funzioni diverse per attendere la terminazione di un Thread, lo sblocco di un Mutex o la segnalazione di un evento, evitando dunque errori o confusione. Infine, i segnali persistenti possono essere un peso per il programmatore che deve ricordarsi di resettare lo stato del segnale quando sa che potrebbe servire per un blocco successivo, mentre i segnali POSIX vengono catturati dai Thread in ascolto oppure scartati, evitando di sbloccare Thread che invece dovrebbero bloccarsi in attesa della prossima segnalazione.

Un confronto Personalmente ho usato entrambi i tipi di Thread e devo dire che mi trovo a condividere pienamente le argomentazioni a favore della versione POSIX. Il dover usare tre tipi di dato diverso non causa nessun problema in quanto i tre oggetti sono concettualmente diversi e dunque devono avere significato diverso anche all’interno del codice, avere funzioni diverse e non avere una funzione che permette di attendere un insieme misto di Thread, Mutex e segnali non appesantisce la programmazione ma, invece, rende pi`u facile e veloce il debug e la lettura di codice altrui. Infine l’implementazione POSIX permette la portabilit`a del codice in quanto i PThread sono nati per gli ambienti *NIX e Mac OS, ma e` stato creato un port per ambiente Windows che consiste in una DLL da linkare nel proprio progetto.

Riferimenti 1. Why Windows Threads Are Better Than POSIX Threads di Clay Breshears (Intel) http://softwareblogs.intel.com/2006/10/19/why-windowsthreads-are-better-than-posix-threads/ 2. Why Pthreads are better than Win32 threads di Clay Breshears (Intel) http://softwarecommunity.intel.com/ISN/Community/enUS/forums/post/840096.aspx

Computer Programming n. 181 [None 2009]


Le nuove riviste Infomedia

RUBRICHE

Pensare – Progettare – Programmare

C

ONTRIBUIRE alle nuove riviste e` possibile in molti modi. Proprio mentre scriviamo queste note, sono molti i processi tecnologici, gestionali e editoriali che stiamo affrontando:

• Abbiamo riorganizzato il sistema aziendale a partire da una nuova impronta gestionale. La ’Nuova Infomedia’ si vuole configurare come una Impresa Sociale di Comunit`a, partecipata da tutti coloro che hanno interesse nelle sue attivit`a. • Stiamo raccogliendo tutte le linee guida che hanno permesso negli anni la pubblicazione di libri e riviste per condividere queste competenze con tutti coloro che vorranno essere coinvolti in questa impresa. Questo e` un passaggio molto importante perch´e render`a visibile e trasparente il processo editoriale e permetter`a il convolgimento di tutti coloro che vorranno contribuire anche solo in modo limitato e secondo la propria disponibilit`a. Il nuovo processo editoriale permette a ciascuno, anche con minime competenze, di seguire l’intero processo produttivo ed essere quindi partecipante attivo nella comunit`a. • Abbiamo costruito un sistema (open source) che elimina i fattori di intermediazione classici delle strutture redazionali, e` basato su strumenti classici dello sviluppo software e, crediamo, innovativo e cool. Contribuire e` importante per far sentire la propria voce, per farsi conoscere e anche un po’ per ridistribuire un po’ di quello che dalla comunit`a dei programmatori ciascuno di noi prende ogni giorno. I suggerimenti che in questi mesi abbiamo avuto sono stati determinanti per determinare l’architettura organizzativa adeguata. Dobbiamo adesso essere in grado di seguire con la necessaria costanza una fase costruttiva ed operativa. E` fondamentale proporre nuovi articoli basati sulle proprie esperienze, sulle tecniche pi`u efficaci, sui trucchi che permettono di risolvere problemi particolarmente oscuri, indicare percorsi e semplicemente raccontare le proprie esperienze nella realizzazione di programmi interessanti e significativi. I nostri lettori sono certamente in grado di farlo, se solo il 5% di questi scrivesse un articolo o ci raccontasse le proprie esperienze di programmazione avremmo abbastanza materiale per riempire tutte le riviste per due anni. Infomedia e` la casa editrice dei programmatori e delle software house italiane. Di quelli che ancora credono e combattono per 54

mostrare che l’informatica non e` fatta solo dai grandi e potenti nomi, dalle immense societ`a di intermediazione che sono spesso solo gusci vuoti che per motivi di dimensione o di coinvolgimento possono accedere alle grandi commesse, e che spesso non fanno altro che subappaltare alle societ`a piccole e specializzate o ai singoli professionisti. Le priorita`

Stiamo maturando un’importante esperienza nella costruzione di un modello veramente innovativo di open publishing. L’area principale in cui cerchiamo la collaborazione dei nostri lettori, degli autori che in questi anni ci hanno aiutato e` quella dei contenuti. Adesso che il processo di editing, composizione e impaginazione e` stato riorganizzato, arrivare ad avere un flusso costante di articoli di qualit`a e` il nostro principale obiettivo. Arrivare ad ottenere un flusso costante e volontario di articoli e` quindi oggi la priorit`a pi`u stringente. E` un obiettivo allo stesso tempo semplice, a verificare i numeri necessari e i collegamenti che gi`a abbiamo, ma reso complesso dalla volont`a di assumere quel ruolo di riferimento che una iniziativa come questa deve avere. La possibilit`a che un nucleo limitato di autori bravi possano tenere in piedi questa iniziativa non e` cos`ı remota, al punto che a ben vedere cos`ı hanno funzionato le riviste in questi ultimi anni, e cos`ı spesso funzionano altrove. Ma se l’obiettivo e` la ’pluralit`a’ dell’espressione, la rappresentazione di quanto veramente avviene nella piccola ma vitale comunit`a italiana dei programmatori, ed eventualmente la rappresentazione delle migliori espressioni estere nel campo, la storia cambia moltissimo. Il lavoro da fare si moltiplica, nella ricerca di contatti e di materiali che, per esempio gi`a abbozzati in rete su blog o forum, potrebbero diventare ottimi ed interessanti articoli degni di questo nome. Il lavoro si moltiplica perch`e un ’bravo informatico’, di quelli che oltre a conoscere la professione la sa comunicare in uno scritto adeguato fa spesso molta pi`u fatica a seguire, indirizzare e correggere il lavoro altrui che non rifarlo daccapo da s´e. Eppure questo e` in s´e stesso un impegno che consideriamo utile. Il team che lavora dietro questo progetto e` variegato e, attualmente, deve sopperire alla mancanza di tempo, innanzitutto, e di competenze specifiche su alcuni campi. In questo momento, come sa chi gi`a ci segue sul Web, tutto l’ecosistema che e` stato creato e` (un po’ troppo) variegato, ma questo e` stato necessario per contemperare differenti esigenze e modi di lavorare da parte di chi ha offerto la propria attivit`a in modo volontario pur di far andare avanti questa storia.

Computer Programming n. 181 [None 2009]


RUBRICHE

I servizi che ci sono (e che mancano)

Come sempre accade nelle comunit`a di sviluppatori, i servizi che sono attivati prima, meglio presidiati, sono quelli che servono per le realizzazioni pratiche. Il sito http://the.programmers.net rappresenta attualmente solo una piccola vetrina delle attivit`a che si stanno realizzando e alcune informazioni circa l’iscrizione, le attivit`a, la rete sociale e, ovviamente, le riviste. Siamo alla ricerca di un webmaster. Gli strumenti online che sono stati per ora attivati (trac, SVN, wiki) sono ad uso esclusivo della redazione e sono gestiti in autonomia con la minima formalit`a. Trac: http://trac.xed.it Wiki: http://wiki.infomedia.it

Questi servizi avrebbero ciascuno bisogno di un amministratore dedicato ed esperto. Il lavoro da fare e` poco, infinitesimale: ma e` l’insieme di questi infinitesimi che riempie tutti gli interstizi del nostro tempo libero fino a tarda notte, quindi AIUTO!. E` possibile proporre la propria candidatura usando i moduli che sono online sul sito the.programmers.net nella sezione Riviste/Moduli. ` Il nuovo sito (che c’e)

Il sistema online che ha accompagnato la pubblicazione delle riviste sul web della vecchia societ`a, ancora disponibile su www.gruppoinfomedia.it e` stato sostituito dalla semplice applicazione di una nuova piattaforma di publishing basata su Drupal e iScribd. Sito: http://www.infomedia.it

• La crew web: Si occupa dell’evoluzione degli strumenti web dell’associazione per le realizzazioni editoriali e per la gestione associativa (non assegnato info@programmers.net) L’email (a cui non rispondiamo)

Per mettersi in contatto con i team che stanno lavorando alla realizzazione delle riviste non e` attualmente molto semplice. Siamo pochi e i task della produzione hanno certamente la priorit`a. Non trascuriamo nessuna email, semplicemente spesso non c’`e una risposta alle vostre domande, o ci sar`a nel momento in cui sar`a opportuno. Attualmente per`o nessuno gestisce il flusso delle richieste (pi`u che legittime) degli abbonati. Ci impedirebbe di concentrarci sulle gi`a complesse attivit`a di ’ricostruzione’. Tutte le mail finora utilizzate dalle redazioni Infomedia (insieme ad una spaventosa quantit`a di spam, messaggi commerciali e promozionali, che neppure gli antispam pi`u efficaci abbattono pi`u di tanto) sono ruotate alla vecchia societ`a, i quali ci inoltrano solo i messaggi che ritengono effettivamente interessanti. Abbiamo intenzione di arrivare ad affrontare anche questi problemi, ma fare tutto contemporaneamente non era pensabile. Rimanete sintonizzai, frequentate i siti web ed in particolare: Blog: http://blog.infomedia.it

Il sistema d’impaginazione

Il nuovo sistema d’impaginazione e` disponibile liberamente su Internet. E` possibile scaricarlo e provarlo da: https://www.assembla.com/spaces/turing/

` Il Forum (che non c’e)

Sarebbe invece interessante, per ci`o che riguarda la costruzione dei nuovi servizi e dei nuovi strumenti, l’apertura di un forum online. Le nostre attuali forze ce lo impediscono, ma se qualcuno dei lettori volesse candidarsi all’amministrazione e alla gestione, saremo ben felici di aprire anche questo importante servizio. I coordinatori dei forum dovranno provvedere all’installazione, all’amministrazione e all’upgrade dei sistemi, nonch`e ad un minimo di moderazione dei contenuti inappropriati. Per le candidature e` possibile usare i moduli online sul sito. I team (che ci sono)

Sono tre i team che stanno lavorando: • La crew editoriale: Si occupa dell’evoluzione dello spazio editoriale ed in particolare della redazione delle riviste (Michele Monti michele.monti@infomedia.it). • La crew software: Si occupa dell’evoluzione del software di gestione dell’associazione per le realizzazioni editoriali e per la gestione associativa (Adriano Peluso catonano@programmers.net)

Ovviamente non e` n´e immediato n´e user friendly, per ora, ma avendo un po’ di conoscenze degli strumenti di sviluppo open source (tra cui SVN, python, bash, make, emacs) e un po’ di dimestichezza con il TEX si riesce ad averne ragione. Ovviamente ogni contribuzione e` ben accetta.

Conclusioni Infomedia realizza le rivista dei programmatori italiani di talento, che sanno trovare soluzioni geniali che non sempre sono adeguatamente conosciute, e che spesso sono obbligati a trovare la propria strada al di fuori del panorama italiano, ma non per questo saranno da noi dimenticati. E` importante per noi mantenere unita la nostra comunit`a indipendentemente dalle distanze geografiche. Infomedia e` tutto questo, ma pu`o esserlo solo se tu ci metterai del tuo. E` proprio il caso di dire che in questo momento non dovreste chiedervi cosa Infomedia pu`o fare per voi, ma cosa potete fare voi per Infomedia.

Computer Programming n. 181 [None 2009]

55


Hanno collaborato a questo numero... RUBRICHE

Lorenzo Dal Col

nato a Vittorio Veneto nel 1985 laurea a pieni voti in Ingegneria Informatica all’Universit`a di Trieste, studia per la laurea specialistica. Da 5 anni si occupa di sviluppo di applicazioni Web server con PHP, Java, .NET, MySQL, PostgreSQL e lato client con Javascript, AJAX.Ha sviluppato un robot mobile a comando vocale Linux real-time e Microsoft Windows Server. Si interessa di grafica digitale e web design. Mail Sito

lorenzo.dalcol@gmail.com www.lordalcol.com

Danilo Treffiletti (Urban)

nato nel 1982. Da sempre interessato al mondo dell’informatica e delle nuove tecnologie. Ha frequentato l’I.T.I. e successivamente la facolt`a di Ingegneria Informatica dell’Universit`a di Catania, in cui si laureato nel 2008. stato presente sul web fin dal 1998 con diversi siti di carattere amatoriale e divulgativo. Nel ottobre del 2006 collabora alla fondazione del blog di divulgazione informatica StormedBrains. Blog

http://urbands.net/stormedbrains

Gary Richmond

e` un aspirante esperto della rete con alle spalle una laurea e una specializzazione in Inglese del diciassettesimo secolo, venticinque anni di attivit`a in un ente pubblico e di recente si e` semi-pensionato per godersi i suoi illeciti guadagni.

Infomedia, e dell’impaginazione della stessa. E` attualmente il direttore di ArsTEXnica, rivista italiana di TEX, LATEX e tipografia digitale. Usa software libero per tutto quello che pu`o, e cerca di soddisfare la sua passione per la scrittura contribuendo a riviste di settore. Sito

http://www.freesoftwaremagazine.com/contacts/g.pignalberi

Gianluigi Spagnuolo

ingegnere informatico si occupa di sicurezza e programmazione (Ruby e C#). Si interessa di sistemi operativi UNIX, di compilatori e PLT in generale e partecipa allo sviluppo di numerosi progetti open source. Mail Sito

kirash@infomedia.it http://krsh.info

Emmanuele Somma

programmatore, ingegnere informatico e scrittore, e` da anni uno dei principali animatori della scena del software libero in Italia. Sia ricorda trafficasse con le prime bbs amatoriali gi`a nel ’86, si dice abbia venduto il primo programma GPL in Italia gi`a nel ’94, ha fondato e diretto Linux Magazine nel ’99. Oggi lavora per un autorit`a finanziaria in cui supporta e sviluppa applicazioni scientifico-econometriche con il sotware libero, ma non solo. Mail Sito Blog

exedre@programmers.net http://www.exedre.org http://exedre.xed.it

ed inoltre. . . Scott Carpenter

ha frequentato il movimento free software sin dal 1998 e nel 2006 ha iniziato a impegnarsi in modo pi`u attivo (Moving to freedom). Lavora come sviluppatore/analista software dal 1997, e attualmente si occupa di integrazione di applicazioni enterprise. Sito

Un ringraziamento particolare va anche a: Adriano Peluso, Andrea De Carolis, Daniela Della Porta, Dino Meoni, Donato Marcello Sabato, Francesco Pallanti, Gianluigi Coccia, Luciano Talarico, Maria Letizia Mari, Natale Fino, Noemi Somma, Roberto Galoppini.

www.movingtofreedom.org

Gianluca Pignalberi

dopo la laurea in Scienze dell’Informazione si e` occupato di varie cose, tra cui la programmazione della classe TEX per comporre Free Software Magazine, da cui deriva quella di 56

Computer Programming n. 181 [None 2009]



FIRENZE, 6 E 7 MAGGIO 2009

Better Software è la prima conferenza Italiana dedicata allo sviluppo di software e rivolta a imprenditori e manager del settore.

Sconto del 20% registrandoti online con il codice promozionale

BM3V2D9G

La conferenza porta sul palco i piĂš importanti esperti nazionali e internazionali su programmazione agile, open source, web2.0 e tutte le discipline che contribuiscono alla costruzione di un prodotto stabile, usabile e vendibile.

www.bettersoftware.it


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.