04_aprile2014

98
Inoltre… Network sotto controllo Nulla di ciò che avviene nella LAN può sfuggire al vigile Zabbix Storage a casa tua A confronto cinque soluzioni per creare la tua cloud personale Ti hanno bucato il Wi-Fi! Alcuni router wireless hanno un bug... i pirati lo sanno, e tu? Difenditi così Diventa protagonista nel mondo Linux Recensioni: LG G Flex, il primo smartphone curvo, e la distro Tails PRO Crea, condividi e integra nelle tue pagine Web le mappe di OpenStreetMap Linux Pro 140 - 2014 - Mensile - €5,90 - CHF 13,60 Fortran Il linguaggio più amato dagli ingegneri Scratch Crea un divertente gioco arcade Genie Un modo veloce per gestire finestre e widget ACCADEMIA DEL CODICE 18 pagine di pura programmazione TARIFFA R.O.C. - POSTE ITALIANE SPA - ABB. POST. - D.L. 353/2003 (CONV. IN L. 27/02/2004 N. 46) ART. 1, COMMA 1, S/NA - DISTRIBUTORE: PRESS-DI, MILANO AUTOMOBILI, ELETTRODOMESTICI, TELEVISORI, TELEFONI Tutto può essere attaccato dagli hacker perché oggi tutto è collegato a Internet Senza fili! Fai comunicare Arduino e il PC con il protocollo ZigBee Anonimato in Rete Tutto quello che devi sapere sul funzionamento della rete Tor Raspberry Pi Tre distro per il multimedia, i giochi e il desktop Cartografia Open Source

description

linux magazine

Transcript of 04_aprile2014

Page 1: 04_aprile2014

Inoltre…

Network sotto controllo Nulla di ciò che avviene nella LAN può sfuggire al vigile Zabbix

Storage a casa tua A confronto cinque soluzioni per creare la tua cloud personale

Ti hanno bucato il Wi-Fi! Alcuni router wireless hanno un bug... i pirati lo sanno, e tu? Difenditi così

Diventa protagonista nel mondo Linux

∆ Recensioni: LG G Flex, il primo smartphone curvo, e la distro Tails

PRO

Crea, condividi e integra nelle tue pagine Web le mappe di OpenStreetMap

Linux Pro 140 - 2014 - Mensile - €5,90 - CHF 13,60

Fortran Il linguaggio più amato dagli ingegneriScratch Crea un divertente gioco arcadeGenie Un modo veloce per gestire finestre e widget

ACCADEMIA DEL CODICE

18 pagine di pura programmazione

TARI

FFA

R.O

.C. -

PO

STE

ITAL

IAN

E SP

A -

ABB

. PO

ST. -

D.L

. 353

/200

3 (C

ON

V. IN

L. 2

7/02

/200

4 N

. 46)

ART

. 1, C

OM

MA

1, S

/NA

- DI

STRI

BUTO

RE: P

RESS

-DI,

MIL

ANO

AUTOMOBILI, ELETTRODOMESTICI, TELEVISORI, TELEFONI

Tutto può essere attaccato dagli hacker perché oggi tutto è collegato a Internet

Senza fili! Fai comunicare Arduino

e il PC con il protocollo ZigBee

Anonimato in Rete Tutto quello che devi sapere

sul funzionamento della rete Tor

Raspberry PiTre distro per il multimedia,

i giochi e il desktop

Cartografia Open Source

LXP_cover_140_ZAG.indd 1 28/03/14 12:59

Page 2: 04_aprile2014

1and1.it* 1&1 Server Dedicato X4i a 49,99 €/mese IVA escl. (59,49 € IVA incl.) e 1&1 Server Dedicato A8i a 39,99 €/mese IVA escl. (47,59 € IVA incl.) con contratto della durata di 24 mesi. Contratti disponibili anche con la durata di 12

mesi o di un mese. Costo di attivazione di 49 € IVA escl. (58,31 € IVA incl.). SSD Intel® S3500 240GB a soli 20 €/mese IVA escl. (23,80 € IVA incl.) in aggiunta al prezzo di base di 1&1 Server X4i. Maggiori informazioni sul sito 1and1.it. 1&1 Internet AG, Elgendorfer Str. 57, 56410 Montabaur, Germania. Intel, il logo Intel, Intel Atom, Intel Atom Inside, Intel Xeon e Intel Xeon Inside sono marchi di Intel Corporation negli Stati Uniti e/o in altri Paesi.

(numero verde)800 977313

MESEDI PROVA DEI NOSTRI PRODOTTI

SCELTALA DURATA DEL TUO CONTRATTO

TELEFONATAE PARLERAI CONUN ESPERTO

UN SALTO NEL FUTURO!1&1 SERVER

OPPURE: INTEL® ATOMTM

1&1 SERVER DEDICATO A8iA partire da

LA NUOVA GENERAZIONE 1&1 SERVER

INTEL® XEON®

1&1 SERVER DEDICATO X4i

49,99€/meseIVA escl.*

A partire da

39,99€/meseIVA escl.*

207 x 285+5mm

NOVITÀ: 1&1 SERVER DEDICATO X4i CON IL 30% IN PIÙ DI PERFORMANCE E LA NUOVISSIMA ARCHITETTURA HASWELL!

■ Intel® Xeon® E3-1270 V3 ■ Disponibile con Linux o

Windows■ Rete di 100 Mbps■ Parallels® Plesk Panel 11

■ 4 core con Intel® Hyper-Threading

■ 16 GB di RAM ECC■ Software RAID 1■ Architettura a 64 bit

■ 2x 1TB HDD SATA■ In più, a scelta,

2x 240GB SSD Intel® S3500 a 20 €/mese IVA escl.*

MAPITI1404S1P_207x285+5_KB_46L.indd 1 18.03.14 11:06

Page 3: 04_aprile2014

Linux pro 139 1

Domande alla redazione: [email protected]

Abbonamenti: [email protected]

Arretrati: [email protected]

problemi con il DVD: [email protected]

Sito Web: www.linuxpro.it oppure inviate le vostre lettere a: Linux Pro, Sprea Editori S.p.A.,

Via Torino 51, 20063 Cernusco S/N Telefono: 02.92432.1

contatti

Editoriale

ora trovi Linux Pro

anchesu android

Questione di (in)sicurezzaogni tanto ci piace pubblicare articoli un po’ diversi dal solito, non prettamente

tecnici ma di “scenario”. È il caso di questo numero: abbiamo chiesto a raoul Chiesa, uno dei primi “hacker” italiani e uno dei maggiori esperti di sicurezza del pianeta, di riassumere i pericoli che stanno nascendo con l’avvento dell’Internet delle cose. Con l’arrivo del protocollo ipv6 abbiamo a disposizione abbastanza indirizzi internet da assegnarne uno anche alle lampadine di casa. Questo apre uno scenario affascinante, ma anche preoccupante: è possibile collegare qualunque dispositivo alla rete, dai frigoriferi ai forni a microonde, dai pace-maker alle automobili. Quindi, per esempio, se ci dimentichiamo di accendere lo scaldabagno prima di uscire di casa, possiamo farlo da remoto – via smartphone o dal pC dell’ufficio – in qualunque momento perché abbiamo a disposizione un bel pannello di controllo Web con cui gestire tutti i dispositivi/elettrodomestici della nostra abitazione. Questo è uno dei vantaggi dell’internet delle cose, che grazie alle soluzioni moderne non è più solo un sogno per ricchi... Ma assieme alle nuove possibilità nascono anche insidie sconosciute finora. E non intendiamo solo i problemi di privacy legati ai televisori intelligenti dotati di webcam che ci spiano di nascosto, ma a bug e comportamenti più gravi che potrebbero portare a danni sia fisici sia economici. non vogliamo, però, svelarvi troppo: correte

a leggere l’articolo di raoul e poi diteci cosa ne pensate. Se tutto ciò non fosse sufficiente, assieme a questi “pericoli del futuro” ne evidenziamo uno del presente nell’articolo successivo: molti router wireless si portano dietro da tempo un baco di sicurezza legato al WpS, lo standard per l’instaurazione di connessioni sicure su reti senza fili che tanto sicure non sono. i produttori lo sanno da un po’ ma finora poco è stato fatto... così abbiamo dotato i nostri esperti di un’antenna wireless, di un portatile e di Kali Linux in modo che vi spiegassero come capire se il vostro router è fallato e come comportarvi se così è. insomma, dopo tanta teoria, un po’ di sana pratica. Come pratico è il resto del numero: partendo dalle mappe libere di openStreetMap, passando per Apache, Arduino e Zabbix, si arriva a una ricca Accademia del Codice che questo mese occupa ben 18 pagine. programmare è divertente, oltre che utile, quindi non abbiamo badato allo spazio occupato pur di presentarvi degli argomenti succosi. non ci rimane a questo punto, quindi, che augurarvi buona lettura.

LXP_140_01_editorale 1 31/03/14 16:50

Page 4: 04_aprile2014

2 Linux pro 140

Sommario

SommarioBenvenuti nel centoquarantesimo numero di Linux Pro, la vostra guida definitiva a Linux e al mondo Open Source

linux pro 140 LINUX Pro

In primo piano

Gli attacchi dei criminali informatici arrivano dappertutto. Scoprite l’“Internet of Things” e i relativi aspetti di (in)sicurezza. Dalle Webcam

alle automobili, passando per smart TV, lavatrici con IP e pace-maker…

10

L’aTTacco aLL’InTerneT

DeLLe coSe

08 Domande e risposte su Tor

ABBONATI ALLA VERSIONE DIGITALE

A SOLI 14,90 €DURATA ABBONAMENTO 1 ANNO

sOlO pER pC E MAC

www.myabb.it/digital

LXP_140_02_03_sommario 2 28/03/14 12:01

Page 5: 04_aprile2014

IL DVD IN breVeLaTo a∆ DISTrIbuzIonI∆ Fedora 19 (32 bit)

LaTo b∆ DISTrIbuzIonI∆ Deft 8∆ IPFire 2.13∆ Salix Xfce 14.0.1 ∆ GIocHI∆ Ayon∆ rIVISTa∆ Codice d’esempio Android∆ Codice d’esempio Raspberry ∆ Codice d’esempio Ruby∆ Codice d’esempio Sysadmin∆ BurgerSpace 1.9.2 ∆ NetHogs 0.8.0 ∆ OCRFeeder 0.7.1 ∆ PushOver 0.0.5 ∆ QMMP 0.7.1

Linux pro 140 3

Sommario

04 NewsdeskLe novità del mondo open Source

06 MailserverFilo diretto con la redazione

08 FAQ: Torun importante strumento per l’anonimato online

Approfondimenti 10 Attacco all’Internet delle coseDai pace-maker alle auto, il mondo che ci circonda è sotto scacco

16 Così bucano il Wi-Fi di casaAlla scoperta di uno dei metodi usati per entrare abusivamente nelle reti wireless casalinghe (e non)

22 Raspbian e oltre!Tre sistemi operativi alternativi per rp

26 La storia di GCCTutto su Gnu Compiler Collection

30 Trucchi per sysadminLo Spirito comunitario e le gioie di Awk

L’angolo di Android

36 NewsLe novità in campo Android

37 LG G Flexil telefono che si piega

Recensioni

39 I test del mese

Tutorial

56 OpenStreetMapDiventate contributor delle mappe digitali e condividete i dati online

60 Server WebCon Wordpress e Apache create il vostro sito, anche su una rp

64 Zabbixun’applicazione per il monitoraggio completo della rete

68 ArduinoComunicazioni wireless tra pC e Arduino

Accademia

74 ConcettiEcco come scrivere codice python per la gestione multipiattaforma del file

76 SqueakCreatevi un ambiente di sviluppo nuovo

80 Fortranun linguaggio datato usato nelle scienze, nel computing ad alte prestazioni e nei supercomputer

84 Genieun modo veloce e facile per gestire le finestre GTK e i widget

88 ScratchSviluppate un gioco arcade

92 L’eco dei LUG La mappa dei LuG italiani

94 Guida DVD

Quando trovi questo bollo negli articoli, cerca il software nel DVD

Prodentro il

IL DVD IN breVeLaTo a∆ DeSkToP∆ Mednafen 0.9.28∆ Parcellite 1.1.3∆ DISTrIbuzIonI∆ Mageia 3 (32 bit)∆ Sophos UTM ∆ Untangle 9.4 (32 e 64 bit) ∆ GIocHI∆ PokerTH 1.0.1∆ InTerneT∆ Firefox 21∆ ProFTPD 1.3.4d∆ ProGrammazIone∆ CPPCheck 1.60.1∆ GTKDialog 0.8.3 ∆ LiteIDE∆ rIVISTa∆ Ardour3 3.2 ∆ Avogadro 1.1.0 ∆ Codice tutorial Android ∆ Codice tutorial Ruby ∆ Erebus ∆ FatRat 1.2.0 beta2∆ Safe-rm 0.10 ∆ Xowa 0.6.2 ∆ Plan 9 ∆ Raspbian∆ Arch Linux RP ∆ Android RP ∆ Risc OS

LaTo b∆ DISTrIbuzIonI∆ Linux Mint 15 Cinnamon∆ Linux Mint 15 Mate ∆ Parted Magic

Quando trovi questo bollo negli articoli, cerca il software nel DVD

Prodentro il

IL DVD IN breVeLaTo a∆ DISTrIbuzIonI∆ Kali Linux 1.0.6

LaTo b∆ DISTrIbuzIonI∆ PC-BSD 10.0.1

IL PROSSIMO NUMERO ESCE IL

15 MaggIO

TrisquelTrisquel

LINUX PRO 133 17

Ubuntu libero?Per un occhio inesperto, Trisquel potrebbe sembrare una copia di Ubuntu, eccetto che per l’esclusione dei pacchetti non free che non rispettano le rigorose politiche sul Software Libero rilasciato sotto licenza GNU. Rodríguez, però, è pronto a ribattere che le apparenze ingannano. “Se si vuole semplificare il concetto di distro free, pensando che sia sufficiente estrarre il materiale non libero da una piattaforma come Ubuntu, si commette un grosso errore di fondo. Andare alla ricerca di tutto ciò che non rispecchi le regole del Software Libero in una distribuzione di per sé già funzionante, non è un gioco da ragazzi. Nell’estrazione di ciò che non si vuole mantenere, il rischio di fare dei danni è altissimo”. Rodríguez porta come esempio il caso del kernel Linux-libre, sul cui progetto è basato Trisquel. Per chi non lo conoscesse, Linux-libre è un kernel portato avanti dalla Free Software Foundation Latin America (FSFLA) e consiste nel fornire una versione di Linux completamente libera da qualsiasi codice non free. Il concetto dietro cui si muove Trisquel, quindi, è proprio questo: prendere una distro, analizzarla fin nei minimi dettagli ed estrapolare tutto ciò che ha una licenza proprietaria, sostituendolo con una controparte totalmente libera. A parole è un proposito che potrebbe sembrare tanto semplice, quanto ideologico, ma all’atto pratico il progetto non è indenne da difficoltà. Uno degli aspetti più critici, sta proprio nel garantire agli utenti che la sostituzione

La libera TrisquelLa distro campionessa nella battaglia per il Free Software

La linea che divide il pragmatismo dall’ideologia è sempre sottilissima e il progetto Trisquel GNU/Linux

è forse l’unico che riesce a percorrerla senza mai ondeggiare. Trisquel è sicuramente la distribuzione più usabile tra quelle che aderiscono in toto alle severe linee guida della Free Software Foundation (FSF) e non altera la versatilità di cui l’utente finale gode. Il progetto Trisquel è stato avviato da un gruppo di studenti dell’Università spagnola di Vigo, con l’obiettivo di creare un sistema didattico con supporto per la lingua galiziana. Ben presto l’opera è diventata talmente vasta

Rodríguez. Proprio Rodríguez, parlando alla platea presente a LibrePlanet 2013 in Massachusetts, ha affermato che la distribuzione di Software Libero è una grande responsabilità: “I vostri utenti, oltre a credere in voi, si fidano delle vostre capacità e si aspettano che rispettiate la loro libertà”. “Noi”, continua Rodríguez, “non usiamo

il termine distro come un’arida definizione tecnica per descrivere una versione di un software. La parola distribuzione è qualcosa che implica la massima responsabilità verso chi ci segue e usa Trisquel”.

da superare lo scopo iniziale e portare a un vero e proprio sistema operativo multilingue. Trisquel GNU/Linux ha visto la luce ufficialmente nell’aprile del 2005, quando Richard Stallman l’ha presentata al mondo intero. Il cuore della distro è la vastissima comunità internazionale di appassionati, guidata da un personaggio carismatico qual è Rubén

di un contenuto non free con il suo omologo libero, non danneggi il corretto funzionamento della distro. L’esempio più lampante riguarda i driver. Quando ce ne sono due versioni, una proprietaria e l’altra free, la maggior parte delle distribuzioni, come Ubuntu e Fedora/Red Hat, scelgono la prima. Nel momento in cui si decide di sostituirla con il driver free, bisogna assicurarsi che il componente cui è legata e da cui dipende la sua corretta gestione continui a operare senza problemi. Il team di Trisquel, però, non si limita a sostituire porzioni di codice o software con le controparti free, ma cerca soprattutto di apportare delle migliorie alle aree in cui opera. Jonathan Nadeau dalla FSF, per esempio, ha collaborato con gli sviluppatori di Trisquel per rendere la distro più accessibile agli utenti con problemi di vista. In effetti basta dare un’occhiata a Trisquel 6.0 per rendersi subito conto di come le caratteristiche di accessibilità siano davvero ottime. Di default, infatti, il desktop può sfruttare le peculiarità di Orca, l’applicazione che mediante un sapiente mix di ingrandimenti, sintesi vocale e sistema di scrittura braille, consente agli ipovedenti di usare facilmente le funzioni della distro. Sul fronte dell’usabilità, un’altra miglioria nel desktop di Trisquel sta nell’approccio intuitivo con cui accoglie i nuovi utenti. A onor del vero, ricorda molto da vicino Windows ed è proprio Rodríguez a confermare questa impressione, affermando che non c’è niente di male a prendere spunto dalle idee che funzionano.

“Lo sviluppo di software libero porta con sé una grande responsabilità”

L’ambiente grafico di Trisquel ricorda da vicino quello di Windows. La barra degli strumenti, infatti, ne è l’esempio

Usare Trisquel 6.0Trisquel 6.0 è l’ultima versione della distro basata su Ubuntu 12.04. Come per quest’ultima, la 6.0 rappresenta la versione Long Term Support (LTS) e offrirà la correzione dei bug e gli aggiornamenti per la sicurezza fino al lontano 2017. L’aspetto migliore è sicuramente la sua interfaccia desktop. Anche se la distribuzione viene eseguita su GNOME 3.4, gli sviluppatori - per i motivi che potete leggere nell’articolo - hanno deciso di ripiegare su un ambiente destkop più tradizionale. Nell’edizione principale, trovate LibreOffice 3.5 e il formidabile Abrowser 19, un programma derivante da Mozilla Firefox che è stato ritoccato

per rimuovere il logo e i richiami a qualsiasi software di natura non libera. Al posto del plug-in Flash che lavora sotto licenza proprietaria, è stato usato il player multimediale gratuito Gnash, che può riprodurre senza inconvenienti video HTML5 e visualizzare i file PDF senza alcun add-on. Per installare software aggiuntivo potete utilizzare Synaptic, oppure sfruttare il gestore di pacchetti della distro. Non mancano poi altri esempi di software free come VLC Media Player, per riprodurre video e musica. Se volete installare software proprietari come per esempio Skype, potete farlo tramite Synaptic. Bisogna però

ricordare che Trisquel non integra alcun tipo di supporto per i driver non liberi e quindi il loro utilizzo potrebbe minare la stabilità del sistema e dare luogo a malfunzionamenti. Detto questo, noi non abbiamo avuto problemi a far lavorare Trisquel sulle nostre macchine, riscontrando un notevole miglioramento nel panorama dei driver free. L’installer, infine, è una versione modificata di quello che trovate su Ubuntu. La sua particolarità di essere uno dei sistemi d’installazione più semplici da usare per chi proviene dal mondo desktop ne ha fatto il candidato principale per l’uso in Trisquel.

e non sarà certo l’ultimo). Intorno al 2000, ho cominciato a cercare un’alternativa a MS Office, perché ero veramente stufo della pervasività di Outlook - che faceva sentire la sua presenza anche se non era installato - e della scarsa qualità degli altri programmi, e in particolare di Word e PowerPoint (non sono mai stato un grande utente di fogli elettronici). Nel 2001, ho visto l’annuncio di OpenOffice.org e ho iniziato a utilizzarlo, nonostante la versione 1.0 fosse veramente acerba. La situazione, però, è migliorata sensibilmente con la versione 1.1, al punto da poter cominciare a sostituire MS Office in un numero sempre maggiore di occasioni. Peraltro, la frequentazione - seppure a distanza - della comunità mi ha fatto comprendere come mancasse una strategia di marketing e comunicazione in grado di far conoscere il prodotto a un numero più ampio di utenti potenziali. Nel 2003, mi sono iscritto alle mailing list e ho cominciato a intervenire, e nel 2004 sono entrato nel progetto come responsabile marketing per l’Italia. Ho iniziato immediatamente a scontrarmi con Sun, più che un’azienda un caso umano, e con alcuni membri lungimiranti della comunità che

consideravano il marketing del tutto inutile, ma questo non mi ha fermato: la combinazione tra la qualità del prodotto e un’azione di marketing aggressiva ha portato OOo a raggiungere una quota di mercato superiore al 10% in Italia (i dati sono stimati) e un ruolo sempre più visibile sul mercato.A partire dal 2006, dalla conferenza di Lione, ho iniziato a contribuire al marketing internazionale, tanto che nel 2008 sono diventato uno dei leader del team con la supervisione del budget. In questo modo, ho iniziato a conoscere un numero sempre più ampio di persone, e sono stato coinvolto nelle discussioni sull’opportunità di creare una fondazione indipendente (che sono diventate sempre più fitte a partire dalla conferenza di Pechino nel 2008). Nel 2009, quando Oracle ha acquisito Sun Microsystems, ho commentato dicendo che era la cosa peggiore che sarebbe potuta succedere a OOo (in realtà mi sbagliavo, perché quello che è successo dopo è stato anche peggio). Ovviamente, i colloqui sulla fondazione sono diventati sempre più fitti, e si sono trasformati in un piano di lavoro nel gennaio del 2010. A quell’epoca, ho scritto il marketing plan di LibreOffice (senza sapere che si sarebbe

chiamato così), che - a più di tre anni di distanza - può essere considerato un successo.Nell’estate del 2010 ho lavorato a tempo pieno all’annuncio, poi - come se niente fosse - sono andato a Budapest per la conferenza di OpenOffice, durante la quale c’è stato l’incontro definitivo che ha sancito la nascita di The Document Foundation. Il 28 settembre dello stesso anno sono stato colui che ha “fisicamente” premuto il pulsante di lancio del comunicato stampa che annunciava la nascita del progetto, e da quel momento sono sempre stato il responsabile del marketing e della comunicazione e il principale portavoce del progetto.

LXP: Il Linux Day di quest’anno sarà basato sull’innovazione, un argomento vastissimo e che include la volontà di rimanere al passo con i tempi, fornendo sempre nuovi sviluppi. Quali sono, secondo te, i passi che il mondo Linux deve ancora compiere per continuare a puntare al futuro?IV: In realtà, il mondo Open Source è già fortemente impiantato nel futuro, tanto che la quasi totalità dei telefoni cellulari di ultima

generazione utilizza un sistema operativo che deriva da Linux (Android, ma anche iOS, che ha radici FreeBSD), la totalità degli elettrodomestici intelligenti e dei sistemi di domotica

utilizza Linux Embedded (o qualcosa di molto simile), la maggior parte delle auto dotate di computer di bordo usa sempre Linux Embedded (ve lo immaginate Windows su un sistema frenante?), e infine quasi tutti i supercomputer e un numero sempre più ampio di server utilizzano Linux. Inoltre, non bisogna dimenticare la spinta che ha dato all’innovazione il modello dello sviluppo collaborativo tipico della comunità del Software Libero. Oggi, non esiste una sola azienda in grado di sostenere che il modello di sviluppo chiuso è superiore, dopo che anche IBM e Microsoft - la prima ha inventato il concetto, e la seconda lo ha perfezionato - hanno smesso di dirlo. Linux, e in accezione più ampia tutto il mondo del Software Libero, ha bisogno di maggiore coesione e di una strategia di marketing e comunicazione in grado di contrastare gli investimenti delle grandi aziende. Purtroppo, il frazionamento dei progetti - che in alcuni casi è completamente inutile - è un fatto difficile da comprendere per tutti coloro che sono estranei alla comunità, e rappresenta un fattore di debolezza. Infine, è necessario che il mondo del Software Libero cominci a pensare seriamente a un modello di business sostenibile, perché altrimenti rimarrà sempre ostaggio delle aziende e delle loro strategie di sopravvivenza

nei confronti dell'ecosistema finanziario (perché una strategia basata sul fatturato del trimestre è priva di buon senso e non permette di guardare oltre la punta del proprio naso, per cui privilegia le azioni tattiche rispetto a quelle strategiche). Quindi, bisogna pensare a generare profitti che derivano dal valore aggiunto, e a reinvestirli nello sviluppo, perché le aziende che sponsorizzano il Software Libero “a fondo perso” - come Sun e IBM nel caso di OOo - possono scomparire da un momento all'altro, se un analista si inventa aspettative superiori all'andamento del mercato.

LXP: Innovazione, spesso, significa rompere con il passato, ma anche adottare strategie nuove. A questo proposito puntare alla conquista di un numero di sistemi sempre maggiori, sensibilizzando così l’opinione pubblica alla migrazione verso il Free Software, è senza dubbio un tema innovativo. E non solo in ambito privato ma soprattutto in quello aziendale. Sappiamo che su questo fronte sei molto attivo, quindi ti chiediamo qual è la tua ricetta per innovare?IV: Onestamente, non credo ci sia nessuna ricetta specifica, ma solo l’uso di un po’ di buon senso nella comunicazione. Combattiamo contro nemici potenti, che hanno budget importanti e strumenti per influenzare l’opinione pubblica che vanno ben oltre le nostre possibilità, per cui dobbiamo usare tutte le nostre capacità. Solo aggregando tutti i progetti all’interno di una rete, possiamo riuscire a creare quella massa critica che non abbiamo mai avuto. Dobbiamo mostrare i nostri muscoli, perché solo in questo modo

È il giorno del pinguino

Come ogni anno, il Linux Day, che si terrà a ottobre, propone un argomento cardine su cui ruota tutta l'intera fiera di eventi. Ed è nel 2013 che

l'innovazione sarà al centro dei dibattiti come elemento distintivo del Software Libero, accendendo i riflettori sul motore dello sviluppo di una comunità in continua crescita. Sì, perché nonostante GNU/Linux sia parte integrante del Web e di moltissime infrastrutture enterprise, tanto da essere punto di riferimento per l’innovazione tecnologica, nella vita quotidiana c’è ancora molta difficoltà ad avvicinarsi a una realtà spesso erroneamente percepita per soli addetti ai lavori. Ecco quindi che il Linux Day 2013 vuole essere un’iniziativa rivolta a far conoscere a tutti le potenzialità del Free Software, che in Italia sono ancora un’opportunità quasi del tutto inesplorata. A parlarne con Linux Pro c'è Italo Vignoli, profondo conoscitore del tema e fondatore e consigliere della Document Foundation. Infine un messaggio rivolto ai numerosi LUG che parteciperanno al Linux Day: scriveteci a [email protected] e raccontateci cosa avete fatto! Per conoscere la mappa degli eventi, potete collegarvi alla pagina www.linux.it/eventi o visitare il sito www.linuxday.it, dove troverete tutte le informazioni sulla manifestazione.

LXP: Raccontaci del tuo percorso dai primi passi nel mondo del Free Software fino ad arrivare alla Document Foundation.IV: è tutta colpa, o merito, di Outlook. Io sono

sempre stato un utente abbastanza esigente nel caso della posta elettronica e per questo motivo non sono mai riuscito a usare Outlook, che considero il peggior software mai sviluppato da un quadrumane perché non solo è pessimo sotto il profilo architettonico (il salvataggio di tutte le informazioni in un unico blob va contro ogni sano principio, e contro il buon senso) ma riesce - in un campo dove tutto è standard come l’email - a non adottare nemmeno uno standard (oppure a reinventarlo, peggiorandolo). Quindi, non sono mai stato tra i sostenitori di Microsoft Office, proprio per la presenza di Outlook. Inoltre, quando la quota di mercato

di Microsoft Office ha cominciato a superare percentuali che avrebbero ampiamente giustificato l’intervento dell’antitrust, ho cominciato a chiedermi perché non ci fosse nessun intervento a protezione degli utenti, visto che era evidente che la situazione avrebbe portato Microsoft ad avere un atteggiamento vessatorio nei loro confronti (a differenza di molti, io ho letto la EULA di MS Office). Oggi, è evidente che Microsoft ha goduto di ampie coperture per il suo ruolo di principale fornitore di informazioni del governo statunitense, attraverso programmi come PRISM (che non è certo stato il primo,

È l'innovazione il tema centrale del Linux Day 2013 Ce ne parla Italo Vignoli, fondatore e consigliere

di The Document FoundationSEmPRE AL PASSO COn I TEmPI

“L'innovazione è un fattore che da sempre contraddistingue il Software Libero”

2013

IntervistaIntervista

20 LINUx PRO 133 LINUx PRO 133 21

Gramps Gramps

24 LINUX PRO 133 LINUX PRO 133 25

Scroprite come usare Gramps per creare un albero genealogico e ricostruire la storia della vostra famiglia

Genealogia fai da te

Nella maggior parte dei casi, le conoscenze familiari non vanno oltre qualche grado di parentela. Quando

però si inizia a scavare alla ricerca degli avi più lontani o di parenti che hanno trovato fortuna in altri paesi in epoche passate, le cose si complicano non poco. Quali sono le origini della famiglia? Dove vivevano? Da dove deriva il vostro cognome? La genealogia è l’unica scienza che può dare risposta a queste domande, catalogando, ricercando e studiando tutti i legami famigliari che si sono evoluti nel

tempo. In definitiva è un’attività di ricerca intensiva, accurata e che richiede non solo molta pazienza, ma anche capacità di sintesi e analisi non comuni. Quando le informazioni iniziano a essere molte e le fonti a sovrapporsi tra loro, blocco note e penna non bastano più.

Ecco quindi che entra in campo Gramps, un programma Open Source che vi aiuta nella ricostruzione del vostro albero genealogico. Compatibile con Linux, Mac e Windows, oltre a essere disponibile per diverse distribuzioni, lo troviamo alla pagina ufficiale http://gramps-

project.org/download/. Gramps è stato creato da genealogisti di professione che, grazie alla loro lunga esperienza nel settore della ricerca, hanno dato vita a un programma altamente affidabile. Prima di iniziare, però, è opportuno

“Gramps è stato creato da genealogisti di professione ed è quindi affidabile e preciso”

considerare alcune buone pratiche di ricerca e dedicare un paio di minuti a tracciare le linee base del vostro albero genealogico, seguendo tre semplici e veloci passaggi:1 Ricerca: trovare tutte le informazioni inerenti alla vostra

famiglia, partendo magari dal luogo in cui i vostri avi vivevano o si sono sposati.2 Registrazione: prendere scrupolosamente nota di qualsiasi

informazione che trovate.3 Pubblicazione: realizzare documenti e relazioni che potete

condividere facilmente con altre persone.Quasi sicuramente, la ricerca e la registrazione saranno fonte di numerose informazioni e quindi dovrete dedicargli più tempo. La regola d’oro della genealogia rimane comunque una: fare in modo che tutti i documenti raccolti siano verificabili e oggettivi. Chiunque può creare un albero genealogico basato su supposizioni e prove soggettive. Ben diverso, invece, fare affidamento su riscontri scientifici. Per fortuna Gramps vi renderà la vita molto più semplice, perché il suo compito è proprio ottimizzare l’organizzazione dei lavori di ricerca, registrazione e pubblicazione, diventando così un insostituibile assistente.

I primi passiAlla fine di questo articolo, creerete un albero genealogico di esempio della famiglia Rossi, ma ovviamente l’intento è darvi sufficienti informazioni per usare il programma ricostruendo la vostra genealogia. Dopo aver lanciato Gramps, fate click su Alberi genealogici e poi sul pulsante Nuovo, quindi aggiungete il nome “Famiglia Rossi”. Adesso selezionate Carica albero genealogico, in modo che venga mostrata la finestra principale. Sulla sinistra sono presenti un elenco di categorie, ad esempio Persone, Relazioni, Famiglie e molte altre. Quando cliccate su una di esse, la visuale e la barra degli strumenti cambiano per riproporre le opzioni dedicate al menu che avete scelto. Per creare un albero genealogico si può partire da qualsiasi parente, ma nel vostro caso inizierete da Giovanni Rossi, l’ultimo della famiglia.

Create una fonteIl primo elemento da cui partire è anche il più semplice. Basterà infatti intervistare l’ultimo esponente della famiglia, da cui poi documenterete le parentele più prossime. Se siete voi stessi, basterà che facciate affidamento sulla memoria e vi auto intervistiate. Selezionate la voce Fonti presente nel menu di sinistra, quindi selezionate l’icona a forma di +, denominata Aggiungi. Si apre così l’editor della nuova fonte, in cui inserire tutte le informazioni che otteniamo nel colloquio con Giovanni. Nel campo Titolo scrivete “Intervista a Giovanni Rossi” e in autore inserite “Giovanni Rossi”. In pratica vi state auto intervistando. Nel campo Note scrivete tutte le informazioni rilevanti che

emergono, quindi premete il pulsante OK per confermare. In qualsiasi momento se ne presentasse la necessità, potrete sempre modificare l’intervista facendo doppio click sulla scheda “Intervista a Giovanni Rossi” che trovate sotto la voce Fonti.

Aggiungete una personaAl centro di ogni albero genealogico ci sono sempre le persone, quindi aggiungete il vostro personaggio principale. Sì, avete indovinato, è sempre lui: Giovanni Rossi. Visto che tutte le informazioni che avete in mano derivano dall’intervista fatta a Giovanni, dovete spostare la vostra fonte in una sezione di Gramps dove poter condividere i dati anche da altri punti di vista. Nella barra degli strumenti premete Appunti per aprire l’omonima finestra, quindi spostate al suo interno la scheda “Intervista a Giovanni Rossi” che avete nel menu Fonti. Visto che la sorgente è ora memorizzata negli appunti, potete anche chiudere la finestra. Adesso selezionate il menu Persone e premete il pulsante Aggiungi presente nella barra degli strumenti. Immettete quindi i seguenti dati:

Nome: Giovanni Cognome: Rossi Sesso: Maschio

A questo punto è necessario citare le fonti da cui sono state ottenute le informazioni. Cliccate sulla scheda Citazione fonti quindi, dalla barra degli strumenti di Gramps, selezionate la funzione Appunti, aprendo così la finestra dove avete precedentemente importato le informazioni ottenute dall’intervista di Giovanni. Trascinate “Intervista a Giovanni Rossi” nel campo Citazione Fonti, in modo da aprire un’ulteriore scheda dedicata. Nella parte inferiore, titolata Fonti informazioni condivise, notate come siano già presenti i dati dell’intervista. Nella zona superiore, invece, avete a disposizione nuovi campi da riempire. Potete aggiungere la data in cui è stata fatta l’intervista e il livello di confidenza che si attribuisce alle informazioni ottenute. Mettete quindi Molto alta. Adesso, per dare vita all’albero genealogico, è opportuno aggiungere una foto di Giovanni. Sempre nel menu Persone di Gramps, fate doppio click sulla scheda Rossi, Giovanni, quindi entrate in Galleria. Premete l’icona a forma di + sinonimo di Aggiungi e cercate nel vostro disco fisso una foto da associare alla cartella di Giovanni. Ricordate poi di aggiungere le note sulla provenienza dell’immagine nella scheda Citazioni fonti, presente nell’Editor riferimento oggetto multimediale.

Mediante l’opzione Vista ascendenza, avete una visuale chiara del diagramma genealogico

Quante più persone aggiungete all’albero genealogico, maggiori informazioni dovete inserire. Tra queste, le foto di ogni parente sono molto importanti per accomunare un nome a un volto e quindi ricordare ancora meglio i dati importanti. Gramps non memorizza le immagini, ma solo il percorso scelto nel momento in cui le avete aggiunte. Per evitare di perdere tempo nel cercarle tra gli anfratti dell’hard disk, vi consigliamo di dedicare una cartella alle sole foto da utilizzare. Ricordate: essere precisi è il miglior approccio alla ricerca genealogica!

Cartella dedicata

Prova la tua rivista anche in digitaleProva la tua rivista anche in dioitale

Inoltre…

Il database perfetto

Libertà pura

Cambia desktop!

TizenIl futuro dei dispositivi mobili è sempre più Open Source

AVM Fritz!Box 3390 6 antenne per la massima velocità wireless a 2,4 e 5 GHz in contemporanea

Le applicazioni Web sono più veloci, scalabili e sicure se usi MariaDB

Scopri Trisquel, la distro più fedele ai dettami del Free Software

Scegli l’ambiente grafico giusto per look e funzionalità!

Diventa protagonista nel mondo Linux

∆ Italo Vignoli di Document Foundation ci parla del LinuxDay 2013 ∆ Usare iSCSI

Pro Raspberry Pi Streaming audio e video in casa

AccAdemiA del codice

lightworks Effetti speciali e strumenti per l’editing professionale a tua disposizione

gnome 3Accedi alle opzioni avanzate con Frippery e Gnome Tweak Tool

Ruby on Rails Il framework Web senza difettiFirefox OS Scopri l’emulatore e le sue APIAndroid Gestire texture e touchscreen con OpenGLConcetti Le basi della programmazione a oggetti

programmare!

Linu

x Pr

o 13

3- M

ensi

le -

€5,

90 -

CHF

13,

60

Tari

ffa

r.O

.C. -

PO

sTe

iTal

iane

sPa

- a

bb. P

OsT

. - D

.l. 3

53/2

003

(CO

nv. i

n l.

27/

02/2

004

n. 4

6) a

rT. 1

, CO

mm

a 1,

DCb

mil

anO

- Di

sTri

buTO

re: P

ress

-Di,

mil

anO

L'Accademia del Codice ti svela tutti i misteri dell'arte del coding

LXP_133_cover 3.indd 1 17/09/13 14:41

LXP_140_02_03_sommario 3 28/03/14 12:01

Page 6: 04_aprile2014

NewsdeskOgni mese tutte le novità dal mondo delle aziende e della comunità Open Source

Se hai news da segnalarci o dei commenti scrivi a [email protected]

Cybercrimine

Sebbene il nome evochi i film di James Bond, in questo caso la finzione non c’entra

niente. Infatti stiamo parlando di un’operazione cybercriminale su vasta scala, smascherata da ESET, in collaborazione con varie agenzie. In un rapporto recente, la nota azienda, che si occupa di sicurezza informatica, parla appunto di questa operazione, chiamata Windigo. Negli ultimi quattro anni, sarebbero stati colpiti più di 25.000 server UNIX, di cui almeno un migliaio italiani. L’arma del delitto è un trojan chiamato Linux/Ebury che sarebbe in grado di infettare circa mezzo milione di computer ogni giorno, grazie all’installazione di una backdoor in SSH. Tale backdoor rimarrebbe attiva

anche se cambiamo le credenziali di accesso. Almeno questo è quanto sostiene Marc Étienne Léveillé, capo ricercatore di ESET, che ha lanciato l’allarme. Nel rapporto presentato dall’azienda informatica, viene riassunta l’intera storia, che comincia nell’agosto del 2011 con l’attacco al server di kernel.org. Nel novembre dello stesso anno, viene rilasciata la prima analisi tecnica del trojan. Nell’aprile del 2013 viene invece analizzata una backdoor, chiamata Linux/Cdorked, capace di colpire Apache, Nginx e Lighttpd. La sorpresa però arriva nel giugno successivo, quando si scopre un collegamento diretto tra i due malware. Ma a questo punto i server infettati sono

già più di 7.500 e nel giro di tre mesi diventeranno 12.000. A oggi, risulta creata una massa di spam prodotta dai computer infettati pari a 35 milioni di messaggi.

ESET è una nota software house che si dedica allo sviluppo di soluzioni antivirus per privati e aziende

Raspberry Pi sempre più libera!Tutti conosciamo la Raspberry e molti l’hanno criticata perché la GPU che utilizza ha il driver grafico a sorgenti chiusi. Ma ora si deve usare il verbo al passato, perché Broadcom, la produttrice del chip, ha “liberato” i sorgenti – rilasciandoli sotto licenza BSD – ma, non paga di questa mossa, ha anche promesso 10.000 dollari a chi per primo farà in modo che Quake III Arena giri a una velocità accettabile tramite i driver liberi. Chi si vuole cimentare, legga qui: http://www.raspberrypi.org/competition-rules e prelevi

i sorgenti da: http://www.broadcom.com/support/. La liberazione della parte grafica è un grosso colpo, ma non saremo contenti finché anche l’ultimo bit non sarà Open Source. Guardando al mercato, Freescale, Allwinner e RockChip sono altri tre dei produttori di SoC ARM con parti di software proprietario al quale possiamo dire solo una cosa: “Aprite i sorgenti e noi compreremo le schede basate sui vostri chip, altrimenti continueremo a usare solo Raspberry”. Produttore avvisato, mezzo salvato.

Operazione Windigo

Dei 25.000 server UNIX compromessi, quelli

italiani sarebbero circa un migliaio

Informazione a cura di Studio Storti Srl

Il server di posta più usato è Open Source!Nell’agguerrito mercato della Posta Elettronica e Collaborazione Aziendale si sta facendo strada un importante concorrente dal mondo Open Source.Se i dati ci mostrano ancora in vetta al mercato l’Enterprise Messaging and Collaboration Microsoft Exchange e Lotus Domino, è importante sapere che il terzo prodotto come licenze/utente vendute è Zimbra.Il dato è ancora più importante se valutiamo alcuni aspetti di contesto. Innazitutto è interessante analizzare che i primi tre attori abbiano quote di mercato molto simili con scostamenti inferiori al 50% mentre, lo scostamento dal terzo ai successivi prodotti, sono di un ordine di grandezza. Altro dato fondamentale per la corretta interpretazione dello scenario è riferita al fatto che, nel conteggio della posizione, si sono considerate solo le licenze commerciali di Zimbra Network fino ad ora vendute. Se valutiamo invece gli utenti stimati della versione Open Source di Zimbra, vediamo immediatamente come questi, in numero stimato almeno 4 volte superiore alla

versione a pagamento, posizionino Zimbra Open Source al primo posto assoluto della classifica.Confrontando le differenze sostanziali tra la versione licenziata (Network Edition) e la versione Open Source (Community Edition) di Zimbra, è importante sapere che il prodotto è il medesimo a livello di codice, di versioni e di rilasci. L’unica differenza è che, la versione Network viene distribuita solo

in formato binario ed aggiunge funzionalità enterprise al prodotto come: Backup Full/Incrementale, Integrazione Activesync con device mobili, Multistorage e Amministrazione distribuita. In realtà, anche chi adotta la versione Open Source può arricchire il sistema di queste funzionalità seguendo due strade: attraverso una ricca disponibilità di scripts di comunità largamente disponibili, oppure utilizzare ZeXtras Suite, l’Add-on professionale che consente di portare su Zimbra Open Source funzionalità di livello anche superiore a quelle della versione network. Il backup, proposto in modalità real-time, senza perdita di dati, anzichè in modalità classica full/incrementale, o la Chat integrata non disponibile

nella versione network, ne sono alcuni esempi ed è possibile avere questo e molto altro pagando solo i moduli necessari ad un prezzo estremamente più competitivo.

Rappresentazione artistica della Raspberry Pi, realizzata da John “Confusis” Morrison

4 LINUX PRO 140

LXP_140_04_05_news 4 28/03/14 12:50

Page 7: 04_aprile2014

NewsdeskInform

azione a cura di Studio Storti Srl

Il server di posta più usato è Open Source!Nell’agguerrito mercato della Posta Elettronica e Collaborazione Aziendale si sta facendo strada un importante concorrente dal mondo Open Source.Se i dati ci mostrano ancora in vetta al mercato l’Enterprise Messaging and Collaboration Microsoft Exchange e Lotus Domino, è importante sapere che il terzo prodotto come licenze/utente vendute è Zimbra.Il dato è ancora più importante se valutiamo alcuni aspetti di contesto. Innazitutto è interessante analizzare che i primi tre attori abbiano quote di mercato molto simili con scostamenti inferiori al 50% mentre, lo scostamento dal terzo ai successivi prodotti, sono di un ordine di grandezza. Altro dato fondamentale per la corretta interpretazione dello scenario è riferita al fatto che, nel conteggio della posizione, si sono considerate solo le licenze commerciali di Zimbra Network fino ad ora vendute. Se valutiamo invece gli utenti stimati della versione Open Source di Zimbra, vediamo immediatamente come questi, in numero stimato almeno 4 volte superiore alla

versione a pagamento, posizionino Zimbra Open Source al primo posto assoluto della classifica.Confrontando le differenze sostanziali tra la versione licenziata (Network Edition) e la versione Open Source (Community Edition) di Zimbra, è importante sapere che il prodotto è il medesimo a livello di codice, di versioni e di rilasci. L’unica differenza è che, la versione Network viene distribuita solo

in formato binario ed aggiunge funzionalità enterprise al prodotto come: Backup Full/Incrementale, Integrazione Activesync con device mobili, Multistorage e Amministrazione distribuita. In realtà, anche chi adotta la versione Open Source può arricchire il sistema di queste funzionalità seguendo due strade: attraverso una ricca disponibilità di scripts di comunità largamente disponibili, oppure utilizzare ZeXtras Suite, l’Add-on professionale che consente di portare su Zimbra Open Source funzionalità di livello anche superiore a quelle della versione network. Il backup, proposto in modalità real-time, senza perdita di dati, anzichè in modalità classica full/incrementale, o la Chat integrata non disponibile

nella versione network, ne sono alcuni esempi ed è possibile avere questo e molto altro pagando solo i moduli necessari ad un prezzo estremamente più competitivo.

Voglia di DebianS

ebbene non sia stata ancora presa nessuna decisione ufficiale, la possibilità che il Parlamento europeo adotti

Software Libero nel prossimo futuro è ben più che un’ipotesi peregrina. In particolare, l’attenzione è rivolta al sistema operativo Debian mentre, per quanto riguarda i documenti, il formato più probabile sarà l’ODF (Open Document Format). Queste notizie giungono proprio da uno dei membri del Parlamento: Indrek Tarand, politico e giornalista estone. Inoltre, a quanto riporta il portale joinup.ec.europa.eu, di recente si è tenuta una riunione dell’European Parliament Free Software User Group (EPFSUG) in cui si è proprio affrontato il tema della migrazione verso Software Liberi, in generale, e verso l’ODF, in particolare. Tra l’altro è stato

ipotizzato un percorso graduale per sostituire definitivamente tutti i software proprietari. È evidente che i buoni risultati ottenuti da esperienze precedenti, come quelle del comune di Monaco di Baviera, hanno fatto scuola. LXP

Open SourceErrata corrigeNoi di Linux Pro siamo esseri umani e, nonostante i rigorosi controlli, talvolta ci sbagliamo. Nell’articolo Domina la Raspberry Pi, a pagina 8 del numero 138 c’è un errore nello schema dei collegamenti. Ecco qui sotto quello corretto. Lo schema che abbiamo pubblicato non creava alcun danno ma semplicemente non funzionava. Il responsabile dell’errore è stato naturalmente punito con la massima severità!

Ebbene sì, purtroppo anche Linux Pro sbaglia a volte...

LXP_140_04_05_news 5 28/03/14 12:50

Page 8: 04_aprile2014

NetworkingGent. Redazione di Linux Pro, sono un vostro appassionato lettore e vi scrivo in merito all’articolo Networking apparso sul n.137, che ho trovato molto interessante come argomento e trattato in modo chiaro ed esaustivo dall’autore. Ho fatto tutta la simulazione che ovviamente ha dato i risultati attesi, però per arrivare al termine ho dovuto apportare alcuni cambiamenti che intendo segnalarvi anche a beneficio di altri lettori. Procedo in ordine.1. La distribuzione Backtrack 5 sembra sia stata soppiantata dalla distro Kali Linux di cui ho prelevato la 1.0.6, anch’essa con Wireshark preinstallato.2. Kali Linux si avvia direttamente con il desktop per cui non ho dovuto attivarlo, però mi sono trovato con la rete impostata per ricevere l’IP automaticamente da DHCP per cui a ogni refresh si perdevano le impostazioni fatte da terminale. Per ovviare a questo, attraverso la configurazione di rete da finestra, ho dovuto settare ipv4=Disabled e (per sicurezza non ho verificato l’effettiva necessità) ipv6=Ignore, questo su entrambe le schede di rete di routerB e routerC.3. Tutto bene per il routing senza NAT, ma per chiudere i percorsi con il NAT che modifica l’indirizzo sorgente 192.168.1.100 in 1.1.1.71 ho dovuto aggiungere la seguente impostazione sulla macchina fisica:$ sudo route add -net 1.1.1.0/24 gw 192.168.71.1Senza questo non riuscivo a pingare da clientA la macchina fisica per cui non funzionava nemmeno il Web server.Su quest’ultimo punto mi piacerebbe avere un chiarimento tecnico, nel senso, sono io che ho perso qualche passaggio o si tratta di una dimenticanza nella stesura dell’articolo? Se si tratta di una dimenticanza è corretto il modo con cui ho risolto il problema oppure bisognava adottare una soluzione

diversa? Complimenti per la rivista, grazie per la cortese attenzione e un cordiale saluto.Daniele

RCiao Daniele, lasciamo la risposta a Maurizio Russo, l’autore dell’interessante serie di articoli sul networking di cui parli. 1) La scelta di optare per Backtrack 5 R3 è voluta, nonostante

sia disponibile Kali Linux che sostituisce il ramo 6 di BT, ripensando però la distribuzione sotto un’ottica differente. Il tema del networking può essere complesso senza le giuste basi, e pertanto ho preferito ricorrere a una distro più consolidata (ossia più familiare per il lettore) rispetto a una nata di recente. 2) Corretto. L’indirizzamento statico e quello dinamico basato su DHCP non possono coesistere sulla medesima interfaccia di rete. La soluzione adottata è la migliore, per quanto concerne il nostro ambiente di prova. 3) Senza l’inserimento del comando specificato, clientA riesce comunque a contattare la macchina fisica, la quale tuttavia è impossibilitata (causa mancanza della rotta) a rispondere: - clientA passa il pacchetto al proprio default gateway definito da script (routerB); - routerB NATta il pacchetto e lo passa a routerC, in virtù della rotta definita da script; - routerC, direttamente connesso alla macchina fisica, le consegna il pacchetto (che non viene da questa scartato in quanto sulla porta 80 è effettivamente presente un processo in ascolto, il nostro netcat). Lo scopo dell’ultimo paragrafo dell’articolo, è proprio quello di fornire ciò che in informatica è noto come proof-of-concept: dimostrare il corretto funzionamento del NAT da clientA verso clientD, osservando tramite Wireshark le modifiche apportate dal NAT al pacchetto originale. Ho preferito volutamente sorvolare sulle configurazioni per consentire la risposta della macchina fisica per due motivi: 1. l’assenza, per motivi di semplicità, di un reale Web server sulla porta 80 (netcat non si comporta come un processo “intelligente”, in quanto in assenza di input da riga di comando si limita a ricevere e stampare a video la richiesta HTTP inviata dal browser in esecuzione su clientA, e pertanto l’invio di una risposta a clientA peraltro da scrivere secondo le regole del protocollo HTTP, richiederebbe l’intervento dell’utente); 2. la necessità di far focalizzare il lettore sul comportamento del NAT, dando per assodato le nozioni sul routing introdotte nella prima parte dell’articolo (e, in effetti, le domande poste nella mail di richiesta di chiarimenti, acute e calzanti, dimostrano che l’obiettivo è stato raggiunto). L’assenza di risposta da parte della macchina fisica può essere rilevata anche dalle immagini che accompagnano l’articolo: non a caso le fig. 17,18 e 19 mostrano una serie di richieste di connessione (pacchetto TCP con flag SYN attivo) inviate da clientA verso la macchina fisica, ma non mostrano alcuna risposta pervenuta da quest’ultima. Laddove si voglia “chiudere il cerchio”, consentendo la raggiungibilità di clientA da parte della macchina fisica, è possibile ricorrere al comando segnalato ($ sudo route add -net 1.1.1.0/24 gw 192.168.71.1). Ricambio con i ringraziamenti per le osservazioni inviate!

Scriveteci!Se avete dei dubbi di natura tecnica o dei commenti inviate una e-mail a [email protected] oppure spedite una lettera al seguente indirizzo: Linux Pro - Sprea Editori S.p.A., Via Torino 51, 20063 Cernusco S/N (MI) Invitiamo inoltre tutti i lettori a partecipare al nostro forum che si trova all’indirizzo Web www.linuxpro.it, oppure a collegarsi al nostro canale IRC #lxp ospitato dalla rete irc.freenode.net.

PostaI nostri esperti offrono ogni mese i loro consigli di programmazione e di amministrazione del sistema

L'invio alla redazione di qualsiasi materiale editoriale (testi, fotografie, disegni, etc.),

su qualsiasi supporto e tramite qualunque canale (es. posta ordinaria, e-mail, facebook, sito Web,

etc.) deve intendersi

- sia quale presa visione, nel colophon della rivista, dell'Informativa ex art. 13 d.lgs. 196/03, nonché

quale consenso espre sso al trattamento dei dati personali ai sensi dell'art. 23 d.lgs. 196/03 da

parte della Sprea Editori S.p.A.;

- sia quale espressa autorizzazione - in qualità di titolare dei diritti d'autore e di utilizzazione

economica, nonché eventualmente di immagine (se del caso anche in qualità di esercente la patria

potestà sul minore raffigurato e/o ripreso nelle immagini) -, a titologratuito e in via definitiva, alla

libera utilizzazione del predetto materiale da parte di Sprea Editori S.p.A., per qualsiasi fine e con

qualsiasi mezzo, e comunque, a titolo di mero esempio, alla pubblicazione gratuita su qualsiasi

supporto (cartaceo e non) di titolarità della stessa Sprea Editori S.p.A. e/o delle altre società in

qualunque modo ad essa collegate, nonché per qualsivoglia altro fine, con autorizzazione altresì

all'elaborazione, all'adattamento, alla trasformazione e a ogni altra modificazione considerati

opportuni a discrezione della redazione. Resta inteso che il materiale inviato alla redazione non

potrà essere restituito ed entrerà a far parte dell'archivio della redazione a titolo definitivo.

6 LINux PRo 140

LXP_140_06_posta 6 27/03/14 14:52

Page 9: 04_aprile2014

Sei certificato OpenStack? di Randy Russell, Director of Certification in Red Hat

Randy RussellRandy Russell è Director of Certification in Red Hat, Inc., principale fornitore

di soluzioni Open Source. Randy ha guidato lo sviluppo degli esami per le certificazioni Red Hat Certified Engineer (RHCE) e Red Hat Certified

Technician (RHCT), così come dei test performance-based Certificates of Expertise che condicono alle credenziali Red Hat Certified Architect (RHCA),

Red Hat Certified Security Specialist (RHCSS), e Red Hat Datacenter Specialist (RHCDS). Randy ha inoltre supervisionato lo sviluppo del

curriculum Red Hat fino al 2007, per dedicarsi successivamente alla certificazione. Prima di entrare in Red Hat nel 1999, Randy era System

Administrator, programmatore e economista presso una società di consulenza specializzata in economia ambientale.

Oggi si sente spesso dire che OpenStack è il nuovo Linux. E se penso ai 15 anni

di offerta di formazione e certificazioni Linux, devo dire che trovo delle similitudini tra le due tecnologie. Secondo un recente sondaggio IDG Connect presso i decisori aziendali, la sfida più significativa che un’impresa deve affrontare quando adotta OpenStack è la mancanza di competenze tra il personale IT. Red Hat ha aperto la strada per favorire l’adozione del sistema operativo Open Source Linux in azienda e oggi siamo posizionati altrettanto bene per replicare questo successo con l’infrastruttura cloud e OpenStack. Attraverso un programma di formazione e certificazioni globale basato su prove pratiche abbiamo aiutato le aziende di tutto il mondo ad adottare con

Date e corsi OpenStack già disponibiliVuoi essere tra i primi a ottenere la certificazione di amministratore di sistema Red Hat OpenStack? Qui di seguito le date dei corsi e degli esami:

CL210 Red Hat OpenStack Administration (Corso in Aula)Giugno 30 - Luglio 3, 2014Novembre 3 - 6, 2014

CL210VT Red Hat OpenStack Administration (Virtual Training)Giugno - 20, 2014Settembre 22 - 26, 2014

CL210R Red Hat OpenStack Administration-ROLE (e-learning)Scegli tu quando fare il corso accedendo alla nostra piattaforma di e-learning

EX210 Red Hat Certified System Administrator in Red Hat OpenStack ExamLuglio 3, 2014 Novembre 6, 2014

EX210K Red Hat Certified System Administrator in Red Hat OpenStack Kiosk ExamSostieni l’esame quando preferisci iscrivendoti a una sessione individuale KIOSK. Il corso CL210 e l’esame EX210 sono disponibili, come gli altri corsi Red Hat, anche in modalità On-site, ovvero presso la sede del cliente. Non esitare a contattarci per maggiori informazioni.

I corsi sono soggetti a disponibilità e le date potrebbero variare. Per maggiori informazioni, verificare il calendario aggiornato all’indirizzo: www.europe.redhat.com/training/dates/

Roadmap e corsi OpenStack in fase di sviluppo

Neutron Networking with Red Hat Enterprise Linux OpenStack Platform (CL306)

Swift Object Storage with Red Hat Enterprise Linux OpenStack Platform (CL312)

Apache Qpid Messaging for Red Hat Enterprise Linux OpenStack Platform (CL314)

Troubleshooting Red Hat Enterprise Linux OpenStack Platform (CL342)

High Availability with Red Hat Enterprise Linux OpenStack Platform (CL332)

Materiale pubbliredazionale a cura di Red Hat

successo Red Hat Enterprise Linux, ora è nostra intenzione fornire lo stesso livello di formazione, certificazione e supporto alle imprese che desiderano implementare Red Hat Enterprise Linux OpenStack Platform. Ciò che c’è di diverso in OpenStack rispetto al Linux di 15 anni fa è che non dobbiamo convincere le persone circa i vantaggi dell’Open Source. Una volta le aziende erano molto caute circa l’adozione di tecnologie Open Source, oggi tale scetticismo non c’è più. Anzi, a mano a mano che OpenStack si diffonde sul mercato, sono sempre più numerose le imprese che desiderano implementarlo. I programmi di formazione e certificazione di Red Hat continuano ad ampliarsi di pari passo con la domanda di tecnologia OpenStack. Nel corso del 2014, Red Hat estenderà il curriculum

OpenStack con nuovi corsi focalizzati su neutron networking, swift object storage, messaggistica, troubleshooting e alta

disponibilità nel tentativo di supportare la domanda di professionisti con una maggiore competenza sulla tecnologia OpenStack.

LXP_140_xx_redazionale.indd 38 27/03/14 16:07

Page 10: 04_aprile2014

FAQ Tor Tor FAQ

8 Linux pro 140 Linux pro 140 9

D Che cos’è Tor e che cosa ci fa quella strana cipolla nel logo?

R Tor (www.torproject.org) è un software gratuito che rende molto più facile navigare

anonimamente sul Web. Quanto alla cipolla, ci arriveremo più avanti.

D Io non ho niente da nascondere, non sono né un criminale né una spia:

a che cosa mi serve Tor?

R Certo, soltanto James Bond è in pericolo di vita se la SpECTrE riesce a intercettare le sue

comunicazioni, il resto di noi comuni mortali non

vivete, ritiene che siate in grado di pagare di più. in alcuni casi può perfino rifiutarsi di servirvi. Se vi sembrano rischi poco realistici o attività troppo ripugnanti per essere vere, pensate ai blocchi per i codici regionali dei DVD e ai siti di streaming a cui è impedito l’accesso da specifici paesi.

D E dove vanno a prendere questo tipo di informazioni?

R A ogni computer collegato a internet viene assegnato un indirizzo ip (internet protocol)

unico, che ha una correlazione piuttosto stretta con la posizione geografica del computer, il singolo utente

rischia così tanto. L’idea di spiare qualcuno per il puro gusto di farlo è ridicola, roba da fantascienza. Sono altre le ragioni per cui l’anonimato online è importante. per esempio, può tutelare le persone normali da rischi come comportamenti sleali, l’esclusione da determinati servizi o la pubblicità eccessivamente invasiva.

D Interessante. Puoi fare qualche esempio concreto per i nostri lettori?

R in generale, un negozio online può esigere un prezzo più alto per merci o servizi

semplicemente perché, scoprendo chi siete o dove

TorAbbiamo ricevuto una email che descriveva un importante strumento per l’anonimato online. può darsi che il mittente sia Linux pro... ma non ne siamo sicuri

Alcune domande su...

LXP_140_08_09_LXF179.woe 8 27/03/14 18:30

Page 11: 04_aprile2014

FAQ Tor Tor FAQ

8 Linux pro 140 Linux pro 140 9

e il servizio internet da lui utilizzato. Tutti i pacchetti che inviate su internet contengono gli indirizzi ip, perfettamente visibili, del computer di partenza e di quello di destinazione.

D Queste informazioni sono sempre perfettamente visibili? È davvero necessario?

R Certo! pensateci un attimo: se gli indirizzi non fossero sempre disponibili in forma

non cifrata, in un formato standard, in una posizione specifica (il cosiddetto header del pacchetto) e separati dal resto dei dati, come farebbero i vari router situati tra voi e il sito a sapere dove indirizzare la vostra richiesta relativa a una pagina specifica e quindi a inviare tale pagina a voi e a nessun altro?

D Capisco. Queste informazioni sensibili non possono essere cifrate, altrimenti

i pacchetti andrebbero persi.

R Esattamente. in tutti gli esempi che ho citato, però, le ‘vittime’ vengono identificate in modo

indiretto, semplicemente controllando da o a quale sistema si connettono. per questo anche i cittadini comuni possono avere validi motivi per mantenere riservato ciò che fanno o dicono ma anche il luogo in cui o da cui lo fanno.

D In che modo Tor contribuisce a risolvere questo problema?

R Tor fa sì che tutti i vostri pacchetti passino per un minimo di tre server Tor diversi, prima

di procedere verso la loro destinazione finale.

D E come può questo rendermi anonimo, visto che gli indirizzi IP non possono comunque

essere cifrati?

R i server di questa catena, che nel gergo di Tor si chiamano nodi o relay, vengono scelti

in modo casuale a ogni connessione e sostituiti ogni 10 minuti per impostazione predefinita. inoltre, semplificando un po’, il client Tor cifra i dati e l’indirizzo di destinazione mediante una chiave nota solo all’ultimo nodo. il client inserisce quindi i dati cifrati, insieme all’indirizzo ip dell’ultimo nodo, in altri pacchetti inviati al nodo intermedio. Questa nuova mole di dati viene cifrata con una chiave diversa, nota solo a questo server intermedio. Quindi...

D Ho capito! Il risultato finale viene cifrato con la chiave del primo nodo e quindi inviato!

R più o meno. inoltre, Tor riduce al minimo la latenza dei pacchetti e garantisce la loro

integrità dall’invio alla ricezione; la sua caratteristica principale, tuttavia, è questo sistema di routing a più livelli, simili agli strati di una cipolla (infatti Tor significa The Onion Router, il router cipolla). Mettendo da parte per un momento i nodi di uscita, ogni relay di una catena Tor riceve pacchetti che solo quel relay è in grado di decifrare, che contengono bit cifrati mediante un’altra chiave e indirizzati a un computer scelto a caso. perciò, non può scoprire che cosa contengono i pacchetti, dove sono destinati

D Ci sono altri rischi ai quali Tor non può effettivamente fare fronte?

R Semplificando un po’, immaginate un sito che venga visitato solo la domenica, diciamo

da mezzanotte all’una. un osservatore potrebbe essere più o meno sicuro che il visitatore del sito siete voi se il vostro computer domestico è l’unico a trovarsi online a un’ora specifica. per quanto improbabile possa apparire, questo tipo di analisi delle tempistiche è un tipo di sorveglianza contro la quale Tor non è realmente efficace.

D Fino a che punto possiamo quindi fidarci tranquillamente di Tor?

R Secondo diversi soggetti indipendenti e affidabili, il codice sorgente di Tor non contiene alcuna

backdoor. Qualunque tentativo sistematico di violare l’anonimato di tutto il traffico via Tor a livello mondiale sarebbe pressoché impossibile, perfino per un’agenzia di spionaggio super-segreta con un governo alle spalle e montagne di denaro…

D Dicci qualcosa di più sui relay: è legale gestirne uno?

R Teoricamente dovrebbe essere legale, anche se non è mai stato sancito da un tribunale.

per saperne di più, leggete le FAQ legali sul sito di Tor (http://bit.ly/16IA54i), soprattutto se avete intenzione di gestire un relay di uscita.

D Perché? Qual è quindi la differenza tra i due tipi di nodi?

R È praticamente certo che prima o poi qualunque relay di uscita di Tor finisca per

inviare traffico illegale su internet. Dal momento che il relay in questione viene registrato come fonte del traffico in questione, il suo amministratore sarà il primo a ricevere una visita dalla polizia o a essere posto sotto una più stretta sorveglianza.

D I nodi intermedi, invece, sono molto più sicuri… vero?

R Sì… con le avvertenze che ho già indicato! oltre a essere molto più difficili da associare

a pacchetti illegali, i titolari dei nodi intermedi possono sempre sostenere di non avere modo di sapere che cosa stanno trasmettendo.

D Mi hai convinto, lo voglio! Qual è il modo migliore per iniziare a usare Tor?

R Trovi Tor Browser Bundle sul sito ufficiale del progetto (www.torproject.org).

Si tratta di una versione ‘blindata’ di Firefox che può essere utilizzata in Linux, Windows e Mac da chiavetta uSB, che utilizza Tor e HTTpS per impostazione predefinita, senza JavaScript o plug-in. una soluzione migliore, comunque, consiste nell’utilizzare una distribuzione Linux sicura in grado di integrare questo pacchetto con altri software gratuiti che potenziano la sicurezza. per i cellulari Android, il mio consiglio è di provare il proxy Tor denominato orbot. LXP

ad andare o da dove provenivano inizialmente. in più, anche se uno dei nodi dovesse guastarsi o scomparire, il sistema rimarrebbe comunque sicuro.

D Un momento. Qual è la differenza fra Tor e le reti virtuali private o VPN?

R Ci sono diverse differenze. Le Vpn creano dei canali diretti e semi-permanenti

tra computer lontani tra loro, facendoli comportare come se fossero connessi direttamente l’uno all’altro. Le Vpn vengono spesso utilizzate per integrare più uffici separati ma appartenenti alla stessa azienda. Quando un computer di una rete Vpn svolge il ruolo di proxy per il resto di internet, permette a tutti gli altri di raggiungerlo, anche qualora i collegamenti diretti siano bloccati o soggetti a sorveglianza.

D Dunque, qual è la differenza tra questo sistema e Tor?

R una Vpn costituisce un modo per utilizzare servizi Web che richiedono connessioni veloci,

perché non si serve di nodi intermedi come Tor. inoltre, alcuni provider e governi bloccano in linea di principio tutti i nodi Tor che incontrano ma non tutte le reti Vpn. L’inconveniente di una Vpn è che occorre essere autorizzati per usarla o, in alternativa, crearsene una per sé. per contro, Tor è completamente decentrato: non è possibile bloccarlo completamente e per usarlo non occorre l’autorizzazione di nessuno.

D Tor è quindi sufficiente per garantire l’anonimato online?

R nemmeno per sogno! Tor è necessario ma tutt’altro che sufficiente. Se tu fossi

un detective e io cambiassi treno a ogni stazione della metropolitana per nascondere la mia destinazione, come faresti a scoprire quando mi reco in un determinato posto?

D Potrei piazzarti un trasmettitore in tasca o collocare in ogni stazione della

metropolitana delle persone incaricate di contattarmi non appena ti vedono...

R Giusto! Tor è vulnerabile a tutti gli equivalenti digitali di queste strategie. i cookie del browser,

per esempio, sono tutto ciò di cui un sito ha bisogno per riconoscervi. Analogamente, se un qualsiasi software presente nel vostro computer invia il vostro vero indirizzo ip a terze parti, Tor non può farci nulla.

D Chiaro. E a proposito delle ‘stazioni della metropolitana’ usate da Tor?

R i nodi di uscita di Tor, che i vostri dati utilizzano per raggiungere la loro destinazione finale,

possono essere monitorati. Anzi, sarebbe decisamente strano se alcuni governi non controllassero già ora dei nodi per utilizzarli come trappole. La soluzione consiste nell’usare sempre Tor in combinazione con il protocollo HTTpS. Questo garantisce una cifratura che copre l’intero percorso tra voi e tutti i siti da voi visitati.

LXP_140_08_09_LXF179.woe 9 27/03/14 18:30

Page 12: 04_aprile2014

10 Linux pro 140 Linux pro 140 11

Era da molto tempo che, insieme alla redazione di Linux pro, avevamo deciso di scrivere un articolo sulla cosiddetta “internet of Things” e i relativi aspetti

di (in)sicurezza. in questi ultimi dodici mesi ho quindi

viaggiato per partecipare a svariate conferenze hacker, tra l’Asia e l’Europa, parlando di persona con ethical hacker e security researcher i quali stavano lavorando su diversi argomenti legati all’internet of Things. Le informazioni raccolte,

i dialoghi con gli amici hacker e guru internazionali, e gli svariati “poC” (Proof of Concept) a cui ho potuto assistere sono decisamente preoccupanti: cerchiamo di capire insieme qual è lo stato dell’arte e che cosa sta veramente accadendo.

Dalle Webcam alle automobili, passando per gli smart TV le lavatrici con IP e i pace-maker…

L’ATTACCO ALL’inTErnET dELLE COSE

L’autoreraoul Chiesaraoul “nobody” Chiesa, classe ‘73, è il primo e più famoso ethical hacker italiano. presidente di Security Brokers SCpA, ricopre diversi ruoli istituzionali tra cui il Comitato Direttivo e Tecnico-Scientifico del CLuSiT (Associazione italiana per la Sicurezza informatica), membro del permanent Stakeholders Group dell’EniSA (European Network & Information Security Agency), Board of Directors del capitolo italiano di oWASp e del Comitato Tecnico di Aip/opSi, nonché Special Advisor sull’Hackers profiling per le nazioni unite presso l’uniCri.

Hacking

LXP_140_10_15_feat_hacking 10 28/03/14 12:50

Page 13: 04_aprile2014

Hacking

10 Linux pro 140 Linux pro 140 11

Un primo aspetto da analizzare, prima di presentare i risultati di alcune delle ricerche fatte, è il protocollo iP. Come tutti sappiamo, lo “spazio” disponibile con ipv4

(l’attuale versione del protocollo ip) è praticamente terminato. Questo è il motivo principale della transizione verso ipv6: il mondo ha bisogno di nuovi indirizzi iP. ip - internet protocol, è la “lingua” con la quale computer e oggetti intelligenti comunicano fra loro. nella versione in cui lo utilizziamo sin dalla nascita di internet, la versione ipv4, è in grado di collegare circa 4,3 miliardi di dispositivi. una cifra apparentemente enorme, che certamente sembrava “sufficiente a tutto” quando, diversi decenni fa, Arpanet progettò l’attuale rete internet. La crescente popolazione di internet, però, sostenuta dal sempre maggiore numero di persone che si collegano alla rete e dal numero di dispositivi intelligenti interconnessi - telefoni, automobili, sensori e chi più ne ha più ne metta – ha superato ormai da tempo il limite massimo (tecnicamente si chiama spazio d’indirizzamento) messo a disposizione dal protocollo ipv4. All’inizio del 2011 gli indirizzi ip disponibili sono terminati e da quel momento i collegamenti avvengono grazie a tecnologie di condivisione e conservazione degli indirizzi ip; tecnologie che, quando sfruttate molto, introducono problemi e malfunzionamenti. niente panico, però: la soluzione esiste e sta prendendo piede. Senza clamore, invisibilmente ma inesorabilmente, iPv6, la nuova versione del protocollo ip si sta diffondendo a macchia d’olio. La sua capacità permette di interconnettere un numero enorme di dispositivi: pari a poco più di 3.4 seguito da 38 zeri o, per rendere meglio l’idea, un numero sufficiente a dare più che un indirizzo ip a ogni granello di sabbia contenuto sulla crosta terrestre per una profondità di oltre un chilometro. La migrazione al nuovo protocollo è già iniziata e diversi paesi europei hanno già una significativa percentuale di utilizzo. in Svizzera, per esempio, un utente residenziale su dieci già lo utilizza. in molti casi l’utilizzatore finale non si accorge nemmeno della transizione, che avviene in maniera completamente trasparente. Da un punto di vista di sicurezza il panorama non peggiora, ma non migliora:

semplicemente cambia. Alcuni attacchi, il phishing fra questi, sono indipendenti dal protocollo ip e restano invariati in efficacia e gravità. Altri saranno più difficili da portare a termine, e altri ancora potrebbero essere invece facilitati con il nuovo protocollo, che a dire il vero incorpora molti accorgimenti di sicurezza frutto di venti anni di esperienza nell’utilizzo della vecchia versione del protocollo ip. Vero è che, lavorando quotidianamente con aziende private e istituzioni, diversi sono già stati i casi di realtà che hanno subìto una violazione e furto di dati, filtrati attraverso ipv6, semplicemente perché i device di sicurezza delle vittime non erano configurati per proteggersi anche da attacchi lanciati attraverso ipv6, mentre i dispositivi (router, switch, firewall, sistemi operativi) automaticamente si erano già “adattati” al nuovo protocollo oppure, in altri casi, essendo compatibili con il nuovo protocollo, di “default” accettavano connessioni ipv6. Connessioni che, come detto poc’anzi, spesso non erano monitorizzate, presidiate o controllate, né tanto meno regolate. per maggiori approfondimenti sulla tematica ipv6 rimandiamo alla sezione del rapporto CLuSiT 2013 scritto da Marco Misitano e reperibile all’indirizzo http://misitano.com/ipv6.

il CLUSiT e il suo rapporto annuale sulla sicurezza iCT in italiail CLuSiT è l’Associazione italiana per la Sicurezza informatica, un ente no-profit fondato nel 2000, con sede presso l’università degli Studi di Milano. il CLuSiT a oggi conta più di 500 soci, sia singoli individui, professionisti dell’iCT Security, che aziende, le quali operano nel settore dell’information Security. oltre ai “Quaderni CLuSiT”, ricerche monotematiche e quindi focalizzate su singoli argomenti, oltre a diverse altre pubblicazioni e al materiale proveniente dai seminari formativi CLuSiT (gratuiti per i Soci), dal 2011 il CLuSiT pubblica il “rapporto CLuSiT sull’iCT Security in italia”, un profilo neutrale, indipendente e approfondito sullo status della sicurezza delle informazioni nel nostro paese, frutto del lavoro dei soci CLuSiT e con contributi esterni importanti, tra cui segnalo la polizia postale e delle

Telecomunicazioni. La tematica ipv6, alla base della “internet of Things”, è stata affrontata da Marco Misitano nel rapporto 2013, mentre il rapporto 2014 (che sarà presentato ufficialmente dal 18 al 20 marzo a Milano, durante il Security Summit), affronta diversi temi verticali. il rapporto 2014 analizza gli eventi di cyber-crime e incidenti informatici più significativi del 2013 e le tendenze per il 2014. Contiene inoltre i risultati di un sondaggio che ci ha consentito di studiare le tendenze del mercato italiano dell’iCT Security, individuando le aree in cui si stanno orientando gli investimenti di aziende e pubbliche Amministrazioni, ed è completato da numerosi focus on specifici su temi caldi del momento, dai tablet ai Social network, dalle questioni del management della sicurezza a quelle della

formazione, tutti temi già affrontati dai precedenti rapporti CLuSiT, ma che per la loro straordinaria dinamica ed evoluzione rappresentano scenari completamente nuovi. Frutto di un lavoro di analisi e ricerca che ha impegnato nel 2013 un centinaio di professionisti, tra cui l’autore di questo articolo, e coinvolto oltre 200 aziende, il rapporto rappresenta un importante punto di riferimento per tutti coloro che operano nel settore, e per quelle persone che si stanno iniziando a interessare di infoSec e vorrebbero saperne un po’ di più. il rapporto viene presentato ogni anno a giornalisti, politici, vertici delle istituzioni italiane, funzionari della pA legati al mondo iCT e ai Cio, CSo e CiSo di Grandi Aziende. il rapporto 2014 è stato presentato a Milano a marzo e verrà aggiornato durante l’anno.

iPv4 vs iPv6

LXP_140_10_15_feat_hacking 11 28/03/14 12:50

Page 14: 04_aprile2014

Hacking

12 Linux pro 140 Linux pro 140 13

Ma l’ipv6 è anche il protocollo ideale per quella che chiamiamo “l’internet delle cose”, una gigantesca ragnatela globale, il cui obiettivo è connettere, mettere

online, tutto quello che possiamo immaginare: smartphone, fotocamere digitali, smart TV, impianti industriali (SCADA e industrial Automation), automobili, lavatrici e frigoriferi, pace maker e pompe di insulina… Già oggi la presenza del protocollo ip nei nostri cellulari di recente generazione è altamente pervasivo. non solo perché dal nostro smartphone possiamo inviare e ricevere email e navigare, ma anche e soprattutto per le tanto amate/odiate app, e per applicazioni che sono ormai diventate un vero e proprio standard di comunicazione: pensiamo a WhatsApp, Viber e iMessage. il 3G è stato costruito intorno al concetto di online e di internet access, e il 4G/LTE spingerà sempre di più in questa direzione. i problemi, si sa, ci sono già, in particolare verso gli aspetti di sicurezza e privacy dei dati. Dalle app “clandestine” o fasulle, le quali non sono altro che una scusa per farci installare – da soli!! – malware sui nostri dispositivi mobili, sino alle frodi consegnate proprio per trarre vantaggio dell’accesso ip dei nostri telefoni e, ancora, gli spyware per sorvegliare e spiare da remoto i proprietari e gli utilizzatori di queste bellissime tecnologie. Senza dimenticarci le problematiche di privacy, la possibilità di intercettare messaggi scambiati attraverso i software di instant messaging e chi più ne ha più ne metta. Sono tantissimi anni che la scena underground e il mondo dell’ethical hacking individua vulnerabilità e falle di sicurezza nel mondo mobile, esattamente come succede per il mondo più classico dei sistemi operativi per pC, su Facebook e altri social network e su tantissime applicazioni software, da quelle di Adobe sino a oracle. A oggi uno smartphone è sicuramente l’oggetto più personale e privato che portiamo addosso, custodisce alcuni nostri segreti, le nostre abitudini e soprattutto è sempre insieme a noi, ovunque andiamo. Stanno però iniziando a uscire fotocamere digitali wireless, che parlano ip e dalle quali possiamo direttamente inviare le nostre fotografie verso

dal telefono alle macchine fotografiche digitali

Abbiamo selezionato per voi i due eventi top hacker in Europa per il 2014, COnFidence (Polonia) e Hack in the Box (Olanda): due soluzioni molto diverse, per l’occasione unica di assistere in anteprima alle scoperte degli ethical hacker più famosi al mondo, bere una birra con loro e, perché no, ballarci insieme durante gli scatenati party finali!

la rete, da picasa e Flickr, oppure i nostri social network preferiti. peccato che, esattamente come il proprietario può accedere a quelle foto, lo può fare anche un utente non autorizzato, come hanno dimostrato più volte ethical hacker russi e tedeschi nel corso del 2012 e del 2013 in diverse conferenze hacker. il problema è che la gestione degli accessi e della condivisione file via Wi-Fi non è stato scritto in maniera sicura, e il risultato è che chiunque può, con minimi accorgimenti, collegarsi al nostro apparato e copiare le nostre foto (ma anche prendere il controllo dell’apparecchio). Che dire… basta fare attenzione a cosa fotografiamo, spostare immediatamente eventuali contenuti molto personali, privati o imbarazzanti… aspettando nel frattempo le patch del produttore – se mai arriveranno.

i l CLuSiT è, dal 2000, al servizio della sicurezza delle informazioni: la consapevolezza, la formazione, il continuo

aggiornamento professionale e lo scambio di informazioni sono gli strumenti più efficaci per far fronte ai problemi della sicurezza informatica. Questa associazione nasce sulla scorta delle esperienze di altre associazioni europee per la sicurezza informatica quali CLuSiB (B), CLuSiF (F), CLuSiS (CH), CLuSiL (L) che costituiscono un punto di riferimento per la sicurezza informatica nei rispettivi paesi da oltre 20 anni, cui si sono aggiunti ApSiT - CLuSi Tn, CLuSiBF, CLuSiCi, CLuSiQ. il CLuSiT è aperto a ogni persona e organizzazione che manifesti un interesse per la sicurezza informatica.

Obiettivi diffondere la cultura della sicurezza

informatica presso le Aziende, la pubblica Amministrazione e i cittadini.

Partecipare alla elaborazione di leggi, norme e regolamenti che coinvolgono la sicurezza informatica, sia a livello comunitario che italiano.

Contribuire alla definizione di percorsi di formazione per la preparazione e la certificazione delle diverse figure professionali operanti nel settore della sicurezza iCT.

Promuovere l’uso di metodologie e tecnologie che consentano di migliorare il livello di sicurezza delle varie realtà.il Security Summit è l’evento del CLuSiT aperto a tutte le persone interessate all’affascinante mondo della sicurezza informatica: workshop, seminari, tavole rotonde, e addirittura un Hacking Film Festival per l’intera durata dell’evento (tre giorni) hanno intrattenuto gli oltre mille partecipanti. L’agenda, davvero fitta, è disponibile sul sito https://www.securitysummit.it/,

suddivisa in Sessioni plenarie, Tavole rotonde, Atelier Tecnologici, Seminari di Associazioni e tre percorsi: Tecnico, Legale e Gestione della Sicurezza.

CLUSiT

il CLUSiT è l’Associazione italiana per la Sicurezza informatica di cui fa parte l’autore di questo articolo (Socio Fondatore e Membro del Comitato direttivo e Comitato Tecnico-Scientifico), il cui rapporto 2014 sull’iCT Security in italia è disponibile da scaricare dal sito del Security Summit, edizione di Milano

LXP_140_10_15_feat_hacking 12 28/03/14 12:50

Page 15: 04_aprile2014

Hacking

12 Linux pro 140 Linux pro 140 13

dalla domotica alle Smart City

Cosa succede però quando l’attacco ci arriva in casa e in ufficio? Ha creato scalpore il fatto che la FTC (Federal Trade Commission) uSA abbia imposto a un vendor

di risolvere seri bachi di sicurezza presenti nelle proprie Webcam, i quali permettevano (e permettono a tutt’oggi!) a estranei di collegarsi alle nostre Webcam, evitare l’autenticazione e fare i voyeur. non cito la marca in questione, dato che tutti i competitor di quel brand hanno, bene o male, vulnerabilità simili. Chiunque di voi può interrogare Shodan (www.shodanhq.com) e ricercare gli indirizzi ip, per esempio in italia, di telecamere ip CCTV prodotte da un vendor specifico, per le quali le vulnerabilità e le password di default sono note, e diventare un “digital voyeur”, facendosi i cavoli altrui. parliamo, ovviamente, dell’evoluzione delle telecamere CCTV, quelle che tutti noi utilizziamo, per esempio, per controllare la casa dall’ufficio, attraverso internet, oppure il contrario, o ancora la camera dei nostri figli, il giardino e così via. Ma i ricercatori di security, si sa, sono personaggi originali e l’ultima cosa che vogliono è annoiarsi. Se quindi da un lato le smart TV sono tutto sommato una recente novità, ricercatori come Luigi Auriemma (italiano trasferitosi a Malta) e molti altri hanno già individuato vulnerabilità di sicurezza nei “televisori intelligenti” prodotti da Samsung, LG e tanti altri costruttori. Qui gli scenari di frode causabili da software insicuro sono tanti, in un settore che è nato davvero da poco. pensiamo ai film che acquistiamo online, oppure alla chiamata Skype che effettuiamo dal nostro smart TV: in ambo i casi un attaccante esterno potrebbe prendere il controllo di quelle applicazioni o di quei dati e, semplicemente, rubarci la carta di credito utilizzata per gli acquisti online dal nostro smart TV, oppure intercettare login e password e rivenderle poi al black market del cybercrime. i modelli di smart TV più recenti incorporano già la Webcam, rendendo molto appetibile a ragazzini curiosi e criminali dell’est Europa una bella spiata nel salotto di casa nostra, o nelle nostre camere da letto. L’ultima novità, vista con i miei occhi in alcuni viaggi all’estero, è l’”housekeeping” digitale: frigoriferi con connessione a 100 Mbit/s e sensori grazie ai quali ordinare automaticamente dai supermercati il cibo che ci serve online, lavatrici che possiamo gestire da remoto tramite una comoda Gui, robot per le pulizie e droni per funzionalità di controllo della sicurezza delle nostre abitazioni. Chi scrive aveva, purtroppo, predetto in un’AnSA a fine 2013 che gli elettrodomestici “smart” sarebbero finiti nel mirino

dei cybercriminali: speravo di sbagliarmi, ma così non è stato e le mie previsioni, purtroppo, si sono avverate. Tra il 23 dicembre e il 6 gennaio scorsi infatti, oltre 100.000 elettrodomestici smart (televisori, router, media center, Smart TV e «almeno un frigorifero») siano stati violati da remoto e adoperati per il più classico dei compiti assegnati agli “zombie”: inviare spam. Tutto quanto sopra ci porta, inevitabilmente, a un altro termine caldo: Smart City, le città intelligenti. immaginiamo dunque le città del domani nelle quali tutto, dalle smart car alle smart TV, dalla domotica agli smart GpS, dialogano tra loro, scambiano informazioni e aggiornano dati, e nelle quali il concetto di e-governance sarà effettivamente reale, funzionante e tangibile. il disegno è bellissimo e intrigante ma, se pensiamo solo per un momento a tutte le vulnerabilità che le tecnologie poc’anzi elencate già oggi hanno… forse, un po’, spaventa anche quest’idea delle città automatiche, automatizzate, che cambiano dinamicamente, in funzione delle necessità dei cittadini. Le Smart City non sono però un qualcosa di “lontano” nel tempo. pochi giorni fa ero a Dubai, negli Emirati Arabi, per una conferenza, e ho visto come il Governo abbia già iniziato il percorso per rendere “smart” la città: cento iniziative legate a trasporti, comunicazione, greenbuilding, energia e pianificazione urbana per il progetto “Dubai Smart city”, con investimenti nell’ordine dei centinaia di milioni di dollari per la città che ospiterà il prossimo Expo mondiale, il World Expo 2020. Sono anche diversi i progetti europei di Smart City, da Torino a Barcellona, con lavori già in corso di realizzazione soprattutto nel nord Europa.

Chi pensa che le “hacking conference” siano eventi chiusi, per soli adepti e frequentate da personaggi poco raccomandabili si sbaglia! una hacking conference è molto probabilmente il modo più semplice, veloce ed economico per tenersi aggiornati, incontrare altri appassionati di information Security e formarsi (o aggiornare la propria formazione), in un ambiente aperto, internazionale e altamente informale. Tantissime sono oramai le hack-con, in Europa e nel resto del mondo. Abbiamo fatto una speciale selezione per i lettori di Linux pro e qui di seguito vi proponiamo due hack-con europee da… non perdere assolutamente! Hack in the Box AMS (HiTB AMS): probabilmente

l’hack-con più famosa al di fuori degli uSA. nata originariamente in Malesia (Kuala Lumpur), da alcune edizioni ha la sua tappa europea ad Amsterdam. Quest’anno si svolgerà dal 29 al 30 maggio, e include un Capture the Flag (forse uno dei più duri al mondo!), l’Haxpo (una sorta di “expo” aperto a tutti e gratuito) e numerosi training tecnici, erogati nei giorni precedenti la conferenza. Keynote e speaker famosissimi, provenienti da tutto il mondo, e indimenticabili “hacker’s party” sono certamente i pezzi forti di questo imperdibile evento (e anche uno dei più cari come biglietto di ingresso). informazioni e acquisto biglietti sul sito ufficiale: http://haxpo.nl/hitb2014ams-conference/

COnFidence: una hack-con storica, giunta oramai alla dodicesima edizione, che si svolge nella bellissima città di Cracovia, in polonia. un mix unico, tra presentazioni al limite dell’incredibile, bellissime hostess polacche (anche l’occhio vuole la sua parte!), barbecue e grill, birra e vodka, all’insegna dell’information sharing, dell’amicizia e della sfida. Sito ufficiale, agenda e registrazione su (biglietti di ingresso molto più economici che HiTB AMS): http://2014.confidence.org.pl/. per chi non conoscesse ConFidence e volesse capire com’è stata l’edizione del 2013 e che cosa si è perso….. guardatevi questo filmato su YouTube: http://youtu.be/QEvn4tL3gdi.

Conferenze hacker… per saperne di più!

il concetto spagnolo

di una Smart City, “building

smart communities”.

L’utilizzo dell’iCT per creare “città

intelligenti” sta vivendo

un vero e proprio momento d’oro,

visti almeno i tantissimi

progetti già online e in corso

d’opera

LXP_140_10_15_feat_hacking 13 28/03/14 12:50

Page 16: 04_aprile2014

Hacking

14 Linux pro 140 Linux pro 140 15

Quando un hack può uccidere

Ho tenuto per ultime quelle keyword che, parlando di “paura”, più mi spaventano: SCADA e Automazione industriale, Automotive ed e-Health. Sono tre argomenti

dei quali sentiremo parlare tantissimo nei prossimi anni. SCADA è l’acronimo di “Supervisory Control and Data Acquisition”. oggigiorno la maggior parte delle utility che utilizziamo regolarmente, dalle aziende energetiche ai trasporti (aerei, ferroviari, autostradali, metropolitana), è basata su tecnologie SCADA così come i moderni acquedotti e le centrali di energia. il problema, come sempre, è che questi standard e protocolli sono stati progettati senza la “sicurezza in mente”. Questo è il motivo per cui, a oggi, i sistemi SCADA hanno avuto un incremento nella distribuzione delle vulnerabilità con percentuali da capogiro. non pensiamo per forza a Stuxnet o alle agenzie di intelligence

e truppe di super-hacker che trovano bug… Qui parliamo, nella maggior parte dei casi, di ethical hacker e ricercatori “freelance”, i quali spendono un po’ del loro tempo libero per individuare vulnerabilità. una semplice ricerca su Google per SCADA exploits riporta oltre 400.000 risultati: pochi anni fa questa cifra era nell’ordine delle centinaia. i sistemi SCADA gestiscono anche stazioni energetiche (elettriche, nucleari, ecc.), l’automazione industriale e tanto altro ancora. C’è di che rabbrividire, specie quando si fa una ricerca non con Google ma con Shodan, prendendo in un colpo solo sia l’elenco completo e gli indirizzi ip dei sistemi target, sia le relative vulnerabilità. Automotive, come tutti sappiamo, è il mondo delle automobili. il problema, in questo caso, è che questo settore sta sempre più parlando “iCT”. All’inizio erano i sistemi multimediali nelle nostre auto, poi il ricevitore Bluetooth. oggi anche il mondo dell’automotive si sta evolvendo, osserviamo con attenzione alla “Google Car”, ma soprattutto sappiamo che le auto di domani, entro un breve periodo, saranno anch’esse always-on, 4G, Wi-Fi… ora, il problema è molto semplice. il mondo dell’ethical hacking ha iniziato a fare ricerche su automotive hacking già alcuni anni fa e a fine novembre Bogdan-ioan Suta, un ricercatore di sicurezza rumeno ha presentato una ricerca sull’hacking della vecchia Wolkswagen dei suoi genitori, grazie alla quale tramite il suo laptop è riuscito ad alzare e abbassare i finestrini elettrici, aprire e chiudere l’auto. Certo, non è un modello di auto “evoluto”, non puoi intervenire sul motore o sul sistema frenante…. Ma anche questo è già stato fatto. Gal diskin, ex ricercatore di intel israele, ha annullato la presentazione della sua ricerca su Automotive hacking a Hack in the Box Amsterdam, nell’aprile del 2013. il motivo? Ha avuto paura che terroristi e malintenzionati potessero utilizzare il know-

Bogdan-ioan Suta: un giovane e l’hacking alle autopoco tempo fa ho avuto modo di scambiare di persona qualche opinione con l’ethical hacker rumeno Bogdan-ioan Suta, il ricercatore che alla conferenza DefCamp (romania) ha dimostrato l’ABC dell’Automotive Hacking. Bogdan ha scelto un approccio molto “easy”: ha preso la Wolkswagen passat del papà (neanche un ultimo

modello, ma anzi un po’ vetusta), gli ha spiegato che “doveva studiare”, si è chiuso in garage e ha iniziato a farci hacking. il primo tentativo non ha funzionato: i cavi che si era auto costruito non andavano bene, e ha dovuto ricominciare da capo. Al secondo tentativo, però, ha potuto festeggiare: è infatti riuscito a modificare

il software della sua auto e a far sì che i finestrini si chiudessero automaticamente alla chiusura delle porte, un’“opzione” non inclusa nell’auto del papà, il quale è ora molto felice, dato il freddo tipico della romania nei mesi invernali, e la sua abitudine di dimenticarsi i finestrini aperti quando chiudeva la sua auto.

Ecco come sono, qui sotto a destra, le automobili di oggi, dal punto di vista di un hacker. Tutto è controllato da sensori, i quali comunicano tra di loro e con un gateway centrale, il “Gateway” appunto. Le automobili più moderne hanno a bordo dei sistemi operativi, come Windows, Android o iOS, ovviamente in versioni “speciali”, e la guerra per la conquista di questo nuovissimo mercato è appena iniziata, come dimostrano i recenti accordi tra Ferrari e Apple, e tra altri costruttori e la casa di redmond, ma anche gli investimenti per ricerche proprio in questo settore da parte di Big G, Google

La pubblica Amministrazione della città di Monaco, in Baviera, ha detto addio a zio Bill (Gates) e alle piattaforme di casa Microsoft, sia per motivi di sicurezza che per evidenti risparmi in termini di budget. Hanno messo su un “groupware cloud”,

rimpiazzando anche il sistema di calendar di Sun Microsystems e vedremo il software (Kolab) girare sull’infrastruttura iT della città stessa e nel suo cloud, sbaragliando in seguito a una gara pubblica, anche i sistemi di Google (Gmail e Gdocs)

e Microsoft (office 365). A nulla è servita l’interruzione da una vacanza sciistica di Steve Ballmer, il CEo di Microsoft, il quale ha cercato di fare lobbying volando immediatamente a Monaco: il pinguino ha vinto!

La città di Monaco sposa l’Open Source

il problema? in nessuno di questi fantastici progetti è citata la sicurezza informatica! L’e-Government è un qualcosa di fantastico, bellissimo, sulla carta così come nella realtà: niente più code agli sportelli della pubblica Amministrazione, la possibilità di richiedere certificati e documenti standocene comodamente seduti alle nostre scrivanie, archivi digitali e tanti, tantissimi database sui cittadini del xxi secolo. penso però al mondo del cybercrime, agli utilizzi illegali di device, infrastrutture e database non messi in sicurezza, alle tante

falle nel mondo del software e dei sistemi operativi commerciali (e quindi non oSS), ai furti di identità, alle frodi online. Forse, anche in italia, prima di pensare alle Smart City, dovremmo prendere l’esempio dalla città di Monaco, in Germania, dove è stato appena lanciato un progetto – già funzionante! – che ha migrato 14.000 utenti del Comune da piattaforma closed-source (Microsoft) e piattaforma open Source (KoLAB, basata su una distro Linux), con un risparmio immediato, già nel primo anno, di ben 4 milioni di Euro!

LXP_140_10_15_feat_hacking 14 28/03/14 12:50

Page 17: 04_aprile2014

Hacking

14 Linux pro 140 Linux pro 140 15

how da lui scoperto per ferire o uccidere vite umane. Questo ci porta all’ultima keyword che mi causa (forti) preoccupazioni: l’e-Health. il mondo della sanità e ospedaliero ha scoperto l’e-health. È un’evoluzione naturale, tra spending review, leggi e decreti, ottimizzazione di costi e tempi, e-Government, piani e direttive Eu. il problema, nuovamente, sta alla base: dispositivi e software per la sanità elettronica non sono stati progettati con l’information Security come priorità. possiamo dire anzi che, nella maggior parte dei casi, gli aspetti di sicurezza non sono nemmeno stati presi in considerazione. nel novembre del 2012 tenni una presentazione a roma, presso il forum E-health dell’information Security Hospital, e presentai una slide su una semplice ricerca con Google per la voce “Medical devices hacking”, la quale restituiva 3 milioni e 300 mila risultati. non poco! La stessa ricerca, a un anno esatto di distanza, riporta la cifra di 12 milioni e 400 mila risultati (!). Durante questo tempo ricercatori di sicurezza come Jerome radcliffe, lo stesso Barnaby Jack (recentemente scomparso), Shawn Merdinger e Travis Goodspeed, hanno effettuato dimostrazioni di hacking a peace maker con Bluetooth e Wi-Fi a bordo, piuttosto che a pompe di insulina (anch’esse gestibili remotamente).

“Autenticazione”, “encryption”? no, grazie…. orbene, un conto è quando si parla di vulnerabilità che possono esporre i sistemi target a Web defacement, furto di database e cose simili, ma ben altro conto è quando queste vulnerabilità possono impattare sulle vite umane. non credo sia il caso di far finta di niente, è anzi giunta l’ora di agire, e di comprendere come

l’information Security giochi un ruolo cruciale nelle vite dei cittadini e dell’intero sistema paese. Forse, ai nostri politici e decision maker, farebbe bene un’attenta lettura degli ultimi tre report del World Economic Forum, nei quali già si preannuncia come l’insicurezza delle risorse informatiche e di telecomunicazioni che utilizziamo ogni giorno, stia alla base di tutti gli scenari catastrofici che potremmo immaginare nei nostri peggiori incubi.

Supervisory Control and data Acquisition e Automazione industriale sono due dei campi che ci devono preoccupare, oggi come nei mesi e negli anni a venire. i sistemi di trasporto, dalle autostrade alle reti metropolitane, così come gli acquedotti e le centrali energetiche (elettriche, nucleari, solari, a vento) sono infatti basati su SCAdA e funzionano tramite protocolli di comunicazione assolutamente insicuri, privi di sistemi di encryption (cifratura) dei dati e di autenticazione. diverse le ricerche nel mondo dell’ethical hacking, iniziate già nella prima metà degli anni 2000, le quali hanno dimostrato come il mondo SCAdA e tutti i suoi protocolli siano stati disegnati con priorità differenti rispetto a quelle dell’information Security

Conclusioni

Certamente voi, lettori di Linux pro e quindi smanettoni “per definizione”, ve ne sarete già accorti. Ma c’è chi, ancora, non lo ha capito, non lo vuole capire

o, semplicemente, pensa ad altro e fa finta di niente. Viviamo in un mondo quasi totalmente digitale, e quel poco che ancora non lo è, sta giocoforza cambiando rapidamente, che piaccia o no. i sistemi informatici, che non possiamo davvero più chiamare banalmente “computer”, e la rete delle reti, internet (e la “prossima internet che verrà”, la internet of Things), rappresentano un vero e proprio ecosistema globale, sul quale basiamo l’attuale economia e la nostra vita di ogni giorno. nel corso dei decenni, però, ci siamo basati su sistemi, protocolli standard di comunicazione e software altamente insicuri, per il semplice e banale motivo che, in quegli anni di progettazione e design, l’information Security era una nicchia di mercato, e nessuno poteva prevedere dove saremmo arrivati oggi. Se da un lato le rivelazioni di Snowden e il cosiddetto “Scandalo nSA” o “Datagate” hanno fatto capire anche all’uomo comune, al non smanettone, la pericolosità dei Social network (quando non sono gestiti

con coscienza e cervello) e l’importanza dell’encryption nelle nostre comunicazioni, l’internet of Things fa presagire anche peggio. porterà, certamente, enormi rivoluzioni e benefici, ma se non progettata con la dovuta attenzione verso le tematiche di sicurezza delle informazioni, impatterà altamente su tematiche delicatissime quali la sicurezza personale, la privacy, il cyber-terrorismo. per farvi capire come il solo affare Datagate rischia di farci dimenticare una parola bellissima quale la democrazia, riporto qui di seguito il discorso del presidente del Brasile, la signora Dilma roussef, nel suo ultimo discorso davanti alle nazioni unite, dopo aver scoperto che il suo cellulare era intercettato dalla nSA: “Se non c’è nessun diritto alla privacy, non può esistere nessuna vera libertà di espressione e opinione, e quindi non può esistere una democrazia efficace”. Se spostiamo il tutto ai discorsi trattati in questo articolo, dalla domotica all’e-Health, dalle smart cars alle smart cities agli SCADA, il concetto che ne viene fuori è tragicamente semplice e paradossalmente pericoloso: sediamo su una bomba pronta a esplodere, e non vogliamo (ancora) rendercene conto. LXP

ringraziamentiL’autore desidera ringraziare per il supporto e l’aiuto durante la stesura di questo articolo: Marco Misitano (Cisco), Cristiano Cafferata (DELL/SonicWall), Selene Giupponi, raffaele regni, Fabrizio Cirilli e Matteo Benedetti (Security Brokers), il CLuSiT (Associazione italiana per la Sicurezza informatica), Gal Diskin, Barnaby Jack, Cedric Blancher, Shawn Merdinger, Bogdan-ioan Suta e tutta la comunità internazionale di ethical hacker e di ricercatori i quali, per dovere ancor prima che per passione, ci stanno aiutando ad “aprire gli occhi”.

LXP_140_10_15_feat_hacking 15 28/03/14 12:50

Page 18: 04_aprile2014

Bug del WPSBug del WPS

16 Linux pro 140

Fabio Spelta Sistemista, sostenitore del Software Libero per la salvezza del mondo e dei nani da giardino.

L’autoreVi mostriamo uno dei metodi usati dai criminali informatici (o dai curiosoni) per entrare abusivamente nelle reti wireless

Ti hanno bucato il Wi-Fi di casa!

Avete letto il titolo dell’articolo? D’accordo, forse non è ancora successo. Tuttavia, anche se non è sotto gli occhi di tutti, a dispetto della crittografia (di per sé valida) messa in opera

da WpA2, un numero significativo dii Access point in circolazione oggi è violabile con una dozzina di ore di tempo a disposizione e una scheda Wi-Fi da trenta euro (e spesso questa non serve neanche). Scommetto che il vostro vicino ha la dozzina di ore a disposizione e probabilmente anche i trenta euro, quindi meglio verificare se il vostro router è vulnerabile e, nel caso, correre ai ripari.

LXP_140_16_21_Wps 16 27/03/14 15:15

Page 19: 04_aprile2014

Bug del WPSBug del WPS

Linux pro 140 17

Cosa diavolo stai dicendo, Willis?Molti di voi si ricorderanno i tempi neanche troppo remoti in cui molti router venivano venduti già preconfigurati per essere acceduti senza nessun tipo di crittografia né di credenziali, come opzione predefinita; e di come, di conseguenza, andare in giro a cercare accessi a sbafo a internet fosse diventato uno sport nazionale. purtroppo, grazie all’introduzione relativamente recente di WpS e alla sua pessima, scellerata implementazione in moltissimi Access point, lo scenario attuale non è troppo dissimile da quello di qualche anno fa. oggi accedere a una rete che non è la propria è meno banale di allora e richiede qualche ora di tempo; quindi è impensabile che qualcuno di passaggio sotto la vostra finestra possa attaccarsi e farsi gli affari propri (e già che c’è anche i vostri) al volo approfittando della vostra rete. Chi però ha sempre accesso al vostro segnale Wi-Fi, può fare con calma. E se pensate che “tanto tutti miei vicini di casa sono rimbambiti ed è già molto se sono capaci di far partire il videoregistratore”, tenete a mente che molte schede Wi-Fi specializzate hanno una portata significativamente maggiore di quelle in dotazione nei vari dispositivi mobili, perciò il campo non è limitato solo alle vostre immediate pertinenze… chissà chi abita nel condominio di fronte. iniziamo con il vedere cos’è WpS, e come mai è così deleterio.

Cos’è WPS?WpS sta per Wi-Fi Protected Setup, anche se in origine avrebbe dovuto chiamarsi Wi-Fi Simple Config. il nome originale sarebbe stato sicuramente più indicato, anche perché a tutti gli effetti lo scopo di questa invenzione è, tuttora, quello di semplificare l’accesso alle reti Wi-Fi da parte degli utenti meno abili con la tecnologia, e così facendo aumentare la diffusione della tecnologia wireless. Al contempo, tuttavia, si voleva mantenere un livello di sicurezza ragionevole per fare in modo che la semplificazione non andasse a discapito della sicurezza. Come si dice in questi casi: EpiC FAiL.

Perché WPS è così gramo?L’idea originale aveva anche senso. Semplificare la fase iniziale di associazione tra il client e l’Access point usando un pin, in maniera simile a quella che avviene tra dispositivi Bluetooth, per intenderci. usando un pin corretto, il router non avrebbe garantito l’accesso tout court alla rete, ma avrebbe trasferito al client tutti i parametri per la configurazione sicura, solitamente WpA2, per utilizzare

il miglior livello di crittografia attualmente esistente da quel momento in avanti (WpA2, appunto). Va da sé che se si riesce a fregare WpS, ci si fa passare tutti i parametri dal router, e allora addio sicurezza di WpA2 (per inciso, ai fini di questo articolo le differenze tra router Wi-Fi e Access point – Ap – sono trascurabili, perciò useremo entrambi in maniera intercambiabile). perché semplificare le cose permettendo di usare solo otto numeri, in una fase iniziale? pensate ai vari dispositivi mobili con tastiere software piccole, dove non è difficile sfiorare il tasto sbagliato inavvertitamente. inserire una password di venti caratteri sarebbe parecchio scomodo. peggio ancora, pensate alle console per videogiochi che non hanno una tastiera, e immaginatevi a inserire venti caratteri con un bel controller della nintendo Wii. Magari passando dalla schermata con le lettere a quella con i numero a quella con i simboli. Quindi l’idea non era neanche male.

Un PIN non è effettivamente facile da indovinare?otto cifre decimali significa cento milioni di numeri possibili da provare. Se WpS fosse stato implementato meglio, come vedremo dopo, sarebbe stato estremamente difficile, pressoché impossibile da violare. uno dei problemi tuttavia, il primo di molti, è che in realtà le cifre considerate sono solo sette, non otto. L’ultima è una checksum, e viene calcolata a partire dai primi sette. una checksum è una sorta di sigillo in ceralacca per verificare che il pin trasmesso sia stato ricevuto correttamente. non che sia quello giusto: solo che la trasmissione da una parte all’altra sia stata integra e non si sia alterata (in gergo “corrotta”) durante la trasmissione radio dal vostro dispositivo al router. Questo può anche avere senso (ma forse, a dirla tutta, no: non bastava respingere un pin corrotto come qualsiasi pin non valido?), ma di fatto restringe il numero di combinazioni possibili a dieci milioni.

Un caso felice

Fig.1 La rete di casa del vicinato. BSSID e SSID sono stati oscurati per motivi di privacy, salvo la rete dell’autore, che ora non è più accessibile, per inciso

per fortuna qualcuno distribuisce router con WpS implementato nel modo corretto. il router AVM Fritz!Box 7390, per esempio, consente di disattivare WpS tout court, o molto semplicemente, di tenerlo acceso solo quando lo si desidera, per soli due minuti, e cambiando pin ogni volta che lo si è utilizzato. Era così difficile? perché ancora oggi, a più di due anni dalla pubblicazione della scoperta della falla, tantissimi router

felicemente accesi in tutta la nazione non si comportano in questo modo?

Un router con un buon firmware implementa WPS mantenendo il PIN attivo solo per pochi

minuti e cambiandolo dopo ogni utilizzo. In questo modo WPS diventa davvero un modo

comodo per configurare apparati Wi-Fi, senza svilire la sicurezza

LXP_140_16_21_Wps 17 27/03/14 15:15

Page 20: 04_aprile2014

Bug del WPSBug del WPS

18 Linux pro 140

Che è un numero ancora abbastanza alto per provare numeri a caso (provare tutte le possibili combinazioni per indovinare quella giusta si chiama attacco a forza bruta). Se fosse possibile provare un pin al secondo, servirebbero circa tre mesi per provarne dieci milioni. Che diciamocelo, non sarebbe neanche un tempo geologico: ma le cose stanno ben peggio. i pin WpS vengono controllati… dividendoli in due parti. prima vengono verificate le prime quattro cifre. Se l’operazione va a buon fine, si passa al riconoscimento delle tre che rimangono. Questo vuol dire che bastano al massimo diecimila tentativi, nel caso più sfortunato possibile, per trovare le prime quattro cifre, e solo altri mille per le ultime tre. Siamo passati da cento milioni di combinazioni possibili a undicimila in tutto nell’arco di un solo paragrafo, non male.

Perché?Anche questa volta l’idea originale non era del tutto sbagliata. Quella di verificare il pin dividendolo in due, intendo (per la checksum giuro di non capire come se la siano inventata). perché? perché stiamo prendendo sempre e solo in considerazione uno scenario: quello dove il server (l’Access point) deve verificare che il client (cioè il vostro portatile) sia autorizzato ad accedere, ovvero conosca il pin. Sembra lapalissiano. nella testa di chiunque l’obiettivo è far riconoscere il proprio smartphone dal dannato Access point e finalmente avere internet a una velocità decente e senza limiti. non si pensa quasi mai che sarebbe utile anche fare in modo che lo smartphone riconosca l’Access Point.

Ma come, se è lì davanti agli occhi di tutti!L’Access point vero ce l’avete lì davanti. Lo smartphone (o qualsiasi dispositivo Wi-Fi, naturalmente), però, ascolta

segnali che arrivano da ovunque lì intorno, e non ha gli occhi per vedere la scatoletta che state guardando voi. Qualsiasi segnale che arrivi presentandosi con il nome che vi aspettate (per esempio “AnTAni_network”) per lui è potenzialmente buono. Come fate a essere sicuri, allora, che il vostro smartphone non stia comunicando con un altro Access point, e non il vostro? uno creato ad arte per farvi sì connettere, salvo poi leggere tonnellate di affari vostri? Magari anche password molto importanti, se siete disattenti agli avvisi del browser sulla correttezza dei certificati SSL. Gli Access point siffatti sono definiti Rogue Access Point, e sono tutt’altro che fantascienza. perciò è fondamentale che anche il client verifichi che stia davvero parlando con il router con cui crede di parlare, e non con qualcuno che lo impersona. per farlo, anche il router manda il suo pin al client. non così, nudo e crudo, naturalmente; altrimenti basterebbe fare un solo tentativo sbagliato, per ricevere la risposta corretta. Questo farebbe precipitare WpS oltre il ridicolo. invece, sia il client che l’Ap trasferiscono il pin usando una funzione di hashing con un salt di 128 bit. Anche in questo caso, però, se il router inviasse il pin tutto intero, sarebbe facile fare un attacco a forza bruta offline per trovare il pin a partire dall’hash. per risolvere (si fa per dire) il problema, il router ne manda solo mezzo, per farsi autenticare a sua volta dal client; e invia la seconda parte solo dopo che anche il client ha dimostrato di conoscere tutti i pezzi del pin. naturalmente, facendo così, si introduce il problema appena descritto; i numeri da provare si riducono di parecchio. uno dei problemi di fondo è che otto cifre sono poche, tout court. L’altro è che molti router hanno un pin statico, e attivo 24h/24.

Un minimo di storiaQualcuno si è accorto di come stavano le cose. Stefan Viehböck (@sviehb) è stato il primo a pubblicare, alla fine del 2011, la propria scoperta (ebbene sì. Questo problema è noto da un paio di anni abbondanti, il che rende ancora più tragico il fatto che la vulnerabilità sia tanto diffusa ancora oggi) e ha pubblicato un tool per sfruttare la falla, wpscrack. Dopo che il problema è stato reso noto, Craig Heffner di Tactical network Solutions (www.tacnetsol.com) ha rivelato di essere già al corrente della cosa da un annetto, e ha deciso di rilasciare al mondo il codice del proprio strumento, già bell’e pronto, per sfruttare la debolezza dei router. Lo strumento si chiama reaver; al momento è quello più efficace tra i programmi rilasciati per questo scopo, e lo useremo tra pochi minuti.

Passiamo alla praticaÈ arrivato il momento di verificare se il vostro router allo stato attuale delle cose è suscettibile a questo problema (e in questo caso non dovreste scartare l’ipotesi che lo stiate

non troppo. ricordate che anche se il vostro router si limita a rallentare gli attacchi a forza bruta, i numeri da provare sono sempre e solo undicimila, che è un numero molto piccolo. Con pazienza, ci si arriva. Anche nel caso in cui reaver non si sia dimostrato in grado di gestire

le risposte WpS del router e di attaccarlo con successo, non ci sentiamo di dire che si possa lasciare WpS attivo e dormire tranquilli. potrebbe uscire una patch per reaver domani; inoltre non sapete se con una scheda di rete diversa avreste ottenuto un altro risultato.

insomma: undicimila è un numero troppo piccolo per rischiare, a nostro avviso, di lasciare WpS aperto a tempo indeterminato, e l’unico caso in cui ha senso usarlo è quello in cui lo si attiva per pochi istanti attraverso un pulsante o da un’interfaccia Web, e poi basta.

Reaver non ha funzionato. Sono al sicuro?

Fig.2 I primi PIN provati

da reaver. Inizialmente

vengono usati i PIN più comuni,

dopodiché reaver inizia a verificarli

tutti in ordine finché non ha

trovato quello giusto

LXP_140_16_21_Wps 18 27/03/14 15:15

Page 21: 04_aprile2014

Bug del WPSBug del WPS

Linux pro 140 19

già condividendo con qualcun altro, a meno che non viviate veramente lontano da qualsiasi centro abitato). per mettere alla prova il router è possibile installare gli strumenti descritti di seguito (il già citato reaver tra questi, ma non solo) all’interno di qualsiasi distribuzione, perciò se non volete usare un Live CD e la vostra distro supporta già tutti i pacchetti del caso (e i migliori driver per la scheda Wi-Fi) allora potete tranquillamente usare tutti i programmi descritti di seguito dall’interno della vostro sistema operativo. nelle prossime pagine, tuttavia, descriveremo come forzare le eventuali vulnerabilità del vostro router usando Kali Linux. Kali Linux è una distribuzione pensata proprio per il penetration testing, vale a dire che contiene già tutti i migliori strumenti e i più diffusi driver per effettuare svariati tipi di attacchi informatici, siano essi legittimi, come in questo caso, o meno. La trovate nel lato A del DVD di questo mese: potete avviare il computer dal DVD e trovarvi così tutto pronto, senza dover installare niente (tenete a mente che la password di root è “toor”, senza virgolette). Se avete una scheda Wi-Fi uSB, esterna, potete anche avviare il DVD all’interno di una macchina virtuale (in questo modo potreste mantenere il vostro normale sistema operativo in esecuzione mentre Kali Linux farà il suo lavoro nella virtual machine).

Kali Linux “Live”il modo più veloce per poterci mettere al lavoro è quello di inserire il DVD di questo mese nel lettore, avviare il computer dal DVD e premere invio quando appare la schermata di avvio di Kali Linux, per avviare in modalità Live, senza installare niente sull’hard disk e lasciare il vostro computer indisturbato e poterlo ritrovare esattamente come l’avete lasciato. Se vi steste chiedendo cosa sia la modalità “Forensic”: avvia la distribuzione senza scalfire neanche eventuali partizioni di swap presenti sul disco (quelle, altrimenti, vengono usate per migliorare le prestazioni di Kali, senza intaccare i filesystem) e non monta automaticamente nessuna eventuale memoria uSB inserita. nel nostro caso la modalità predefinita è quella consigliabile. Dopo il boot, a meno che non vi troviate comodi con il layout americano della tastiera, la prima operazione da fare è quella di configurare correttamente la tastiera. purtroppo è un po’ macchinoso. Cliccate in altro a destra, dove è specificato il nome utente (cioè root, in questo caso: trattandosi di una distribuzione orientata alla sicurezza, non ci sarebbe stato motivo di limitare i privilegi dell’utente predefinito) e cliccate su System Settings. Quindi selezionate Keyboard. in basso, cliccate su Layout Settings; quindi sul + in basso a destra, selezionate Italian e cliccate su Add. ora, nel pannello superiore, cliccate su en (la lingua attualmente usata per il layout della tastiera) per far finalmente apparire it e poter avere corrispondenza tra quello che c’è scritto sui vostri tasti e quello che apparirà nel terminale quando li premerete.

La mia scheda wireless: andrà bene o no?il requisito fondamentale è che abbiate una scheda Wi-Fi in grado di funzionare e trasmettere pacchetti in modalità monitor. Questa modalità differisce da quella usata normalmente (detta managed, o station) perché permette di ascoltare traffico radio proveniente da qualsiasi rete, senza associarsi a un Access point. La buona notizia è che buona parte delle schede integrate nei computer portatili sono

in grado di funzionare in modalità monitor in Linux, ma questo non è sempre vero. Se fosse questo il vostro caso, l’unico modo per poter fare il test è quello di procurarvi una scheda uSB esterna pienamente supportata. Ve la caverete con poche decine di euro, e avrete anche il vantaggio di poterla usare in una macchina virtuale. Trovate un elenco di schede supportate (anche pCMCiA e pCi, volendo) qui: http://bit.ly/1qqDoWF. per verificare se la vostra scheda sia compatibile o meno con la modalità monitor, dopo aver avviato Kali Linux e aver fatto il login in GnoME, aprite un terminale ed eseguiteairmon-ng

Questo elenca le schede Wi-Fi disponibili. ogni scheda wireless ha un etichetta, indicata tra parentesi quadre; è un identificativo che rappresenta la scheda fisica all’interno del sistema. A ciascuna scheda fisica possono essere associate diverse schede logiche, come vedremo tra poco, vale a dire dei riferimenti usati dal sistema per accedere al dispositivo fisico vero e proprio. Ecco un output di esempio:wlan0 intel 4965/5xxx/6xxx/1xxx iwlwifi - [phy0]

Questo elenca, nell’ordine, il nome logico della scheda come assegnato da Kali Linux, il tipo di chipset della stessa, il driver utilizzato in Kali e l’identificativo della scheda fisica. ora elencate tutte le proprietà della scheda, sostituendo nel comando l’identificativo phy0 con quello della vostra scheda, se differente:iw phy0 info

L’output normalmente fornito da questo comando è estremamente verboso; anche se restituisce molte informazioni interessanti. per restringerlo a quello che ci serve possiamo filtrarlo con grep:iw phy0 info | grep -A 10 “Supported interface modes”

La seconda parte del comando, grep -A 10 “Supported interface modes” mostra solo la parte che ci interessa, vale

Fig.3 PIN trovato in circa sette ore. Come vedete, non importa quanto complicata o lunga sia la vostra passphrase, il router Fastweb è generoso e la fa sapere in giro lo stesso. Abbiamo nominato Fastweb perché abbiamo avuto un’esperienza diretta, ma i router che soffrono di questa falla sono svariati

LXP_140_16_21_Wps 19 27/03/14 15:15

Page 22: 04_aprile2014

Bug del WPSBug del WPS

20 Linux pro 140

“Salve. il router che mi avete dato è bucabile in una dozzina d’ore. Come si fa a disabilitare WpS?”“non è possibile. Deve disabilitare il WiFi.”“prego?”“Eh, sì. non si può disattivare solo WpS.”“Mi sta dicendo che tutti i router che distribuite

ai clienti sono bucati di default?”“Ehm…”Questa è la versione sintetica di una telefonata reale. La morale è che ho dovuto spegnere il Wi-Fi, comprare un router separato e dignitoso, collegare il nuovo router a quello di Fastweb,

e quindi essere sicuro di far navigare solo chi voglio io, attraverso la mia rete. il punto è: perché in Fastweb sanno, e non fanno niente? Speriamo che la diffusione della consapevolezza sulla vulnerabilità di moltissimi router stimoli produttori e provider a prendere delle contromisure!

Una telefonata con Fastweb

a dire, per l’appunto, la lista delle modalità Wi-Fi supportate. Se “managed” appare nell’elenco, è fatta.

Setup della scheda Wi-FiSe la scheda Wi-Fi supporta la modalità monitor, per prima cosa occorre abilitarla. Ci sono diversi modi per farlo, quello più comune è utilizzare di nuovo il comando airmon-ng, questa volta con due argomenti; dovrete utilizzare l’identificativo logico:airmon-ng start wlan0

Questo creerà una nuova interfaccia virtuale, chiamata mon0. Se rieseguite airmon-ng senza argomenti, ora, vedrete due interfacce logiche per la stessa scheda fisica. Quando crea l’interfaccia di monitoring, airmon-ng verifica se nel sistema sono in esecuzione dei processi che possono interferire con la stessa. L’esito delle operazioni di sniffing e di cracking WpS dipende molto sia dall’hardware che dai driver, perciò i risultati possono essere molto variabili. Abbiamo osservato che in alcuni casi reaver funziona meglio quando network Manager è abilitato, per esempio, a dispetto di quanto indicato da airmon-ng; e viceversa in altri. Consigliamo di lasciare le cose come stanno, inizialmente, e in un secondo momento, in caso di insuccesso, di disattivare network manager con /etc/init.d/network-manager stop

Quindi, per rielencare gli eventuali processi problematici rimasti eseguire airmon-ng check

ogni processo elencato dal comando precedente avrà un identificativo numerico, elencato nella colonna piD. per ciascun piD, eseguitekill -9 piD

sostituendo a “piD” il numero specificato. un modo alternativo per abilitare la modalità monitor è quello manuale:ifconfig wlan0 downiwconfig wlan0 mode monitorifconfig wlan0 up

Attenzione che il primo e il terzo comando sono ifconfig, mentre il secondo è iwconfig. per finire, eseguite quindi senza argomenti:iwconfig

per verificare lo stato delle vostre schede, virtuali o meno, e che alla voce Mode compaia l’agognata scritta “monitor”. Se avete seguito la seconda strada, non verrà generata una scheda virtuale (mon0), ma verrà fatto riferimento direttamente alla stessa wlan0. D’ora in avanti, per semplicità, la scheda in modalità monitor usata per gli esempi sarà sempre “mon0”. Modificate questo parametro nei comandi che seguono a seconda del vostro caso.

Trovare il proprio Access Pointogni Ap è identificato in modo univoco da un codice chiamato BSSiD, che altro non è che l’indirizzo MAC della scheda wireless dello stesso (ogni scheda di rete ha un indirizzo, chiamato indirizzo MAC, formato da sei coppie di cifre esadecimali). Senza entrare troppo nei dettagli degli “strati” di networking, per ora quello che basta sapere è che il riferimento inequivocabile al vostro router è il suo BSSiD, non il nome della rete che esso presenta. Quello può cambiare, e ci possono essere altri router nei paraggi che presentano un nome identico (per motivi fraudolenti ma anche perfettamente legittimi, generalmente parlando). Quindi la prima cosa da fare, è trovare il vostro BSSiD. per farlo, fate partire una bella scansione del traffico a portata della vostra scheda:airodump-ng mon0

e aspettate di veder apparire il nome della vostra rete, sulla destra (dovrebbero bastare pochi secondi). A sinistra, sulla stessa linea, apparirà il BSSiD che state cercando. prendete anche nota del canale (colonna CH), verrà comodo in seguito (il canale indica la frequenza radio specifica utilizzata).

Fuoco alle polveriFinalmente è arrivato il momento di utilizzare reaver. Le sue opzioni sono svariate, e spesso per riuscire a violare il vostro

Fig.4 Inutile cambiare la password di frequente se qualcuno conosce il vostro PIN. Basterà specificarlo nella linea di comando di Reaver per avere quella nuova, dopo tre secondi d’orologio

LXP_140_16_21_Wps 20 27/03/14 15:15

Page 23: 04_aprile2014

Bug del WPSBug del WPS

Linux pro 140 21

Fig.5 Alcuni router respingono le immissioni di PIN errate troppo ravvicinate tra loro, disabilitando WPS per qualche tempo. Tuttavia, basta configurare reaver in maniera meno ostinata e avere un po’ di pazienza per riuscire a violare anche questi router. Attenzione quindi!

router (a meno che non sia particolarmente debole, come la maggior parte dei router Fastweb, ahinoi, incluso quello dell’autore) occorrono un po’ di pazienza e di sperimentazione. il processo è apparentemente aleatorio non solo perché fortemente dipendente dalla scheda di rete e dai suoi driver, ma anche, naturalmente, dal comportamento del vostro router.Le opzioni indispensabili sono sempre:

-b 00:11:22:33:44:55con cui specificate il BSSiD da attaccare (naturalmente rimpiazzando i numeri dell’esempio qui sopra con quelli del vostro router, che avete trovato poco fa);

-i mon0con cui specificate quale interfaccia utilizzare per provare l’attacco. Queste due sono imprescindibili. inoltre, conviene usare sempre l’opzione -vv che indica a reaver di essere il più verboso possibile nel suo output, cosa utilissima per vedere cosa succede strada facendo. Quindi, il comando base èreaver -b 00:11:22:33:44:55 -i mon0 -vv

L’output sul router della rete dell’autore è drammatico, come dimostrato nella Fig.2.

Alcune opzioninel caso mostrato nelle figure di queste pagine, l’attacco è stato (purtroppo) particolarmente fortunato e facile, ma a volte può essere necessario sperimentare con diverse combinazioni di opzioni per poter riuscire a ottenere un risultato. Alcuni router limitano il numero massimo di pin che concedono di provare in un determinato lasso di tempo, proprio per arginare gli attacchi a forza bruta (per fortuna qualcuno ci ha pensato!). Tuttavia, spesso è sufficiente distanziare nel tempo i tentativi per riuscire a procedere comunque. Con -d 20 indicate a reaver di far passare 20 secondi tra un tentativo e l’altro. Si tratta di un numero abbastanza alto e che permette comunque di esaurire tutti i pin disponibili nell’arco di circa 60 ore, un tempo sostenibile con un po’ di pazienza. Se doveste incorrere in un blocco temporaneo di WpS da parte del router, reaver smetterà di provare nuovi pin per 60 secondi. il tempo da attendere in questo caso può essere specificato con -l, per esempio per aspettare dieci minuti dopo un lock, usate -l 600. Ci sono altri flag che possono modificare il comportamento del programma, per esempio facendo in modo di utilizzare chiavi Diffie-Hellman piccole (la comunicazione del pin al router è cifrata, così da non poter essere facilmente sniffabile, usando l’algoritmo suddetto). utilizzate -S per velocizzare la transazione (nel nostro caso non abbiamo osservato differenze apprezzabili, ma potrebbe essere utile su altri router). un’altra

opzione che potrebbe essere interessante è -L, che specifica di ignorare il blocco WpS continuando a martellare il router di richieste (qualora il blocco fosse solo apparente). per elencare tutte le opzioni possibili digitate reaver senza argomenti; la pagina “man” di reaver non è altrettanto completa.

Va per le lunghe!Se avete bisogno di riavviare il pC e dovete quindi sospendere il vostro tentativo di “autocrackaggio”, dovete ricordarvi di salvare i file generati da reaver, per poterli rimettere dov’erano al prossimo riavvio in Kali Linux. in questo modo potrete continuare a usare reaver riprendendo l’attacco a partire dal pin a cui eravate rimasti. nella cartella /etc/reaver troverete i file da salvare. potete copiarli usando nautilus, il file manager di GnoME, o se lo preferite la linea di comando. Salvateli sull’hard disk del vostro pC (Kali riconosce automaticamente le partizioni e le mostra sul desktop, ed è in grado di scrivere anche su partizioni Windows nTFS all’occorrenza, se usate un pC con Windows) oppure ancora su una chiave uSB, e poi copiateli di nuovo in /etc/reaver al prossimo riavvio in Kali Linux, prima di eseguire reaver. LXP

Quasi. L’unica cosa che rimane da fare ora per dormire sonni tranquilli sapendo che la vostra rete è tutta vostra, soltanto vostra, e che la banda Bassotti starà definitivamente alla larga, è utilizzare una password seria. Che vuol dire, soprattutto, lunga, e non basata su una o due

parole di senso compiuto. Anche se è noiosa da inserire in tutti i vostri dispositivi mobile. C’è infatti un punto debole anche in WpA2: lo scambio di informazioni di autenticazione con il vostro router (handshake), che può venire catturato (ricordatevelo, è nell’aria!), e anche

se non è in chiaro, una volta ottenuto è possibile attaccarlo con attacchi basati su dizionario o a forza bruta per arrivare, da questo, alla password. ottenere l’handshake WpA2 è molto facile, ottenere la password… anche, se è corta o se è basata su parole di senso compiuto.

Ho disattivato WPS, e uso WPA2, sono al sicuro!

LXP_140_16_21_Wps 21 27/03/14 15:15

Page 24: 04_aprile2014

22 Linux pro 140

Raspberry Raspberry

dell’utente. Ciononostante, molti di noi hanno usato la scheda per progetti casalinghi e per meglio conoscere Linux, l’elettronica, il controllo di motori, la gestione delle reti e la programmazione, il tutto grazie a squadre di sviluppo che ci hanno donato “chiavi in mano” i sistemi operativi che pulsano

nel cuore di silicio della raspberry. È fuori di dubbio che il 99% delle persone in giro per il mondo usi la distro ufficiale derivata da Debian e cioè raspbian: non è però l’unica offerta disponibile. Esiste un discreto numero di alternative specializzate in determinati ambiti applicativi che consentono

Linux Pro ha messo alla prova tre sistemi operativi alternativi ai classici usati dalla maggioranza degli utenti: ecco come è andata

La raspberry è un abile miscuglio di creatività, libertà e apertura, cioè tutto ciò per cui sono nati il mondo dell’open Source e Gnu/Linux

in particolare. Quindi non c’è da meravigliarsi se la gente la apprezza così tanto. non c’è fine alla immaginazione che utenti creativi possano applicare a questo piccolo ma versatile computer o scheda di sviluppo, come alcuni amano definire la rp. L’abbiamo vista raggiungere i confini dell’atmosfera (attaccata a un pallone sonda) navigare sulle onde, trasformata in un videogioco da bar stile anni ottanta: inoltre, alcune di loro lampeggiano in sincrono all’interno di un cluster dalle capacità di un super-computer. Le raspberry sono state infilate in contenitori di legno, cartone, metallo, plastica e perfino blocchi di LEGo. Sono state usate in progetti di ingegneria, scuole e università: apparentemente, l’unico limite è la fantasia

di spremere al massimo l’hardware a disposizione: mediacenter, Desktop classico o magari retrogaming. Abbiamo dato una occhiata alla “punta dell’iceberg” delle distro a disposizione, per vedere quale stuzzicava la nostra immaginazione. La Raspberry Pi Media Center è probabilmente quella più usata: grazie

alla sua uscita HDMi, alla discreta potenza elaborativa e al fatto che è piccola e silenziosa, la raspberry pi ha trovato il suo posticino vicino a molte TV. nonostante questo, gli utenti erano inizialmente abbastanza limitati in quello che potevano fare,

ma nel tempo sono state create molte meritevoli estensioni, grazie alla comunità di appassionati e utenti. non dubitiamo che praticamente tutti abbiano una volta o l’altra provato la versione per rp di xBMC, ma quanti sanno che esiste anche rasplex, la versione per rp del client plex Media Server?

“ll 99% degli utenti usa Raspbian, ma ci sono valide alternative”

Raspberry Pi:oltre Raspbian

LXP_140_22_25_LXF181.feat_pidistro 22 27/03/14 15:19

Page 25: 04_aprile2014

Linux pro 140 23

Raspberry Raspberry

Converti la tua raspberry pi in un distributore di contenuti multimediali

RasPlexT anto per cominciare, avrete bisogno di una

installazione di plex Media Server, che è – orrore! – a Sorgenti Chiusi ma liberamente

usabile. Ci sono vari “gusti”, disponibili: per Windows, oS x, Gnu/Linux, FreeBSD e c’è addirittura una serie di sistemi operativi per cellulari che possono interagire con plex, per cui siamo sicuri riuscirete a trovare una versione che soddisfi le vostre necessità. Se rimanete impantanati durante l’installazione lato server, alla pagina Web goo.gl/rld6P5 troverete un’eccellente guida passo-passo. Dopo aver installato e configurato il lato server e impiegato alcuni minuti per suddividere la vostra collezione multimediale nel modo che più corrisponde ai vostri gusti, è il momento di affrontare il lato client, cioè configurare RasPlex. Assicuratevi di avere a portata di mano: A: una raspberry pi (ovviamente!). B: una memoria SD da almeno 1 GB di spazio,

meglio se di classe 10. C: una rete locale funzionante. naturalmente si presuppone la presenza del “materiale di contorno”, cioè cavi, tastiera, mouse e monitor funzionanti e connessi: se va tutto bene, potrete poi occuparvi del lato estetico infilando la rp in qualche bel case, ma per ora badiamo solo a far funzionare il tutto. rasplex è ancora al suo stadio iniziale di sviluppo e nonostante la squadra di programmatori lavora con in mente il modello più recente, è possibile usare anche la versione più anziana della scheda, ma certo non aspettatevi tempi di reazione fluidi e scattanti. Ci sono tre modalità di installazione a seconda del fatto che il server giri su piattaforma Windows, oS x o Gnu/Linux e le tre varianti possono essere scaricate da goo.gl/8LPXc9. il programma di installazione fornisce una comoda interfaccia grafica con la quale si può facilmente riversare l’immagine sulla SD. L’unica cosa necessaria è inserire la schedina di memoria, lanciare il programma e selezionare

la versione di rasplex da scaricare: noi raccomandiamo l’ultima disponibile, a meno che non abbiate qualche strana necessità, dopodiché selezionate l’immagine scaricata, premete su Write to SD Card e aspettate. Completata la scrittura, spostate la SD sulla raspberry e accendete. Alla prima partenza il sistema ha bisogno di tempo per le sue configurazioni iniziali – sulle quali non andiamo a indagare – con il risultato che per raggiungere l’interfaccia grafica ci sarà da aspettare parecchio: se usate la versione a 256 MB vi chiederete se la scheda è viva o no, perché darà l’impressione di essere bloccata e avrete la tentazione di spegnere tutto. Ma la lentezza è un fatto normale: rasplex sta copiando in locale tutta una serie di dati come immagini, elenchi di file, metadati e tutto quanto serve per funzionare al meglio, o quanto meno, questo è quello che riportano le informazioni presenti sul sito di rasplex. Alla prima partenza, la cache locale è vuota (in gergo si dice che è “fredda”) e necessita un po’ per essere popolata di dati (cioè per “scaldarsi”). per accelerare le cose per la prossima volta che la userete, potreste forzare il riempimento della cache locale, entrando nella sezione All e selezionando All Videos, All TV Shows e così via, obbligando la rasplex a mettere tutto in cache locale. naturalmente, si tratta di una scelta permessa ma non obbligatoria, ma se decidete di farla la reattività della rasplex ne trarrà evidente giovamento.

Aiutare RasPlex Come detto, la rasplex è una “novellina” per cui si presta a miglioramenti da parte di tutti. Visitando goo.gl/lvIsUC si può vedere come aiutare al meglio il progetto, per mantenerlo vivo ed espanderlo. nel frattempo però, godetevi pure la vostra collezione di film ad alta risoluzione.

RasPlex richiede parecchio tempo per eseguire il primo avvio a causa della cache che deve essere configurata: è comunque un piccolo sacrificio, tutto sommato

L’Utilità di scaricamento della RasPlex facilita l’installazione della distro sulla memoria SD

XBianrasplex è basata su xBMC, ma molti preferiscono delle derivate. xbian offre xBMC ospitata su una immagine minimale di raspbian, fornendo una soluzione piccola ma aggressiva. È quella che si definisce una cosa “tosta” e per di più supportata da una vasta comunità sulla quale fare affidamento nel caso vi trovaste “incastrati” da qualche parte e foste bisognosi di aiuto: per godere di xBMC sulla raspberry non dovete fare altro che andare su www.

xbian.org, seguire i vari collegamenti e scaricare l’immagine relativa. Ci sono vari vantaggi nell’usare xbian rispetto a rasplex. Anzitutto non necessiterete di un server dedicato in quanto è sufficiente un disco di rete, mediacenter o semplicemente la chiavetta uSB carica di dati. poi è leggera, non affatica le risorse dell’hardware e appena accesa la distro supporta già una vasta gamma di chipset wireless sollevandovi dalla seccatura di installare i firmware

manualmente. inoltre l’interfaccia utente fila via liscia e la dimensione della distro è tale da stare in 2 GB, permettendovi così di riciclare le SD meno capienti che avete in casa. per concludere, la qualità della riproduzione multimediale è di buon livello e l’interazione uomo-macchina è facilitata dall’interfaccia gradevole. Certo, quanto scritto è unicamente il nostro parere, quindi voi formate pure la vostra opinione confrontando pro e contro di xbian e rasplex.

LXP_140_22_25_LXF181.feat_pidistro 23 27/03/14 15:19

Page 26: 04_aprile2014

24 Linux pro 140

Raspberry Raspberry

unirsi ai migliori ha i suoi benefici

RISC OSLe cose “retrò” sono di moda in questi ultimi

tempi, inutile negarlo. ogni volta che accendete la TV, sfogliate un giornale

o visitate qualche sito internet, ecco che qualche pezzo di antiquariato informatico viene a ricordarci quanto siamo vecchi, visto che lo usavamo. E cosa può essere più retrò di Elite, il celeberrimo gioco che spopolò su tutti i microcomputer a 8 bit della nostra giovinezza? Zx Spectrum, Commodore, MSx o quello che era, ogni “scatoletta” dei tempi aveva la sua versione di questo gioco spaziale. inghiottiamo il groppo in gola dato dalla nostalgia e vediamo come rinverdire i nostri anni migliori facendo funzionare Elite sulla rp, utilizzando però il sistema operativo RISC OS della Acorn.

Cos’è RISC OS? riSC oS fu inizialmente rilasciato nel 1987 e sviluppato dalla Acorn Computers per i loro sistemi Archimedes, basati su Cpu ArM. Questa particolare versione per la raspberry è naturalmente gratuita, ma è possibile acquistare tutta una serie di software NutPi per una cinquantina di euro. il pacchetto contiene molti extra che lo impreziosiscono e rendono riSC oS un sistema completo e usabile nelle attività di tutti i giorni. parliamo della versione 5.19 rC6 che al momento della stesura di questo articolo è dotata di navigatore internet, editor di testi e del BBC BASiC, linguaggio che spopolava in inghilterra ma pressoché sconosciuto qui nell’italico Stivale. Così, se Elite vi venisse a noia, potreste programmare in prima persona il vostro

prossimo gioco. La prima cosa da fare è scaricare l’ultima versione disponibile di riSC oS per raspberry: non è difficile, tutto quello che c’è da fare è andare sul sito internet della raspberry, entrare nella sezione Download e scorrere la pagina verso il basso fino a trovare la voce di nostro interesse, la sezione dedicata a riSC oS. ora si tratta di selezionare il file torrent: essendo di soli 97.9 MB, l’acquisizione dell’immagine non porterà via troppo tempo. ora che avete l’immagine, de-comprimetela e riversatela sulla SD: come al solito, i lesti pinguini useranno “dd” mentre chi si muove su Win/Mac dovrà arrabattarsi per cercare un programma che faccia al caso loro, di solito Win32DiskImager

o RP-sd Card Builder. Successivamente all’avvio, vedrete che riSC oS è gradevole a vedersi, soprattutto se lo fate su un monitor di dimensioni generose da 1080p. Ciononostante, sfortunatamente sarete isolati in quanto la scheda di rete risulta disabilitata. Ma c’è rimedio: chiudete la finestra col messaggio di errore di netSurf, dopodiché date un rapido doppio click sull’icona Configure presente sul desktop, poi un solo click sull’icona Network e infine l’ultimo click su Internet. ora selezionate Enable TCP/IP protocol suite e le tre icone si dovrebbero illuminare, segno dell’avvenuta attivazione. per chiudere, si selezioni Close, seguito da Save e poi un bel Reset Now per riavviare con le nuove impostazioni.

Velocità, bellezza, funzionalità e un certo gusto “retrò”: tutto questo è RISC OS!

Elite e gli emulatori Dato che Arc Elite fu scritto per sistemi basati su ArMv2 o ArMv3, non funzionerà nativamente sull’ArMv6 della raspberry pi, quindi sarà necessario emulare una vecchia versione dell’ArM usato sull’ArcEm. C’è modo di scaricare individualmente l’emulatore e la relativa roM, ma esiste un modo più sbrigativo: si può scaricare uno “zippone” contenente tutto il malloppo. Scaricate il file compresso dal nome ArcEm.zip dal sito goo.gl/7cPHN, scompattatelo e spostate il tutto su una chiave uSB. riSC oS non impone l’installazione dei programmi perché può leggerli direttamente da una memoria diversa

dalla SD: infilate la memoria uSB nella raspberry, aspettate che il sistema operativo la riconosca e fate click col tasto sinistro per aprire il file manager. poi, usando netSurf andate al sito goo.gl/6Tl0E e scaricate l’ultima versione di

ArcEM. Questo è un file compresso: dovrete aprirlo tramite un’utility presente di riSC oS dal nome sparkFS. Cliccate sull’icona della SD presente nell’angolino in basso a sinistra del monitor per far partire il File Manager, poi date un doppio click sulla directory Utilities. Selezionate poi con un altro doppio click il programma sparkFS: dovrebbe apparire una nuova serie di icone nella parte inferiore del monitor. Trascinate quindi il file arcem-1.50-alpha2-riscos nell’icona sparkFS che è in basso a sinistra. in tal modo sovrascriverete i file originali contenuti in ArcEm: ciò rimpiazzerà il file arfcEm e la directory hostFS. ora andate

su goo.gl/wEGK2, e scaricate il file b5052410.arc. Come prima, trascinate il file scaricato all’interno della directory sparkFS e da lì in hostFS. per avere Elite funzionante, fate un doppio click sul nuovo file ArcEm che caricherà l’emulatore di Archimedes: ora selezionate il disco HostFS. A questo punto Elite è attivo e in base alla risoluzione del vostro monitor vi potrebbe essere richiesto se possedete uno schermo ad alta risoluzione: nel caso di risposta affermativa, Elite necessiterà di circa 10 secondi per attivarsi a causa del cambio di configurazione per meglio gestire il vostro display. Buon gioco! è come essere tornati nel 1984!

LXP_140_22_25_LXF181.feat_pidistro 24 27/03/14 15:20

Page 27: 04_aprile2014

Linux pro 140 25

Raspberry Raspberry

Convertire la rp in una classica console di gioco

RetroPieIntanto che si parla di gioco – e di “retrogaming”

in particolare – cosa c’è di meglio che usare la raspberry per ricreare una console di gioco

“dei tempi che furono”? Anche se il retrogaming non è per tutti, per molti è comunque attraente l’idea di giocare a DooM su un computer che sta nel palmo di una mano; inoltre, è un bel progetto per tenere occupati i figli nei lunghi e piovosi fine settimana. RetroPie è un sistema operativo tutto-in-uno, costruito su una versione super dimagrita di raspbian, con qualche piccolo extra aggiunto per buona misura. Concepito e creato da rp e petrockBlock, che ha follemente impiegato un sacco di tempo per aggiornare il progetto retropie a nostro beneficio. per cominciare, portatevi su goo.gl/34tFaI e scaricate l’ultima versione compressa di retropie oS: scompattate e trasferite sulla SD al solito modo, ma attenzione perché la scheda deve essere minimo da 4 GB. Completato il trasferimento, collegate la rp a un bel monitor HDMi, tastiera, mouse e anche un gamepad uSB se siete abituati a tale periferica di input e infine accendete la raspberry. Alla partenza, essendo la prima, verranno eseguite le solite configurazioni iniziali, come il setup dell’eventuale controller usato per

navigare nell’interfaccia EmulationStation, che è essenzialmente un menu dove scegliere i vari emulatori e relativi titoli da giocare. Attenzione: come tutte le “prime accensioni”, anche in retropie avrete una inizializzazione lenta. A ogni modo, passata la prima volta, le successive avranno velocità di avvio più che decorose. Concluso il setup, vi ritroverete in un’interfaccia a caratteri, dove sarà sufficiente digitare ‘emulationstation’ per caricare la grafica.

ROM e dintornii giochi che avrete a disposizione sono le versioni shareware limitate dei vari DooM, Duke nukem 3D o sconosciuti titoli per Apple ii: poca roba, quindi avrete bisogno di un po’ più di titoli. C’è però da discutere sull’aspetto legale: scaricare e giocare roM di giochi senza averne una copia originale non è legale, e anche se è difficile che società di software fallite e chiuse

più di trenta anni fa possano farvi causa, riflettete bene prima di farvi trovare le roM sulla SD. per dormire sonni tranquilli, suggeriamo di limitarsi alle roM di giochi di libero utilizzo: certo siete liberi di agire come più preferite, ma noi vi abbiamo avvisato. Detto questo, non dimenticate di verificare le pagine di configurazione del Gpio presso goo.gl/QFMWCw, che offre una guida passo-passo su come configurare un’interfaccia per connettere un controller di gioco alla rp. Gestione multimediale, retrogaming e i fantastici sistemi operativi alternativi sono solo la glassa della torta che è la raspberry: ci sono una pletora di “altri” sistemi operativi completi e pronti per essere testati e messi alla prova. La lista è lunga, ma alla fine troverete la distro-per-rp che fa per voi. Fate la vostra scelta e ditecelo, sarebbe bello fare una classifica dei sistemi operativi preferiti dai nostri lettori! LXP

La schermata per navigare nei menu della “EmulationStation”

Godetevi alcuni dei giochi classici, che dopotutto, sono i migliori

RISC OS

Sistemi ed emulatori supportati dalla RetroPieLa lista degli emulatori e dei sistemi supportati dalla versione 1.9 di retropie è di tutto rispetto, eccola:

Amiga (uAE4All) Apple ii (Basilisk ii) Arcade (piFBA, Mame4All-rpi) Atari 800 Atari 2600 (retroArch) Atari ST/STE/TT/Falcon C64 (ViCE) CaveStory (nxEngine)

Doom (retroArch) Duke nukem 3D Final Burn Alpha (retroArch) Game Boy Advance (gpSp) Game Boy Color (retroArch) Game Gear (osmose) intellivision (retroArch) MAME (retroArch) MAME (AdvMAME) neoGeo (GnGeo) neoGeo (Genesis-Gx, retroArch)

Sega Master System (osmose)

Sega Megadrive/Genesis (DGEn, picodrive)

nintendo Entertainment System nES (retroArch)

n64 (Mupen64plus-rpi) pC Engine/Turbo Grafx 16

(retroArch) playStation 1 (retroArch) ScummVM

SnES Super nintendo Entertainment System (retroArch, piSnES, SnES-rpi)

Sinclair Zx Spectrum (Fuse) pC/x86 (rpix86) Z Machine emulator (Frotz)

Se non trovate quello che cercate, perché non realizzarlo in prima persona per poi condividerlo con tutti gli altri?

LXP_140_22_25_LXF181.feat_pidistro 25 27/03/14 15:20

Page 28: 04_aprile2014

/* GNU Objective C Runtime initialization Copyright (C) 1993, 1995, 1996 Free Software Foundation,

Inc. Contributed by Kresten Krab Thorup

This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify it

under the terms of the GNU General Public License as published by the Free

Software Foundation; either version 2, or (at your option) any later version. GNU CC is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public

License for more details. You should have received a copy of the GNU General Public

License along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-

1307, USA. */ /* As a special exception, if you link this library with files compiled

with GCC to produce an executable, this does not cause the resulting

executable to be covered by the GNU General Public License. This exception

does not however invalidate any other reasons why the executable file

might be covered by the GNU General Public License. */ #include “runtime.h” /* The version number of this runtime. This must match the

number defined in gcc (objc-act.c) */ #define OBJC_VERSION 7 #define PROTOCOL_VERSION 2 /* This list contains all modules currently loaded into the runtime */ static struct objc_list* __objc_module_list = 0; /* !T:MUTEX */ /* This list contains all proto_list’s not yet assigned class links */ static struct objc_list* unclaimed_proto_list = 0; /* !T:MUTEX */ /* List of unresolved static instances. */ static struct objc_list *uninitialized_statics = 0; /* !T: /* Global runtime “write” mutex. */ _objc_mutex_t __objc_runtime_mutex;

/* Number of threads that are alive. */ int __objc_runtime_threads_alive = 1; /* !T:MUTEX */ /* Check compiler vs runtime version */ static void init_check_module_version (Module_t); /* Assign isa links to protos */ static void __objc_init_protocols (struct objc_protocol_list* protos); /* Add protocol to class */ static void __objc_class_add_protocols (Class, struct objc_protocol_

list*); /* This is a hook which is called by __objc_exec_class every time a

class or a category is loaded into the runtime. This may e.g. help a dynamic loader determine the classes that have been loaded

when an object file is dynamically linked in */ void (*_objc_load_callback)(Class class, Category* category) = 0; /*

!T:SAFE */ /* Is all categories/classes resolved? */ BOOL __objc_dangling_categories = NO; /* !T:UNUSED */ extern SEL __sel_register_typed_name (const char *name, const char *types, struct objc_selector *orig, BOOL is_const); /* Run through the statics list, removing modules as soon as all its

statics have been initialized. */ static void objc_init_statics () { struct objc_list **cell = &uninitialized_statics; struct objc_static_instances **statics_in_module; objc_mutex_lock(__objc_runtime_mutex); while (*cell) { int module_initialized = 1; for (statics_in_module = (*cell)->head; *statics_in_module; statics_in_module++) { struct objc_static_instances *statics = *statics_in_module; Class class = objc_lookup_class (statics->class_name); if (!class) module_initialized = 0; /* Actually, the static’s class_pointer will be NULL when we haven’t been here before. However, the c reminded of taking into account class posing and possible semantics... */ else if (class != statics->instances[0]->class_pointer)

{ id *inst; for (inst = &statics->instances[0]; *inst; inst++) {

/* ??? Make sure the object will not be freed. refcounting, invoke `-retain’. Without nothing and hope that `-free’ will never be. */ /* ??? Send the object an `-initStatic’ or s that effect now or later on? What are the f statically allocated instances, besides the trivial NXConstantString, anyway? */ } } } if (module_initialized) { /* Remove this module from the uninitialized list. */ struct objc_list *this = *cell; *cell = this->tail; objc_free(this); } else cell = &(*cell)->tail; } objc_mutex_unlock(__objc_runtime_mutex); } /* objc_init_statics */ /* This function is called by constructor functions module compiled. (_GLOBAL_$I$...) The purpose of this gather the module pointers so that they may be prosed initialization routines as soon as possible */ void __objc_exec_class (Module_t module) { /* Have we processed any constructors previously? This indicate that some global data structures need to be static BOOL previous_constructors = 0; static struct objc_list* unclaimed_categories = 0; /* The symbol table (defined in objc-api.h) generated by gcc */ Symtab_t symtab = module->symtab; /* Entry used to traverse hash lists */ struct objc_list** cell;148 149 /* The table of selector references for this module */150 SEL selectors = symtab->refs; 151 152 /* dummy counter */

153 int i;154 155 DEBUG_PRINTF (“received module: %s\n”, module->name);156 157 /* check gcc version */158 init_check_module_version(module);159 160 /* On the first call of this routine, initialize some data structures. */

162 {163 /* Initialize thread-safe system */164 __objc_init_thread_system();165 __objc_runtime_threads_alive = 1;166 __objc_runtime_mutex = objc_mutex_allocate();167 168 __objc_init_selector_tables();169 __objc_init_class_tables();170 __objc_init_dispatch_tables();171 previous_constructors = 1;172 }173 174 /* Save the module pointer for later processing. (not currently

used) */175 objc_mutex_lock(__objc_runtime_mutex);176 __objc_module_list = list_cons(module, __objc_module_list);177 178 /* Replace referenced selectors from names to SEL’s. */179 if (selectors)180 {181 for (i = 0; selectors[i].sel_id; ++i)182 {183 const char *name, *type;184 name = (char*)selectors[i].sel_id;185 type = (char*)selectors[i].sel_types;186 /* Constructors are constant static data so we can safely

store187 pointers to them in the runtime structures. is_const ==

YES */188 __sel_register_typed_name (name, type, 189 (struct objc_selector*)&(selectors[i]),190 YES);191 }192 }193 194 /* Parse the classes in the load module and gather selector

information. */195 DEBUG_PRINTF (“gathering selectors from module: %s\n”,

module->name);196 for (i = 0; i < symtab->cls_def_cnt; ++i)197 {198 Class class = (Class) symtab->defs[i];199 200 /* Make sure we have what we think. */201 assert (CLS_ISCLASS(class));202 assert (CLS_ISMETA(class->class_pointer));203 DEBUG_PRINTF (“phase 1, processing class: %s\n”, class-

GCCGCC

26 LINUX PRO 140

GCC

E ra il 22 marzo del 1987 quando la prima release di GCC vide la luce. Il nome, in origine, era un acronimo di GNU C Compiler

ed era stato creato da Richard Stallman (con l’aiuto di Len Tower e altri) come un componente per lo sviluppo del sistema operativo GNU. Le prime versioni di GCC riuscivano a supportare il solo linguaggio C su un numero limitato di architetture. Con il trascorrere degli anni e degli spin-off si è però evoluto e da generico compilatore quale era, ha iniziato a gestire una miriade di linguaggi e piattaforme. Creare un compilatore è tutt’altro che semplice e Stallman, fin dall’inizio, sperava di trovare qualcosa di pre-esistente che potesse semplificare il lavoro di creazione per un sistema operativo totalmente Libero. Come egli stesso racconta in Open Sources: Voice from Source Revolution, “poco prima di iniziare il progetto GNU, ho sentito parlare del Free University Compiler Kit, anche noto come VUCK (l’acronimo con la F non sarebbe stato elegantissimo...)”. Stallman, quindi, decise di scrivere al suo autore, Andy Tanenbaum, che

rispose prendendolo in giro dicendo che era “l’università a essere libera, non il compilatore”. Stallman decise allora che “il primo programma sarebbe stato un compilatore multi-lingua e multipiattaforma”. Si assunse così il gravoso compito di scrivere un front-end in C per il compilatore libero Pastel, una versione multi-piattaforma sviluppata al Lawrence Livermore Lab (derivata dal Pascal). Stallman cominciò quindi a introdurre Pastel sui computer Motorola 6800. Funzionò tutto bene, almeno

fino a quando non incappò nel fatto che “il compilatore aveva bisogno di uno spazio di molti Megabyte per lo stack e la disponibilità sul sistema UNIX del 6800 era di soli 64k”. Racconta quindi che lo stesso “compilatore Pastel interpreta tutto il file di input in un albero sintattico, convertendolo in una catena di istruzioni, finendo quindi per generare l’intero file di output senza mai liberare la memoria”. Una situazione che lo ha poi portato alla

conclusione di dover scrivere un nuovo compilatore da zero. Nel febbraio del 1986, sul GNU Bulletin, scrisse che “il problema sta nel fatto che la maggior parte del compilatore è scritto in Pastel” e in ciò che lui chiama “l’estensione confusa di Pascal”. Tuttavia era anche l’unico compilatore per questo linguaggio e quindi precisò che “per renderlo ancora più piccolo, è necessario eliminare il superfluo. Fino ad allora, non saremo in grado di compilare e quindi dovremo riscrivere tutto in C”. Stallman

adattò e riutilizzò il front-end in C che aveva scritto in principio per il compilatore Pastel. Mise poi in pratica l’idea di usare RTL (Register Transfer Language) come mezzo per memorizzare le rappresentazioni

intermedie del codice tradotto, incorporando “alcune delle idee per l’ottimizzazione” derivate dallo University of Arizona Portable Optimizer, scritto da Jack Davidson e Christopher Fraser. Paul Rubin ha poi scritto la maggior parte del pre-processore e, in accordo con Stallman, Leonard Tower ha realizzato parte del parser, del generatore RTL, delle definizioni RTL e della descrizione della macchina Vax (interna a GNU CC, http://bit.ly/1eSCE56). Michael Tiemann,

Gnu Compiler Collection era veloce, affidabile, espandibile e ha reso il Free Software all’altezza delle migliori aspettative. Linux Pro vi racconta la storia di GCC, il grande compilatore universale

Il compilatore universale

“Un compilatore free che ha portato il Software Libero là dove non era mai stato prima”

LXP_140_26_29_LXF181.feat.gcc 26 27/03/14 18:30

Page 29: 04_aprile2014

/* GNU Objective C Runtime initialization Copyright (C) 1993, 1995, 1996 Free Software Foundation,

Inc. Contributed by Kresten Krab Thorup

This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify it

under the terms of the GNU General Public License as published by the Free

Software Foundation; either version 2, or (at your option) any later version. GNU CC is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public

License for more details. You should have received a copy of the GNU General Public

License along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-

1307, USA. */ /* As a special exception, if you link this library with files compiled

with GCC to produce an executable, this does not cause the resulting

executable to be covered by the GNU General Public License. This exception

does not however invalidate any other reasons why the executable file

might be covered by the GNU General Public License. */ #include “runtime.h” /* The version number of this runtime. This must match the

number defined in gcc (objc-act.c) */ #define OBJC_VERSION 7 #define PROTOCOL_VERSION 2 /* This list contains all modules currently loaded into the runtime */ static struct objc_list* __objc_module_list = 0; /* !T:MUTEX */ /* This list contains all proto_list’s not yet assigned class links */ static struct objc_list* unclaimed_proto_list = 0; /* !T:MUTEX */ /* List of unresolved static instances. */ static struct objc_list *uninitialized_statics = 0; /* !T: /* Global runtime “write” mutex. */ _objc_mutex_t __objc_runtime_mutex;

/* Number of threads that are alive. */ int __objc_runtime_threads_alive = 1; /* !T:MUTEX */ /* Check compiler vs runtime version */ static void init_check_module_version (Module_t); /* Assign isa links to protos */ static void __objc_init_protocols (struct objc_protocol_list* protos); /* Add protocol to class */ static void __objc_class_add_protocols (Class, struct objc_protocol_

list*); /* This is a hook which is called by __objc_exec_class every time a

class or a category is loaded into the runtime. This may e.g. help a dynamic loader determine the classes that have been loaded

when an object file is dynamically linked in */ void (*_objc_load_callback)(Class class, Category* category) = 0; /*

!T:SAFE */ /* Is all categories/classes resolved? */ BOOL __objc_dangling_categories = NO; /* !T:UNUSED */ extern SEL __sel_register_typed_name (const char *name, const char *types, struct objc_selector *orig, BOOL is_const); /* Run through the statics list, removing modules as soon as all its

statics have been initialized. */ static void objc_init_statics () { struct objc_list **cell = &uninitialized_statics; struct objc_static_instances **statics_in_module; objc_mutex_lock(__objc_runtime_mutex); while (*cell) { int module_initialized = 1; for (statics_in_module = (*cell)->head; *statics_in_module; statics_in_module++) { struct objc_static_instances *statics = *statics_in_module; Class class = objc_lookup_class (statics->class_name); if (!class) module_initialized = 0; /* Actually, the static’s class_pointer will be NULL when we haven’t been here before. However, the c reminded of taking into account class posing and possible semantics... */ else if (class != statics->instances[0]->class_pointer)

{ id *inst; for (inst = &statics->instances[0]; *inst; inst++) {

/* ??? Make sure the object will not be freed. refcounting, invoke `-retain’. Without nothing and hope that `-free’ will never be. */ /* ??? Send the object an `-initStatic’ or s that effect now or later on? What are the f statically allocated instances, besides the trivial NXConstantString, anyway? */ } } } if (module_initialized) { /* Remove this module from the uninitialized list. */ struct objc_list *this = *cell; *cell = this->tail; objc_free(this); } else cell = &(*cell)->tail; } objc_mutex_unlock(__objc_runtime_mutex); } /* objc_init_statics */ /* This function is called by constructor functions module compiled. (_GLOBAL_$I$...) The purpose of this gather the module pointers so that they may be prosed initialization routines as soon as possible */ void __objc_exec_class (Module_t module) { /* Have we processed any constructors previously? This indicate that some global data structures need to be static BOOL previous_constructors = 0; static struct objc_list* unclaimed_categories = 0; /* The symbol table (defined in objc-api.h) generated by gcc */ Symtab_t symtab = module->symtab; /* Entry used to traverse hash lists */ struct objc_list** cell;148 149 /* The table of selector references for this module */150 SEL selectors = symtab->refs; 151 152 /* dummy counter */

153 int i;154 155 DEBUG_PRINTF (“received module: %s\n”, module->name);156 157 /* check gcc version */158 init_check_module_version(module);159 160 /* On the first call of this routine, initialize some data structures. */

162 {163 /* Initialize thread-safe system */164 __objc_init_thread_system();165 __objc_runtime_threads_alive = 1;166 __objc_runtime_mutex = objc_mutex_allocate();167 168 __objc_init_selector_tables();169 __objc_init_class_tables();170 __objc_init_dispatch_tables();171 previous_constructors = 1;172 }173 174 /* Save the module pointer for later processing. (not currently

used) */175 objc_mutex_lock(__objc_runtime_mutex);176 __objc_module_list = list_cons(module, __objc_module_list);177 178 /* Replace referenced selectors from names to SEL’s. */179 if (selectors)180 {181 for (i = 0; selectors[i].sel_id; ++i)182 {183 const char *name, *type;184 name = (char*)selectors[i].sel_id;185 type = (char*)selectors[i].sel_types;186 /* Constructors are constant static data so we can safely

store187 pointers to them in the runtime structures. is_const ==

YES */188 __sel_register_typed_name (name, type, 189 (struct objc_selector*)&(selectors[i]),190 YES);191 }192 }193 194 /* Parse the classes in the load module and gather selector

information. */195 DEBUG_PRINTF (“gathering selectors from module: %s\n”,

module->name);196 for (i = 0; i < symtab->cls_def_cnt; ++i)197 {198 Class class = (Class) symtab->defs[i];199 200 /* Make sure we have what we think. */201 assert (CLS_ISCLASS(class));202 assert (CLS_ISMETA(class->class_pointer));203 DEBUG_PRINTF (“phase 1, processing class: %s\n”, class-

GCCGCC

LINUX PRO 140 27

che sarebbe poi diventato il punto di riferimento di GCC nel corso del successivo decennio, ha detto che il giorno del rilascio iniziale del GCC è stato “il più emozionante e terrificante della mia vita (fino a quel momento)... Ho preso quindi una decisione. Potevo collaborare con lui (Stallman) o scegliere di andare altrove. Ho scaricato la versione 1.0 di GCC e ho iniziato una collaborazione che sarebbe durata dieci anni” (Open Source Initiative, http://bit.ly/1gKAtC2). Nel giro di un anno o due, GCC ha cominciato a cambiare il panorama dei compilatori e ha portato il Software Libero in luoghi dove non era mai stato utilizzato prima. Durante gli anni Ottanta, i compilatori erano considerati dei beni costosi. GCC era veloce, conveniente, espandibile ed è diventato uno strumento innovativo per il Software Libero. È stato utilissimo ai produttori di hardware e ai programmatori che hanno scritto software con la chiara intenzione di renderlo interoperabile tra le piattaforme proprietarie di UNIX o di altri sistemi operativi. Gli sviluppatori di compilatori proprietari erano inclini ad aggiungere caratteristiche che hanno causato imperfezioni e incongruenze inspiegabili tra una macchina e l’altra. GCC, invece, ha realizzato un percorso semplice e veloce per creare software, lavorando su una varietà inimmaginabile di OS, processori e dispositivi. GCC, però, non si è sempre conformato agli standard ANSI, anche se questo aspetto è mutato negli ultimi anni. Come nella maggior parte dei compilatori commerciali, alcune estensioni sono state scritte con versioni precedenti di GCC. La differenza stava però nel fatto che GCC riusciva a essere portabile su più piattaforme e i programmatori pensarono che, rendendolo più accessibile e alla portata di tutti, il loro software avrebbe avuto la stessa portabilità su più architetture. Negli ultimi anni, gli sviluppatori di GCC sono stati più attenti nel supportare linguaggi di programmazione standard, anche se questo ha causato alcune

frizioni tra loro e in particolare con Linus Torvalds. Quest’ultimo ha infatti affermato che “per qualche motivo, gli sviluppatori del compilatore sembrano abbastanza lontani dalla vita reale, tanto da avere la tendenza a parlare in termini di questa o quella specifica, anziché dichiarare apertamente che c’è un problema” (fonte: http://bit.ly/1b3aykO). L’aspetto positivo delle specifiche sta nel fatto che le estensioni inattese del linguaggio non producono risultati inattesi e un compilatore libero scoraggia le estensioni proprietarie. Un effetto collaterale del successo iniziale di GCC come compilatore universale è stato diventare il veicolo finale per diffondere l’idea del Software Libero. I programmatori sono stati

sedotti dalla sua utilità e, alla fine degli anni ‘80, GCC e GNU sono diventati strumenti comuni nel bagaglio di un programmatore UNIX GCC ha poi reso possibile per Linus Torvalds la compilazione delle prime versioni di Linux sul suo 486, rendendo tutte le architetture portabili. Nel 1989, GCC era diventato il principale vettore per le prime

offerte commerciali di Software Libero da parte di Cygnus Solution, fondata nel 1989 da John Gilmore e Michael Tiemann. Al momento della prima versione stabile di GCC, Tiemann aveva contribuito al GNU C++ Compiler e aveva portato GCC verso altre architetture.

Il successo di CygnusCygnus è stata la prima società a dare la riprova che era possibile utilizzare Software Libero in ambito aziendale. Secondo Tiemann in Open Source Voices from the Open Source Revolution, “l’idea di base era semplice: l’Open Source può unificare gli sforzi dei programmatori di tutto il mondo e delle società che fornendo servizi commerciali

(personalizzazioni, miglioramenti e supporto) basati su questo software, potrebbero sfruttare le economie di scala, dando un ampio risalto a questo nuovo tipo di programmi”.“In un primo momento ho provato a fare mia

la tesi che già fu di Stallman, ovvero entrando nel merito. Spiegavo quindi come la libertà di condividere può portare a una maggiore innovazione e a costi inferiori, economie di scala ancora più ambiziose con standard sempre più aperti”. La risposta universale che ebbe dalla gente, fu che “l’idea è assolutamente grandiosa, peccato che non

“GCC è diventato il vettore per le offerte commerciali di Software Libero”

La storia di GCC non è stata sempre rose e fiori. Nel 1997, la Free Software Foundation ha nominato un responsabile GCC. Tuttavia, in qualità

di sviluppatore Cygnus, D.V. Henkel-Wallace ha fatto notare che ci sono state parecchie rimostranze provenienti da “Cygnus, il popolo Linux, PGCC, Fortran e molti altri”, riguardo al fatto che il loro lavoro “non era stato inserito nella struttura ufficiale GCC, nonostante gli sforzi compiuti”. Il problema è venuto fuori quando

Henkel-Wallace ha annunciato in un’email (fonte: http://bit.ly/1aFYn0Y) che “un gruppo di noi (compresi Fortran, Linux, Intel e hacker RTEMS) ha deciso di avviare un progetto sperimentale. Solo che questa volta la comunità con cui stiamo lavorando è più grande! Abbiamo chiamato questo progetto EGCS (pronunciato eggs, vale a dire “uova”) o Experimental/Enhanced GNU Compiler System”. Il fork EGCS ha avuto successo, riunendo tutti i diversi elementi che erano stati ignorati

dai manutentori di GCC. EGCS è stato lanciato come fork ufficiale e all’inizio del1999 i due rami si sono riconciliati: “La FSF ha deciso di usare il codice EGCS per GCC e il progetto EGCS ha deciso di sciogliersi per ritornare sotto l’egida dell’originale GCC”. La reintegrazione è stata contemplata con il rilascio di GCC 2.95 nel luglio 1999, quando il GNU C Compiler è stato ribattezzato GNU Compiler Collection e il progetto ha adottato l’approccio di EGCS, supervisionato da un comitato direttivo.

EGCS, o meglio Enhanced GNU Compiler System

Il creatore di GCC, Richard Stallman, comodamente seduto

sotto un albero mentre usa il suo netbook Lemote

LXP_140_26_29_LXF181.feat.gcc 27 27/03/14 18:30

Page 30: 04_aprile2014

/* GNU Objective C Runtime initialization Copyright (C) 1993, 1995, 1996 Free Software Foundation,

Inc. Contributed by Kresten Krab Thorup

This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify it

under the terms of the GNU General Public License as published by the Free

Software Foundation; either version 2, or (at your option) any later version. GNU CC is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public

License for more details. You should have received a copy of the GNU General Public

License along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-

1307, USA. */ /* As a special exception, if you link this library with files compiled

with GCC to produce an executable, this does not cause the resulting

executable to be covered by the GNU General Public License. This exception

does not however invalidate any other reasons why the executable file

might be covered by the GNU General Public License. */ #include “runtime.h” /* The version number of this runtime. This must match the

number defined in gcc (objc-act.c) */ #define OBJC_VERSION 7 #define PROTOCOL_VERSION 2 /* This list contains all modules currently loaded into the runtime */ static struct objc_list* __objc_module_list = 0; /* !T:MUTEX */ /* This list contains all proto_list’s not yet assigned class links */ static struct objc_list* unclaimed_proto_list = 0; /* !T:MUTEX */ /* List of unresolved static instances. */ static struct objc_list *uninitialized_statics = 0; /* !T: /* Global runtime “write” mutex. */ _objc_mutex_t __objc_runtime_mutex;

/* Number of threads that are alive. */ int __objc_runtime_threads_alive = 1; /* !T:MUTEX */ /* Check compiler vs runtime version */ static void init_check_module_version (Module_t); /* Assign isa links to protos */ static void __objc_init_protocols (struct objc_protocol_list* protos); /* Add protocol to class */ static void __objc_class_add_protocols (Class, struct objc_protocol_

list*); /* This is a hook which is called by __objc_exec_class every time a

class or a category is loaded into the runtime. This may e.g. help a dynamic loader determine the classes that have been loaded

when an object file is dynamically linked in */ void (*_objc_load_callback)(Class class, Category* category) = 0; /*

!T:SAFE */ /* Is all categories/classes resolved? */ BOOL __objc_dangling_categories = NO; /* !T:UNUSED */ extern SEL __sel_register_typed_name (const char *name, const char *types, struct objc_selector *orig, BOOL is_const); /* Run through the statics list, removing modules as soon as all its

statics have been initialized. */ static void objc_init_statics () { struct objc_list **cell = &uninitialized_statics; struct objc_static_instances **statics_in_module; objc_mutex_lock(__objc_runtime_mutex); while (*cell) { int module_initialized = 1; for (statics_in_module = (*cell)->head; *statics_in_module; statics_in_module++) { struct objc_static_instances *statics = *statics_in_module; Class class = objc_lookup_class (statics->class_name); if (!class) module_initialized = 0; /* Actually, the static’s class_pointer will be NULL when we haven’t been here before. However, the c reminded of taking into account class posing and possible semantics... */ else if (class != statics->instances[0]->class_pointer)

{ id *inst; for (inst = &statics->instances[0]; *inst; inst++) {

/* ??? Make sure the object will not be freed. refcounting, invoke `-retain’. Without nothing and hope that `-free’ will never be. */ /* ??? Send the object an `-initStatic’ or s that effect now or later on? What are the f statically allocated instances, besides the trivial NXConstantString, anyway? */ } } } if (module_initialized) { /* Remove this module from the uninitialized list. */ struct objc_list *this = *cell; *cell = this->tail; objc_free(this); } else cell = &(*cell)->tail; } objc_mutex_unlock(__objc_runtime_mutex); } /* objc_init_statics */ /* This function is called by constructor functions module compiled. (_GLOBAL_$I$...) The purpose of this gather the module pointers so that they may be prosed initialization routines as soon as possible */ void __objc_exec_class (Module_t module) { /* Have we processed any constructors previously? This indicate that some global data structures need to be static BOOL previous_constructors = 0; static struct objc_list* unclaimed_categories = 0; /* The symbol table (defined in objc-api.h) generated by gcc */ Symtab_t symtab = module->symtab; /* Entry used to traverse hash lists */ struct objc_list** cell;148 149 /* The table of selector references for this module */150 SEL selectors = symtab->refs; 151 152 /* dummy counter */

153 int i;154 155 DEBUG_PRINTF (“received module: %s\n”, module->name);156 157 /* check gcc version */158 init_check_module_version(module);159 160 /* On the first call of this routine, initialize some data structures. */

162 {163 /* Initialize thread-safe system */164 __objc_init_thread_system();165 __objc_runtime_threads_alive = 1;166 __objc_runtime_mutex = objc_mutex_allocate();167 168 __objc_init_selector_tables();169 __objc_init_class_tables();170 __objc_init_dispatch_tables();171 previous_constructors = 1;172 }173 174 /* Save the module pointer for later processing. (not currently

used) */175 objc_mutex_lock(__objc_runtime_mutex);176 __objc_module_list = list_cons(module, __objc_module_list);177 178 /* Replace referenced selectors from names to SEL’s. */179 if (selectors)180 {181 for (i = 0; selectors[i].sel_id; ++i)182 {183 const char *name, *type;184 name = (char*)selectors[i].sel_id;185 type = (char*)selectors[i].sel_types;186 /* Constructors are constant static data so we can safely

store187 pointers to them in the runtime structures. is_const ==

YES */188 __sel_register_typed_name (name, type, 189 (struct objc_selector*)&(selectors[i]),190 YES);191 }192 }193 194 /* Parse the classes in the load module and gather selector

information. */195 DEBUG_PRINTF (“gathering selectors from module: %s\n”,

module->name);196 for (i = 0; i < symtab->cls_def_cnt; ++i)197 {198 Class class = (Class) symtab->defs[i];199 200 /* Make sure we have what we think. */201 assert (CLS_ISCLASS(class));202 assert (CLS_ISMETA(class->class_pointer));203 DEBUG_PRINTF (“phase 1, processing class: %s\n”, class-

GCCGCC

28 LINUX PRO 140

funzionerà, perché a nessuno viene in mente di pagare per avere del Software Libero”. Dopo due anni in giro per il mondo a sponsorizzare la sua posizione, Tiemann ha concluso che “se tutti pensano che sia una grande idea, probabilmente lo è, ma se nessuno ritiene possa funzionare, non avrò concorrenza!”. Sempre secondo Tiemann, “in definitiva, il Manifesto GNU è un documento razionale, che analizza la natura stessa del software, della programmazione, della grande tradizione accademica e prescinde dalle conseguenze monetarie, perché ci sono imperativi etici e morali che obbigano a condividere liberamente le informazioni che sono state condivise con noi. Io ho raggiunto una conclusione diversa da quella che Stallman ha spesso sostenuto e cioè che la libertà di usare, distribuire e modificare il software prevarrà contro ogni modello che cerca di limitarla, non per motivi etici, ma per ragioni di mercato guidato dalla competitività. Quando ho capito quanto poco attraente era la competizione con il software Open Source, sapevo che sarebbe stata

un’idea attuale”. Cygnus ha costruito il suo successo su GCC e il debugger GNU e tra i suoi clienti ci sono nomi come Intel, Sony, AMD, 3Com e Adobe. GCC ha semplificato il compito di compilare il codice per nuovi linguaggi e architetture e le aziende hanno messo sotto contratto Cygnus proprio per questo. Tutte le aggiunte al codice sono state ricondotte all’amministrazione della Free Software Foundation. Tuttavia, la maggior parte dei principali miglioramenti apportati a GCC durante il 1990 sono stati opera degli sviluppatori di Cygnus. Successivamente, sempre Cygnus è diventato un importante fornitore di supporto per il Software Libero, sviluppando moltissimi strumenti in altrettanti settori dell’industria. In definitiva, è stata un prototipo per tutte le aziende Open Source che si sono poi succedute. Cygnus è stata la prima acquisizione importante di Red Hat dopo la sua IPO nel 2000. John Gilmore, più tardi, ha affermato come abbiano avuto “contratti da milioni di dollari. Un esempio è Sony, che ci ha permesso di sviluppare compilatori ed emulatori per PlayStation. Questo ha consentito ai programmatori di iniziare a lavorare un anno prima che l’hardware della console fosse disponibile”. Per illustrare l’ampiezza e l’ubiquità di GCC, entro il 1999, il toolkit Cygnus GNU Pro ha incluso il supporto GCC per oltre 175 host” (fonte: http://bit.ly/L50pxK).

Obiettivo opacitàPer ragioni di semplicità, si può dire che un compilatore GCC è formato da tre parti: un front-end che contiene il codice specifico per la compilazione di un particolare linguaggio, un middle-end o fase di ottimizzazione del codice e il back-end, che prepara il codice compilato per l’architettura specifica. Tra ogni “end”, il codice tradotto viene memorizzato in forma di “rappresentazione intermedia (IR)”, conosciuto in varie fasi come Generic, Gimple e RTL. Questo compilatore include una varietà di front-end (per ogni linguaggio) e back-end (per ciascuna architettura) e si compone

di oltre due milioni di linee di codice. C’è chi sostiene che il codice GCC manchi di chiarezza e che ciò abbia lavorato contro le strategie a lungo termine del GCC stesso. In linea di massima, è vero che il codice deve essere pulito e modulare, ma è altrettanto realistico il fatto che tenda a essere poco leggibile. Il processo di disaccoppiamento di front-end e back-end dal resto del codice non è così facile come si potrebbe pensare. Ciò significa che la via più semplice per coloro che desiderano estendere GCC con l’aggiunta di un linguaggio o di macchine specifiche è rilasciare i vari aggiornamenti sotto licenza GPL; la quale, a sua volta, rende i linguaggi e le architetture più accessibili ad altri software liberi. La portabilità di GCC ha migliorato la scalabilità del kernel Linux e la scarsa leggibilità lo ha reso incorruttibile e difficile da usare per fini proprietari. Nel corso degli anni, la tendenza degli sviluppatori di compilatori e dei produttori di hardware nel seguire “la via più semplice” ha contribuito alla compatibilità universale di GCC a maggior beneficio di utenti e programmatori. Joe Buck, un collaboratore GCC, ha scritto (fonte: http://bit.ly/1aojDVo) come Stallman “pensi che le persone impegnate nell’estensione di GCC lo facciano sperando di impiegare le loro estensioni proprietarie, per poi scoprire che non possono farlo, decidendo semplicemente di contribuire al codice... Altrimenti non lo potrebbero distribuire e dovrebbero supportarlo da soli per sempre o rischiare di avere problemi legali. RMS (Stallman) ha qualche prova riguardo al fatto che talvolta succeda (C++, Objective-C e molti altri back-end). Quindi, l’intento non è quello di impedire alle persone di usarlo, ma fare in modo che i cambiamenti che apportano vengano aggiunti al codice, anche se non è ciò che vogliono”. GCC è il fiore all’occhiello del movimento del Software Libero e il suo obiettivo è proprio raggiungere la libertà, anche se inevitabilmente è un concetto che può non andare bene a tutti. Il codice di un compilatore, infatti, può rivelare i segreti dei produttori e divulgare le innovazioni

Cygnus: commercializzare il fattore GNU

Michael Tiemann, attuale vice presidente Open Source Affairs di Red Hat

C ygnus è stata fondata da Michael Tiemann, David Wallace e John Gilmore. Quando GCC è stato rilasciato, Tiemann aveva 22 anni e sognava

di scrivere “Il Grande Compilatore Americano”. “Il mio apprezzamento per Stallman e il progetto GNU è cresciuto appena ho cominciato a capire la profondità dei suoi intenti tecnici, la bellezza delle strategie e il metodo da cui entrambe erano protette per me, anziché da me, con la licenza GPL (fonte: Open Source Initiative, http://bit.ly/1gKAtC2)”. Dopo aver scaricato

GCC fece un porting per il National Semiconductor 32032, osservando che “la tipica azienda di compilazione paga milioni di dollari per il servizio di consegna di un compilatore in 12 o 18 mesi”. In poche settimane, Tiemann stava generando codice con GCC tale da essere “il 40% più veloce rispetto all’originale”. “Feci diversi porting quell’estate. - ha detto - dimostrando con assoluta chiarezza, che da un hacking su GNU ho potuto generare velocemente risultati migliori rispetto a intere squadre di sviluppatori alle dipendenze di imprese molto

grandi. Entro la fine di quell’anno, raggiunsi un nuovo obiettivo: scrivere il compilatore GNU C++, che è stato il mio ‘Grande Compilatore C++ Americano’, una nuova e migliore versione del mio sogno originale”. Tiemann ha continuato a scrivere e sviluppare “la prima esercitazione completa su GNU compiler, dando un centinaio di slide LaTeX a Stallman”, facendo così nascere il Cygnus Support. “Due anni più tardi, ho formalmente commercializzato i vantaggi del software GNU. Il resto, come si suol dire, è storia!”.

LXP_140_26_29_LXF181.feat.gcc 28 27/03/14 18:30

Page 31: 04_aprile2014

/* GNU Objective C Runtime initialization Copyright (C) 1993, 1995, 1996 Free Software Foundation,

Inc. Contributed by Kresten Krab Thorup

This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify it

under the terms of the GNU General Public License as published by the Free

Software Foundation; either version 2, or (at your option) any later version. GNU CC is distributed in the hope that it will be useful, but

WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public

License for more details. You should have received a copy of the GNU General Public

License along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-

1307, USA. */ /* As a special exception, if you link this library with files compiled

with GCC to produce an executable, this does not cause the resulting

executable to be covered by the GNU General Public License. This exception

does not however invalidate any other reasons why the executable file

might be covered by the GNU General Public License. */ #include “runtime.h” /* The version number of this runtime. This must match the

number defined in gcc (objc-act.c) */ #define OBJC_VERSION 7 #define PROTOCOL_VERSION 2 /* This list contains all modules currently loaded into the runtime */ static struct objc_list* __objc_module_list = 0; /* !T:MUTEX */ /* This list contains all proto_list’s not yet assigned class links */ static struct objc_list* unclaimed_proto_list = 0; /* !T:MUTEX */ /* List of unresolved static instances. */ static struct objc_list *uninitialized_statics = 0; /* !T: /* Global runtime “write” mutex. */ _objc_mutex_t __objc_runtime_mutex;

/* Number of threads that are alive. */ int __objc_runtime_threads_alive = 1; /* !T:MUTEX */ /* Check compiler vs runtime version */ static void init_check_module_version (Module_t); /* Assign isa links to protos */ static void __objc_init_protocols (struct objc_protocol_list* protos); /* Add protocol to class */ static void __objc_class_add_protocols (Class, struct objc_protocol_

list*); /* This is a hook which is called by __objc_exec_class every time a

class or a category is loaded into the runtime. This may e.g. help a dynamic loader determine the classes that have been loaded

when an object file is dynamically linked in */ void (*_objc_load_callback)(Class class, Category* category) = 0; /*

!T:SAFE */ /* Is all categories/classes resolved? */ BOOL __objc_dangling_categories = NO; /* !T:UNUSED */ extern SEL __sel_register_typed_name (const char *name, const char *types, struct objc_selector *orig, BOOL is_const); /* Run through the statics list, removing modules as soon as all its

statics have been initialized. */ static void objc_init_statics () { struct objc_list **cell = &uninitialized_statics; struct objc_static_instances **statics_in_module; objc_mutex_lock(__objc_runtime_mutex); while (*cell) { int module_initialized = 1; for (statics_in_module = (*cell)->head; *statics_in_module; statics_in_module++) { struct objc_static_instances *statics = *statics_in_module; Class class = objc_lookup_class (statics->class_name); if (!class) module_initialized = 0; /* Actually, the static’s class_pointer will be NULL when we haven’t been here before. However, the c reminded of taking into account class posing and possible semantics... */ else if (class != statics->instances[0]->class_pointer)

{ id *inst; for (inst = &statics->instances[0]; *inst; inst++) {

/* ??? Make sure the object will not be freed. refcounting, invoke `-retain’. Without nothing and hope that `-free’ will never be. */ /* ??? Send the object an `-initStatic’ or s that effect now or later on? What are the f statically allocated instances, besides the trivial NXConstantString, anyway? */ } } } if (module_initialized) { /* Remove this module from the uninitialized list. */ struct objc_list *this = *cell; *cell = this->tail; objc_free(this); } else cell = &(*cell)->tail; } objc_mutex_unlock(__objc_runtime_mutex); } /* objc_init_statics */ /* This function is called by constructor functions module compiled. (_GLOBAL_$I$...) The purpose of this gather the module pointers so that they may be prosed initialization routines as soon as possible */ void __objc_exec_class (Module_t module) { /* Have we processed any constructors previously? This indicate that some global data structures need to be static BOOL previous_constructors = 0; static struct objc_list* unclaimed_categories = 0; /* The symbol table (defined in objc-api.h) generated by gcc */ Symtab_t symtab = module->symtab; /* Entry used to traverse hash lists */ struct objc_list** cell;148 149 /* The table of selector references for this module */150 SEL selectors = symtab->refs; 151 152 /* dummy counter */

153 int i;154 155 DEBUG_PRINTF (“received module: %s\n”, module->name);156 157 /* check gcc version */158 init_check_module_version(module);159 160 /* On the first call of this routine, initialize some data structures. */

162 {163 /* Initialize thread-safe system */164 __objc_init_thread_system();165 __objc_runtime_threads_alive = 1;166 __objc_runtime_mutex = objc_mutex_allocate();167 168 __objc_init_selector_tables();169 __objc_init_class_tables();170 __objc_init_dispatch_tables();171 previous_constructors = 1;172 }173 174 /* Save the module pointer for later processing. (not currently

used) */175 objc_mutex_lock(__objc_runtime_mutex);176 __objc_module_list = list_cons(module, __objc_module_list);177 178 /* Replace referenced selectors from names to SEL’s. */179 if (selectors)180 {181 for (i = 0; selectors[i].sel_id; ++i)182 {183 const char *name, *type;184 name = (char*)selectors[i].sel_id;185 type = (char*)selectors[i].sel_types;186 /* Constructors are constant static data so we can safely

store187 pointers to them in the runtime structures. is_const ==

YES */188 __sel_register_typed_name (name, type, 189 (struct objc_selector*)&(selectors[i]),190 YES);191 }192 }193 194 /* Parse the classes in the load module and gather selector

information. */195 DEBUG_PRINTF (“gathering selectors from module: %s\n”,

module->name);196 for (i = 0; i < symtab->cls_def_cnt; ++i)197 {198 Class class = (Class) symtab->defs[i];199 200 /* Make sure we have what we think. */201 assert (CLS_ISCLASS(class));202 assert (CLS_ISMETA(class->class_pointer));203 DEBUG_PRINTF (“phase 1, processing class: %s\n”, class-

GCCGCC

LINUX PRO 140 29

ai concorrenti. Tuttavia, non vi è alcun obbligo nel rilasciare il codice in GPL prima che un solo frammento di codice sia pubblico, e back-end chiusi limitano le opportunità dei programmatori di sperimentare ed esplorare. Al contrario, per alcuni produttori rilasciare il codice sotto licenza GPL è stata una mossa che si è rivelata nel loro interesse. L’uso di GCC da parte di Sony ne è un valido esempio, poiché ha aiutato i programmatori di giochi a realizzarli prima ancora che la PlayStation fosse disponibile. Le difficoltà nell’utilizzare codice non conforme alla GPL può accidentalmente creare un sottoprodotto dello sviluppo iniziale di GCC, che non deriva da una decisione progettuale intenzionale. Tuttavia, come riferisce Buck, “RMS vi direbbe che abbiamo solo un compilatore GNU C++, perché gli impiegati di Mike Tiemann non potevano renderlo proprietario. Possiamo sfruttare solo un compilatore GNU Objective-C, perché Steve Jobs non poteva crearne uno proprietario allo stesso modo. Era l’equivalente che scaricare i formati esistenti al momento: avremmo solo C. Anche se, qui abbiamo a che fare con il problema inverso: i front-end proprietari che si collegano ai back-end GNU. Rendendo semplice compilare su GCC e più vantaggioso sfruttare la licenza GPL, RMS spera di motivare un numero maggiore di persone a produrre ancora più Software Libero”. Ciò nonostante, Buck avverte che “può andare bene fino a che non ci sono inconvenienti, ma quando si difende del codice poco leggibile e l’architettura non estendibile, allora c’è un problema” (fonte: http://bit.ly/1d6BqQV). Rendere più difficile aggiungere add-on proprietari può essere stato utile quando il Software Libero era visto come antitetico alla pratica commerciale. Tuttavia,

i tempi sono cambiati e i produttori di hardware e software sono molto meno avversi ad aprire le porte del loro codice. A tal fine, negli ultimi anni, gli sviluppatori di GCC hanno compiuto una mossa radicale per aggiungere plug-in al codice. Questi consentono l’uso di altre licenze e offrono una parvenza di modularità per gli sviluppatori di terze parti. Qui è dove entra in gioco LLVM, che si pone come alternativa Open Source a GCC e ha annunciato il suo

arrivo in un documento intitolato Architetture per una nuova generazione di GCC, presentato all’Annual GCC Developers Summit del 2003 da Chris Lattner e Vikram Adve. LLVM ha avuto tantissimo successo ed è stato concepito come sistema modulare e decisamente più leggibile di GCC.

Mele e aranceLLVM è stato rilasciato sotto licenza BSD e ha sostituito GCC come compilatore preferito per Apple e sistemi operativi BSD. I sostenitori di quest’ultimo ritengono che la licenza BSD sia libera, in quanto non pone limiti all’utente finale (salvo il requisito dell’attribuzione). Dal punto di vista del Software Libero, la differenza sostanziale tra le licenze è che la BSD permette a LLVM di essere assorbito in un prodotto proprietario e non vi è alcun obbligo di feedback per le modifiche. Il codice in GPL, e le eventuali modifiche o le estensioni, devono essere rilasciate come free software, con il risultato che un grande volume di programmi è rimasto libero per

le successive generazioni di sviluppatori. L’aspetto principale di LLVM, che va sia a favore sia a sfavore, riguarda la facoltà di consentire a terzi di mantenere il controllo esclusivo sul proprio codice in modo più semplice. La struttura, inoltre, è svincolata dalla licenza. È possibile che LLVM sia più accessibile e facile da sfruttare rispetto a GCC ed è probabilmente per questo che è molto popolare tra i programmatori di linguaggi come Ruby, Python,

Haskell, Pura e Lua. La modularità e la semplificazione hanno aperto la strada ad altre innovazioni, come l’opzione JIT (just in time), o la compilazione inline. Inoltre, hanno reso più semplice per le aziende come Apple, che utilizzano LLVM per realizzare

le ultime versioni di OS X, includere le estensioni proprietarie del linguaggio e, se lo desiderano, creare ambienti di codifica LLVM proprietari. Il progredire di LLVM ha dato ad Apple la possibilità di cercare alternative su cui è stata in grado di esercitare una maggiore flessibilità, confermando così un percorso tanto positivo, quanto negativo. Una sana concorrenza tra GCC e LLVM ha fatto bene a tutti, mantenendo sul chi va là gli sviluppatori di GCC. Tuttavia, alla fine, quest’ultimo si ritrova il vantaggio dell’estrema portabilità che la sua storia comprova, nonché la supervisione di un comitato direttivo trainato da un’ampia parte dell’industria. GCC è indipendente da ogni singola entità commerciale ed è proprio questa indipendenza ad assicurare l’aderenza agli standard. Porta poi con sé la libertà delle argomentazioni, ma anche delle preoccupazioni sui brevetti e sul controllo proprietario dei linguaggi di programmazione. I quali, è bene ricordarlo, sono l’ultimo strumento di libertà per l’espressione di un programmatore. LXP

“LLVM è stato concepito come sistema modulare e più leggibile di GCC”

La struttura di base di un compilatore GCC consiste in front-end, middle-end e back-end

John Gilmore, co-fondatore

di Cygnus Support, della Electronic

Frontier Foundation e collaboratore

di lungo corso del progetto GNU

LXP_140_26_29_LXF181.feat.gcc 29 27/03/14 18:30

Page 32: 04_aprile2014

Premiata Amministreria Dottor Brown

Tecniche esoteriche per i sysadmin direttamente dai recessi più impenetrabili della sala server

Dr Chris BrownIl Dottore si occupa di formazione, scrittura di articoli e consulenze su Linux. Trova che il suo PhD in fisica delle particelle non sia di alcun aiuto in questo tipo di lavoro.

SysadminSysadmin

30 LInux pro 140 LInux pro 140 31

Agli entusiasti di Linux piace sentire di aziende che sono passate dallo sviluppo di software proprietario a quello

open Source: ce ne sono tantissime. Ma non è raro che un software nato come open Source passi a un ambiente proprietario e quello che succede dopo può essere interessante... A volte gli sviluppatori di un prodotto open Source creano una loro azienda. un esempio classico è PGP (Pretty Good Privacy), molto usato per cifrare le mail. Lo sviluppò phil Zimmerman, che poi diede vita alla pGp Inc., in seguito acquisita da network Associates che la vendette a pGp Corporation, che fu acquistata da Symantec. Chiaro, no? nel frattempo la comunità open Source si è mobilitata e ha prodotto GPG, un’alternativa con licenza GpL che è conforme alle specifiche OpenPGP. un altro bell’esempio è il programma di rilevazione delle intrusioni Tripwire, creato in origine dalla purdue university. In seguito uno degli sviluppatori ne ha acquistato i diritti e ha

fondato la Tripwire Inc. L’azienda ha reso disponibile il codice sorgente della versione accademica (Open Source Tripwire), ma tutte le novità prodotte in seguito (Tripwire Enterprise, Tripwire Log Center) sono state sviluppate in forma proprietaria. Di nuovo la comunità ha risposto con un programma analogo rilasciato sotto licenza GpL: AIDE. una storia con un finale meno soddisfacente è quella di openSolaris, sviluppato in origine da Sun, uno dei pionieri di unIx, la cui comunità di sviluppo è stata prontamente sciolta quando oracle ha acquistato Sun nel 2010. In questo caso la risposta è stata la Illumos Foundation, che ha fatto un fork del codice per creare openIndiana.oracle compare anche nelle due storie che concludono l’articolo, anche se non ho scelto di proposito di assegnare all’azienda la parte del cattivo. All’inizio degli anni 2000 OpenOffice divenne un serio sfidante di Microsoft. poco dopo l’acquisizione di Sun da parte di oracle però il progetto venne chiuso. In questo caso c’erano

almeno due discendenti: LibreOffice e Apache OpenOffice. per finire anche MySQL ha preso la strada di oracle. La risposta della comunità ha portato a MariaDB. Quello che colpisce di queste storie è la sorprendente resilienza della “comunità”. Ben oltre il crollo degli imperi di oracle, Microsoft e Google avremo ancora l’open Source.

Secondo Ars Technica (http://bit.ly/1brzSG5) la nuova nave consegnata alla Marina uSA, la uSS Zumwalt, vanta

una robusta capacità di calcolo che si basa su red Hat Linux. Grazie al cielo...Capitano: Sottotenente, abbiamo notizia di navi nemiche in avvicinamento. Metta online il sistema di guida dei missili.Sottotenente: Signorsì! [pausa] Ehm, signore...Capitano: Cosa c’è?Sottotenente: Vuole leggere l’accordo di licenza? È un po’ lungo...Capitano: È per caso impazzito? nessuno legge gli accordi di licenza. Clicchi su Accetto.Sottotenente: Signorsì! [un’altra pausa] Signore?Capitano: Cosa c’è ora?Sottotenente: Dobbiamo controllare se ci sono aggiornamenti disponibili?Capitano: no! non vogliamo controllare se ci sono degli aggiornamenti disponibili. non vogliamo partecipare a sondaggi della clientela e di sicuro non vogliamo che il nostro indirizzo top-secret di posta elettronica entri a far parte delle loro liste di marketing. Vogliamo solo usarlo!Sottotenente: Andiamo meglio, signore. Sta installando i driver. non dovrebbe metterci molto.Capitano: oK sottotenente, faccia partire il cluster di intelligence tattica.Sottotenente: Avrei bisogno di una carta di credito, signore.Capitano: una carta di credito?Sottotenente: Signorsì. Se ricorda abbiamo solo la versione di prova che scade dopo 60 giorni, ed è scaduta.Capitano: Senta, quei tipi là fuori sono abbastanza sgradevoli. non fanno prigionieri e usano Linux. Clicchi semplicemente su quel grosso pulsante rosso che dice “FuoCo”. Quando poi chiede “Sei sicuro?” clicchi su Sì.Sottotenente: Sì, capitano. Gliela faremo vedere! Fuoco... uhm, lo schermo è diventato tutto blu.

Siamo spacciati!

Le software house commerciali nascono, vengono vendute e muoiono. Con l’open Source è diverso...

Spirito comunitario

Illumos: una fenice che sorge dalle ceneri di Solaris rappresenta il potere risanatore dell’Open Source

LXP_140_30_33_LXF177.sysadmin 30 27/03/14 18:26

Page 33: 04_aprile2014

SysadminSysadmin

30 LInux pro 140 LInux pro 140 31

Cominciamo con il nome, così strano. Awk lo deve alle iniziali dei cognomi dei suoi inventori: Alfred Aho, peter Weinberger e Brian Kernigan. per me Awk è la quintessenza di Linux.

perché? È un filtro di testo che lavora molto bene all’interno di una pipeline, ma soprattutto permette di fare cose davvero utili con molto poco codice. Awk è un linguaggio di programmazione completo. Ha variabili, aritmetica, vettori, cicli, salti, funzioni e tutto quello che ci si aspetta in un normale linguaggio di programmazione. In questo tutorial non ho cercato di produrre una descrizione sistematica del linguaggio: il mio scopo è piuttosto quello di mostrare e spiegare con alcuni semplici esempi come sia possibile fare cose utili in solo una o due righe di codice. una celebrazione della filosofia small is beautiful (piccolo è bello).

Funzionamento di baseAwk legge dal suo standard input riga per riga: ciascuna riga viene poi spezzata in campi. All’interno di un programma i campi sono indicati come $1, $2 e così via. per default i campi sono separati da caratteri di spaziatura, ma è possibile modificare questo comportamento, come vedremo tra poco. L’esempio nella figura mostra una “lista della spesa” strutturata e come Awk la spezza nei diversi campi. un programma consiste di una serie di pattern e di azioni come questa:pattern1 { azione1 }pattern2 { azione2 }

Il pattern seleziona le righe da elaborare e l’azione descrive quello che deve essere fatto sulle righe che corrispondono al pattern. Dato che a questo punto non sappiamo come si presentano i pattern o le azioni, questa descrizione non è probabilmente di grande aiuto: ecco quindi un semplice esempio per introdurci all’argomento. Il seguente comando Awk mostra i punti di montaggio (il secondo campo) di tutte quelle righe che si trovano in /etc/fstab:$ awk ‘{ print $2 }’ /etc/fstab

In questo caso ‘{ print $2 }’e la parte del programma che contiene l’azione (stampa il secondo campo). Quindi, chiederete voi, dov’è il pattern? ottima domanda! non c’è e in questo caso (molto comune) Awk eseguirà l’azione su ciascuna riga. Se provate il comando sul vostro fstab probabilmente otterrete come risultato anche qualche riga spuria di commento presente nel file. Le righe di commento cominciano con un #: possiamo usare un pattern (in questo caso un’espressione regolare racchiusa tra barre) per filtrare queste righe:$ awk ‘ /^[^#]/ { print $2 }’ /etc/fstab

nel caso non parliate il regex, l’espressione regolare tra le due barre dice “le righe che cominciano con qualcosa che non è un #”. Ecco un altro esempio di una semplice estrazione di un campo. Il risultato prodotto dal comando date ha questa struttura:mar 18 feb 2014, 23.21.54, CET

possiamo quindi stampare il campo contenente l’ora col seguente comando:date | awk ‘{ print $5 }’

La differenza più notevole è che in questo caso Awk sta elaborando il flusso di dati proveniente da una pipe e non da un file (in questo particolare caso il flusso di dati contiene una sola riga: è abbastanza comune negli esempi di utilizzo del programma). Sottolineiamo una cosa ovvia (ma importante): l’utilizzo di Awk per elaborare del testo

richiede la comprensione della struttura dei dati da elaborare, in particolare la conoscenza dei dati che compaiono nei vari campi.Linux usa numerosi file di testo strutturati i cui campi sono separati da : (l’esempio forse più importante è /etc/passwd), quindi a volte abbiamo bisogno di dire ad Awk di usare un carattere diverso come separatore di campo. Ecco un esempio che stampa solo i nomi utente (il primo campo) presenti nel file delle password:$ awk -F: ‘{ print $1 }’ /etc/passwd

Come avrete notato abbiamo usato l’opzione -F per assegnare il separatore di campo (esistono altri modi per spezzare una riga nei campi che la compongono, tra cui la divisione in parti di lunghezza fissa e metodi più sofisticati che si basano sulle espressioni regolari). Spingiamoci un po’ più avanti e proviamo a stampare solo i nomi utente che corrispondono ad account ordinari. nei sistemi red Hat questi sono identificati da un uID (terzo campo) maggiore o uguale a 500 e possono essere selezionati così:$ awk -F: ‘$3 >= 500 {print $1}’ /etc/passwd

Questo esempio apparentemente semplice in realtà inizia a mostrarci la vera potenza di Awk. È possibile eseguire operazioni aritmetiche, cosa impossibile con grep e sed. Ecco un altro programma di una riga che fa operazioni aritmetiche, mostrando la media dei numeri inseriti:$ awk ‘{ sum=0; for (i=1; i<=nF; i++) sum += $i; print sum/nF;}’4 6 14872 123 45 1764.25

Sostituzione di comandoLa sostituzione di comando è un trucco di programmazione della shell che non è direttamente collegato ad Awk, ma è spesso usato per accedere all’output prodotto da esso. Supponete di avere un file chiamato lista-host che contiene una lista di nomi di macchine, uno per riga. Il comando$ ping `cat lista-host`

eseguirà il comando cat all’interno degli apostrofi rovesciati, raccoglierà l’output prodotto e lo sostituirà al comando stesso sulla riga di comando, in modo da formare la

lista degli argomenti per il comando ping. C’è una sintassi alternativa (che preferisco perché i miei stanchi occhi hanno qualche difficoltà a distinguere i vari tipi di apostrofo) che si presenta così:$ ping $(cat lista-host)

La sostituzione di comando è spesso utilizzata negli script di shell per assegnare l’output di un comando a una variabile all’interno dello script, qualcosa di questo genere:io=$(whoami)

Quante cose si possono fare con una riga di codice? Il Dottore illustra il suo piccolo linguaggio preferito...

Le gioie di Awk

Il comportamento di base di Awk consiste nel dividere le righe in ingresso in campi. NF è il numero dei campi, NR il numero del record (cioè della riga)

LXP_140_30_33_LXF177.sysadmin 31 27/03/14 18:26

Page 34: 04_aprile2014

SysadminSysadmin

32 LInux pro 140 LInux pro 140 33

non ho specificato un file di input, quindi, come si addice a un autentico filtro, Awk legge i dati dalla tastiera, infatti li ho inseriti manualmente. La prima riga che segue il comando contiene i numeri da me inseriti: dopo aver premuto Invio Awk ha stampato il risultato del calcolo nella riga seguente. Lo stesso per le due righe successive. Il programma usa un ciclo for nello stile del C per sommare i campi della riga. La variabile predefinita NF contiene il numero dei campi della riga attualmente in fase di elaborazione. ricordatevi che questi programmi di una riga non hanno pattern, quindi il codice viene applicato a tutte le righe che compongono l’input.

Awk nel mondo realeAwk è ampiamente usato negli script per l’amministrazione del sistema, nella maggior parte dei casi in programmi di una sola riga. Eccone uno preso da /etc/init/mounted-tmp.conf sul mio sistema ubuntu 12.04. Ho lasciato le righe che precedono e seguono il comando in modo che possiate vedere il contesto in cui viene utilizzato:# Check if we have enough space in /tmp, and if not, mount a tmpfs thereavail=`df -kp /tmp | awk ‘nr==2 { print $4 }’`if [ “$avail” -lt 1000 ]; then mount -t tmpfs -o size=1048576,mode=1777 overflow /tmpfi

È un esempio classico dell’utilizzo di Awk, che compare all’interno di una sostituzione di comando (vedere il box relativo) per assegnare un valore a una variabile all’interno dello script. In questo caso viene selezionato il quarto campo della seconda riga dell’output prodotto da df. non si tratta di una decisione arbitraria: chi ha scritto lo script chiaramente sapeva esattamente come doveva presentarsi l’output del comando df. Ecco un altro esempio, scoperto su ubuntu nel file /etc/init.d/vmware:

count=`/sbin/lsmod | awk ‘BEGIn {n = 0} {if ($1 == “’”$driver”’”) n = $3} EnD {print n}’`

Di nuovo si tratta di un esempio di sostituzione di comando, con in più alcuni raffinati stratagemmi con virgolette e apostrofi per utilizzare la variabile $driver, definita in precedenza all’interno dello script.

Più di una rigaQuando i programmi Awk diventano più lunghi il loro inserimento sulla riga di comando diventa difficile, quindi prima di proseguire vediamo come si fa a utilizzare un file esterno che contiene lo script. È facile: basta inserire le istruzioni Awk in un file e poi farvi riferimento sulla riga di comando con l’opzione -f. Ecco un programma che trova il più grande uID nel file delle password:BEGIn { maxuid = 0; FS = “:” } { if ($3 > maxuid) maxuid = $3 }EnD { print “Lo uID più grande è “, maxuid }

Se inserisco queste tre righe in un file chiamato maxuid posso poi eseguirle così:$ awk -f maxuid /etc/passwd

Esaminiamo nel dettaglio il programma. L’azione associata al pattern speciale BEGIN viene eseguita immediatamente prima che venga elaborata la prima riga del file. In questo caso la utilizziamo per inizializzare un paio di variabili, tra cui la variabile predefinita FS che definisce il separatore di campo. Si tratta di una soluzione alternativa rispetto all’utilizzo dell’opzione -F sulla riga di comando. A volte il pattern BEGIN viene utilizzato per stampare delle intestazioni. La seconda istruzione non contiene pattern, quindi la relativa azione viene eseguita su tutte le righe del file. È la logica che tiene traccia del più grande uID (nel terzo campo). Infine l’azione associata al pattern speciale END viene eseguita dopo che l’ultima riga del file è stata elaborata ed è spesso usata per stampare i risultati, proprio come facciamo noi. Come avrete notato non abbiamo dovuto dichiarare le variabili prima di utilizzarle né specificarne il tipo. Vengono alla luce semplicemente scrivendone il nome e il tipo è dedotto dal tipo dei dati che vengono loro assegnati. Questo è molto diverso da quello che succede nei linguaggi tradizionali come il C, che richiede di dichiarare tutte le variabili e di specificarne il tipo prima di usarle. Questa tipizzazione dinamica è invece comunemente usata in linguaggi più moderni come pHp o python. Se lanciate il programma probabilmente scoprirete che la risposta è 65534. Questo uID appartiene a un account piuttosto particolare, chiamato nobody. per ignorare questa riga potremmo modificare il nostro programma e aggiungere un pattern alla seconda istruzione, qualcosa comeBEGIn { maxuid = 0; FS = “:” }$1 != “nobody” { if ($3 > maxuid) maxuid = $3 }EnD { print “Lo uID più grande è “, maxuid }

Emulazione di altri programmiAwk è un programma di uso generale che è in grado di emulare ogni sorta di programma più specifico. per esempio questo programma di una sola riga aggiunge il numero di ciascuna riga al file foo ed è equivalente al comando cat -n:$ awk ‘{ print nr, $0 }’ foo

La storia di AwkAwk fu scritto nel 1977 e rilasciato in Version 7 unix nel 1978. In linea con lo spirito di questo tutorial gli autori scrissero: “Sapevamo come si supponeva andasse utilizzato il linguaggio, perciò abbiamo scritto

solo programmi di una riga”. Gli autori estesero poi il linguaggio nel 1985, aggiungendo tra le altre cose la possibilità per l’utente di definire funzioni. Il loro classico libro The AWK Programming

Languagefu scritto nel 1988. Il linguaggio fu definito formalmente in uno standard poSIx nel 1992. Gawk (la versione che trovate in Linux) è un prodotto del progetto Gnu e aggiunge molte estensioni.

Alcune delle variabili interne di Awk. Quelle in rosso forniscono informazioni, quelle in verde controllano il comportamento del programma

Variabile SignificatoArGC, ArGV permettono di accedere agli argomenti passati sulla riga

di comando a un programma Awk

nF numero di campi nella riga corrente

nr numero del record corrente (cioè della riga)

EnVIron Array associativo che permette di accedere alle variabili di ambiente del programma

FS Il separatore dei campi in ingresso (per default è uno spazio)

rS Il separatore dei record (per default è un ritorno a capo, ma può essere anche un’espressione regolare)

oFS Separatore dei campi in uscita, usato per separare i campi stampati da un’istruzione print. per default è uno spazio

IGnorECASE Se assegnata, le espressioni regolari ignorano maiuscole e minuscole

FIELDWIDTHS una lista separata da virgole di larghezze di campo per spezzare le righe in ingresso per campi di lunghezza fissa

LXP_140_30_33_LXF177.sysadmin 32 27/03/14 18:26

Page 35: 04_aprile2014

SysadminSysadmin

32 LInux pro 140 LInux pro 140 33

Questo esempio conta le parole nei dati in ingresso, l’equivalente di wc -w:$ awk ‘ { w += nF } EnD { print w }’ foo

E questo esempio è sostanzialmente equivalente a grep:$ awk ‘/^chris/’ /etc/passwdchris:x:1000:1000:Chris Brown,,,:/home/chris:/bin/bash

In questo esempio il programma ha un pattern (l’espressione regolare ’^chris’), ma nessuna azione. L’azione di default di Awk consiste semplicemente nello stampare la riga, esattamente come fa grep. Gli esempi che seguono sono basati sulla “lista della spesa” mostrata in figura. Questo file è strutturato di proposito ed è un perfetto esempio di quello che Awk ama smontare. Esaminate per un momento il file, altrimenti gli esempi non avranno senso per voi. per prima cosa calcoliamo il numero totale di oggetti che vogliamo acquistare. Dobbiamo semplicemente sommare i numeri che si trovano nella seconda colonna:$ awk ‘{ articoli += $2 } EnD { print articoli }’ lista-spesa

poi possiamo calcolare l’importo totale della spesa. Questo richiede la moltiplicazione delle quantità per il prezzo unitario di ciascun articolo e poi la somma di tutti i risultati delle moltiplicazioni:$ awk -n ‘{ totale += $2 * $4 } EnD { print totale }’ lista-spesa

Questa volta dobbiamo aggiungere l’opzione -N perché vogliamo che Awk usi come separatore decimale la virgola. Si tratta di una funzionalità presente solo in Gawk, la versione di Awk della Gnu, che fa parte praticamente di tutte le distribuzioni Linux. Con la versione tradizionale del programma saremmo costretti a usare il punto per separare la parte intera di un importo dai decimali. Supponiamo ora di voler calcolare solo il totale degli articoli da acquistare al brico. È sufficiente aggiungere una semplice espressione regolare per ottenere il risultato:$ awk -n ‘/^Brico/ { totale += $2 * $4 } EnD { print totale }’ lista-spesa

ora cerchiamo l’articolo più costoso:$ awk -n ‘{ if ($4 > max) max = $4 } EnD { print max }’ lista-spesa

In questo caso max è solo il nome di una variabile, non la funzione interna di Awk. Ho di nuovo sfruttato la tipizzazione dinamica: non c’è stato bisogno di dichiarare la variabile o di inizializzarla a zero. A questo punto possiamo estrarre dalla lista e inserire nel file molti-pezzi tutti gli articoli di cui abbiamo bisogno almeno 10 pezzi. Questo esempio è stato scelto più che altro per mostrare le possibilità di ridirezione dell’output su di un file:$ awk ‘ $2 >= 10 { print $3 > “molti-pezzi”}’ lista-spesa

Va chiarito che in questo caso > viene interpretato da Awk e non dalla shell e fa in modo che le stampe vadano a finire sul file indicato. Ecco ora un interessante esempio che suddivide l’output in più file, uno per ciascuna categoria:$ awk ‘{ print > $1 }’ lista-spesa

In questo caso $1, la categoria dell’acquisto, definisce il file in cui viene scritta la riga. Alla fine vi ritroverete con un file chiamato Supermercato, un secondo file chiamato panetteria e così via. Questo esempio mi piace molto! Se non siete ancora convinti della potenza dei programmi di una sola riga mi arrendo! Il prossimo esempio suddivide i costi totali per categoria. Questa volta ho dovuto inserire il programma Awk in un file esterno chiamato costo-cat:{ costo[$1] += $2 * $4 }EnD { for (cat in costo) print cat, costo[cat] }

e l’ho lanciato così:$ awk -n -f costo-cat lista-spesaAbbigliamento 134,99Brico 274,9Supermercato 69,45panetteria 39,7

Questo esempio usa un array associativo (cioè un array i cui indici sono stringhe), costo, e le categorie di acquisto come indici.Concludiamo con un esempio che estende il precedente per determinare per quale categoria d’acquisto abbiamo speso di più. Ecco lo script; ho aggiunto i numeri di riga come riferimento:1. # Calcola la categoria più costosa.2. { costo[$1] += $2 * $4 }3. EnD {4. max = 0;5. for (cat in costo) {6. if (costo[cat] > max) {7. max = costo[cat];8. maxcat = cat;9. }10. }11. print maxcat;12. }

Qualche spiegazione è doverosa: la riga 1 è un commento. La riga 2 accumula i costi delle varie categorie nell’array associativo costo, come nell’esempio precedente. Le righe 3-12 fanno tutte parte dell’azione associata al pattern END. notate come lo script inizi a somigliare a un normale programma, e così vediamo dei punti e virgola usati come terminatori di istruzione. Le righe 5-10 eseguono un ciclo sulle categorie alla ricerca di quella con la spesa massima. nel caso stiate iniziando ad andare in iperventilazione, riprendete pure a respirare normalmente: è il programma Awk più lungo che mostrerò!

Scrivere script autonomiÈ anche possibile scrivere script Awk autonomi che possono essere lanciati direttamente dalla shell. risultano leggermente più comodi da usare perché non è più necessario scrivere awk -f sulla riga di comando ogni volta che vengono eseguiti. Ecco come fare. per prima cosa bisogna aggiungere una riga shebang in cima al file dello script, in modo che Linux sappia quale interprete usare:#!/usr/bin/awk -f{ costo[$1] += $2 * $4 }EnD { for (cat in costo) print cat, costo[cat] }

poi bisogna rendere eseguibile il file come si farebbe con qualsiasi altro:$ chmod u+x costo-cat

A questo punto è possibile eseguirlo direttamente come un comando:$ ./costo-cat

Se vi piacciono i programmi in una sola riga date un’occhiata a http://www.pement.org/awk/awk1line.txt. Se invece preferireste vedere qualche cosa di più lungo scaricate il manuale di Gawk da http://www.gnu.org/software/gawk/manual/. Il testo classico è The AWK Programming Language. Vale la pena cercarlo su eBay per apprezzarne l’eccellente chiarezza di scrittura. LXP

Il file contenente la lista strutturata della spesa usata in alcuni degli esempi

LXP_140_30_33_LXF177.sysadmin 33 27/03/14 18:26

Page 36: 04_aprile2014

36 Linux pro 140

L’angolo di

News, recensioni e guide sul sistema operativo libero per smartphone

Android

La quinta versione del più diffuso tra gli smartphone Android è impermeabile, riconosce le impronte digitali e soprattutto ha una fotocamera ultraveloce

quello dell’iphone 5S, ma sembra comunque efficace e soprattutto permette di accedere ai vari siti senza dover inserire password. A livello hardware le differenze sono veramente minime: il display è ora di 5,1 pollici ma ha conservato la stessa risoluzione del modello precedente; il processore è l’ultima evoluzione dello Snapdragon di Qualcomm, che dovrebbe migliorare i risultati di LG G2, attualmente il più veloce tra gli Android. Miglioramenti importanti ci sono invece sul fronte fotocamera dove, oltre al sensore da 16 Megapixel, sono diminuiti notevolmente i tempi di messa

Sempre più Galaxy

120 fotogrammi al secondo

Nonostante l’attenzione degli addetti ai lavori fosse concentrata sul Galaxy S5

di Samsung, la novità più interessante del Mobile World Congress si è rivelata l’Xperia Z2 di Sony. Fantastico lo schermo con tecnologia Triluminos ipS da 5,2 pollici in Full HD, velocissimo il processore Snapdragon 801 da 2,5 GHz con ben 3 GB di rAM ma soprattutto unica la fotocamera da 20,7 Megapixel in grado di riprendere video a 4K e a 60 fotogrammi al secondo. in pratica questo vuol dire realizzare un video

da 3840x2160 pixel che poi avrà bisogno di un TV a 4K o di un monitor ultradefinito per poter essere visto al meglio. non solo, ma grazie alla funzione Timeshift in grado di riprendere a 120 fotogrammi al secondo, potrete ottenere veri effetti moviola dai vostri video. Tutto questo in uno smartphone impermeabile e leggero che ha il suo unico vero punto debole nel peso di poco superiore ai 160 grammi e nel prezzo di 699 euro. insieme allo smartphone, Sony ha rinnovato anche il tablet: lo Z2 da 10 pollici, oltre a essere il più sottile della categoria grazie

allo spessore di soli 6 millimetri, è impermeabile e soprattutto monta lo schermo LED Live Color Full HD derivato direttamente dai TV color di fascia alta del produttore giapponese. il prezzo di 499 euro in questo caso ci è sembrato decisamente più ragionevole. infine Sony ha presentato Smart Wear, un braccialetto elettronico in grado di tenere sotto controllo non solo corse e passeggiate, ma proprio tutti i movimenti che fate nel corso della giornata e quindi di riportarli sullo smartphone o sul tablet. LXP

Esteticamente le differenze tra Galaxy S4 e S5 sono quasi

impercettibili, i miglioramenti sono soprattutto nella sezione

fotografica e in quella dei sensori

Se hai news da segnalarci o dei commenti scrivici ad [email protected]

Se l’autunno porta regolarmente con sé un nuovo nexus, la primavera è la

stagione del Galaxy. Quest’anno però Samsung ha pensato bene di anticipare di un mese la presentazione del Galaxy S5 programmandola in contemporanea con il Mobile World Congress di Barcellona di fine febbraio. nei negozi il dispositivo non sarà disponibile fino a metà aprile, ma noi abbiamo avuto la possibilità di provarlo direttamente in fiera e non siamo rimasti particolarmente colpiti dalla struttura, molto simile a quella dei predecessori, ma abbiamo apprezzato il lavoro svolto su hardware e software. in realtà da diversi mesi si susseguivano anticipazioni su di un fantomatico Galaxy S5 in metallo o comunque in materiali più pregiati della classica plastica, che sarà pure leggera ma dà un effetto cheap a un prodotto da 700 euro. oltretutto, secondo i soliti bene informati, è probabile che da qui a un paio di mesi arriverà la versione “metal” del GS5. nel frattempo dobbiamo accontentarci del classico “plasticone” che però rispetto ai modelli precedenti può vantare il fatto di essere impermeabile, e non è poco visto che online si sono già visti i primi video con il Galaxy S5 completamente immerso in una bacinella. Altra novità è poi costituita dal sensore di impronte digitali che non sarà veloce come

a fuoco: 3 decimi di secondo rispetto al secondo del Galaxy S4. La messa a fuoco selettiva dopo lo scatto è una modifica apprezzabile, anche se già vista sul Lumia 1020 di nokia. in definitiva niente di veramente rivoluzionario, ma la conferma di un successo che non per niente ha visto finora oltre 200 milioni di Galaxy venduti in tutto il mondo, un risultato secondo solo all’iphone di Apple.

LXP_140_36_news android 36 27/03/14 15:03

Page 37: 04_aprile2014

Linux pro 140 37

LG G Flex L’angolo di Android

Caratteristiche 8Autonomia 8Prestazioni 9.5Qualità/prezzo 7

LG G Flex

Un phablet all’avanguardia, nonostante l’OS, dedicato a un pubblico di fascia alta.

Il voto di Linux Pro

Giudizio

Produttore: LG Web: www.lg.com/itPrezzo: € 899

8

La sensazione che si ha fin dal primo momento è quella di trovarsi di fronte a un prodotto

unico nel suo genere e il prezzo, che sfiora i 900 euro, ce lo conferma. il G Flex di LG appartiene a quella particolare categoria di smartphone detta phablet e ha una forma leggermente curva che ricorda vagamente quella del mitico nokia 8110. il segreto sta tutto nello schermo flessibile in plastic oled, o poLED, da 6 pollici che, nonostante abbia una risoluzione di 1280x720p, ha una qualità di immagine assolutamente ottima. Anche la reattività al tocco non lascia affatto delusi. Molto sottile la cornice attorno allo schermo per ridurre le dimensioni dell’apparecchio. Così i pulsanti di accensione e di controllo del volume sono stati posti sul dorso. Sempre nuovo oltre allo schermo flessibile, anche l’intera struttura del phablet possiede questa caratteristica. infatti, per costruirla, sono stati usati particolari polimeri che hanno la capacità di autoripararsi, eliminando i tipici graffi dovuti

Jelly Bean 4.2.2, che non è certo il più recente. Tuttavia è stato perfettamente ottimizzato, quindi ci offre applicazioni e funzioni di prima qualità. Tra queste, vale la pena citare la possibilità di impostare l’uso dell’apparecchio con una sola mano. un’altra perplessità riguarda la non espandibilità della memoria da 32 GB, di cui 8 sono già occupati dal sistema operativo. Accessori e multimedia il G Flex non si dimostra certo avaro di accessori. infatti abbiamo uMTS quad-band, LTE penta-band, A-GpS, Bluetooth 4.0, Wi-Fi 802.11 dual band e nFC. inoltre è dotato degli standard Miracast e DLnA. Anche sul fronte della telefonia pura, il phablet di LG ha da dire la sua, grazie al doppio microfono con soppressione del rumore e gli altoparlanti integrati che ci offrono un audio di buona qualità. Di pari livello anche la dotazione multimediale, che ha un’uscita TV a 1080p e un sensore a infrarossi in grado di trasformare il nostro apparecchio in un comodo telecomando. Le foto che si

all’uso quotidiano. in tal modo avremo sempre un apparecchio che sembrerà appena uscito dalla confezione. ovviamente anche la batteria è curva e flessibile, per potersi adattare ai movimenti del phablet. Ma la sua caratteristica migliore è la durata. infatti, con un uso normale, possiamo contare su due giorni interi di autonomia, grazie alla sua capacità di 3.500 mAh. L’anima del G Flex Le prestazioni di altissimo livello del nuovo smartphone di LG sono il frutto della felice combinazione tra il potente microprocessore quad core Qualcomm Snapdragon 800 da 2,26 GHz con 2 GB di memoria rAM e il processore grafico Adreno 330. Quest’ultimo non si fa mettere in crisi nemmeno dai videogiochi 3D più impegnativi, comportandosi sempre al meglio e regalandoci momenti di puro piacere ludico. Ecco perché il G Flex è sicuramente uno degli apparecchi più veloci attualmente in commercio. L’unica perplessità riguarda il sistema operativo, l’Android

LG G Flex

Il display flessibile del G Flex ha una risoluzione a 720p e la sua batteria curva ha una capacità di 3.500 mAh, che gli conferisce grande autonomia

possono fare con il G Flex sono soddisfacenti, grazie al sensore da 13 Megapixel e all’obiettivo particolarmente luminoso. il tutto corredato da un software ricchissimo di modalità di scatto e dalla possibilità di attivare contemporaneamente le due fotocamere. Se invece vogliamo girare un filmato, avremo persino la modalità ultra-HD (uHD), con una risoluzione che arriva ai 3840x2160 pixel. in sostanza, da qualunque parte lo si guardi, il G Flex è perfettamente capace di soddisfare le esigenze di una clientela di fascia alta, in grado di permettersi una spesa non certo irrilevante. LXP

Il materiale con cui è fatta la parte posteriore riesce a ripararsi da solo dall’usura quotidiana!

Tecnologie e materiali innovativi sono le caratteristiche principali del nuovo smartphone del marchio coreano

LXP_140_37_LG 37 27/03/14 15:05

Page 38: 04_aprile2014

Completa la tua collezione ordinando gli arretratisu www.spreastore.it/linuxpro

oppure utilizzando il modulo qui sotto

Informativa e Consenso in materia di trattamento dei dati personali - (Codice Privacy d.lgs. 196/03) Sprea Editori S.p.A. Socio unico Sprea Holding S.p.A. con sede legale in via Beltrami 21, 26100 Cremona, è il Titolare del trattamento dei dati personali che vengono raccolti, trattati e conservati ex d.lgs. 196/03. Gli stessi potranno essere comunicati e/o trattati da Società esterne Incaricate. Ai sensi degli artt. 7 e ss. si potrà richiedere la modifica, la correzione e/o la cancellazione dei dati, ovvero l’esercizio di tutti i diritti previsti per Legge. La sottoscrizione del presente modulo deve intendersi quale presa visione, nel colophon della rivista, dell’Informativa completa ex art. 13 d.lgs. 196/03, nonché consenso espresso al trattamento ex art. 23 d.lgs. 196/03 in favore dell’Azienda.

Spedizione tramite posta tradizionale al costo aggiuntivo di € 2,90Spedizione tramite Corriere Espresso al costo aggiuntivo di € 7,00

ToTalE CoMPlESSIVo €

SCElGo Il SEGUENTE METoDo DI SPEDIZIoNE: Indica con una ˝ la forma di spedizione desiderata

SCEGlI l‘arrETraTo ChE VUoI orDINarE

INSErISCI I CoDICI delle pubblicazioni che desideri ricevere:€

€ Totale ordine

SE VUoI orDINarE VIa PoSTa o VIa FaX, CoMPIla QUESTo CoUPoNRitaglia o fotocopia il coupon, invialo in busta chiusa a: Sprea Editori S.p.a. Via Torino, 51 20063 Cernusco s/n (MI), insieme a una copia della ricevuta di versamento o a un assegno. Oppure via fax al numero 02.700537672. Per ordinare in tempo reale i manuali collegati al nostro sito www.spreastore.it. Per ulteriori infor-mazioni puoi scrivere a [email protected] oppure telefonare allo 02/87158224 tutti i giorni dalle 14.00 alle 18.00

SCElGo Il SEGUENTE METoDo DI PaGaMENTo (Indica con una ˝ quello prescelto)

∆ Versamento su CCP 99075871 intestato a Sprea Editori S.P.a. aBBoNaMENTI Via Torino 51 20063 Cernusco Sul Naviglio MI (Allegare ricevuta nella busta o al fax)

∆ Bonifico intestato a Sprea Editori S.P.a. abbonamenti sul conto IBaN IT05 F076 0101 6000 0009 9075 871

∆ Carta di Credito N. (Per favore riportare il numero della Carta indicandone tutte le cifre)

Scad. CVV Nome e Cognome del Titolare della carta (può essere diverso dall’abbonato)

NoME

CoGNoME

VIa

N° C.a.P. ProV.

CITTà

TEl.

E-MaIl

Se leggi Linux Pro, ti possono piacere anche...

I segreti dello smartphone Android

più acclamato dell’anno

OFFERTA SPECIALE

CoD. SlP7€ 9,90

CoD. SlP8€ 9,90

CoD. SaJ4 € 4,90

NUMEro 128 - aPRIle 2013

COD. lP128

€ 5,90NUMEro 129 - MaggIO 2013

COD. lP129

€ 5,90NUMEro 130 - gIugnO 2013

COD. lP130

€ 5,90

COD. lP131

€ 5,90

NUMEro 132 - agOsTO 2013

COD. lP132

€ 5,90NUMEro 133 - seTTeMbRe 2013

COD. lP133

€ 5,90NUMEro 134 - OTTObRe 2013

COD. lP134

€ 5,90NUMEro 135 - nOVeMbRe 2013

COD. lP135

€ 5,90

NUMEro 136 - DICeMbRe 2013

COD. lP136

€ 5,90NUMEro 137 - gennaIO 2014

COD. lP137

€ 5,90NUMEro 138 - FebbRaIO 2014

COD. lP138

€ 5,90NUMEro 139 - MaRzO 2014

Inoltre…Android libero! Google ha dato un giro di vite al suo SO: ecco come rimediare

Alla scoperta di Rust Il linguaggio di programmazione per un Web a prova di hacker

Diventa protagonista nel mondo Linux

∆ Confronto: editor video liberi ∆ Guida all’ottimizzazione del kernel

PRO

Silenzioso e ricco di porte,ideale come media center

Linux Pro 139 - 2014 - Mensile - €5,90 - CHF 13,60

Concetti I segreti della compressione JPEGScratch Il linguaggio ideale per i neofitiFirefox OS Realizzare e pubblicare un’app

ACCADEMIA DEL CODICE

10 pagine di pura programmazione

TARI

FFA

R.O

.C. -

PO

STE

ITAL

IAN

E SP

A -

ABB

. PO

ST. -

D.L

. 353

/200

3 (C

ON

V. IN

L. 2

7/02

/200

4 N

. 46)

ART

. 1, C

OM

MA

1, S

/NA

- D

ISTR

IBU

TORE

: PRE

SS-D

I, M

ILAN

O

Spioni ed enti governativi penetrano le tue difese...l’Open Source li blocca!

Raspberry Pi Le migliori espansioni

per la scheda dei miracoli

Sistema operativo Come raggiungere il mito

dell’installazione perfetta

Kindle HDXSchermo da urlo

e prestazioni al top

PROTE

CT YOUR PRIVACY

SSL TOR OTR TRUECRY P T G PG CRYPTOCAT TA

ILS

Penguin Wee Desktop

A PROVA DI

NSA

229 €

415 €

LXP_cover_139.indd 1 27/02/14 15:40

COD. lP139

€ 5,90

l

Data Firma del titolare

NUMEro 131 - luglIO 2013

ESaUrITo!

LXP_140_95_Arretrati 95 28/03/14 11:57

Page 39: 04_aprile2014

Test >>Tails 0.22Una distro per navigare in modo anonimo, senza lasciare traccia sul computer e con tanti strumenti per la cifratura dei file pag. 40

PerzoReinventa la comunicazione online integrandovi la privacy pag. 41

FritzingOttimo tool per la progettazione di circuiti elettronici pag. 42

ZyXEL NSA 325v2Un NAS economico e facile da installare e configurare pag. 43

Confronto >>Cinque servizi di Personal Cloud Storage per ogni esigenza pag. 44∆ BitTorrent Sync ∆ OwnCloud∆ SparkleShare ∆ Seafile∆ Tonido

Da non perdere >>Client email, emulatori, simulatori, editor di testi e immagini, generatori di gallerie fotografiche, giochi di corse e labirinti ∆ Thunderbird pag. 50∆ XRoar pag. 51∆ Mars simulation pag. 51∆ CropGUI pag. 52∆ DigiKam pag. 52∆ Fgallery pag. 53∆ SeaMonkey pag. 53∆ Dust Racing 2D pag. 54∆ Chrzazscz pag. 54

Perzo

OwnCloud

Thunderbird

RecensioniTutte le novità in campo software e hardware testate e valutate ogni mese dai nostri laboratori

Se vuoi segnalarci qualche novità scrivi a [email protected]

quESTO mESE...

LINUX PRO 140 39

Ogni test di questa sezione

è accompagnato da un giudizio

che riassume con quattro indici numerici

le principali qualità dell’applicazione

o del prodotto hardware messo alla prova.

I laboratori di Linux Pro assegnano

un voto da 1 a 10 alle seguenti categorie:

Caratteristiche: fornisce tutte

le funzioni di cui abbiamo bisogno?

È innovativo?

Prestazioni: esegue in maniera

efficiente le sue funzioni?

È veloce e affidabile?

Facilità d’uso: dispone di un’interfaccia

grafica chiara e facilmente fruibile?

La documentazione che lo accompagna

è sufficientemente completa ed esaustiva?

Qualità/prezzo: ha un prezzo

competitivo? Vale i soldi richiesti

per il suo acquisto?

Il nostro giudizio viene

poi riassunto da un voto finale,

espresso anche graficamente.

Ecco la legenda dei voti:

10 Nulla da eccepire. Un prodotto

praticamente perfetto.

8-9 Un buon prodotto. I pochi

difetti presenti non sono gravi.

6-7 Compie il suo lavoro ma

necessita di ulteriori sviluppi.

5-4 Deve migliorare prima di

raggiungere un voto sufficiente.

1-3 Un completo disastro.

Gli sviluppatori devono tornare

alla fase di progettazione.

Ricordiamo infine che i software citati

nelle sezioni Confronto e Da non

perdere sono spesso presenti nel DVD

sotto la voce “Rivista” sotto forma

di codice sorgente o binario.

Una breve legenda

LXP_140_39_introRecens 39 27/03/14 18:30

Page 40: 04_aprile2014

40 Linux pro 140

Test Tails

Tails 0.22È possibile tutelare la propria privacy e al tempo stesso approfittare di tutto ciò che Internet ha da offrire? Indaghiamo…

Il voto di Linux Pro

Caratteristiche 8Prestazioni 8Facilità d’uso 9Documentazione 8

Tails 0.22

Una distribuzione orientata alla sicurezza da usare quando non vi fidate troppo della vostra connessione pubblica a Internet.

Giudizio

Sviluppatore: Boum Web: https://tails.boum.orgLicenza: GpL v3

8

L’ambiente desktop di Tails è simile a quello di qualunque altra distribuzione basata su Debian; ma sotto la superficie si nascondono numerose applicazioni che tutelano la sicurezza

La vostra sicurezza online è minacciata. La cosa è arrivata perfino sulle pagine dei giornali,

con le recenti notizie secondo cui la nSA svolge attività di sorveglianza sul pubblico nel suo complesso e ha tentato di introdurre un certo numero di backdoor in numerose tecnologie diverse. La natura di internet è di per sé aperta e ciò significa che i vostri dati possono essere intercettati con relativa facilità. È qui che entra in gioco Tails con il suo pacchetto di strumenti orientati alla sicurezza. Tails, una sigla che significa The Amnesic Incognito Live System, è una distribuzione DVD/uSB Live destinata all’impiego nelle situazioni in cui la privacy è indispensabile. Tails offre tre funzioni essenziali: naviga su internet in modo anonimo tramite la rete Tor; non lascia alcuna traccia della vostra sessione sul computer da voi utilizzato include strumenti di crittografia per la cifratura delle vostre email e dei file inviati via internet. per utilizzare Tails non dovete far altro che scriverne l’immagine iSo su un DVD o trasferirla su una chiavetta uSB o su una

applicazione che opera nella system tray. Navigazione riservata Cliccando con il tasto destro del mouse sull’applicazione potrete configurare la vostra Location, cioè il vostro punto di uscita dalla rete Tor. il browser incorporato è iceWeasel, che utilizza la configurazione Tor per gestire la navigazione in modo anonimo. Tor è stato usato con successo in paesi i cui governi attuano la censura ed è diventato lo strumento standard per consentire comunicazioni aperte con vari fini (per maggiori infomazioni abbiamo preparato proprio un articolo su questo numero a pag. 6). La distribuzione si serve di tecniche crittografiche per cifrare i vostri file, le e-mail e perfino i messaggi istantanei. un’altra eccellente soluzione di sicurezza consiste nel fatto che Tails non lascia alcuna traccia del suo utilizzo sul computer su cui viene usata; il sistema effettua anche una pulizia approfondita alla chiusura della sessione di utilizzo. perché usare

scheda SD mediante unetbootin. Dopo di che, avviate il vostro pC dopo avervi inserito il DVD o la chiavetta e Tails verrà avviata nell’ambiente Live. Se utilizzate una chiavetta uSB o una scheda SD potrete creare una partizione permanente che vi permetterà di archiviare i vostri file in una cartella cifrata. una volta avviata, Tails vi porrà un paio di domande, la più interessante delle quali riguarda la possibilità di camuffare il desktop di Tails in modo che assomigli a quello di Windows xp. Avete capito bene: Tails è in grado di ‘travestirsi’ da xp, permettendovi di tuffarvi nell’oceano dei droni di xp con la certezza che la vostra privacy sarà protetta. Tails si basa sull’ultima versione di Debian Wheezy e comprende la maggior parte delle applicazioni standard che potete aspettarvi. Sono presenti i classici quali Gimp, inkscape e Audacity, nonché il pacchetto openoffice. usare Tails è esattamente come usare Debian, il che la rende straordinariamente facile da utilizzare. La configurazione per l’utilizzo della rete Tor viene gestita per mezzo di una pratica

questo sistema operativo? Se viaggiate molto e siete costretti a fare grande uso delle connessioni Wi-Fi pubbliche, questa è la distribuzione che fa per voi. Tails comprende un inedito pacchetto di strumenti in grado di proteggere il vostro anonimato quando siete online, difendendovi anche da chiunque tenti di usare un attacco ‘man in the middle’ per intercettare i vostri dati. Tails vi offre una quantità di strumenti utili per difendere la vostra privacy online. LXP

In evidenza

Basato su Debian La distribuzione Tails dà accesso a numerosi repository Debian pieni di ottimi software open Source.

Cambio di locationTails offre un metodo pratico per modificare il punto di uscita dalla rete Tor.

LXP_140_40_rec_tails 40 27/03/14 18:30

Page 41: 04_aprile2014

Perzo Test

PerzoNella lotta contro gli spioni, abbiamo scoperto un servizio Web che reinventa la comunicazione online integrandovi la privacy. Ecco come funziona…

Caratteristiche 7Prestazioni 8Facilità d’uso 7Documentazione 6

Perzo.com

Se Perzo manterrà le sue promesse, darà del filo da torcere ai canali di comunicazione online tradizionali.

Il voto di Linux Pro

Giudizio

Sviluppatore: Perzo, Inc Web: www.perzo.comPrezzo: Gratis

7LInux Pro 140 41

L’app Web offre tutte le comodità di un’applicazione di messaggeria istantanea

Comunicazioni integrate I contatti possono rispondervi con messaggi istantanei, dalla loro e-mail o dal loro cellulare.

In evidenza

AutodistruzionePotete programmare i messaggi perché si autodistruggano automaticamente dopo un intervallo di tempo specificato.

Diciamolo chiaramente: nell’era della comunicazione via Internet post-Snowden,

non si può certo accusare di paranoia chi desidera cifrare i propri canali di comunicazione. La buona notizia è che gli strumenti atti a cifrare le comunicazioni elettroniche, compresa la posta elettronica e le messaggerie istantanee, sono disponibili per gli utenti di Linux già da qualche tempo. La loro impostazione, tuttavia, richiede un minimo di conoscenze. È qui che punta a entrare in gioco Perzo. Questo servizio gratuito offre un pacchetto centralizzato per le comunicazioni che vi permette di raggiungere i vostri contatti tramite messaggi istantanei, posta elettronica o inviando messaggi di testo ai loro cellulari. L’applicazione vi fornisce una chiara visuale per thread di tutte le vostre comunicazioni con un contatto su tutti e tre i canali, evitandovi la fatica di giostrarvi tra più dispositivi. Il servizio mette la privacy al primo posto e offre un sistema di cifratura end-to-end. Secondo i suoi sviluppatori, Perzo utilizza tre livelli di cifratura insieme a un generatore di chiavi casuali che cifra ogni messaggio con una chiave diversa. Il servizio prende inoltre alcune misure per sventare

gli attacchi man-in-the-middle. Per dimostrare le proprie credenziali in termini di sicurezza, Perzo ha promesso di pubblicare il suo codice sorgente in base a una licenza open Source. In un’intervista all’Inquirer, il fondatore di Perzo David Gurle, ex-vicepresidente di Skype, ribadisce che rendere accessibile il codice sorgente dell’applicazione è l’unico modo per guadagnare credibilità e fiducia e assicura gli utenti che il servizio non contiene trojan o backdoor. Attualmente Perzo è disponibile come servizio limitato al Web; è in fase di sviluppo un’app per cellulari Android. Per cominciare a utilizzarlo dovete registrarvi con un account presso il servizio. Dopo la verifica, potrete collegarvi a Perzo Workspace che presenta un’interfaccia nitida e intuitiva. Prima di poter usare il servizio dovrete aggiungere dei contatti, specificandone gli indirizzi di posta elettronica. Curiosamente non esiste un’opzione per l’importazione dei contatti; tuttavia questi ultimi possono essere suddivisi in gruppi. La possibilità di gestire sia i contatti personali sia quelli professionali tramite la stessa interfaccia costituisce una delle principali attrattive di Perzo. Potete facilmente trasferire le conversazioni da un contatto

all’altro o da un gruppo all’altro. L’interfaccia dell’applicazione vi permette di scegliere se inviare messaggi cifrati o non cifrati e prima dell’invio di un messaggio non sicuro, il sistema notifica un messaggio di avvertimento. 3, 2, 1, autodistruzione oltre a cifrare un messaggio potete anche proteggerlo con una password. I messaggi di questo tipo possono essere visualizzati dal destinatario solo dopo che questi ha inserito la password in questione; dopo averli inviati, nemmeno voi potrete visualizzarli nella vostra cronologia se non inserendo la password, il che è un’ottima cosa. Perzo vi permette inoltre di bloccare nuovamente i messaggi dopo averli letti. un’altra interessante funzione orientata alla privacy è la possibilità di inviare messaggi che si autodistruggono dopo un intervallo di tempo specificato. una volta distrutto, il messaggio scompare sia dalla vostra cronologia chat, sia da quella del destinatario. Quando un contatto non è disponibile su Perzo, potete inoltrare il messaggio al suo indirizzo di posta elettronica: e-mail provviste di messaggi criptati chiederanno quindi al contatto di collegarsi a Perzo per leggere

il messaggio. Potete inoltrare messaggi anche ai telefoni cellulari ma nel nostro caso questa opzione non ha funzionato. Per il momento non è disponibile molta documentazione al di là di alcune domande frequenti ma Perzo è ancora in fase di sviluppo attivo. Gli sviluppatori stanno lavorando all’integrazione di voce e video e a un’opzione per la condivisione dei desktop, oltre che alla trasformazione di Perzo in un client di posta elettronica completo. Perzo si sta muovendo nella direzione giusta e se manterrà le sue promesse, questo servizio creerà un certo scompiglio nell’affollato settore dei servizi di comunicazione online gratuiti. LXP

LXP_140_41_rec_perzo 41 27/03/14 18:15

Page 42: 04_aprile2014

42 Linux pro 140

Test Fritzing

Fritzing 0.8.7bAbbiamo messo alla prova il famoso programma per la progettazione di circuiti elettronici e non siamo certo rimasti delusi: ecco perché è una favola...

Il voto di Linux Pro

Caratteristiche 9Prestazioni 9Facilità d’uso 9Documentazione 9

Fritzing 0.8.7b

Un’applicazione facile da usare che aiuta i maker a produrre documentazione di ottima qualità per i loro progetti.

Giudizio

Sviluppatore: interaction Design Lab Web: http://fritzing.orgLicenza: GpL v3+

9

Fritzing permette di progettare facilmente circuiti stampati pronti per la produzione

Recentemente c’è stato un notevole aumento di interesse per la creazione

e la prototipazione fai da te di progetti elettronici, molti dei quali basati su dispositivi come Arduino e rp. La documentazione di questi progetti risulta però piuttosto laboriosa, specialmente per quanto riguarda la creazione di schemi elettrici e diagrammi che mostrano i collegamenti tra i vari componenti. Fritzing permette di risolvere questi problemi e di risparmiare parecchio tempo. Si tratta di un’applicazione open Source che rende estremamente semplice la creazione di schemi di circuiti di alta qualità. La sua interfaccia è molto facile da usare e chiunque abbia familiarità con l’editor grafico Inkscape si sentirà a casa. per installare Fritzing basta scaricare il relativo archivio da http://fritzing.org ed estrarne il contenuto. Fatto questo troverete nella directory creata durante il processo di estrazione uno script di shell che vi permetterà di lanciare l’applicazione. La maggior parte delle distribuzioni Linux è in grado di far girare il programma senza problemi, ma se invece state usando una distro un po’ vecchia dovrete assicurarvi che la vostra versione di glibc sia superiore alla 2.6.

dei componenti (per esempio la resistenza di un resistore o la capacità di un condensatore) scegliendo i valori appropriati nei menu a discesa dell’inspector, in basso a destra. Cliccando invece su uno dei punti di connessione tra i componenti, per esempio uno dei fori della breadboard in cui è inserito, verranno evidenziati tutti gli altri punti allo stesso potenziale elettrico, in pratica cioè i punti collegati. una funzionalità molto utile per il “debug” di un circuito. È anche possibile aggiungere delle note ai componenti del circuito per spiegare nuove idee. Dalla breadboard al circuito stampato Fritzing è in grado di produrre in maniera semiautomatica anche diagrammi più tecnici, come lo schema elettrico del circuito per gli utenti più esperti. C’è poi una comoda linguetta pCB (Printed Circuit Board), dedicata alla progettazione del circuito stampato su cui montare i componenti. È possibile esportare i diagrammi in un certo numero di formati, tra cui pnG e SVG, oppure per la stampa e l’incisione del circuito stampato. in basso a destra nella vista pCB è addirittura presente un pulsante che apre il browser sulla

Appena partito Fritzing visualizza la sua pagina di benvenuto, che riporta le ultime novità: cliccando sulla linguetta Breadboard in alto passerete alla relativa pagina, all’interno della quale è possibile organizzare la disposizione dei vari componenti sulla breadboard e i collegamenti tra di essi. per collegare due componenti con un cavo è sufficiente cliccare col tasto sinistro e tracciare una riga da uno all’altro. i componenti disponibili sono organizzati in librerie chiamate bin (l’interfaccia utente non è ancora completamente localizzata in italiano) che si trovano in alto a destra sullo schermo. Alcuni dei componenti più comuni sono selezionati per default, ma è possibile filtrarli, eseguire ricerche e muoversi all’interno della libreria per cercare quello che serve. i componenti vanno dai resistori alle raspberry pi e agli Arduino: la maggior parte delle più diffuse schede per la prototipazione sono disponibili per essere inserite nei vostri progetti. L’importazione di librerie di terze parti è estremamente semplice e grazie a questa funzionalità sono distribuite col programma le librerie di componenti di numerose aziende famose nel mondo dei maker, come per esempio la Adafruit. È possibile modificare i parametri

pagina del sito di Fritzing Fab da cui è possibile richiedere la produzione di una piccola serie del vostro circuito stampato. un’altra utile funzionalità per l’esportazione dei dati che spesso viene sottovalutata è la creazione della lista dei componenti usati nel progetto. È davvero utile quando si cerca di tenere bassi i costi. Fritzing è uno strumento brillante. La sua interfaccia molto semplice e l’insieme delle sue funzionalità sono maturate nel corso delle successive versioni. Se avete intenzione di creare progetti hardware è lo strumento che vi serve per documentare il vostro lavoro. LXP

In evidenza

Tantissimi componenti Avendo a disposizione le librerie di componenti dei maggiori venditori c’è solo l’imbarazzo della scelta.

Facile da usareil workflow di Fritzing è notevolmente simile a quello di applicazioni come Inkscape e Dia.

LXP_140_42_rec_fritzing 42 27/03/14 18:15

Page 43: 04_aprile2014

Linux pro 140 43

ZyXEL NSA Test

Caratteristiche 7Documentazione 7Facilità d’uso 8Qualità/Prezzo 8

ZyXEL NSA 325v2

Un NAS con un ottimo rapporto qualità/prezzo, che offre molteplici funzioni ed è adatto principalmente agli utenti domestici.

Il voto di Linux Pro

Giudizio

Produttore: ZyxEL Web: www.zyxel.comPrezzo: €97,00 (senza dischi)

7.5

Per collegarsi allo ZyXEL NSA 325v2 ci vogliono solo pochi secondi: basta inserire l’IP del dispositivo nel browser e farsi riconoscere tramite le credenziali

Lo ZyXEL NSA-325 v2 è un nAS pensato per l’utenza domestica e i piccoli uffici. Consente

di far fronte alle comuni necessità, tipiche delle infrastrutture più semplici, ma non a quelle più esigenti. Le sue funzioni, infatti, prendono in considerazione una vasta schiera di attività: si va dal semplice scambio di file, fino al supporto per server FTp, HTTp, iTunes e molto altro.

Com’è fattoDal punto di vista costruttivo, lo ZyxEL nSA 325v2 si presenta con uno chassis in plastica dalle dimensioni abbastanza ridotte. Sulla parte frontale abbiamo il tasto di accensione, più una porta uSB 3.0. Troviamo poi il coperchio che copre i due alloggiamenti interni per i dischi fissi da 3,5 pollici o da 2,5 con gli appositi adattatori. Sul retro, invece, ci sono due porte uSB, una Ethernet LAn e il connettore per l’alimentazione. i supporti per il collegamento delle unità sono anch’essi in plastica e consentono di inserire gli hard disk in modo semplice e veloce. Ciò nonostante, per fissarli sono necessarie le viti in dotazione. infatti, non potete utilizzare quelle tradizionali perché troppo corte per far presa sugli appositi supporti. una volta fissato il disco, il collegamento non richiede alcuno

per il trasferimento dei file in meno di cinque minuti. Molto interessante anche il servizio di download, che consente di scaricare i documenti direttamente sul disco fisso del nAS, tra cui anche i file torrent, senza passare dal computer. potete far accedere lo ZyxEL al vostro account Dropbox, in modo da interfacciarvi direttamente con la cloud. per chi vuole ospitare il proprio sito Web in casa, quindi senza fare affidamento sui provider, il server HTTp consente di sfruttare il supporto pHp con i relativi phpMyAdmin e database MySQL. Se poi non vi accontentate, ci sono anche client e server rSS per scaricare contenuti. A livello di sicurezza, il nAS supporta i protocolli HTTpS, FTpES e la crittografia dei dati. permette inoltre di eseguire il backup tramite pianificazione o in modalità istantanea. ottima anche la gestione degli utenti, che consente di applicare fin nei minimi dettagli i permessi per l’accesso al nAS. Se prevedete un uso intensivo da parte di colleghi e amici, sfruttate il supporto per i Gruppi e regolate i permessi in base alla categoria dell’utente. per gli amanti del comparto multimediale, c’è la possibilità di usare il caricamento automatico su Flickr e YouTube, così da velocizzare le operazioni di condivisione dei propri file al massimo.

sforzo: basta inserirlo nel proprio alloggiamento ed esercitare una leggera pressione. Dopo averlo acceso, lo ZyxEL non nasconde il rumore della sua ventola di raffreddamento, che si traduce in un leggero ronzio comunque non particolarmente fastidioso.

Il softwarei filesystem supportati vanno dall’ExT4 al 2, quindi non avrete problemi di compatibilità. La configurazione iniziale è molto semplice. Dopo aver connesso il nAS alla rete locale, il dispositivo viene riconosciuto subito e basta collegarsi all’indirizzo ip assegnato dal DHCp per venire accolti dall’interfaccia di accesso. una volta riconosciuti, avete a disposizione un ambiente grafico semplice e intuitivo, che consente di usare subito le funzioni più comuni: navigare nei dischi fissi, gestire i file multimediali (musica, film e foto), le applicazioni e configurare le impostazioni di amministrazione. il vero cuore del sistema è però il pannello di controllo. per la felicità di tutti gli smanettoni, le funzioni su cui si può mettere mano sono veramente tante. oltre a tutte le impostazioni di rete, tra cui spicca anche il servizio Telnet, ci sono una serie di applicazioni a livello server. FTp è facilmente configurabile e consente di mettere in piedi un’infrastruttura perfetta

App mobileper accedere dall’esterno al nAS è necessario configurare un port forwarding sul proprio router. È disponibile anche un’applicazione per dispositivi mobile, che però non brilla per funzioni. infatti, non consente l’accesso dalla rete HTTp, ma solo da quella locale. È quindi utile solo per configurare il dispositivo da un tablet o uno smartphone senza accendere il computer. Sempre dell’App mobile, oltre che accedere allo stato di funzionamento e alle applicazioni del nAS, navigate anche tra i file archiviati. il prezzo, senza dischi fissi inclusi, è particolarmente conveniente. LXP

Pronto per la stampaLe porte uSB nella parte retrostante sono molto utili per sfruttare il nAS di ZyxEL

come server di stampa. Funzione peraltro ampiamente supportata dal pannello di controllo, che potete gestire fin nei minimi dettagli tramite la voce Server stampante. Da notare, sempre sul retro, la presenza del comando RESET per riportare allo stato di fabbrica il dispositivo.

ZyXEL NSA-325 v2Un NAS facile da installare e configurare, il cui prezzo è senza dubbio uno dei migliori punti di forza

LXP_140_43_rec_ZyXEL 43 28/03/14 12:51

Page 44: 04_aprile2014

Roundup Office suites

44 Linux pro 140 Linux pro 140 45

Confronto Test Test Confronto

L’archiviazione online fornita da servizi come Dropbox ha cambiato il modo di condividere e gestire i propri file. Tuttavia

c’è un costo da pagare e non in soli termini economici, ma anche e soprattutto di privacy. per alcuni di noi, l’idea di affidare i propri dati a un server cui non si ha accesso fisico, non se ne conosce la localizzazione e gestito da terzi è semplicemente impensabile. per tutti coloro che la pensano così, il personal Cloud Storage è la soluzione perfetta. Questo tipo di servizio offre tutta la comodità dell’archiviazione online, ma vi

Ogni mese mettiamo a confronto prodotti e programmi per farvi scegliere al meglio!

Modalità del test

permette di mantenere il controllo totale su file e dati personali. i documenti, infatti, pur non lasciando fisicamente il computer, sono accessibili attraverso qualsiasi dispositivo connesso a internet. inoltre, molti servizi mettono perfino a disposizione client per la sincronizzazione da desktop e mobile. potete usare i servizi di hosting per

condividere i dati, utilizzare i vari strumenti per lavorare in gruppo sui file, sfruttare le funzioni di controllo per verificare le eventuali modifiche ai documenti, per poi ripristinare le versioni originali. Continuando nella lettura, approfondirete nel dettaglio le funzioni dei cinque servizi che abbiamo scelto per la comparativa di questo mese.

Hosting personale

La nostra selezione BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

Se non siete tranquilli ad affidare i vostri dati alle varie piattaforme Cloud, ma avete ugualmente necessità di archiviarli online, Linux Pro vi propone un confronto tra cinque servizi di Personal Cloud Storage in stile Dropbox

Prima di proseguire nel descrivere su cosa abbiamo posto la nostra attenzione, è d’obbligo fare una premessa: alcuni servizi presi in esame sono più facili da installare rispetto ad altri. La maggior parte, infatti, deve essere installata su un server. Noi li abbiamo montati su una macchina con Mint 16, un processore da 2.1 GHz Intel Core 2 Duo, 4 GB di RAM e un disco da 1 TB. Abbiamo usato le versioni più stabili di ogni servizio, scaricate direttamente dai rispettivi siti Web, mentre le dipendenze sono state riprese dai repository della distro. Oltre a confrontare le varie procedure d’installazione, ci siamo concentrati sull’intuitività delle diverse interfacce. Non ci siamo poi fatti mancare l’analisi sui client di sincronizzazione per Linux e Android. Va poi detto che alcuni strumenti sono più basilari, mentre altri, come il controllo sulla crittografia, sono molto più impegnativi da utilizzare.

“Potete usare il Personal Cloud Storage per archiviare e condividere foto, video e qualsiasi altro file”

LXP_140_44_49_LXF180.round 44 27/03/14 11:33

Page 45: 04_aprile2014

Roundup Office suites

44 Linux pro 140 Linux pro 140 45

Confronto Test Test Confronto

Incrementate le funzioni di OwnCloud con nuove App

Di tutti i servizi di questo confronto, OwnCloud è quello con il processo d’installazione più chiaro e ben

documentato. È possibile installare manualmente il server sulla vostra macchina oppure, per le distro più popolari, dai repository ufficiali. per impostazione predefinita, ownCloud utilizza SQLite, ma può collegarsi senza problemi a database MySQL preesistenti e a server Web nginx e Lighttpd. Anche Seafile utilizza SQLite, benché il proprio sito riporti le istruzioni per farlo funzionare con MySQL/postgreSQL, nginx e Apache. Questo servizio si installa con un script python, che vi chiede poi di configurare i vari componenti. Anche se l’installazione è ben documentata, si deve avere una buona conoscenza dell’argomento. i client di Seafile, infine, vengono messi a disposizione come Deb precompilati. un altro servizio disponibile nello stesso formato è Tonido, che purtroppo non sembra fare un buon lavoro, visto che

Il processo d’installazione

Strumenti inclusi e add-on

Di cosa avete bisogno per iniziare?

Se volete aggiungere più funzionalità, quali opzioni avete?

ubuntu lamenta la violazione degli standard di qualità per i suoi pacchetti. una volta installato il server, dovrete configurarlo con un nome unico da registrare su Tonido, quindi sarete in grado di accedere al computer da internet. Gli sviluppatori apprezzeranno molto il servizio SparkleShare, poiché utilizza il sistema di controllo versione Git. Tutto quello che serve per installare il servizio è scaricarlo ed eseguire il relativo script. Va però detto che la condivisione della directory projects richiede un po’ di lavoro. Quando create un progetto, SparkleShare restituisce l’indirizzo SSH dell’host e il percorso della directory condivisa, che viene poi creata all’interno di /home/storage/user. È poi necessario dare il riferimento a qualsiasi client che vogliamo aggiungere. Quest’ultimo può essere installato dal repo della vostra distro, oppure compilato manualmente seguendo le istruzioni sul sito. Quando aggiungete i client, vi chiederanno la chiave

pubblica SSH per l’host, che quindi dovrete ricordare. È interessante notare come SparkleShare sia in grado di connettersi anche ad altri siti di hosting, tra cui GitHub e BitBucket. infine c’è BitTorrent Sync che, almeno su Linux, si distingue per la complessità della procedura d’installazione. una volta ottenuti i pacchetti dopo l’aggiunta di un ppA, l’installer vi permetterà di creare un’istanza predefinita di BitTorrent Sync. Altrimenti, visto che non c’è alcuno strumento grafico di configurazione per Linux, potete definire i parametri interattivamente o modificando i file di configurazione.

SparkleShare e BitTorrent Sync offrono servizi di file sharing. È quindi possibile utilizzarli

per il backup o la condivisione di dati con altri utenti. Seafile include un modulo wiki, più un paio di editor di testo: il primo molto ricco e potente, il secondo più

semplice e capace solo di convertire il testo normale in documenti xHTML. Seafile, inoltre, consente a più persone di lavorare su un unico file. infatti, genera una nuova versione dopo ogni modifica ed è possibile ripristinare il documento a una release precedente in caso di errori

o malfunzionamenti. Tonido lavora con diverse applicazioni, tra cui un file explorer e Webshare per condividere file di grandi dimensioni. Ha poi un’altra serie di strumenti disponibili sul proprio sito Web, molti dei quali gratuiti. Fra i più interessanti, trovate il client torrent basato su browser, l’applicazione Thots

blogging e il Workspace piM (Personal Information Manager). Se volete aggiungere applicazioni Web al vostro servizio di personal Cloud Storage, il migliore è sicuramente ownCloud. Dispone di gallerie fotografiche, usa Ampache per lo streaming di musica, ha visualizzatori Web per file pDF e oDF. Ci sono perfino un Task Scheduler, un editor di testo online e un’applicazione per memorizzare i segnalibri. È poi possibile scaricare altri strumenti dall’App Store. Al suo interno, infatti, troviamo moltissimi software con cui arricchire le funzioni di ownCloud. Ci sono quelli per la produttività, come riduttori di urL, il server di posta roundcube, strumenti multimediali tipo JW player, altre applicazioni per la visualizzazione dello spazio di archiviazione e per la scansione di file con ClamAV antivirus.

Tonido vi richiede di registrare il PC al proprio servizio di trasmissione, anche se potete disabilitarlo dopo l’installazione

Ancora una volta, OwnCloud è il servizio che si distingue di più per la disponibilità di una vastissima schiera di plug-in accessori.

Verdetto

BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

Le procedure d’installazione e aggiornamento di OwnCloud sono davvero semplici.

Verdetto

BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

LXP_140_44_49_LXF180.round 45 27/03/14 11:33

Page 46: 04_aprile2014

46 Linux pro 140 Linux pro 140 47

Confronto Test Test Confronto

UsabilitàDovete avere una laurea per usare il Personal Cloud Storage?

T utti questi servizi non funzionano come le tradizionali applicazioni desktop. nella maggior parte dei casi, dovrete

impostare un server e, se desiderate accedervi dall’esterno, sarà necessario ottimizzare il vostro router e gestire il firewall. Alcuni programmi del nostro confronto sono

più facili da installare e amministrare, mentre altri supportano la crittografia lato client e offrono maggiore sicurezza e privacy. Tuttavia, uno dei punti di confronto più importanti è la vostra esperienza. non ha senso consigliare il servizio più sicuro, se per farlo funzionare dovete perdere la

vista a leggere manuali interi. nel nostro caso, valuteremo l’interfaccia utente delle console di amministrazione Web e client desktop. Considereremo però anche la semplicità delle procedure per creare una cartella condivisa e accedervi da altre macchine.

OwnCloudLa procedura di installazione è minimale. il servizio ha un file manager impressionante, in grado di gestire i documenti nei formati più diffusi. Trovate un utile set di applicazioni, che rende ownCloud davvero completo. in termini di sicurezza, si rimane soddisfatti dalla crittografia di base e dal controllo della versione dei file. A differenza del primo sistema, il secondo è abilitato di default. L’applicazione del versioning ci mette al riparo dal saturare lo spazio a disposizione, eliminando automaticamente le vecchie versioni dei file. ownCloud permette di utilizzare anche servizi Cloud esterni, come Google Drive, Amazon S3, Dropbox e openStack Swift ed è capace di gestire i dati senza soluzione di continuità con il vostro Cloud privato. Supporta CALDAV e CardDAV per la sincronizzazione dei calendari e delle rubriche. il client visualizza poi le notifiche, riepilogando le attività di sincronizzazione.

SparkleShareL’installazione di questo servizio è piuttosto semplice: tutto ciò che serve è scaricare ed eseguire il relativo script. SparkleShare è in grado di trasferire i dati su canali SSH e in più può gestire condivisioni criptate. A differenza di altri servizi, non avete alcuna interfaccia di gestione Web, bensì dovete agire da linea di comando. inoltre, collegare i client al server è un processo piuttosto complicato. in più dovrete anche trovare il modo per trasferire in modo sicuro le chiavi SSH pubbliche tra le macchine collegate e l’host. il servizio ha un client desktop con funzionalità limitate e nessuna applicazione mobile. una volta impostato, anche i file più piccoli come quelli da 25 MB richiedono del tempo per la sincronizzazione. infatti, gli stessi sviluppatori ammettono che SparkleShare non è la soluzione migliore per l’archiviazione di foto, video, musica o di qualsiasi altro file di ingenti dimensioni.

Nessuno dei servizi provati si integra con il menu contestuale accessibile tramite il tasto destro del mouse.

Detto questo, la maggior parte di loro ha client formidabili, capaci di eseguire il backup di qualsiasi cartella. Gli utenti di ownCloud possono inoltre sincronizzare ogni directory di sistema. Accedete al client dalla barra di stato, che vi permette di gestire la larghezza di banda e mettere in pausa o riprendere i trasferimenti. Sempre il client consente di aggiungere

Integrazione con il desktopQuanto sono usabili i client di ciascun servizio?

cartelle locali e specificare vari modelli per file o directory che non devono essere sincronizzate. Con Seafile condividete una cartella sul desktop, caricando il contenuto in una libreria condivisa. il client può poi essere utilizzato per creare nuove librerie, scaricare quelle esistenti, visualizzare lo stato della sincronizzazione e molto altro ancora. SparkleShare è capace di sincronizzare solo le cartelle condivise dal server. Anche se questo servizio ha un client installato nel sistema, che consente di visualizzare

le notifiche di sincronizzazione, nonché un elenco delle modifiche in tutte le directory condivise, non va molto oltre. Tonido, sotto questo profilo, non è migliore. Con il client aggiungete i file alle cartelle sincronizzate, ma non potete condividere alcuna nuova directory. BitTorrent Sync non ha un client desktop per Linux e quindi, per sincronizzare le cartelle, dovete utilizzare solo l’interfaccia Web. Genera chiavi di sola lettura o accesso completo, più codici Qr per applicazioni mobile. può poi gestire la banda da usare.

Seafile è il servizio con il miglior client desktop. Anche OwnCloud, però, non è da meno, mentre gli altri rimangono allo stesso livello.

VerdettoBitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

LXP_140_44_49_LXF180.round 46 27/03/14 11:33

Page 47: 04_aprile2014

46 Linux pro 140 Linux pro 140 47

Confronto Test Test Confronto

SeaFileQuesto servizio ha un processo d’installazione lineare e chiaro basato su script, che utilizza vari componenti operanti su diverse porte. Quando si verifica un problema, tuttavia, diventa complesso identificarlo. L’interfaccia Web, inoltre, è piuttosto dispersiva. Si inizia creando una libreria, che può anche essere criptata, quindi si prosegue aggiungendo i file. il servizio offre però opzioni flessibili per condividere gruppi o singoli file con uno o più utenti. È anche possibile trasferire i permessi amministrativi a un altro utente registrato. il client desktop è installato nel sistema ed è in grado di visualizzare le notifiche delle operazioni di sincronizzazione. Altri utenti possono invece effettuare il download e l’upload delle librerie e, una volta che una di queste viene scaricata, l’ultima versione viene aggiornata sul server e poi sincronizzata con tutti i computer. infine, c’è anche uno strumento fsck.

BitTorrent SyncBitTorrent Sync utilizza uSp, non impiega alcun server e vi permette di trasferire file in modo sicuro tra più utenti tramite una connessione p2p. Durante l’installazione, crea un file di configurazione preimpostato, anche se i più esperti potrebbero volerne generare uno manualmente con una quantità maggiore di opzioni. L’interfaccia Web rappresenta la modalità predefinita per accedere a BitTorrent Sync su Linux. Da qui è poi possibile gestire le preferenze generali e condividere le cartelle. Quando si aggiunge una directory, si ottengono due chiavi: usa di sola lettura e l’altra per l’accesso completo. per avviare la sincronizzazione, non dovrete far altro che inserire una di queste due stringe in un altro client BitTorrent Sync. il servizio, inoltre, crittografa tutto il traffico tramite la chiave privata derivata da quella segreta che avete condiviso. Se poi volete collegarvi con il vostro smartphone, basta scaricare l’applicazione mobile e scansionare il codice Qr generato dal client Web desktop.

TonidoTonido è progettato soprattutto per l’utente desktop mediamente preparato. infatti, non è necessario preoccuparsi dei dettagli relativi alla connessione di rete. Si installa direttamente sul pC di cui volete condividere i file, quindi basta registrare il computer come server. A questo punto, il disco fisso è accessibile da qualsiasi macchina collegata al Web attraverso un tradizionale browser. per sincronizzare file e cartelle, è poi necessario installare l’apposita applicazione. Questa è stata progettata principalmente per l’uso di un singolo utente che vuole accedere ai propri file dovunque. Tuttavia, tramite semplici collegamenti Web, è possibile condividere i vari documenti anche con altre persone che non utilizzano Tonido. il servizio, infatti, consente di creare e condividere link via mail, tramite Facebook o Twitter. infine, dispone anche di un App Store da cui potete scaricare liberamente plug-in adatti a potenziare le funzionalità del servizio.

Applicazioni mobileUsate la vostra cloud in mobilità

Se utilizzate SparkleShare e volete accedere dal vostro smartphone, rimarrete delusi. il servizio aveva

un client base per Android, ma non è più presente nel play Store. Seafile possiede un’analoga App Android, attualmente in stato di sviluppo. potete usarla per navigare, caricare e scaricare file, ma non è ancora in grado di sincronizzare automaticamente le modifiche apportate ai documenti. ownCloud, invece, vi permette di usare App per Android e ioS, ma

a differenza del server, non sono disponibili gratuitamente, né offrono alcuna versione di prova. inoltre, non consentono di scaricare o sincronizzare intere cartelle, ma solo singoli file. non mostrano né le anteprime delle foto, né permettono di sincronizzare il calendario e i contatti come avviene nel server. BitTorrent Sync e Tonido hanno App mobile gratuite. Quest’ultimo, oltre alle versioni per ioS e Android, offre anche quelle per Blackberry e Windows phone. Con Android e ioS, BitTorrent Sync permette

di sincronizzare i file selezionando le cartelle del telefono, mentre per condividere quelle presenti nel desktop basta usare un Qr code. Sempre tramite quest’ultimi, si possono poi inviare e ricevere file. Con il client Android di Tonido, si può accedere e scaricare file dal server, oppure caricare i dati in una cartella condivisa. Sfruttando la connessione di rete, si condividono le directory tramite link, si ascolta la musica o si guardano i video presenti sul server, che li transcodifica al volo prima che vengano inviati al telefono.

Verdetto

BitTorrent Sync e Tonido hanno le migliori App per dispositivi mobile. Peccato che quella di SparkleShare sia scomparsa dal Play Store.

BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

LXP_140_44_49_LXF180.round 47 27/03/14 11:33

Page 48: 04_aprile2014

48 Linux pro 140 Linux pro 140 49

Confronto Test Test Confronto

documentazione dei rispettivi servizi. SparkleShare, come anticipato, trasferisce i dati tramite canali SSH. Da notare che, seppure i progetti possano essere crittografati al momento della creazione, non si può fare altrettanto per quelli esistenti. Essendo basato su Git, il servizio include il controllo di versione e inoltre, tramite questo strumento, potrete condividere alcuni dei vostri progetti senza coinvolgerli tutti. Anche BitTorrent Sync supporta il versioning, che crea e memorizza per 30 giorni tutte le copie modificate e i file cancellati, archiviandoli in una cartella nascosta. il traffico dati è criptato tramite una chiave privata derivata da quella segreta condivisa. potrete così concedere anche l’accesso in sola lettura. Tonido, invece, usa un altro approccio. L’utente predefinito è un admin e quindi possiede il pieno accesso a ogni singolo file. Tuttavia, se preferite condividere solo alcune cartelle, basta creare account limitati. C’è anche una protezione aggiuntiva, che consiste nell’implementare un secondo livello di autenticazione per gli accessi remoti. Tonido sfrutta una tecnologia p2p proprietaria e crittografa i dati tramite AES. il servizio, inoltre, punta molto sul fatto che i file non vengano trasferiti tramite un server di terze parti, bensì solo tra il proprio computer e quello remoto.

O gni client desktop di Seafile possiede una chiave privata univoca. Quando uno di questi

si connette al server, entrambi si scambiano la chiave pubblica e negoziano quella di sessione. Quest’ultima viene quindi utilizzata per criptare i dati trasferiti. Tra le altre cose, è possibile creare una libreria criptata con lo standard AES-256. Seafile dispone del controllo di versione che, nonostante mantenga lo storico pieno per impostazione predefinita, permette di specificare un periodo di tempo entro il quale mantenere i vecchi file. Sfogliando

Potete accedere al vostro spazio di archiviazione su ownCloud tramite il protocollo WebDAV,

entrare dal file manager, oppure montarlo dopo l’installazione di DAVfs. inoltre non ci sono difficoltà a collegarsi anche da Windows od oS x. ownCloud consente poi di selezionare gli utenti o i gruppi con cui volete condividere i file e nel caso dargli il permesso di modificare i vari dati. La condivisione può anche avvenire tramite urL protetto da password e data di scadenza, che punta direttamente a un file presente sul server. Tonido offre una funzione simile, consentendo però

Funzioni per la sicurezza

La condivisione

la cronologia di un documento, siete in grado di ripristinare una qualsiasi versione più vecchia. Aggiungete utenti, li organizzate in gruppi e condividete con loro le librerie. in ownCloud fate anche di più: limitate lo spazio di archiviazione per utente e lo organizzate in base ai gruppi creati. i permessi di amministrazione sono condivisi con uno o più user e in più avete a disposizione la crittografia e il controllo versione. ownCloud e Seafile non hanno però opzioni per operare il backup automatico dei dati sull’host e quindi dovrete procedere manualmente. un processo, questo, che viene descritto nella

di personalizzare il nome della condivisione e crearne di pubbliche o accessibili solo a utenti selezionati. BitTorrent Sync, invece, permette di condividere collegamenti con i dati in sola lettura, anche se gli utenti che vogliono avere accesso ai file devono dotarsi dell’apposito client. Tuttavia è sempre meglio di SparkleShare, che non supporta alcuna funzione per la creazione di link diretti ai documenti. Tutto quello che può fare, è creare un progetto, quindi dare a ogni client selezionato un accesso completo in lettura e scrittura. Con Seafile potete condividere una libreria con uno o più contatti, ma anche con gruppi specifici.

I vostri dati sono davvero al sicuro?

Link e soluzioni per l’accesso ai file

SparkleShare usa i canali SSH, ma lascia l’accesso in lettura e scrittura ai client

Il client desktop di Seafile è davvero intuitivo da utilizzare

in questo caso, l’abilitazione dei permessi può essere in lettura e scrittura, oppure in sola lettura. oltre alle librerie complete, niente vi impedisce di condividere singoli documenti. Gli utenti hanno poi pieni poteri: possono caricare, scaricare e modificare i nomi dei file, oppure di intere librerie.

Verdetto

Verdetto

OwnCloud e Seafile offrono il maggior controllo sui vostri dati, assicurando il pieno rispetto della vostra preziosa privacy.

A eccezione di SparkleShare, tutti gli altri servizi consentono di accedere ai file o alle cartelle come guest.

BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

BitTorrent Sync

OwnCloud

SparkleShare

Seafile

Tonido

LXP_140_44_49_LXF180.round 48 27/03/14 11:33

Page 49: 04_aprile2014

48 Linux pro 140 Linux pro 140 49

Confronto Test Test Confronto

Con PageKite, potete effettuare un tunneling in modo semplice e veloce, avendo così accesso ai vostri file al di fuori della LAN

problemi, le cui cause non sempre sono state facili da intuire. Abbiamo però rilevato come il componente Seahub sia l’anello più debole della catena. inoltre, sul forum di supporto, molti utenti hanno lamentato come nel tempo il servizio tenda a funzionare male con le raccolte di grandi dimensioni. nel nostro caso, provandolo per una settimana, non abbiamo mai rilevato problemi del genere. Se la condivisione di molti file è il vostro obiettivo, allora non c’è niente come BitTorrentSync. progettato per la massima sicurezza e la crittografia, non utilizza alcun server di archiviazione. ownCloud funziona bene se avete intenzione di condividere file con amici o colleghi. Si dice che non sia molto scalabile, ma non abbiamo avuto questa impressione. Ha un discreto

Se tenete moltissimo alla privacy dei vostri dati, SparkleShare è la soluzione migliore per condividere

e lavorare in gruppo su più documenti. il servizio, utilizzando SSH, è estremamente sicuro, anche se purtroppo non è abbastanza intuitivo per attrarre l’utente medio. un approccio che invece sembra avere Tonido, il quale, con il suo client desktop, si rivela assai facile da utilizzare. È perfetto per l’uso personale e in un paio di click permette di avere accesso a qualsiasi file archiviato. Tuttavia, anche se è possibile condividere i vari dati, non è progettato per darvi la possibilità di lavorarci sopra in gruppo. Se la collaborazione online è ciò che muove le vostre scelte, allora dovete puntare su Seafile. Facile da installare, supporta la crittografia lato client, ha un’interfaccia ricca di funzionalità sia per il desktop, sia per i dispositivi mobile e mette addirittura a disposizione una versione per raspberry pi. Durante i nostri test, Seafile è stato però l’unico servizio che ci ha dato più volte

client Android e utilizza SQLite per le installazioni più semplici, ma può usare anche altri database o server. Viste le tante applicazioni utili e la possibilità di connettersi a servizi esterni, lo mettiamo al primo posto.

Hosting personale

Il verdetto

Su CloudFS.org (http://bit.ly/1ifDT4h) trovate un tutorial per la creazione di un servizio Cloud privato simile a Dropbox tramite GlusterFS. potrete così creare un filesystem adattabile da un server remoto a un computer locale. Su Fak3r.com (http://bit.ly/1eAqYVF) trovate un altro tutorial

che utilizza openSSH per la crittografia dei trasferimenti, rsync per la sincronizzazione e il demone lsyncd per la sincronizzazione diretta. Se state cercando soluzioni già pronte, c’è il progetto dvcs-autosync basato sul sistema di controllo versione distribuito (DVCS). utilizza Git

per lo storage back-end, supporta mercurial e altri sistemi di versioning. perlShare è realizzato attorno allo strumento di sincronizzazione Unison (http://git-annex.branchable.com), che è stato oggetto di crowdfunding e vi permette di creare una cartella sincronizzata su diverse macchine. LXP

Considerate anche...

OwnCloud1° SparkleShare4°Web: www.sparkleshare.org Licenza: GPLv3 Versione: 1.3

È il servizio più sicuro, ma ha poche opzioni per la condivisioneWeb: www.owncloud.org Licenza: AGPLv3 Versione: 6.0.1

offre le caratteristiche giuste per lo storage professionale e domestico

non siete d’accordo con le nostre scelte? Avreste usato altri servizi? inviate le vostre opinioni su questo Confronto a: [email protected]

A voi la parola...

Seafile2°Web: www.seafile.com Licenza: GPLv3 Versione: 2.1.1

La soluzione perfetta per chi può fare a meno degli add-on di ownCloud

BitTorrent Sync3°Web: www.bittorrent.com/sync Licenza: Freeware Versione: 1.2.91

il miglior servizio per la condivisione di file con amici, parenti e colleghi

Tonido5°Web: www.tonido.com Licenza: GPL Versione: 4.78.0.26120

ideale per gli utenti desktop che vogliono avere accesso ai file da internet

“OwnCloud permette di sfruttare molte applicazioni utili e consente la connessione anche a servizi esterni”

LXP_140_44_49_LXF180.round 49 27/03/14 11:33

Page 50: 04_aprile2014

50 Linux pro 140 Linux pro 140 5150 Linux pro 140 Linux pro 140 51

“Un intero thread di una discussione può essere ignorato o visualizzato”

A lla fine degli anni ‘90, utilizzare un client per la posta elettronica era la norma. Certo, non

mancavano alcuni pionieri della Webmail come Hotmail o Yahoo, ma eravamo lontani anni luce rispetto ai risultati odierni. L’avvento di Google Mail ha però cambiato tutto: la Webmail è diventata veloce, ricca di funzioni e grazie all’uso di Ajax capace di eguagliare i client desktop. il risultato lo vediamo oggi, dove la maggior parte di noi usa le Webmail, seppure ci siano ancora un milione di ragioni per sfruttare un’applicazione dedicata. Tra i grandi vantaggi di una soluzione del genere c’è la possibilità di lavorare offline. Le mail

Thunderbirdvengono memorizzate sul vostro computer e potete accedervi quando lo ritenete opportuno, anche se non siete connessi a internet. un aspetto che aiuta molto a risparmiare, soprattutto se usate una connessione mobile. inoltre non c’è bisogno di sprecare la banda per la lettura di vecchie email e l’accesso agli allegati. naturalmente avrete sentito parlare di Thunderbird come uno dei migliori client di posta elettronica

al mondo. purtroppo non abbiamo lo spazio per descrivere ogni sua caratteristica, quindi vi illustreremo solo le più importanti. iniziamo con la procedura di avvio: non richiede neppure l’installazione nel sistema. Basta estrarre i file da thunderbird-24.3.0.tar.bz2 ed eseguire il programma nella sua directory. Se lo estraete in /usr/lib/thunderbird, potete aggiungere un richiamo veloce per l’avvio. Quando lo lanciate la prima volta, potete aggiungere un account email esistente: basta inserire l’indirizzo e la password e il programma interrogherà il server per reperire tutte le impostazioni. in molti casi, scegliete tra i protocolli iMAp e pop3 (nel primo caso vengono scaricate solo le intestazioni dei messaggi, nel secondo, invece, effettuate il download di testo e allegati). Le principali nuove funzionalità di Thunderbird 24 includono alcune caratteristiche interessanti. L’intera cronologia di un messaggio può essere ignorata o visualizzata, potete ingrandire o rimpicciolire la composizione del testo (non solo cambiare la sua dimensione), c’è il supporto iDn per indirizzi di posta elettronica internazionali tramite unicode. infine, in chat, i nomi utente vengono evidenziati se menzionati.

Versione: 24.3.0 Web: http://mzl.la/15nMss2

Thunderbird XRoar Mars simulation CropGUI DigiKam Fgallery SeaMonkey Dust Racing 2D Chrzazscz

Client email

L’interfaccia di Thunderbird

Account Emailil vostro account, con le varie directory, viene mostrato qui. Se state usando un indirizzo Gmail, le icone sono visualizzate come cartelle.

Schedeper impostazione predefinita, la scheda principale è quella della posta, ma se ne possono aprirne altre secondo le funzioni del programma, per esempio Chat.

Lista dei messaggiLe email non lette sono quelle in grassetto. per impostazione predefinita, i messaggi più recenti compaiono in fondo. Basta però premere la colonna Data per cambiare disposizione.

Anteprima delle emailQui leggete le anteprime dei messaggi. Tramite i pulsanti nella barra superiore potete rispondere o utilizzare altre funzioni.

MenuLa lista dei menu, in Thunderbird, non viene visualizzata di default. Basta però premere su queste tre linee per farla comparire.

Da non perdere

Thunderbird include anche un piccolo client di chat con supporto per Facebook

Test Da non perdere Da non perdere Testi migliori nuovi programmiopen Source del pianeta

LXP_140_50_54_LXF178.hotpick 50 27/03/14 11:33

Page 51: 04_aprile2014

50 Linux pro 140 Linux pro 140 5150 Linux pro 140 Linux pro 140 51

Chi ha qualche anno sulle spalle, sicuramente ricorderà le interminabili flame degli anni ‘80 tra gli estimatori

dello ZxSpectrum e del Commodore 64. per lo più erano discussioni faccia a faccia, visto che non esisteva la rete come la conosciamo oggi. inoltre, prendevano soprattutto di mira le unità a nastro, che sullo Spectrum 2+A era inclusa. poi c’era chi si pavoneggiava con la sua Dragon 64 e inveiva contro le altre macchine. Queste ultime, i cui numeri 32/64 si riferivano alla memoria installata in k, erano in gran parte unità a 8 bit semisconosciute, costruite intorno al 1980. Venivano assemblate in Galles e le specifiche non erano niente di formidabile (una Cpu 6809 a 0.89 MHz e una roM Microsoft BASiC). Anche se Dragon ha cessato la produzione nel 1984, queste macchine hanno ancora un piccolo gruppo di fan che sfrutta un emulatore in formato xroar. per compilare i sorgenti sulle

L’idea di colonizzare Marte è stata oramai sfruttata da una moltitudine di romanzi di fantascienza. Molti

vedono le recenti spedizioni spaziali come una potenziale preparazione a qualcosa di molto più complicato: lo sbarco umano sul pianeta rosso. C’è chi pensa che basti sostituire i droni con gli astronauti, ma la realtà è molto più complicata. Mars simulation è una spettacolare simulazione in Java, che mostra nel dettaglio la complessità di una spedizione umana su Marte. potete prelevarla come Zip o tarball (lanciate java -jar mars-sim-main-3.05.jar dopo aver estratto l’archivio compresso), oppure sotto forma di DEB per ubuntu e le distro basate su Debian. in questo caso potrete richiamare la simulazione dal menu Istruzione. Quando iniziate, scegliete tra due tipi di insediamenti: il primo ha una popolazione di circa 24 persone

XRoar

Mars simulation

distro basate su ubuntu/Debian è necessario recuperare le seguenti dipendenze:sudo apt-get install build-essential libsndfile1-dev libgtk2.0-dev libgtkglext1-dev libasound2-dev

ognuna è comunque disponibile con nomi diversi anche per altre distro. A questo punto basta eseguire ./configure, make e make install (quest’ultimo come root). Se notate un problema a livello di libreria, in cui manca l’ultimo passaggio, modificate config.mak, rinominando la riga LDFLAGS in LDFLAGS =-lm, quindi eseguite nuovamente la procedura di compilazione. prima di utilizzare l’emulatore, avrete bisogno di un’immagine roM per Dragon da posizionare in /usr/

ed è in fase piuttosto avanzata. il secondo, invece, mette a disposizione solo quattro coloni e dovrete applicarvi molto di più per procedere. Tramite un tutorial, prendete comunque confidenza con gli strumenti principali per gestire l’insediamento. La simulazione avviene con tempo accelerato (un secondo nella realtà corrisponde a 10 minuti), che comunque potete gestire secondo le vostre preferenze dal menu Tools. Qui avete accesso ai vari punti di vista per le attività sul pianeta, così da poter visualizzare le diverse missioni di ricerca, oppure controllare la salute degli astronauti. Gran parte dell’attività

Emulatore Dragon 32/64

Simulatore per la colonizzazione di Marte

local/share/xroar. Ci scusiamo fin da subito, ma a causa di possibili problemi di copyright, non possiamo riportare link ad alcuna roM. per lanciare l’emulatore, basta eseguire xroar, quindi scegliere le specifiche -default-machine:xroar -default-machine dragon32

Con Ctrl+SHIFT+L caricate un nastro (CAS, WAV o BAS), un’immagine o un disco (DMK o VDK) e lo auto avviate. un elenco completo delle scorciatoie da tastiera è presente nel manuale.

si svolge senza il vostro coinvolgimento diretto. Tuttavia potete apportare modifiche importanti, come la rinegoziazione delle missioni di rifornimento e la creazione di nuovi compiti, tipo la costruzione di edifici o la ricerca di minerali. ricordatevi che il divertimento di questa simulazione sta soprattutto nel capire quanta progettazione dovrebbe esserci dietro a una missione umana su Marte, quindi non è adatta a chi cerca un passatempo veloce e senza pensieri.

Versione: 0.31.1 Web: http://bit.ly/18T0a10

Versione: 3.05 Web: http://mars-sim.sourceforge.net

Anche se Dragon non ha mai avuto una grande scelta di giochi, ci sono alcuni titoli interessanti come Chuckie Egg

Il pannello Navigator vi permette di vedere la posizione del vostro rover sul planisfero di Marte

“Dragon ha ancora un gruppo di appassionati che si riuniscono in Rete”

“La simulazione mostra quanto complessa può essere la colonizzazione”

Test Da non perdere Da non perdere Test

LXP_140_50_54_LXF178.hotpick 51 27/03/14 11:33

Page 52: 04_aprile2014

52 Linux pro 140 Linux pro 140 53

Tra i nostri sempre crescenti fastidi che riscontriamo navigando in rete ci sono le foto in pnG. È vero

che non tutti conoscono le differenze tra formati, ma troppo spesso vediamo immagini enormi, che potrebbero occupare una manciata di MB se solo fossero compresse in JpEG. La maggior parte dei nostri lettori saprà sicuramente quale formato utilizzare, ma vale comunque la pena ripeterli: i JpEG sono perfetti per pubblicare le foto online. Sfruttano una compressione lossy, che rimuove un numero limitato di pixel tale da non essere quasi notato dall’occhio umano. pnG, invece, memorizza ogni singolo pixel con compressione lossless, così da ottenere immagini molto più adatte agli schemi, ai loghi e via dicendo. Se avete un po’ di foto in JpEG e volete ritagliarne una porzione specifica, potreste aprirle

L a diatriba se sia meglio KDE o GnoME si riduce a mettere sullo stesso piatto della bilancia

la configurabilità contro la semplicità. i fan di KDE accusano gli sviluppatori di GnoME di aver anteposto l’interfaccia alle funzioni più importanti. i “Gnomers”, invece, considerano KDE un labirinto di pulsanti e impostazioni da incubo. Queste discussioni, inoltre, si estendono molto al di fuori dell’ambiente desktop, arrivano a includere anche le rispettive applicazioni, come DigiKam (KDE) contro Shotwell (GnoME). Qualora gli strumenti di quest’ultimo possano sembrarvi troppo basilari, DigiKam è la soluzione perfetta. nonostante la sua complessità, quest’applicazione è tra i gestori fotografici più popolari. Lo spazio è tiranno, quindi ci concentreremo sull’installazione e sulle principali funzioni della versione 4.0. Se non avete a disposizione alcun pacchetto nei repo delle vostre distro, dovreste

CropGUI

DigiKam

in GiMp, scontornarle e salvarle di nuovo. Tuttavia, questa procedura ha un difetto: ogni volta che salvate un’immagine in JpEG, viene ricompressa e quindi, nel corso del tempo, tende a deteriorarsi oltremodo. CropGui, invece, è un piccolo strumento python che consente di ritagliare le aree di un’immagine JpEG senza doverle ricomprimere. Ci sono due versioni incluse nel tarball: cropgui.py è quella più vecchia, che utilizza Tk per l’interfaccia, cropgtk.py ha invece un front-end GTK molto più piacevole. Quando avviate il programma, viene richiesto di individuare un file. una volta fatto, trascinate gli angoli del rettangolo

compilarlo dai sorgenti. operazione non troppo dolorosa, se si recuperano tutte le dipendenze che elenchiamo di seguito: libqt, kdelibs, libkipi, libkdcraw, libkexiv2, libgphoto2, liblcms, libjasper, libtiff e libpng. Date un’occhiata al file Readme per le varie versioni richieste. una volta ottenuto tutto, installate DigiKam con questi comandi:cmake .makesudo make install

potete aggiungere al comando cmake -DCMAKE_INSTALL_PREFIX per specificare un percorso d’installazione diverso (per impostazione predefinita è in /usr/local/). Tra le nuove funzioni, trovate

Editor di file JPEG

Editor di immagini

fino a comprendere solo l’area che volete mantenere dopo il ritaglio. Attenzione, perché non c’è alcun pulsante Salva e quando fate clic su Crop, la modifica viene applicata all’istante. non preoccupatevi però, perché il file modificato viene salvato con un nuovo nome. Se aprite immagine_2323.jpg, una volta ritagliata, prenderà il nome di immagine_2323-crop.jpg. Dopo averne compreso il funzionamento, l’uso di questa applicazione è molto semplice.

un supporto migliorato per i file generati da Capture nx, il programma di fotoritocco nikon. DigiKam, infatti, adesso può leggere le informazioni sui loro Color Label. nello strumento Mantenimento ci sono diverse opzioni per la selezione di album e tag, mentre le prestazioni sono state migliorate grazie al supporto per il multi-threading e i processori multi-core nel Metadata Synchroniser, Thumbs Generator e Fingerprint Generator. Ci sono anche alcune migliorie nella funzione per la riduzione del rumore, nel Face recognition e nel codice in generale che ha subito un’ulteriore ripulitura.

Versione: 0.1.1 Web: http://bit.ly/1a5fLHW

Versione: 4.0.0 Web: www.digikam.org

L’operazione di ritaglio operata su questa immagine non ne ha alterato la qualità, poiché non è stata ricompressa

Con lo strumento Gestore elaborazioni in serie, potete effettuare ritocchi su più file in modo semplice e veloce

“CropGUI ritaglia le foto JPEG evitando di doverle ricomprimere”

“Supporta i file creati con il software di editing Nikon Capture NX”

Test Da non perdere Da non perdere Test

LXP_140_50_54_LXF178.hotpick 52 27/03/14 11:33

Page 53: 04_aprile2014

52 Linux pro 140 Linux pro 140 53

Fgallery ci ha reso immensamente felici. È un programma perl che genera gallerie fotografiche Web, riprendendo

le immagini dalle vostre raccolte. L’interfaccia utilizzata da quest’applicazione per le proprie gallerie è il perfetto sinonimo di semplicità, funzionalità e stile. Si concentra quasi esclusivamente sulla navigazione e la visualizzazione delle immagini, limitandosi a mostrare solo una ridotta quantità di informazioni. Se utilizzate Debian/ubuntu, per recuperare le dipendenze, usate il seguente comando:sudo apt-get install imagemagick zip exiftran libjson-perl libjson-xs-perl libtimedate-perl

Questi pacchetti dovrebbero comunque essere disponibili anche per altre distro. una volta sistemate le dipendenze, scaricate fgallery-1.5.zip, estraetelo e copiate il contenuto della cartella View all’interno della directory utilizzata per la galleria

C hi pensava che SeaMonkey fosse scomparso deve ricredersi. È più vivo che mai e anche

se mantiene sempre un basso profilo, alle spalle ha una storia davvero affascinante. per coloro che non lo conoscono, vale la pena riepilogarla velocemente. SeaMokey è il seguito della Mozilla Application Suite, che a sua volta è stata il successore di netscape, il browser che ha dominato i computer domestici fino alla fine del 1990 (prima che Microsoft imponesse internet Explorer). oggi, i programmi più in vista di Mozilla sono Thunderbird e Firefox, ma non per questo SeaMonkey deve essere dato per spacciato. Anzi, il suo sviluppo sta continuando senza alcun problema: il 13 febbraio di quest’anno è stata rilasciata la beta 1 della versione 2.25, mentre quella più stabile continua

Fgallery

SeaMonkey

fotografica (es. web-upload). A questo punto, lanciate:./fgallery /path/to/foto /path/to/web-upload

Se andate in /path/to/web-upload vedrete un file index.html. non tentate di aprirlo nel browser, perché Fgallery usa Ajax che di solito non è supportato per i file memorizzati localmente. Avrete quindi bisogno di usare /path/to/web-upload già disponibile su un qualsiasi server Web. un modo ancora più pratico per lanciare il percorso è accedere alla directory e scrivere: python- m SimpleHTTpServer 8000

Adesso, per visualizzare la galleria, basta collegarsi a http://localhost:8000. Fgallery

a essere la 2.24. il progetto combina una serie di applicazioni rivolte al Web contenute in un singolo programma. La comunità Linux, però, si divide tra gli estimatori e i detrattori di questa soluzione. i primi considerano SeaMonkey uno strumento utilissimo per avere a disposizione tutto il necessario per approcciare al Web. i secondi, invece, vedono il progetto come estremamente pesante e in piena violazione della filosofia unix. Questa collezione è composta da un browser Web, un client di posta elettronica, una chat irC e un editor HTML. L’interfaccia grafica non è molto cambiata dai tempi

Generatore di gallerie fotografiche

Internet Suite

ridimensiona e comprime automaticamente le immagini, in modo da velocizzarne il caricamento sul Web. inoltre, permette di visualizzare anche i dati ExiF. L’interfaccia è pratica e intuitiva: le anteprime sono sulla destra, mentre le foto a dimensioni reali stanno a sinistra. Le informazioni, infine, vengono riportate nella parte superiore. Tra queste noterete anche un’icona a forma di floppy disk, che rimanda a un file Zip compresso contenente le immagini in formato originale.

di Mozilla e netscape e quindi, se non cercate un browser che fa scomparire i pulsanti e nasconde quasi tutto in nome della semplicità, vi sentirete a casa vostra. L’installazione è davvero intuitiva: basta prelevare seamonkey-2.24.tar.bz2, estrarlo ed eseguirlo nella rispettiva directory. non c’è assolutamente bisogno di installarlo nel sistema e se Thunderbird è già presente, ne riprende le impostazioni. Al primo avvio, SeaMonkey vi chiederà di essere impostato come browser predefinito.

Versione: 1.5 Web: http://bit.ly/18pukc1

Versione: 2.24 Web: www.seamonkey-project.org

Oltre a usare le icone a forma di freccia, potete navigare tra le immagini tramite i tasti

Con SeaMokey sembra di fare un salto indietro nel tempo e vedere uno screenshot della Mozilla Suite

“Fgallery è un mix perfetto tra semplicità, funzionalità e stile”

“SeaMonkey include client email, browser, chat IRC ed editor HTML”

Test Da non perdere Da non perdere Test

LXP_140_50_54_LXF178.hotpick 53 27/03/14 11:33

Page 54: 04_aprile2014

54 Linux pro 140 Linux pro 140 TM

Giochi Applicazioni per il tempo libero

Se ci seguite da tanto tempo, allora dovreste ricordare Super Sprint. Era un gioco molto

semplice, in cui si aveva una visione bidimensionale della pista dall’alto verso il basso e l’obiettivo era sorpassare gli avversari e arrivare per primi. Dust racing 2D deve molto a Super Sprint, che comunque lo supera su più fronti. potete infatti sfruttare una vista a scorrimento su tutta la pista, così come un dettaglio maggiore nella grafica. per lanciarlo, non dovrete compilarlo dai sorgenti, perché insieme ai pacchetti per le distro basate su ubuntu/Debian ci sono i tarball binari precompilati. prelevate dustrac-1.6.3-linux-i686-qt4.tar.gz (in alternativa x86_64 se avete un’architettura a 64 bit), estraetelo e lanciate ./dustrac-

Dust Racing 2Dgame nella relativa directory, quindi premete invio sul menu Play per iniziare. All’inizio, potrete correre in un solo circuito, ma più progredirete, maggiori saranno le piste selezionabili. Alla partenza, l’auto rossa è sempre in coda agli 11 avversari in grigio controllati dal computer. utilizzate il tasto freccia su per accelerare, giù per frenare, destra e sinistra per svoltare. Le prime partite vi sembreranno difficilissime, considerando che la vettura tende a sbandare non appena fate un leggero cambio di corsia. Tuttavia, mano a mano che prendete confidenza

Lo scenario che fa da background è in gran parte statico, fatto salvo per gli alberi che ondeggiano un po’

Gioco di corse bidimensionale

con la risposta ai comandi, la situazione migliora. purtroppo ci sono pochi tracciati inclusi, tra cui un paio che sembrano progettati sul modello dei circuiti di Formula 1. È comunque possibile aggiungere le proprie piste tramite l’editor di livelli. Se non sentite quasi niente, è inutile toccare le impostazioni audio. non è colpa del sistema, bensì è il gioco a essere particolarmente silenzioso.

Versione: 1.6.3 Web: http://bit.ly/17xKrqT

“Dust Racing 2D è simile a Super Sprint, ma lo supera in molti aspetti”

R iuscire a pronunciare il nome di questo gioco è già una piccola impresa. Chrzazscz

si basa sulle librerie SDL e ha nell’esplorazione di una serie di labirinti il suo obiettivo finale. per compilarlo dai sorgenti avrete bisogno di SDL-mixer, SDL-image e SDL-ttf. Dopo la tortura della chitarra elettrica che dovrete sopportare nell’intro, il gioco è quasi completamente silenzioso. per iniziare, basta premere invio e selezionare il livello tra i cinque già inclusi. A questo punto dovrete scegliere con quale personaggio iniziare (guerriero, ladro o mago), quindi sarete proiettati nel labirinto. in un primo momento vedrete solo una singola stanza, ma mano a mano

Chrzazsczche varcate le porte, la visibilità della mappa si amplia. non ci sono né combattimenti corpo a corpo, né incantesimi, tutto quello che dovete fare è esplorare. premete F1 per visualizzare l’elenco degli obiettivi per ciascun livello, che comprendono sempre l’accesso a determinate aree del labirinto. Alcune di queste sono bloccate tramite porte chiuse di cui, per ottenere l’accesso, dovrete recuperare le chiavi colorate in possesso di orchi blu che corrono in giro. Alcuni di questi, poi, vi forniranno le chiavi del giusto

Completare i livelli non è facile e quando ci riuscite, le soddisfazioni non mancano

Esplorazione di labirinti

colore senza particolari difficoltà. L’unico aspetto che non aiuta molto è la capacità degli orchi di scomparire attraverso le stanze cui non avete accesso. Chrzazscz è ancora acerbo e molti elementi di gioco sono assenti. Tuttavia, con un paio di livelli in più, una maggiore attenzione alla presentazione e alle caratteristiche dei personaggi, potrebbe diventare un buon classico. LXP

Versione: 0.0.9 Web: http://bit.ly/H7okpb

“Chrzazscz è ancora acerbo, ma potrebbe diventare un classico”

54 Linux pro 140

Test Da non perdere Da non perdere Test

LXP_140_50_54_LXF178.hotpick 54 27/03/14 11:33

Page 55: 04_aprile2014

TutorialI nostri esperti offrono ogni mese i loro consigli di programmazione e di amministrazione del sistema

TuTorialopenStreetMapCreate le vostre mappe digitali e condividetele online pag. 56

Server WebRealizzate un sito basato su WordPress e Apache installabile anche su RP pag. 60

ZabbixUn’ottima applicazione per monitorare le vostre reti pag. 64

arduino ZigBeeFate comunicare un prototipo Arduino con un PC in modalità wireless pag. 72

aCCaDEMia DEl CoDiCEConcetti di baseOttimizzare la gestione dei file multipiattaforma in Python pag. 74

SqueakUn ambiente di sviluppo veramente diverso dal solito pag. 76

FortranUn linguaggio di programmazione storico,

re nel calcolo numerico: ecco come trarne il massimo per sfruttarne i pregi pag. 80

GenieUn modo veloce e facile per gestire le finestre GTK e i widget pag. 84

ScratchAdattate alle vostre esigenze il codice di un gioco arcade pag. 88

LinUx PRO 140 55

La vostra guida di riferimentoEsiste sempre qualcosa di nuovo da imparare in campo informatico, soprattutto in un mondo dinamico come quello di Linux e dell’Open Source. Ogni numero di Linux Pro presenta una corposa sezione dedicata a tutorial realizzati da esperti in moltissimi settori: programmazione, sicurezza,amministrazione di sistema,networking. Troverete informazioni utili sia che siate dei veterani di Linux sia degli utenti alle prime armi. Studieremo con cura anche le applicazioni più diffuse sia in ambito lavorativo che desktop. Il nostro scopo è quello di fornire in ogni numeroil giusto mix di argomenti, ma se avete suggerimenti su temi particolari che vorreste vedere trattati, scriveteci via e-mail all’indirizzo [email protected]

Si presenta spesso la necessità di riportare le linee di codice di un programma. Per favorirne la lettura evidenzieremo le singole linee in questo modo: begin mniWordWrap.Checked := notend Quando una riga di codice supera la lunghezza della colonna la riporteremo su più righe utilizzando la notazione seguente:printf(“Vi preghiamo di inserireuna password.“);

Comerappresentiamo Le Linee di CodiCe

LXP_140_55_introTutorial 55 27/03/14 18:15

Page 56: 04_aprile2014

Tutorial Xxxx

56 Linux pro 140

Nei manuali di cartografia si è soliti trovare due massime: “Mappate o sarete mappati” e “il primo che disegna la mappa controlla come gli altri vedono

in mondo”. Questi due principi sono alla base di questo articolo su OpenStreetMap (oSM, http://openstreetmap.org). Se siete interessati al mondo che vi circonda, queste pagine vi aiuteranno a diventare un editor delle mappe online che tutti possono modificare. potreste perfino convincere altri ad assistervi! Contribuire a oSM può essere divertente, e un eccellente e altruista servizio alla comunità.

Mappe con OpenStreetMap

Mapping Create le vostre mappe digitali e condividetele online

Scoprite con Linux pro come lavorare sulla cartografia libera più grande del mondo e utilizzarla come base per le vostre mappe

Tutte le mappe digitali come oSM sono composte da livelli (layer) separati. in generale, è presente un livello per ogni tipo di dato. un livello potrebbe essere composto da forme e posizioni di tutte e solo le case costruite tra gli anni 1990 e 2000; un altro potrebbe contenere i percorsi di tutti i fiumi d’italia. i Map editor possono modificare un livello alla volta, mentre i software di rendering della mappa si occuperanno della visualizzazione d’insieme. Quello che rende speciale oSM è la possibilità, sia tecnica sia legale, di editare non solo il database grezzo (chiamato OSM Data Layer) ma anche di riutilizzare e combinare i dati con altri livelli molto semplicemente. per facilitare tutto questo, vedremo le principali funzioni di alcuni popolari editor oSM e come raccogliere dati sul campo in modo facile ma efficace. infine, vi mostreremo come creare, partendo da oSM, mappe personalizzate che possono addirittura essere incluse nel vostro sito.

Il ciclo di editing di OSMQualsiasi sia l’editor che andrete a utilizzare, la contribuzione a oSM include sempre i seguenti passi di base: Caricare da un file oSM locale – o direttamente dal sito –

la parte di mappa sulla quale lavorare. Modificarla utilizzando una qualsiasi combinazione

di fotografie aeree, dati e della vostra memoria. Caricarla e fondere le modifiche nel database oSM

principale per mostrare il vostro lavoro al mondo. per fare questo, o per creare mappe incorporabili, dovrete registrarvi sul sito Web di oSM. il modo più semplice e veloce per diventare un contributor di oSM è quello di utilizzare gli editor Web, come iD e Potlatch. Questi sono editor via browser che possono essere utilizzati dopo il login nel sito di oSM e il click sul pulsante Edit in alto. La figura 1 mostra una parte dell’interfaccia di iD: sono presenti pulsanti per aggiungere punti, linee e aree, tool per modificare elementi e moduli preesistenti dove inserire tutti i possibili tag. potrete inoltre recuperare un feed rSS con le modifiche di una certa area. L’editor Java open Source, chiamato JOSM (http://josm.openstreetmap.de), è disponibile come pacchetto binario nella maggior parte delle distribuzioni Linux e segue lo stesso flusso di regole di base, pur includendo molte altre funzioni. non fatevi spaventare dall’interfaccia caotica di JoSM! per cominciare, non dovrete conoscere nulla: bastano le solite semplici operazioni. per spostarvi sulla mappa, trascinate il cursore premendo il tasto destro, ed è possibile zoomare con la rotellina del mouse o con i tasti + e -. i pulsanti (in figura 2) sono divisi in due gruppi principali: in alto troviamo le operazioni principali come Select, Delete e Draw; in basso invece troviamo pulsanti che aprono pannelli per accedere ad altre informazioni, eseguire filtri sui dati o clonare gli stessi. Sulla destra della mappa trovate dei pannelli con informazioni sugli oggetti sui quale state lavorando. È inoltre presente un pannello per riordinare i layer o nasconderli temporaneamente,

Fig 1 Potrete cominciare a migliorare OSM non appena registrati, con l’editor Web iD

FacIlE

LXP_140_56_59_LXF180.tut_map 56 27/03/14 11:33

Page 57: 04_aprile2014

Tutorial Xxxx

Linux pro 140 57

OpenStreetMap Tutorial

e un altro per visualizzare tutti i tag di un oggetto, che consente inoltre di modificarli o aggiungerne di nuovi. Ancora più importante è il pannello Selection, che contiene esattamente la selezione presente in un certo momento, ad esempio una strada intera o anche uno solo dei suoi punti. un pulsante ulteriore dello stesso pannello apre l’interfaccia di ricerca di JoSM, per farvi lavorare con molti criteri diversi. nel caso scriviate highway=* type:way, per esempio, vi verranno restituite tutte le strade nell’area scaricata per l’editing.

Scaricare i dati OSMnaturalmente, non potrete editare una mappa se non l’avete prima scaricata. in pratica, dovrete scaricare la sola parte di oSM che volete modificare. Ci sono diversi modi per farlo, dopo aver cliccato su File D Download from OSM. potete inserire il nome di un posto (per esempio Colosseo), le coordinate geografiche di un rettangolo, o ricercare per tile, cioè per i piccoli quadrati che costituiscono un layer a un certo livello di zoom. La modalità più semplice, tuttavia, è la mappa Slippy: trovate l’area che vi serve nell’anteprima e selezionatela trascinando con il pulsante sinistro del mouse (non scegliete un’area troppo grande o i server di oSM rifiuteranno la vostra richiesta). potete anche creare dei segnalibri per le parti della mappa che editate regolarmente.A questo punto potreste cominciare a lavorare, o salvare quanto scaricato per modificarlo in un secondo momento (magari disconnessi), semplicemente impostando il dato come layer attivo e cliccando poi File D Save. in ogni caso, la parte di mappa oltre l’area selezionata sarà grigia, per ricordarvi che non dovete editarla (almeno non nella sessione corrente). nel caso vogliate utilizzare foto aeree come riferimento, sceglietele e scaricatele dal menu Imagery. La prima scelta sono le immagini satellitari di Bing, messe a disposizione da Microsoft. Le due operazioni che svolgerete più frequentemente da editor oSM sono selezione e disegno. Selezionare gli oggetti è necessario per spostarli o cancellarli, o per meglio definire cosa sono. per selezionare qualcosa, premete il pulsante Select e cliccate sull’oggetto con il tasto sinistro del mouse. Questa azione caricherà tutti i tag dell’oggetto nel pannello Properties. potrete aggiungere, modificare e cancellare i tag sia da qui che dal menu Preset di JoSM. prima di cambiare una qualsiasi cosa, tuttavia, assicuratevi di aver selezionato l’elemento corretto. un errore comune dei principianti di JoSM è l’applicazione di alcune azioni a una strada intera invece di un singolo punto, o viceversa, dato che è facile pensare di aver selezionato l’uno al posto dell’altro. prima di disegnare, assicuratevi di non aver selezionato nient’altro e cliccate lo strumento Draw. per cominciare il disegno di una linea, fate doppio click dove dovrebbe iniziare e cliccate una volta

per ogni punto che definirà la linea. Fate doppio click per selezionare il punto di fine. una volta terminato l’editing, cliccate File D Upload Data per inserire il vostro lavoro nel database principale di oSM, ricordandovi di aggiungere una descrizione per le vostre modifiche nel modulo di caricamento.

catturare il mondo e inserirlo in OpenStreetMapCorreggere gli errori o aggiungere oggetti a oSM utilizzando le fotografie satellitari come riferimento è fantastico. in alcune aree, tuttavia, esistono alcune limitazioni che sono

TipLa regola d’oro di openStreetMap? non copiare da altre mappe e divertirsi!

Fig 2 JOSM è più complesso di iD, tuttavia potrete fare molto con pochi pulsanti

Elementi di OSMSia l’intero data layer di oSM che le sezioni corrispondenti a singole città o paesi sono disponibili in svariati formati aperti. il più basilare, con estensione oSM, è una versione di xML. Esistono formati ibridi (pBF, o5M, ecc.) ottimizzati per le applicazioni streaming o aggiornamenti incrementali del database. indipendentemente dal formato, qualsiasi cosa che vedete in oSM è una combinazione di tipi diversi di elemento. punti singoli, come piazze o centri

cittadini, sono rappresentati da nodi. Liste ordinate di nodi, chiamate way, definiscono oggetti costituiti da linee o racchiusi da esse: da fiumi e strade a edifici o parchi nazionali. i collegamenti tra gli oggetti sono contenuti in strutture dati, chiamate relazioni: una relazione route collega tutti gli spezzoni della stessa strada. oltre alle relazioni, ogni singolo oggetto oSM può avere molti tag, ovvero coppie chiave valore di testo, che lo descrivono.

LXP_140_56_59_LXF180.tut_map 57 27/03/14 11:33

Page 58: 04_aprile2014

58 Linux pro 140

Tutorial OpenStreetMap

difficili, se non impossibili, da ignorare. Le fotografie, per esempio, non sono disponibili con la stessa risoluzione in tutti i luoghi, e, infine, non sono probabilmente aggiornate come le vostre immagini. il modo per risolvere queste problematiche è di ottenere i dati grezzi per conto proprio, direttamente sul campo. Questa potrebbe essere l’attività più importante (e divertente) da fare con oSM, per il beneficio di tutti. Sono disponibili due metodi per rilevare oSM, che sono entrambi molto più accurati e produttivi di un qualsiasi mapping con il solo computer. uno coinvolge i navigatori GpS, l’altro richiede la fidata penna, un po’ di carta e i vostri piedi! Entrambi i metodi sono perfetti per il lavoro collaborativo; non c’è motivo per cui la persona che fornisce le mappe o le misure GpS debba essere la stessa che aggiungerà gli oggetti a oSM. Chiedere agli amici e ai parenti che adorano le scampagnate, per esempio, potrebbe essere una grande fonte di dati oSM.

OSM incontra il GPSTutti i dispositivi con GpS, dagli smartphone ai sistemi di navigazione per auto, possono memorizzare i dati relativi alla latitudine e alla longitudine per la posizione corrente. La coppia di numeri e il timestamp associato costituiscono un waypoint GpS. Questi device possono memorizzare l’intero percorso, ovvero una serie di waypoint catturati a intervalli regolari durante gli spostamenti. Salvare questi file sul computer è molto semplice, nonostante i dettagli dipendano dall’esatta combinazione di dispositivo GpS e distribuzione Linux. ora, pensandoci un attimo, vi accorgerete che i waypoint GpS e i file di dati non sono altro che i nodi e le vie di oSM. non sarebbe fantastico se si potesse dire a un editor oSM di caricarle e visualizzarle sotto i layer di oSM, nella corretta posizione? Se fosse

possibile, dovreste semplicemente fare doppio click su ognuno dei waypoint GpS per creare il nodo oSM corrispondente, giusto? naturalmente la risposta è sì e, ovviamente, è già possibile e semplice farlo. in JoSM, per esempio, cliccate File D Open, selezionate il file traccia per aggiungere un nuovo livello GpS non editabile. Molto più accurato e aggiornato di una qualsiasi foto aerea.

Nessun GPS? Nessun problema!in generale, niente impedisce la stampa di una parte di oSM, la visita dell’area corrispondente e il disegno, direttamente su carta, delle differenze o delle parti mancanti. L’ovvio svantaggio è che, a differenza dei dati GpS, questa operazione non produce dati digitali che un editor oSM possa caricare e posizionare con sufficiente precisione...Questo a meno che non si stia disegnando su una stampa da http://fieldpapers.org! Questo servizio Web produce versioni pDF delle aree di oSM con un codice Qr incluso, progettate per il disegno manuale. Grazie al codice, nel caso si disegni a mano sulla carta, è possibile scannerizzare e caricare l’intero foglio su fieldpapers.org. il servizio sarà in grado di fare due cose: riconoscere esattamente di quale parte di oSM si tratti e convertire il tutto in un formato usabile come layer di sfondo, esattamente come le foto satellitari o le tracce GpS. La procedura per generare una carta da campo è molto semplice, e molto simile a quanto visto per le ‘slippy map’ dentro JoSM: zoomate e scorrete la mappa fino a raggiungere l’area di interesse per poi selezionarne i confini con il mouse. potete, inoltre, decidere lo stile dello sfondo, il titolo e se aggiungere o meno le griglie. L’unica parte del processo che richiede un po’ di pratica è capire l’esatta estensione e la scala dell’area oSM da stampare. una mappa troppo grande comporta uno spreco di carta, ma una scala troppo piccola non vi consentirà di disegnare con precisione sufficiente.una carta da campo con bordi predefiniti e tutte le altre opzioni menzionate viene chiamata atlante (atlas) e, oltre al pDF, può essere scaricato in molti formati grezzi. una volta stampato l’atlas, andate a fare una passeggiata nell’area corrispondente e disegnateci sopra, con la maggiore accuratezza possibile, quello che vedete. poi, una volta tornati a casa, scansionate il tutto con una risoluzione

Fig 3 I pannelli alla destra di JOSM mantengono una serie di dati sull’oggetto correntemente selezionato

Fig 4 Grazie ai QR, gli editor di OSM riconoscono immediatamente le mappe su carta di Field Papers e li caricano nella giusta posizione in OpenStreetMap

Tipil numero di dati oSM ottenibili da amici e parenti è limitato solo da quanto vi vogliono bene e sono disposti ad aiutarvi!

LXP_140_56_59_LXF180.tut_map 58 27/03/14 11:33

Page 59: 04_aprile2014

Linux pro 140 59

OpenStreetMap Tutorial

Fig 5 Scoprite in queste pagine come includere OSM, utilizzando il servizio Umap, direttamente nel vostro sito

di almeno 200 dpi e salvatelo in formato JpG, pnG, TiF o GiF (non pDF!); otterrete una versione pronta da caricare su fieldpapers.org, perciò caricatela e segnatevi l’urL e il numero iD associato dal server. potete mantenere il vostro lavoro privato, dichiararlo come pubblico o condividerlo solo con determinate persone, inviando l’urL univoco generato da fieldpapers.org per ognuno degli snapshot. una volta fatto, potete caricare gli snapshot di Field paper direttamente nell’editor online di oSM, come iD, cliccando sul link corrispondente in alto. per caricarli in JoSM, invece, dovrete utilizzare un plug-in. in JoSM cliccate su Edit D Preferences, aprite la scheda Plugins e selezionate Field Papers (non Walking papers, un servizio simile ma apparentemente chiuso). Cliccate OK e riavviate il programma, che ora dovrebbe avere una nuova voce Field Papers nel menu in alto. per utilizzare uno snapshot, cliccate e inserite l’urL completo, come trovato su fieldpapers.org, nel box a pop-up. Successivamente dovrete caricare la parte del data layer di oSM corrispondente. nessun problema: cliccate ancora su File D Download from OSM D Slippy Map per trovare la sezione oSM corrispondente allo snapshot già selezionato. Fantastico, vero?

come inserire le mappe nel vostro sitoFinora, avete scoperto come contribuire a oSM con molti tipi di input diversi. una volta innamorati di oSM, tuttavia, prima o poi lo vorrete utilizzare come base per le vostre mappe personalizzate, possibilmente per includerle nel vostro sito. Esistono molti modi per fare ciò, tuttavia i più semplici sono MapBox (www.mapbox.com) e umap (http://umap.openstreetmap.fr/en). Entrambi i servizi rendono semplice la creazione di layer

da visualizzare utilizzando oSM. MapBox offre inoltre piani commerciali, con diversi livelli di spazio di storage e visualizzazioni della mappa. Vi concentrerete tuttavia su umap, data la sua natura open

Source e la vasta disponibilità di operazioni possibili sui dati, nonostante MapBox funzioni in modo molto simile. per usare umap, dovrete essere già registrati a oSM.

L’editor online umap funziona in modo analogo a una versione semplificata di iD. L’unica differenza è che vi permette di modificare solamente i vostri livelli aggiuntivi e non quelli di oSM. i comandi sono molto semplici, perciò date uno sguardo alla figura 5 mentre scoprite di seguito le funzionalità principali.potete selezionare lo stile di oSM, invitare altri a lavorare sulla mappa, caricare o scaricare i vostri layer in formato GeoJSon, condividere l’intera mappa via urL diretto o includerla in una qualsiasi pagina Web. Le ultime tre operazioni sono disponibili attraverso il pulsante Embed and share this map sulla sinistra della finestra di umap. Se volete il codice per l’inclusione, cliccate il pulsante e copiate il codice iframe dal campo Embed the map, per incollarlo

Tippiù che grandi abilità da hacker, per essere un ottimo contributore oSM servono grande pazienza e disciplina.

letture interessantiper scoprire di più su JoSM rispetto a quanto scritto in queste pagine, scaricate il manuale pDF di Mapkirbera.org (http://bit.ly/1himahB). Se avete superato la conoscenza di base di oSM, puntate il vostro browser sul sito http://learnosm.org.

Molto importanti, per capire il ricco sistema di tagging di oSM, sono inoltre la pagine Map Features e Taginfo agli indirizzi http://wiki.openstreetmap.org/wiki/Map_Features e http://taginfo.openstreetmap.org.

nel codice sorgente del vostro sito. Si noti, tuttavia, che sistemi CMS come Drupal o Wordpress rimuovono il codice HTML grezzo per motivi di sicurezza. Dovrete installare un plug-in per il supporto agli iframe e far funzionare gli embed.

consigli e buon sensoA questo punto, dovrebbe essere chiaro che, più che grandi abilità

da hacker, per essere un ottimo contributore oSM servono

grande pazienza e disciplina.

per prima cosa, dovrete sempre fornire buoni metadati:

utilizzate i tag il più possibile e aggiungete sempre una descrizione

dettagliata delle modifiche durante il loro caricamento.

Secondo, non siate creativi: studiate e seguite le convenzioni

stabilite per il naming e il tagging.

Terzo, partite in piccolo, con una o due piccole modifiche

alla volta, e solo quando siete sicuri che oSM debba essere

modificato in quel modo. Successivamente, tornate a controllare

se editor più esperti hanno rimosso o modificato le vostre

modifiche.

un’altra buona abitudine è quella di lavorare con sessioni brevi,

caricando le modifiche non appena completate. Questo vi

garantirà di lavorare sempre sulla versione più aggiornata di oSM.

Minimizzerà inoltre le possibilità che altre persone stiano

modificando la stessa area, evitando conflitti e perdite di dati.

ultimo ma non meno importante, ricordatevi la regola d’oro

di openStreetMap: non copiate da altre mappe. lXP

LXP_140_56_59_LXF180.tut_map 59 27/03/14 11:33

Page 60: 04_aprile2014

Tutorial Xxxx

60 Linux pro 140

Da sempre si discute se sia il caso o meno di ospitare in casa il proprio sito Web. Eppure non c’è modo migliore per provare le vostre capacità

di amministratori di sistema. potete creare un’infrastruttura in grado di fornire delle pagine Web sul pC che usate quotidianamente o, meglio ancora, in uno che giace di solito abbandonato. iniziate con il controllare che il computer che volete usare abbia un indirizzo ip statico. il modo più semplice per farlo è dire al vostro router di riservare un ip a quel server. Come farlo dipende dall’interfaccia del router usato, però in generale il router identifica il server in base al MAC Address della sua scheda di rete. per scoprirlo controllate l’output del comando ifconfig che mostra le schede di rete presenti e il loro indirizzo MAC. L’interfaccia Ethernet attiva avrà un ip fornito dal DHCp. Sul nostro server ifconfig mostra che l’interfaccia attiva è la eth1 e il suo MAC Address è ac:81:12:64:e9:3e. inoltre il suo indirizzo ip è 192.168.178.80, che abbiamo poi impostato come statico nel router.

L’infrastrutturaora è il momento di capire quali componenti servono per creare un server Web. inizierete installando Apache, il più

Il Web dentro la RP

Server Web Crea un sito Wordpress con Apache e raspberry pi

Linux pro vi guida nella creazione di un sito Web basato su Wordpress e Apache, il tutto installabile anche su raspberry pi

InTeRmeDIo

famoso dei server Web. Aprite un terminale e digitate sudo apt-get install apache2, comando che recupera e installa il server e le varie dipendenze. A questo punto avete tutto ciò che vi serve per ospitare un sito semplice. Avviate un browser in qualunque pC della vostra rete e scrivete l’ip statico del vostro server: otterrete la classica pagina “it works!”. però ipotizziamo che vogliate qualcosa di più, cioè un sito Web dinamico: per ottenerlo vi servono un database e un linguaggio di scripting. pHp è tuttora il linguaggio di scripting più utilizzato per questi compiti. Esso recupera le informazioni da un database e le scrive in una pagina Web. Alcuni dei più popolari CMS (Content Management System), come Wordpress, Joomla, Drupal e MediaWiki sono scritti in questo linguaggio. per installare pHp5 usate la seguente riga di comando:sudo apt-get install php5 libapache2-mod-php5

Subito dopo vi consigliamo di installare il pacchetto Alternative PHP Cache (ApC) che è un’estensione pHp progettata per migliorare le prestazioni delle applicazioni scritte in pHp. Sempre nel terminale, quindi, digitate sudo apt-get install php-apc, che installerà e imposterà l’estensione. per rendere tutto attivo dovete riavviare il server Web con sudo service apache2 restart. per controllare

Fatelo con Raspberry PiSe avete una raspberry pi potete seguire le istruzioni di questo articolo e trasformare il piccolo pC in un server Web. prima di iniziare assicuratevi di aver installato raspbian su una scheda SD. raspbian è una versione di Debian personalizzata per la rp. La prima cosa da fare dopo il boot è di avviare il tool di configurazione della distro con sudo raspi-config e modificare la quantità di memoria allocata. Di default la rp divide i 512 MB di rAM tra la Cpu ArM e la Gpu (la scheda video). Visto che si vuole usare la rp primariamente come server Web, conviene allocare il minimo della memoria alla Gpu, cioè 16 MB. poi dovreste abilitare il server SSH per accedere in remoto e in modo sicuro alla rp da un altro computer della vostra LAn. Dopo aver riavviato aggiornate la distro con sudo apt-get update seguito da sudo apt-get upgrade.

non dimenticate di cambiare la password di default dell’utente predefinito “pi”

LXP_140_60_63_LXF180.tut_web 60 27/03/14 18:30

Page 61: 04_aprile2014

Tutorial Xxxx

Linux pro 140 61

Server Web Tutorial

la cache pHp, per prima cosa copiate il file apc.php nella root del server Web, così:sudo cp /usr/share/doc/php-apc/apc.php /var/www

e poi osservatelo tramite un browser andando all’indirizzo http://localhost/apc.php. Questa pagina vi mostrerà informazioni su cosa si trova nella cache, lo stato dell’utilizzo della memoria e altro ancora. A questo punto è il momento di aggiungere un database al vostro server Web. il database open Source più famoso è MySQL e funziona con qualunque CMS si voglia usare. Tornate quindi a questo punto al terminale e scrivete la seguente riga:sudo apt-get install mysql-server mysql-client php5-mysql

Mentre si installa il pacchetto di MySQL server, il sistema vi chiede di impostare una password per l’utente root del database (che è diverso dall’utente root del sistema). per verificare la correttezza dell’installazione del database potete farvi login via terminale con mysql -u root -p. Vi verrà chiesta la password che avete stabilito prima e poi entrerete in MySQL monitor che ha mysql> come prompt. Digitate exit per tornare al terminale. Dopo che avete installato tutti i componenti vi conviene riavviare di nuovo Apache come fatto prima. una nota: di recente si sta facendo strada il database MariaDB come rimpiazzo per MySQL. Di solito tutte le applicazioni che funzionano con MySQL vanno anche con MariaDB. L’unico problema è che quest’ultimo DB non è disponibile nei repository di default di tutte le distro; se volete usarlo seguite le istruzioni che trovate all’urL https://downloads.mariadb.org/mariadb/repositories/.

Amministrare il databaseuno dei componenti con cui dovrete interagire di più è sicuramente il server del database. Dovrete impostare gli utenti che possono accedere al database, nonché creare database e le loro tabelle. il tool phpmyAdmin offre un’interfaccia Web che rende più semplice la gestione dei database MySQL/MariaDB. Vi consigliamo quindi di installarlo così:sudo apt-get install phpmyadmin

Vi verrà chiesto quale server Web associargli; selezionate apache2. Durante la configurazione di questo software vi verrà domandato di effettuare il collegamento a un database. Affinché il collegamento sia possibile dovrete inserire la password dell’amministratore del database che avete definito in precedenza. una volta autenticati, vi verrà chiesto di impostare la password per phpMyAdmin. Alla fine il sistema aggiungerà il file phpmyadmin.conf nella directory /etc/apache2/conf-enabled che punterà all’installazione di phpMyAdmin sotto user/share/

phpmyadmin. per usare questo tool puntate il browser all’indirizzo http://localhost/phpmyadmin. Effettuate il login con phpmyadmin come nome utente e con la password

creata prima. Se phpMyAdmin dà un errore in fondo alla pagina, seguite il link http://bit.ly/1f4mmSw per risolvere il problema. ora potete tranquillamente

scollegare il monitor dal server. Fintanto che il pC sarà collegato alla vostra rete locale potrete effettuare un login remoto con SSH e copiare file via FTp. Seguite poi quanto

descritto nei box di questo articolo per arricchire il server Web con altri

componenti; installate anche Wordpress se volete mostrare al pubblico un sito

Web complesso.

1 ProFTPDQuesta applicazione vi aiuterà a trasferire file verso il server Web. per installarla fate il login sul server Web via SSH e digitate il comando sudo apt-get install proftpd. potete eseguire il server FTp in modalità inetd, soluzione ideale per un’installazione a basso traffico, o come server stand-alone. il server è controllato dal file di configurazione /etc/proftpd/proftpd.conf.

3 Webalizeril server Web Apache memorizza una marea di dati sul suo funzionamento, come la data e l’ora in cui è stata visitata una pagina Web, l’indirizzo ip di chi l’ha visitata e molto altro. Webalizer vi presenta tutte queste informazioni in modo ordinato, anche tramite pratici grafici. Lo potete installare con sudo apt-get install webalizer per poi generare i report con sudo webalizer.

2 WebminSe vi piace phpMyAdmin amerete Webmin. È un tool con interfaccia Web che vi consente di mettere le mani su vari aspetti del vostro server direttamente tramite una pagina HTML. potete aggiungere utenti al server, o modificare i suoi file di configurazione, o ancora cambiare i componenti installati. Seguite le istruzioni all’urL www.webmin.com/deb.html per installare Webmin.

Installare componenti aggiuntivi

LXP_140_60_63_LXF180.tut_web 61 27/03/14 18:30

Page 62: 04_aprile2014

62 Linux pro 140

Tutorial Server Web

5 L’installazione vera e propriaCon questo file di configurazione al suo posto, non rimane altro che caricare l’installer di Wp puntando il browser all’urL http://localhost/wp-admin/install.php. il sistema vi chiederà alcuni dettagli sul vostro CMS, come nome e credenziali di amministrazione, oltre alla vostra email. premete il pulsante Installa WordPress quando avete fatto.

6 Gestione via dashboard Questo è tutto ciò che vi serve per installare Wordpress. L’installer del CMS si connetterà al server del database e userà le informazioni fornite durante il setup per creare le tabelle necessarie all’interno del database wordpress. Subito dopo verrete portati alla pagina di login: una volta autenticati vi ritroverete davanti la dashboard (o bacheca) che vi consente di gestire ogni aspetto del CMS così da iniziare a creare il vostro sito Web.

1 Scaricate WordPress il primo passo consiste nel recuperare e installare Wordpress. Fate il login nel vostro server Web ed entrate nella sua directory root (cd /var/www). ora scaricate l’ultima release di Wordpress in italiano con sudo wget http://it.wordpress.org/wordpress-3.8.1-it_IT.tar.gz (il numero di versione può cambiare) e decomprimetela con sudo tar zxvf wordpress-3.8.1-it_IT.tar.gz, che crea una cartella chiamata wordpress.

Passo passo Installate WordPress sul vostro server

2 Create un databaseora entrate in phpMyAdmin e passate nel tab Privilegi. Selezionate Aggiungi un nuovo utente per aggiungere un nuovo utente. inserite il suo nome e la password nei relativi box di testo. Attivate anche l’opzione per la creazione di un database con lo stesso nome dell’utente, per esempio wordpress o blog. infine, selezionate l’opzione Seleziona tutti sotto Privilegi globali e poi premete Crea utente.

3 La configurazioneper indicare a Wordpress quale database usare, aprite un’altra finestra del browser e caricate la pagina di configurazione del CMS, che si trova all’interno della cartella di Wordpress e a cui arrivate usando l’urL http://localhost/wordpress/wp-admin/setup-config.php. Qui indicate il nome dell’archivio creato al passo precedente assieme alle credenziali amministrative di MySQL.

4 Impostazioni manuali Alla fine del passo precedente viene creato il file wp-config.php all’interno della cartella di Wordpress. Se qualcosa dovesse impedire la creazione di questo file, dovreste procedere scrivendolo voi stessi. La procedura di setup di Wordpress stampa a schermo il contenuto del file che potete copiare e incollare in un file di testo, che chiamerete wp-config.php, creato con il vostro editor di testo preferito.

LXP_140_60_63_LXF180.tut_web 62 27/03/14 18:30

Page 63: 04_aprile2014

Linux pro 140 63

Server Web Tutorial

1 RegistrazioneCome prima cosa create un account presso un servizio di DnS dinamico, come http://noip.com, per associare un nome di dominio al vostro sito locale e tenere traccia dei cambiamenti di ip nel DnS. Dovete scegliere uno dei domini disponibili e creare un account. Servizi differenti offrono nomi di dominio diversi, a volte a pagamento, ma molti hanno anche un’offerta gratuita, come http://miosito.no-ip.biz.

Passo passo Accesso via Web al vostro server

2 Impostare il routerDopo aver attivato il vostro account, entrate nelle pagine di configurazione del router ADSL e andate nella sezione relativa al DnS dinamico. La posizione di questa pagina dipende dal router che usate. Selezionate il servizio di DDnS che avete scelto e inserite le credenziali d’accesso e il nome di dominio che avete registrato. Salvate la configurazione e d’ora in poi il router si collegherà al vostro servizio di DDnS automaticamente.

3 Aprire le portepoi dovete fare il forward delle porte per consentire al router di far passare il traffico Web entrante attraverso il firewall. Come il passo precedente, anche questo si fa in modo diverso da router a router. provate a dare un’occhiata alla guida http://portforward.com per conoscere i passi esatti per il vostro device. Di fondo dovete indicare il numero di porta del traffico che volete far passare (80) e l’ip del server locale che ospita il server Web.

4 Avvertire Apacheil passo finale consiste nel modificare la configurazione di Apache sotto la directory sites-enabled: create una voce ServerAlias nella configurazione di default <VirtualHost *.80>, per esempio ServerAlias ninjak.no-ip.biz. A questo punto riavviate Apache e il vostro sito Web locale sarà accessibile anche attraverso internet. LXP

ABC di Apacheun server Web è un software molto complesso. non dovete sottostimarlo perché si installa con un semplice comando. in ubuntu, Apache si installa sotto /etc/apache2. All’interno di questo folder trovate il file apache2.conf che è il file di configurazione principale. Al suo avvio il server legge questo file. inoltre viene letto anche il file ports.conf che indica le porte da controllare per le connessioni in ingresso. Ci sono anche altre directory, come conf-enabled, mods-enabled e sites-enabled che ospitano le configurazioni per la gestione dei moduli e di altri elementi usati da componenti addizionali, come phpMyAdmin. Se dovete configurare il server Web, il modo migliore è quello di aggiungere

una voce in un file nella directory appropriata piuttosto che modificare direttamente apache2.conf. per esempio, se incappate in un errore relativo al FQDn (fully qualified domain name) all’avvio del server, potete risolverlo impostando il parametro Servername. il comandoecho “Servername localhost” | sudo tee /etc/

apache2/conf-enabled/servername.confcreerà il file servername.conf dentro la cartella conf-enabled così da assegnare la corretta identità al server. il folder sites-enabled è collegato alla capacità di Apache di ospitare siti multipli in una singola installazione. Questa funzionalità è nota come VirtualHost. Di default l’installazione ospita solo il sito chiamato default, che è quello che

Potete estendere Apache recuperando dei moduli da http://modules.apache.org

vedete digitando http://localhost. potete abilitare elementi della configurazione e moduli con i comandi a2enconf e a2enmod.

LXP_140_60_63_LXF180.tut_web 63 27/03/14 18:30

Page 64: 04_aprile2014

Tutorial Xxxx

64 Linux pro 140

Rinchiuso nella sua fortezza, l’amministratore di sistema vede tutto. il suo sguardo attraversa le diverse distro, i differenti dispositivi, i dischi e le applicazioni. Voi, fedeli lettori, sapete

di cosa parliamo: un grande occhio senza palpebre circondato dalle fiamme. Forse non proprio senza palpebre e circondato dalle fiamme, in fondo questo non è un romanzo! Zabbix è un’applicazione per il monitoraggio della rete che vi permette di tenere traccia di tutto quello che succede. non importa quanto sia grande la rete, non importa quale sistema operativo sia installato sulle macchine: Zabbix può tenere d’occhio ogni aspetto del loro funzionamento. Con Zabbix è possibile monitorare lo spazio libero su disco, il carico della Cpu, le statistiche sul

Il controllore della rete

Zabbix Tenete d’occhio quello che succede sulle vostre macchine

un’applicazione per il monitoraggio della LAn che controlla tutto. Davvero. Ci chiediamo se non si tratti dell’“occhio di Sauron” che ha preso vita…

traffico in rete, l’utilizzo della memoria, lo stato delle applicazioni, il checksum di un file e molte altre cose. Tutte le informazioni raccolte vengono conservate in un database, che può essere MySQL, Oracle o PostgreSQL, tutti supportati da Zabbix.

Surclassare i concorrentiperché dovremmo scegliere Zabbix quando tutti parlano di Cacti e Nagios? Questo programma, esattamente come i suoi più famosi concorrenti, è in grado di usare il Simple Network Management Protocol (SnMp). Quindi questi software sono capaci di monitorare pressoché tutti i dispositivi presenti in rete: router, stampanti, switch, modem, ecc. nagios, pur essendo lo standard industriale per il monitoraggio di macchine locali e remote, viene quasi sempre utilizzato insieme ad altri strumenti. Questo perché non è in grado di visualizzare i dati raccolti in una forma grafica di facile comprensione. Detto questo occorre aggiungere che nagios dispone però di un’eccellente sistema di allarmi, che permette all’amministratore di sistema di essere costantemente informato sullo stato dei dispositivi che sta monitorando. Cacti, al contrario, non ha un meccanismo per la segnalazione di allarmi, ma è in grado di creare grafici molto belli e dettagliati che rappresentano tutti i dati raccolti dai differenti dispositivi sulla rete. Lo strumento da noi scelto invece è molto abile sia nell’inviare allarmi che nel creare grafici. oltre a essere in grado di spedire allarmi via posta elettronica, SMS e Jabber, vi permette di definire azioni automatiche. Cioè potete configurare Zabbix in modo che intervenga esso stesso sulle macchine remote quando certi eventi predefiniti hanno luogo. in termini di grafica questo programma è in grado di produrre diagrammi in tempo reale degli oggetti monitorati e permette di creare grafici, mappe di rete, schermate e persino presentazioni, cosa che lo rende adatta all’impiego su reti complesse i cui amministratori preferiscano vedere rappresentazioni grafiche dei dati.

Comprendere Zabbixun’applicazione per il monitoraggio svolge principalmente due funzioni: raccogliere dati da tutti i dispositivi sulla rete e presentarli a un’autorità centrale di controllo. Zabbix si basa su due componenti chiave per queste funzioni: zabbix-server e zabbix-agent. Come suggerisce il nome, zabbix-agent va installato su tutte le macchine sulla rete che si ha intenzione di monitorare. L’agente è in grado di tenere sotto controllo risorse hardware e applicazioni e invia tutte le informazioni a uno zabbix-server. Attualmente zabbix-agent è disponibile per Linux, FreeBSD, openBSD, netBSD, Hp-ux, Mac oS x, Solaris e varie versioni di Windows. L’altra parte, zabbix-server, ha la responsabilità di richiedere e raccogliere i dati. in caso di problemi o di periodi di inattività il server invia notifiche agli account configurati. È richiesta l’installazione di una sola istanza di zabbix-server per ciascuna rete. Con Zabbix si ha a disposizione un’interfaccia Web centralizzata che può essere utilizzata per controllare gli eventi monitorati sulla rete. Dato l’ampio numero di funzionalità e a causa delle differenti aspettative degli utenti, l’interfaccia può

dIffICIle

Gli OK verdi indicano che la configurazione

di PHP è a posto e l’installazione può proseguire

LXP_140_64_67_tut_zab 64 27/03/14 18:26

Page 65: 04_aprile2014

Tutorial Xxxx

Linux pro 140 65

Zabbix Tutorial

a volte risultare complessa e oscura. nel caso abbiate qualche riserva iniziale vi invitiamo a perseverare nell’utilizzo di Zabbix per poterne apprezzare tutti i vantaggi.

Installazioneil progetto mette a disposizione binari per un certo numero di distribuzioni come Debian e CentoS; inoltre si può trovare Zabbix nei repository della maggior parte delle distribuzioni. Ma, come succede con molti strumenti di amministrazione, la versione presente nei repository non sempre è la più recente disponibile. noi abbiamo usato CentoS come base su cui installare zabbix-server. Alla rete sono collegate anche altre macchine con altri tipi di Linux, per esempio Linux Mint. Dovreste avere già installati sulla macchina tutti i pacchetti pHp e MySQL richiesti, ma se installate Zabbix su un sistema appena creato potrete sistemare tutte le dipendenze con i seguenti comandi:su -c “yum -y install mysql-server php-mysql php-gd”

il modo migliore per installarlo su CentoS consiste nell’utilizzare il repository EpEL, dato che i repository standard non offrono la versione più recente. Se non è già stato fatto, dovrete per prima cosa configurare il repository EpEL:su -c “yum -y localinstall http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm”su -c “yum -y install zabbix22-server-mysql zabbix22-web-mysql”

il primo dei due comandi qui sopra configura e abilita il repository. nel secondo invece specifichiamo i pacchetti che desideriamo installare, in questo caso Zabbix 2.2.x. Zabbix è in grado di utilizzare i database MySQL, PostgreSQL e Oracle per conservare i dati raccolti. La configurazione di default si aspetta che esista un database chiamato zabbix. il nome utente di default per questo database è zabbix e non è configurata alcuna password. potete modificare il file /etc/zabbix_server.conf se desiderate cambiare una di queste impostazioni. nel caso decidiate di modificare le credenziali di accesso al database, tenete i nuovi valori a portata di mano perché ne avremo bisogno tra poco quando creeremo il database per Zabbix. Bisogna dare i seguenti comandi dal terminale:mysql -uroot -e ‘create database zabbix’mysql -uroot -e “create user ‘zabbix’@’localhost’ identified by

‘Cambiami’”mysql -uroot -e “grant all on zabbix.* to ‘zabbix’@’localhost’”mysql -uroot -e “flush privileges”

Questi dovrebbero risultare abbastanza chiari. nel primo creiamo

il database e nel secondo creiamo l’utente (“Cambiami” è la relativa password). Assicuratevi di aver specificato correttamente nome utente e password (quella che avete definito nel file /etc/zabbix_server.conf). ora che abbiamo creato il database siamo pronti per popolarlo:mysql -uzabbix -p’Cambiami’ zabbix < /usr/share/zabbix-mysql/schema.sqlmysql -uzabbix -p’Cambiami’ zabbix < /usr/share/zabbix-mysql/images.sqlmysql -uzabbix -p’Cambiami’ zabbix < /usr/share/zabbix-mysql/data.sqlil componente server di Zabbix comprende tre parti distinte: zabbix-server, il database e il frontend grafico. noi abbiamo installato le prime due, ci rimane da installare il front-end a cui accederemo attraverso il browser Web.

Installiamo il front-endprima di procedere dobbiamo assicurarci che zabbix_server sia in esecuzione. il comandoservice zabbix-server start

lo farà partire nel caso non lo fosse. È ora possibile puntare il browser a http://localhost/zabbix; per iniziare il percorso guidato di installazione. Se per caso non riuscite a caricare la pagina, verificate che Apache sia in esecuzione dando il comandoapachectl restart

Cliccate sul pulsante Next in basso a destra per cominciare l’installazione. Zabbix vi segnalerà tutti gli errori che trova nel file

Il simbolo rosso nell’ultima colonna indica che il monitoraggio dell’host ha dei problemi: spostando su di esso il puntatore del mouse si possono vedere i dettagli

È possibile usare la barra in alto a destra per specificare l’intervallo di tempo visualizzato dal grafico

Quando qualcosa va stortoAnche se il progetto fornisce un’eccellente documentazione, se non avete mai lavorato con un’applicazione per il monitoraggio della rete come Zabbix ci sono un certo numero di cose che potrebbero andare storte. Ecco perché non dovreste installarlo su un server di produzione prima di averlo sperimentato per un po’ in un ambiente meno critico. non configurato a dovere, un supervisore di rete come Zabbix può consumare moltissime risorse. il database può mangiarsi una bella fetta di spazio su disco se non lo impostate in modo da cancellare i dati più vecchi. Ci sono

poi altre ragioni che potrebbero consigliarvi di stare alla larga da Zabbix. per esempio potreste scoprire che non è la soluzione ottimale per le vostre esigenze perché sproporzionato rispetto a quello che vi serve. La documentazione non fornisce nessuna istruzione per la disinstallazione di Zabbix, quindi che fare? Continuate a leggere, ovviamente! La soluzione più semplice è disabilitarlo. Ma prima andate su Configurazione D Host e disabilitate tutti gli host configurati. poi disinstallate zabbix-agent da tutte le macchine sulla rete e fermate zabbix-server.

TipVisto che tutti i dati sono registrati in un database, più memoria avete, più veloce sarà l’accesso al database.

LXP_140_64_67_tut_zab 65 27/03/14 18:26

Page 66: 04_aprile2014

66 Linux pro 140

Tutorial Zabbix

di configurazione di pHp, /etc/php.ini. Gli errori sono evidenziati in rosso: nella colonna Current value è riportato il valore attualmente presente nel file di configurazione, mentre nella colonna Required è indicato il valore che Zabbix si aspetta di trovare. non è possibile procedere con l’installazione finché tutti gli errori non sono stati corretti. Sfortunatamente bisogna modificare a mano il file ed eseguire le correzioni richieste. Con un pHp appena installato vanno modificati i valori di timezone, post_max_size, max_execution_size, e max_input_time. Dopo aver eseguito le modifiche salvate /etc/php.ini e poi date di nuovo il comando:apachectl restart

per fare in modo che Apache utilizzi le nuove impostazioni.Tornate ora al browser e cliccate sul pulsante Retry in basso nella pagina. Se tutto è a posto Zabbix stamperà un oK in verde e vi consentirà di proseguire con l’installazione. Fate click sul pulsante Next e inserite i dettagli del database creato prima: nome del database, nome utente e password. i successivi due passi del percorso guidato sono abbastanza banali. Vi verrà richiesto di inserire le informazioni relative al server (i valori di default vanno bene), poi verranno presentati tutti i parametri di configurazione inseriti in modo che possiate esaminarli ed eventualmente correggerli ritornando alle pagine precedenti: fatto questo il front-end risulterà installato. una volta cliccato il pulsante finish sarete ridiretti alla pagina di login del front-end. prima di eseguire il login occorre però modificare un attributo della configurazione di SELinux. per default, infatti, SELinux impedisce al server Apache di eseguire connessioni di rete, cosa che rende impossibile la connessione del front-end al server Zabbix in esecuzione sulla macchina. Questo comportamento è controllato dal parametro booleano httpd_can_network_connect. Basta quindi modificarlo con il seguente comando:setsebool -p httpd_can_network_connect on

e poi far ripartire ancora una volta Apache:apachectl restart

Questo completa l’installazione lato server di Zabbix. potete ora installare zabbix-agent su tutte le macchine della rete che intendete monitorare. Su CentoS il comando è:su -c “yum -y install zabbix22-agent”

A questo punto si può procedere con il login nel front-end: il nome utente di default è admin e la password zabbix. Appena eseguito il login vi conviene modificare la lingua dell’interfaccia: basta cliccare su Profile in alto a destra e scegliere l’italiano nel menu

a discesa dedicato alla lingua. Già che ci siete modificate anche la password di accesso. Fate poi click sul pulsante Save in basso per salvare le nuove impostazioni. il primo contatto con front-end può lasciare un po’ disorientati per via del grande numero di informazioni presentate all’utente. non preoccupatevi, tra breve vi illustreremo il significato dei vari menu e sarete in grado di prendere confidenza con l’interfaccia grafica e di apprezzare tutto quello che offre Zabbix. Si tratta di un progetto molto ampio e ricco di funzionalità e questo si riflette nell’interfaccia grafica. L’intera configurazione è suddivisa nelle cinque linguette della barra del menu principale, in alto nella pagina: Monitoraggio, inventario, report, Configurazione, Amministrazione. Spostando il puntatore del mouse su una di queste linguette compare il secondo livello di menu che mostra quello che ha da offrire la linguetta prescelta. per esempio spostando il puntatore del mouse su Monitoraggio il menu di secondo livello mostra Cruscotto, panoramica, Web, ultimi dati, Trigger, ecc. il menu di secondo livello è sostanzialmente un sottomenu che riflette le opzioni per la linguetta principale selezionata.

Monitorare ogni cosaAnche se procedere per tentativi ed errori è la tecnica più consolidata per padroneggiare praticamente qualsiasi campo dello scibile umano, con Zabbix le cose sono un po’ diverse. Certo, potreste provare a trovare quello che vi serve all’interno di linguette, menu, sottomenu, menu a discesa e tutto il resto, ma farete molto più in fretta se spenderete un po’ di tempo a leggere con attenzione il manuale (http://www.zabbix.com/documentation/2.2/manual). Qualsiasi entità che si trovi sulla rete che intendete monitorare, si tratti di una stampante, di uno switch di rete, di un file, di un router, di un server fisico o di una macchina virtuale, ecc. è identificato come un host. per iniziare il monitoraggio di qualcosa occorre per prima cosa creare un host. per farlo bisogna selezionare Configurazione D Host e cliccare sul pulsante Crea Host in alto a destra. Quando viene aggiunto un host occorre selezionare almeno un gruppo di host. Questo perché i permessi sono relativi ai gruppi e non ai singoli host. inserite gli altri dettagli, come l’indirizzo ip dell’host, e quando avete finito cliccate su Salva. per maggiori dettagli consultate http://www.zabbix.com/documentation/2.2/manual/config/hosts. L’host appena creato comparirà nella lista degli host configurati. Cliccate sul link presente nella colonna item della tabella alla riga corrispondente a quella del nuovo host. per ogni nuovo host che viene creato occorre anche definire gli item, cioè indicare quali dati specifici devono essere raccolti per quell’host. Sia che vogliate tenere sotto controllo il carico della Cpu della macchina oppure verificare l’utilizzo della memoria o raccogliere statistiche sul disco, dovrete descrivere gli item per ciascuna di queste attività. La parte più importante nella definizione di un item è la chiave, che viene usata per determinare esattamente quello che volete che sia monitorato da Zabbix. Cliccate il pulsante Seleziona posto accanto al campo Chiave e scegliete la chiave dalla lista. per esempio, se volete controllare l’utilizzo della Cpu, selezionate la chiave system.cpu.load. Tornate a Configurazione D Host. Se tutto ha funzionato a dovere dovreste vedere un simbolo verde nella colonna Disponibilità. Questo significa che l’host e i relativi item sono stati configurati correttamente. Se invece vedete un simbolo rosso, spostate il puntatore del mouse sopra di esso, in modo da scoprire di che errore si tratta. A seconda dell’errore dovrete poi modificare gli item o la configurazione dell’host. per maggiori dettagli fate riferimento a http://www.zabbix.com/documentation/2.2/manual/config/

Zabbix non ama gli utenti solitari: ogni utente deve appartenere ad almeno un gruppo di utenti

Tipi database sono il principale collo di bottiglia per Zabbix. Assicuratevi di aver ottimizzato il vostro database in modo da ottenere le migliori prestazioni possibili sul vostro sistema.

LXP_140_64_67_tut_zab 66 27/03/14 18:26

Page 67: 04_aprile2014

Linux pro 140 67

Zabbix Tutorial

items/item. L’installazione di Zabbix crea automaticamente un host nel gruppo dei server Zabbix con 63 item configurati. L’host non risulta però abilitato per default. potete abilitarlo e studiare gli item al suo interno per acquisire una migliore comprensione del funzionamento di Zabbix e del significato delle operazioni di configurazione di host e item. una volta creati host e item potete spostarvi in Monitoraggio D Ultimi dati per vedere le informazioni relative agli host configurati raccolte da Zabbix. Se usate l’host server di default di Zabbix potete vedere anche la rappresentazione grafica dei dati raccolti: basta cliccare sul link Grafico nell’ultima colonna a destra.

Triggerresta solo da creare un trigger per l’host appena configurato. un trigger permette di analizzare i dati raccolti e confrontarli con i valori accettabili. nel caso ci sia una discrepanza tra di essi Zabbix segnalerà un problema. È possibile utilizzare degli operatori, come maggiore di, minore di, diverso, ecc. per definire i trigger. Come per gli item, è possibile definire i trigger dalla pagina Configurazione D Host. Fatto questo non resta che configurare il sistema per inviare notifiche, nel caso in cui Zabbix scopra qualche problema nei dati raccolti. Questo viene fatto in due passaggi. per prima cosa occorre definire un tipo di supporto, cioè il meccanismo usato per inviare all’esterno le notifiche: SMS, Jabber, posta elettronica, ecc. può essere configurato nella pagina Amministrazione D Tipi di supporto. Bisogna poi definire un’azione sotto Configurazione D Azioni. per ciascuna azione va specificata la sorgente dell’evento, come un trigger, e l’operazione, che può essere l’invio di un messaggio per mezzo di un tipo di supporto configurato oppure l’esecuzione di un comando remoto. Quest’ultima opzione può essere usata per eseguire automaticamente sulla macchina remota comandi predefiniti nel caso in cui si verifichino certe condizioni. per esempio è possibile cancellare i file più vecchi e vuotare /tmp sulla macchina remota nel caso che lo spazio su disco si sia esaurito. Se volete tenere sotto controllo lo stesso insieme di parametri su tutte le macchine della vostra rete non ha molto senso ripetere ogni volta questi passaggi. Zabbix offre una soluzione molto più pratica: i template. potete pensarli come un insieme di entità predefinite, come item, trigger, azioni, ecc. che possono essere applicati a ogni nuovo host che create per risparmiare tempo. È anche possibile creare più account e gruppi di utenti e usare il sistema molto completo di permessi di Zabbix per restringere l’accesso alle funzioni amministrative o agli host monitorati. Gli utenti appartengono a due classi

differenti: quelli che sono in grado di controllare le funzioni del front-end e quelli che hanno solo accesso agli host monitorati all’interno dei gruppi di host. un utente può essere classificato come utente, Amministratore e Super Amministratore. Solo un Super Amministratore ha il controllo completo di ogni aspetto del sistema. per gli altri tipi di utente è invece possibile restringere le funzioni e i dispositivi a cui hanno accesso e che possono monitorare. per esempio, un utente di tipo Amministratore ha accesso ai menu Monitoraggio e Configurazione, ma non ha accesso a nessun gruppo di host configurato. È però possibile aggiungere i permessi necessari per abilitarne l’accesso. per creare un nuovo utente cliccate sulla linguetta Amministrazione nella prima barra di menu e poi su Utenti nella seconda: comparirà una pagina che elenca tutti i gruppi di utenti configurati. Selezionate Utenti nel menu a discesa in alto a destra e poi cliccate sul pulsante Crea. oltre ad avere un’interfaccia grafica piuttosto complicata, Zabbix non è nemmeno molto intuitivo. per esempio non è possibile assegnare dei permessi a un singolo utente, ma solo a un gruppo di utenti. per assegnare dei permessi particolari a un utente, bisogna prima creare un gruppo di utenti, aggiungere l’utente al gruppo e infine assegnare i permessi.

Questo è solo l’inizio...Forse potreste avere l’impressione che abbiamo dedicato poco spazio alla parte più importante del tutorial, cioè le istruzioni su come usare l’applicazione. Sfortunatamente, a causa dell’ampiezza del progetto, è stato impossibile entrare nei dettagli. È però disponibile della eccellente documentazione che illustra approfonditamente ciascun passo del processo. in più esiste una comunità di utenti molto attiva a cui potete rivolgervi nel caso incappiate in qualche problema. Zabbix è uno di quegli strumenti con cui bisogna spendere parecchio tempo prima di vedere qualche risultato. A chi è sufficientemente esperto di reti e sa quali parametri intende monitorare sembrerà abbastanza facile da usare, anche se non ha mai utilizzato un’applicazione di monitoraggio della rete. Molte delle critiche che vengono rivolte a Zabbix sono legate all’interfaccia Web e non alle funzionalità che mette a disposizione. Anche se a volte l’interfaccia non sembra molto intuitiva, gli sviluppatori meritano un encomio per aver fornito un eccellente meccanismo per il controllo di ogni aspetto di Zabbix. lXP

Il tipo di item permette di specificare quali dati verranno monitorati

Andate su Configurazione D Schermate se volete raggruppare informazioni provenienti da fonti diverse in un’unica schermata

LXP_140_64_67_tut_zab 67 27/03/14 18:26

Page 68: 04_aprile2014

Tutorial Xxxx

68 Linux pro 140

Da quando portiamo sempre con noi quelle piccole scatole che permettono di parlare e comunicare ovunque è scaturito un interesse molto concreto verso

l’etere, un termine arcaico, che richiama alla memoria dissertazioni sulla trama profonda dell’universo e teorie rivoluzionarie. Questi piccoli terminali mobili hanno alimentato un mercato con parecchi zeri, stimolando lo sviluppo di modi sempre più efficaci di sfruttare “l’aria”. D’altronde non

Le comunicazioni wireless

Arduino Comunicazioni senza fili grazie alle interfacce xBee e gli standard aperti

In questo tutorial vediamo come far comunicare un prototipo Arduino con un PC in modalità wireless a basso consumo

Modulo Digi XBee montato su shield XBee per Arduino

è possibile usare fili quando si è in movimento e non si possono quindi riciclare le tecnologie di networking impiegate con successo sui computer stanziali. Cio che risulta meno scontato e peculiare è la scelta del mercato di orientarsi verso l’etere anche nei riguardi di postazioni fisse o dei portatili appoggiati sulle scrivanie degli uffici. Tecnologie mobili per terminali ancorati! L’utenza ha evidentemente apprezzato l’etere al punto da cominciare a impiegarlo anche dove esiste un comodo e consolidato cablaggio di rete. un numero crescente di realtà professionali preferisce impiegare il wireless per i propri uffici, slegando i client, portatili o desktop che siano, dal cavo. L’integrazione elettronica e l’economia di scala ha permesso tutto questo, materializzando un presente dove la complessità dei chip wireless, costituita da milioni di transistor, risulta alla fine più economica delle ore di lavoro di un posatore di cavi professionale. non è solo una questione di efficienza industriale ma anche di miglioramenti nei protocolli, nei metodi di codifica e nelle modalità di impiegare la banda dello spettro dedicata alle comunicazioni wireless. il risultato di questo impegno è stato un incremento di velocità di comunicazione, una riduzione della latenza e l’incremento dell’affidabilità generale della tecnologia. oggi esiste parecchia scelta per le comunicazioni senza fili tra piccoli dispositivi. il nome più famoso è Bluetooth ma vi sono anche altre tecnologie interessanti, magari meno note al pubblico

Silvio Umberto Zanzi [email protected]

L’autore

DIffICILe

Dettaglio della “pila” di schede di prototipazione

LXP_140_68_73_tut_arduino 68 27/03/14 11:34

Page 69: 04_aprile2014

Tutorial Xxxx

Linux pro 140 69

Arduino Tutorial

ma che hanno un grande ruolo nel nuovo mondo di oggi così interessato a connettere a internet le “cose”. Visto il successo con cui si sono connesse le persone perché non replicare l’impresa sugli oggetti di ogni tipo? Questa ambizione richiede chip con costi molto bassi, capaci di funzionare consumando poca energia e operanti nella banda libera a microonde basata sui 2.4 GHz. uno di questi protocolli è ZigBee e il suo utilizzo è di grande interesse anche per i maker e per tutto il movimento che utilizza Arduino per le applicazioni di automazione. Wi-Fi e Bluetooth sono certamente possibili sulla piattaforma libera ed esistono a tal proposito molte schede mature, economiche e ben documentate. non si tratta però di soluzioni a basso assorbimento elettrico, fondamentali in progetti amatoriali dove la dotazione energetica è ridotta e certamente non efficace come nei dispositivi industriali avanzati a cui si è abituati. una soluzione a basso consumo come ZigBee è quindi di grande interesse e permette applicazioni hobbistiche ampie.

Lo standard ZigBee in breveZigBee si basa sugli standard iEEE 802.15.4. Quest’ultimo definisce le modalità per le comunicazioni senza fili a bassa velocità tra dispositivi a limitato consumo elettrico. Lo standard iEEE 802.15.4 permette la costruzione di una personal Area network (pAn) caratterizzata da un identificatore comune a tutti i membri della rete personale. All’interno della pAn è possibile comunicare direttamente ai singoli terminali oppure in modalità broadcast a tutti i membri presenti in un dato istante. non è necessario avere un nodo centrale e in tal caso tutti i membri della pAn hanno un ruolo paritetico. La potenza di trasmissione dei singoli nodi è limitato per scelta progettuale dello standard come pure si è optato per una bassa velocità di comunicazione, più precisamente 250 Kbit/s su un raggio utile di dieci metri. Questi valori non sono indicati per applicazioni video ma è perfetta per la comunicazione di stato tra dispositivi, l’invio di comandi e la lettura di valori acquisiti dai sensori, tutte applicazioni che si realizzano con poca difficoltà con Arduino. Si pensi per esempio a un termometro che invia la lettura locale a seguito di un comando ricevuto via wireless. Con il termine ZigBee si intende una serie di specifiche che estendono iEEE 802.15.4 attraverso strati software superiori. Viene per esempio implementato un meccanismo di cifratura dei dati, garantendo un certo livello di integrità delle comunicazioni. Eventuali utenti malintenzionati avranno perciò difficoltà a impossessarsi dei prototipi Arduino che utilizzano ZigBee. una caratteristica molto interessante di ZigBee è la possibilità di raggiungere nodi oltre il campo trasmissivo utile sfruttando altri nodi intermedi. Si costituisce così una rete di tipo mesh in grado di raggiungere ampie distanze impiegando basse potenze di trasmissione e perciò un consumo elettrico estremamente ridotto. Le informazioni vengono in questa modalità inoltrate da nodo a nodo fino al destinatario. L’hardware iEEE 802.15.4 o ZigBee è composto da un chip dedicato e da un’antenna idonea. il pilotaggio del chip avviene tramite un microcontrollore, in questo caso una scheda Arduino.

Schede commercialiÈ possibile implementare un meccanismo di comunicazione su un prototipo Arduino in modo molto veloce. il produttore Digi international inc (http://www.digi.com) fornisce

schede dotate di chip, elettronica di “contorno” e antenna di comunicazione tutto in uno stesso package di dimensioni estremamente ridotte. Queste schede, denominate xBee (http://www.digi.com/xbee), possono essere montate su uno shield Arduino realizzato per impieghi ZigBee e poi abbinato a una normale scheda Arduino uno. L’aggancio avviene attraverso il pettine della scheda e la relativa morsettiera sullo Shield. Queste schede sono facilmente disponibili nei negozi online dedicati ai maker e i costi sono molto accessibili, intorno ai trenta Euro ivati. il wireless shield costa invece intorno ai diciotto Euro. La scheda acquisisce l’alimentazione da Arduino. È necessario prestare molta attenzione a questo aspetto. La scheda xBee sopporta infatti un voltaggio massimo di 3.3V, tensioni superiori la danneggerebbero rendendola inutilizzabile. utilizzando il wireless shield xBee non ci sono problemi in quanto utilizza il pin corretto di alimentazione di Arduino. Se si utilizzano altre modalità di collegamento è importante sincerarsi di non usare il segnale a 5V. Digi fornisce diverse

Lo shield montato sul pettine di Arduino Uno

Moduli Digi XBee

LXP_140_68_73_tut_arduino 69 27/03/14 11:34

Page 70: 04_aprile2014

70 Linux pro 140

Tutorial Arduino

tipologie di schede. una categoria di schede rispetta lo standard iEEE 802.15.4 mentre una seconda categoria implementa le specifiche ZigBee. La pagina ufficiale per le schede 802.15.4 di Digi è disponibile all’indirizzo http://bit.ly/ONiiUm. Le schede basate di 802.15.4 risultano più facili da utilizzarsi e possono essere un buon modo per muovere i primi passi con queste tecnologie e imparare la programmazione. in seguito sarà semplice passare alle schede ZigBee e sfruttarne le caratteristiche evolute. La differenza più vistosa tra le due famiglie è la presenza della modalità “mesh” e la cifratura delle comunicazioni. Digi fornisce anche schede con firmware proprietario dotati dei vantaggi delle due famiglie sopra esposte. Si tratta naturalmente di una soluzione non standard. A prescindere dal protocollo che si intende impiegare per la propria applicazione si deve scegliere correttamente il modello di scheda da impiegarsi. Digi dispone infatti nel proprio catalogo di schede con differenti implementazioni dell’antenna per le comunicazioni. Vi sono versioni con antenne integrate “piatte” e versioni con antenne a stick di piccole dimensioni. È possibile usare anche versioni dotate di connettore coassiale con la possibilità di collegamento a un’antenna esterna per una irradiazione migliore. i modelli sono anche distinti dalla potenza di trasmissione che sono in grado di erogare. Maggiore è la potenza e maggiore sarà la copertura di segnale ma di conseguenza anche l’assorbimento elettrico e la durata della batteria. per questo articolo abbiamo deciso di impiegare il modello ad antenna integrata “piatta” da montarsi sul prototipo

Arduino. La comunicazione avverrà con un computer da cui impartire i comandi verso il prototipo e leggere l’output relativo. L’adattatore xBee sarà collegato al computer attraverso una piccola ed economica scheda di conversione uSB come la xBee Explorer (https://www.sparkfun.com/products/8687). Questa integra il pettine per la connessione del modulo xBee, un chip di controllo e una porta Mini uSB. il dialogo con il computer avviene in modalità seriale, certamente il modo più comodo e immediato per gestire la comunicazione. non serve quindi alcuna infrastruttura software particolare. Basta usare un normale terminale seriale se si intende eseguire una comunicazione interattiva. Se si vuole operare in maniera automatizzata si possono impiegare le numerose Api per gestire la comunicazione all’interno del codice.

Configurazione inizialeLa connettività seriale offerta dal xBee Explorer è fondamentale per la configurazione iniziale delle schede xBee. Queste sono già funzionanti ma sono ugualmente necessarie alcune operazioni preliminari prima di essere impiegate per il progetto. Si deve perciò collegare la prima scheda xBee all’adattore Explorer e poi collegare quest’ultimo al computer. occorre poi abilitare l’emulazione seriale sul proprio sistema e impostare la comunicazione a 9600 BpS 8n1 (8 bit, nessuna parità, 1 bit di stop). Bisogna anche abilitare l’eco locale sul terminale per poter vedere a video ciò che si sta digitando sul terminale. una volta connessi con l’interfaccia xBee si deve richiedere la modalità comandi della scheda. per default questa è in modalità di ricetrasmissione ma è possibile accedere alla modalità di configurazione attraverso cui modificare una serie di registri interni. Questa operazione viene in genere eseguita solo la prima volta. poi non dovrebbe essere più necessario applicare modifiche. per accedere alla modalità comandi occorre digitare per tre volte consecutive il simbolo “più” (+++). Da questo momento la scheda accetterà comandi in modalità Hayes, come era comune fare con i modem analogici dei primi anni di internet o dei luoghi dove sfortunatamente il digital divide impone ancora l’uso della linea telefonica. il primo dettaglio da configurare è il pAn iD ovvero l’identificatore della rete personale che si sta configurando. Tutti i nodi 802.15.4 devono far parte di un pAn ben preciso e solo le schede configurate con lo stesso pAn iD possono dialogare tra di loro. Questo permette di avere diversi gruppi di schede in grado di comunicare in modo indipendente e privato tra loro pur condividendo lo stesso ambiente fisico. Si tratta di una condizione del tutto analoga alle comunicazioni Wi-Fi domestiche dove vi sono diverse reti che condividono lo stesso spazio. il comando da impartire per impostare l’interfaccia sul pAn iD 4005 è il seguente:

ATID 4005 - Questo comando dovrà essere impartito su entrambe le interfacce in quanto entrambe faranno parte della stessa rete. Si possono impostare valori tra 0 e FFFE. L’iD FFFF è un valore di broadcast e permette la comunicazione verso tutti i nodi su qualunque pAn presente nell’ambiente. il comando successivo da impartire riguarda l’iD specifico del nodo. ogni nodo dovrebbe avere un iD univoco. in questo caso si imposta il primo nodo al valore 1. il secondo nodo dovrà avere il valore successivo.

Led e buzzer montati su breadboard

elenco materialeComponenti usati nel progetto: 1 scheda Arduino uno 1 shield xBee per Arduino 2 schede Digi xBee 802.15.4 1 buzzer di piccole dimensioni

1 diodo LED e relativa resistenza 1 breadboard per le connessioni 1 batteria per l’alimentazione 1 scheda uSB xBee Explorer da

collegare al computer con l’apposito cavo

LXP_140_68_73_tut_arduino 70 27/03/14 11:34

Page 71: 04_aprile2014

Linux pro 140 71

Arduino Tutorial

ATMY 1 - È necessario indicare anche qual è l’iD di destinazione delle comunicazioni scaturite dall’interfaccia che si sta configurando. L’interfaccia con iD 1 dovrà comunicare con l’interfaccia di iD 2 e viceversa. Quindi si procede con la configurazione:

ATDH 0ATDL 2il primo comando serve per disabilitare l’indirizzamento esteso a 64 bit visto che si intende usare solo due interfacce per questo progetto. Viene quindi posto a zero il registro più significativo dell’indirizzamento e si pone a 2 il registro meno significativo. nella seconda interfaccia si dovrà usare il comando ATDL1. A seguito di ogni comando impartito si dovrebbe ricevere una stringa testuale “oK” di ritorno. Se questo non avviene significa che la procedura non sta funzionando e che si sta semplicemente scrivendo sul terminale senza accedere alla modalità comandi dell’interfaccia. Se ogni comando impartito ha generato un “oK” di risposta si può procedere con il salvataggio permanente della configurazione nella memoria interna non volatile con il comando Hayes standard seguente:

ATWR - Chi ha avuto modo di configurare modem analogici si ricorderà certamente di questo comando. ora si può scollegare la scheda, togliere l’interfaccia e configurare la seconda scheda xBee. Completate le operazioni si può passare alla fase di prototipazione. Si deve acquisire una scheda Arduino uno, collegare lo shield wireless e mettere nello zoccolo l’adattatore 802.15.4 appena configurato. il secondo adattatore sarà invece collegato al computer tramite la scheda Explorer. Se si intende invece esplorare in modo più esteso l’ambiente di configurazione si può fare riferimento alla reference ufficiale di Digi disponibile all’indirizzo http://examples.digi.com/quick-reference.

Prototipazioneil prototipo che si vuole realizzare è di studio. non svolge cioè funzioni particolari ma serve unicamente a dimostrare la semplicità con cui è possibile realizzare progetti che implicano una comunicazione senza fili attraverso Arduino. È presente un diodo LED e un buzzer che potranno essere azionati a distanza attraverso un comando impartito dal computer. un ulteriore comando permetterà una lettura sul sistema per conoscere lo stato del LED. per realizzare il prototipo serve il materiale indicato nel box della pagina precedente. non sono necessarie saldature per la realizzazione. Bastano dei normali ponti di rame. La realizzazione del codice è molto semplice a dispetto della complessità che esiste nelle comunicazioni senza fili. Questo è possibile grazie all’elevata integrazione delle schede xBee e alla strato software funzionale già a partire dalla prima accensione. per cominciare è necessario impostare alcune variabili di appoggio per lo stato dei LED e per indicare a quali pin questi sono collegati:const int health_led = 13; // Led ciclo

principaleconst int action_led = 11; // Led comandabile

in remotoconst int buzzer = 9; // Buzzer

boolean health_status = HiGH; // Stato led ciclo principaleboolean action_status = LoW; // Stato led comandabile in

remoto

int incomingByte = 0; // Variabile per lettura seriale

L’health_LED è un LED connesso al pin 13 della scheda Arduino uno e lampeggia continuamente per mostrare visivamente il funzionamento del sistema e il corretto svolgimento del loop principale del programma. L’action_LED è invece il LED che potrà essere comandato in remoto dal proprio pC. il buzzer è collegato al pin 9 di Arduino uno e potrà essere comandato in remoto per emettere un breve suono. Le variabili booleane sottostanti servono per memorizzare lo stato acceso/spento dei due LED. La variabile incomingByte serve per la lettura della porta seriale e conterrà l’ultimo carattere letto. non servono altre variabili globali di inizializzazione. Si prosegue quindi con la realizzazione di due funzioni di servizio, una per gestire l’alternanza dell’health_LED, denominata healthLed() e una per l’emissione di suoni tramite il buzzer chiamata emettiSuono().

Il modulo XBee contiene un jumper per selezionare l’output seriale su USB oppure sul controller XBee

Shield XBee con l’interfaccia wireless montata

LXP_140_68_73_tut_arduino 71 27/03/14 11:34

Page 72: 04_aprile2014

72 Linux pro 140

void healthLed(){ digitalWrite(health_led, health_status); health_status = !health_status; delay (300);}

void emettiSuono(){ int c = 0; boolean stato = LoW; for (c=0; c < 200; ++c) { digitalWrite(buzzer, stato); stato = !stato; delay(2); } digitalWrite(buzzer, LoW);}

non vi sono dettagli particolari da segnalare nella codifica di queste due funzioni. È più interessante il blocco di setup, riportato qui di seguito:void setup(){ Serial.begin(9600); Serial.println(“”); Serial.println(“*************************************************************”); Serial.println(“prototipo dimostrativo per comunicazioni

wireless xBee”); Serial.println(“Silvio umberto Zanzi”); Serial.println(“[email protected]”); Serial.println(“*************************************************************”);

Serial.println(“”); pinMode(health_led, ouTpuT); pinMode(action_led, ouTpuT); pinMode(buzzer, ouTpuT); digitalWrite(buzzer, LoW);}

nella prima riga avviene l’inizializzazione seriale a 9600 bps. La comunicazione tra due schede xBee avviene infatti in modalità seriale a caratteri ed è quindi necessario inizializzare il flusso tramite Serial.begin(). Di fatto non servono altre forme di inizializzazione della scheda xBee e basta questa semplice riga per poterla utilizzare. Le righe seguenti si limitano a inviare righe di testo sul flusso seriale. L’operatore al computer potrà quindi vedere da un programma terminale collegato all’altra scheda xBee il testo di inizializzazione. Seguono alcuni comandi per impostare la modalità di scrittura per i pin dove sono collegati il LED e il buzzer. il ciclo principale del programma esegue la lettura del canale seriale in attesa di comunicazioni dalla postazione fissa. il ciclo attenderà l’arrivo della pressione di alcuni tasti precisi, a cui darà seguito un comportamento predeterminato. in caso di pressione della barra spaziatrice (ASCii 32) sarà emesso un suono tramite il buzzer, se sarà

La basetta XBee explorer presso il sito di Sparkfun

Scheda XBee con antenna a filo

LXP_140_68_73_tut_arduino 72 27/03/14 11:34

Page 73: 04_aprile2014

Linux pro 140 73

Arduino Tutorial

premuto il tasto 1 (ASCii 49) sarà invertito lo stato del LED mentre se sarà premuto il tasto i (ASCii 105) verrà inviata un’indicazione testuale dello stato del LED per segnalare all’operatore sul terminale fisso se questo è acceso o spento. non serve altro. il ciclo principale sarà poi corredato dal richiamo alla funzione che gestisce l’health_led.void loop(){ healthLed(); if (Serial.available() > 0) // Legge il byte in arrivo { incomingByte = Serial.read();

Lo shield xBee è dotato di un jumper con l’indicazione xBEE/uSB. Quando si deve caricare il codice all’interno della scheda Arduino è necessario che il jumper sia in posizione uSB mentre quando

si intende usare la comunicazione wireless si deve mettere il jumper in xBEE. Si tratta di un selettore per ridirigere il flusso seriale di Arduino alla porta uSB (attraverso cui si carica il codice nella memoria Flash)

o all’interfaccia wireless (attraverso cui comunicare con l’altra interfaccia xBee). posizionando il jumper nel modo sbagliato non sarà possibile comunicare oppure caricare il codice.

Modo programmazione e modo comunicazione dello shield

Altro dettaglio del jumper per la selezione dell’output seriale USB/XBee (si veda box in fondo)

Scheda XBee explorer con l’interfaccia XBee montata sul pettine

switch (incomingByte) { case 32: { // Tasto spazio emettiSuono(); break; }

case 49: { // Tasto 1 action_status = !action_status; digitalWrite(action_led, action_status); break; }

case 105: { // Tasto i Serial.print(“il led di stato è “); if (action_status) Serial.println(“acceso!”); else Serial.println(“spento!”); break; } } }}

Finito! È evidente quanto sia facile eseguire comunicazioni wireless con le schede xBee. Quasi disarmante. non servono conoscenze avanzate e bastano poche righe di codice. partendo da questo semplice progetto di studio è possibile creare prototipi più complessi e divertenti. LXP

LXP_140_68_73_tut_arduino 73 27/03/14 11:34

Page 74: 04_aprile2014

Ritorno alle basi Percorsi PythonLo staff di Linux Pro percorre l’affascinante cammino della gestione file multipiattaforma in Python: ecco come fare le scelte giuste

diamo un’occhiata ad alcune funzioni utili e generiche. Per migliorare la leggibilità, abbiamo tralasciato il prefisso os.path in diversi esempi, quindi dove vedete isfile(), per esempio, significa che all’interno del vostro codice dove utilizzare os.path.isfile(). Quando si accetta un percorso dagli utenti, la prima cosa da fare è controllare che sia valido, questo può essere fatto con le funzioni exists(), isdir() e isfile(), che fanno esattamente quello che il nome suggerisce, rispettivamente, controllano l’esistenza, se è una directory e se è un file. Queste funzioni seguono dei link simbolici, quindi è importante che il percorso che gli date sia veramente un file e non un link simbolico; è comunque possibile testarlo in questo modo:if isfile(percorso) and not islink(percorso)

Siccome exists(), isfile() e isdir() seguono link, ritornano False se incontrano link danneggiati. Potete utilizzare lexists(), che ritorna True per qualsiasi file, directory o link simbolico, anche danneggiato.

Manipolare i percorsiOra sappiamo che il percorso esiste, vediamo come possiamo manipolarlo. Esistono diverse funzioni che ci permettono di maneggiare un percorso, sostanzialmente sono funzioni per la manipolazione di stringhe che utilizzano le regole standard dei percorsi. Non accedono ai file, quindi è necessario verificare che il risultato sia corretto. Partiamo con basename(), che ritorna l’ultima parte del percorso e dirname() che ritorna il resto.>> basename(‘aa/bb/cc’)‘cc’>>> dirname(‘aa/bb/cc’)‘aa/bb’

Se ci stiamo spostando nel filesystem, è preferibile lavorare con percorsi assoluti, isabs() ci dice se è un percorso assoluto, cioè un percorso che inizia con la barra in Linux oppure con una lettera di unità in Windows. Oppure possiamo utilizzare abspath() per convertire il path in assoluto:>>> isabs(‘aa/bb’)False>>> abspath(‘aa/bb’)‘/home/light/aa/bb’>>> abspath(‘/home/light/aa/bb’)‘/home/light/aa/bb’

Potete notare che eseguire abspath su di un path assoluto non porta ad alcuna modifica. L’opposto di abspath è relpath(), che converte un percorso assoluto in uno relativo alla directory corrente, oppure a un’altra directory passata come secondo argomento. In un tutorial precedente, abbiamo utilizzato la variabile di ambiente $HOME per trovare la directory home dell’utente. Possiamo ottenere lo stesso risultato utilizzando expanduser().>> expanduser(‘~’)

Scrivere script in Python da eseguire sulla propria macchina locale è una cosa: si sa esattamente dove si trova tutto quello di cui abbiamo bisogno. Un’altra cosa è invece quando

vogliamo creare qualcosa di più portabile: è necessario iniziare a pensare a dove si trovano i file e ai vari percorsi coinvolti. Quando si inizia a considerare una compatibilità multipiattaforma, specialmente la compatibilità con Windows, le cose diventano veramente interessanti. Per una ragione non ben definita, Microsoft ha deciso di invertire, letteralmente, la convenzione secolare (più o meno) di separare le directory con lo slash (“/ “). Utilizzando il backslash (“\”) in MS-DOS, con questa mossa non solo ci hanno inflitto la pena di un termine imbarazzante come “barra in avanti” utilizzata quando alla TV o alla radio devono leggere un URL, ma hanno reso anche molto più complicata la scrittura di codice multipiattaforma. Teoricamente, Windows dovrebbe supportare entrambi i caratteri come separatori per le directory, ma spesso utilizzare le barre “corrette” (backslash) porta a dei risultati imbarazzanti.

Un vero percorso?Non dovrebbe sorprendere il fatto che in Python esista un modulo adibito alla gestione dei percorsi, chiamato os.path. Questo modulo è parte del modulo os, quindi se lo state già usando non dovete importare separatamente os.path. Se vi servono soltanto le funzioni di gestione dei percorsi, potete importare soltanto quella parte del modulo:import os.path

Prima di vedere come gestire i separatori rovesci e altri Windowsismi,

La funzione walk() ci permette di fare qualsiasi cosa desideriamo sull’intera gerarchia di una directory

Concetti Hai qualche linguaggio da suggerirci? Scrivici ad [email protected] Concetti

74 LINUx PRO 140 LINUx PRO 140 75

LXP_140_74_75_LXF176.code_concepts 74 27/03/14 18:16

Page 75: 04_aprile2014

I moduli os.path sono una sorta di pacchetto, esistono moduli specifici per diversi sistemi operativi, per esempio, posixpath, ntpath, macpath e os2emxpath. Il modulo corretto

per il sistema operativo in uso viene caricato da os.path, ma potete utilizzare direttamente quello che preferite se, per esempio, volete lavorare con percorsi Windows utilizzando un sistema Linux.

attenzione che questa scelta è determinata dal sistema operativo che esegue lo script; come la maggior parte di queste funzioni, essa opera semplicemente su di una stringa, non ha un reale accesso al filesystem. Dovreste prestare attenzione a questa cosa se c’è una possibilità che lo script venga utilizzato su un filesystem non case-sensitive montato su un sistema operativo POSIx, come per esempio lavorando con delle foto all’interno di una SD formattata in FAT. Questa funzione offre anche un modo rapido per sapere se il vostro script è in esecuzione su Windows:if normcase(‘xyZ’) == normcase(‘xyz’): print “Siamo spiacenti di constatare che state utilizzando Windows”

Attraversare il percorsoAnche se il modulo è chiamato os.path, fa molto più che manipolare i percorsi. Molte delle funzioni che abbiamo visto si limitano a lavorare su stringhe, con abilità specifiche per lavorare sui percorsi, ma esistono altre funzioni che accedono al filesystem, come exists(). Queste funzioni lavorano solo con i metadati del filesystem, in sostanza ottengono informazioni sul file, ma non dal file. Il che include anche i metadati a cui potreste essere interessati come getatime, getmtime e getsize, rispettivamente per conoscere la data dell’ultimo accesso, la data di ultima modifica e le dimensioni. Se volete modificare il proprietario del file o i suoi permessi, avete bisogno di funzioni dal modulo os, come os.chmod, os.getuid e os.setuid. Dovete utilizzare il modulo os anche se volete leggere il contenuto di una directory, con os.listdir, ma os.path ha una funzione molto potente per lavorare con le directory, walk() (almeno per le versioni di Python 2.x). Questa funzione accetta una directory e una funzione come argomenti e applica la funzione alla directory e a tutte le sue subdirectory, in sostanza, scorre l’albero delle directory eseguendo la funzione. Il modo migliore per capire come funziona comunque è provarlo:#!/bin/env pythonimport os.path, sysdef contafile(_, nomedirectory, listafile): print “%s contiene %d files % (nomedirectory, len(listafile))

os.path.walk(sys.argv[1], contafile, None)Per ogni directory incontrata da walk viene invocata la funzione con tre argomenti. Il secondo è il nome della directory, il terzo è una lista contenente tutti i file e le directory contenuti in esso (creato con os.listdir). Il primo argomento è definito dall’utente, vi permette di passare quello che volete a walk. Il primo parametro della funzione deve essere passato, quindi lo abbiamo chiamato ‘_’ che è la convenzione di Python per i nomi che non vengono utilizzati. Quando chiamate walk() dovete passargli anche tre argomenti: il primo è il percorso da cui volete iniziare, il secondo è il nome della funzione che deve invocare e il terzo è l’argomento che volete passare a quella funzione, in questo caso nessuno, perché non ci serve. Da notare che in Python 3, questa funzione è stata spostata in os.walk() e la sintassi è un po’ cambiata, è stato tolto il terzo argomento. LXP

‘/home/light’>>> expanduser(‘~giorgio’)‘/home/giorgio’

Quando viene utilizzato per l’utente corrente, come nel primo esempio, la funzione ritorna il valore di $HOME, ci risparmia semplicemente il problema di farlo noi.

Costruire percorsiCreare un percorso da un componente può diventare un po’ caotico.percorso = root + ‘/‘ + directory + ‘/‘ + sottodirectory + ‘/‘ + file

funziona, ma non è elegante e presuppone che nessuno dei nomi delle directory contenga /. La funzione join all’interno di os.path si occupa di gestire tutto.percorso = os.path.join(root,directory,sottodirectory,file)

Questa funzione concatena i percorsi tra di loro, assicurandosi che ci sia esattamente un separatore tra ogni coppia di elementi. Tenete presente che se un elemento inizia con /, viene considerato come path assoluto e tutti gli elementi precedenti vengono scartati. Dato che le barre sono posizionate soltanto tra gli elementi, questo esempio ritorna root/directory/sottodirectory/file, se volete creare un percorso che finisce con una barra dovete mettere come ultimo argomento una stringa vuota (spesso non è necessario perché potete usare join più volte se volete aggiungere altri elementi).>>>join(‘root’,’directory’,’sottodirectory’,’’)‘root/directory/sottodirectory/‘

Per quanto possiate prestare attenzione alla costruzione e manipolazione dei file, è comunque possibile che vi ritroviate con degli abomini come ../../home/light//movies/..//foto, specialmente se accettate percorsi in input. Abbiamo già visto abspath() che converte i percorsi relativi in assoluti; si occupa anche di ripulire le porcherie come queste. Se non volessimo un percorso assoluto, ma volessimo comunque evitare dei percorsi così disordinati? Possiamo usare normpath() per sbarazzarci delle barre di troppo e degli spostamenti scorretti sulle directory. Potete ripulire un percorso anche con realpath(), che risolve anche i link simbolici, ma normpath e abspath hanno una funzionalità in più, convertono i separatori di directory nel formato Windows e POSIx. Ovviamente non noterete alcuna differenza se eseguite i vostri script in Linux.

Slash e backslashFin qui, tutto quello che abbiamo fatto è stato specifico per Linux (o per POSIx se vogliamo essere precisi). Alcune di queste funzioni vanno anche in Windows, ma non quelle che lavorano con funzionalità del filesystem non presenti in Windows, come i link simbolici. Le funzioni normpath() e abspath() convertono anche il formato del percorso in base al sistema operativo, quindi eseguendonormpath(‘Documenti/Lettere’)

In Windows vi ritornerà “Documenti\Lettere” ma rimarrà invariato nei sistemi POSIx. Quindi è buona norma utilizzare sempre dei percorsi in stile POSIx all’interno dei vostri script e lasciare che normpath(), abspath() e join() si occupino di tutte le trasformazioni necessarie per eseguire il codice su altri sistemi. Un’altra differenza tra i vari sistemi operativi è l’essere o meno case-sensitive, i filesystem Linux sono case-sensitive, mentre quelli Windows non lo sono. La soluzione è quella di lavorare sempre considerando i percorsi case-sensitive, come siete abituati, e di utilizzare la funzione normcase() per tradurli. Questa funzione lascia il percorso invariato nei sistemi case-sensitive e lo converte in minuscolo quando viene eseguito su un sistema operativo non case-sensitive. Prestate

Moduli specifici per gli OS

Concetti Hai qualche linguaggio da suggerirci? Scrivici ad [email protected] Concetti

74 LINUx PRO 140 LINUx PRO 140 75

LXP_140_74_75_LXF176.code_concepts 75 27/03/14 18:16

Page 76: 04_aprile2014

SqueakSqueak

76 Linux pro 140 Linux pro 140 77

finestra, si aprirà il menu World. Selezionate Workspace per aprire una finestra workspace (dove potete scrivere codice) e Transcript per aprire una finestra transcript (dove viene mostrato il risultato dell’esecuzione del codice e gli eventuali errori). in alternativa potete cliccare nel tab Tools alla destra e trascinare una finestra Workspace e una Transcript direttamente da lì. nella finestra Workspace scrivete:Transcript show: ‘Ciao Mondo’.

È importante utilizzare gli apici singoli e non le virgolette. Le virgolette in Squeak contengono i commenti. Selezionate il tutto con il mouse, cliccate con il tasto destro e selezionate Do It, vedrete apparire la scritta “Ciao Mondo” nella finestra transcript. il punto alla fine, che conclude la riga di codice, non è necessario sulla singola riga, ma lo diventa quando il codice va su più righe, quindi è buona norma utilizzarlo sempre. Alternativamente, esiste un modo ancora più veloce: scrivete questo nella finestra Workspace.‘Ciao Mondo’

Selezionatelo, cliccate con il tasto destro, e selezionate print. Vi apparirà una copia della scritta direttamente all’interno della finestra Workspace, print ovviamente esegue il codice. provate a scrivere un’espressione matematica (per esempio 65*30), selezionatelo e fate print, per vedere il risultato calcolato nella finestra Workspace.

Grammatica SqueakEssere in grado di eseguire piccoli pezzetti di codice può essere utile, ma la riga Transcript show mostra in modo più chiaro la grammatica di Squeak. Squeak è un linguaggio interamente object-oriented: tutto in Squeak è un oggetto. per questo motivo la frase tipica è: oggetto messaggio. in questo caso, Transcript è l’oggetto (la finestra Transcript), e show: ‘Ciao Mondo’ è il messaggio. nello specifico, il messaggio in questo caso è formato dal metodo (show) e da un argomento, ma ovviamente i dettagli cambiano in base a ciò che state facendo. Dato che Squeak è ottimo anche per quanto riguarda la parte grafica, possiamo creare con grande semplicità un pulsante Ciao Mondo:bottone := SimpleButtonMorph new.bottone color: Color green.bottone label: ‘Dì ciao’.bottone addMouseupActionWith: ‘Transcript show: ‘’Ciao Mondo ‘’.’.bottone openinWorld.

Questo codice crea un nuovo oggetto SimpleButtonMorph, bottone, lo colora di verde, e ci associa un’etichetta. La chiamata addMouseUpActionWith associa un’azione quando viene rilasciato un tasto del mouse sopra al pulsante (per esempio dopo che un utente ci ha cliccato sopra), che è lo standard per le azioni legate al click sui pulsanti. L’azione è la riga Transcript che abbiamo visto prima. Anche se in questo caso la stringa necessita di doppi apici (che sono però due singoli apici e non delle virgolette). per finire, openInWorld mostra il pulsante nello Squeak World cioè nella finestra di Squeak. Selezionate il codice, cliccate Do it e vedrete apparire il pulsante. potete anche cambiare la sua

Squeak è un’implementazione open Source di Smalltalk, un linguaggio nato 35 anni fa, e probabilmente il primo linguaggio object-oriented. Tutto in Smalltalk è un oggetto

e tutto viene fatto inviando messaggi a oggetti. Squeak offre un ambiente di sviluppo molto avanzato: ogni cosa all’interno del vostro progetto Squeak è scritta anche in Smalltalk, e può essere esaminata, includendo una visualizzazione grafica degli oggetti e della stessa macchina virtuale di Squeak. per questo motivo viene spesso utilizzato in ambiente didattico ma è molto utile anche per altri progetti. Continuate a leggere se volete provarlo creando un’implementazione di un piccolo gioco.

Iniziamopotete installare Squeak attraverso il vostro gestore di pacchetti (squeak-vm su Debian/ubuntu), oppure grazie a un singolo file Zip dal sito Web. Se lo scaricate tramite il vostro gestore di pacchetti, dovrete scaricare anche un’immagine Squeak dal sito Web. in alternativa, se utilizzate lo Zip scaricato dal sito, potete semplicemente scompattarlo ed eseguire il file squeak.sh. Quando aprite Squeak per la prima volta si apre una grande finestra, la prima cosa da fare è creare un nuovo progetto. Selezionate Projects D New Project D New MorphicProject e avrete un nuovo progetto, in pratica una finestra Squeak con diversi tab ai lati della finestra (per ulteriori informazioni consultate il box L’ambiente Squeak di pagina seguente). Anche se Smalltalk include un’opzione per creare progetti MVC (il toolkit MVC di Smalltalk-80), la parte MVC ha un aspetto abbastanza datato, e non è più realmente manutenuta. Morphic fa le stesse cose oltre a qualcosa in più, e possiede un aspetto decisamente più accattivante, quindi non c’è motivo per non optare per questa soluzione. Morphic inoltre è disponibile anche in altri linguaggi (per esempio Self), ed è progettato per gestire anche le Gui. per iniziare a scrivere un po’ di codice, cliccate sullo sfondo della

Squeak e i suoi oggettiuna versione free di Smalltalk con la sua VM, portabile, object-oriented e ci offre la possibilità di presentarvi un ambiente di sviluppo diverso dal solito

Le finestre di Workspace e Transcript con il nostro importantissimo primo programma

LXP_140_76_79_LXF180_code_squeak 76 27/03/14 15:20

Page 77: 04_aprile2014

SqueakSqueak

76 Linux pro 140 Linux pro 140 77

etichetta al click:button addMouseupActionWith: ‘self label: ‘’Ciao Mondo!’’.’.

Scrivere un programmaVediamo ora di parlare di qualcosa di un po’ più sostanzioso. Vediamo come scrivere un programma per giocare a Tic-Tac-Toe (il classico gioco in cui bisogna fare tris su una griglia). Creeremo una scacchiera di 3x3, che aggiungerà uno o o una x quando si clicca su una casella. Ci sarà una classe per la scacchiera, e una per le celle, così scopriremo come Squeak utilizza le classi. per prima cosa, creiamo un nuovo progetto Squeak, per avere un’area pulita con cui lavorare. ora, aggiungiamo una categoria per salvare le nostre classi. Andate su Tools D Browser, vedrete una finestra che vi mostra tutte le classi di Squeak. Cliccate con il tasto destro sul pannello di sinistra, che mostra tutte le categorie, e selezionate Add item. inserite il nome Tic-Tac-Toe e cliccate Accept. Vedrete la nuova categoria aggiungersi alla lista, anche se ovviamente per il momento non contiene nulla. Quello che invece ha è un template nel pannello inferiore. Questo template è di un metodo che invia un messaggio subclass alla classe object, con il parametro #NameOfSubclass - quindi la classe object creerà una sottoclasse di se stessa, con il nome specificato. potete pensarla anche come una chiamata al metodo subclass della classe object; ma in Smalltalk parliamo di oggetti e messaggi, non di metodi. Vediamo come modificare questo template per creare la nostra classe per le celle. Ecco il codice:SimpleButtonMorph subclass: #TTTCellainstanceVariablenames: ‘azioneMouse’classVariablenames: ‘’poolDictionaries: ‘’category: ‘Tic-Tac-Toe’

Così, invece di creare una sottoclasse di object, ne creiamo una di SimpleButtonMorph (un pulsante cliccabile) chiamata TTTCella. Aggiungiamo anche una instance variable (una variabile persistente in tutte le istanze della classe) chiamata azioneMouse, in questo modo possiamo agire sulla cella a seconda di ciò che fa il mouse. per salvare queste modifiche, cliccate con il tasto destro e poi su Accept. noterete un messaggio in rosso in fondo alla schermata che vi avvisa della mancanza di un commento alla classe. per aggiungere un commento cliccate sul pulsante ? situato tra i pulsanti instance e class nel System Browser, scrivete un commento e selezionate di nuovo Accept. ora, vediamo

di scrivere alcuni metodi. il primo che vogliamo implementare è il metodo che si occupa dell’inizializzazione, che crea una nuova cella bianca. Selezionate TTTCella nella lista delle classi e poi -- all -- nella finestra accanto, vedrete il template di un metodo nel pannello in basso. Sostituite il codice presente con questo:initialize super initialize. self label: ‘’. self borderWidth: 5. self width: 50. self height: 50. color := Color paleBlue. self useSquareCorners.

Questo metodo inizia invocando il metodo initialize della superclasse, che si occuperà di impostare i vari valori predefiniti. Definiamo poi l’etichetta della cella (la impostiamo a stringa vuota, sono sempre due apici singoli, non virgolette), il suo bordo, le dimensioni, il colore, e via di seguito. La maggior parte di queste righe si spiega da sola. in effetti, ogni riga è un messaggio inviato all’oggetto self. potete testare il codice appena creato aprendo un Workspace e inserendo:t := TTTCell new.t openinWorld

Selezionate il tutto e cliccate su Do It per creare una cella. potete fare la stessa cosa scrivendo semplicemente TTTCell new,

Se siete abituati alla programmazione a riga di comando e ad editor standard, tutto questo vi sembrerà un po’ strano. Quasi sconcertante. per prima cosa, una nota sul mouse. Squeak assume che abbiate tre pulsanti nel vostro mouse. Siccome non tutti i mouse li hanno, i menu sono mappati in maniera differente in funzione del sistema. il pulsante sinistro è utilizzato per selezionare le cose, il pulsante destro di solito mostra un menu di opzioni, e il pulsante centrale (o alt+sinistro, o ctrl+sinistro) apre un insieme di pulsanti attorno all’oggetto. A volte questi ultimi due (conosciuti anche come rosso e blu) sono invertiti. Quindi dovete sperimentare per capire quale tasto fa cosa nella vostra installazione. Quando aprite un progetto Squeak, trovate diversi tab in giro per lo schermo. il tab objects

vi dà gli oggetti (come pulsanti o frecce) che potete trascinare nello schermo; Tools vi dà delle finestre utili; Widgets e Supplies sono dei sottoinsiemi di objects. ogni cosa all’interno di questi tab può essere trascinata nello schermo. A quel punto potete cliccarci con il tasto centrale o destro per far comparire diverse opzioni. inspect ed explore mostrano informazioni relative all’oggetto, con una finestra per il coding in basso. Questo tutorial è incentrato sullo sviluppo utilizzando il System Browser, che vi permette di aggiungere classe e codice in un modo che vi sarà familiare se avete già esperienza di sviluppo; ma potete fare moltissimo sfruttando il sistema grafico Morphic (date un’occhiata a Squeak… per bambini più avanti). Vale certamente la pena giocarci un po’ per scoprire le sue potenzialità.

L’ambiente Squeak

Aggiungiamo la prima classe. Notate il messaggio di avviso in rosso nella parte bassa della finestra, dobbiamo ancora inserire un commento

Dal tab Objects è sufficiente trascinare gli oggetti nella schermata per crearli

Squeak è l’implementazione e l’ambiente di sviluppo, Smalltalk è il linguaggio, anche se ci sono diverse sovrapposizioni nell’uso, come si evince dal tutorial.

Tip

LXP_140_76_79_LXF180_code_squeak 77 27/03/14 15:20

Page 78: 04_aprile2014

SqueakSqueak

78 Linux pro 140 Linux pro 140 79

selezionandola e cliccando su Inspect It, nella finestra che si aprirà inserite self openInWorld nel pannello in basso, selezionate di nuovo e cliccate Do It. La finestra di ispezione vi permette anche di verificare molti altri aspetti dell’oggetto, quindi vale la pena spendere qualche minuto per vedere quali informazioni contiene.

La scacchieraLa nostra cella non fa nulla, ma per il momento la lasceremo com’è per dedicarci alla scacchiera. per creare la classe scacchiera, cliccate di nuovo sulla categoria Tic-Tac-Toe, e otterrete un altro template per creare una sottoclasse. Questa volta modificatelo in questo modo:BorderedMorph subclass: #TTTScacchiera instanceVariablenames: ‘’ classVariablenames: ‘’ poolDictionaries: ‘’ category: ’Tic-Tac-Toe’

un BorderedMorph non è altro che, un morph (oggetto grafico) con un bordo. Salvate il tutto e create un metodo initialize:initialize | cellaSingola larghezza altezza n | super initialize. n := self celleperLato. cellaSingola := TTTCella new. larghezza := cellaSingola width. altezza := cellaSingola height. self bounds: (10@10 extent: ((larghezza*n) @(altezza*n)) + (2 *

self borderWidth)). grigliaCelle := Matrix new: n tabulate: [ :i :j | self nuovaCellaA: i at: j ].

Questa volta, quando farete Accept, Squeak si arrabbierà. per prima cosa vi chiederà di cellePerLato, confermate che il nome è corretto, lo definiremo tra poco. La seconda cosa su cui si fermerà è grigliaCelle, selezionate Declare Instance, dato che sarà una variabile di istanza. per concludere anche nuovaCellaA va confermata, anche questa la definiremo tra poco. La prima riga del metodo dichiara quattro variabili temporanee. È buona norma dichiarare le variabili che vengono utilizzate solo nel metodo come temporanee, per evitare di riempire il progetto Squeak di variabili globali non necessarie, e per ridurre le possibilità di sovrascritture indesiderate. Quindi impostiamo i valori di tutte queste variabili, e definiamo le dimensioni (bound) della scacchiera (sembra complesso ma indica semplicemente la dimensione della scacchiera in base alle dimensioni delle celle). per finire, creiamo una matrice

di celle con il giusto numero di celle. La riga più complicata, comunque, è sicuramente l’ultima. grigliaCelle (che come ricorderete abbiamo appena impostato come variabile di istanza, quindi è accessibile da tutta la classe) è il posto dove salviamo la nostra griglia di celle. Generiamo il tutto utilizzando Matrix>>new:tabulate:. in pratica il metodo new della classe Matrix. La notazione Classe>>metodo è utilizzata quando si parla di codice Squeak, anche se non la utilizzate nel codice stesso. Cosa fa il tabulate? in Squeak, il numero di argomenti che si aspetta un metodo è dato da quanti due punti (:) contiene nel nome. in questo caso, due : significa due argomenti. il primo imposta le righe e colonne della Matrice, e il secondo specifica quale oggetto si trova a ogni posizione (i, j) della matrice. Quest’ultimo utilizza il messaggio nuovaCellaA, così ogni cella con posizione (i,j) è formata dal risultato di nuovaCellaA: i at: j. un ringraziamento è dovuto agli autori dell’eccellente Squeak By Example per una parte di quanto appena detto e un paio di metodi usati in questo tutorial.

Altri Metodiora abbiamo bisogno di creare altri metodi. Clicchiamo sul nome della classe per avere un nuovo template. Dobbiamo creare due metodi:celleperLato “numero di celle in ogni lato della scacchiera” ^3 nuovaCellaA: i at: j “Crea una cella alla posizione i,j e la aggiunge allo schermo” | cella origine | cella := TTTCella new. origine := self innerBounds origin. self addMorph: cella. cella position: i - 1 * cella witdh @ (j -1 * cella height) + origine.cella azioneMouse: [self faiMossa: i at: j]. ^cella

cellePerLato ritorna semplicemente il valore 3 (l’operatore ^ significa “ritorna questo valore”). nuovaCellaA fa quello che dice nel suo commento. Crea una nuova TTTCella, e definisce origine, che è l’inizio del bordo interno della TTTScacchiera. Se pensate alla scacchiera come una griglia, questo è l’angolo interno in alto a sinistra. il metodo è ereditato dalla superclasse BoundedMorph. Calcoliamo e impostiamo poi la posizione della cella come

Tippotete utilizzare il System Browser per esaminare una qualunque classe di Squeak. Cliccate con il tasto destro e scegliete find per ricercare una classe e utilizzate il tasto ? per vedere la documentazione.

La nostra TTTCella

è nell’angolo in alto a sinistra.

Potete vedere l’inspector più

in basso, e il System Browser

dietro di esso

Salvare e chiudereSembrano esserci diverse opzioni per salvare, ma non siamo riusciti a farle funzionare tutte. Se cliccate su Projects D Save Project, nelle nostre prove non sembrava funzionare. Cliccando invece sul tab Squeak e poi su Save, o dal menu Squeak, o sempre dal menu Quit, e rispondendo Yes per salvare, sembra funzionare tutto correttamente, chiudendo e riaprendo il progetto è ancora li. potete salvare il vostro progetto come immagine, ma lo script squeak.sh ha l’immagine di partenza pre-impostata, quindi dovete modificarlo, scrivere un vostro script oppure usare questo codice per avviare Squeak:exec Contents/Linux-i686/bin/squeak my.image

Se perdete del codice dovrebbe essere recuperabile da recover Changes quando riaprite Squeak, dato che Squeak

tiene traccia di tutte le modifiche. Andate in Extras D Recover Changes, selezionate le modifiche che desiderate, cliccate con il tasto destro e scegliete fileIn.

LXP_140_76_79_LXF180_code_squeak 78 27/03/14 15:20

Page 79: 04_aprile2014

SqueakSqueak

78 Linux pro 140 Linux pro 140 79

scostamento dall’origine per piazzarla nella finestra di Squeak. La parte importante è la penultima riga, che definisce cosa dovrebbe fare la cella in risposta a un’azione del mouse; eseguire il metodo TTTScacchiera>>faiMossa:at:. Questo metodo contiene la logica base del gioco, e lo scriveremo tra un momento. per finire, restituiamo la cella appena creata. ora però abbiamo altri metodi da creare per far sì che il tutto funzioni, il prossimo è TTTScacchiera>>faiMossa:at:faiMossa: i at: j (grigliaCelle at: i at: j) muovi: giocatore. self cambiaGiocatore.

Se fate Accept di questo codice, Squeak vi avvertirà che non ha idea di cosa sia un giocatore. Ditegli di aggiungerlo come instance, vedremo di gestirlo tra poco; confermate anche cambiaGiocatore vedremo di definire anche questo metodo tra poco. grigliaCelle è una matrice, quindi eredita i metodi delle matrici, specialmente il metodo at:at: per identificare una particolare cella all’interno della matrice. una volta ottenuta quella cella, applichiamo il metodo muovi, passandogli come argomento il giocatore e poi cambiamo giocatore. ora abbiamo bisogno del giocatore per mantenere il valore che determina di chi è il turno corrente, x o o. x parte sempre per primo, quindi aggiungiamo una riga all’initialize:initialize super initialize. player := ‘x’. “il resto del codice come prima”

poi abbiamo bisogno di cambiaGiocatore cambiaGiocatore giocatore = ‘x’ ifTrue: [giocatore := ‘o’] ifFalse: [giocatore := ‘x’]

La prima riga è valutata come boolean. Se è vera, viene eseguita la riga ifTrue, e giocatore viene impostato a o (è il turno di o ora). Se è falsa, viene impostato a x. Da notare che non c’è alcun controllo degli errori, il che significa che potrebbe essere il caso che facciate qualcosa per controllare che non contenga valori strani. Questo è tutto per la classe TTTScacchiera. Comunque, abbiamo ancora un paio di metodi per TTTCella da scrivere.

Il mouseTorniamo a TTTCella, per gestire le azioni del mouse e quel metodo muovi che abbiamo visto prima.azioneMouse: azione ^ azioneMouse := azione.mouseup: anEvent azioneMouse value.

il metodo azioneMouse: è quello che viene chiamato dalla cella quando è cliccata, dal metodo TTTScacchiera>>nuovaCellaA:at:. È anche una variabile di istanza, se guardate indietro nel codice utilizzato per definire la classe TTTCella. il metodo azioneMouse:, quindi, è soltanto un metodo che imposta (per questo viene chiamato setter): imposta la variabile azioneMouse con il valore che gli viene passato come argomento. poi ritorna il valore impostato. Quindi in Smalltalk un metodo setter è variabile: e un metodo getter è variable (senza i due punti), invece di setVariabile e getVariabile come in altri linguaggi. Questi metodi vengono chiamati metodi accessori e andrebbero inseriti nella categoria apposita quando categorizzati. mouseUp: definisce cosa succede quando viene attivato un evento mouseUp. Qui mandiamo il messaggio value a azioneMouse. Questo metodo è stato impostato in TTTScacchiera>>nuovaCellaA:at:, come

[self faiMossa: i at :j ] (cioè TTTScacchiera>>faiMossa: i at: j). il messaggio value dice a Squeak di valutare l’espressione, in modo che venga eseguito faiMossa:at:. TTTScacchiera>>faiMossa chiama TTTCella>>muovi, che è l’ultimo metodo che dobbiamo scrivere: muovi: giocatore self label: giocatore. self height: 50. self width: 50.

Questo codice imposta l’etichetta della cella a giocatore. poi ridimensiona la cella, dobbiamo fare ciò perché impostando l’etichetta si ridimensiona automaticamente la cella alle dimensioni dell’etichetta, cosa che non vogliamo. per una migliore portabilità e un successivo mantenimento, potrebbe essere una buona idea impostare l’altezza e la larghezza come variabili di istanza. il gioco è finito! ora eseguite il tutto e vedete cosa succede. Come sempre, ci sono moltissime altre cose che possono essere fatte per migliorare questo gioco, studiatelo e vedete cos’altro potete implementare. Squeak è principalmente orientato verso la parte grafica, per questo motivo non piace a tutti. Ma è un ottimo linguaggio con un buon ambiente di sviluppo una volta che ci avete preso confidenza. può essere interessante anche provare a utilizzare i widget grafici che potete trascinare nella finestra per creare del codice. Se desiderate approfondire la conoscenza di Squeak, Squeak By Example è un’ottima introduzione a Squeak ed è disponibile gratuitamente online. LXP

Tipper gestire al meglio i metodi, potete cliccare con il tasto destro sopra di essi, selezionare more… e prettyprint. potete anche cliccare con shift+tasto destro per arrivare direttamente al menu more.

Il gioco in tutto il suo splendore! Potete vedere anche il system browser con un po’ di codice e di funzioni

Squeak… per bambini!un aspetto accattivante di Squeak è la sua grande accessibilità anche per i bambini. perfino quelli che non sono ancora pronti a provare a sviluppare codice con Smalltalk possono disegnare sulla superficie di Squeak e trascinare widget e comandi scriptati in giro. Questo tipo di approccio permette di creare script senza che l’utente debba scrivere, il che offre ai bambini più piccoli una maggiore libertà di iniziare a sperimentare con la programmazione.

Se siete interessati a questa cosa, il sistema Etoys (www.squeakland.org), che è parte di Squeak, è indirizzato nello specifico ai bambini e usato nel progetto one Laptop per Child. un’opzione simile, basata su Squeak/Smalltalk e sviluppata dal MiT, si chiama Scratch e può essere utilizzata online. Squeak, Etoys e Scratch offrono tutti una grande opportunità per i bambini per iniziare a studiare il software, invece di essere un consumatore passivo.

LXP_140_76_79_LXF180_code_squeak 79 27/03/14 15:20

Page 80: 04_aprile2014

80 Linux pro 140 Linux pro 140 81

matematiche, fisiche e ingegneristiche. Viene utilizzato anche in alcune banche e compagnie di investimento per modelli matematici complessi. il codice Fortran, vecchio di 35 anni, è ancora attivo e in sviluppo in alcune aree. Se state cercando qualcosa per lo sviluppo Web o applicazioni grafiche probabilmente dovreste guardare altrove… ma come tutti i linguaggi in questa serie è interessante dare un’occhiata per vedere cosa vi può offrire Fortran.

Fortran è, per qualsiasi standard, un linguaggio antico (leggete il box Versioni di Fortran a piè pagina per dettagli sulla storia). Malgrado la sua età viene tuttora

usato estensivamente nelle scienze, nel computing ad alte prestazioni e nei supercomputer, tanto per citare alcune applicazioni, e malgrado da qualche decade se ne sia predetta la fine è ancora molto usato. Fortran regna nel calcolo numerico, ragion per cui è difficile scalzarlo dalle fortezze

Per iniziareCome scritto nel box Versioni di Fortran, in questo tutorial utilizzerete Fortran 90, il che comporta trovare un compilatore Fortran 90 che vi aggradi. il più facile da trovare è probabilmente il compilatore Gnu gfortran. Altri compilatori disponibili includono G95 (libero) e NAG (a pagamento). Alcuni compilatori hanno aggiunte al Fortran standard che possono risultare utili se siete sicuri di legarvi al tale

compilatore; la scelta migliore è tuttavia restare nello standard ufficiale. per questo tutorial userete gfortran, il compilatore Gnu per Fortran, disponibile nel sito Web Gnu o come pacchetto per le maggiori distribuzioni. Su Debian potete lanciarlo con gfortran o f95 (entrambi usano lo stesso compilatore). Aprite un file hello.f95 e scrivete il codice seguente:

Fortran

L’ABC del Fortran Questo linguaggio pur essendo in giro da parecchio tempo, è ancora in uso ed è addirittura più facile di quanto potrebbe suggerire la sua reputazione

Ecco il programma f95

che chiede il vostro nome

e vi saluta; quindi la versione F77 di Hello World (leggete il box

nella pagina seguente per

altre informazioni sul formato fisso)

Fortran (o piuttosto il suo primo compilatore funzionante) apparve nel 1957 come alternativa al linguaggio assembly per programmare i mainframe. A quel tempo conteneva un’impressionante quantità di 32 istruzioni ed era, ovviamente, su schede perforate, una per riga. Crebbe velocemente in popolarità e ciò significò anche un rapido sviluppo di diversi compilatori per i diversi mainframe, rendendolo il primo linguaggio di programmazione cross-

architecture. Fortan ii, iii e iV apparvero negli anni seguenti, ma Fortran 66 fu il primo grosso passo che offrì uno “standard commerciale” per le versioni del linguaggio. Fortran 77, una decade più tardi, risolse alcuni problemi del 66, diventando forse la versione storicamente più importante. potete ancora trovare compilatori F77 per computer moderni e codice ancora funzionante. Dopo una pausa decisamente lunga, Fortran 90 nacque da una forte riscrittura, pur

mantenendo tutte le caratteristiche di F77 tanto che qualsiasi programma F77 dovrebbe essere compatibile con F90. F95 fu invece una minor revision. un’altra major revision è stata pubblicata come Fortran 2003 (con aggiornamento nel 2008). Se volete imparare Fortran oggi è tuttavia consigliabile cominciare con 90/95 e quindi passare alle nuove caratteristiche introdotte dal 2003. in questo articolo userete Fortran 95.

Versioni di Fortran

LXP_140_80_83_LXF178_code_fort 80 27/03/14 18:26

Page 81: 04_aprile2014

80 Linux pro 140 Linux pro 140 81

Fortran

Calcoli e cicliDal momento che Fortran è pesantemente matematico, ecco un programma sul genere. Ci sono buone possibilità che abbiate già incontrato la sequenza di Fibonacci nella vostra vita. ogni numero in Fibonacci è la somma dei due numeri che lo precedono. Tale sequenza compare ovunque, dalla matematica alla natura. Dal momento che l’algoritmo è iterativo (calcolate un valore quindi lo usate per calcolare il valore successivo) utilizzerete un ciclo per generarlo nel codice. Ecco un breve programma che genera i primi 20 numeri di Fibonacci:! Calcola la sequenza di Fibonacci fino al valore 20program fibonacci implicit none integer :: first, second, a, i first = 1 second = 1 print *, first

print *, second do i = 1, 18, 1 a = first + second print *, a first = second second = a end doend program fibonacci

Cominciate con l’impostare tutte le variabili che vi servono: le variabili per registrare i primi due numeri nella sequenza (entrambi 1); a per mantenere il numero temporaneo nella generazione della sequenza e i per usare un iteratore. Quindi stampate i primi due numeri. L’interesse principale è nel ciclo do. in F77 e precedenti dovevate utilizzare le etichette e GOTO per generare un ciclo ma con F90 potete usare una sintassi più moderna:

! Hello Worldprogram hello print *,”Hello World”end program hello

Compilatelo con f95 -o hello hello.f95 quindi eseguitelo con ./hello. Se provate a omettere -o hello scoprirete che il nome predefinito del file in output è a.out. Funzionerà correttamente ma non è d’aiuto non sapere a che file corrisponde ed è un attimo sovrascriverlo. Dovreste quindi ottenere l’output tradizionale di Hello World. Queste poche righe mostrano diverse caratteristiche del linguaggio. ! viene usato per i commenti. i programmi iniziano e si chiudono con program nome e end program nome; il nome del programma non deve coincidere con il nome del file. L’indentazione non è richiesta ma è una buona pratica per la leggibilità del codice. print stampa a schermo (l’asterisco indica “usa il formato di stampa appropriato per quello che dovrai stampare”). in F77 avreste dovuto usare gli apici singoli, F90 e seguenti ammettono i doppi apici.

Basi del linguaggioprovate una versione un po’ più complicata di hello.f95:! Ciao nomeprogram hello implicit none character :: name*20

print *, “inserisci il tuo nome: “ read *,name print *,”Ciao “,nameend program hello

La riga implicit none è importante. il Fortran vecchia scuola (F77 e precedenti) aveva una tipizzazione delle variabili implicita. Le variabili il cui nome cominciava con i, j, k, l, m o n venivano assunte come interi (è un linguaggio scritto da scienziati, che si aspettano automaticamente che i, j, ecc. siano interi) e tutte le altre assunte come numeri reali. Seppur ancora funzionante in F95 (per compatibilità) è un ottimo modo per introdurre errori. L’istruzione implicit none impedisce ogni tipizzazione implicita e vi forza a dichiarare tutte le variabili esplicitamente. Qui dichiarate name essere un array di character lungo 20, ovvero una stringa di 20 caratteri (se volete gestire nomi più lunghi aumentate la dimensione). read, come è facile immaginare, legge dallo standard input e memorizza quanto digitato in una variabile. Compilate e lanciate l’insieme: vi dovrebbe chiedere il nome e quindi salutare. notate che i tipi base di dati per Fortran sono INTEGER, REAL (precisione a 6 cifre decimali), DOUBLE PRECISION (precisione a 13 cifre decimali), LOGICAL (booleano, .TRUE. o .FALSE.), COMPLEX (numeri complessi) e CHARACTER (come sopra, un array di CHArACTEr è una stringa). Fortran 90 ha introdotto anche i tipi derivati, che vi permettono di creare strutture dati più complesse.

TipDovendo fare il Debug di Fortran, farlo girare su diversi compilatori (abilitando le opzioni di debug) può essere un modo utile per trovare molte informazioni su possibili problemi.

Formato libero contro formato fissoprima di Fortran 90, il codice Fortran doveva essere scritto in formato fisso, reminescenza delle schede perforate, seguendo regole molto feree, del genere:

La lunghezza massima della riga era 72 caratteri. per andare a capo si usava un carattere qualsiasi nella colonna 6 della riga seguente.

Le prime 6 colonne dovevano essere vuote a meno di usare una colonna per un commento o per un carattere di proseguimento.

Le righe di commento avevano * o c nella prima colonna.

Gli spazi erano ignorati del tutto.il classico programma “hello” d’esempio sarebbe

risultato in questo modo:c Hello World program hello prin *,’Hello World’ end program hello

Da F90 potete scrivere in formato libero. il codice in questo tutorial è tutto scritto così, esistono comunque alcune regole:

Le righe possono arrivare a 132 caratteri; utilizzate & per continuare una riga. Se la divisione è nel mezzo di un nome utilizzate una seconda & all’inizio della riga seguente:character :: name*100name = “questa è una riga molto lunga quindi

avete bisogno di un’ampersand qui & &e un’altra anche qui” ! commento i commenti iniziano con ! Gli spazi sono significativi, non potete avere

spazi in nomi di variabile o numeri. potete omettere lo spazio in alcuni termini come END IF e l’indentazione viene ignorata.

potete inserire istruzioni multiple su una riga separandole con ;.il compilatore GCC assume il formato libero se il file sorgente ha estensione .f95 o .f90 e formato fisso per .for. potete altresì specificare da riga di comando -ffixed-form o -ffree-form per bypassare le impostazioni di default.

LXP_140_80_83_LXF178_code_fort 81 27/03/14 18:26

Page 82: 04_aprile2014

Fortran

82 Linux pro 140 Linux pro 140 83

La generazione della sequenza di Fibonacci

Calcolare la radice quadrata di una funzioneper mostrare alcune caratteristiche più complicate del linguaggio ecco un problema complesso: il calcolo della radice di una funzione. Trovare la radice di una funzione f(x) significa trovare il valore di x per il quale f(x) = 0. Ecco alcuni esempi:f(x) = x - 2: la radice è 2 poiché 2-2 = 0f(x) = 3x - 3: la radice è 1 poiché 3*1 - 3 = 0f(x) = 2x^2 - 8: la radice è 2, poiché 2 * 2 * 2 - 8 = 0

Questo problema ricorre spesso in matematica e in altre situazioni. Tutte le funzioni soprastanti potete risolverle matematicamente (e probabilmente lo avete già fatto a scuola), per funzioni più complicate tuttavia vi serve un approccio computazionale per trovare la radice. un modo semplice e molto vecchio (più di Fortran: 3000 anni o giù di lì) per farlo è chiamato

il metodo della secante. non è il luogo per approfondirne il funzionamento (la relativa pagina di Wikipedia è ottima) ma l’implementazione dell’algoritmo fa il suo lavoro!Salvate il codice sottostante come secant.f95:! Calcolare la radice di 2x^2-1 con il metodo della secanteprogram secant implicit none real, parameter :: error = 1.0e-6 real :: x0, x1, temp integer :: i = 1, limit = 100 x0 = 0 x1 = 1.0 do if (i > limit) then print *, “Mi fermo, nessuna convergenza” exit endif if (f(x1) == 0) then print *, “La radice esatta è “, x1 exit else if (abs(x1 - x0) < error) then print *, “La radice approssimata è “, x1 exit end if temp = secanteq(x0, x1)

Qui è stata usata la parola

chiave intent(in) per una

variabile che una subroutine

vuole modificare (vedete

nell’editor). Il compilatore ha

restituito un errore

Sfortunatamente i messaggi dei compilatori Fortran non sono sempre d’aiuto. Controllate sempre di avere implicit none impostato se ottenete messaggi strani. potete aggiungere anche istruzioni print in vari punti per controllare quello che succede. Dopo di questo potete provare alcune opzioni del debugger GFortran:

-O0 istruisce il compilatore di non fare alcuna ottimizzazione. L’ottimizzazione può fare strane

modifiche alle variabili locali rendendo il debug difficile. il rovescio della medaglia è un codice molto lento. L’opzione -Og nelle versioni più recenti di GFortran (post 4.8) applica solo ottimizzazioni che non interferiscono con il debug.

-Wall abilita tutti i warning, -Wextra abilita anche altri messaggi non inclusi in ‘all’.

-pedantic avvisa di alcune caratteristiche del linguaggio supportate da gfortran ma non facenti

parte dello standard ufficiale. -g permette di lanciare il codice in gdb,

lo Gnu interactive debugger. utilizzatelo con gdb nomeprogramma, quindi usate break main per impostare un breakpoint sulla prima istruzione eseguibile; con run arriverà fino al breakpoint successivo e con step passerà all’istruzione seguente. Esiste un’ottima documentazione online per GDB, assieme a debugger anche migliori per Fortran.

Debug

do iterator = start, end, increasedo iteratore = valore iniziale, valore finale, incremento ! il corpo del cicloend do

L’iteratore viene inizializzato a valore iniziale, incrementato da incremento e il ciclo termina quando l’iteratore ha raggiunto valore finale. in questo caso quindi i si incrementa di 1 a ogni ciclo da 1 a 18, che aggiunti ai primi due valori della sequenza totalizzano 20 numeri in output. il corpo del ciclo è piuttosto semplice: generate e stampate il valore successivo nella sequenza, quindi riallocate le variabili first e second pronte per il ciclo successivo. nota: dal momento che l’incremento di uno è un caso molto comune, potete scrivere semplicemente do i = 1, 18 e l’incremento di 1 sarà assunto per default. potete anche adattare il programma per stampare esattamente cosa succede durante il ciclo, se non avete chiaro il funzionamento dell’algoritmo.

LXP_140_80_83_LXF178_code_fort 82 27/03/14 18:27

Page 83: 04_aprile2014

Fortran

82 Linux pro 140 Linux pro 140 83

call reallocate(x0, x1, temp) i = i + 1 !decommentate la riga sotto per vedere il ciclo in azione !print *, “x0 è “, x0, “x1 è “, x1 end do contains function f(x) real :: f real, intent(in) :: x f = 2.0*x*x - 1.0 end function f function secanteq(x0, x1) real :: secanteq real, intent(in) :: x0, x1 secanteq = x1 - (f(x1) * (x1 - x0) / (f(x1) - f(x0))) end function secanteq

subroutine reallocate(x0, x1, temp) real :: x0, x1, temp x0 = x1 x1 = temp end subroutine reallocate

end program secantper prima cosa guardate la struttura generale del programma. All’interno di quest’ultimo c’è una sezione di setup, un ciclo do e una sezione contains. La sezione contains permette di creare sottoprogrammi interni (funzioni o subroutine) nel vostro programma. potete anche creare sottoprogrammi esterni che appaiano dopo la riga end program. Ci sono due differenze principali tra una funzione e una subroutine: 1 una funzione ritorna un valore, una subroutine no. 2 una funzione deve avere almeno un argomento, una

subroutine può averne zero.Fra un momento vedrete cosa fanno le funzioni e le subroutine; per ora notate solo che sono definite con le parole chiave function … end function e subroutine … end subroutine. ora date un’occhiata a cosa fa il programma. Le prime righe impostano le variabili. L’unica cosa nuova qui è la chiave parameter, usata per definire una costante in Fortran. Se dichiarate un parametro state dicendo che il suo valore non cambierà durante l’esecuzione (e otterrete un errore di compilazione se tentate di farlo). impostate anche x0 e x1 che sono i vostri valori iterativi (alla stessa maniera vista in Fibonacci). L’idea è che dopo un certo numero di iterazioni tali valori si avvicinino sempre più all’effettiva radice della funzione. La maggior parte della logica del programma, ancora, è nel ciclo do. Stavolta, invece di usare un iteratore, è un ciclo infinito. Se ne usate uno dovete assicurarvi di avere una qualche condizione di stop. in questa istanza testate i (usato come iteratore informale) contro il valore di limit per uscire dal ciclo. L’istruzione exit interrompe il ciclo all’interno del quale si trova. ogni giro del ciclo controlla i due valori di x attuali ed esce oppure li ricalcola. Dopo aver controllato che il limite di 100 cicli non sia stato ancora raggiunto, controllate il valore di x calcolato più di recente (x1) per controllare se ritorna 0 quando passato come argomento alla funzione. Se è così avete trovato la radice e uscite. Controllate anche per “approssimato”: se i due valori di x calcolati più di recente, x0 e x1, hanno una differenza molto

piccola tra di loro, allora avete trovato una radice approssimata e potete fermarvi. La variabile error indica l’accuratezza: in questo caso controlla una differenza di meno di 0.000001 tra i valori. Se nessuna di queste condizioni è vera state ancora cercando la radice, per cui calcolate l’equazione secante per x0 e x1 e la salvate in temp. La subroutine swap imposta quindi il vecchio valore di x1 come nuovo x0 e temp come nuovo x1, e torna all’inizio del ciclo.

Sottoprogramminella sezione contains ci sono due funzioni. una è f(x), la funzione per la quale volete trovare la radice. L’altra è secanteq(x0, x1), che applica il metodo della secante ai due valori di lavoro. All’interno della funzione, al nome di funzione viene assegnato un tipo e trattato come una variabile. Questo sarà il valore ritornato dalla funzione e dovrete dichiararne esplicitamente il tipo. Dovrete anche dichiarare il tipo degli argomenti: se proverete a passare una variabile di tipo diverso dall’argomento otterrete un errore di compilazione. L’altra cosa nuova qui è l’istruzione intent(in) che aiuta a evitare modifiche accidentali o il passaggio all’indietro di valori da una funzione. Questi valori vengono definiti come solo input cosicché se la funzione prova a modificarli verrà sollevato un errore di compilazione. Anche nella subroutine vanno definiti i tipi degli argomenti. Diversamente da una funzione, tuttavia, una subroutine non ritorna un valore; altera invece i valori al suo interno (se state passando valori che non volete modificare potete usare ancora una volta intent(in)). Qui manipolate tre valori: scartate il vecchio x0, il vecchio x1 diventa x0 e la nuova variabile temporanea diventa x1 (potete farlo in linea se preferite, qui è stato diviso in parti per mostrare il funzionamento di una subroutine). Messo tutto insieme potete compilare e lanciare controllando l’output. Questo dovrebbe essere sufficiente per introdurvi al funzionamento di Fortran. Se siete abituati a linguaggi più moderni può sembrare un po’ rigido; è estremamente comodo per alcuni tipi di calcoli numerici, tuttavia, e ci sono enormi quantità di codice Fortran disponibili liberamente per risolvere problemi matematici e scientifici. Se vi trovate nella necessità di avere codice Fortran, controllate le molteplici librerie online prima di scriverlo da zero. Fortran 95 permette di usare moduli e altre strutture che rendono semplici i programmi di grandi dimensioni, anche se sono al di fuori degli scopi di questo tutorial. infine vale la pena citare il Fortran Colouring Book di roger Kaufman, che è probabilmente il manuale di un linguaggio di programmazione più divertente al mondo (è scritto a mano con moltissimi fumetti). purtroppo, dal momento che fu scritto nel 1978 (come libro di testo del MiT) copre solo F77 e non F95. LXP

Trovare la radice di quest’equazione. Potete anche decommentare la riga print nel ciclo se volete vedere i valori convergere, dal momento che sono disponibili

LXP_140_80_83_LXF178_code_fort 83 27/03/14 18:27

Page 84: 04_aprile2014

84 Linux pro 140 Linux pro 140 85

ciao.gs: 2.1-2.5: error: syntax error, expected declaration but got `print’ with previous end of line print “Ciao Mondo” ^^^^^ Compilation failed: 1 error(s), 0 warning(s)

Se preferite utilizzare due spazi vuoti invece del tab, dovete informare il compilatore di questa cosa inserendo in testa al vostro codice:[indent=2]initprint “Ciao Mondo”

in Genie, un blocco init esterno a una classe (parleremo delle classi tra poco) corrisponde alla funzione main in C; inizializza l’intera applicazione. in questo esempio lo stiamo usando come struttura di controllo per eseguire l’applicazione. Lo statement print è abbastanza chiaro. Come potete vedere, non ci sono strane punteggiature nel codice Genie.

Finestre e pulsantiuna grande qualità di Genie è la semplicità con cui si possono creare interfacce grafiche. Vediamo ora come far apparire il nostro Ciao Mondo all’interno di una finestra. per prima cosa, dovete assicurarvi di avere le librerie di sviluppo GTK installate (libgtk-3-dev in ubuntu). ora provate questo codice, salvatelo come ciao-gtk.gs:uses Gtkinit Gtk.init (ref args) var finestra = new MiaFinestra () finestra.add (new Label (“Ciao Mondo”)) finestra.show_all () Gtk.main ();class MiaFinestra : Window init title = “Finestra Ciao Mondo” default_height = 200 default_width = 250 window_position = Windowposition.CEnTEr destroy.connect (Gtk.main_quit)

La sezione uses importa delle librerie esterne; qui stiamo utilizzando GTK. Come prima, init si occupa di inizializzare e controllare l’applicazione. Abbiamo creato una nuova finestra, ci abbiamo aggiunto un’etichetta e poi l’abbiamo visualizzata. Gtk.main() è il ciclo principale che gestisce gli eventi GTK, e rimane in esecuzione finché non viene chiamato Gtk.main_quit. per creare una finestra abbiamo utilizzato una classe chiamata MiaFinestra. È una sottoclasse di Window (una classe GTK); i due punti nella prima riga specificano che è una sottoclasse. Genie non supporta l’ereditarietà multipla, ma una singola classe può implementare più interfacce, come in Java. All’interno di una classe, la funzione init è eseguita una volta soltanto, per inizializzare la classe. Fare una sottoclasse di Window significa ereditare le proprietà default_height, default_width, title e window_position (oltre alle altre), che abbiamo impostato nell’inizializzazione della classe. i metodi delle classe sono pubblici

Genie è parte del progetto Vala, sviluppato da GnoME per offrire le funzionalità di un moderno linguaggio senza i requisiti extra dei linguaggi più classici. il compilatore Vala

usa il sistema Gobject per trasformare il codice Vala in codice C, Vala stesso ha una sintassi molto simile a Java/C++. Genie utilizza il compilatore Vala (quindi ha accesso a tutto ciò che Vala può fare), ma ha una sintassi più pulita e leggera, permettendovi di raggiungere gli stessi obiettivi con meno righe di codice. È ottimo per sviluppare widget, librerie, e qualsiasi altra cosa vogliate. Genie e Vala offrono performance e utilizzo delle risorse simili al C (dato che il codice compilato è di fatto in C), ed evitano il problema dei linguaggi che vengono eseguiti in una VM (come python e Java). Genie offre i type inference, e supporta le closures, proprietà, attributi e tutto ciò che Vala supporta. il processo di apprendimento del linguaggio è molto veloce, è divertente giocarci, ed è facile sviluppare codice utile in poco tempo, specialmente se si desidera creare una Gui. L’unico grande problema è che Genie al momento ha una documentazione molto scarna. Vala offre un set ragionevole di guide online all’indirizzo https://wiki.gnome.org/Projects/Vala/Documentation, ma creare un programma Genie richiede spesso un buon dispendio di tempo in ricerche. Vala è al momento a uno stato molto primitivo (versione 0.23.3) quindi le cose sono ancora in fase di trasformazione. Genie è eseguito interamente sopra al compilatore Vala, quindi non installate Genie, installate Vala, e poi scrivete in codice Genie. potete scaricare i sorgenti di Vala all’indirizzo https://wiki.gnome.org/Projects/Vala anche se sono disponibili nella maggior parte dei repository delle varie distribuzioni, al momento della scrittura di questo articolo in ubuntu è disponibile il pacchetto valac alla versione 0.20.1 che è stata utilizzata per il codice presente in questo tutorial. una volta installato Vala, proviamo a scrivere un classico Ciao Mondo in Genie. Create un file ciao.gs con il vostro editor preferito e scriveteci questo: init print “Ciao Mondo”

Dovete inserire un invio alla fine della prima riga. ora scrivete valac ciao.gs nella console per compilarlo, e ./ciao per eseguirlo. i tab sono importanti in Genie. Se l’indentazione della riga print non è un tab otterrete un errore di compilazione:

Genie

Una magia in GTKLo staff di Linux pro ha scoperto Genie, un modo veloce e facile per gestire le finestre GTK e i widget

Il file ciao.gs, la sua compilazione

e l’output. Potete scaricare un

gestore della sintassi per Vim dal wiki di Vala

LXP_140_84_87_LXF177_code_genie 84 27/03/14 11:35

Page 85: 04_aprile2014

84 Linux pro 140 Linux pro 140 85

Genie

a meno che non vengano dichiarati come privati oppure se il loro nome inizia con underscore. L’ultima riga dell’init aggiunge Gtk.main_quit alla funzione destroy della classe. Questo significa che quando la finestra viene chiusa, il ciclo Gtk.main si ferma a sua volta. Compilate questo codice utilizzando valac --pkg gtk+-3.0 ciao-gtk.gs (n.B. dovete dire esplicitamente al compilatore quale libreria utilizzare) e poi eseguitelo, dovreste vedere una piccola finestra. È molto semplice anche aggiungere un pulsante a questa finestra. Togliete la riga dell’etichetta nel metodo init, e modificate la classe MiaFinestra:class MiaFinestra : Window init // titolo, altezza, ecc… tutte le righe già presenti var pulsante = new Button.with_label (“Clicca qui”) pulsante.clicked += def (pulsante_cliccato) title = “Ciao Mondo” pulsante_cliccato.label = “Ciao Mondo” add (pulsante)

Abbiamo creato un nuovo pulsante utilizzando la keyword var che identifica le variabili. potete utilizzare anche const per le costanti, peraltro. La sintassi ci permette di creare un pulsante e aggiungere un’etichetta con una riga di codice. La riga pulsante.clicked determina cosa deve succedere quando il pulsante viene cliccato: creiamo un nuovo pulsante (pulsante_cliccato) e cambiamo il suo titolo e la sua etichetta. Da notare che la definizione di funzioni (def (pulsante_cliccato)) non è circondato da parentesi, ma gestita con l’indentazione. per finire aggiungiamo il nuovo pulsante alla finestra, e abbiamo finito.

Esempio di applicazione con databaseSe eseguite il codice scritto qui sopra otterrete una finestra con un pulsante che la occupa interamente, e se ci cliccate sopra apparirà il messaggio Ciao Mondo. parleremo un po’ di layout più tardi, ma se volete un po’ di spazio attorno al pulsante, potete aggiungere le dimensioni del bordo in questo modo:var pulsante = new Button.width_label(“Clicca qui”)pulsante.border_width = 50

potete utilizzare questa e altre proprietà dei pulsanti per dare un aspetto un po’ più decoroso alla vostra interfaccia.ora è giunto il momento di iniziare una vera applicazione. Andremo a creare un’applicazione database basilare, che salva i nomi dei vini e se avete intenzione o meno di berli di nuovo. Creeremo una Gui che mostra la lista dei vini e un checkbox Sì/no. La prima cosa che faremo è leggere i dati da un file database. per restare sul semplice, utilizzeremo un file di testo, con due campi per riga: il nome del vino, e se lo berrete di nuovo o meno. È molto limitato, e per un uso “reale” a un certo punto probabilmente sentirete la necessità di passare a un vero database - Vala/Genie supporta SQLite. Ma proseguiamo sulla nostra strada, provate questo codice (salvato come vini.gs):init

var miaListaVini = new ListaVini ()class ListaVini : object const fileDati : string = “listavini.txt” init leggi_dati_vini () def leggi_dati_vini () var fs = FileStream.open (fileDati, “r”) riga : string = null while ((riga = fs.read_line ()) != null) var valori = riga.split(“,”) print “%s : %s”, valori[0], valori[1]

La classe listaVini è semplice: ha una costante, il nome del file di dati, e una funzione, leggi_dati_vini(). non sarebbe proprio il nome corretto visto che oltre a leggere i dati li mostra in output, ma cambieremo questa cosa nel prossimo passo. Qui potete vedere l’utilizzo di FileStream per aprire il file e leggere il suo contenuto, riga per riga. il ciclo while si occupa di continuare a leggere finché le righe sono finite. per ora, tutto quello che facciamo è utilizzare split per spezzare la riga a ogni virgola e inserire i valori in un array, per finire stampiamo i valori dell’array a schermo. Da notare che non c’è bisogno di dichiarare valori come array; Genie lo capisce da solo e lo gestisce per voi. Creiamo ora un paio di righe nel file listavini.txt, qualcosa come:Cabernet,trueVino rosso in cartone,false

Quindi compilate ed eseguite con valac vini.gs;./vini. otterrete un avviso durante la compilazione perché nella funzione init principale abbiamo creato la variabile miaListaVini ma non l’abbiamo utilizzata. non preoccupatevi, lo sistemeremo nel prossimo passo.

Liste, alberi e finestreil prossimo passo è quello di mettere il nostro elenco dentro a una Gui. per fare ciò, utilizzeremo nuovamente le librerie GTK, nello specifico gli oggetti ListStore e TreeView. ListaVini diventerà FinestraListaVini, che come si desume dal nome, sarà una finestra. Ecco lo scheletro del nostro codice dotato di Gui:uses

Genie ha due tipi di dati: le referenze e i valori. i valori vengono passati da una parte all’altra attraverso delle copie, mentre le referenze sono passate appunto come referenze.i valori sono i tipi di dati semplici standard (char, uchar, int, uint, float, bool, string, double e unichar, la documentazione è poco chiara nel

definire se string è un valore o una referenza), con l’aggiunta del tipo complesso struct.Le strutture possono contenere più valori, es.:struct MiaStruttura a : string b : string c : int

var foobar_struct = MiaStruttura uct () { “foo”, “bar”, 25 }Di default, le variabili non sono impostabili a null, dovete aggiungere ? al tipo, ad esempio string?, per poterle assegnare null. Questa scelta è stata fatta per evitare gli errori legati a puntatori nulli.

Le variabili in Genie

Codice e finestra. Non è bello, ma fa il suo lavoro

TipLa sintassi += per impostare la chiusura di una funzione è ora deprecata; va utilizzato l’approccio .connect ().

LXP_140_84_87_LXF177_code_genie 85 27/03/14 11:35

Page 86: 04_aprile2014

Genie

86 Linux pro 140 Linux pro 140 87

Gtkinit Gtk.init (ref args) var miaListaVini = new FinestraListaVini () miaListaVini.show_all () Gtk.main ()class FinestraListaVini : Window listaVini : dict of string, oggettoVino storeListaVini : ListStore vistaAlbero : TreeView const fileDati : string = “listavini.txt” init title = “Lista Vini” set_default_size (250,100) listaVini = new dict of string, oggettoVino leggi_dati_vini () costruisci_albero () add (vistaAlbero) destroy.connect (Gtk.main_quit) def leggi_dati_vini () // fai qualcosa qui def costruisci_albero ()// fai qualcosa quiclass oggettoVino : object prop nome : string prop ancora : bool construct (nome : string, ancora : bool) this.nome = nome this.ancora = ancora

La classe OggettoVino è una piccola novità. Ha due proprietà (o membri), per il nome della bottiglia e il boolean per dire se si berrà ancora o no. Le proprietà nelle classi Genie sono identiche a quelle Gobject, e Genie genererà in autonomia le funzioni per il set e il get, accessibili tramite oggetto.nome e oggetto.ancora (dove var oggetto = new OggettoVino()). Se volete scrivere le vostri funzioni per get e set personali ovviamente potete farlo. construct() è, come dice il nome stesso, il metodo costruttore dell’oggetto. il prossimo passo è di leggere i dati dal file e trasformarli in dati strutturati, diamo un’occhiata alla nostra nuova funzione leggi_dati_vini ():def leggi_dati_vini () var fs = FileStream.open (fileDati, ”r”) riga : string = null while ((riga = fs.read_line ()) != null) var valori = riga.split(“,”) listaVini[valori[0]] = new oggettoVino

(valori[0], bool.parse(valori[1]))Con questa funzione abbiamo letto i dati come prima, ma questa volta li abbiamo inseriti dentro a listaVini, che è un dict. i dict sono sostanzialmente delle mappe o hash, cioè un modo per salvare dati

in coppie chiave/valore. in questo caso, la nostra chiave è il nome del vino, e il valore è l’oggetto OggettoVino corrispondente. un dato, il nome, è quindi duplicato. un modo migliore per fare questa cosa sarebbe quello di utilizzare degli identificativi unici come chiave, ma per il momento manteniamo questa versione semplificata. notate che listaVini è stata dichiarata come membro della classe (quindi è accessibile da ogni parte della classe), ed è stata inizializzata nella funzione init e popolata in una funzione differente. Sbagliare uno di questi passi può causare dei problemi. ora, dobbiamo impostare la visualizzazione:def costruisci_albero () storeListaVini = new ListStore (2, typeof (string), typeof(bool)) var i = Treeiter () for w in listaVini.keys storeListaVini.append (out i)storeListaVini.set (i, 0, listaVini[w].nome, 1, listaVini[w].ancora) vistaAlbero = new TreeView () vistaAlbero.set_model (storeListaVini) vistaAlbero.insert_column_with_attributes (-1, “nome Vino”, new CellrendererText (), “text”, 0) vistaAlbero.insert_column_with_attributes (-1, “Lo berrai

ancora?”, new CellrendererToggle (), “active”, 1)

il modo più usato per visualizzare una lista in GTK è quello di utilizzare TreeView, con una ListStore o una TreeStore. per costruire una ListStore con due colonne avete bisogno di tre argomenti: il primo è il numero di colonne, gli altri due sono il tipo di dati che contiene ogni colonna (una ListStore con tre colonne è costruita con quattro argomenti, una di quattro con cinque argomenti e così via). Treeiter poi vi permette di puntare a una riga in particolare all’interno del ListStore (o a un percorso particolare in un TreeModel). Dopo aver creato la nostra ListStore e il Treeiter abbiamo percorso tutti i vini presenti in listaVini e li abbiamo aggiunti alla ListStore utilizzando append () per inserirli in una nuova riga. Da notare la sintassi: append () ritorna un Treeiter che punta alla nuova riga, ma invece di usare i = storeListaVini.append () come si farebbe in un altro linguaggio, abbiamo impostato out i come argomento. ora che abbiamo la riga possiamo impostare i valori, utilizzando set (). il Treeiter i specifica la riga, i valori listaVini[w].nome e listaVini[w].ancora diventano rispettivamente la colonna 0 e la colonna 1. ora che abbiamo creato la nostra ListStore, possiamo creare la TreeView: le diciamo di utilizzare i dati della nostra ListStore con il metodo set_model (), e poi definiamo le colonne. il primo argomento determina dove va aggiunta la nuova colonna; -1 significa alla fine. La seconda è il titolo della colonna. poi passiamo il tipo di Cellrenderer, l’attributo e la colonna della nostra ListStore che controlla quell’attributo. Quindi la prima riga genera una colonna di testo, il cui testo (text) è definito dalla colonna 0 della ListStore; la seconda riga invece genera una colonna con un checkbox, che è attivo (active) a seconda del valore ricevuto dalla colonna 1 della nostra ListStore. per compilare questo codice, dato che è collegato sia alle librerie GTK che alle librerie Gee, usiamo:valac --pkg gee-1.0 --pkg gtk+-3.0 wine.gs

Gee offre il backend per dict e per le liste, ma non è necessario aggiungere Gee alla sezione uses per poterlo utilizzare. una volta compilato ed eseguito, dovreste visualizzare una lista di vini con dei checkbox a fianco, come nell’immagine.

Aggiungere un valoreper finire, vediamo come aggiungere un pulsante che apre una finestra che ci permette di aggiungere un nuovo vino. Modifichiamo FinestraListaVini.init, e aggiungiamo altri due metodi:

Alcuni vini. I checkbox non sono cliccabili,

potreste provare a implementare

questa funzionalità

LXP_140_84_87_LXF177_code_genie 86 27/03/14 11:35

Page 87: 04_aprile2014

Genie

86 Linux pro 140 Linux pro 140 87

init title = “Lista Vini” // …. le righe già presenti costruisci_albero () costruisci_finestra () destroy.connect (Gtk.main_quit)def costruisci_finestra () var box = new Box (orientation.VErTiCAL, 10) box.add (vistaAlbero) var pulsante = new Button.with_label (“Aggiungi Vino”) pulsante.clicked.connect (finestra_aggiungi_vino) box.add (pulsante) add (box)def finestra_aggiungi_vino () var finestra = new FinestraAggiungiVino finestra.destroy.connect (Gtk.main_quit) finestra.show () Gtk.main ()

costruisci_finestra () è l’unica riga nuova nell’init, invece di mostrare soltanto la TreeView, la mettiamo in un box verticale insieme a un pulsante. button.clicked.connect () determina cosa dovrebbe succedere quando il pulsante viene cliccato: dovrebbe chiamare finestra_aggiungi_vino (). La funzione finestra_aggiungi_vino () non fa altro che creare una nuova finestra, per la precisione una finestra FinestraAggiungiVino, che andremo a creare come nuova classe tra un momento. Determina cosa deve succedere quando la finestra viene chiusa, la mostra, e fa ripartire il ciclo Gtk.main esattamente come la finestra principale. ora, quindi, vediamo la classe FinestraAggiungiVino.class FinestraAggiungiVino : Window nome_vino : Entry ancora : CheckButton pulsante_conferma : Button construct () title = “Aggiungi un nuovo vino” set_default_size (100,50) crea_widgets () def crea_widgets () nome_vino = new Entry () var etichetta = new Label.with_mnemonic (“_nome

del vino”) etichetta.menmonic_widget = nome_vino nome_vino.set_text (“inserire qui il nome del vino”) nome_vino.set_editable (true) ancora = new CheckButton.with_mnemonic(“Lo

berrai _ancora?”) pulsante_conferma = new Button.with_label(“Salva!”) pulsante_conferma.clicked.connect (cliccato_conferma) var pulsante_chiudi = new Button.from_stock (Stock.

CLoSE) pulsante_chiudi.clicked.connect (cliccato_chiudi) var hbox = new Box (orientation.HoriZonTAL, 20) var bbox = new Box (orientation.HoriZonTAL, 20) var vbox = new Box (orientation.VErTiCAL, 20) hbox.pack_start (etichetta, true, true, 0) hbox.pack_start (nome_vino, true, true, 0) bbox.add (pulsante_conferma) bbox.add (pulsante_chiudi) vbox.pack_start (hbox, false, true, 0) vbox.pack_start (ancora, false, true, 0) vbox.pack_start (bbox, false, true, 0)

add (vbox) show_all () def cliccato_conferma () var nomevino = nome_vino.text var ancoravino = ancora.active var fs = FileStream.open (fileDati, “a”) fs.puts (nomevino + “,” + ancoravino.to_string ()) fs.putc (‘\n’) destroy () def cliccato_chiudi () destroy ()

potreste aver notato che i membri della classe in questo caso non sono proprietà. Questo perché se vengono definiti come proprietà, GTK non riesce a gestirli correttamente come widget. non ci è chiaro se sia un bug o una funzionalità, ma per far funzionare il tutto è sufficiente fare come abbiamo fatto qui. Dato che i metodi di set e get non ci servono non c’è una reale perdita comunque. La maggior parte del lavoro in questo codice è all’interno di crea_widgets (). nome_vino è creato come una Entry box (parte del toolkit GTK) e gli viene associata la sua etichetta. Da notare che la label ha una mnemonic (cioè un keybind, identificato dall’underscore nell’etichetta, che potete utilizzare per passare all’oggetto) associata alla box. ancora è creato come CheckButton anche lui dotato di mnemonic, e abbiamo aggiunto un pulsante Salva e uno Chiudi. il layout è gestito da tre box: uno orizzontale contenente l’etichetta e la Entry; un’altro contenente i due pulsanti; e uno verticale che li racchiude entrambi. pack_start ci offre un controllo sul layout molto superiore rispetto ad add. Accetta quattro parametri: il primo è il figlio da includere, il secondo è per sapere se il figlio deve avere dello spazio extra (true per i testi, false per i box e i pulsanti), il terzo determina se lo spazio extra deve essere utilizzato dal figlio o come padding, e il quarto è il padding extra attorno al figlio. cliccato_conferma () gestisce la scrittura dei dati sul file database, utilizzando FileStream come per la lettura, ma con il flag “a” di “aggiungi”. puts () aggiunge una stringa, e putc () aggiunge un carattere. Abbiamo bisogno di un invio in fondo alla riga per chiudere il record del vino. infine, destroy () chiude la FinestraAggiungiVino e ci riporta alla finestra principale. prima però di compilare questo codice dovete ricordarvi di modificare la dichiarazione della costante fileData, dato che nel nostro codice si trova all’interno di una classe e non è quindi leggibile da un’altra classe, per fare ciò è sufficiente spostarlo al di fuori della classe. Compilate ed eseguite, ora dovreste poter cliccare sul pulsante Aggiungi Vino e aggiungere un nuovo vino alla lista. Si potrebbero aggiungere molte altre funzionalità a questa applicazione. Speriamo che questo tutorial vi abbia dato abbastanza informazioni da permettervi di muovere i primi passi nel mondo di Genie; giocare con il codice e risolvere i propri problemi è il modo migliore per proseguire nell’apprendimento. Ecco un esempio di un Hello World in Vala:class CiaoMondo : Glib.object { public static int main(string[] args) { stdout.printf(“Ciao Mondo”); return 0; }}

La differenza di sintassi dovrebbe essere palese. Dipende solo da quale preferite. Vala e Genie sono interoperabili; potete scrivere una classe in Genie che eredita da una classe Vala e chiamarla all’interno di codice Vala. Date un’occhiata alla documentazione di Genie (https://wiki.gnome.org/Genie) per informazioni. LXP

TipC’è un warning associato all’utilizzo delle hashmap di Gee. non siamo stati in grado di capire il perché, sembra che succeda qualcosa durante la compilazione in C. La sintassi usata in questo codice comunque è corretta secondo la documentazione.

LXP_140_84_87_LXF177_code_genie 87 27/03/14 11:35

Page 88: 04_aprile2014

88 Linux pro 140 Linux pro 140 89

Movimento (blu scuro) Consente di muovere e controllare gli sprite nel gioco.

Controllo (arancione) include la logica per controllare il programma (cicli e operazioni) e gli eventi necessari per avviare le azioni, come la pressione dei tasti. in Scratch 2.0, gli eventi in Controllo sono stati spostati nel gruppo Eventi.

Aspetto (viola) Questi blocchi possono variare il colore, la dimensione o il disegno di uno sprite e introdurre elementi interattivi, come i fumetti per i dialoghi.

Sensori (azzurro) Questi gestiscono l’input generico necessario al programma – per esempio tastiera, rilievo degli scontri tra sprite e posizione degli stessi sullo schermo.

Suono (fucsia) Aggiungono musica e effetti sonori al programma.

Operatori (verde) Abilitano l’uso della logica matematica nel vostro programma Scratch, come booleani, condizioni e numeri casuali.

Penna (verde scuro) Questo blocco viene utilizzato per disegnare sullo schermo.

Variabili (arancione scuro) Questo crea e manipola i contenitori per i dati nel programma.Spezzando il linguaggio in blocchi colorati, Scratch consente di identificare velocemente i blocchi che servono. i bambini lavorano tipicamente con la classificazione per colori per prima cosa e poi cercando di capire il collegamento tra i vari blocchi e come possano funzionare insieme.

Com’è andata con il giochino Scratch del mese scorso? Speriamo che lo abbiate hackerato e ampliato notevolmente. imparare a programmare è divertente,

tuttavia pensare continuamente a nuove idee può essere frustrante, perciò potrebbe essere conveniente utilizzare codice esistente per adattarlo alle vostre esigenze. Questo è l’aspetto migliore dell’open Source: la possibilità di esaminare, modificare e riutilizzare codice di altri, imparando da questi. Scratch offre anche questa possibilità. Visitate http://scratch.mit.edu e registratevi per ottenere un account; potrete condividere i vostri progetti con una creativa community di programmatori, che condividono anch’essi i propri progetti. in questo tutorial, creerete un fantastico shoot’em-up. Vi trovate in una città, è notte fonda e state vigilando per mantenerla al sicuro dagli invasori quando, improvvisamente, uno squadrone di logo Linux pro si materializza nel cielo e vi attacca senza pietà. il vostro compito è quello di distruggere i logo e collezionare punti per ognuno dei logo colpiti, ma avete solo 30 secondi per salvare la città! per portare a termine questo tutorial, utilizzerete la versione stabile di Scratch, ovvero la 1.4 al momento della redazione dell’articolo. La versione 2 è disponibile come beta e sembra essere molto stabile, tuttavia introduce diverse modifiche per le posizioni rispetto alla versione 1.4. i blocchi utilizzati da Scratch possono essere organizzati nei seguenti gruppi e colori:

Scratch

Creare un gioco arcadeChi salverà la vostra bellissima città dai logo assassini!? Chi altro se non Linux pro e il linguaggio di programmazione Scratch...

L’ambiente di Scratch

L’area ScriptQui potete trascinare i blocchi di codice dalla palette per aggiungere codice al vostro programma.

La palette BlocchiDove i blocchi vengono messi a disposizione, organizzati per categoria.

Lo StageQui vedrete i risultati della programmazione e potete utilizzarlo per interagire con il gioco.

Il pannello degli spriteQui vengono mostrati gli sprite e gli asset appartenenti al programma. Cliccando uno sprite cambierete il focus corrente.

LXP_140_88_91_LXF181_code_scratch 88 27/03/14 15:12

Page 89: 04_aprile2014

88 Linux pro 140 Linux pro 140 89

Scratch

in questo progetto userete: Tre sprite con il logo di Linux Pro uno sprite Game over un’immagine di sfondo per la città

Cominciate a costruire il progetto, iniziando con lo sprite di Linux pro. utilizzerete lo sprite Linux pro come invasore, che dovrete distruggere entro 30 secondi o verrà invasa la città! oK, sembra molto un trailer di un B movie. Lo sprite è il bersaglio nel vostro gioco e nel caso venga cliccato dovrà sparire e incrementare il punteggio. perciò, come prima cosa, aprite una nuova sessione Scratch, semplicemente aprendo l’applicazione. Dovreste vedere apparire una nuova finestra Scratch, con il gatto nella sezione Stage. in questo gioco non ci servirà, per cui cliccate con il tasto destro e selezionate Cancella. A questo punto avrete uno Stage vuoto pronto per lo sprite di Linux pro. importate ora il logo in Scratch. Sulla destra, in mezzo allo schermo, vedete tre icone. La prima è un pennello con una stella, che serve per disegnare un nuovo sprite. La seconda icona è una cartella con una stella, che apre la finestra di importazione, quello che vogliamo. La terza icona importerà uno sprite casuale nel gioco ma non lo userete in questo tutorial.

Sprite interattiviLe icone utilizzate per creare e importare gli sprite in Scratch visualizzano tooltip per identificare velocemente il loro compito: passateci sopra con il mouse se non siete sicuri. Cliccate la seconda icona per importare lo sprite; dovreste vedere una finestra di dialogo sullo schermo (come in Fig.1). La finestra Importa Sprite si posiziona inizialmente sulle risorse di Scratch. nella finestra di dialogo, navigate fino alla posizione del logo di Linux pro, selezionatelo e cliccate OK. Lo sprite è ora stato importato in Scratch, e verrà visualizzato sullo stage. Dovrete ora equipaggiare lo sprite con codice per renderlo interattivo. Avrete bisogno di tre spezzoni di codice, specificati con pseudocodice come segue:Quando si clicca sulla bandiera verdeporta velocità a 10per sempreSposta lo sprite del valore specificato dalla variabile velocitàrimbalza se lo sprite tocca il bordo

il codice per spostare il logo è abbastanza immediato ed è il primo passo per rendere il gioco più coinvolgente. per aggiungere questo codice, dovrete innanzitutto creare una variabile velocità. per farlo, cliccate sulla palette Variabili e premete Crea una variabile. nella finestra di dialogo chiamate la variabile velocità e selezionate Solo per questo sprite (la finestra include due opzioni: quella selezionata e Per tutti gli sprite, che userete in seguito).

Lo pseudo codice per gli spriteA questo punto potrete memorizzare la velocità del vostro sprite, perciò piuttosto di inserire il valore nel codice potete impostarlo qui e fare riferimento alla variabile nel codice in modo da salvare tempo e risorse. Fatto questo dovrete inserire il codice. ricordate che ognuno dei blocchi è codificato per colore in modo da facilitare la scelta della sezione. una volta creato il blocco di codice, salvate il progetto e cliccate la Bandiera Verde per eseguirlo.Dovreste ora vedere il logo Lxp spostarsi orizzontalmente attraverso lo schermo e rimbalzare sui lati, ma... aspettate, cosa? una volta che il logo rimbalza, viene capovolto! È necessario sistemare questo comportamento, tuttavia non si tratta fortunatamente di un grande onere. Appena sopra la sezione dove è stato inserito il codice, viene visualizzato il nome dello sprite. All’immediata sinistra trovate tre icone grigie (potete vederle in Fig.3), che partendo dall’alto sono:

Alto rotazione a 360 gradi. Mezzo Specchio verticale. Basso non specchiare.

per questo specifico sprite, non vorrete nessuna specchiatura quindi cliccate l’icona in basso. Eseguite ora il codice cliccando sulla Bandiera Verde: ecco fatto! Questi fastidiosi invasori sono intelligenti e hanno sviluppato una tecnologia per nascondersi dai nostri prodi. non è possibile sapere quanto questi saranno nascosti, perciò dovremmo colpire solo se visibili. Scherzi da B-movie a parte, dovrete creare il codice in modo che quando la bandiera verde viene azionata i logo spariscano e riappaiano in modo casuale.Quando si clicca sulla bandiera verdeper semprenascondiAttendi un numero a caso tra 1 e 3 secondiMostra

Scratch è incluso in ogni raspberry pi con raspbian come sistema operativo. Sapevate che è possibile utilizzare la versione pi di Scratch per lavorare con le Gpio e controllare e analizzare il mondo circostante?Ebbene sì! State leggendo bene, utilizzando Scratch è possibile controllare LED, motori e vari dispositivi di input attraverso un’interfaccia facile da utilizzare.Se volete provare questa possibilità, le migliori risorse

per farlo si possono trovare nel blog Cymplecy di Simon Walters, all’indirizzo http://bit.ly/cymplecy. Simon ha scritto alcuni fantastici articoli su come creare progetti basati su Scratch e nel suo blog segue un approccio passo passo al codice, in modo da creare meravigliose creature senza richiedere troppa conoscenza. un particolare riconoscimento per Simon è dovuto per una serie di robot in grado di risolvere i labirinti

programmati con simulazioni virtuali in Scratch. i robot utilizzano sensori a ultrasuoni per rilevare la distanza dagli oggetti e dai muri. una volta che il codice è stato prototipato e testato in un labirinto virtuale, questi viene applicato al robot e il labirinto ricreato nel mondo reale, usando oggetti diversi come ostacolo. Tutto il contenuto nel blog di Simon è libero, perciò cominciate pure a hackerare le sue creazioni per adattarle ai vostri progetti.

Utilizzare Scratch con Raspberry Pi

TipFacendo click destro su uno sprite vedrete una serie di azioni, come la duplicazione e la cancellazione dello stesso. Molto comodo e veloce da utilizzare.

Fig.1 Utilizzate la finestra di dialogo Importa Sprite per aggiungere gli sprite allo Stage

LXP_140_88_91_LXF181_code_scratch 89 27/03/14 15:12

Page 90: 04_aprile2014

Scratch

90 Linux pro 140 Linux pro 140 91

Attendi un numero a caso tra 1 e 3 secondi Mostrare lo sprite al giocatore è una parte chiave del gioco e utilizzare i numeri casuali rende il tutto più complicato. una volta creato il codice in Scratch, salvatelo ed eseguitelo. Gli sprite spariscono? Se sì congratulazioni, in caso contrario assicuratevi di aver usato la pausa per mantenere il logo visibile/invisibile per il giusto intervallo di tempo casuale.

E ora laser!L’ultimo blocco di codice per questo sprite ha due scopi: riprodurre il suono di un laser (pew pew) e incrementare di uno il valore memorizzato in una nuova variabile punteggio. Tuffatevi quindi in altro pseudocodice.Quando si clicca su Sprite1nascondiproduci suono Laser1Cambia punteggio di 1

Dovrete creare una nuova variabile, che chiamerete punteggio e importerete come condivisa tra tutti i fotogrammi in modo che anche altri sprite possano cambiarne il valore. ora sarà necessario trovare dei suoni per il vostro gioco. nella colonna dove state editando il codice potete trovare tre tab: Script, Costumi e Suoni. Cliccate su Suoni e poi su Importa, per fare apparire una finestra di dialogo simile a quella di Fig.2. utilizzando la finestra, navigate nella cartella Electronic e utilizzate Laser1 come suono. Vedrete il file selezionato apparire nella tab Suoni. una volta poste le basi, ricreate il codice di cui sopra. una volta completato, salvate e cliccate la Bandiera Verde per avviare il codice. Congratulazioni avete completato tutto il codice per il logo di Lxp. Che ne dite di un buon caffè per festeggiare? potreste ricordare dal tutorial del mese scorso come sia possibile associare codice anche allo Stage per l’esecuzione in parallelo a quello assegnato ai vari sprite. in questo tutorial lo Stage svolge due ruoli importanti. per prima cosa, imposta a zero il punteggio per ogni nuova partita e, cosa molto più importante, controlla il timer per dare al giocatore al più 30 secondi per fare più punti possibili. Ecco il codice che lo fa funzionare:Quando si clicca sulla bandiera verdeporta punteggio a 0porta timer a 30ripeti fino a quando timer = 0Attendi 1 secondiCambia timer di -1invia a tutti gameover

Dovrete creare una nuova variabile, disponibile a tutti gli sprite, che chiamerete timer. Sarà poi necessario impostare le variabili timer e punteggio a 30 e 0 rispettivamente. Questo frammento di codice resetta le condizioni di gioco per un nuovo giocatore, assegnando 30 secondi per giocare

e un punteggio di 0. il ciclo qui presente è condizionale (vedere Fig.4), ovvero viene eseguito solo finché la variabile timer sarà maggiore di zero. per assicurarsi che questo succeda dobbiamo fare in modo che il ciclo attenda un secondo e sottragga poi 1 dalla variabile timer. nel caso non si includa l’attesa di un secondo, vedrete timer scendere molto velocemente. infine, utilizzerete un comando di broadcast per comunicare tra lo stage e lo sprite di Game over. Scoprirete i dettagli di questa implementazione tra un paio di paragrafi. ricreate il codice, salvate i vostri progressi e eseguite il tutto cliccando sulla bandiera verde. Avete creato un timer e un metodo per resettare il codice, pronto per un nuovo giocatore.

Game over, ragazziL’ultimo sprite ha due compiti principali: comunicare al giocatore il punteggio finale e bloccare l’esecuzione di ogni script. Lo sprite include inoltre un piccolo script che si occupa semplicemente di nascondere lo sprite una volta cliccata la bandiera verde. Lo sprite riapparirà ovviamente solo alla fine del gioco. Esaminate la logica del compito principale, con il caro amato pseudo codice.

TipAvete perso il codice? Siete sicuri di aver cliccato sullo sprite corretto? È un errore comune: assicuratevi di aver cliccato sullo sprite giusto per editare il codice.

Fig 3 Le icone per la rotazione

dello sprite in Scratch 1.4. Nella versione

2.0 dovrete tuttavia cliccare

sulle informazioni sullo sprite

Fig 2 La finestra di dialogo Suono è simile a Importa Sprite e visualizza le risorse fornite da Scratch di default

Fig.4 Potete utilizzare il comando broadcast di Scratch nel vostro Raspberry Pi per controllare i componenti elettronici

LXP_140_88_91_LXF181_code_scratch 90 27/03/14 15:12

Page 91: 04_aprile2014

Scratch

90 Linux pro 140 Linux pro 140 91

Quando ricevo gameoverMostraVisualizzare un messaggio composto dall’unione de il tuo

punteggio è di e punteggio per 2 secondiFerma tutto

Come prima cosa dovrete creare un nuovo evento (si faccia riferimento alla Fig.5 per cosa fare in Scratch) che avvierà il codice di questo sprite. L’evento accade nel momento in cui lo sprite riceve il messaggio gameover; il blocco corrispondente può essere trovato nella palette Controllo. in seguito dovrete occuparvi del codice che visualizza lo sprite sullo schermo e potrete farlo utilizzando i controlli nella palette Aspetto. il blocco successivo è un mix di blocchi Aspetto, Variabili e operatore. Viene utilizzato il blocco Unione di ciao e mondo di Aspetto per stampare un testo sullo schermo per 2 secondi. Dove il blocco contiene Ciao inserite la frase Il tuo punteggio è di. nel secondo blocco, dove è presente Mondo, inserite la variabile punteggio. L’operatore di unione concatena due stringhe di testo: la scritta contenuta nel primo box e l’altra derivata dalla variabile inserita (punteggio). Dopo aver inserito il frammento di codice principale, proseguite e costruite le sezioni di codice che nascondono lo sprite non appena viene cliccata la bandiera verde. una volta fatto, salvate le modifiche e cliccate sulla Bandiera Verde per testare il vostro codice. Ecco! Avete appena terminato la logica che controlla il vostro gioco. rimane ora da decorare lo Stage con lo sfondo della città. per cambiare lo sfondo è sufficiente cliccare sull’icona Stage vicina alla collezione degli sprite. Spostate ora l’attenzione sull’area dove scrivete il codice e cliccate sul tab Sfondi in alto (si veda Fig.6). potete memorizzare diversi sfondi e utilizzando i blocchi in Aspetto potrete variarli facilmente. una volta nel tab, dovrete semplicemente cliccare su Importa per far apparire la finestra di dialogo; da questo box spostatevi nella cartella outdoors e selezionate lo sfondo night-city. ora che avete completato lo sfondo il gioco è completo, per cui salvate il tutto ed eseguite il codice.

Fate evolvere il giocopotreste voler aggiungere nuovi sprite e programmarli con la stessa logica, tuttavia impieghereste molto tempo e non sarebbe assolutamente divertente. potete semplicemente fare click con il tasto destro sullo sprite da clonare e selezionare Duplica in modo da duplicare velocemente, in pochi secondi, immagini e script associati. Dato che vorrete avere molti sprite, potreste provare nuove idee su ognuno di essi. perché quindi non pensare di farne uno piccolo e veloce e fare in modo che eventuali colpi a segno su questo aumentino considerevolmente il punteggio del giocatore? il miglior modo di far vivere questo gioco è di esplorare i blocchi e hackerarlo a piacimento. La natura dei blocchi vi consente sempre di provare velocemente nuove idee senza aver paura di perdere lavoro dato che basta staccare e riattaccare i blocchi che servono. Divertitevi a sperimentare con Scratch, è un grande strumento per imparare i concetti della programmazione e una fantastica applicazione per i bambini. LXP

Tipnon abbiate paura di lavorare sul codice, soprattutto durante il debugging. Se qualcosa non funziona come atteso, spezzate il codice in parti più piccole e risolvete il problema.

Fig.6 La tab Sfondi può contenere molti sfondi diversi

Fig.5 La prima parte dello sprite Game Over nasconde lo sprite all’avvio. L’altra è la sequenza finale di gioco

Risorse online per ScratchScratch è solo uno dei prodotti forniti dal MiT e l’istituto offre alcuni altri fantastici strumenti pronti all’uso come App Inventor, scaricabile all’indirizzo: http://appinventor.mit.edu/explore. Questo tool utilizza una struttura a blocchi simile a quella di Scratch e consente ai programmatori di costruire applicazioni Android funzionali e gradevoli alla vista senza dover imparare Java. App inventor è stato utilizzato in molte scuole del mondo per costruire app

scolastiche. un altro strumento che vale la pena provare è Blockly (http://bit.ly/1lACCDS). non si tratta di un prodotto MiT, tuttavia vale la pena menzionarlo data la sua particolarità. Blockly utilizza una struttura a blocchi per scrivere il codice, tuttavia può produrre codice anche per altri dispositivi ed esportarlo in accordo. per esempio, utilizzando un’interfaccia simile a quella di Scratch è possibile generare codice per JavaScript e python. per una

dimostrazione via Web, sulla quale potete fare tranquillamente i vostri esperimenti, e generare codice JavaScript, python e xML simultaneamente visitate l’indirizzo http://bit.ly/JHkXvX. È perfino disponibile una versione per esportare codice compatibile con Arduino. per scaricarlo visitate la pagina GitHub di BlocklyDuino: http://bit.ly/1bRCEz1. Tutte queste risorse sono fantastiche da provare e cosa ancora migliore sono assolutamente gratuite e libere.

LXP_140_88_91_LXF181_code_scratch 91 27/03/14 15:12

Page 92: 04_aprile2014

i Lug

I LUG rappresentano da sempre il punto di riferimento per chiunque voglia conoscere GNU/Linux. Ogni mese dedicheremo loro questo spazio per la comunicazione di nuovi progetti e appuntamenti.Se hai qualcosa da segnalarci scrivi a [email protected]

92 Linux pro 140

L’eco dei LUG

aBrUZZOanxaLUG - Lancianowww.anxalug.orgil Pinguino - TeramoNon disponibileMarsicaLUG - Marsicawww.marsicalug.it OpenLUG - L’aquilaNon disponibilePescara LUGwww.pescaralug.orgPineto LUGwww.pinetolug.orgPollinux LUG - Pollutri Non disponibileSSVLUG - San Salvo, Vasto, Termoliwww.ssvlug.orgSulmonaLUGhttp://sulmonalug.itTeateLUG - ChietiNon disponibileTeLUG - Teramowww.telug.itUser Group Valle rovetohttp://linuxvalley-os4.blogspot.com/

BaSiLiCaTaBasilicata LUG - Potenza e Materawww.baslug.org

CaLaBria3BYLug - Trebisaccewww.3bylug.tkBogomips - Bisignanowww.blug.itCastroLUGhttp://castrolug.altervista.orgCosenza hack Laboratoryhttp://hacklab.cosenzainrete.it/CSLUG - Cosenzahttp://cslug.linux.itCzLug Non disponibilehackLab Catanzarohttp://hacklab.czPiana LUG - Piana di Gioia Tauro Non disponibilereggio Calabria LUG http://rclug.linux.it revolutionary Mind www.revolutionarymind.org SpixLug - Spezzano albaneseNon disponibile

CaMPaniaaFr@Linux LUGwww.afralinux.netsons.orgafralug - afragolawww.afralug.comCasertaLUGwww.casertaglug.orghackaserta 81100www.81100.eu.orghackMeetnaples napoli hackLabwww1.autistici.org/hmniGLUG - napoli e provincia

www.iglug.orgirLUG - irpiniawww.irlug.itLUG-ischia www.lug-ischia.orgnaLUG - napoli www.nalug.netneapolis hacklabwww.officina99.org/hacklab.htmlPadulug - Paduli (Bn)http://linux.paduli.comSCaLUG - Scafati (Sa)http://xoomer.alice.it/scalug/Tuxway.org - Provincia di napoliwww.tuxway.orgVaLug - Vallo Linux User Groupwww.valug.itXaLUG - Salernohttp://xalug.tuxlab.org

eMiLia rOMaGnaaLFLUG - alfonsinewww.alflug.itBorgotaro LUG - Val Tarohttp://btlug.it/ConoscereLinux - Modena www.conoscerelinux.iterLUGhttp://erlug.linux.itFerrara LUG www.ferrara.linux.itFoLUG - Forlìhttp://folug.linux.itimoLUG - imolawww.imolug.orgLUGPiacenzawww.lugpiacenza.orgPanLUG - VignolaNon disponibilePLUG - Parmahttp://parma.linux.itravennaLUGwww.ravennalug.orgreLug - reggio emilia e provinciahttp://relug.linux.itriminiLugwww.riminilug.itS.P.r.i.Te http://sprite.csr.unibo.itUieLinux - Valle del rubiconewww.uielinux.org

FriULi VeneZia GiULiaGOLUG - Goriziawww.golug.itiGLU - Udinehttp://iglu.cc.uniud.itLUG Pordenonewww.pordenone.linux.itLugTrieste http://trieste.linux.itLUG [a] [L] [P] - aquileia www.alproject.org

LaZiOCiLUG - Frosinonewww.cilug.org

CLUG - Cassino http://cassino.linux.it/GioveLUG - Terracina www.giovelug.orgLa Sapienza LUG www.lslug.orgLatina LUGwww.llg.itLUG Privernum Volsca - Priverno (LT)www.pvlug.orgLUG rieti www.lugrieti.netLUGroma www.lugroma.orgLUGroma 3www.lugroma3.orgTorLUG - Università Tor Vergata - roma www.torlug.orgV.i.S.C.O.S.a. - Ciampino www.viscosa.org

LiGUriaGenuense Lug - Genova e d’intornihttp://genova.linux.itGinLug - Genova Sampierdarenawww.sennaweb.orgGovonis GnU/LUG - Provincia di Savonawww.govonis.orgSLiMP - Software Libero imperiahttp://slimp.it/TLug-TSL - Tigullio Ligurehttp://tlug.linux.it/

LOMBarDiaBGLug - Bergamo e provinciawww.bglug.itBGLug Valle Seriana - Valle Serianahttp://bglugvs.web3king.com/GL-Como - Comowww.gl-como.itGLUX - Lecco e provinciawww.lecco.linux.itGULLP - Gruppo Utenti Linux Lonate Pozzolowww.gullp.itispraLUG - isprahttp://ispralug.eu/LiFO - Varesewww.lifolab.orgLiFOS - Cinisello Balsamowww.lifos.orgLinux Var - Varesewww.linuxvar.itLoLug - Lodi e provinciawww.lolug.orgLug Bocconi - Milanowww.lug-bocconi.orgLugBS - Brescia e provinciahttp://lugbs.linux.it/Lug Castegnato - Castegnatowww.kenparker.eu/LugCastegnatoLugCr - Cremona e provinciawww.lugcr.itLug Crema - Cremahttp://filibusta.crema.unimi.it/LUGDucale - Vigevanowww.lugducale.it

L’eco dei LUG

LXP_140_94_95_lug.indd 92 31/03/14 17.02

Page 93: 04_aprile2014

Linux pro 140 93

L’eco dei LUG

LugMan - Mantova e provinciawww.lugman.orgLugOB - Cologne e ovest brescianowww.lugob.orgMoBLUG - Monza e Brianzawww.bubblesfactory.itOpenLabs - Milanowww.openlabs.itPOuL - Milanowww.poul.orgTiLug - Paviahttp://pavia.linux.itViGLug - Vignatewww.viglug.org

MarCheascolinux LUG/FSUG ascolihttp://marche.linux.it/ascoli/CameLUG - Camerinowww.camelug.itCMlugwww.cmlug.orgegloowww.egloo.orgFanoLUGwww.fanolug.orgFermo LUGwww.linuxfm.org/fermolug/GLM - Maceratawww.gruppolinuxmc.it/start/index.phpLUG ancona www.egloo.orgLUG Jesiwww.lugjesi.netLUG Marchehttp://marche.linux.itPDP Free Software User Grouphttp://pdp.linux.itPicenix - Picenohttp://picenix.altervista.orgSenaLug - Senigalliawww.lug.senigallia.biz

MOLiSeCampobasso LUGhttp://cb.linux.it/FrenterLUG - Larinonon disponibileSmaLUG - San Martinowww.smalug.org

PieMOnTeaBC Lug - alba/Bra/Carmagnolahttp://abc.linux.it/alLug - alessandria e provinciawww.allug.itBiLUG - Provincia di Biellawww.bilug.linux.itFaSoLi - alessandria e provinciahttp://softwarelibero.al.it/Gallug - Galliatewww.gallug.itGlugTO - Torino e provinciawww.torino.linux.itivLug - ivrea Linux User Groupwww.ivlug.itSLiP - Pinerolohttp://pinerolo.linux.it/ValSusinux - Val Susa e Val Sangonewww.valsusinux.it

PUGLiaBriLUG - Brindisiwww.brilug.itCapitanLUG - Capitanatawww.capitanlug.itLaTLUG - Latiano Linux User Groupwww.latlug.org

LUGarganowww.lugargano.itLUGBari - Bari e provinciawww.lugbari.orgMurgiaLug - Santeramo in Colle www.open-pc.eu/index.php/murgialug/SaLUG! - Salentohttp://salug.itTalug - Tarantowww.talug.it

SarDeGnaGnUraghe - Oristanowww.gnuraghe.orgGULCh - Cagliariwww.gulch.itPLUGS - Sassariwww.plugs.it

SiCiLiaCefaLug - Cefalùhttp://cefalug.linux.itcLUG - Caltanissettawww.clug.itennaLUGwww.ennalug.orgFreaknet MediaLab - Cataniawww.freaknet.orgLeonforte LUGhttp://leonforte.linux.itLUG Cataniawww.catania.linux.itLUGSr - Siracusawww.siracusa.linux.itMeLUG - Messinanon disponibilenorp LUG - noto, Pachino, rosolininon disponibilePaLUG - Palermohttp://palermo.linux.itrgLUG - ragusa e provinciahttp://ragusa.linux.itVPLUG Linux Planet - Provincia Caltanisetta www.vplug.itSputniX - Palermowww.sputnix.it

TOSCanaaCrOS - Versilia, Lucca, Massa Carrarawww.lug-acros.orgelbalinuxnon disponibileelsaGLUG - Val d’elsawww.elsaglug.orgFLUG - Firenzewww.firenze.linux.itGOLeM - empoli, Valdelsahttp://golem.linux.itGroLUG - Grossetowww.grolug.orgG.U.L.Li - Livornowww.livorno.linux.itGulP! Piombinohttp://gulp.perlmonk.orgGULP Pisawww.gulp.linux.itGuruatWork - Grosseto e provinciawww.guruatwork.comiPiOS - Bibbiena e valle del Casentinowww.ipios.orgLucca LUGhttp://luccalug.itL.U.G.a.r - arezzo

non disponibilePLUG - Prato e provinciawww.prato.linux.itPtLug - Pistoia e provinciawww.ptlug.orgSLUG - Siena e provinciawww.siena.linux.it

TrenTinO aLTO aDiGeLinuxTrent - Trentohttp://linuxtrent.it LugBz - Bolzanowww.lugbz.org

UMBriaOrvietoLUGwww.orvietolug.itLUG Perugiawww.perugiagnulug.orgTerniLUG www.ternignulug.org

VaLLe D’aOSTaSLaG - aostawww.slag.it

VeneTO0421ug - Provincia di Venezia www.0421ug.orgBLUG - Bellunohttp://belluno.linux.itFaber Libertatis - Padovahttp://faberlibertatis.orgGrappaLUG - Bassano del Grappahttp://grappalug.homelinux.net/iLC - informatica Libera Cittadellese - FSUGhttp://ilc.pd.itLegnagoLUGnon disponibileLinux Ludus - Villafranca (Vr)www.linuxludus.itLuganegawww.luganega.orgLUGSF - San Fidenzionon disponibileLUG Vicenzawww.vicenza.linux.itLugVr - Veronawww.verona.linux.itMontelLUG - Montebellunawww.montellug.itFSUG Padovawww.fsugpadova.orgroLUG - rovigohttp://rovigo.linux.itTVLUG - Trevisowww.tvlug.itVeLug - Veneziawww.velug.itaViLUG Schiohttp://www.avilug.it/doku.php

naZiOnaLiFSUGitaliawww.fsugitalia.orgGentoo Channel italiawww.gechi.itMajaGLUGwww.majaglug.netSkyLUGhttp://tech.groups.yahoo.com/group/skylug/

L’eco dei LUG

LXP_140_94_95_lug.indd 93 31/03/14 17.02

Page 94: 04_aprile2014

94 Linux pro 140

PROdentro il

SoftwareOgni mese Linux Pro vi offre i programmi e le distribuzioni più recenti su DVD

Gui

da

Ogni volta che troverete

questo simbolo in un articolo,

vorrà dire che i file citati

si trovano nel DVD allegato

alla rivista.

PC-BSD 10.0.1Sistema operativo

Spesso si pensa che i sistemi BSD siano riservati all’uso in ambito server o da parte degli amministratori di sistema. Eppure, come nel caso di Gnu/Linux, BSD offre opzioni

dai sapori diversi. una di queste opzioni è PC-BSD, sistema operativo pensato per il normale utente desktop, quindi è molto user-friendly e dispone di tutti gli strumenti classici che si usano quotidianamente su tutte le scrivanie del mondo. La versione 10.0.1 (un recente aggiornamento della release 10 uscita il 30 gennaio scorso, presente nel lato B del DVD di questo mese per computer a 64 bit) presenta infatti tutte le versioni più recenti degli ambienti desktop più popolari, come KDE 4.12.2 e Cinnamon 2.0. partendo da FreeBSD 10 come base, gli sviluppatori di pC-BSD hanno creato un sistema davvero versatile, stabile e ricco di strumenti. in fase di installazione (come potete vedere nel box qui a fianco) si può scegliere se procedere con l’installazione desktop (e in questo caso si possono installare tutti gli ambienti più noti ma anche quelli meno usati) o quella server; ovviamente, pur essendo praticabile la seconda via, quella preferita è la prima. in caso di necessità, è possibile eseguire una installazione testuale. una volta installato e configurato il sistema ci si accorge subito di essere in un ambiente molto simile (se non identico) a quello a cui siamo abituati noi utenti Gnu/Linux: il desktop “nasconde”

la natura BSD, che però rimane in sottofondo garantendo una grande stabilità. Sul desktop trovate tre icone: una è quella del pannello di controllo, il centro nevralgico di pC-BSD da cui potete controllare ogni aspetto del sistema; la seconda è il pDF del manuale (in lingua inglese), un’ottima fonte di informazioni se non avete mai usato pC-BSD in passato; la terza è, infine, AppCafe, un tool che semplifica la ricerca e l’installazione dei pacchetti – chiamati pBi nel caso di pC-BSD. Sempre in tema di programmi, all’interno del pannello di controllo trovate invece EasyPBI, un tool che vi consente di creare un file pBi partendo da un port (un “pacchetto”) di FreeBSD. Cliccando sull’icona di pC-BSD in basso a sinistra (con il KDE di default) si apre invece il classico menu che presenta i vari programmi installati divisi in categorie. insomma, se volete espandere le vostre conoscenze verso sistemi diversi da Gnu/Linux, pC-BSD è un ottimo inizio.

In evidenza

Installazione serverSe la versione desktop non vi basta, selezionate la voce Server (TrueOS) e scegliete quali tipi di server installare.

Codici d’esempioQuesto mese non è stato possibile inserire nel DVD il codice sorgente d’esempio dei vari articoli, per cui li trovate online ai seguenti indirizzi:

esempi di codice relativi alla guida sul linguaggio Fortran - http://bit.ly/1gSwCWU

esempio di codice relativo al tutorial su Arduino - http://bit.ly/1hSJbg4

Pannello di controllo pC-BSD include tutti gli strumenti necessari per configurare a dovere il proprio sistema e per installare nuovi programmi.

LXP_140_94_95_guidaDVD 94 31/03/14 17:38

Page 95: 04_aprile2014

Linux pro 140 95

Guida Software

1 Tipo di installazione inserite il lato B del DVD di questo mese nel lettore ottico e avviate quindi il computer. Al boot selezionate la prima voce disponibile, Graphical Install (o una delle altre due in caso di problemi). il primo passo consiste nella scelta della lingua di sistema.

Passo passo Installare PC-BSD

2 Desktop o server? Subito dopo avete la possibilità di scegliere se effettuare un’installazione di tipo desktop oppure server. nel primo caso l’ambiente installato di default è KDE 4.12.2, con tutti i suoi strumenti. nel secondo avete a disposizione database, server Web, pHp e altro ancora.

3 Ambienti e programmi Se il software selezionato in maniera predefinita non vi va bene, avete decisamente un’ampia scelta di ambienti grafici tra cui scegliere (LxDE, Mate, xfce, Window Maker, rarpoison, ecc.) e anche alcuni tool per la programmazione o utility come HpLip e i driver 3D di nvidia.

4 PartizionamentoEccovi arrivati a uno dei pochi punti critici del processo di setup: il partizionamento. il programma di installazione, comunque, compie un buon lavoro in autonomia. Volendo, però, avete modo di decidere ogni aspetto del processo, compresa la cifratura dei dischi.

5 Per utenti esperti Se premete il pulsante Personalizza potete accedere a queste opzioni avanzate, divise in base alle vostre competenze. C’è la possibilità di sfruttare le funzioni avanzate di ZFS o di scegliere le opzioni corrette in caso di installazione su dischi SSD.

6 Dopo il riavvioTerminata la copia dei pacchetti riavviate la macchina. Avete quasi terminato: al primo boot da hard disk il sistema vi chiede di definire la lingua, il fuso orario, la password dell’utente amministratore e un utente con cui usare pC-BSD normalmente. LXP

LXP_140_94_95_guidaDVD 95 31/03/14 17:38

Page 96: 04_aprile2014

Mensile - 2014 - 5,90 euro - 13,60 CHF

Direttore Responsabile: Luca Sprea - [email protected]

Direttore Editoriale: Stefano Spagnolo

Publisher: Mario Bosisio

Coordinatore redazionale: Massimiliano Zagaglia

Redazione: [email protected] Pieraccini (segreteria)Riccardo Reccagni (Supervisor grafico)

Realizzazione editoriale: Ventidodici

Iconografia e fotografie: Marco Coppola, iStockphoto

Contenuti tratti da “Linux Format” - Future Publishing Limited Plc., Bath (UK)

Pubblicità: Paolo Di Terlizzi - [email protected]

Abbonamenti (disponibili solo in versione con DVD)Si sottoscrivono in 2 minuti con 2 click via Web. Trovi l’offerta speciale di questo mese all’indirizzowww.myabb.it/linuxpro oppure scrivi ad [email protected]; puoi anche abbonarti via fax allo 02 700537672, per telefono allo 02 87168074 dal lunedì al venerdì dalle ore 9 alle ore 18. Il costo della chiamata da linea fissa è pari a una normale chiamata su rete nazionale in Italia. Da telefono cellulare il costo dipende dal piano tariffario in uso.

ArretratiSi sottoscrivono online all’indirizzo: www.spreastore.it/linuxproPer informazioni o richieste: [email protected] al fax 02.70.05.37.67.2

Stampa: Arti Grafiche Boccia S.p.A. - Salerno

Sprea Editori S.p.A. Socio unico Sprea Holding S.p.A.Via Torino, 51 20063 Cernusco Sul Naviglio (MI)

Tel (+39) 02.92432.1 Fax (+39) 02.92.43.22.36www.sprea.it - [email protected]

Consiglio di amministrazione:Luca Sprea (Presidente),Stefano Spagnolo (Vice Presidente - Amministratore Delegato), Mario Sprea (Consigliere)

Collegio sindacale: Roberto Bosa (Presidente), Susj Castenetti, Ivo Costa

Amministrazione: Anna Nese - [email protected]

Foreign rights: Gabriella Re - [email protected]

Marketing: Walter Longo [email protected]

Distributore per l’Italia e per l’Estero: Press-Di Distribuzione Stampa e Multimedia S.r.l. 20134 Milano

LINUX PROPubblicazione mensile registrata al Tribunale di Milano il 08.02.2003 con il n. 74 - Tariffa R.O.C. - Poste Italiane Spa - Sped. In Abb. Post. - D.L. 353/2003 (conv. In L. 27/02/2004 n. 46) art. 1, comma 1, S/NAISSN: 1722-6163

Copyright Sprea Editori S.p.A.La Sprea Editori è titolare esclusiva della testata Linux Pro e di tutti i diritti di pubblicazione e diffusione in Italia. I contenuti sono adattati e tradotti dai contenuti inglesi della pubblicazione “Linux Format”, edita da Future Publishing Limited Plc., con sede in Bath (UK). L’utilizzo da parte di terzi di testi, fotografie e disegni, anche parziale, è vietato. L’Editore si dichiara pienamente disponibile a valutare - e se del caso regolare - le eventuali spettanze di terzi per la pubblicazione di immagini di cui non sia stato eventualmente possibile reperire la fonte. Informativa e Consenso in materia di trattamento dei

dati personali (Codice Privacy d.lgs. 196/03). Nel vigore del D.Lgs 196/03 il Titolare del trattamento dei dati personali, ex art. 28 D.Lgs. 196/03, è Sprea Editori S.p.A. (di seguito anche “Sprea”), con sede legale in via Beltrami 21, 26100 Cremona. La stessa La informa che i Suoi dati, eventualmente da Lei trasmessi alla Sprea, verranno raccolti, trattati e conservati nel rispetto del decreto legislativo ora enunciato anche per attività connesse all’azienda. La avvisiamo, inoltre, che i Suoi dati potranno essere comunicati e/o trattati (sempre nel rispetto della legge), anche all’estero, da società e/o persone che prestano servizi in favore della Sprea. In ogni momento Lei potrà chiedere la modifica, la correzione e/o la cancellazione dei Suoi dati ovvero esercitare tutti i diritti previsti dagli artt. 7 e ss. del D.Lgs. 196/03 mediante comunicazione scritta alla Sprea e/o direttamente al personale Incaricato preposto al trattamento dei dati. La lettura della presente informativa deve intendersi quale presa visione dell’Informativa ex art. 13 D.Lgs. 196/03 e l’invio dei Suoi dati personali alla Sprea varrà quale consenso espresso al trattamento dei dati personali secondo quanto sopra specificato. L’invio di materiale (testi, fotografie, disegni, etc.) alla Sprea Editori S.p.A. deve intendersi quale espressa autorizzazione alla loro libera utilizzazione da parte di Sprea Editori S.p.A. per qualsiasi fine e a titolo gratuito, e comunque, a titolo di esempio, alla pubblicazione gratuita su qualsiasi supporto cartaceo e non, su qualsiasi pubblicazione (anche non della Sprea Editori S.p.A.), in qualsiasi canale di vendita e Paese del mondo. Il materiale inviato alla redazione non potrà essere restituito.

Così si fa la RPVi siete mai chiesti come nasce la Raspberry Pi, la scheda delle meraviglie? Siamo andati dietro le quinte per conoscere i segreti della sua produzione

Android sicuroIl vostro smartphone contiene tutti i vostri dati più preziosi, dalle foto ai contatti. Ecco come assicurarsi che la vostra privacy sia garantita bloccando gli accessi indesiderati

Pronto, Linux?Quali sono i migliori client VoIP per parlare con amici e parenti senza mai lasciare il computer? Abbiamo messo alla prova i contendenti più agguerriti per decretare i vincitori

E inoltre:

LINUXPRO

In edicola il 20 dicembre H a i u n a r g o m e n t o d a

LA STAMPA 3D È TRA NOI!

Ecco come funziona e quali meraviglie possiamo aspettarci da una tecnologia ai limiti della fantascienza...

NEL PROSSIMO NUMEROIn edicola il 15 maggio

H a i u n a r g o m e n t o d a p r o p o r c i ? S c r i v i a p r o s s i m a m e n t e @ l i n u x . i t

LXP_140_96_prossimamente.indd 1 31/03/14 17.05

Page 97: 04_aprile2014

ACCENDELA MENTE!

CRUCIPIXELCONCENTRATI E SCOVA LA FIGURA NASCOSTA

TEXAS HOLD’EMRIESCI A CHIUDERE LA PARTITA IN 30 SECONDI?

GRIGLIE LOGICHERICOSTRUISCI UNA STORIA INTRICATA A COLPI DI INTUITO

TEST D’INTELLIGENZAALLENA IL TUO CERVELLO IN UNA GARA CONTRO IL TEMPO

GIOCHIAMO A STELLE!LA REGOLA È FACILE: In ogni schema devi inserire un certo numero di stelle in modo tale che in ogni riga, ogni colonna e in ogni settore trovi posto il numero di stelle indicate sopra ad ogni schema. Inoltre le stelle non si possono trovare mai in caselle adiacenti, nemmeno in diagonale.

METTITI ALLA PROVA CON I GIOCHI DI LOGIKA, SUDOKU, KAKURO, GRATTACIELI, CRUCIPIXEL... E TANTI ALTRI!

IN EDICOLA OGNI 14 GIORNI

LOGIKA_207x285.indd 1 08/01/14 15:06

Page 98: 04_aprile2014

Con Aruba Cloud,

Traffico di reteillimitato

100 MBit/s

10 GBSpazio DiscoRAM

1GB1CPU 12€/mese

A meno di