Linuxpro 136 Dicembre 2013

March 26, 2018 | Author: Ipse Lute | Category: Linux Distribution, Free Software, Linux, Ubuntu (Operating System), Twitter


Comments



Description

∆ VMware Workstation 10 ∆ A confronto 5 gestori di collezioni ∆ FAQ: pump.io Diventa protagonista nel mondo Linux Pro Il futuro è Mobile 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 6 piattaforme per battere iOS Plasma Active Ubuntu Touch Tizen CyanogenMod Firefox OS Sailfish 15 pagine di pura programmazione Accademia del codice C++ Usa i puntatori smart Go Per creare codice concorrente Lancia i componenti Tre moduli extra per potenziare Raspberry Pi e creare progetti avanzati Nuvola lampo Trasforma velocemente il tuo codice in un servizio cloud con la magia di JuJu Linux Pro 136 - Mensile - 2013 - €5,90 - CHF 13,60 Pacchetti ad hoc In prova Dell XPS 13 Developer Edition A ll a l scoperta de progetitko sputn Con FPM crei file RPM e Deb anche se non sei esperto Finalmente è nato l’ultrabook con Ubuntu per chi programma 24 ore al giorno Il mistero dello swap Ti sveliamo come funziona e come impostarlo correttamente 365 giorni di puro rock. Acquistala subito, è un’edizione limitata A SOLO 8 90 , euro anzichè €9,90 La prima Agenda in realtà aumentata l Buono Sconto di € 1 ,00 PARTECIPA AL NOSTRO SONDAGGIO QUAL è il tuo cantante o gruppo preferito? Linux pro 136 - CODICE CAMPAGNA 264 RISPOSTA ...................................................................................................................................................... acquistala in edicola e pagala meno COMPILA CON I TUOI DATI COGNOME .................................................................................................................................................... NOME ............................................................................................................................................................. VIA .................................................................................................................................................................. Consegna questo coupon all’edicolante per avere l’Agenda Rock al prezzo speciale di euro 8,90 anzichè euro 9,90. Buono valido dal 28/12/2013 al 28/02/2014 Riservato ai signori rivenditori che ringraziamo per la collaborazione. Consegnate il presente buono al vostro ispettore Press-Di oppure inviatelo in busta chiusa a: PEW S.r.l. Via Torino, 51 - 20063 Cernusco sul Naviglio (MI) Per ogni buono PEW rimborserà €1,00 ................................................................................. N° ............................... cap ..................................... LOCALITà .................................................................................. prov ...................................................... e-maiL ............................................................................................................................................................. Editoriale Tirando le somme Eccoci giunti all’ultimo numero del 2013. Come si fa spesso in questi casi, proviamo a intavolare un consuntivo di quanto accaduto durante l’anno. Abbiamo scritto “intavolare” perché vorremmo che queste nostre parole facessero nascere una discussione con tutti voi. Beh, non vi possiamo ospitare tutti in redazione, ma via mail c’è spazio per chiunque. Dopo che per molto tempo si è cercato di spingere GNU/Linux sul desktop, questo sembra l’anno in cui anche gli ultimi sostenitori di questa idea abbiano seppellito l’ascia di guerra: il sistema nato dal progetto GNU e da Torvalds ha sì conquistato dei mercati, ma non quello delle scrivanie dei PC. Forse ci aveva visto bene Red Hat qualche anno fa, dismettendo per prima, se non ricordiamo male, la sua distribuzione dedicata ai desktop enterprise... Ed è anche questo il motivo, o uno dei motivi, per cui la parte di criminalità che si occupa di far soldi tramite mezzi informatici snobba fondamentalmente GNU/Linux e si dedica alla creazione di botnet bucando Windows, Mac, Android, router e chissà cos’altro. Difatti la sicurezza, assieme alla privacy, nel 2013 sono state al centro dell’attenzione. Tra siti defacciati, database di password rubate, app con malware e la NSA che si divertiva a spiare un po’ tutti, oramai il discorso sicurezza non è più una cosa per professionisti ma tocca pesantemente noi tutti. Anche i televisori e le automobili possono essere veicolo di minacce e spiate, per cui nel corso del 2014 cercheremo di tenerci e tenervi aggiornati, cercando di capire se in questo campo l’Open Source può essere d’aiuto. Tornando a parlare dei mercati conquistati dal Pinguino, se il desktop è causa persa, smartphone e tablet Android (sistema basato sul kernel Linux) dominano il mercato del Mobile per quantità e, in alcuni casi, anche per qualità. Visto che il settore è in forte crescita, in questa arena si sono buttate anche altre realtà che nel 2014 dovranno consolidarsi o sparire: ve ne presentiamo una panoramica nell’articolo di copertina di questo numero. Linux è leader incontrastato del mercato embedded (set-top box, NAS, router, firewall e così via) da molto tempo, ma da una parte di questo ambiente nel 2013 è esplosa una vera rivoluzione: i processori ARM e le schede di prototipazione/i piccoli computer “tascabili” funzionanti con Linux. Alcuni esempi? Raspberry Pi, Cubieboard, nuove versioni di Arduino (una anche in collaborazione con Intel), Gizmo, Olinuxino... potremmo andare avanti quasi all’infinito. Se pensate che nel corso del 2013 siano successe altre cose degne di nota, scriveteci senza timori. Prima di concludere e di lasciarvi alla lettura del numero sono però d’obbligo gli auguri di Buone Feste a tutti voi che ci leggete. contatti Domande alla redazione: [email protected] Abbonamenti: [email protected] Ora trovi Linux Pro anche su Android 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 Linux pro 136 1 Sommario Sommario LINUX PRO 136 LINUX PRO Benvenuti nel centotrentaseiesimo numero di Linux Pro, la vostra guida definitiva a Linux e al mondo Open Source In primo piano LINUX MOBILE Lo staff di Linux Pro vi aiuta a capire qual è il sistema operativo mobile Open Source più adatto a voi: tablet o smartphone, c’è sicuramente un sistema operativo perfetto per le vostre esigenze... 10 ABBONATI ALLA VERSIONE DIGITALE SOLO PER PC E MAC A SOLI 14,90 € DURATA ABBONAMENTO 1 ANNO 08 pump.io 2 LINUX PRO 136 www.sprea.it/digital Sommario 04 Newsdesk 07 Posta Realizzate e distribuite i vostri pacchetti 08 FAQ: pump.io 60 Juju Approfondimenti 10 Linux Mobile 66 ZFS Il filesystem flessibile per eccellenza 70 Raspbian 18 Ultrabook Dell Niente di meglio di un sistema operativo dedicato per gestire la Raspberry Pi! I segreti del progetto Sputnik Imparate a ricevere via mail solo gli avvisi di sistema che vi interessano davvero Gli “extra” migliori per la vostra RP 26 Intervista Eben Upton di Raspberry Pi Foundation 30 ReactOS Usare i programmi Win32 senza Windows 34 Trucchi per sysadmin Riconoscimento della rete, ID unico, guida rapida allo spazio di swap Accademia 76 Concetti di base Con SQL e un database relazionale strutturate la vostra collezione di musica rock e imparate a organizzare i dati 78 C++11 82 Go Il linguaggio perfetto per scrivere processi da eseguire in contemporanea Il ritorno di Motorola e Google Vulnerability Reward Program 86 Haskell 39 LG Nexus 5 Imparate a scrivere un programma con questo linguaggio funzionale Le caratteristiche dell’ultimo dei Nexus Recensioni 40 I test del mese ∆ Italo Vignoli di Document Foundation ci parla del LinuxDay 2013 ∆ Usare iSCSI La mappa dei LUG italiani 94 Guida software Guida al software presente nel DVD Gramps Streaming audio e video in casa Trisquel Scroprite come usare Gramps per creare un albero genealogico e ricostruire la storia della vostra famiglia Ruby on Rails Il framework Web senza difetti Firefox OS Scopri l’emulatore e le sue API Android Gestire texture e touchscreen con OpenGL Concetti Le basi della programmazione a oggetti Ubuntu libero? Cambia desktop! Le applicazioni Web sono più veloci, scalabili e sicure se usi MariaDB lightworks Effetti speciali e strumenti per l’editing professionale a tua disposizione LXP_133_cover 3.indd 1 Tizen Il futuro dei dispositivi mobili è sempre più Open Source Linux Pro 133- Mensile - €5,90 - CHF 13,60 Il database perfetto Inoltre… 6 antenne per la massima velocità wireless a 2,4 e 5 GHz in contemporanea gnome 3 Accedi alle opzioni avanzate con Frippery e Gnome Tweak Tool 17/09/13 14:41 Gramps Genealogia fai da te Trisquel L'Accademia del Codice ti svela tutti i misteri dell'arte del coding AVM Fritz!Box 3390 PRO dentro il Prova la tua rivista anche in dioitale digitale Raspberry Pi programmare! Quando trovi questo bollo negli articoli, cerca il software nel DVD 92 L’eco dei LUG PC-BSD 9.2, VMware Workstation 10, VMware Player 6, Da non perdere Scopri Trisquel, la distro più fedele ai dettami del Free Software ∆ RIVISTA GIOCHI ∆ PokerTH Ayon 0.8.2 Catfish 1.0.1 ∆ Choria ∆ INTERNET RIVISTA ∆ Firefox Codice 21 Colorful d’esempio 1.1 Android ∆ ProFTPD Codice Data Crow d’esempio 1.3.4d 3.12.5 Raspberry ∆ Codice ∆ PROGRAMMAZIONE GCStar 1.7 d’esempio Ruby ∆ Codice CPPCheck LiVES 2.0.6 d’esempio 1.60.1 Sysadmin ∆ BurgerSpace GTKDialog 0.8.3 Sixv 1.9.2∆ LiteIDE ∆ NetHogs ∆ RIVISTA Tellico 2.3.8 0.8.0 Consigli da esperti sull’uso dei puntatori Android 38 News Scegli l’ambiente grafico giusto per look e funzionalità! LATO B 1.1.3 Parcellite ∆ DISTRIBUZIONI ∆ BackBox Deft 8 33.09 Mageia (32 bit) ∆ pfSense IPFire 2.1 Sophos UTM LiveCD 3 2.1 ∆ Slackware Salix Xfce9.4 Untangle 14.0. 14.1(32 1(32e bit) 64 bit) 74 Log di sistema 22 Moduli hardware Libertà pura LATO A ∆ DISTRIBUZIONI DESKTOP ∆ OpenSUSE Fedora 19 (32 Mednafen 0.9.28 13.1bit) (32 bit) ∆ L’Open Source per il mondo mobile Pro IL DVD IN BREVE Lo strumento gestionale perfetto per gestire i servizi cloud Social network Open Source Diventa protagonista nel mondo Linux 24 GENNAIO 56 FPM Filo diretto con la redazione 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, DCb milanO - DisTribuTOre: Press-Di, milanO NUMER Tutorial Le novità del mondo Open Source AccAdemiA del codice O IL PROOSESSICM E IL La libera Trisquel La distro campionessa nella battaglia per il Free Software L a 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 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 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”. “Lo sviluppo di software libero porta con sé una grande responsabilità” 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, 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 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. L’ambiente grafico di Trisquel ricorda da vicino quello di Windows. La barra degli strumenti, infatti, ne è l’esempio I primi passi Alla 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 fonte Il 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 Usare Trisquel 6.0 Trisquel 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, 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, 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, ellaavuto maggior parte casi, noi non abbiamo problemi a fardei lavorare Trisquel sulle le nostre macchine, riscontrando conoscenze familiari non vanno oltre un notevole miglioramento nel panorama qualche grado di parentela. Quando dei driver free. L’installer, infine, è una versione però si inizia che a scavare ricerca degli avi modificata di quello trovate sualla Ubuntu. La sua uno che dei sistemi piùparticolarità lontani odidiessere parenti hanno trovato d’installazione più semplici da usare per chi fortuna in altri paesi in epoche passate, proviene dal mondo desktop ne ha fatto le coseprincipale si complicano non poco. Quali il candidato per l’uso in Trisquel. N sono le origini della famiglia? Dove vivevano? Da dove deriva vostro LINUX PROil133 17 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 24 LINUX PRO 133 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. 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://grampsproject.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” Cartella dedicata 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! Intervista 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 persona Al 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. Intervista È il giorno del pinguino Mediante l’opzione Vista ascendenza, avete una visuale chiara del diagramma genealogico È l'innovazione il tema centrale del Linux Day 2013 Ce ne parla Italo Vignoli, fondatore e consigliere di The Document Foundation C ome ogni anno, il Linux Day 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 innovazione tecnologica, di riferimento per l’innovazione è ancora molta nella vita quotidiana c’è 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, opportunità quasi che in Italia sono ancora un’opportunità 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 [email protected] 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 20 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 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 SEmPRE AL PASSO COn I TEmPI 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 consideravano il marketing del tutto inutile, ma questo non mi ha fermato: la combinazione simile), la maggior parte delle auto dotate di computer di bordo usa sempre Linux Embedded tra la qualità del prodotto e un’azione (ve lo immaginate Windows su un sistema di marketing aggressiva ha portato OOo frenante?), e infine quasi tutti i supercomputer a raggiungere una quota di mercato e un numero sempre più ampio di server superiore al 10% in Italia (i dati sono stimati) utilizzano Linux. Inoltre, non bisogna dimenticare e un ruolo sempre più visibile sul mercato. la spinta che ha dato all’innovazione il modello A partire dal 2006, dalla conferenza di Lione, dello sviluppo collaborativo tipico della comunità ho iniziato a contribuire al marketing del Software Libero. Oggi, non esiste una sola internazionale, tanto che nel 2008 sono azienda in grado di sostenere che il modello diventato uno dei leader del team con la di sviluppo chiuso è superiore, dopo che anche supervisione del budget. In questo modo, ho IBM e Microsoft - la prima ha inventato iniziato a conoscere un numero sempre più il concetto, e la seconda lo ha perfezionato ampio di persone, e sono stato coinvolto nelle hanno smesso di dirlo. Linux, e in accezione discussioni sull’opportunità di creare una più ampia tutto il mondo del Software Libero, ha fondazione indipendente (che sono diventate bisogno di maggiore coesione e di una strategia sempre più fitte a partire dalla conferenza di marketing e comunicazione in grado di di Pechino nel 2008). Nel 2009, quando contrastare gli investimenti delle grandi aziende. Oracle ha acquisito Sun Microsystems, Purtroppo, il frazionamento dei progetti - che in ho commentato dicendo che era la cosa alcuni casi è completamente inutile - è un fatto peggiore che sarebbe potuta succedere difficile da comprendere per tutti coloro che a OOo (in realtà mi sbagliavo, perché quello sono estranei alla comunità, e rappresenta un che è successo dopo è stato anche peggio). fattore di debolezza. Infine, è necessario che Ovviamente, i colloqui sulla fondazione sono il mondo del Software Libero cominci a pensare diventati sempre più fitti, e si sono trasformati seriamente a un modello di business sostenibile, in un piano di lavoro nel gennaio del 2010. perché altrimenti rimarrà sempre ostaggio delle A quell’epoca, ho scritto il marketing plan aziende e delle loro strategie di sopravvivenza di LibreOffice (senza sapere che si sarebbe “L'innovazione è un fattore che da sempre contraddistingue il Software Libero” 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 l 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, 2013 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 LINUx PRO 133 LINUX PRO 133 25 3 LINUx PRO 133 LINUX PRO 136 21 Newsdesk Ogni 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] Codec Il codec video H.264 è gratis! C isco, l’azienda nota per i propri dispositivi di rete, ha compiuto di recente una mossa a sorpresa. Infatti ha deciso di permettere il download gratuito dei binari del codec video H.264. Ma non finisce qui, perché si è perfino offerta di pagarne le spese di brevetto e le royalty a MPEG LA. Questa operazione di filantropia digitale ha delle conseguenze dirette sul mondo dell’Open Source, poiché da oggi sarà possibile implementare quel codec video in qualsiasi progetto, senza dover pagare alcun diritto. Lo scopo primario della mossa di Cisco è quello di spingere all’adozione dello standard WebRTC, sostituito con i codec VP8 da Google. Come sappiamo, il codec video H.264 è associato alla tecnologia ad alta definizione, come quella del Blu-ray. Quindi, con questa operazione, è evidente che lo standard WebRTC diventa molto più appetibile, così come è evidente che avrà una ricaduta positiva su tutto quanto riguarda l’alta definizione nel Web, dallo streaming video alle videoconferenze, campi in cui peraltro Cisco ha interessi diretti e a cui è comprensibilmente attenta. È quindi lecito supporre che moltissime aziende, soprattutto quelle minori, preferiranno affidarsi a questo standard piuttosto che sviluppare tecnologie Cisco ha tutto l’interesse a far diffondere lo standard WebRTC, perché controlla il mercato delle videoconferenze 4 LINUX PRO 136 in proprio, con una notevole riduzione dei costi. Uno dei primi esempi viene da Mozilla Foundation che ha deciso di implementare OpenH264 in Firefox. WebRTC fa funzionare applicazioni VoIP e per la condivisione P2P senza bisogno di plug-in L’anima FreeBSD di PlayStation 4 Era una voce di corridoio che correva già da tempo, tanto che, alcuni mesi fa, il team VGLeaks aveva addirittura mostrato le prime immagini del kit di sviluppo della nuova console di Sony, sottolineando il fatto che fosse animata da un software free con un bootloader Grub2. Ora che la nuova PlayStation 4 ha fatto la sua comparsa nel mercato americano, non ci sono più dubbi. Infatti sappiamo per certo che il suo sistema operativo, che si chiama Orbis, è basato su FreeBSD 9, che ci garantisce prestazioni di altissimo livello e una notevole stabilità. Questo risultato è stato ottenuto anche grazie ai driver che Sony e AMD hanno sviluppato insieme. Scendendo ancora più nel dettaglio, scopriamo che nella PlayStation 4 alberga un processore AMD APU a 8 core, affiancato da una scheda grafica AMD, serie 7800, con 8 GB di RAM GDDR5, un’ottima accoppiata per gestire anche i videogiochi più estremi. La console è corredata anche da un lettore Blu-ray, un disco fisso da mezzo TB, una porta Ethernet, il Bluetooth 2.1 con EDR, 2 porte USB 3.0 e un dispositivo Wi-Fi IEEE 802.11 b/g/n. Newsdesk Privacy Niente backdoor per Linux! S embra ormai che lo scandalo che va sotto il nome di Datagate e che vede come imputata la National Security Agency americana non abbia davvero più confini. Infatti, già lo scorso settembre, Linus Torvalds aveva rivelato al portale The Register che la famigerata NSA gli aveva chiesto di inserire una backdoor nascosta nel kernel Linux per poter accedere liberamente a tutti quei dispositivi che ne fanno uso e spiarne le operazioni, ora questa notizia è giunta al Parlamento Europeo per bocca di Nils Torvalds. Naturalmente, a quanto sembra, Linus Torvalds avrebbe rifiutato di cooperare con l’ente americano. A questo proposito, Rick Falkvinge, del Partito Pirata Svedese, ha voluto puntualizzare che l’inserimento di una backdoor nel kernel Linux sarebbe un’operazione quasi impossibile poiché, essendo Open Source, i suoi sviluppatori se ne accorgerebbero e la eliminerebbero. Tuttavia, proprio alcuni sviluppatori hanno fatto notare che, visto il gran numero di righe di codice che compongono un kernel come quello di Linux, non si può escludere a priori la presenza di una backdoor, come non si può escludere che la NSA abbia preso contatti anche con i creatori delle più importanti distribuzioni in circolazione, come Ubuntu, Fedora o Debian. Comunque la situazione sul versante Linux è di sicuro meno preoccupante rispetto a quella di sistemi operativi Il server di posta più usato è Open Source! 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à realtime, 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. Informazione a cura di Studio Storti Srl 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 come Windows e Mac OS X che, avendo un codice sorgente non Open, potrebbero nascondere molto più facilmente una porta nascosta. LXP NEW HOSTING Connettività di oltre 300 Gbit/s Backup giornalieri SiteAnalytics Georidondanza NetObjects Fusion® 2013 PHP 5.4 CDN Free Mode o Safe Mode MySQL SEO Newsletter Tool Mobile Site Builder PACCHETTI COMPLETI PER Più di 140 applicazioni PROFESSIONISTI Performance garantite Adobe® Dreamweaver® CS5.5 incluso 800 977313 (numero verde) OFFERTA SPECIALE 40 12 mesi da Drupal™, WordPress, Joomla!™, Typo3, Magento®… 6 € 10 € per il primo anno IVA escl.* € IVA escl.* 1and1.it * Pacchetti di 1&1 Hosting con 30 giorni soddisfatti o rimborsati e senza costi di attivazione. Tariffa ridotta per contratti con pagamento anticipato di 12 mesi, come ad esempio 1&1 Basic in offerta per il primo anno a 40 € IVA escl. (47,60 € IVA incl.) invece di 84 € IVA escl. (99,96 € IVA incl.). Dominio .com in offerta per il primo anno a 6 € IVA escl. (7,14 € IVA incl.), invece di 10 € IVA escl. (11,90 € IVA incl.). I costi per i contratti di dominio non sono rimborsabili. Per maggiori informazioni visita il sito 1and1.it. MASSIMA FLESSIBILITÀ Posta PER I TUOI PROGETTI WEB I nostri esperti offrono ogni mese i loro consigli di programmazione e di amministrazione del sistema 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. Proteggere i video Buongiorno redazione, da qualche tempo sto cercando di trasformare dei vecchi filmati su nastro così da metterli su DVD (facendone due copie di ognuno) ma ho il terrore che, con il passare degli anni, questi si possano rovinare. C’è un modo per proteggere i file con un checksum così che io mi possa accorgere quando iniziano a diventare illeggibili e correre ai ripari copiandoli di nuovo? Enrico R Ciao Enrico, creare un checksum relativo a un file, di qualunque natura esso sia, è davvero molto facile. Esistono peraltro diversi tipi di checksum, per esempio MD5, e lo puoi generare e salvare in un file di testo da terminale con il comando md5sum nomedelfile > CHECKSUM_nomedelfile Se però ti ritrovi con più file in una stessa cartella puoi usare un comando un po’ più complesso per fare tutti i checksum in una volta sola: md5sum >MD5SUMS $(find dirname -type f) Questo comando crea un file con dentro tutti i valori di controllo, che potrai verificare in seguito digitando md5sum --check MD5SUMS In alternativa ti suggeriamo l’uso di DVDisaster (http://dvdisaster.net) che potrebbe fare proprio al tuo caso, automatizzando il processo e fornendoti anche un mezzo per recuperare i file danneggiati. 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. TUTTO INCLUSO Dominio gratuito (.it, .com, .net, .org, .info, .eu) Potenza illimitata: spazio web, traffico, account e-mail, database MySQL ■ Sistema operativo Linux o Windows ■ ■ APP AD ALTE PRESTAZIONI Più di 140 popolari applicazioni (Drupal™, WordPress, Joomla!™, Typo3, Magento®…) ■ Supporto di esperti per ogni domanda ■ POTENTI TOOL ■ Software Premium inclusi: Adobe® Dreamweaver® CS5.5 e NetObjects Fusion® 2013 ■ 1&1 Mobile Site Builder ■ PHP 5.4, Perl, Python, Ruby MARKETING DI SUCCESSO ■ ■ ■ 1&1 Strumento SEO 1&1 Newsletter Tool 1&1 SiteAnalytics TECNOLOGIA ALL’AVANGUARDIA ■ ■ ■ ■ Massima disponibilità (georidondanza) Connettività di oltre 300 Gbit/s Fino a 2 GB di RAM garantiti 1&1 CDN powered by CloudFlare 1and1.it LINUX PRO 125 7 FAQ pump.io Cosa ne pensi di questo progetto? Scrivilo a [email protected] Alcune domande su... pump.io? Linux pro presenta un software open Source e il relativo protocollo in grado di rendere superflui Facebook e gli altri social network Cominciamo con una domanda facile. D Puoi darmi una definizione di pump.io? pump.io (http://pump.io) è un software R open Source progettato per ospitare e supportare buona parte delle attività che al momento si svolgono sui social network classici basati sul Web o sui dispositivi mobili. Evan prodromou lo ha lanciato alla fine del 2012 come sostituto di un altro dei suoi progetti, Statusnet, utilizzato per identi.ca, la popolare alternativa a Twitter. Come? Perché? Che cosa c’era che D non andava in StatusNet e Identi.ca? nulla, in realtà… tranne una cosa. il grande R successo del servizio di microblogging 8 Linux pro 136 identi.ca ha fatto sì che mancasse il tempo (o la domanda) per creare gli altri servizi indipendenti che costituivano la motivazione essenziale per lo sviluppo di Statusnet. per questo prodromou ha annunciato che nel 2013 Statusnet avrebbe chiuso i battenti a vantaggio di pump.io. in pratica, il codice di Statusnet rimarrà disponibile e c’è già chi ha annunciato che continuerà a supportarlo. identi.ca, invece, dovrebbe finire per diventare uno dei vari servizi di pump.io. D R Meno male; ma quali sono i principali vantaggi di pump.io? L’idea alla base del progetto è mettere al centro gli individui, più che i singoli siti sociali o applicazioni da essi usati per comunicare. per farlo, pump.io utilizza una licenza Apache, che ne faciliterà l’adozione da parte di quanti più prodotti possibile, una semplice interfaccia rEST e, soprattutto, il concetto di federazione. So che cos’è una licenza software; D ma che cosa significa REST? il representation State Transfer è un R protocollo aperto progettato per lo scambio di richieste tra client e server indipendenti e responsabile dello stato delle risorse generiche. Alcuni degli urL di Twitter o di Flickr sui quali clicchi per visualizzare la timeline di un utente sono esempi concreti di comunicazioni rEST. Tecnicamente, i vantaggi principali del pump.io FAQ protocollo REST sono la sua semplicità e il fatto che i suoi messaggi sono in formati aperti, come XML o JSON, facilmente leggibili da parte di numerosi software. Hai detto che pump.io utilizza REST solo D per una semplice API? È così. Pump.io si limita deliberatamente R a costituire poco più di una semplice interfaccia per la programmazione di server e applicazioni. La creazione delle applicazioni per il social networking viene espressamente delegata ai terzi. E per quanto riguarda la federazione? D Non c’entra nulla con Star Trek, immagino… No, infatti; ed è anche molto semplice R da spiegare. Per twittare occorre avere un account sui server di Twitter e collegarsi in qualche modo a essi. Tutti i vostri amici che desiderano leggere i vostri tweet devono disporre di un proprio account Twitter o almeno, nel caso dei tweet pubblici, visitare il sito di Twitter. D La federazione, invece, è l’esatto opposto di quanto avviene su Twitter, Facebook e Google Plus? Più o meno. La federazione, cioè l’interconnessione volontaria di pacchetti software diversi tramite standard aperti, pur avendo luogo su numerosi server completamente indipendenti, fa sì che le interazioni tra gli utenti appaiano come se avvenissero tramite un unico servizio e un’unica interfaccia. Uno degli obiettivi essenziali della federazione di pump.io è sostituire, almeno in parte, l’uso di infrastrutture centralizzate che sono a un tempo molto costose da mantenere per le imprese e molto facili da monitorare con sistemi tipo PRISM. R cosa si fa interessante; ma che cosa D siLapotrebbe fare concretamente con un account su un server pump.io? Un’occorrenza generica di pump.io permette a tutti gli utenti di postare materiale e a tutti i loro follower di visualizzare i flussi di attività risultanti. Il materiale in questione può essere qualsiasi informazione digitale, purché formattata correttamente: posizioni geografiche, eventi, testi di qualunque lunghezza, materiali multimediali o perfino azioni di gioco. Le attuali versioni di pump.io supportano già tutte le azioni di social networking più comuni, come quella di seguire gli amici o di assegnare il ‘mi piace’ ai loro post. R Come si può provare l’effetto del social D networking in stile pump.io? Ci sono due modi per farlo. Uno è installare R una copia del server. L’altro, molto più semplice, consiste nel caricare sul browser la pagina http://pump.io/tryit.html, che selezionerà a caso un server pump.io già aperto a nuovi utenti, reindirizzandovi il browser. Si tratta di una scelta deliberata, che ha il duplice obiettivo di distribuire il carico sul maggior numero di server possibile e di ‘imporre’ la federazione, diversamente da quanto avveniva con StatusNet e Identi.ca. In che modo potrò accedere al mio D account pump.io dopo averlo creato? Solo tramite un browser? No, non necessariamente. Al momento esiste già almeno un client pump.io per desktop, Dianara (http://jancoding. wordpress.com/dianara), che permette di utilizzare il proprio account senza un browser. Speriamo che seguiranno molti altri client, sia per desktop sia per i sistemi mobili. R Un attimo, però. L’idea centrale del social D networking è connettersi con altre persone… ma come faccio a trovarle, se non esiste un server centrale? Ottima domanda. In effetti, la natura decentrata di pump.io rende questa operazione un po’ più complicata di quanto lo sia su Facebook o altri servizi analoghi. Al momento, per seguire altri utenti, dovete prima di tutto scoprire qual è il loro server pump.io e collegarvici. Poi occorre cliccare prima su Log in (non chiedermi perché) e quindi sul pulsante Follow che apparirà. Le cose miglioreranno senza dubbio con il tempo ma difficilmente la scoperta degli amici diventerà immediata come su Facebook. Forse questo è un inconveniente inevitabile della federazione; ma se vuoi la mia opinione, ne vale la pena. R E per quanto riguarda i contenuti? D Facebook e Twitter usano un’unica casella di ricerca per tutti i contenuti postati dai loro utenti. Pump.io può offrire qualcosa del genere? No… anzi sì, più o meno. Ogni utente di pump.io ha una casella in uscita (outbox) che contiene le sue attività e una casella in entrata (inbox) che riceve notifiche relative a tutte le attività seguite tramite lo stesso account. Ogni utente può ovviamente effettuare ricerche all’interno di questi dati; non esiste però uno spazio unico che raccolga i contenuti di tutti. R Ok, evitare la centralizzazione è il principio D base di pump.io… ma se non sbaglio hai detto anche “Sì, più o meno”… Spiego che cosa intendevo dire. Per impostazione predefinita, tutti i server pump.io inviano tutti i contenuti dichiarati pubblici dai loro utenti a un sito in modalità firehose. Qualunque applicazione o motore di ricerca che si colleghi a questo sito può R ricevere tutti i messaggi pubblici. Il sito predefinito è http://ofirehose.com ma gli amministratori di pump.io possono scegliere una destinazione diversa o anche disattivare del tutto la modalità firehose. e i flussi di attività. D DiHaichecitatocosale siattività tratta esattamente? Le attività di pump.io sono semplici R descrizioni di ciò che avviene a o tra gli utenti. Purché formattata correttamente, qualsiasi cosa che abbia una struttura soggettoverbo-oggetto può essere un’attività di pump.io: per esempio, ‘John-ha caricato-immagini’ o ‘Connie-ha seguito-Mark’. Le attività più importanti creano nuovi oggetti, cioè i post. Le attività minori, invece, si limitano perlopiù a modificare oggetti già esistenti, compreso l’elenco delle relazioni tra gli utenti, il cosiddetto social graph. Sembra abbastanza semplice. Perciò, D immagino, i flussi sono semplicemente sequenze di attività effettivamente caratterizzate da un tema comune… Esattamente. Un’altra caratteristica generale dei flussi è che ognuno di essi è visibile solo al pubblico prescritto, che può essere costituito da un solo utente, dal mondo intero o da una via di mezzo qualsiasi, per esempio da tutti i membri di un elenco o di un progetto predefinito. Si può dire che l’unico compito di pump.io è distribuire i flussi di attività agli utenti definiti come loro destinatari. R pump.io personalmente, D suE perun usare proprio server, che cosa si deve fare? cominciare, occorre scaricare R ilPersoftware; senza entrare troppo nei dettagli tecnici, questo va utilizzato come un server Web in ascolto sulla porta TCP 80 o 443. Ovviamente, a meno di non disporre di un proxy di qualche genere, questo oscurerà qualunque server Web effettivo già in funzione sullo stesso indirizzo IP. Importante è anche stabilire quale driver utilizzare per il databank. Il termine ‘databank’ indica un livello di astrazione generale che supporta sia NoSQL sia i database relazionali. Per ora i database più indicati per pump.io sono Couchbase, MongoDB e Redis. Il social networking con pump.io sembra D interessante. Dove si possono trovare altre informazioni? Oltre alla homepage di pump.io, ti consiglio di visitare i siti http://activitystrea.ms e https://e14n.com/evan. Se volete gestire una vostra occorrenza di pump.io, invece, date un’occhiata all’articolo ‘Setting up pump.io on Debian Wheezy’ (http://saz.im/blog/pumpio. html) e adattate le sue indicazioni alla vostra distribuzione GNU/Linux. LXP R Linux pro 136 9 Linux Mobile LINUX MOBILE Scoprite la prossima generazione di sistemi operativi mobili Open Source insieme a noi I ndicare una data precisa è difficile; ma in un momento imprecisato degli ultimi due anni, Linux è divenuto il sistema operativo dominante per gli smartphone e, stando ai rapporti, negli ultimi due mesi ha iniziato a dare la scalata anche ai tablet. Tutto questo grazie ad Android. Android e Linux, d’altra parte, non sono proprio la stessa cosa. Il kernel è nato originariamente da un fork di Linux (benché i due siano ora sottoposti a una nuova fusione) e il fatto che vi siano incorporati elementi proprietari lascia l’amaro in bocca a più di un fautore dell’Open Source. Il mondo di Linux, comunque, non è rimasto a guardare mentre i giganti si affrontavano. Varie aziende e organizzazioni si sono date da fare per progettare nuovi sistemi operativi mobili basati su Linux. Alcuni sono ispirati a idee nuove, mentre altri costituiscono versioni aperte e modificabili di sistemi operativi progettazione e acume commerciale, potrebbe riuscire a conquistare il mondo inaugurando la nuova era di Linux mobile. Lo svantaggio del mercato mobile è che installare nuovi sistemi operativi sui dispositivi è molto più arduo che nel caso dei computer fissi. Gli standard sono meno numerosi e i nuovi sistemi supportano tipicamente solo un numero limitato di dispositivi. Il vecchio Nexus 7 è tra i modelli più popolari e abbiamo deciso di utilizzarlo come sistema di prova per questo articolo. Mentre scriviamo, solo uno dei sistemi in esame è effettivamente in vendita (Firefox OS); d’altronde, data la velocità con cui si evolve il mondo dei telefoni cellulari, quando leggerete queste pagine potrebbero essercene altri già disponibili. “Il mondo di Linux non è rimasto a guardare mentre si scontravano i giganti” 10 LINUX PRO 136 esistenti. Quasi certamente, alcuni dei sistemi qui in esame scompariranno silenziosamente senza aver lasciato particolari tracce; qualcuno, però, con la giusta combinazione di capacità tecniche, gusto per la Linux Mobile CYANOGENMOD Android così come lo conosciamo C yanogenMod, si basa su Android Open Source Project ed è un sistema operativo gratuito molto simile (dal punto di vista dell’utente) alla versione di Google. Abbiamo provato a trasformare il nostro fedele Nexus 7 in un dispositivo completamente Open Source per valutarne le prestazioni rispetto a quelle del normale cocktail di materiale libero e proprietario. L’installazione è risultata semplicissima; è bastato verificare che fossero installati gli strumenti necessari (il pacchetto android-tools-fastboot dei sistemi basati su Debian e Ubuntu), quindi abbiamo semplicemente seguito le istruzioni di www.cyanogenmod.org per il nostro dispositivo. Il risultato era molto simile a quello offerto dal nostro dispositivo appena estratto dalla confezione. Perfino lo sfondo presentava il classico tema di Android 4. Abbiamo trovato qualche opzione in più che permetteva di adattare maggiormente il dispositivo ai nostri gusti; ma dopo sei mesi di uso del Nexus, chi scrive confessa di aver finito per apprezzare le impostazioni predefinite di Android. Se il sistema operativo è simile, va detto che CyanogenMod non comprende alcuna delle applicazioni Google. Anzi, non c’è nemmeno Google Play, perciò non abbiamo potuto installarle. In realtà si è trattato di una scelta deliberata. Installare Google Play su CyanogenMod è possibilissimo; ma farlo significava venire meno alla nostra idea, quella di creare un ambiente Open Source sul nostro Nexus 7. Per prima cosa, volevamo un browser decente, senza il quale un tablet è sostanzialmente inutile. Il browser predefinito di CyanogenMod è brutto come il peccato e piuttosto spiacevole da usare. Su Android avremmo usato Chrome; ma per mantenerci fedeli al principio dell’Open Source, abbiamo optato per Firefox. Il file di installazione è disponibile su https://ftp.mozilla.org/pub/ mozilla.org/mobile/releases/latest/android/ multi. In questo modo, abbiamo provvisto il nostro tablet di un browser di prima scelta; alla peggio, avremmo avuto a disposizione un dispositivo più che accettabile. Per fortuna, però, non era finita qui. La mancanza di Google Play non ci ha affatto costretti a rinunciare agli app store. F-Droid (https://f-droid.org) offre infatti una quantità di software gratuiti per Android e CyanogenMod. Basta scaricare il file di installazione dal sito per poter installare sul proprio dispositivo innumerevoli software aperti. Certo, non è immenso come il negozio di Google, perciò se avete assoluto bisogno di un sistema che vi permetta di visualizzare in mille modi diversi le foto dei vostri gattini potreste andare incontro a una delusione. Sono comunque disponibili applicazioni per la maggior parte delle esigenze (avviso per gli utenti di Android: F-Droid è il luogo ideale in cui anche chi non è pronto a optare senza mezzi termini per l’Open Source troverà applicazioni non sovraccariche di pubblicità indesiderate). Ognuno usa il tablet in modo diverso ma per noi l’accesso ai file sulla cloud e al calendario sono fondamentali. A questo proposito eravamo già passati da Google a OwnCloud e avremmo potuto accedervi tramite un browser. Abbiamo però scoperto su F-Droid aCal e OwnCloud, che permettono di fare la stessa cosa. Come software per le mappe abbiamo optato per OSMAnd, che offre la funzione di navigazione sulle mappe non in linea che Google ha rimosso dal proprio prodotto. Le applicazioni musicali e di posta elettronica predefinite funzionavano a dovere, perciò per gli impieghi quotidiani potevamo dirci pienamente soddisfatti. Era sul piano meno strettamente produttivo, invece, che il nostro tablet lasciava un po’ a desiderare. F-Droid offre qualche gioco ma la disponibilità è tutt’altro che soddisfacente. Installando Firefox, però, abbiamo avuto accesso anche a Firefox Marketplace (https:// marketplace.firefox.com/search), che permette di installare varie applicazioni, giochi compresi. Questo offre ulteriori possibilità e si può sperare che la progressiva diffusione di Firefox OS renda disponibile un numero sempre maggiore di applicazioni. Diversamente dal caso di F-Droid, tuttavia, qui non tutte le applicazioni sono libere. A questo punto ci siamo concessi uno strappo alla regola. A seconda del punto di vista, potete interpretare questa decisione come frutto di pragmatismo o di debolezza. Nel corso degli anni abbiamo acquistato molti dei nostri giochi preferiti per Android tramite Humble Bundle, che è possibile installare su CyanogenMod esattamente come su Android. Non si tratta di prodotti Open Source ma se non altro sono privi di DRM e acquistandoli abbiamo dato sostegno a EFF, il che per noi è sufficiente. A questo punto, il nostro tablet rispettoso della libertà era perfettamente attrezzato e altrettanto utile di quanto lo era sempre stato con l’Android di Google. Salvo per l’assenza dei servizi Google, la maggior parte degli utenti non noterà la differenza tra CyanogenMod e Android “Per le operazioni quotidiane possiamo dirci soddisfatti” OSMAnd conserva tutte le mappe sul vostro dispositivo, che tuttavia possono occupare diverse centinaia di MB LINUX PRO 136 11 Linux Mobile UBUNTU TOUCH Un desktop controverso sbarca sul cellulare F in dalla sua nascita si dice che Unity è progettato per i touchscreen, perciò l’annuncio da parte di Canonical del lancio di una versione specificamente rivolta ai dispositivi Android touchscreen non ha sorpreso nessuno. Naturalmente, però, non tutti si aspettavano una versione specifica per i cellulari. La campagna Ubuntu Edge avrà forse fatto un buco nell’acqua ma Canonical confida ancora di poter lanciare un cellulare nel primo trimestre del prossimo anno e ha arruolato un numero notevole di partner. Al primo avvio farete immediatamente una scoperta che potrà rassicurarvi o deludervi: sul tablet non è presente il desktop Unity per cui Ubuntu è famoso (o famigerato). L’interfaccia utente Touch, tuttavia, si ispira chiaramente all’ambiente desktop. Fin dal primo avvio appare chiaro, inoltre, che si tratta di una release provvisoria, a dispetto del numero di versione 1.0. Difetti, funzioni non implementate e altri inconvenienti si sprecano. Il consumo di energia, per esempio, è talmente elevato che il Nexus 7 si scarica perfino con un utilizzo moderato e mentre è collegato alla presa di corrente. Questo può rappresentare un serio problema per chi utilizza il tablet lontano dalle prese. Di sicuro, comunque, non vi verrà freddo alle dita mentre lo usate. Per farvi un esempio dello stato attuale dello sviluppo, ecco che cosa è successo quando abbiamo provato a riprodurre musica. Il primo problema è portare la musica stessa sul tablet. Al momento, Ubuntu Touch non supporta alcun protocollo dati USB, perciò non potevamo trasferire alcunché da un computer. Allora abbiamo provato a scaricare la musica dal nostro server di backup OwnCloud… ma il JavaScript di OwnCloud ha mandato in tilt il browser. Alla fine ce l’abbiamo fatta utilizzando gli strumenti di sviluppo di Android per aprire una shell sul tablet (adb shell) e installare il pacchetto openssh-server, per poi trasferire i dati tramite SFTP (il nome utente/password è phablet/phablet). Solo a questo punto abbiamo scoperto che il lettore non era in grado di leggere i file MP3. Insomma, pare ovvio che ci sia ancora molto lavoro da fare da parte degli sviluppatori. Cerchiamo invece di capire quali informazioni questa release fornisca sul sistema operativo. Ubuntu Touch è incentrato sugli Scopes, che funzionano più o meno come sul desktop Unity. Il loro fine è offrire all’utente uno La sezione Featured degli scope Video e Music presenta una sguardo non solo carrellata di copertine. Se solo lo facesse per i nostri contenuti sul suo tablet ma e non per quelli che Canonical tenta di venderci… “Appare davvero chiaro che si tratta di una release non finale” 12 LINUX PRO 136 Con il Launcher di Ubuntu Touch, tutte le vostre app preferite sono accessibili con un gesto sull’intero universo digitale. Gli Scopes standard vi permettono di cercare raccolte musicali e video in commercio, nonché di visualizzare le vostre app e una schermata introduttiva. Riescono effettivamente a darvi un’idea del sistema (e sono esteticamente splendidi) ma non sono nemmeno lontanamente adeguati per un prodotto finale. Su un cellulare, questi elementi contano molto più che su un PC. Per il momento, si direbbe che gli Scopes siano lì solo per vendere contenuti (musica e film) agli utenti, più che per aiutarli a fare qualcosa. Speriamo che il problema venga risolto presto. È la sensazione prodotta dall’interfaccia utente a rendere veramente diverso Ubuntu Touch. La maggior parte delle operazioni si svolge facendo scivolare sulla schermata i comandi dal margine dello schermo. Gli utenti di Android 4 utilizzano già questo sistema per lanciare Google Now. Facendo scorrere la schermata dall’alto si accede al menu Settings; da destra si può accedere al Launcher e dal basso al menu Current Apps, con lo scorrimento da destra per il passaggio da una all’altra delle app in funzione. Quest’ultimo movimento offre un metodo decisamente soddisfacente per la gestione delle finestre: la sensazione è quasi quella di sfogliare le pagine di un libro. Questi gesti, tuttavia, sono risultati poco agevoli fino a quando non abbiamo estratto il nostro tablet dal suo involucro. Per quanto riguarda Ubuntu Touch è più o meno tutto. Forse vi aspettavate che parlassimo dell’app store… ma per il momento non ne esiste alcuno. Potete comunque installare software aggiuntivi collegandovi tramite il vostro computer con adb shell e utilizzando quindi il classico apt-get. Linux Mobile FIREFOX OS Un sistema operativo per cellulari nato dalle tecnologie Web M ozilla non è il tipo di azienda da cui ci si aspetterebbe un ingresso nel settore dei cellulari (almeno non come produttrice di sistemi operativi), eppure quella della casa produttrice di browser potrebbe essere una mossa azzeccata. Negli ultimi anni vi è stato un crescente passaggio ai browser basati su WebKit (come Chrome e Safari) e malgrado il suo arretramento sul mercato dei computer, Firefox rimane tuttora un nome importante. Nel campo mobile, però, è a malapena presente. È disponibile per Android ma la sua quota di mercato è talmente ridotta da risultare insignificante. Se la profezia tanto spesso ripetuta secondo cui il computer fisso è morto corrisponde a verità, allora anche Mozilla rischia grosso, a meno che non riesca a migliorare la sua posizione sul mercato mobile. E se anche, come appare probabile, il computer fisso continuerà a esistere, è chiaro che il contesto mobile sta crescendo e coprirà ben presto buona parte del traffico Web. Molti considerano Firefox OS un interessante progetto collaterale di Mozilla; secondo noi si tratta più che altro di una mossa indispensabile per conservare una posizione dominante nella guerra dei browser. Da un punto di vista tecnico, Firefox OS è interessante perché tutti gli elementi dell’interfaccia utente, dal Marketplace al dialer telefonico, sono programmati con tecnologie Web, come HTML5 con CSS e JavaScript. Il risultato è un’esperienza Web completamente omogenea. Il fatto che il sistema utilizzi tecnologie Web, tra l’altro, non vi obbliga a essere online per sfruttarlo al meglio. Il sistema offre vari metodi per scaricare applicazioni da utilizzare non in linea. E grazie a varie magie come WebGL, gli sviluppatori potranno approfittare anche dell’accelerazione grafica e di altre funzioni hardware. L’interfaccia del sistema operativo non è particolarmente rivoluzionaria ma di certo è semplice da usare. Il motivo potrebbe essere la decisione di Mozilla di indirizzare inizialmente la sua offerta ai dispositivi di bassa potenza e ai paesi in via di sviluppo. La struttura semplice di Firefox OS è ideale per i dispositivi di fascia bassa Le app e la guerra dei formati Un nuovo sistema operativo per smartphone, Open Source o proprietario che sia, si trova ad affrontare il classico problema dell’uovo e della gallina. Per conquistare gli utenti occorre offrire un sistema ricco di app; ma perché gli sviluppatori creino le app, occorre avere già degli utenti. I sistemi operativi liberi esordienti stanno affrontando il problema in modo nuovo (almeno per il contesto mobile). Stanno cioè facilitando la creazione di app che funzionino su diversi sistemi operativi. Il primo metodo, nonché il più indicato per tale obiettivo, è HTML5. Benché progettato per la creazione di Web App, questo ecosistema è ormai abbastanza potente da consentire la creazione di numerose app per cellulari; anzi, Firefox OS sta scommettendo sulla sua capacità di rimpiazzare tutte le app native dei cellulari. Siamo solo agli inizi; ma stando alle voci che circolano tra gli sviluppatori di sistemi operativi, sembra che il formato sarà il medesimo anche per tutti o quasi tutti i sistemi operativi Open Source. Agli sviluppatori basterà quindi programmare una sola volta per creare prodotti compatibili con qualsiasi tipo di cellulare, da Android ai modelli ZTE con Firefox OS. Le app Android utilizzano la virtual machine Dalvik e funzionano anche in Alien Dalvik, creato da Myriad. Per ora solo Jolla ha confermato la sua intenzione di utilizzarlo, per cui gli utenti di Sailfish potranno installare gli APK come su un dispositivo Android. Difficilmente sarà disponibile il mercato Google Play ma altre fonti come F-Droid e Humble Bundles dovrebbero funzionare. Anche Amazon ha reso disponibile per lo scaricamento il suo store Kindle (anch’esso basato su Dalvik e sul formato APK). Perciò, in teoria, gli utenti di Sailfish avranno accesso a questo ecosistema fin da subito (anche se va detto che non abbiamo ancora in mano uno dei dispositivi in questione). Jolla, Ubuntu Touch e Plasma Active sono tutti basati su Qt e anche Tizen dispone di una versione di questo strumento, benché esso non sia supportato a livello ufficiale. Ciò significa che qualsiasi software sviluppato con Qt dovrebbe essere convertibile per i tre modelli in questione. Dovrebbe essere sufficiente riconfezionarlo utilizzando il formato appropriato. Un ecosistema va ben oltre la possibilità di far funzionare un determinato software su un determinato dispositivo. L’essenziale è la creazione di un’esperienza utente che risulti omogenea. Le app Android su Sailfish risulteranno un po’ come le app GTK su KDE: funzioneranno ma sembreranno fuori posto. La possibilità di utilizzare app indipendentemente dal sistema operativo è un buon inizio ma la capacità di persuadere gli sviluppatori a creare app native sarà decisiva per un successo a lungo termine. LINUX PRO 136 13 Linux Mobile PLASMA ACTIVE PLAMSA KDE per dispositivi mobili I dispositivi mobili, dagli iPhone agli Android, sono per la maggior parte progettati anzitutto per il consumo di contenuti. Sono perfetti per visualizzare video, navigare sul Web o ascoltare musica; lo sono meno per quanto riguarda la creazione di contenuti. Questo non rappresenta un problema in sé, dato che alla maggior parte di noi non interessa usare questi strumenti per scrivere saggi o programmare: per questo esistono i computer. L’ideale sarebbe un dispositivo in grado di fare da ponte tra i due ambiti; un device, cioè, abbastanza semplice da poter essere utilizzato con un’interfaccia touchscreen e abbastanza potente da permettere di svolgere operazioni serie. È proprio questo l’obiettivo che la comunità di KDE, insieme a BasysKom e open-six, si prefigge con Plasma Active. Si tratta di una versione del popolare desktop KDE creata per i dispositivi mobili. Dato che trae origine da KDE, offre tutte le applicazioni di quest’ultimo, compreso Calligra Suite. Già al primo sguardo il retaggio di KDE appare evidente, in particolare dal tema usato dall’interfaccia utente e dal set delle icone. Non c’è un menu K per il lancio della applicazioni, né una lista delle finestre. Le azioni principali si effettuano invece trascinando verso il basso la barra superiore (con una modalità simile all’accesso alle notifiche in Android). Qui trovate un elenco delle app aperte e una griglia delle applicazioni installate completa di sistema di ricerca. Strano a dirsi per un prodotto della comunità di KDE, il risultato ricorda un po’ la Dash di GNOME 3. Il menu a tendina, che comprende le funzioni più complesse, funziona ottimamente e a nostro parere offre il miglior sistema di gestione delle finestre tra tutti quelli dei sistemi operativi mobili a noi noti. Il meglio di Plasma Active, però, sono le Attività (Activities). Come quelle di KDE, equivalgono a desktop virtuali potenziati in cui potete combinare widget e applicazioni per creare ambienti desktop separati passando “Plasma Active assomiglia più di tutti gli altri a un sistema operativo desktop” Tra tutti i sistemi da noi provati, Plasma Active è quello che ricorda più l’ambiente desktop, in virtù delle sue numerose funzioni 14 LINUX PRO 136 Ecco Kubuntu Active: è chiaro che Canonical non ha puntato tutto su Ubuntu Touch nella corsa dei cellulari agevolmente dall’uno all’altro. Per attivare le Attività è sufficiente trascinare un pulsante dal lato destro dello schermo e quindi selezionare quella prescelta all’interno di un elenco. È un gesto che risulta naturale su un dispositivo touchscreen. Le Activities hanno i loro sostenitori in ambito desktop ma a quanto pare non sono molti gli utenti di KDE che le trovano particolarmente utili. Molti finiscono per fare confusione e non abbiamo ancora visto una distribuzione che comprenda un set di Attività predefinite veramente utili. Che sia l’arena mobile quella in cui le Attività daranno il meglio di sé? Unico tra i sistemi operativi mobili da noi esaminati, Plasma Active utilizza distribuzioni simili a quelle delle versioni server e desktop. Rimane da vedere se una o l’altra di queste distribuzioni tenteranno seriamente di proporsi come prodotti di qualità per i dispositivi mobili. Come nel caso degli Scopes di Ubuntu Touch, la capacità di rendere disponibili le attività giuste per impostazione predefinita sarà decisiva per il successo di Plasma Active. Difficilmente gli utenti avranno voglia di configurarle, se non percepiranno immediatamente la loro utilità. E come Ubuntu, in questo campo finora KDE non ha combinato granché di buono nel contesto desktop. Plasma Active assomiglia a un sistema operativo desktop più di qualsiasi altra soluzione qui in esame. Dobbiamo forse considerarlo un concorrente più pericoloso per Surface Pro di Microsoft di quanto lo siano i tablet Android e iOS? Di certo, a nostro parere è quello che ha le maggiori potenzialità di colmare il divario tra i dispositivi finalizzati al consumo di contenuti e quelli finalizzati alla loro creazione. La possibilità di cambiare attività a seconda di ciò che si sta facendo potrebbe essere un vero vantaggio. Per esempio, si potrebbe impostare un’attività per il controllo della posta elettronica e per la navigazione sul Web e un’altra per gli impieghi più tipici di un computer fisso, da svolgere con una tastiera collegata. Forse a causa del maggior numero di funzioni, Plasma Active è l’unico tra i sistemi da noi provati per il quale il nostro Nexus 7 è sembrato veramente troppo piccolo. Lo spazio extra offerto da un tablet da nove o dieci pollici aiuterebbe a sfruttare al meglio questo ambiente, così come una buona custodia e una tastiera. Linux Mobile SAILFISH Il sistema nato dalle ceneri di Nokia… J olla, un’azienda finlandese fondata da ex-dipendenti di Nokia, sta producendo un nuovo sistema operativo per cellulari utilizzando tecnologie Qt sulla base della piattaforma Mer. Le analogie con Plasma Active, tuttavia, finiscono qui. Sailfish (la soluzione di Jolla) è un sistema operativo squisitamente mobile, privo di tutte le funzioni complesse di Plasma Active. Come per Ubuntu Touch, la principale attrattiva sta nell’interfaccia utente: i progettisti e i tecnici di Jolla, come quelli di Canonical, hanno letteralmente ripensato al modo di interagire con i dispositivi. Jolla ha predisposto un set di comandi molto più ricco di quelli usati da Android e iOS. Forse, tuttavia, gli aspetti più interessanti sono la schermata che presenta le app in funzione e la possibilità di creare temi sulla base di immagini. La prima sostituisce a grandi linee la schermata Home della maggior parte dei sistemi operativi mobili ma funziona come un window switcher potenziato. La seconda vi permette di modificare l’interfaccia sulla base dei colori dell’immagine di sfondo. Il tema caratterizza sia le app in funzione, sia la schermata Home e gli app picker. Jolla scommette sulla voglia degli utenti di personalizzare gli schemi cromatici dei loro dispositivi e i primi modelli saranno provvisti di custodie intercambiabili di colori diversi. Non abbiamo avuto modo di mettere le mani su uno di questi dispositivi ma i video online e il manuale video di Sailfish, che fa parte del pacchetto di sviluppo per le applicazioni, mostrano un’elegante interfaccia Qt che dovrebbe risultare deliziosa da usare. “Il manuale video di Sailfish mostra un’elegante interfaccia Qt” Ciascun rettangolo corrisponde a un’applicazione in funzione, che potete controllare direttamente dalla schermata Home Le opzioni alla prova Come ricordato all’inizio, abbiamo provato tutti i sistemi su un vecchio Nexus 7. Questo modello è stato scelto per una ragione: non solo è supportato da più sistemi operativi di qualsiasi altro dispositivo portatile ma offre anche le migliori opzioni per avviarli. Ci riferiamo in particolare a MultiROM. Questo boot manager ci ha permesso di installare al volo vari sistemi operativi sul tablet e di avviarli separatamente, in modo analogo a quanto reso possibile da GRUB su un PC. MultiROM non ha un sito Web in quanto tale. Tutte le informazioni importanti (nonché i link ai sistemi operativi da installare) si trovano invece sul thread del forum XDA Developers (http://bit.ly/16EQdAf). Mentre scriviamo, questo sistema funziona solo sul vecchio Nexus 7 ma lo sviluppatore sta lavorando a una versione destinata al nuovo tablet, che potrebbe già essere disponibile quando leggerete queste pagine. Troverete tutte le informazioni più aggiornate all’indirizzo http:// tasssadar.github.io/mrom_status. È disponibile un simulatore di Firefox OS sotto forma di add-on per Firefox. Non consente di farsi un’idea precisa del sistema, in quanto non è possibile utilizzarlo come telefono e il mouse non è un sostituto ideale per il touchscreen; se non altro, vi permetterà di intuire di che si tratta. È poi disponibile un’immagine virtuale di Tizen; si trova nel suo pacchetto di sviluppo, a disposizione sul sito ufficiale (http://bit.ly/16o6mQj). Troverete infine versioni CD di Plasma Active sul sito di SUSE Studio (http://bit.ly/14DcmkN) e sul sito con le immagini ISO di Ubuntu (http://bit.ly/16o6Iq5). LINUX PRO 136 15 Linux Mobile TIZEN Direttamente dai forzieri di Samsung & C L a maggior parte dei sistemi operativi qui in esame sono prodotti da piccole aziende (come Sailfish di Jolla) o da organizzazioni che muovono i primi passi nel campo mobile (come Firefox OS di Mozilla o Ubuntu Touch di Canonical). Tizen è quindi vistosamente anomalo, in quanto sviluppato da colossi come Samsung e Intel, che insieme hanno dato vita alla Tizen Association sotto la supervisione di Linux Foundation. Se i soldi e il dominio sul mercato fossero sufficienti per fare il botto nel campo dei sistemi operativi mobili, il successo di Tizen sarebbe assicurato. Le cose però non stanno affatto così e per averne la prova è sufficiente guardare alle difficoltà che Microsoft e Nokia stanno incontrando nel promuovere Windows Phone in un mercato che mostra scarsi segni di interesse. L’interfaccia di Tizen è nitida e facile da usare; ma francamente è difficile trovarvi qualcosa che la renda preferibile ai prodotti esistenti, se non forse il fatto che ha buone prestazioni sui dispositivi di fascia bassa. Il nostro lato cinico ci indurrebbe a sospettare che il fine essenziale di Tizen sia collocare Samsung in una posizione migliore di quella di Google per la trattativa su Android. Il nostro lato meno cinico, invece, è entusiasta delle possibilità che Tizen offre come potente soluzione embedded. La presentazione del sistema operativo dichiara: “L’obiettivo di Tizen è introdurre una solida esperienza omogenea su più dispositivi quali smartphone, tablet, Smart TV, PC e strumenti di infotainment per veicoli, con un’enfasi sui sistemi mobili”. Non possiamo fare a meno di sospettare che il successo del sistema dipenderà proprio da dispositivi come Smart TV e strumenti di infotainment per DESKTOP LINUX L’alternativa pratica F inora ci siamo occupati di sistemi operativi creati specificamente per i dispositivi mobili; ma nulla vi vieta di utilizzare una versione normale di Linux su un tablet (lo schermo di un cellulare è un po’ troppo piccolo per un desktop normale). Enlightenment è una delle La nitida interfaccia di Tizen funziona ottimamente; ma il suo fascino basterà ad attirare gli utenti verso il nuovo sistema? veicoli. Si tratta di un settore sottosfruttato, diversamente dai cellulari; e un sistema Open Source potrebbe offrire benefici reali sia alle case produttrici, sia ai consumatori. alternative più popolari che abbiamo provato. Fatta eccezione per qualche inconveniente, tutto funziona a dovere. Le consuete applicazioni funzionano e le cose si svolgono nel solito modo. Tuttavia, appare ben presto chiaro che c’è una ragione se tutti i principali operatori hanno deciso di sviluppare sistemi touchscreen specifici. I menu gerarchici, praticissimi per le interfacce basate sul mouse, risultano innaturali e scomodi nel contesto touchscreen. Il fatto che non possiate vedere la posizione effettiva del puntatore attraverso il vostro dito è un problema. E quanto alle funzioni che si prestano al touchscreen e non al mouse (come il gesto pinch per la zoomata), di norma non sono presenti in queste interfacce. Le barre di scorrimento sono un altro elemento che risente negativamente della transizione dal mouse al touchscreen. L’uso di un ambiente desktop su un tablet è una buona idea che funziona anche sul piano pratico; solo che funziona meno bene rispetto alle alternative. Ubuntu dimostra che interfacce utente simili funzionano in vari formati; ma continuiamo a non essere convinti che un unico ambiente possa funzionare a dovere in entrambi i formati desktop e mobile. Gli schermi ad alta definizione dei tablet odierni, tuttavia, offrono un livello di dettaglio sufficiente per gli impieghi in questo formato. Difficilmente sceglieremmo un sistema desktop come interfaccia principale per il nostro tablet; potrebbe però servire come utile interfaccia secondaria, da utilizzare qualora siano disponibili una tastiera e un mouse. Enlightenment funziona a dovere su un tablet ma l’interfaccia può risultare scomoda da usare senza mouse 16 LINUX PRO 136 Linux Mobile LA SFIDA In che modo potranno trionfare i sistemi operativi Linux P er preparare questo articolo abbiamo installato quattro dei sei principali sistemi operativi mobili Linux su un tablet da 7 pollici. Un quinto (Firefox OS) è già disponibile sui dispositivi in commercio. L’unico che non abbiamo avuto modo di provare su un tablet fisico è Sailfish, che peraltro dovrebbe essere ben presto disponibile (forse già quando leggerete queste pagine). Nel complesso, questi sistemi rappresentano il frutto del lavoro di una mezza dozzina di aziende e di innumerevoli volontari. Ciò che ci ha più colpiti è stata la varietà dell’offerta. Con l’eccezione di CyanogenMod, questi sistemi non sono semplici cloni di soluzioni già esistenti ma autentiche innovazioni. Offrono agli utenti una scelta reale relativa a come far funzionare i loro dispositivi mobili e consentono di personalizzare l’esperienza utente in funzione di impieghi specifici. Naturalmente, oltre un decennio di lenta diffusione di Linux nel campo dei desktop ci ha insegnato che questo non basta a garantire il successo. Gli attuali pezzi grossi del mercato, Google e Apple, sono due delle più grandi aziende del mondo, che difficilmente daranno il benvenuto a nuovi concorrenti, specie se questi ultimi inizieranno a ottenere buoni risultati. Sotto alcuni aspetti, il mercato mobile di oggi è molto simile al mercato desktop dei primi anni 2000, almeno dal punto di vista dei sistemi operativi Open Source. Per trionfare, i sistemi mobili Linux devono imparare dagli errori commessi da Linux nell’arena del desktop. Devono essere disponibili nei negozi, promossi da investimenti pubblicitari e risultare attraenti per l’utente comune, non solo per lo “smanettone”. In breve, non devono solo essere migliori dei prodotti rivali: devono essere anche percepiti come tali da un’ampia fetta del mercato. LXP LINUX PRO 136 17 Progetto Sputnik ALLA SCOPERTA DEL PROGETTO SPUTNIK L’ULTRABOOK DI DELL CHE MONTA UBUNTU Linux Pro ha provato il Dell XPS 13 Developer Edition e ha parlato alla mente dietro al progetto A metà dello scorso anno hanno iniziato a girare delle voci in Rete riguardo una collaborazione tra Dell e Canonical per la creazione di un ultrabook con Linux. Si chiamava Progetto Sputnik. All’interno di Dell, l’istigatore del progetto era Barton George, Director of Cloud Developer Programs dell’azienda americana. Per saperne di più abbiamo scambiato quattro chiacchiere con lui così da scoprire cosa si aspetta dal progetto e come viene visto l’hardware associato a Linux in Dell. Inoltre abbiamo avuto la fortuna di poter provare per un po’ di tempo il frutto di questa collaborazione, usando l’ultrabook per prendere appunti nelle conferenze e per i nostri tutorial: dalla programmazione al cloud, passando da giochi e tool 18 LINUX PRO 136 audio. Abbiamo portato al limite la durata della batteria e agito sul sistema operativo installato per ottenerne il massimo. Un ultrabook è la versione più leggera e piccola di un portatile, ha la stessa portabilità di un netbook ma è dotato della potenza dei computer più grandi. Sono perfetti per i programmatori che vogliono portare avanti il proprio lavoro durante i viaggi, oltre che per controllare semplicemente le email. Dotato di una buona CPU e di parecchia memoria, un ultrabook vi consente di fare cose come la compilazione di grandi rami di codice, eseguire macchine virtuali e giocare con videogiochi avidi di risorse; tutto questo va oltre le capacità di un netbook, di un portatile di fascia bassa o di un tablet. L’ultrabook generato Progetto Sputnik dal progetto Sputnik, il Dell XPS13 Developer Edition, è esattamente una macchina di questo tipo; è pensata espressamente per gli sviluppatori, ma le sue caratteristiche sono in grado di affascinare qualunque fan di GNU/Linux che brami una macchina potente e facilmente portabile. Certo, potete installare Linux su quasi qualunque computer portatile o meno, ma molti di noi lo fanno più per necessità che per scelta. Preferiremmo poter acquistare dell’hardware in cui Linux sia ufficialmente supportato, costruito dai maggiori vendor e non essere costretti a spiegare al venditore perché non ci serve un antivirus. Specialmente quando il nostro lavoro dipende dall’hardware. Questo è il motivo per cui il progetto Sputnik di Dell è molto importante. È un ultrabook molto ben progettato dal terzo produttore di PC al mondo e monta di default Ubuntu Linux. Barton ci ha spiegato i motivi che lo hanno spinto a far nascere il progetto: “L’idea iniziale arriva da Stephen O’Grady di RedMonk (nota azienda di analisti del settore con un approccio anticonformista alla tecnologia)”, ci ha detto. “Eravamo focalizzati sul Web, e volevamo capire come vendere a Google, Facebook fino ad arrivare alle start-up e alle camere dei dormitori”. “Abbiamo coinvolto Stephen e parlavamo di questo, e l’idea era ‘Si tratta di sviluppatori’. È così. Riguarda gli sviluppatori perché solo loro quelli che ‘fanno’ per davvero. Quindi una mossa tattica che suggerì Stephen fu ‘Ehi! Perché non prendiamo un portatile Dell e ci mettiamo dentro Ubuntu?”. “Io pensai ‘idea grandiosa, ma non si potrà mai attuare in Dell’”, spiega Barton. “Se andassi a parlarne con i responsabili, essi mi direbbero ‘Quanti milioni di pezzi venderai nella prima settimana?’ e la mia risposta sarebbe ‘Beh, non mi avvicino neanche al milione’. Quindi accantonai l’idea”. “Poi, 3 o 4 mesi più tardi successe nacque in Dell un fondo di incubazione per scovare nuove idee nascoste nelle teste delle persone dell’azienda. Quindi fui il primo ad alzare la mano, e ottenni un pollice alzato”. Dimmi come ti piace “L’idea iniziale riguardava solo un portatile e il fato ha voluto che la settimana prima che presentassi la mia proposta, arrivasse Mark Shuttleworth”, continua Barton. “Egli venne da noi e parlò; poiché vendiamo Ubuntu su alcuni dei nostri sistemi, e avendo già lavorato in passato con Mark, avevamo un certo rapporto. Sono così riuscito a rubargli un po’ di tempo e a dirgli ‘Ehi, cosa ne pensi di questo?’. Egli rispose ‘Mi piace. Ma… la cosa veramente bella è che possiamo prenderlo e collegarlo alla cloud. Difatti, se usi JuJu puoi connetterlo alla cloud e ottenere l’intera toolchain DevOps, perché non lo facciamo?’. L’avevo detto che mi piaceva”. “Siamo andati live con questa idea il 7 maggio (2012) all’Ubuntu Developer’s Summit svolto a Oakland. Mark [Shuttleworth] era sul palco e lo sollevò”, ci dice Barton. “Non mi aspettavo una risposta così positiva”. A quel punto il traffico sul blog di Barton esplose letteralmente, “C’era un desiderio represso di qualcosa che semplicemente funzionasse su un pezzo di hardware dall’aspetto carino”, dice. “Il punto di non ritorno ci fu quando annunciammo il lancio di un programma in fase di beta in tutto il mondo, avemmo circa 6.000 persone che si registrarono. A quel punto pensavamo fosse fatta – andiamo avanti e facciamolo accadere”. Come con la maggior parte dell’hardware, gli utenti Linux si sono abituati a essere costretti a comperare un dispositivo Windows di cui si conosce il livello di compatibilità con il sistema del Pinguino, oppure a pagare una cifra superiore per un portatile Apple noto per prestarsi all’uso con Linux. Il problema con la prima opzione è che le specifiche dei portatili cambiamo molto spesso; gli adattatori Wi-Fi e Bluetooth, per esempio, cambiano all’ultimo minuto e non lo sai mai finché non ti arriva l’hardware in casa e cerchi di installarci Linux. Un utente Linux che ha scelto l’opzione Apple è Linus Torvalds, che nei suoi viaggi porta con sé un Apple Macbook Air con Fedora installata. Ma diversamente da noi tutti, Linus si può creare da solo le patch per assicurarsi che tutto funzioni a dovere ed egli stesso ammette che Linux ha qualche problema nell’usare nel modo migliore i display ad alta risoluzione di Apple. Ciò che più sorprende del progetto Sputnik è che l’hardware scelto da Dell non era compatibile al 100% con il kernel Linux del momento. Specifiche hardware L’hardware è quello del Dell XPS 13, con la versione 2013 che ha visto l’aggiornamento dello schermo con un incredibile pannello IPS da 13,3 pollici con risoluzione 1920x1080 pixel. All’interno trovate un chipset Intel Ivy Bridge con una CPU Core i7 i7-3537U, impostata alla frequenza di 2 GHz ma capace di arrivare ai 3,2 GHz, e 8 GB di RAM di tipo DDR3 funzionante a 1.600 MHz. La scheda grafica è la Intel HD Ci sarà anche il pulsante Windows nella tastiera, ma nella parte inferiore trovate il logo di Ubuntu “Si tratta di sviluppatori: sono loro quelli che ‘fanno’ per davvero” Graphics 4000. Il nostro modello includeva un disco SSD da 250 GB in grado di far partire il desktop di Ubuntu in 8 secondi. Essendo questo un prodotto ufficiale Dell, ottenete anche il loro supporto, il che è un’interessante novità. Il design è ovviamente un fattore soggettivo, ma noi amiamo lo stile dell’XPS 13. Lo chassis è largo 316mm, profondo 205mm e alto tra i 6 e i 18mm, con il dispositivo che si assottiglia dal dietro all’avanti. L’effetto complessivo è quello di un prodotto di fascia alta, e il case è abbastanza resistente da sopportare La versione 2013 ha un fantastico pannello IPS a 1920x1080 pixel LINUX PRO 136 19 Progetto Sputnik L’aspetto e il peso dell’ultrabook di Dell sono perfetti per chi è sempre in movimento i viaggi. Lo chassis non si flette lateralmente, il che è indice di buona qualità costruttiva. La parte superiore e laterale dello schermo sono in alluminio, mentre la parte bassa è in fibra di carbonio. È abbastanza leggero da essere tenuto con una mano anche quando è aperto. Un vetro Gorilla Glass protegge lo schermo e arriva fino al metallo. Il bordo attorno allo schermo e di circa 10mm, e sembra più bello di quello più grande del Macbook Air, secondo noi. La tastiera ha tasti grandi, ben spaziati e dall’ottima risposta, e anche se non ci entusiasma il font usato per indicare le lettere, la retroilluminazione dei tasti è perfetta per quando si programma “Lo schermo è incredibile. È luminoso, con colori ben definiti e un alto contrasto” Stile e design minimalista fanno sì che ci sia spazio per un numero ridotto di porte 20 LINUX PRO 136 a notte fonda (ma la regolazione della luminosità – Fn+F6 è poco granulare). E sì, il tasto Windows è ancora al suo posto, ma non ci dà certo fastidio specialmente perché sul fondo della macchina c’è una targa con il logo di Ubuntu ben visibile. Ci sono solo due porte USB nella macchina; una a sinistra e una a destra, ed entrambe sono USB 3.0, il che può essere limitante. USB 3.0 funziona bene solo con i kernel relativamente recenti, e avere solo due porte vuol dire essere costretti a un compromesso quando si tratta di collegare dispositivi esterni, specialmente se una delle porte è occupata dal cavo di uno smartphone in carica. Uno svantaggio dell’aspetto così sottile della macchina è che non c’è una porta Ethernet. Non sempre il Wi-Fi è disponibile (anche se ormai la sua diffusione è molto capillare, anche qui da noi in Italia) e a volte l’unica soluzione è usare una rete cablata, cosa impossibile con l’XPS 13 a meno di non portarsi dietro un adattatore USB. L’unica altra connessione fisica è una mini DisplayPort. Normalmente non menzioneremmo l’alimentatore, ma il piccolo modello di cui è dotato l’ultrabook non occupa molto spazio nel bagaglio, e c’è anche un LED che ne indica il funzionamento. Un piccolo pulsante, posto nel fianco opposto a quello in cui si collega l’alimentatore, attiva una serie di cinque LED bianchi che vi indicano il livello di carica della batteria quando lo schermo è chiuso e, infine, potete usare una delle porte USB per caricare il vostro smartphone o tablet senza dover rianimare l’ultrabook. L’unica deficienza hardware che ci aspettavamo di trovare riguardava l’unità wireless, basata sul chipset Intel Centrino Advanced-N 6235 e sul driver iwlwifi, che non funziona molto bene. Prima di ricevere in redazione l’ultrabook ci eravamo informati a riguardo, scoprendo che in passato il collegamento Wi-Fi degradava dopo qualche tempo (anche pochi minuti in alcuni casi) fino addirittura a cadere. Sempre leggendo in rete alcuni lamentano problemi anche con i kernel più aggiornati presenti in Ubuntu 13.04 (la versione di default è la 12.04), eppure nelle nostre prove non abbiamo riscontrato gravi problemi in questo senso. In tutti i casi è possibile trovare una soluzione all’URL http:// bit.ly/1fT1cim. Inoltre sembra che Dell abbia intenzione di sostituire questo componente problematico con un’unità Killer Wireless-N 1202 di Qualcomm, che dovrebbe risolvere eventuali problemi con i driver. Il software L’unico sistema ufficialmente supportato da Dell è Ubuntu 12.04 LTS ed è quello che trovate preinstallato. L’aver adottato la release con supporto a lungo termine è stata la mossa giusta. Si ottengono gli aggiornamenti di sicurezza e le patch fino ad aprile 2017, un tempo sufficientemente lungo per molte situazioni, ma non sarà possibile installare le nuove funzionalità delle applicazioni a meno di non ricorrere a repository di terze parti, download di file binari e aggiornamenti manuali. Come ci si può aspettare, la versione Dell di Ubuntu 12.04 è stata arricchita da un repository di pacchetti specifico per l’XPS 13, e anche il kernel è compilato ad hoc. Questo soprattutto a causa del trackpad, che fino alla versione Ubuntu dell’XPS 13 non disponeva di driver Linux. Barton ci ha spiegato come è stato sviluppato questo driver. “Abbiamo lavorato con Cypress per scrivere il driver del touchpad. Essi lo hanno scritto per noi ma non solo, lo hanno anche inserito nel codice del kernel, a partire dal kernel 3.9. Quindi se volete usare il loro trackpad con Debian o CentOS, ora potete farlo”. Il driver è stato inserito nel kernel perché lo abbiamo testato alcune distro con l’XPS 13, e qualunque kernel recente funziona senza ulteriori modifiche. Ubuntu 13.04 non richiede il repository extra e quasi tutte le patch sono state include nella distribuzione principale, per esempio, e vi raccomandiamo di installarla al fianco della LTS se volete accedere ai nuovi pacchetti. In base a come configurate il touchpad, click e doppio click si possono eseguire attraverso il tocco oppure con il tocco e la pressione dell’intero pannello, e dopo aver installato alcuni pacchetti extra siamo riusciti a ottenere un supporto decente al multitouch, anche se Linux è ben lontano da OS X per quel che riguarda la gestione e l’implementazione delle gesture. Un’altra area in cui Linux probabilmente non riesce a ottenere il massimo dall’hardware è lo schermo. Con una densità di pixel pari a 165ppi (era Progetto Sputnik di 118ppi nella vecchia versione) racchiusa in una diagonale di 34cm, il desktop Unity ha bisogno di qualche intervento per chiunque non abbia 10 decimi di vista; in questo caso Linux sembra in parte inadeguato. I font sono a volte troppo piccoli e gli angoli delle finestre possono essere difficili da trovare con il cursore del mouse, specialmente quando bisogna ridimensionare una finestra. Gran parte di questi dettagli si possono aggiustare dal pannello di controllo, ovviamente, ma il desktop Linux, con Unity, GNOME o KDE, ha difficoltà a gestire in modo corretto la densità dei pixel. L’hardware video, comunque, è perfettamente capace di eseguire il compositing fullscreen alla risoluzione nativa, ma non essendo potentissimo fa fatica con i giochi 3D a tutto schermo usando delle impostazioni grafiche di livello medio. La vera star Dopo aver sistemato a dovere il desktop, lo schermo vi apparirà incredibilmente bello. È luminoso, con contrasto e saturazione dei colori perfetti, e combinata con la sua risoluzione il testo è definito benissimo durante l’editing. Affiancando le finestre, per esempio browser ed editor di testo, è l’ideale grazie all’alta risoluzione, e se di solito aprite decine di finestre assieme, amerete la dimensione del desktop che il portatile è in grado di mostrare. Per noi il 1080p è perfetto per portatili di questa dimensione. Lo schermo dell’XPS 13 è anche lucido, senza possibilità di una opzione opaca, e anche se a noi piacciono molto gli schermi lucidi, alcuni trovano intollerabili i riflessi. Una nota legata allo schermo: quando lo schermo si spegne a causa dell’inattività, Ubuntu impiega qualche istante per far ricomparire la scrivania. Molto efficiente è invece la partizione di ripristino di Dell. Tenete premuta una combinazione di tasti o sceglietela dal menu di GRUB e potete riportare l’ultrabook alla sua configurazione iniziale. Abbiamo dovuto ricorrere a questa funzione un paio di volte facendo esperimenti con altre distribuzioni – anche quelle che hanno aggiunto una propria voce al menu di GRUB – e ha funzionato alla perfezione ogni volta. Potrà non sembrare una gran cosa, ma se la combinate con il supporto di Dell, l’impressione complessiva è che il produttore americano abbia capito cosa è importante nel mercato Linux. La Developer Edition del Dell XPS 13 costa 1.039,00 euro, IVA esclusa. Non si tratta del più economico degli ultrabook ma è più economico delle alternative Apple, come il Macbook Air usato da Linus. Se questa fosse una recensione nuda e cruda, saremmo costretti a dire che ci sono molti portatili più economici, ma tutti sono più grandi e pesanti. Per un professionista e per chi viaggia molto, il prezzo richiesto non è eccessivo, considerando la qualità del supporto e dell’hardware. Cosa più importante per noi, comunque, è la La partizione di recovery del Dell è molto utile in caso di problemi con il sistema operativo “Sembra che Dell abbia capito cosa è importante nel mercato Linux” speranza che la versione per sviluppatori del Dell XPS 13 sia solo il primo di una serie di computer con supporto a Linux. Canonical e Dell hanno fatto un lavoro eccellente con questo ultrabook, e come ha promesso Barton George quando gli abbiamo parlato, si tratta solo dell’inizio. LXF Il Profile Tool di Dell Un’app personalizzata per ricreare il vostro ambiente di sviluppo Dell ha fatto più che scrivere Ubuntu sul disco del suo ultrabook tramite dd. Per facilitare il suo target di utenti, sono stati precaricati diversi pacchetti che possono davvero tornare utile ai programmatori. Ma questo non bastava, e Dell ha creato qualcosa che chiama Profile Tool. L’idea dietro questo strumento è quella di rimuovere la noia di installare i pacchetti per il Dell spera vivamente di riuscire a offrire i profili creati da sviluppatori importanti, come per esempio l’ambiente Python di Mark Shuttleworth o quello Android vostro ambiente di sviluppo quando cambiate computer, posizione o addirittura azienda. È sufficiente usare il Profile Tool e consentirgli di ripopolare il disco fisso con il vostro setup memorizzato nella cloud. I profili correnti includono Emacs, Ruby e JavaScript, e Barton vorrebbe vedere dei profili condivisi dalle “star” della programmazione. L’unico problema è che il Profile Tool è ancora in fase di sviluppo, per questo motivo non è ancora intuitivo o al massimo della sua utilità. “Questo non è una di quelle occasioni in cui spariamo per qualche mese per poi riapparire con una grande rivelazione”, ci ha detto. “Faremo tutto pubblicamente”. “Non è ancora tutto come dovrebbe”, ammette Barton. “Riguardo il Profile Tool, ci sono persone che dicono ‘Ehi, l’ho provato e mi serve molto di più”. C’è un po’ di frustrazione in chi porta avanti il progetto – vorremmo essere più avanti. Avevamo una risorsa esterna a Dell che ci dava una mano, ma ciò non ha funzionato bene come speravamo e ora ci prepariamo ad andare avanti con una roadmap assieme ad alcune risorse interne a Dell. Dobbiamo farlo. Dobbiamo preparare la documentazione, e arrivare al punto in cui le persone possono prenderla e lavorare su di essa. Vogliamo che la comunità prenda il sopravvento. Per ora… non c’è molta documentazione; ci sono tre profili così che le persone possano iniziare a usarlo, ma vogliamo di più”. Potete controllare i progressi del progetto su GitHub all’URL https://github.com/sputnik. LINUX PRO 136 21 Raspberry Pi Moduli hardware per tutti i gusti! Analizziamo gli “extra” per potenziare il nostro piccolo gigante! R aspberry Pi è probabilmente il dispositivo elettronico britannico di maggior successo degli ultimi dieci anni, ma è anche uno di quelli maggiormente male interpretati. Troppa gente pensa che sia un desktop ultra economico, ma dopo aver comprato monitor, mouse, tastiera e scheda SD, si ritrovano ad aver pagato un conto simile al prezzo finale di un dignitoso portatile ma con molta meno potenza elaborativa. La maggior innovazione della RP non è il prezzo, ma le dimensioni: è piccolo, può funzionare a batteria (o con un pannello fotovoltaico) e dispone del bus di espansione (GPIO). Queste tre caratteristiche nello stesso oggetto informatico erano sostanzialmente 22 LINUX PRO 136 sconosciute prima di Raspberry Pi, che ha saputo offrirle a un prezzo aggressivo. Non si tratta di un nuovo prodotto, ma di un nuovo concetto di prodotto e molta gente fatica a capire come usarlo al meglio. Questo problema era particolarmente sentito nei primi mesi dalla sua uscita, con pochissimi documenti che spiegassero come usare RP al meglio e se si desiderava usare il GPIO, era necessario realizzare in proprio l’hardware da connetterci. Ma il tempo passa, le situazioni migliorano e ora un discreto numero di periferiche è a disposizione di coloro che desiderano semplicemente “connettere e usare immediatamente”. Apparentemente, ogni settimana sembra nascere una nuova schedina di espansione, direttamente collegabile al bus per attivare alcune funzioni prima di allora inutilizzate o per aggiungere capacità mai viste prima. Ma la cosa che ci fa più piacere è che la maggior parte di queste nuove schede non reca il blasonato marchio di qualche multinazionale ma è per lo più frutto delle fatiche di piccole realtà commerciali o addirittura di singoli individui che prima realizzano per sé e poi condividono con il mondo, in un clima di cooperazione e condivisione che non si vedeva più da molto tempo. Lo spazio a disposizione è poco, per cui presteremo attenzione solo a tre delle numerose schede di espansione: quindi recuperate la vostra Raspberry Pi, un bel soffio a pieni polmoni per togliere la polvere e via che si parte! Raspberry Raspberry Pi Pi-Lite Matrice di LED multifunzione U na delle cose spesso riportate nei forum era che la RP sembrasse sottoutilizzata: è bastato questo per far venire in mente a qualcuno che si poteva benissimo creare una matrice di LED e permettere così di creare con facilità gradevoli effetti visivi oltre che seriosi annunci effettuati tramite scritte scorrevoli. Detto fatto: la Pi-Lite offre una matrice di 126 LED rossi (la versione a LED bianchi è in lavorazione). La cosa intelligente è che la scheda si incastra perfettamente con la Raspberry Pi sottostante, in modo che il tutto non occupi alcuno spazio extra. Non si tratta di un mero lavoro di “incastro”, serve anche a configurare la scheda affinché abiliti la porta seriale, che è il canale di comunicazione con l’espansione. Se avete dimestichezza con Raspbian, non dovrebbero esserci problemi visto che la procedura è ben documentata sul sito del produttore Ciseco; ecco il rimando diretto alla pagina con le istruzioni: http://bit. ly/1c0GOY1. Il software non richiede più di una decina di minuti per l’installazione e la configurazione, contando anche qualche trucchetto necessario per la Raspberry Pi modello A. Dopo aver sistemato la parte software, possiamo controllare la scheda di espansione via seriale: minicom -b 9600 -o -D /dev/ttyAMA0 ed eccoci “dentro” il controllo del LED: ora tutto quello che scriveremo scorrerà in un tripudio di LED rossi che si accendono e spengono per disegnare il testo inserito. Tutto ciò è bello di per sé e di solito è quello che desiderano i neofiti della Pi-Lite. Al pari del testo è altresì possibile inviare dei comandi all’espansione, a patto di anteporre tre simboli del dollaro, per esempio: $$$ALL,ON Ed ecco che tutti i LED si accendono! Ci sono modalità che permettono di mostrare grafici e gestire i singoli pixel, mentre il meccanismo finale è inviare una stringa di “zeri” e “uno” che indicano se il rispettivo LED deve essere acceso o spento, come segue: $$$F0000000000000000000001110000111111100111 1111011111111111110111111110111101100011001 1000110000000000000000000000000000000000000 L’ultimo metodo permette di disegnare qualsiasi immagine, anche se è probabilmente più utile quando usato via script invece che con comandi manuali. Dal momento che tutte le comunicazioni verso la Pi-Lite viaggiano su porta seriale, ci si può accedere tramite qualsiasi linguaggio che supporti la comunicazione su porta seriale. Python – tramite il relativo modulo seriale – è probabilmente uno dei modi più semplici e veloci per cominciare e ci sono decine di esempi disponibili, sempre sul sito di Ciseco: http://bit. ly/19C3Sve. Avrete già capito che, essendo Pi-Lite pilotata da un protocollo standard, essa non è strettamente vincolata alla Raspberry Pi ma può essere connessa anche ad altre schede che dispongano di linea seriale; ma anche se non l’avessero come gli attuali PC, un economico convertitore USB<-->rs232 fungerà da ponte con sistemi più moderni. L’emulatore di Pi-Lite Se vi interessa sapere come funziona la Pi-Lite ma non siete ancora convinti dell’acquisto, potete farvi un’idea di cosa si avrà in mano tramite un emulatore prelevabile sempre dal sito openmicros.org all’indirizzo http://bit.ly/14Li3d4. Per pilotare i LED, la Pi-Lite usa un microcontrollore ATMEGA, un integrato simile a quello usato nella nota scheda Arduino e, parimenti a quello, il nostro è dotato di un bootloader preinstallato. In altre parole, possiamo programmarlo per fargli fare quello che più ci aggrada, facendolo agire come unità autonoma indipendente dalla Raspberry. Di più, la scheda permette l’uso dei 5 input analogici dell’ATMEGA, quindi con un piccolo sforzo di programmazione potremo usufruire di questa preziosa risorsa per i nostri progetti. Certo, La Pi-Lite nasce per gestire effetti luminosi, ma come vedete, basta poco per sfruttare al massimo l’hardware, cosa che diventa un’ottima scusa per migliorare le proprie competenze tecniche. Testo che scorre, interfaccia stile anni ‘80, oppure un giochino tipo Tetris: cosa farete con la vostra Pi-Lite? LINUX PRO 136 23 Raspberry Pi Il modulo Camera Scattate foto con la Raspberry Pi P La lunghezza della piattina di connessione permette il posizionamento della webcam nel modo migliore per i vostri progetti 24 rima di dire cosa è, chiariamo la situazione dicendo cosa non è! Se cercate una webcam economica per le vostre sessioni Skype, siete capitati male perché non ci troviamo di fronte a uno strumento “connetti e vai”: questo modulo semplicemente non è pensato per tali attività, nonostante sia stato progettato con la facilità d’uso in mente. La piattina di connessione del modulo webcam si connette al pettine verticale piazzato vicino al connettore HDMI, a poca distanza dall’area dedicata alla porta Ethernet: solleviamo delicatamente la “stanghetta” che funge da fermo, infiliamo la piattina avendo cura che i piedini argentati siano rivolti nella direzione del connettore HDMI e poi abbassiamo il fermo di prima, tutto qui. Ora dedichiamoci alla parte software con: sudo apt-get update sudo apt-get upgrade sudo rpi-update Poi lanciamo il comando raspi-config, navighiamo nel menu e attiviamo la parte relativa alla webcam: infine è necessario riavviare la Raspberry Pi. Alla ripartenza, i due comandi raspistill e raspivid permettono di ottenere rispettivamente scatti fotografici o videoriprese. Naturalmente è possibile parametrizzare i comandi: per scattare una foto, si digiti raspistill -o immagine.jpg Però il divertimento è altrove, dato che essendo a livello di terminale, questi comandi possono essere richiamati da altri programmi o inseriti in script Bash. Per esempio, se non abbiamo mai capito come usare il “bilanciamento del bianco” ecco uno programmino Python che potrebbe tornare utile: from subprocess import call for awb in [‘off’,‘auto’,‘sun’,‘cloud’,‘shade’,‘tungsten’,‘fluorescent’, ‘incandescent’,‘flash’,‘horizon’]: call([“raspistill -n -awb ” + awb + “ -o image” + awb + “.jpg”], shell=True) Come vedete, è possibile controllare il sensore con Python, anche se esso funge unicamente da “lanciatore” per un programma esterno tramite una chiamata di sistema (il comando call). La funzione call è presente praticamente in ogni linguaggio di programmazione, per cui se preferiamo Bash, Perl o C, è possibile portare l’esempio Python su altri linguaggi con poco sforzo. Poiché è possibile usare tutte le opzioni dei due comandi anche tramite chiamata di sistema, possiamo unire la flessibilità di parametrizzazione con la potenza del linguaggio ad alto livello in modo da poter applicare effetti grafici tramite successivi comandi esterni come il potentissimo ImageMagik: insomma, ora non ci sono più scuse per non creare il cortometraggio in “stop motion” LINUX PRO 136 che abbiamo sempre desiderato fare, ecco un esempio pratico! raspistill -ifx cartoon -ISO 800 -tl 100 -t 10000 -w 300 -h 300 -o test_%04d.jpg Abbiamo usato varie opzioni, vediamo cosa fanno nel dettaglio. -ifx è un parametro che permette interessanti effetti grafici: in questo caso, il parametro che segue trasforma lo scatto in un “cartone animato”. -ISO imposta la sensibilità ISO: abbiamo imposto un valore elevato in quanto la qualità dell’immagine in modalità “cartoon” non è fondamentale. -t1 impone il tempo di esposizione durante lo scatto, il numero indica i millisecondi. -t impone la pausa tra uno scatto e l’altro, anche qui il numero esprime la durata in millisecondi. -w e -h indicano larghezza e altezza, i numeri indicano le misure in pixel. -o è il nome da dare allo scatto, e _%04d è un numero che si autoincrementa tra uno scatto e l’altro. È facile intuire che questo è solo un esempio limitato, giusto per cominciare, ma sicuramente sapremo “spremere” i numerosi parametri per ottenere molto di più: digitando il comando raspistill senza parametri otterremo l’elenco di questi ultimi e relativa spiegazione ma se non si ha una pregressa competenza da fotografo, è probabile che molti di essi non ci diranno nulla. Si impone quindi di informarsi in qualche sito dedicato alla nobile arte dello scatto fotografico. Al pari di raspistill anche raspivid ha la sua bella lista di parametri, ma partiamo dalle basi: raspivid -t 5000 -o video.h264 Ci registrerà un video di 5 secondi di nome video.h264, dove l’estensione rappresenta il formato nel quale il risultato è stato salvato. Dopo che avremo padroneggiato le basi, potremmo impegnarci in qualcosa di più complicato: che ne dite di un programma di riconoscimento facciale usando OpenCV? Guarda caso, c’è un tutorial su questo argomento presente qui, http://bit.ly/13WDdoy per cui chiudiamo con due parole: buon lavoro! Altre videocamere Connettere una DSLR o webcam Al momento, la Camera Raspberry Pi è la sola collegabile al bus “a pettine” presente sulla RP: ciononostante, un vasto numero di webcam sono collegabili tramite porta USB. Certo, non tutte sono supportate, ma seppur incompleta, una lista di modelli è reperibile presso http://elinux.org/RPI_USB_Webcams, che consigliamo di visitare prima di comprare un modello alla cieca. Le classiche webcam USB sono gestibili tramite Gphoto2, che più o meno supporta tutte le marche e modelli, anche se magari non al pieno delle loro caratteristiche più avanzate. Per esempio, è certo che sia possibile scattare foto con qualunque webcam, ma non necessariamente sarà possibile controllare quelle motorizzate o con particolari caratteristiche necessitanti estensioni software, si controlli su www.gphoto.org mentre alla pagina www.gphoto.org/doc/remote si possono trovare informazioni sulle caratteristiche avanzate. Raspberry Pi I bei colori della piattina di connessione non garantiscono il suo uso con tutti i case esistenti, controllate bene prima di iniziare! Quick2Wire Potenziamo in modo efficace il GPIO con poca spesa U na delle più gradite caratteristiche della Raspberry Pi è la presenza del bus GPIO, facile da capire e facile da usare. Con un solo comando in Bash o in Python ecco che si può leggere un ingresso o forzare un’uscita. Un sistema buono ma non perfetto. Prima di tutto non tutti i piedini sono utilizzabili, inoltre non sono disponibili ingressi e/o uscite analogiche. Inoltre i piedini sono “delicati”: applicando una tensione eccessiva (cioè superiore ai 3,3V) oppure cortocircuitando due piedini sbagliati, ecco che ci ritroveremo la RP pronta per il cassonetto dei rifiuti elettronici. Molti progettisti hanno fornito soluzioni per semplificare e migliorare la situazione. Per esempio, la scheda Slide di Ciseco fornisce 16 linee GPIO che accettano anche input a 5V, la scheda Pi Face monta LED, pulsanti e relè (per controllare motori o altro), mentre la Gertboard fornisce una vasta gamma di linee di I/O utilissime per applicazioni che vanno oltre il livello hobbistico. Una bella alternativa è interfacciarsi a un Arduino assegnandogli il compito di “interfaccia col campo” anche se ciò necessita di qualche competenza in C, non sempre presente nel bagaglio di conoscenze di ognuno di noi. A ogni modo, daremo un’occhiata al Quick2Wire con interfaccia I2C e SPI, in quanto c’è da configurare qualche parametro per rendere la scheda operativa. Espandere il bus GPIO SPI e I2C stanno per Serial Peripheral Interface e Inter-Integrated Circuits (spesso scritto I2C e letto come I-QUADRO-C). Nella sua configurazione di partenza, la Quick2Wire fornisce linee in I/O gestite tramite I2C o SPI, in modo da proteggere da sovratensioni il GPIO della RP; inoltre permette di usare ingressi e uscite analogiche. Queste schede di espansione possono essere accodate sullo stesso bus in modalità daisy-chain, avendo come risultato finale quello di avere molte linee di I/O al costo di pochi PIN occupati sulla RP. Certo, dovremo darci da fare per assemblare per conto nostro la scheda, ma una volta terminato il lavoro, la fatica di connetterle si riduce a incastrare una piattina di fili. La guida in linea è reperibile presso la pagina Web “È facile programmare la scheda con Python” http://quick2wire.com/articles/beta-kit. Purtroppo passando alla revisione 2, quei simpaticoni di Raspberry Pi hanno invertito un paio di piedini, per cui potremmo trovarci nella necessità di accedere a librerie diverse reperibili presenti all’URL http://github.com/quick2wire/quick2wire-python-api che richiedono l’installazione del pacchetto python3-setuptools. Dopo che avrete fatto tutto, la programmazione della scheda tramite Python diventa un’autentica passeggiata. Ricordiamo che non è argomento di discussione quale sia la scheda GPIO migliore, in quanto a problema diverso, scheda diversa, quindi sceglieremo in base alle necessità. La Ciseco Slice è buona, economica e irrobustisce la gestione dell’I/O, la Pi Face è perfetta per sperimentare e interfacciarsi al mondo reale, soprattutto se non abbiamo ancora individuato il campo finale nel quale applicarci. Infine la Quick2Wire è utile nel caso si voglia sfruttare la potenza dei protocolli SPI o I2C per interfacciare un discreto numero di schede “figlie” senza impegnare troppi piedini della Raspberry, che funge in questo caso da scheda “madre”. LXP Altri extra Accessori e kit per ogni necessità Al momento, c’è una imbarazzante quantità di persone che tentano di espandere le caratteristiche della propria RP, e Adafruit (www.adafruit.com) fornisce una vasta gamma di periferiche per i patiti del saldatore negli Stati Uniti d’America. Per gli inglesi e gli europei in generale, Pimoroni (http://shop.pimoroni.com) sembra il posto più adatto sia come distributore Adafruit sia come venditore di soluzioni alternative, perché oltre a vedere periferiche generaliste, qui si trova anche quella particolare scheda introvabile altrove ma che è indispensabile. La scheda BrewPi (http://brewpi. com) nasce per permettere agli smanettoni seguaci del Dio Bacco di creare la propria birra casalinga, monitorandone temperatura, tempi di fermentazione e così via. Chi armeggia con RP non è sconosciuto a Kickstarter, la nota piattaforma di finanziamento popolare che ha ospitato un progetto per la creazione di una piattaforma di videogiochi (i famosi “cassoni” da bar anni ‘80!) basata proprio sulla Raspberry, per cui donate qualche soldino se rivolete Mario Bross o Space Invader di quando eravate ragazzi! LINUX PRO 136 25 Intervista 26 LINUx PRO 136 Intervista E come Eben Abbiamo visitato la Raspberry Pi Foundation per parlare di proprietà intellettuale, aggiornamenti hardware e altro ancora con il suo fondatore N on sono molte le persone impegnate quanto Eben Upton. È soprattutto a lui che si deve l’esistenza della Raspberry Pi, alla cui realizzazione ha contribuito in modo decisivo, sovrintendendo ai dettagli della sua progettazione, alla sua produzione e alla sua straordinaria ascesa alla fama mondiale. In aggiunta, la fondazione ha trasferito la produzione nel Galles, ha lanciato il Model A e il modulo fotografico e conduce incessantemente la RP verso nuovi territori. Tra un colloquio e l’altro con potenziali partner e media internazionali, Upton ha trovato un paio d’ore per la nostra intervista. Con Upton abbiamo parlato di tutto, dall’ideazione del progetto alle difficoltà della sua realizzazione. Linux Pro: È stato difficile adattarsi al successo della Raspberry Pi? Eben Upton: Direi che buona parte della fatica in termini di logistica e di proporzioni è ricaduta sulle spalle di RS ed Element 14 (le due case produttrici della Raspberry Pi). LXP: Avevate deciso fin dall’inizio di utilizzare queste due case? EU: L’idea era quella fin dalle origini, perché prima ancora di esordire prevedevamo che avremmo probabilmente riscosso un successo superiore alla nostra portata. Avevamo fondi sufficienti a produrre 10.000 unità, un quarto di milione di dollari… Poi è venuto il momento in cui abbiamo pubblicato la prima immagine per la SD per il dispositivo (registrando 50.000 scaricamenti) e il sistema operativo in versione alfa, pieno di bug, realizzato da un team di persone che non sapevano ancora se il progetto sarebbe stato portato a termine. È stato allora che ci siamo resi conto di essere nei guai [ride] e di avere bisogno di ripensare il nostro modello. LXP: È stato alla fine del 2011, giusto? EU: Sì; se avessimo mantenuto il modello originale, credo che avremmo trascorso tutto l’ultimo anno nel tentativo di far fronte alla domanda del primo giorno. Ci siamo andati vicini ma ce l’abbiamo fatta in 3-4 mesi. Di sicuro, non saremmo arrivati da nessuna parte: forse, con molta fortuna, saremmo riusciti a realizzare 100.000 unità nel primo anno, non certo il milione che abbiamo raggiunto. Perciò, dal punto di vista della RP, direi che abbiamo realizzato un piccolo miracolo affidandoci a queste due aziende. Voglio dire, questi sono soggetti che in termini logistici operano su una scala paragonabile a quella di Amazon. RS distribuisce 44.000 pacchetti al giorno. Il carico di lavoro è significativo anche per loro ma non si avvicina nemmeno a raddoppiare il loro volume abituale. LXP: Il lancio è stato un vero e proprio evento! EU: Sì, decisamente. Per noi il progetto era iniziato da circa 9 mesi e per loro [RS ed Element] solo da un mese o due. LXP: Liz (responsabile comunicazioni per Raspberry Pi Foundation e moglie di Eben) ha fatto un ottimo lavoro nel creare l’attesa. EU: Assolutamente. Credo che per i nostri due partner sia stata una vera sorpresa. Ed è stata un’ottima sorpresa: il progetto si è trasformato in un notevole affare per entrambe le aziende, che hanno registrato entrambe una crescita. Anche la nostra attività sta crescendo. Tutto questo ha cambiato il nostro modo di vedere ciò che facciamo; è stata una sfida. LXP: E a livello personale? EU: Beh, anche a livello personale, in un certo senso… Non che sia diventato meno divertente ma di sicuro ora è una cosa più seria, perché ci sono persone il cui posto di lavoro dipende da questo progetto. Non avevamo mai pensato a una cosa del genere: e non si tratta di persone che lavorano da noi ma dei lavoratori che producono e distribuiscono le unità. C’è un numero significativo di persone, probabilmente un centinaio, che si guadagnano da vivere con la Raspberry Pi. Questo stimola a riflettere meglio prima di prendere iniziative tipo: “Dai, cambiamo questo componente!”. Se ne producessimo 100 e per un errore mandassimo a monte la produzione di una settimana, questo si tradurrebbe in 100 unità da buttare. Con i volumi a cui operiamo oggi, la produzione di una settimana si aggira sulle 30, 40, 50.000 unità: un errore del genere potrebbe danneggiare l’azienda e quindi far perdere posti di lavoro. Insomma, il progetto è tuttora un divertimento ma dobbiamo ragionarci di più. LXP: È interessante che abbiate concepito Raspberry Pi come una fondazione e un’impresa al tempo stesso. È un modello peculiare e non molto diffuso. EU: Penso sia importante se si vuole che l’attività sia sostenibile. C’è questa idea secondo cui un’attività non a scopo di lucro non potrebbe crescere: beh, noi volevamo essere e siamo proprio questo, un’organizzazione senza fini di lucro. Tutto il denaro che entra viene reinvestito nell’attività. Io non percepisco un salario; ho la fortuna di poter evitare di farlo. LXP: Tutto questo è destinato a cambiare? EU: Potrebbe, immagino. Io lavoro ben oltre quello che la maggior parte della gente considererebbe un orario completo, però sono tuttora un dipendente di Broadcom. Quest’ultima è stata veramente generosa. Lo so che c’è qualcuno che pensa che faccio pubblicità a Broadcom… Direi che abbiamo semplicemente avuto fortuna con questo progetto e ci abbiamo impiegato un po’ per persuadere Broadcom che ne valeva la pena. LXP: È un po’ come quando Linus Torvalds lavorava per Transmeta... EU: Sta diventando una relazione di quel tipo, anche se il coinvolgimento è minore perché a quanto ho capito Torvalds dava un contributo notevole a Transmeta. Oggi io dedico circa il 90% del mio tempo alla Raspberry Pi. Se percepirò mai uno stipendio? Sì, prima Linux pro 136 27 Intervista ideologica, dato che il denaro generato dalla titolarità di questi diritti è ciò che ci permette di mantenere la RP sostenibile… Un aspetto veramente importante della RP è che con ogni probabilità sarà ancora in circolazione tra cinque anni. Questa è una risorsa importante per le vendite. È possibile creare un prodotto industriale basato sulla RP o utilizzarlo come base per un curriculum. LXP: E non volete che tutto questo venga ‘diluito’ dalla presenza di versioni realizzate da soggetti terzi... EU: Esattamente. Se pubblicassimo il progetto, permettendo la realizzazione di cloni del nostro prodotto, mineremmo le basi finanziarie di ciò che stiamo facendo; ma questo non sarebbe un male in sé. D’altra parte, non è che incassiamo 10 dollari per ogni RP venduta. Il nostro margine è molto ridotto, abbiamo ridotto al massimo il costo della RP, perciò i profitti finirebbero semplicemente nelle tasche di qualcun altro sotto forma di dividendi: diventerebbero profitti aziendali. Tutto questo finirebbe per destabilizzare la fondazione, la sua capacità di investire nell’istruzione, nel finanziamento di progetti Open Source, senza alcun beneficio tangibile per i consumatori. Certo, dal punto di vista ideologico potremmo continuare a definire il progetto come ‘Open Source’; ma finirebbe tutto lì. E l’onta di cui parlavo finirebbe per gravare su Broadcom, se a quel punto non rendesse disponibili i chip. o poi potremmo arrivare al punto in cui la situazione non sarà più sostenibile per Broadcom; quello, probabilmente, sarà il momento giusto per passare oltre. In ogni caso, potrei percepire un salario ma non dei dividendi: tutti i profitti realizzati dall’organizzazione, al netto degli stipendi, vengono reinvestiti nell’attività stessa. E questo è eccellente, perché significa che la nostra parte di attività è sostenibile e ci permette di ragionare strategicamente, di lavorare a cose nuove e interessanti... come il finanziamento dello sviluppo della macchina fotografica. Pete Lomas di Norcott (Technologies Limited) ha sviluppato la Raspberry Pi sostanzialmente a titolo di donazione: è uno dei garanti della fondazione. La scheda della macchina fotografica è stata sviluppata come prodotto commerciale, perciò abbiamo pagato chi l’ha progettata per noi. LXP: Questo avrà delle conseguenze sulla pubblicazione degli schemi tecnici? 28 Linux pro 136 EU: Gli schemi sono stati pubblicati, il PCB no. La questione è interessante. Pubblicheremo mai la struttura del circuito stampato? La nostra intenzione è sempre stata questa e lo è tuttora. Il problema è che non è possibile acquistare i chip. C’è un problema che dobbiamo risolvere. LXP: Ci sarà un aggiornamento della RP? Avete preso in considerazione l’ipotesi di una Pi modulare? EU: Per il momento non abbiamo spazio per aggiungere RAM... Non possiamo espandere la RAM perché quella attuale è il massimo compatibile con un sistema su SoC. Non possiamo aumentare la capacità di elaborazione a causa dei limiti di questo tipo di sistema. Non abbiamo in cantiere progetti sul piano dell’hardware. LXP: È per questo che non avete pubblicato la sua struttura? EU: Se la pubblicassimo, l’utente non potrebbe comunque costruire una Raspberry Pi, perché non potrebbe acquistare i chip. È un problema... alcuni, credo, sono rimasti decisamente delusi dal fatto che non abbiamo ceduto tutti i nostri diritti di proprietà intellettuale. Attualmente, su di noi grava questa ‘onta’. E se li cedessimo, so esattamente su chi finirebbe per gravare l’onta. Credo che Broadcom ci abbia dato un sostegno enorme e non meriti di apparire come colpevole. Per il momento, quindi, sono disposto ad assumermi questa responsabilità personalmente. Non sono incline a cedere i miei diritti di proprietà intellettuale per una questione LXP: Nemmeno nei tuoi sogni più remoti c’è una Raspberry Pi 2? EU: Penso che sarebbe triste e probabilmente fatale per noi se nel 2016 distribuissimo ancora la Raspberry Pi attuale. Dovremo fare qualcosa a riguardo ma al momento non saprei dire cosa… Il vero problema è che posso immaginare schede che sarebbe possibile produrre a prezzi compresi tra i 25 e gli 85 dollari... Posso immaginare una scheda diversa per ogni incremento di 10 dollari. Attualmente non viene prodotto niente del genere. Se però ne ideassimo una che avesse le stesse attrattive della RP... Il fascino della RP sta nel suo eccellente rapporto tra prezzo e prestazioni. È veramente difficile conseguire un rapporto del genere. Di certo, non penso che Intervista importante sviluppatore di Wayland, si è occupato del back-end per Weston, il compositore di riferimento per Wayland che controlla il nostro motore di composizione hardware; in questo modo abbiamo ottenuto un sistema hardware molto potente per la scalatura dei video, che definiamo HVS. In sostanza si tratta di un potente sistema per la gestione degli sprite hardware. Fornisce un gran numero di grossi sprite hardware; a quel punto basta inserire una finestra in ogni sprite e [batte le mani] montarli sul display. Prima di esaurire la larghezza della banda di memoria, Sulla Raspberry Pi 2 “Sarebbe triste (e fatale per noi) se nel 2016 distribuissimo ancora la Raspberry Pi attuale” potrei produrre qualcosa di meglio rimanendo nella fascia di prezzo compresa tra i 25 e i 35 dollari. Con i chip esistenti e a questo prezzo, non potrei produrre una scheda paragonabile alla RP e men che meno una migliore. Sarebbe un’impresa anche aumentando il prezzo a 45 dollari. A 55 dollari immagino che si potrebbe ottenere qualcosa di meglio; ma è significativo che attualmente non ci sia nulla del genere in circolazione. LXP: Come intendete mantenere stabile il vostro successo, allora? EU: Facendo un sacco di lavoro sul software. LXP: Quindi al momento vi state concentrando su questo? EU: Con i suoi 700 MHz, la RP è uno straordinario acceleratore multimediale. Il 97% del chip svolge questa funzione. LXP: Un’installazione standard di Raspbian, che cosa utilizzerebbe? EU: Attualmente utilizza il percorso dell’output video, il controller USB; cose che esistevano prima dell’architettura ARM. Quest’ultima ha fatto aumentare del 3% le dimensioni del chip. Il carico di lavoro grava soprattutto sull’ARM e in parte sull’infrastruttura del sistema, sul controller SDRAM e su qualche minuscola periferica. Buona parte del sistema è inattivo per la maggior parte del tempo. In ogni caso, con 700 MHz il processore è decisamente potente. Dato che sul piano dell’hardware siamo in qualche modo bloccati, stiamo dedicando maggiore impegno al software, in modo da sfruttarlo al massimo. Per questo abbiamo dedicato molto tempo all’ottimizzazione dei componenti a livello di sistema, con l’obiettivo di realizzarne versioni ottimizzate per Linux. Pixmap, per esempio; o versioni ottimizzate di elementi come memcopy e memset. Sull’accelerazione X c’è stato un dibattito interessante. Non disponiamo di un acceleratore X o di un driver di accelerazione. Abbiamo però molti componenti del chip e sottosistemi che possono essere utilizzati per influire sull’acceleratore X del server; e questo va benissimo. Il software è perfetto per questo; funziona in modo sorprendente. L’ARM muove un pixel per volta ma grazie a pixmap ora le prestazioni sono molto migliori, nella misura in cui un’ARM con prestazioni relativamente basse può muovere i pixel più velocemente. Abbiamo discusso sull’opportunità di utilizzare un’accelerazione X hardware e abbiamo concluso che non era il caso. Ciò che dobbiamo fare è esplorare nuovi territori. LXP: È una soluzione più facile? EU: Credo di sì. Possiamo permetterci di scegliere una sola alternativa e preferisco spendere i miei soldi in questo modo. È questa la direzione in cui la gente vuole procedere, perciò credo che ci proveremo. Abbiamo lavorato con un’azienda di Cambridge chiamata Collabora. Pek [Pekka Paalanen], che ci lavora ed è un se ne possono sovrapporre moltissimi. Quando si raggiunge il limite, subentra un sistema di composizione non a schermo. È fantastico. In un mondo in cui ogni finestra è uno sprite hardware, il trascinamento di una finestra non determina il movimento di alcun pixel. Questo HVS è leggermente più grande dell’ARM, dato che comprende un’ampia memoria buffer per il controllo degli sprite. Dato che disponiamo di un sistema dedicato per la creazione delle gerarchie composte di renderizzazione e di un sistema per la composizione delle finestre, dobbiamo creare un software in grado di collegarli. È un ottimo esempio di ambito in cui si può usare il software per offrire all’utente un’esperienza decisamente migliore, senza dover impiegare un nuovo chip. In più, questo ci permette di utilizzare il fantastico Wayland. LXP: È il primo utilizzo di alto profilo di Wayland di cui abbiamo sentito parlare… EU: Credo che la nostra sia la prima soluzione di back-end per Wayland non GL. Di solito viene utilizzato quest’ultimo ma la composizione con GL è complicata, dati i suoi filtri di scalatura veramente primitivi. Anche per ridimensionare è necessario generare un gran numero di mipmap. Immaginate di dover ridimensionare un elemento in scala 3:1: il problema è che il fattore è una via di mezzo tra 2:1 e 4:1. Utilizzando GL si otterrebbe un mipmap 2:1, che potrebbe presentare un certo disturbo; un mipmap 4:1, per contro, presenterebbe sfocature. Anche utilizzando un ridimensionamento ‘lineare’, si otterrebbe un risultato leggermente migliore ma non ottimale. Il nostro sistema, invece, ridimensiona in scala 3:1 creando ogni pixel sulla base di una media ottenuta da una griglia di 3 pixel per 3 dell’immagine originale. LXP Linux pro 136 29 ReactOS REACTOS L’ANTI-WINDOWS Vi presentiamo un sistema nato per essere un clone di Windows e un po’ alla volta, ci sta riuscendo! Vediamo i progressi di questa nuova versione P erché ReactOS? pima di tutto una contro-domanda: perché no? in altre parole, se una cosa è possibile, nessuno può impedire che ci si impegni per realizzarla: reactoS parte da zero, cioè non contiene codice proprietario Microsoft. Questo sistema operativo si basa sul concetto della riproduzione e non sulla copia delle funzionalità del sistema “finestrato”. in altre parole, reactoS sta a Windows come Linux sta a unix, anzi: meglio. Eh sì, perché nel mondo *nix occorre ricompilare per portare il codice da (per esempio) Solaris a FreeBSD, ma reactoS va oltre, in quanto lo scopo finale è permettere di usare gli stessi applicativi che si è abituati a usare su Windows senza ricompilazioni, trucchi, emulazioni o quant’altro: così come il programma xYZ è installabile su Windows, (inserisci CD, setup. exe, avanti, avanti, avanti, installato), ecco che lo stesso procedimento deve essere permesso su reactoS. Ma quanto manca per raggiungere questo ambizioso obiettivo? Scopriamolo insieme. ci dispiaceva in quanto, come molti informatici di vecchia data, siamo un po’ conservativi e la frase “SE FunZionA, non ToCCArLo” è scritta a vernice rossa e in caratteri cubitali sulla parete di fronte al nostro tavolo di lavoro. il fatto che il sito sia diventato più carino a vedersi non ci fa né caldo né freddo, ma riconosciamo che è più interessante per gli utenti “2.0”. Va comunque detto che una generale ristrutturazione ha reso più logico l’accesso ai contenuti e il passaggio al nuovo sistema di gestione dei bug (jira.reactos.org) è indubbiamente un grosso miglioramento che rende facile la vita alle persone che “vanno a caccia di errori” per poi segnalarli agli sviluppatori. inoltre un grosso sforzo è stato fatto per l’internazionalizzazione del progetto, infatti molte informazioni erano obsolete e sono state aggiornate nelle varie lingue nazionali. insomma, il sito sta facendo ogni sforzo per aprirsi a un pubblico più vasto, in modo da aumentare il numero di possibili sostenitori di reactoS. Il sistema operativo “come” Windows ma “non” Windows Sito rinnovato, utente catturato il progetto non è un mero Sistema operativo, ma un insieme di persone, unite da uno scopo comune che si appoggiano a mailing list e a delle pagine Web: però il sito www.reactos.org era da almeno un decennio sempre lo stesso, nel senso che aveva conservato quell’aria da “Web 1.0”. personalmente non 30 Linux pro 136 Supporto hardware migliorato Se per il pieno supporto hardware la strada appare ancora lunga, leggendo http://www.reactos.org/wiki/Supported_Hardware si notano progressi confortanti. intanto diciamo che i dischi SATA sono ormai pienamente gestiti: anche se con grosso ritardo rispetto ad altri sistemi operativi, anche roS va avanti. Stesso discorso per il protocollo uSB: era già funzionante nella release ReactOS precedente, ma ora è stato ulteriormente ripulito e stabilizzato, per cui mouse, tastiere e dischi esterni sono tranquillamente gestiti anche se manca il supporto a stampanti e periferiche audio come cuffie e microfoni. Installiamo! Dalla pagina principale del sito si passa alla sezione Download: scaricata la iSo (scompattata pesa solo 80 MB!) la si masterizza su CD, e poi si procede con il solito meccanismo: inserisci disco, boot da cd e così via. La procedura è tipicamente Windows, ma senza i fronzoli moderni: infatti ricorda molto la procedura del vecchio nT. riconosciamo che i guai ce li siamo andati a cercare: sì, perché al posto di usare un emulatore come KVM o VirtualBox, abbiamo scelto di installare su un pC fisico, ma non un tranquillo desktop! Abbiamo proprio deciso di stressare reactoS, installandolo su un portatile (iBM T42) che ha un hardware più “difficile” di un normale desktop assemblato. però l’installazione fila via liscia e in meno di otto minuti (di orologio!) ci ritroviamo con reactoS 0.3.15 che fa bella mostra di sé, nel pieno dei 1024x768 pixel a 16 bit. però ecco la prima grana: il baco CorE-6901 è ancora aperto, quindi né il mouse integrato né il touchpad funzionano. poco male, colleghiamo un mouse uSB e siamo operativi. Durante la fase di inizializzazione sono comparsi i vari messaggi di “driver non presente” (per la scheda di rete, l’audio, ecc.). Dobbiamo quindi espletare la triste manfrina tipica di Windows, cioè la ricerca dei driver e la relativa installazione. Ma come fare se non va la scheda di rete? Facile: riavviare con LiVE-CD Gnu/Linux, connettersi al sito lenovo.com, cercare in base al modello e scaricare sei file .exe contenenti i driver (più di 100 MB in totale!) sulla partizione che contiene reactoS, che al prossimo avvio si troverà tutto a bordo. Leggendo sul sito, si scopre che alcune periferiche funzionano con driver per Windows 2000 oppure attraverso alcuni rimaneggiamenti, per esempio “prendi il driver, scompattalo manualmente, cambia il nome da ABC.dll in ABC2.dll e poi spostalo nella directory xYZ”. noi ci siamo calati nei panni dell’utente della strada che vuole “tutto e subito”, per cui abbiamo fatto ricorso unicamente ai driver per Windows xp: vediamo come è andata... Supporto hardware? Male! Chipset, touchpad, schede audio/video/rete/wireless... nulla ha funzionato, i driver per xp non sono stati accettati da reactoS: l’installazione dei driver video e wireless ha addirittura mandato in blocco il sistema. ok, lo sapevamo che i chipset di rete fissa e wireless del portatile sono nella lista dei non supportati, ma speravamo nel fatto che il database della lista di compatibilità non fosse aggiornato e ci abbiamo provato lo stesso. Ci ritroviamo quindi col portatile che lavora in framebuffer, muto e senza accesso alla rete. Quanto meno – abbiamo fatto la prova – le chiavette uSB funzionano, per cui possiamo usarle come veicolatrici di dati da e per il disco fisso. Sul desktop troviamo Rapps, che è il tool ufficiale (una specie di Synaptic) per installare applicativi scaricabili da internet. non avendo la connessione, ricorreremo a un altro sistema. scaricato la iSo, montata in lettura e scaricato il suo contenuto sul disco fisso, in modo da poter lanciare tutto in locale. Abbiamo scelto questa collezione di software in quanto contiene anche cose che non sono presenti nel tool rapps, quindi ci arrischieremo a fare qualche prova di installazione extra. Il software? Malino! Sono molti i software disponibili ma ci siamo limitati a testarne una dozzina, stilando una piccola classifica che riporta buoni, cattivi, pessimi e “così-così”. Si noti che abbiamo “girato la frittata”: non sono i programmi a essere “cattivi” ma è reactoS che non è ancora in grado di gestirli a dovere. notepad++, 7-zip, Sumatra pDF, puTTY: funzionano tutti. Certo, sono programmi noti per essere da anni compatibili con reactoS, ma abbiamo voluto verificare che non ci fossero delle regressioni, cioè la comparsa di nuovi bachi. Stellarium, Celestia, Lbreakout2, Freeciv: si installano, ma poi non funzionano per problemi di grafica, come la mancanza dei menu, o l’estrema lentezza del framebuffer che li rendono di fatto inutilizzabili. Abbiamo poi la lista dei pessimi: nasa World Wind, Dia, Maxima, tutti programmi che portano a una immancabile schermata blu. invece Album Shaper segnala la mancanza di msvc60.dll che installiamo, ma poi viene segnalato un errore in msvcrt.dll, per cui lasciamo perdere. Alla fine ci buttiamo sul “pezzo forte”: openoffice 3.4, che con nostro piacere, si installa! il processo è molto lento e il programma di installazione sembra che si blocchi: dopo una buona mezz’ora la pazienza finisce e forziamo un riavvio tramite il pulsante di accensione/spegnimento. Sorpresa, alla ripartenza tutti gli applicativi della suite sono presenti nel menu! Lanciando Write e Calc notiamo che alcune icone sono assenti (compaiono solo se si passa il mouse sulla loro posizione) mentre altre hanno lo sfondo nero. La brutta notizia è che Draw risulta inusabile, in quanto presenta la maggior parte della finestra di lavoro completamente nera. Considerando che comunque quasi tutte le persone usano di fatto solo foglio elettronico ed elaboratore di testi, di Draw ne possiamo fare a meno. A ogni modo, si tenga conto che le nostre sperimentazioni non sono state approfondite: ci siamo limitati a creare dei documenti di prova molto semplici, li abbiamo salvati Arriva in aiuto TODVD ricorrendo ancora al trucco del boot con un LiveCD Linux per aggirare il problema dell’assenza di connessione, abbiamo scaricato ToDVD, che sta per The open DVD, cioè una iSo da 2.1 GB liberamente scaricabile: contiene software per Windows ma rilasciato in GpL o comunque sotto specifiche licenze che ne permettono il libero uso. il sito di riferimento è www.theopendvd.it, ma c’è anche la versione “piccola” su CD da 697 MB, ovviamente su www. theopencd.it. Abbiamo scelto la versione da 2.1 GB e abbiamo La lista delle periferiche mancanti di driver Linux pro 136 31 ReactOS evidente “vittoria schiacciante” a favore di TODVD. In ogni caso, terremo da parte questa immagine ISO alla quale chiederemo la rivincita con ROS 0.4.0. Gestione grafica da migliorare Da www. reactos.org/ download si può scaricare il CD di installazione e riaperti per verificarne l’effettivo salvataggio corretto. Insomma non abbiamo approfondito la sperimentazione con cose più complicate, per cui problemi subdoli che escono “alla distanza” potrebbero tuttora essere presenti e noi non li abbiamo rilevati a causa della semplicità dei nostri test. In generale, siamo contenti di vedere qualche risultato positivo (OpenOffice non era installabile su ROS 0.3.14) ma, nonostante l’evidente miglioramento, ReactOS se ne esce chiaramente sconfitto sul fronte della compatibilità e non ci resta che segnare una Purtroppo persiste il difetto della “finestra sporca”: svolgendo azioni parallele (per esempio scrivere con Abiword mentre si sta installando un programma) ecco che spessissimo una delle finestre cattura il contenuto dell’altra, impedendo di fatto una corretta prosecuzione delle attività in corso. Inoltre – lo abbiamo visto – molti programmi risultano inutilizzabili non di per se stessi ma per carenze dell’interfaccia grafica. In poche parole, manca un’adeguata gestione della pagina video, cosa che a nostro giudizio penalizza fortemente il sistema, confermando nell’utente quella sensazione di “non finito”. Si consiglia quindi agli utenti, di fare una cosa alla volta senza mischiare troppe azioni concorrenti, e, agli sviluppatori, di intervenire appena possibile per risolvere definitivamente questo annoso problema. Writer, console e menu utente... ROS non regge e il monitor “congela”: il cursore si muove, ma il sistema non accetta gli input tramite “click”. È stato necessario uno spegnimento forzato. ReactOS era, è, ma... sarà? Prendete il primo che passa in strada, fategli bere una bottiglia di grappa, poi mettetelo su un monociclo: bendatelo, legategli le mani dietro la schiena e ditegli “pedala”. Quanto reggerà prima di cadere “faccia avanti” e arricchire ancora di più il suo dentista? Passo passo Installare ReactOS 1 L’avvio dell’installazione La prima schermata durante l’installazione: l’ispirazione al vecchio Windows NT è evidentissima. 3 Il primo avvio Dopo un reboot, si attiva la grafica. Si noti il disallineamento nella schermata della data: un baco “estetico” segnalato presso http://jira. reactos.org/browse/CORE-4141. 32 Linux pro 136 2 Configurazione e formattazione Dopo l’impostazione dei dati classici (lingua, ecc.) si formatta e si installa. 4 Il tipico desktop ReactOS Pochi minuti e ci si ritrova con il desktop attivo, pronti a lavorare (schermata blu permettendo). ReactOS Informaticamente parlando, ReactOS per anni è stato nelle stesse condizioni (del pedalatore, non del dentista). Infatti, ogni volta che provavamo un nuovo rilascio, dopo un po’ che si facevano delle cose minimamente utili (per esempio qualcosa di più complicato di Solitario o Notepad) ecco che il sistema rallentava all’inverosimile o andava in schermata blu. Con gli anni le cose sono migliorate costantemente fino alla 0.3.15: intendiamoci, non si sono risolte ma almeno, nell’esempio di prima, il tizio vittima dell’esperimento non è più bendato e si è bevuto solo un paio di birre. La gestione della memoria, fino a ora largamente deficitaria, è stata migliorata nel rilascio 0.3.15: per esempio, il Memory Manager è stato riscritto e sistemato per almeno un buon 50% del codice che lo componeva. Manca ancora molto, ma l’instabilità è parecchio diminuita, facendo rientrare il numero dei BSOD entro una soglia che, quand’anche tuttora inaccettabile per l’utenza finale, è quanto meno comprensibile per un sistema ancora in alfa. Il ramo 0.3.x è durato fino a ora ben 85 mesi, più o meno dall’agosto 2006 al settembre 2013, con una media di un rilascio ogni circa cinque mesi. Comparare la 0.3.0 con la 0.3.15 è come raffrontare uno di quei carrelli della spesa dalle ruote che tirano tutte in una sola direzione con una utilitaria dalle gomme lisce e con il motore che “batte in testa”. Anche se pessimi entrambi, ci troviamo di fronte a due “oggetti” assolutamente diversi, tanto è stato il miglioramento generale del sistema. Certo, ReactOS è ancora largamente mancante di molte caratteristiche considerate normali e scontate in Windows, come il supporto completo alle periferiche USB, chipset video/audio, RAID, ecc. ecc.. Ma una base di lavoro c’è e tra qualche anno sarà abbastanza solida per reggere il peso di quello che gli verrà costruito sopra. La comunità di sviluppatori/ utenti è piccola ma internazionale: se date una sbirciata agli indirizzi IP delle persone in chat (server freenode, canale #reactos), vedete che alcuni abitano in posti che nemmeno si pensava potessero esistere. Per esempio, ne abbiamo individuato uno che, stando alla geo-localizzazione del suo indirizzo di rete, abita ben al di là dei monti Urali, in piena Russia Asiatica, in un paesino a qualche chilometro dal confine con la Mongolia. Quindi state attenti, perché anche se pochi, pure in Italia ci sono utenti e contributori al progetto: il vostro vicino di casa potrebbe essere un coder di ReactOS senza darlo a vedere. Ci teniamo a sottolineare che un progetto “povero” come questo sta proseguendo dal 1996 grazie al coordinamento tramite Internet e alla grandissima volontà di cooperazione di coloro che danno una mano. La 0.3.15 secondo noi sarà l’ultimo o il penultimo rilascio di una serie durata sette anni o giù di lì: tuttavia, siamo speranzosi che la serie 0.4 non richiederà lo stesso tempo. È nostra opinione che, come nel componimento di un puzzle, la serie attuale abbia “definito i contorni del rompicapo”, quindi ora si tratterà di lavorare sulla parte interna, incastrando al posto giusto i mini-blocchi composti nel frattempo. Moltissimo lavoro è stato fatto, ancora di più ne manca per finire l’opera: certo non possiamo prevedere il futuro, ma nessuno ci può impedire di immaginare un ReactOS usabile entro breve dall’utente finale e non solo da appassionati e tecnici. I 4 moschettieri di ReactOS Nonostante le evidenti carenze, ReactOS ha un grosso potenziale: abbiamo riassunto in 4 punti i vantaggi che secondo noi lo rendono attraente. ReactOS è molto leggero. Il PC arranca sotto il peso di Windows? ReactOS è un peso piuma che si accontenta attualmente di 64 MB di RAM e meno di 400 MB di spazio su disco, quindi è l’ideale per donare una seconda giovinezza a PC ormai inadeguati per il grasso e lento sistema operativo “Made in Redmond”. Tenere gli applicativi Windows ma rimpiazzare il sistema sul quale girano è una ottima mossa per salvare un sacco di soldi: niente licenza software da pagare e niente PC nuovo da comprare. Applicativi già pronti. Come era GNU/Linux 10-12 anni fa? Sicuramente carente di programmi! Sono occorsi anni e anni per aver software decenti (ricordiamo le epopee di Mozilla, Star/Open/Libreoffice, GNOME, ecc.). Ebbene, questo problema non sussiste in ReactOS, proprio perché, una volta completato, sarà compatibile con tutto il software esistente per Windows: i “pezzi grossi” (Microsoft Office, Autocad, Photoshop, ecc.) gireranno su ReactOS tali e quali come su Windows. Programmi a go-go: migliaia di programmi sono solo per Windows e difficilmente, se non mai, avranno una versione per Linux. Pensiamo a sistemi di controllo industriale SCADA, programmi di contabilità, migliaia di giochi... ROS intende “spezzare le catene” anche agli utenti di questi programmi che sono obbligati a usare il sistema operativo a finestre. Anche se lo considerano meno simpatico di una cartella pazza di Equitalia, molti utenti sono comunque restii alla eliminazione totale di Windows e si limitano a sopportare borbottando. Sia come sia, loro vogliono Windows senza però volere Microsoft. Ebbene, anche qui, ROS può dire la sua offrendo un sistema simil-Windows: compatibile, ma libero. Writer, console e menu utente... ROS non regge e il monitor “congela”: il cursore si muove, ma il sistema non accetta gli input tramite “click”. È stato necessario uno spegnimento forzato ReactOS 0.3.15? È già vecchio! ReactOS 0.3.15 è uscito da poco ma è già “vecchio”. Infatti gli sviluppatori apportano modifiche giornaliere ai sorgenti, ne consegue che una daily build (http://www.reactos.org/ getbuilds) sia molto più aggiornata delle ISO ufficiali, che escono a parecchi mesi una dall’altra. Lo diciamo solo a voi: sul canale IRC sono passati alcuni pettegolezzi telematici che parlano di un “qualcosa di grosso” che gli sviluppatori non hanno fatto in tempo a mettere nella 0.3.15 ma che darà un evidente incremento prestazionale al sistema. Pare quindi ci si debba aspettare a breve una 0.3.16 “di consolidamento” che integri queste grosse modifiche, anche se alcuni stanno dando battaglia in seno al Team affinché si inauguri il ramo 0.4, proprio a sottolineare il miglioramento che comporta questa misteriosa modifica. Noi ovviamente staremo col binocolo puntato, pronti a riportarvi tutte le notizie del caso! LXP Roberto Premoli Linux pro 136 33 Sysadmin Premiata Amministreria Dr Chris Brown Dottor Brown Il 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. Riciclare i bit U na recente visita all’Eden Project mi ha spinto a riciclare di più e a ridurre la mia carbon footprint, cioè le mie emissioni di anidride carbonica nell’atmosfera. Per ora mi limito ad alcune attività sporadiche. È vero che riciclo le barzellette che uso durante i miei corsi di formazione, ma questo dipende dal fatto che ne conosco solo quattro. Ho ridotto la velocità del mio tapis roulant. Ho iniziato a radermi a giorni alterni e a utilizzare i peli rasati per produrre compost. Ma potrei fare molto di più. Sono particolarmente preoccupato dall’esaurirsi dei bit che formano la base fondamentale del nostro mondo digitale. Pensateci un po’: quando abbiamo finito di usarli semplicemente li buttiamo via tutti. Nessuno li ricicla. A un certo punto, quando avremo usato l’ultimo uno (potrebbe anche trattarsi dell’ultimo zero, è difficile dirlo), tutti i computer si bloccheranno. Perciò ho deciso di creare un servizio di riciclaggio dei bit. Potrete mandare tutti i vostri dati usati ai miei server che li divideranno in zero e uno e li archivieranno in due dischi molto, molto grossi. Se siete preoccupati per la sicurezza vi posso fornire una piccola app che dispone i bit in ordine casuale prima della spedizione. Quando poi avrete bisogno di qualche dato semplicemente potrete chiedere un numero qualsiasi di zero e di uno e ve li spedirò. Inizialmente si tratterà di un servizio gratuito, ma il mio scopo è quello di creare una forma di dipendenza. Quando poi avrò stabilito un monopolio e i bit inizieranno a scarseggiare per davvero addebiterò una piccola somma per ogni bit. Alla faccia di Mark Zuckerberg. Tecniche esoteriche per i sysadmin direttamente dai recessi più impenetrabili della sala server Ricognizione della rete Scopriamo cosa c’è là fuori con lo strumento Open Source meglio documentato al mondo G uardandomi indietro mi sembra davvero difficile da credere che, in tutte queste puntate dell’Amministreria Nmap sia stato menzionato solo di passaggio. Beh, almeno finora. In breve Nmap è uno strumento per la “ricognizione della rete”. Permette di scoprire tutte le macchine all’interno di un blocco specificato di indirizzi IP, di esaminarle per scoprire quali porte sono aperte e addirittura di prenderne le “impronte digitali” per determinare la versione dei servizi che stanno girando e indovinare il sistema operativo. Informazioni di questo genere sono molto comode per un attaccante in cerca di qualche vulnerabilità da sfruttare per penetrare all’interno del sistema: non c’è dubbio che Nmap sia utilizzato dai cosiddetti black hat. È però possibile utilizzarlo anche per moltissime operazioni da white hat, come ad esempio la verifica del funzionamento di un firewall e il penetration testing, cioè la simulazione di un attacco dall’esterno per verificare la solidità del sistema. Nmap è stato scritto da Gordon Lyon (noto come Fyodor). Rilasciato inizialmente nel 1997 è tuttora attivamente sviluppato. Una semplice operazione di scansione si presenta così: $ nmap scanme.nmap.org Starting Nmap 5.21 ( http://nmap.org ) at 201305-02 16:24 BST Nmap scan report for scanme.nmap.org (74.207.244.221) Host is up (0.17s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 1720/tcp filtered H.323/Q.931 9929/tcp open nping-echo Nmap done: 1 IP address (1 host up) scanned in 4.83 seconds L’opzione -A abilita il rilevamento del sistema operativo e della relativa versione; ad esempio il comando # nmap -A -T4 www.linuxformat.com mi dice, tra le altre cose, che sul sito gira ProFTPD 1.3.1 sulla porta 21, Apache 2.2.8 sulla porta 80, OpenSSH sulla porta (non standard) 2020 e che probabilmente il sistema operativo è Ubuntu. Da notare che, in generale, si ottengono risultati migliori se si lancia Nmap da root. Alcune delle scansioni vengono eseguite creando a mano le intestazioni TCP e per trafficare a questo livello occorrono i privilegi di root. Non eseguite scansioni sulla rete aziendale senza permesso. Potreste andare incontro a guai seri! Un tripudio di documentazione Una delle cose migliori di Nmap è la documentazione: persino leggere la pagina di manuale è un piacere (di quante altre pagine di manuale potete dire lo stesso?). C’è poi un’approfondita guida utente 34 LINUX PRO 136 in inglese (http://nmap.org/book/toc.html) piena di esempi e casi di studio. La versione stampata è stata per un breve periodo il libro più venduto su Amazon. Un gran bel risultato! La riga di comando di *Nmap può diventare alquanto complicata: per una soluzione visuale potete provare Zenmap Sysadmin Quanto è unico il vostro ID unico? UUID Il Dottore mostra come sia possibile generare qualcosa che possiamo garantire essere unico, davvero! V i sono molte situazioni nelle quali dobbiamo garantire l’unicità. Ad esempio nel Regno Unito abbiamo tutti un diverso numero come membri del National Insurance; i nostri amici statunitensi invece hanno numeri unici di Social Security. Anche i numeri dei passaporti sono unici. I libri hanno ciascuno un ISBN unico. Gli indirizzi IP devono essere unici (ignorando gli spazi di indirizzi privati) e così via. Tradizionalmente il meccanismo per garantire l’unicità comporta una qualche forma di autorità centrale (o di una gerarchia di autorità) che assegna o approva gli identificativi (pensate a come sono assegnati gli indirizzi IP e i nomi a dominio). Si tratta di un sistema piuttosto costoso, che implica tra l’altro che la richiesta di un nuovo ID unico richieda minuti, ore, giorni o addirittura settimane per essere soddisfatta. Per quel che ne so l’idea di generare un identificativo unico senza bisogno di un registro centrale si è manifestata per la prima volta in un sistema operativo chiamato Domain/OS alla fine degli anni ‘80 ed è stata definita in maniera più formale, trasformandosi negli UUID che tutti conosciamo e amiamo, all’interno del Distributed Computing Environment della Open Software Foundation all’inizio dei ‘90. Nel caso non ne abbiate mai visto uno, un UUID è un numero di 128 bit rappresentato come 32 cifre esadecimali, divise in cinque gruppi di 8-4-4-12 bit separati da trattini. Ecco un esempio: 4ecf3183-096d-4ded-80b0-53c2f96f564f Trovo l’affermazione di unicità universale difficile da giustificare. Immaginatevi la scena, in un qualche istante nel futuro: un entusiasta di Linux sta conversando con un piccolo uomo verde che vive su un pianeta in orbita attorno a Capella B. “Guarda”, dice l’entusiasta di Linux, indicando lo schermo del suo portatile, “noi usiamo questi UUID per identificare in maniera univoca le partizioni dei dischi. Sono universalmente unici”. “Divertente,” dice il piccolo uomo verde “li usiamo anche noi!”. Poi si china per guardare meglio e aggrotta le sopracciglia “Hmmm, questo mi sembra vagamente familiare”. Consulta il suo database: “Sì, l’abbiamo già usato... era su una vaschetta di salsa di avocado”. Guarda con aria di rimprovero l’entusiasta di Linux. “Insomma, avresti dovuto controllare...”. Sì, ma come? Anche se ci limitiamo al pianeta Terra ha ancora senso domandarsi come possiamo essere sicuri che un UUID sia davvero unico. Beh, la versione 1 degli UUID veniva generata concatenando l’indirizzo MAC della macchina che lo stava generando con un timestamp con risoluzione di 100 nanosecondi. Si dà il caso che i 24 bit superiori assegnati dal produttore della scheda di rete al MAC siano ottenuti dall’IEEE: si tratta di quello che viene chiamato un OUI (Organisationally Unique Identifier) ed è un identificativo univoco dell’azienda. Il produttore poi assegna (presumibilmente) i rimanenti 24 bit inferiori in maniera unica per ciascuna scheda prodotta. Ignorando l’eventualità di aver bisogno di generare più di un UUID in un intervallo di 100ns, questo sistema garantisce l’unicità. Su Linux è possibile generare un UUID versione 1 con il comando: uuidgen -t 13a1c098-b23d-11e2-8eab-001d095409e5 Date di nuovo il comando e vedrete che i 12 bit più bassi sono No! Haiusato usato Hai 160eca3c-082c-45c2-ac95-a3fd3af48949 160eca3c-082c-45c2-ac95-a3fd3af48949 ? ? sempre gli stessi. Questo è il mio indirizzo MAC e potete scoprire a quale organizzazione appartiene l’OUI andando sul sito http://standards.ieee.org/develop/regauth/oui/public.html (vi risparmio la fatica: 001d09 è Dell). Gli UUID versione 4 semplicemente usano valori casuali per 122 dei 128 bit (gli altri sei bit sono definiti dalla struttura standard di un UUID: leggete la RFC4122 per i dettagli). È possibile ottenere un UUID versione 4 con il seguente comando: uuidgen -r aca7197d-1e01-4e2f-b0f0-b3a232409ea9 ed è anche possibile ottenerli dal kernel così: cat /proc/sys/kernel/random/uuid d54f567e-f2b4-4d46-94e9-bbcedbe6c199 L’unicità degli UUID versione 4 non può essere garantita in assoluto, anche se la pura forza bruta dell’aritmetica combinatoria costituisce un argomento convincente. Per citare Wikipedia, dopo aver generato due trilioni di UUID (si tratta di circa 300 per ogni persona sul pianeta) la probabilità di una collisione è 0.0000000000004, che è piuttosto bassa. Affinché la probabilità di una singola collisione salga al 50% ognuno dovrebbe generare 600 milioni di UUID. Cosa dire invece dell’uso degli UUID per garantire un nome unico per le partizioni di un sistema Linux? La parola esagerazione viene subito alla mente. E rendono del tutto illeggibile /etc/fstab! Ricordatevi che anche voi siete unici. Come chiunque altro La sfida letteraria degli UUID Ho una competizione per voi. Inventate un UUID valido che possa essere letto come frase italiana. Ai fini della gara va bene qualsiasi sequenza di 32 cifre esadecimali ed è possibile applicare sostituzioni come la cifra 0 per ‘o’ e la cifra 1 per ‘l’, 5 per ‘s’ e 7 per ‘t’. Ecco un esempio: eade55oc-o5af-ade11a5e7aede11a7e1a Se avete qualcosa di meglio mi piacerebbe saperlo! LINUX PRO 136 35 Sysadmin Guida rapida allo spazio di swap Spazio di swap Volete una discussione tra amministratori di sistema? Chiedete loro della memoria virtuale su disco. Quando deve essere grande? Ce n’è bisogno? U na delle cose che ci si aspetta che facciate quando installate Linux è creare una partizione del disco da usare come spazio per lo swap. Infatti la maggior parte dei programmi di installazione vi redarguisce severamente se non lo fate. Esistono però opinioni diverse sulla sua dimensione e addirittura sul fatto che sia davvero necessaria. Cominciamo cercando di comprendere a cosa serve lo spazio di swap. Linux esegue molti processi, ognuno dei quali reclama della memoria. Aiutato dall’hardware dedicato alla gestione della memoria, il kernel cerca di fornire a ciascun processo uno spazio di indirizzi della dimensione che gli serve. In realtà lo spazio di indirizzi logici visto dal processo è suddiviso in pagine (di solito di 4k su Linux), a ognuna delle quali viene fatta corrispondere una pagina fisica all’interno della RAM. Quando il numero totale delle pagine richieste da tutti i processi in esecuzione supera il numero delle pagine fisiche disponibili, il kernel ne recupera alcune salvando il loro contenuto sul disco. La partizione di swap viene usata a questo scopo e l’attività di scrittura e lettura delle pagine dalla RAM allo spazio di swap e viceversa è detto swapping. Quindi lo spazio di indirizzamento disponibile è dato dalla somma della RAM fisica più la dimensione dello spazio di swap. Anche il kernel usa un certo quantitativo di memoria, ma questa non viene mai salvata su disco. Quanto grande deve essere la partizione di swap? Non c’è una risposta semplice a questa domanda. Ai tempi delle prime macchine che usavano la memoria virtuale paginata (alzi la mano chi si ricorda dei VAX) la regola empirica era di usare uno spazio di swap pari a tre volte le dimensioni della RAM (ovviamente all’epoca ci si poteva permettere al massimo 1 MB di RAM). Però oggigiorno la RAM è incredibilmente conveniente (io sono riuscito ad aggiungere 8 GB di memoria al mio server per meno di 50 euro), esiste quindi la possibilità di avere nella macchina una quantità di RAM tale da non avere affatto bisogno di una partizione di swap. Working set Detto questo occorre notare che una partizione di swap vi consente di sostenere un carico di lavoro altrimenti impossibile. Supponiamo per esempio di voler far girare contemporaneamente sei macchine virtuali, ciascuna con 1 GB di memoria, ma di avere a disposizione solo 4 GB di RAM fisica. Lo swapping funziona bene quando il sistema riesce a stabilire un working set di pagine (le pagine cui i processi in esecuzione accedono con una certa regolarità) che può essere contenuto nella RAM. In questa situazione il sistema può anche usare una buona parte dello spazio di swap, ma c’è relativamente poco movimento di pagine tra disco e RAM. Nel mio esempio con le macchine virtuali è lecito aspettarsi un certo ritardo quando si passa da una macchina all’altra, ma una volta che il working set delle pagine della nuova VM è stato riportato in RAM, le prestazioni dovrebbero essere buone. Lo swapping non funziona bene quando il working set è troppo grande per la RAM disponibile, perché il sistema si ritrova a scrivere su disco la pagina A per far posto alla pagina B solo per scoprire che quasi immediatamente deve spostare nello spazio di swap la pagina B per far posto alla pagina C (o magari di nuovo alla pagina A). Questa situazione, quando il sistema passa sempre più tempo a spostare pagine dentro e fuori e sempre meno tempo a fare qualcosa di utile, è detto trashing e ha effetti devastanti sulle prestazioni. Come funziona Basta con la teoria, passiamo alla pratica. La configurazione più comune consiste nel creare una singola partizione di swap al momento dell’installazione. Il programma di installazione aggiungerà una riga in /etc/fstab, qualcosa di questo genere: /dev/sda6 none swap defaults 0 0 Al momento dell’avvio della macchina viene lanciato il comando swapon -a (su Red Hat, per esempio, viene fatto all’interno dello script etc/rc.sysinit) che va a recuperare tutte le partizioni di swap definite in /etc/fstab. La maggior parte degli utenti si accontenta di questa configurazione di default e non ci pensa più. È possibile estendere lo spazio di swap in modo da usare partizioni addizionali. Supponiamo ad esempio di avere un secondo disco (sdb) e di aver creato su di esso la partizione di swap /dev/sdb2. Per prima cosa occorre inizializzare la partizione con il seguente comando: # mkswap /dev/sdb2 Bisogna poi dire al kernel di usare la nuova partizione: # swapon /dev/sdb2 Per rendere permanenti le modifiche (cioè per fare in modo che la nuova partizione di swap sia attivata al momento dell’avvio della macchina) bisogna però aggiungere una riga a fstab: /dev/sdb2 none swap defaults 0 0 Linux è in grado di assegnare una priorità alle partizioni di swap. Se avete due dischi con velocità simile potete bilanciare tra di essi il carico di lavoro causato dallo swapping assegnando loro la medesima priorità. Se però uno dei due è più veloce dell’altro potete assegnargli una priorità maggiore. Se per esempio preferireste usare /dev/sdb2 piuttosto che /dev/sda6 per lo swapping potreste modificare le relative righe di fstab così: /dev/sda6 none swap pri=2 0 0 /dev/sdb2 none swap pri=3 0 0 Swapping e paging La nomenclatura tradizionale fa distinzione tra il paging (quando singole pagine sono parcheggiate sul disco) e swapping (quando un intero processo viene parcheggiato sul disco). Per quanto 36 LINUX PRO 136 ne so Linux non fa questo genere di distinzione: in effetti non esegue uno swap nel senso tradizionale del termine. Nonostante ciò si parla di solito di spazio di swap e non di spazio di paging. I programmi di installazione di Linux vi redarguiscono severamente se non create una partizione di swap. Ignorateli! Sysadmin Quanto ne sto usando? Esistono numerosi programmi che mostrano quanto spazio di swap state usando. In primo luogo c’è Vmstat, uno dei pochi a mostrare l’attività di swap in entrata e quella in uscita verso il disco. C’è poi top: $ top -n 1 -b | grep total Tasks: 212 total, 1 running, 209 sleeping, 0 stopped, 2 zombie Mem: 4048324k total, 3810436k used, 237888k free, 143032k buffers Swap: 8859640k total, 6860k used, 8852780k free, 705668k cached ll comando free mostra più o meno le stesse informazioni: $ free -m -t total used free shared buffers cached Mem: 3953 3744 209 0 141 699 -/+ buffers/cache: 2902 1050 Swap: 8651 6 8645 Total: 12605 3750 8854 Nell’esempio qui sopra si vede che solo il 5% della memoria è libero. C’è da preoccuparsi? No, non necessariamente. Se il kernel nota che c’è della memoria libera la requisisce per usarla come spazio di buffer per la cache del traffico con i filesystem, cosa che accelera l’accesso ai file usati di frequente. Se guardate meglio i numeri noterete qualcosa di strano. Il sistema ha scritto nello spazio di swap 6 MB di dati anche se ci sono 209 MB di RAM libera. Perché ha fatto questa scelta? Tale comportamento può essere modificato correggendo il parametro caratterizzato dal delizioso nome di swappiness (un valore compreso tra 0 e 100), che stabilisce la propensione del kernel a utilizzare lo spazio di swap anziché reclamare pagine dalla cache. Una swappiness di 0 dice al kernel di utilizzare lo swap come extrema ratio. Un valore di 100 incoraggia l’utilizzo aggressivo dello spazio di swap. Il valore di default è 60, come potete verificare con il comando Processo 1 RAM Una pagina Spazio logico degli indirizzi Spazio fisico degli indirizzi Memory Management Unit (MMU) È anche possibile usare un file anziché una partizione per lo swap. Ai corsi ero solito dire alla gente che lo swapping su file era più lento di quello diretto su una partizione, ma con i kernel Linux moderni credo che non sia più vero. Aggiungere un file per lo swap è sicuramente più semplice che estendere o ripartizionare il disco fisico e può essere una soluzione di breve termine per risolvere un problema di mancanza di memoria. Ecco come fare: per prima cosa occorre creare il file e assicurarsi che tutto lo spazio sia allocato. Linux permette a un file di avere dei “buchi” al suo interno, ma con i file di swap non funziona quindi occorre essere sicuri che l’intero file sia stato scritto con un comando di questo genere: # dd if=/dev/zero of=/ilmiofilediswap bs=1M count=1024 che produce un file di 1 GB pieno di zeri. Poi bisogna preparare il file per essere usato come area di swap: # mkswap /ilmiofilediswap Ora possiamo aggiungere una nuova riga a /etc/fstab: ilmiofilediswap none swap sw,pri=1 0 0 e possiamo attivare la nuova area di swap: $ sudo swapon -a Infine verifichiamo lo spazio di swap a disposizione e quello usato: $ swapon -s Filename Type Size Used Priority /dev/sda6 partition 7811068 0 2 /ilmiofilediswap file 1048572 0 1 Notate che abbiamo assegnato una priorità ai due spazi di swap in modo che venga preferibilmente usata la partizione (/dev/sda6) rispetto al file (/ilmiofilediswap). A proposito, se date un’occhiata al file fstab sul vostro sistema è probabile che scopriate che la partizione di swap è definita usando un UUID piuttosto che un semplice nome di dispositivo. Spazio logico degli indirizzi Processo 2 Le pagine ombreggiate sono scritte sul disco Spazio di swap $ sysctl vm.swappiness vm.swappiness = 60 Per modificarne il valore: $ sudo sysctl -w vm.swappiness=100 vm.swappiness = 100 Per fare in modo che la modifica venga applicata al momento del riavvio del PC aggiungete la seguente riga al file /etc/sysctl.conf: vm.swappiness = 100 Lasciatemi però ripetere un consiglio che ho già dato in passato: le persone che hanno scelto il valore di default probabilmente comprendono molto meglio di voi e di me come funzionano le cose. Modificatelo solo se sapete cosa state facendo e se avete una qualche maniera oggettiva per misurare i cambiamenti nelle prestazioni causati dalle vostre modifiche. Infine, per i sistemi desktop, c’è un’altra ragione per creare dello spazio per lo swap che non ha niente a che fare con lo swapping. Se chiedete al sistema di ibernarsi il contenuto della memoria verrà scritto sul disco e poi verrà tolta l’alimentazione alla memoria (e a tutto il resto). Per fare questo viene usato lo spazio di swap. Se volete essere in grado di ibernare il vostro portatile dovrete allocare una partizione di swap che sia almeno delle stesse dimensioni della RAM. Quindi, la prossima volta che vi ritroverete in un gruppo di amministratori di sistema, non sollevate la questione dello spazio di swap. Non ci sono risposte “giuste”. E ci sono domande molto più importanti da porsi come “A chi tocca pagare questo giro?”. LXP A ogni processo viene data l’illusione di disporre di uno spazio di indirizzi logici contigui, ma la realtà è più complicata Un po’ di storia UNIX iniziò su macchine che non avevano la memoria virtuale. C’era un trucco per migliorare le prestazioni chiamato sticky bit, che faceva parte dei modi di un file. Uno sticky bit a 1 su di un file eseguibile diceva a UNIX che si trattava di un file usato spesso, che doveva, per quanto possibile, essere mantenuto in memoria dopo aver terminato l’esecuzione. L’avvento della memoria virtuale ha reso obsoleto lo sticky bit. In Linux si guadagna ancora da vivere sulle directory, dove modifica le regole relative a chi può cancellare i file contenuti nella directory. Linux permette di impostare lo sticky bit anche su file regolari, ma per quel che ne so l’operazione non ha alcun effetto. LINUX PRO 136 37 L’angolo di Android News, recensioni e guide sul sistema operativo libero per smartphone Se hai news da segnalarci o dei commenti scrivici ad [email protected] Il ritorno di Motorola Il nuovo Moto G combina dotazione al top e prezzo di fascia bassa. Basterà per far risorgere il marchio americano? A distanza di due anni da quando ha deciso di lasciare l’Italia, Motorola torna nel nostro Paese con un nuovo smartphone, il Moto G. In questo periodo molte cose sono cambiate in Motorola, e quello che è stato per anni il primo produttore di telefonia cellulare americano è stato acquisito da Google nel 2011 per 12,5 miliardi di dollari. Ma per vedere i primi effetti dell’acquisizione si è dovuto aspettare il 2013 e la presentazione del Moto X che presenta alcuni elementi decisamente originali come la possibilità di personalizzare struttura e componenti interne e la funzione “Ok Google” che permette di “risvegliare” lo smartphone dallo standby e utilizzare i comandi vocali anche senza premere il pulsante di accensione. Purtroppo a oggi non è previsto l’arrivo in Europa di Moto X; è disponibile però da qualche giorno la versione “economica” Moto G, anche se poi di economico c’è solamente il prezzo di 199 euro. La dotazione infatti è di fascia alta visto l’ottimo schermo IPS da 4,5 pollici con risoluzione HD da 1280 x 720 pixel e il processore quad core Qualcomm Snapdragon 400. Per contenere il prezzo Motorola ha invece risparmiato sui materiali che sono di plastica non proprio leggerissima (145 grammi) e ha sacrificato la memoria disponibile che 38 LINUX PRO 136 è di soli 8 GB (in gennaio arriverà però Moto G nella versione da 16 GB a 249 euro). Inoltre mancano 4G e NFC, non c’è l’alloggiamento per schede di memoria e anche la fotocamera da 5 Megapixel non brilla particolarmente come resa delle immagini. Si tratta però di caratteristiche non proprio indispensabili per l’utilizzo quotidiano, mentre non si discute la qualità dello schermo e le prestazioni, paragonabili a quelle di un modello di fascia alta. Come software troviamo ancora Android 4.3 Jelly Bean nella sua versione base, anche se Motorola garantisce l’aggiornamento a KitKat entro gennaio, e due applicazioni originali Motorola come Assist e Migrazione. La prima semplifica l’utilizzo con funzioni utili come la possibilità di rendere silenzioso lo smartphone durante la notte o le riunioni grazie a una comprensione “intelligente” del calendario. Non ci sono i comandi vocali presenti su Moto X, ma è comunque possibile utilizzare quelli di Google Now, come su tutti i dispositivi Android. Grazie a Migrazione potrete invece trasferire automaticamente a Moto G contatti, rubrica e impostazioni da qualsiasi altro telefono Android. Purtroppo Migrazione non funziona con iPhone e i Windows Phone o BlackBerry. La batteria da 2.050 mAh è paragonabile a quella del Nexus 4 e dovrebbe consentire un’autonomia più che sufficiente per un’intera giornata, ma aspettiamo di provarlo direttamente prima di fornire un giudizio definitivo. La versione da 8 GB è già disponibile da qualche giorno nei negozi, noi però vi consigliamo di aspettare gennaio quando per 50 euro in più sarà possibile acquistare la versione da 16 GB. Occorre infatti considerare che il sistema operativo occupa più di 3 GB di spazio e per questo la capacità reale del modello da 8 GB è inferiore ai 5 GB, un po’ poco anche volendo usare al massimo la cloud di Google. A caccia di bug C he Android sia attualmente il sistema operativo mobile più a rischio sicurezza non è certo un mistero e Google le sta provando veramente tutte per risolvere il problema. E così, dopo il doppio controllo sul contenuto del Play Store e l’introduzione di verifiche anche sulle app provenienti da siti esterni, ora Google offre una ricompensa in denaro a chi segnalerà bug più o meno gravi. Il programma si chiama Google Vulnerability Reward Program e offre ricompense variabili dai 100 ai 20.000 $ (73,60-14.720 euro circa) a seconda della gravità del bug scoperto. Segnalate bug e buchi che mettono a rischio la sicurezza all’indirizzo security-patches@google. com mentre per avere maggiori informazioni l’indirizzo è http://www.google.com/ about/appsecurity/patchrewards/. LXP Nexus 5 L’angolo di Android LG Nexus 5 Componenti al top, Android 4.4 KitKat in esclusiva e prezzo senza paragoni per l’ultimo Google Phone C ome capita a volte con i prodotti che si aspettano per lungo tempo, anche il Nexus 5 ci ha un po’ deluso. E non certo per il prezzo, che rimane di gran lunga il più accessibile tra gli smartphone di fascia alta, o per la dotazione hardware che comprende lo schermo più definito e il processore più veloce attualmente disponibile. Il fatto è che ci eravamo abituati a trovare dei particolari che rendevano gli smartphone Nexus non solo i più evoluti tra gli Android, ma anche i più particolari. Così, per esempio, Nexus 4 poteva vantare un fantastico (anche se fragile) retro in vetro, Galaxy Nexus è stato il primo ad avere il rivoluzionario Android 4.0 Ice Cream Sandwich e Nexus One, oltre ad essere il primo Nexus, si distingueva per il look assolutamente originale. Nexus 5 invece non offre nessuna vera innovazione, oltre al fatto di essere il primo a montare Android 4.4 KitKat, che rimane però solo un aggiornamento poco significativo. L’unica vera novità per noi italiani è stata la possibilità di acquistarlo direttamente online dal Play Store fin dal primo giorno e infatti sono bastate un paio d’ore per fare il tutto esaurito, almeno del modello nero da 16 GB. Solido e potente La prima impressione che abbiamo ricavato dal nuovo Nexus è stata quella di una buona maneggevolezza e di un peso tutto sommato contenuto, (130 grammi), nonostante le dimensioni da 5 pollici dello schermo. Il Nexus 4, pur avendo un display più piccolo, pesava 10 grammi in più, e questo si spiega con la presenza del vetro anche sul retro. Le plastiche con cui è costruito Nexus 5 non ci sono però sembrate particolarmente curate e più che al HTC One ci hanno fatto pensare al Galaxy S4, che ha però il grande vantaggio di avere il retro staccabile. Nexus 5 invece, come da tradizione Nexus, è un pezzo unico e questo significa che non ha l’alloggiamento per le schede di memoria e la batteria non rimovibile, entrambi fattori che purtroppo non sono da sottovalutare. Nexus 5 è stato costruito da LG su indicazioni di Google utilizzando lo stesso processore quad core Qualcomm Snapdragon 800 da 2,3 GHz con 2 GB di RAM presente sul G2, che attualmente è di gran lunga il più potente smartphone disponibile, e non solo in campo Android. Solo che i benchmark da noi effettuati, pur risultando nettamente migliori del precedente Nexus 4, sono inferiori a quelli del modello top di LG. In mancanza di una spiegazione differente (come potrebbe essere la scelta di under-cloccare la CPU da parte di Google) riteniamo che la causa possa essere KitKat ancora non pienamente compatibile con i benchmark Antutu o Quadrant Standard. Quello che è certo è che a livello di fluidità Nexus 5 non ha veramente niente da invidiare a G2 e anche con molte App attive contemporaneamente non abbiamo mai notato alcun rallentamento. Il modello che abbiamo provato ha 16 GB di memoria reale, che però si riducono a poco più di 12 GB effettivamente disponibili. Per questo motivo se pensate di archiviare musica e film vi consigliamo di prendere in considerazione la possibilità di investire 50 euro in più e acquistare la versione da 32 GB. Sempre più Google A differenza degli altri smartphone Android che utilizzano in misura sempre maggiore App e interfacce personalizzate dai produttori, Nexus 5 offre l’esperienza originale Google arricchita da tutte le nuove funzioni presenti in Android 4.4 KitKat, che gli altri modelli non vedranno per molti mesi. Le novità rispetto alla precedente versione non sono molte ma risultano comunque interessanti anche dal punto di vista grafico grazie all’impiego di trasparenze nella barra superiore, alla nuova sistemazione dei widget e a nuove font più eleganti. Peccato che la novità più interessante, la possibilità cioè di attivare i comandi vocali in qualsiasi momento semplicemente pronunciando la frase “Ok Google Now” funzioni solamente se il sistema è impostato per la lingua inglese. Le altre novità, come l’integrazione degli SMS nell’App di messaggistica Hangouts, oppure il nuovo tastierino telefonico che integra le funzioni T9, sono state rese disponibili da Google anche per le versioni precedenti del sistema. Un punto storicamente debole dei telefoni Nexus è la fotocamera, che nel Nexus 5 risulta decisamente migliorata grazie al sensore da 8 megapixel e al sistema di stabilizzazione hardware OIS. I risultati non sono comunque ancora all’altezza di HTC One, Xperia Z1 e tantomeno degli ultimi modelli di Apple e Nokia. Anche la batteria ha una capienza inferiore ai device concorrenti e questo è molto Pur avendo un display più grande del predecessore, il nuovo Googlefonino pesa dieci grammi in meno grave in quanto non è sostituibile e, con lo schermo e i sensori sempre attivi, c’è il rischio concreto di non arrivare alla fine di una giornata di lavoro. Tutto esaurito Finalmente è possibile acquistare online i Nexus anche dall’Italia. Basta avere un account Google e collegarsi all’indirizzo https:// play.google.com/store. Peccato che il modello più economico da 16 GB sia esaurito praticamente da quando è stato presentato, mentre per avere quello da 32 GB serva un po’ di tempo. Sempre meglio comunque dei tempi biblici necessari fino all’anno scorso per acquistare all’estero un Nexus. LXP Giudizio Nexus 5 Produttore: LG Web: https://play.google.com/store Prezzo: €349,00 Caratteristiche Prestazioni Autonomia Qualità/prezzo 8.5 8 7 9.5 L’ultima generazione di smartphone curati da Google si distingue per il prezzo. Il voto di Linux Pro 8 Linux pro 136 39 Recensioni Tutte le novità in campo software e hardware testate e valutate ogni mese dai nostri laboratori Se vuoi segnalarci qualche novità scrivi a [email protected] Una breve legenda 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: Nulla da eccepire. Un prodotto praticamente perfetto. Un buon prodotto. I pochi difetti presenti non sono gravi. Compie il suo lavoro ma necessita di ulteriori sviluppi. Deve migliorare prima di raggiungere un voto sufficiente. Un completo disastro. Gli sviluppatori devono tornare alla fase di progettazione. 10 8-9 6-7 5-4 1-3 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. 40 LINUX PRO 136 QUESTO MESE... Test >> PC-BSD 9.2 Un sistema ostico è oggi diventato pag. 41 accessibile. Possibile? VMware Workstation 10 Strumenti ancora più professionali per il principe indiscusso pag. 42 della virtualizzazione VMware Player 6 VMware Workstation 10 Un software gratuito per uso personale con cui creare nuove macchine virtuali o usare quelle di altri prodotti VMware pag. 44 In libreria >> I volumi del momento pag. 45 ∆ Learning Python (5th edition) ∆ Costruire robot con Arduino Confronto >> Cinque servizi per sistemare pag. 46 le vostre collezioni ∆ Data Crow ∆ GCstar ∆ Kexi ∆ LibreOffice Base ∆ Tellico Data Crow Da non perdere >> Video editing, motori di ricerca interni, visualizzatori di immagini e retro game pag. 52 ∆ LiVES ∆ Catfish pag. 53 ∆ Sxiv pag. 53 ∆ Colorful pag. 54 ∆ Choria pag. 54 LiVES PC-BSD 9.2 Test PC-BSD 9.2 BSD, il sistema operativo che suscita terrore nel cuore di molti utenti di Linux è… facile da usare. È possibile che sia così? B SD viene spesso considerato come il cugino cattivo di Linux. Il suo nome viene sussurrato sottovoce e i suoi utenti sono considerati programmatori d’élite e super-amministratori di sistema. Tuttavia, quando ci siamo collegati al sito di PC-BSD per scaricare l’ISO più recente, abbiamo scoperto che sulla schermata principale comparivano Facebook e un video di YouTube a base di gatti tutti da ridere. Niente di particolarmente astruso, insomma. Forse BSD, dopotutto, è destinato anche ai comuni mortali? PC-BSD si propone come sistema accessibile, una di avvertimento che ci comunicava che avevamo meno di 50 GB di spazio sull’hard disk. L’ammonimento sembrava un po’ esagerato, dato che l’installazione occupa solo 7,2 GB; un messaggio del genere può far temere all’utente che l’installazione non andrà a buon fine. Noi l’abbiamo ignorato e tutto è filato liscio sul nostro hard disk da 20 GB. Se non fosse per il logo sul desktop, molti utenti di Linux non si renderebbero nemmeno conto che non stanno usando un sistema operativo della scuderia del pinguino. La gamma di applicazioni installate per impostazione predefinita, però, è un po’ scarna, considerato lo scaricamento da 3,4 GB. “PC-BSD si propone come sistema accessibile, una sorta di equivalente BSD di Linux Mint” sorta di equivalente BSD di Linux Mint. Naturalmente, i vari sistemi BSD non si possono paragonare alle distribuzioni Linux perché non condividono un kernel comune; benché le funzioni siano a grandi linee simili, ciascuno dei progetti principali ha un kernel proprio. D’altronde, PC-BSD si può considerare una distribuzione di FreeBSD. L’installazione non potrebbe essere più facile: basta selezionare Desktop o Server e dare l’avvio. Terminata la procedura, il sistema vi guida nella creazione di un utente ed ecco fatto. Forse alcune popolari distribuzioni Linux potrebbero imparare un paio di cose da PC-BSD in materia di installazioni accessibili. Il setup crea un desktop KDE ma sono disponibili anche altri ambienti. L’unico neo è stato un messaggio Manca una suite Office, l’unico browser Web è Konqueror e per il resto c’è ben poco di interessante: dovrete quindi installare da voi ciò che vi occorre. PC-BSD è provvisto del celebre sistema di gestione dei pacchetti basato sui ports; ma non è il caso che gli amanti delle interfacce grafiche si preoccupino. Infatti c’è anche AppCafe, un’interfaccia grafica per l’installazione di programmi, tra le migliori che abbiamo mai visto. Le applicazioni sono solo 1.100 (‘solo’, cioè, rispetto alle quasi 70.000 di Ubuntu Software Center) ma dovreste trovare tutti i software necessari per i principali impieghi. Non manca qualche sorpresa, come Apache OpenOffice in luogo del più popolare LibreOffice (o al limite di Calligra Suite, considerata L’aspetto esterno può ricordare l’eleganza di KDE (sì, è una battuta) ma sotto di esso batte un cuore BSD la predilezione di questo sistema operativo per KDE). Come abbiamo detto, sono disponibili software per la maggior parte degli impieghi; la scelta, però, è meno ampia rispetto a quanto forse siete abituati. È comunque possibile installare i software Open Source alla vecchia maniera e la maggior parte dei software per Linux dovrebbe risultare compatibile con BSD. Gestione dei file Ormai da anni, la principale differenza tra BSD e Linux riguarda il modo in cui gestiscono i filesystem. ZFS di BSD suscita da tempo l’invidia degli amministratori di sistema che utilizzano Linux. Questa versione di PC-BSD è provvista di Ipresnap, che facilita la procedura di creazione di istantanee di ZFS, benché per il momento sia disponibile solo tramite la riga di comando. Nella prossima versione dovrebbe essere disponibile l’alternativa grafica. ZFS è ora compatibile con Linux e anche BTRFS inizia a essere usato; in altre parole, il divario tecnico tra i due sistemi operativi si sta colmando. Al tempo stesso, però, alcune versioni di BSD (in particolare PC-BSD) sono divenute più semplici da usare, sfidando Linux su questo terreno. A meno di avere una predilezione ideologica per BSD rispetto a GPL, è difficile trovare un motivo specifico per provare BSD; noi, però, vi consigliamo comunque di dargli un’occhiata. E non perché ci sia chissà quale differenza tecnica ma solo perché vi offre un punto di vista diverso su ciò che può essere un sistema operativo gratuito di tipo UNIX; oltretutto, è piuttosto facile da installare su un dispositivo virtuale o su un PC in più. LXP Giudizio PC-BSD 9.2 Sviluppatore: PC-BSD Software Web: www.pcbsd.org Licenze: Varie; il nucleo è BSD Caratteristiche Prestazioni Facilità d’uso Documentazione 9 9 10 8 Senza alcun dubbio è l’introduzione più agevole al mondo non sempre comprensibile di BSD. Il voto di Linux Pro 9 linux pro 136 41 Test VMware Workstation VMware Workstation 10 Torna il più potente (ma purtroppo costoso) programma di virtualizzazione per Linux e Windows, con poche, ma sostanziali, novità: vale la pena comprarlo? V Mware è stata senza dubbio la prima azienda a intuire le grandi potenzialità della virtualizzazione, facendone un business di grandi dimensioni. Dai vagiti delle prime release, ai ruggiti dell’ultima, ha compiuto molta strada, sapendo imporre uno standard de facto nel mondo enterprise (leggi: server e cloud) e mantenendo un primato anche nel mondo consumer, grazie a prodotti come Workstation e Player. Il primo destinato a un pubblico di professionisti, il secondo a chi si serve della virtualizzazione per scopi relativamente più semplici, come realizzare un ambiente di test o di sviluppo separato o, perché no, di un secondo computer con Microsoft Windows che non occupi altro spazio sulla scrivania. complessa. Trattandosi di un prodotto finalizzato ai PC, è piuttosto difficile che riusciremo a sfruttarne tutte le potenzialità, ma in teoria possiamo configurare le nostre VM per ospitare fino a 16 processori e 64 GB di RAM, in grado di usare dischi di 8 tera di dimensioni e di collegarsi a un massimo di 20 reti virtuali, senza contare la possibilità di usare controller USB 3.0 e di attivare una modalità “pass-through” per i drive SSD, per sfruttarne appieno la velocità. Con una macchina fisica (d’ora in poi, host) di elevata potenza, insomma, si possono eseguire con agilità diverse macchine virtuali anche se, ovviamente, chi ha bisogno di virtualizzare un’infrastruttura di 4 o più server sempre accesi dovrebbe guardare altrove, come minimo a VMware ESXi e vSphere. L’hardware virtuale Macchine virtuali a tempo determinato A ogni rilascio di VMware Workstation, possiamo realizzare macchine virtuali dalla configurazione sempre più Un’altra novità di rilievo di VMware Workstation 10 è la possibilità di dare una scadenza VMware Tools VMware Tools è un pacchetto di driver che va installato sui sistemi operativi ospitati dalle VM. Non tutti i SO sono ovviamente 42 LINUX PRO 136 supportati, ma varie versioni di Windows, Linux e BSD sì. Questi tool attivano le opzioni di integrazione più avanzate. VMware Workstation 10 è il software di virtualizzazione più completo, ma solo i professionisti apprezzeranno le sue funzionalità più avanzate alle macchine virtuali crittografate, introdotte per la prima volta nella scorsa release. Si possono quindi distruibuire delle VM “a tempo”, destinate a diventare inaccessibili una volta superata una certa data. Può tornare particolarmente utile a chi per esempio deve spesso rilasciare versioni “beta” dei propri prodotti e vuole essere sicuro che, dopo qualche tempo, nessuno possa più usare una versione “obsoleta” del suo software. Una funzione decisata apprezzata e molto ben implementata. Pronto per Win 8.1 Se la novità dell’anno scorso fu la possibilità di realizzare macchine virtuali pronte a ospitare Windows 8 e 2012, quella di quest’anno è ovviamente la compatibilità con Windows 8.1, che può essere utilizzato La schermata iniziale di VMware Workstation 10 è estremamente essenziale: presenta solo le funzioni principali VMware Workstation Test tranquillamente come guest OS sfruttando – se presenti – anche gli eventuali sensori di cui è provvisto l’host. Questa possibilità, tuttavia, sembrerebbe indirizzata soprattutto a chi userà la versione per Windows su un tablet Surface Pro o similare, mentre il supporto di Linux può variare in base ai modelli e alla distribuzione scelta. Purtroppo non abbiamo avuto modo di testare questa caratteristica di persona, ma è giusto menzionarla. Qualche intoppo L’installazione su Ubuntu 12.X e Fedora 19 potrebbe dare qualche grattacapo iniziale. In particolare, sulla seconda VMware Workstation si è lamentato per l’assenza di GCC (che può sempre essere installato all’occorrenza), mentre un analogo tentativo su Linux Mint 15 ha dato esito positivo al primo colpo. L’unica cosa che occorre ricordarsi di fare è un passaggio a root con il comando su, e poi un lancio del pacchetto .bundle tramite il tool sh. VMware Workstation 10 è disponibile in due versioni distinte per host a 32 e a 64 bit. Vista la natura del programma, sarebbe opportuno l’utilizzo di un host a 64 bit al fine di garantirsi la compatibilità con qualunque tipo di sistema operativo guest – Windows 2008 R2 e 2012, per esempio, sono disponibili solo a 64 bit – ma per chi dovesse virtualizzare solo una macchina con Windows 2000 o XP, o con una vecchia versione di Linux, 32 bit potrebbero essere sufficienti. In quei casi, però, il prodotto VMware Player 6 potrebbe essere maggiormente adatto, visto che offre bene o male le stesse caratteristiche “emulatorie” a costo zero. Perché spendere? Ciò che segna un solco invalicabile fra VMware Player e Workstation è la parte “server” del prodotto. VMware Workstation 10 può essere considerato una versione in miniatura di un’infrastruttura composta da un virtual center vSphere e da un singolo host ESXi, in grado però di girare su un sistema operativo mainstream e su hardware generico. Usato a mo’ di server, VMware Workstation 10 consente agli altri PC di una rete locale di controllare le virtual machine con un browser, mentre usandolo come client può collegarsi a uno o più server ESXi e svolgere parte dei compiti di amministrazione solitamente gestiti da un client vSphere. Rimanendo invece nell’ambito delle poche VM gestite su un singolo computer, infine, VMware Workstation 10 ne consente una gestione centralizzata per mezzo di un’interfaccia a schede, simile a quella di qualsiasi browser per i siti Web, laddove utilizzando VMware Player si renderebbe necessario aprire una finestra diversa per ciascuna macchina virtuale, senza alcun genere di gestione centrale e senza la possibilità di effettuare operazioni avanzate come la clonazione, la crittografia, la creazione di snapshot o il trasferimento di virtual machine da e verso un’infrastruttura vSphere. Se queste attività rientrano nella rosa di quelle indispensabili, non resta che mettere mano al portafogli. In cambio, avremo la certezza che il prodotto sarà solido e in grado di soddisfare appieno tutte le aspettative. Facile da usare Benché la virtualizzazione non sia un argomento alla portata di tutti, VMware Workstation fa il possibile per metterla a disposizione del pubblico più vasto possibile, cercando di abbattere le difficoltà per mezzo dei wizard di configurazione e dell’ottima documentazione fornita in PDF. VMware, inoltre, gode di una community molto ampia di utilizzatori e di una vastissima knowledge base, per cui è praticamente impossibile perdersi qualche informazione. I suoi prodotti, inoltre, sono aggiornati piuttosto spesso e Workstation 10 non fa eccezione, tant’è che durante i nostri test è uscita la versione 10.0.1 e abbiamo Unity La modalità di lavoro Unity permette di visualizzare sul desktop dell’host le finestre del guest. Occorre però installare i VMware tools e configurare lo schermo opportunamente (il guest deve poter seguire le impostazioni dell’host). Una vecchia macchina Ubuntu alle prese con una compilazione software relativamente semplice potuto basare la nostra recensione su di essa. La tecnologia è solida, probabilmente la migliore in circolazione, e ha i suoi buoni motivi per farsi pagare. Da segnalare agli amanti dell’audio la possibilità di attivare una scheda High Definition Audio da 8 canali intervenendo con un editor di testi sul file .vmx di una macchina virtuale, quando normalmente viene installata una SB128 stereofonica. Sarebbe stato bello poterlo fare direttamente dalle impostazioni delle VM, ma evidentemente VMware preferisce riservarsi questa possibilità per il futuro, mentre invece tutti gli altri aspetti “cari al desktop” sono al loro posto, compresa l’accelerazione 3D per il software che usa le librerie grafiche Direct3D (solo shader 3.0 però, quindi librerie DirectX 9.0c). Possiamo usare il prodotto anche per il gioco, sebbene le prestazioni non saranno comunque paragonabili a quelle di una macchina da gioco nativa. Un impiego di questo genere, tuttavia, sarebbe a dir poco bizzarro per un prodotto “serioso” come questo. LXP Paolo Besser Giudizio Workstation 10 Sviluppatore: VMware Web: www.vmware.com Prezzo: €225,00 Caratteristiche Prestazioni Facilità d’uso Qualità/Prezzo 9 9 8 7.5 Il più completo programma di virtualizzazione sulla piazza, ma solo le sue caratteristiche “pro” ne giustificano l’acquisto. Il voto di Linux Pro 8.5 LINUX PRO 136 43 Test VMware Player VMware Player 6 Un programma gratuito, per uso personale, con cui creare nuove macchine virtuali o usare quelle di tutti gli altri prodotti VMware D a qualche tempo, VMware ha rilasciato due prodotti per la virtualizzazione “domestica”: Workstation 10 e Player 6. Mentre il primo è riservato ai professionisti, il secondo è una soluzione ideale per tutti: permette, senza alcuno sforzo e senza pagare un centesimo, di eseguire macchine virtuali create con altri prodotti VMware, oppure di crearne di nuove noi stessi, installandovi sopra il sistema operativo che preferiamo come se fossero computer in plastica e silicio. Meglio risparmiare L’interfaccia utente di Player 6 è basilare: appena avviato, sulla sinistra, appare l’elenco delle macchine virtuali a disposizione; sulla destra, invece, troviamo le opzioni che consentono di crearne una nuova, aprirne una già esistente, collegarsi al sito di VMware per acquistare Workstation 10 (ci provano sempre...) o visualizzare il manuale in formato elettronico (in Inglese). Passato un mese dall’installazione, nell’angolo inferiore destro comparirà anche un avviso che il periodo di valutazione è scaduto e, di conseguenza, per l’uso commerciale sarà necessario registrare la propria copia al costo di circa 90 euro. Se il nostro utilizzo del prodotto è del tutto privato ed esula da fini commerciali, tuttavia, possiamo andare avanti a usarlo liberamente. L’inserimento di un codice di licenza attiverà alcune funzioni supplementari e sancirà il passaggio alla versione Plus, in grado di usare anche le macchine crittografate con le ultime versioni di VMware Wokstation o Fusion. Nulla di veramente indispensabile, quindi, per chi altrimenti avrebbe scelto VirtualBox o, addirittura, si sarebbe accontentato di QEMU. Rispetto al primo, VMware Player ha meno opzioni ma offre una tecnologia di virtualizzazione più solida, aggiungendo, rispetto a QEMU, anche un’interfaccia più gradevole e una semplicità d’uso infinitamente superiore. Sessioni uniche La maggiore differenza rispetto a VMware Workstation, per chi non è uso addentrarsi negli aspetti più “professionistici” della virtualizzazione, è l’organizzazione delle virtual machine che, in VMware Player, di fatto è assente. In ogni finestra del programma possiamo ospitare VMware Player 6 consente di realizzare macchine virtuali con qualsiasi sistema Linux o Windows contemporaneo, anche versione 8.1 o 2012 una singola VM ma, se vogliamo fare interagire più computer virtuali fra di loro, possiamo avviare più sessioni del Player. Non avremo quindi la possibilità di passare da una VM all’altra per mezzo del tab-browsing, come invece avviene con VMware Workstation, ma in compenso non subiremo l’overhead necessario per garantire tutte le sue opzioni che normalmente non usiamo. Le caratteristiche tecniche delle VM saranno comunque le stesse, per cui potremo usare fino a 16 processori, 64 GB di RAM, dischi virtuali da diversi terabyte, USB 3.0 e così via. Possiamo gestire il desktop anche in modalità Unity, vale a dire “mescolando” sul nostro desktop le finestre del sistema operativo “emulato”. Essenziale Quando creiamo una nuova VM, dobbiamo considerare quanta RAM sia necessaria al sistema ospitato, e quanta ne abbia a disposizione quello ospitante 44 Linux pro 136 VMware Player 6 costituisce la scelta più naturale per chi non ha bisogno di un vero ambiente di virtualizzazione, ma ha la sola necessità di avviare due o più sistemi operativi diversi sul proprio computer, per gli scopi più disparati, contando su una tecnologia solida e ben collaudata negli anni. Purtroppo questo comporta anche l’impossibilità di clonare o di scattare delle “istantanee” (snapshot) delle VM prima di effettuare un’operazione importante come, per esempio, l’installazione di un aggiornamento del sistema operativo o la modifica di qualche programma essenziale per il nostro lavoro. Una lacuna piuttosto antipatica, a cui però si può sopperire copiando altrove le loro cartelle prima di agire. Chi desidera una maggiore complessità può vedere anche VirtualBox o provare VMware Workstation liberamente per un mese, e poi prendere una decisione. Chi normalmente usa VMware anche al lavoro, però, difficilmente farà altre scelte. LXP Giudizio Player 6.0.1 Sviluppatore: VMware Web: www.vmware.com Licenza: gratis per uso personale Caratteristiche Prestazioni Facilità d’uso Qualità/Prezzo 7 8.5 10 9.5 La miglior tecnologia di virtualizzazione a costo zero, ma senza le funzionalità aggiuntive di VMware Workstation o VirtualBox. Il voto di Linux Pro 8.5 In libreria Test Learning Python (5th edition) LXP ha scoperto che l’amato C++ ha trovato un degno concorrente C on più di 1.500 pagine, questo libro è più grande del 50% rispetto al noto The C++ Programming Language di Bjarne Stroustrup. Questo è già un bel risultato e non è un confronto campato per aria. Guido van Rossum, il papà di Python, ammette che il C ha influenzato molto il suo linguaggio. Ma non avrebbe mai pensato che la sua creatura potesse trovare una diffusione così vasta e quanto grande sarebbe dovuto essere un libro su di essa. In tutti i casi il volume Learning Python (5th edition) non è solo un libro. Non si tratta di un testo scritto per invogliare i non programmatori a diventarlo, né per dimostrare alla grande massa quanto sia facile scrivere un’applicazione. Bensì si tratta di una guida a tutto ciò che un programmatore deve sapere per conoscere a fondo e mettere a frutto Python. Non dovete essere necessariamente degli esperti per capire e assimilare al massimo quanto spiegato, ma di certo un po’ di pratica nell’arte della programmazione è obbligatoria. Una parola che potrebbe descrivere il libro è “omnicomprensivo”, ma potrebbe far pensare a un libro da consultare quando serve, ma non lo è. È un volume dedicato a chi vuole imparare Python sul serio ed è in grado di trasformare il programmatore occasionale in un vero sviluppatore che può inserire il Python tra le sue competenze nel curriculum. Essendo la quinta edizione, ed essendo basato su un corso, il testo è stato raffinato a dovere e molte “storture” sono state eliminate. Un aspetto che ci è piaciuto è che, parlando di Python 3.x non si presume più che soppianterà la versione 2.x, ma si preferisce descriverli come un linguaggio di prototipazione o come una piattaforma stabile e usabile. Tutti gli esempi forniti sono mostrati in entrambi i dialetti del linguaggio, il che rende il libro ancora più utile se volete capire anche i vantaggi dell’una o dell’altra versione. È ben scritto, impegnativo e omnicomprensivo. LXP Giudizio Learning Python (5th edition) Autore: Mark Lutz Editore: O’Reilly ISBN: 978-1-4493-5573-9 Pagine 1.540 Prezzo: $ 64,99 Se volete imparare il Python, è il libro da mettere tra i regali delle feste. Il voto di Linux Pro 9.5 Costruire un robot con Arduino L’editor di Linux Pro vuole realizzare un automa che lavori al suo posto… L a robotica è una scienza affascinante ma complessa. Eppure si possono muovere i primi passi in questo mondo senza per forza dover prima prendere due o tre lauree. Già in passato abbiamo recensito libri che spiegavano come creare un robot e quando è giunto in redazione questo Costruire un robot con Arduino di Tecniche Nuove si è subito riaccesa in noi questa antica passione. Come si può intuire dal titolo del libro, l’autore parte da una scheda Arduino per dare vita a un robot a due o quattro ruote. Ovviamente nel testo, oltre alle istruzioni per montare il robot con tutti i suoi componenti e sensori, trovate anche il codice degli sketch da caricare su Arduino per controllare la macchina, però bisogna precisare che l’autore bada più alla parte fisica/ elettronica che non a quella di programmazione, dando per scontato che il lettore conosca già Arduino e sappia programmarlo. Questo non vuol dire che il codice mostrato non sia in parte commentato, ma lo spazio dedicato a questo aspetto è limitato. Dal punto di vista del montaggio, invece, Margolis fa un lavoro eccellente: in quasi ogni pagina trovate foto o schemi che accompagnano le spiegazioni testuali, così da far capire anche ai principianti le operazioni da fare con sensori, resistenze, condensatori, motori e l’immancabile saldatore. Si spiega teoria e pratica in modo molto chiaro, dalla costruzione del corpo del robot all’aggiunta dei sensori per il rilevamento di bordi e linee, e si arriva anche al controllo remoto tramite telecomando. Anche se non si è molto pratici con il saldatore, dopo aver letto questo libro siamo pronti a scommettere che quantomeno proverete a crearvi un robot da soli. Per risolvere eventuali problemi riscontrati durante il montaggio, oltre ai tanti suggerimenti sparsi nel testo, vi consigliamo di visitare il forum di supporto di O’Reilly (l’editore dell’edizione inglese del libro). LXP Giudizio Costruire un robot con Arduino Autore: Michael Margolis Editore: Tecniche Nuove ISBN: 978-88-481-7874-7 Pagine 258 Prezzo: €25,90, €22,00 (ebook) Un buon testo se volete apprendere i principi della robotica in salsa Open Source. Impegnativo ma soddisfacente. Il voto di Linux Pro 8 Linux pro 136 45 Roundup Office suites Test Confronto Ogni mese mettiamo a confronto prodotti e programmi per farvi scegliere al meglio! Gestori di collezioni Avete così tanti DVD da non sapere più cosa contengono? Siete sommersi da un mare di raccolte e avete bisogno di un archivio? Seguiteci in questo confronto e scoprite cinque programmi che vi aiuteranno a mettere ordine Modalità del test Abbiamo deciso di optare per tre gestori di collezioni e due front-end generici per database, tutti con licenza FOSS. Questo per permettervi di scegliere il tipo di applicazione che più si avvicina alle vostre esigenze, prendendo in considerazione anche i database, che sono strumenti organizzativi per eccellenza. Tutte le soluzioni proposte, eccetto una, sono disponibili in formato binario per Fedora 17 e Mint 15, la distro usata per il nostro Confronto. Tuttavia non dovreste avere difficoltà a trovarle anche per la maggior parte delle altre distribuzioni. Ci siamo divertiti creando alcune collezioni con ogni applicazione sia tramite le impostazioni predefinite, sia facendo uso delle tante funzioni personalizzate. Abbiamo controllato l’immissione dei dati da fonti online e in locale e non ci siamo fatti mancare l’analisi della versatilità e la semplicità d’uso, la compatibilità con altri programmi e la qualità della documentazione disponibile. La nostra selezione Data Crow GCstar Kexi LibreOffice Base Tellico 46 R accogliere qualsiasi cosa possa essere collezionabile è il pallino di molti. E non deve stupire se alla fine si finisce per essere davvero sommersi dalle nostre passioni: libri, DVD, dischi LP, fumetti, modellini e via dicendo. Quando si comincia a ragionare per centinaia e talvolta perfino migliaia, è assolutamente necessario dotarsi di programmi appositi per mettere ordine. Nel cercare applicazioni che facessero al caso nostro, abbiamo scoperto che non ci sono software FOSS Linux pro 136 “Un front-end per db può essere una valida soluzione alternativa ai più comuni gestori di collezioni” sufficienti a riempire i cinque posti disponibili nel nostro confronto. O meglio, alcuni come Griffith, Moll e Stuffkeeper sono ancora online, ma fermi a versioni così vecchie che, per funzionare a dovere sulle moderne distro, richiederebbero profonde modifiche al codice sorgente. Alla fine abbiamo pensato di valutare soluzioni alternative, come i classici front-end per i database, che forniscono versatilità e potenza sufficiente per essere utilizzati con soddisfazione come gestori di collezioni. Confronto Test Flessibilità e personalizzazione Sono adatti alle vostre esigenze? N on importa quanto un programma sia completo, c’è sempre qualche cosa da personalizzare per renderlo del tutto adatto alle vostre esigenze. Da questo punto di vista, Base e Kexi sono i migliori proprio per la loro natura di database generici. Dal momento che starà poi a voi gestirli in base alle vostre collezioni, il risultato finale sarà proprio quello di cui avete bisogno. A differenza di Data Crow, GCstar e Tellico (d’ora in pochi chiamati “Media Organizer”), Base e Kexi possono sfruttare diversi backend da file e database come HSQL e SQLite o, a livello di impresa, PostgreSQL e MySQL. Questo li rende perfetti per essere utilizzati quando dovete gestire le collezioni insieme ad altre persone. Andando ancora più in profondità, troverete utilissima l’interazione con Calligra e LibreOffice. Infatti, se si rende necessario aggiornare spesso la raccolta con altri dati o utilizzarli come fonti per i fogli di calcolo, perché tenerli al di fuori di software pensati apposta per questo scopo? Da sottolineare come Base e Kexi supportino perfino alcuni linguaggi di scripting. I Media Organizer, invece, vi mettono a disposizione una scelta di ambienti già confezionati per gestire vari tipi di collezioni: film, libri, video e musica. Data Crow aggiunge anche le categorie immagini e software (quest’ultima è presente anche in GCstar). GCstar e Tellico gestiscono fumetti, monete, francobolli, vini e videogame. Tellico, infine, predispone perfino le raccolte di figurine e la gestione delle bibliografie. GCstar, invece, aggiunge i giochi da tavolo, serie e programmi TV, periodici, modellini e carte da collezione. A modo vostro I gestori di collezioni consentono di creare vari schemi di raccolta. Data Crow, ad esempio, può essere definito un gestore di collezioni capace di generare una singola meta-collezione per software e file multimediali, ordinabili poi per categoria e data di rilascio. GCstar, senza un nome esplicitamente definito per le collezioni personalizzate, immagazzina tutte le loro definizioni e impostazioni in un solo file. L’assegnazione di un nome che definisca il genere della raccolta, invece, creerà immediatamente un modello personale Creare una collezione con Tellico è semplice. Gli strumenti a disposizione, inoltre, sono potenti e rendono l’operazione molto divertente riutilizzabile grazie al template memorizzato in ${XDG_DATA_HOME}/gcstar/GCModels/. In entrambi i casi possiamo inserire nuovi campi di diverso genere, come pulsanti, stringhe di testo (con o senza riepilogo dei valori immessi in precedenza) e liste. Ogni campo numerico può sfruttare i propri range predefiniti e i valori di incremento. Tellico ha poi diversi modelli di raccolta disponibili per il download. Se però volete fare in modo che la vostra collezione preferita venga supportata in modo nativo, potete modificare un modello vuoto con uno predefinito. In effetti, questo sistema è l’unico espediente utilizzabile per far capire a Tellico la natura di una raccolta personalizzata, e di conseguenza permettervi di usare le icone standard del programma. Verdetto Data Crow GCstar Kexi LibreOffice Base Tellico Kexi e Base hanno il miglior punteggio, ma usandoli avrete da lavorare. Inserimento dati e ricerche L’accessibilità è fondamentale per tenere aggiornate le raccolte P interfacciandosi all’esterno, in questo specifico contesto rappresentano la peggiore scelta per la gestione delle raccolte. Se provate a usare gli strumenti che scaricano automaticamente i dati da fonti di terze parti, vi renderete conto come sia molto meglio utilizzare l’immissione manuale o tramite script personalizzati. Tutti e tre i nostri Media Organizer, invece, si interfacciano alla perfezione con siti Web affidabili come Amazon, IMDB, Sourceforge, MusicBrainz e molti altri. CGstar consente sia di interrogare tutti i servizi Internet contenuti in un unico file predefinito La ricerca Web di GCstar è minimalista, ma funzionale (modificabile) sia di iù un programma è capace di recuperare autonomamente i dati in locale e da Internet, meglio è. Questo aspetto è già di per sé sufficiente a far pendere l’ago della bilancia verso i Media Organizer rispetto ai database. Base e Kexi, infatti, pur richiedere i dati che servono da un unico sito (potete cambiare le risorse ogni volta che volete o, tramite richieste diverse, alternarvi tra le diverse fonti). Tellico, per la ricerca online e il recupero di informazioni, riesce a scaricare dati perfino da PubMed e da server bibliografici compatibili con lo standard Z39.50 (www.loc.gov/z3950/ agency). Ovviamente non tutte le collezioni offrono le stesse scelte. Per esempio, sempre Tellico non ha alcuna fonte per recuperare i dati su un’eventuale raccolta di francobolli. Con Data Crow, invece, per inserire le varie informazioni sui pezzi che compongono la vostra collezione, non dovete neppure mettere le mani sulla tastiera. Questa applicazione, infatti, è in grado di leggere direttamente i metadati contenuti nei formati multimediali. Infine, tutti e tre i Media Organizer sono compatibili con gli scanner per codici a barre e le webcam. Verdetto Data Crow GCstar Kexi LibreOffice Base Tellico Kexi e Base sono piuttosto scadenti in questo frangente ed è meglio inserire i dati manualmente. Data Crow, invece, ha buone funzioni. Linux pro 136 47 Test Confronto Interfaccia utente Quale programma offre di più e nel modo più semplice? L ’interfaccia grafica di qualsiasi software riveste sempre un aspetto importante. Ancor più se, come nel nostro caso, parliamo di gestori per l’organizzazione delle raccolte collezionabili. L’ambiente di lavoro deve essere semplice, intuitivo, versatile e capace di mettere subito in primo piano gli strumenti per la ricerca di informazioni online e in locale. Inoltre dovrebbe essere possibile controllare la quantità di dati che si stanno scaricando e far fronte agli eventuali problemi dovuti alla lentezza del collegamento. Altri aspetti essenziali, soprattutto se utilizzerete lo stesso gestore di collezioni su più computer, sono le funzioni per l’inserimento delle raccolte e la gestione delle impostazioni del programma. Alcuni, o almeno quelli migliori, permettono poi di definire i permessi di sola lettura per determinati archivi. In questo modo, anche se prevedete l’accesso ai dati della vostra collezione da parte di altre persone o collaboratori, potrete evitare che vengano modificati senza uno specifico consenso. Data Crow Data Crow funziona su qualsiasi sistema in cui sia installato Java 1.6 o versione superiore (anche come server Web). In realtà, questo è l’unico programma del confronto che ha bisogno di una seppure breve spiegazione per la procedura di installazione. Dal sito ufficiale, scaricate il file accessibile dalla voce Data Crow Other OS Installer. Decomprimete lo ZIP e rendete eseguibile installer.sh. Questo punterà a installer.jar e darà il via al processo. L’interfaccia grafica può essere personalizzata ed è disponibile in sette lingue. Potete sfruttare sia l’ambiente per principianti sia quello per esperti. Vi consigliamo di prendere confidenza con l’interfaccia avanzata in modalità esperti, in cui potete lasciare attivo il “suggerimento del giorno” che compare in una finestra pop-up. Detto questo, anche l’ambiente per principianti è ottimo. Infine, le funzioni di backup e i servizi Web per il tagging sono perfette. LibreOffice Base L’unica interfaccia di Base cui possiamo riferirci è quella che creerete voi stessi nel momento in cui inizierete a usare il programma. Base possiede procedure guidate per la realizzazione di tabelle, query, maschere e report. Sia il wizard per generare la struttura sia quello per il design delle tabelle offrono tutto il necessario per realizzare i moduli di inserimento in un’interfaccia stile drag-and-drop. Anche se complesso, il modulo di progettazione è molto flessibile. Qualunque strumento utilizziate, prima di iniziare, pianificate nel dettaglio ciò che volete fare. Infatti dovrete considerare cosa conterranno il database e i form, sfruttando le funzioni di Base che supportano il raggruppamento degli elementi. È grazie ad esse se i campi dell’archivio saranno più funzionali e veloci. Per evitare problemi, rammentate di associare i campi dei form alla colonna di riferimento del database corrispondente. Documentazione Verdetto Data Crow È disponibile un valido supporto per l’applicazione? A nche se non sono software specifici per la gestione delle collezioni, Base e Kexi mettono a disposizione documentazione in gran quantità, ma anche una vasta comunità di supporto. Se avete un’idea chiara di cosa volete realizzare, basta porre una domanda online e la risposta non tarderà ad arrivare. Per quanto riguarda i tre Media Organizer, hanno tutti manuali piuttosto completi e in più qualche 48 Linux pro 136 altra risorsa di supporto. Molto probabilmente, comunque, non ci sarà bisogno di consultarli, visto che, almeno per le operazioni più comuni sono abbastanza intuitivi. Gli unici casi particolari, in cui potreste aver bisogno di un aiuto dalla documentazione di supporto, riguardano l’eventuale ottimizzazione delle ricerche online o l’uso di alcune funzioni più complesse. Dal punto di vista della manualistica, tuttavia, GCstar rimane un po’ indietro rispetto a Data Crow e Tellico. I testi di supporto di entrambi sono infatti più dettagliati, anche se bisogna chiarire che il motivo principale di questo divario risiede nel fatto che i loro manuali vengono installati in locale. Il pulsante Guida di GCstar, invece, apre il proprio wiki online attraverso il browser predefinito. Una soluzione controversa, perché se non avete a disposizione una connessione a Internet, dovrete provare a risolvere i vostri dubbi da soli. GCstar Kexi LibreOffice Base Tellico Base e Kexy hanno la migliore documentazione, ma purtroppo non è specifica per l’ambito che vi interessa, vale a dire le collezioni. Confronto Test GCstar L’interfaccia di GCstar è semplice e intuitiva e non tralascia niente di importante. Se usate la funzione predefinita per una collezione di modellini, trovate ben 12 campi per le fotografie scattate a ogni angolazione, più un’altra area per le note. Noi abbiamo provato quella per i libri e siamo rimasti piacevolmente stupiti da come tutte le funzioni siano raggruppate in modo ordinato e preciso. Anche in CGstar potete bloccare le raccolte per evitare che qualcuno possa mettervi mano e se archiviate informazioni su pubblicazioni e film, potete ottenere perfino suggerimenti su quali leggere o vedere. Ci sono poi un sacco di funzioni di ricerca configurabili e combinabili tra loro. Se poi un filtro non funziona, basta controllare le dipendenze nel menu Aiuto. Kexi Molto di quanto abbiamo già detto riguardo a Base, può essere accomunato a Kexi. Questa multipiattaforma di progettazione grafica per database (su Mac OS X necessita di Fink) consente di creare tabelle, query, maschere, report e script senza mai uscire dal programma. Kexi è stato anche definito come “l’unico strumento grafico multipiattaforma per l’importazione di dati provenienti dai database Microsoft Access”. Essendo parte integrante di Calligra, Kexi può usarne gli stessi temi grafici, il supporto di stampa e molte altre caratteristiche tipiche di tutte le applicazioni KDE. Gli strumenti Property Editor e Project Navigator (quest’ultimo può essere sganciato dalla finestra principale e ancorato in qualsiasi altra parte del desktop) rendono le tante funzioni del database facili da gestire in contemporanea (nel nostro caso parliamo sempre di collezioni). Come anche in GCstar, esiste una modalità di blocco, che disabilita tutti i comandi di editing, così da evitare la modifica dei dati involontaria o da parte di chi non è autorizzato. Tellico Tellico è il gestore di collezioni ufficiale di KDE. La struttura grafica si basa su una vista di gruppo e a colonna. Nel primo caso, la raccolta viene mostrata tramite una struttura ad albero, mentre nel secondo compare solo un elenco degli articoli presenti nella collezione. Potete raggruppare più campi indipendenti in uno solo, così da sfruttare un punto di vista più compatto, oppure ordinare le voci in modo personalizzato. In quest’ultimo caso, però, la procedura non è delle più intuitive. I filtri di ricerca supportano i comandi tradizionali per raffinare l’operazione cercando solo determinate informazioni, ma è possibile utilizzare anche diverse funzioni avanzate. Basta premere il pulsante Filtro e gestire i criteri tramite l’apposita finestra. Ricordate poi che, se il vostro archivio è corredato da parecchie immagini, queste ultime non devono essere memorizzate nel database principale, ma in una cartella separata. Tellico, altrimenti, sarà molto più lento. Un aiuto alla memoria Verdetto Data Crow E se prestate qualcosa agli amici e non lo ricordate? M olto spesso, soprattutto quando si tratta di libri e DVD, si ha la necessità di avere un’idea chiara dei prestiti che si fanno ad amici e parenti. Finite così per spolpare la vostra collezione, perché o non ricordate a chi avete ceduto qualcosa o nessuno si è più fatto vivo per restituirlo. Base e Kexi, sotto questo aspetto, possono esservi d’aiuto. Basta aggiungere le colonne a destra e i relativi campi dei moduli nel database di riferimento. I tre Media Organizer, invece, hanno un pannello dedicato alla gestione dei prestiti, utilissimo per rinfrescarvi la memoria. Uno dei più intuitivi è quello di GCstar. Da qui potete importare le liste dei contatti in formato LDIF o vCard, oppure l’intera rubrica da Claws Mail. Non solo, ma si possono configurare le email da inviare in automatico a tutte le persone cui avete prestato qualcosa, per ricordargli così di restituirlo in tempi brevi. Attraverso KOrganizer, Tellico va anche oltre. Infatti GCstar aggiunge in automatico un promemoria in stile post-it al vostro calendario predefinito di KDE. Il Loan Administration di Data Crow, invece, è il più completo, ma anche quello più difficile da usare. Ci sono cataloghi in cui inserire le persone che devono restituirvi qualcosa con tanto di tag, categorie, foto, prestiti in sospeso con relative date di scadenza in formato iCalendar. In pratica un vero e proprio archivio in cui potete memorizzare ogni dato relativo al prestito di qualsiasi cosa. Kexi LibreOffice Base Tellico Tutti i software, in qualche modo, vi aiutano a tenere in considerazione i vostri prestiti, ma GCstar rende l’operazione davvero semplice. Linux pro 136 49 Test Confronto Funzioni per i report Per stampare resoconti e liste dettagliati come si comportano? D ei buoni report sono essenziali per dare un senso a un archivio ben strutturato, ma soprattutto rendono la vita facile quando volete stampare le liste degli elementi che compongono la vostra collezione. Da questo punto di vista, i Media Organizer sono più limitati rispetto a Base e Kexi, anche se sono senza dubbio più facili da usare. In Base i report sono preconfigurati in documenti di testo, dinamicamente riempiti con i dati provenienti dal database. Pertanto è necessario perdere più tempo per le opzioni di formattazione. Se poi siete esperti di LibreOffice, niente vieta di decorare le vostre stampe con grafici generati da Calc. Potete creare i report attraverso la procedura guidata per la creazione dei rapporti o trascinando i vari campi nel Report Builder. Per visualizzarne uno o aggiornare il suo contenuto, fate click sull’icona Execute Report nella barra degli strumenti. Writer aprirà il file, mostrando tutti i dati dalle query che avete inserito. A questo punto potete anche riordinare i risultati come preferite con l’opzione Sorting and Grouping. Il Report Design di Kexi ha la stessa flessibilità di Base quando si tratta In Data Crow, per aprire il pannello dedicato alla creazione di un report, basta premere Ctrl+E. La procedura è facilissima e basta poco per creare un utile file PDF di creare le query e raggruppare i risultati, anche se c’è meno attenzione per la formattazione. Il programma, tuttavia, supporta molti widget, tra cui uno per i grafici e un altro per l’inserimento dei codici a barre corrispondenti al contenuto di qualsiasi campo desideriate visualizzare in quel formato. Data Crow consente di creare report basilari in HTML e PDF, che possono andar bene per la maggior parte degli usi, anche se per stamparli dovete aprirli in un altro programma. Se volete modificare il layout o la formattazione, non è necessario conoscere XSLT (Extensible Stylesheet Language Transformations , www.w3.org/ Style/XSLt). Problema che invece si pone in una certa misura con GCstar e Tellico, anche se il manager di KDE può scaricare modelli aggiuntivi. La procedura di Tellico per la creazione di un report viene supervisionata dai template XSLT che si trovano nel percorso di installazione e in $KDEHOME/share/apps/tellico/ report-templates. Oltre ai report HTML, GCstar crea una cartella con le copie delle immagini corrispondenti, e quindi il codice HTML che vi punta deve essere distribuito insieme al report stesso, altrimenti il risultato non sarà certo bello a vedersi. È poi possibile usare JavaScript nel codice HTML per aggiungere un po’ di interattività. Verdetto Data Crow GCstar Kexi LibreOffice Base Tellico Tutti e tre i Media Organizer permettono di creare report di base, ma Data Crow li supera, includendo grafici e codici a barre. Interoperabilità Riescono a lavorare con altri programmi? A ncora una volta, grazie alle tante utility disponibili e al supporto per più database, Base e Kexi sono i migliori in questo campo, ma solo per gli esperti. L’importazione guidata di Data Crow può includere elementi da file CSV o XML, che vengono recuperati selezionando il modulo prima di iniziare la procedura. L’operazione inversa, ovvero l’esportazione guidata, funziona esattamente allo stesso modo. Con questi sistemi potete condividere dati e intere collezioni tra diverse installazioni di Data Crow. Da notare, poi, come il formato preferenziale per queste attività sia XML. Con GCstar 50 Linux pro 136 riuscite a importare, esportare e scaricare i dati direttamente da riga di comando senza avviare l’interfaccia grafica e, volendo, anche da altre postazioni usando Cron o altri script di shell. Accanto ai file nativi di GCstar, utilizzati per impostazione predefinita, il plug-in di esportazione supporta anche CSV, HTML, SQL, tar.gz, XML (non necessariamente per tutti i tipi di raccolte o in entrambe le direzioni) e i formati nativi di Tellico, in cui sono inclusi XML normali o compressi. GCstar fornisce anche alcuni modelli di importazione ed esportazione. In generale, qualsiasi cosa abbia un’estensione XML, per Tellico va bene (i file possono comunque essere Verdetto Data Crow GCstar La quantità e il tipo di file importabili in Tellico è semplicemente formidabile Kexi LibreOffice Base convertiti in XML tramite fogli di stile XSL) e quindi può essere importato nel programma. Anche se probabilmente non sarà quasi mai necessario, è utile sapere che Tellico supporta un gran numero di formati, tra cui: CSV, BibTeX, BibTeXML, RIS, MODS, CDDB e i metadati dei file audio. Esporta poi in CSV, HTML, BibTeX, BibTeXML, ONIX e PilotDB. Tellico Tellico e GCstar, almeno per alcuni tipi di raccolte, riescono perfino a leggere e scrivere i rispettivi dati. Confronto Test Gestori di collezioni Il verdetto P rima ancora di parlare del verdetto, è opportuno fare una premessa onde evitare possibili diatribe. LibreOffice Base e OpenOffice Base, anche se tecnicamente sono due applicazioni diverse, hanno ancora molti punti in comune e quindi, nel contesto trattato, possono essere utilizzati entrambi. Detto questo, Base e Kexi offrono senza dubbio i migliori report. Usando uno dei due per creare il vostro gestore di collezioni multiuso, avrete tutto quello che serve e in più la flessibilità di modificarlo ogni volta che volete per adattarlo alle vostre esigenze. Se però tutto questo non richiedesse troppo tempo, e la gestione delle informazioni scaricate da Internet fosse più funzionale, non avremmo difficoltà a decretarli come vincitori. Prima di proseguire nell’analisi dei Media Organizer, dobbiamo però specificare che ognuno dei tre ha funzioni extra non interamente provate durante il confronto. Nel complesso, quindi, Tellico e GCstar sono ottimi programmi, capaci di integrarsi con altre 1° applicazioni in ambiente Linux (soprattutto Tellico) e perfino con il programma in Java Data Crow. Entrambi importano ed esportano le vostre collezioni in molti formati, tra cui quelli utilizzati nativamente dall’uno e dall’altro. Data Crow non è facile da usare e necessita di un po’ di pratica prima di essere apprezzato. Inoltre ha perfino troppe funzioni, tante delle quali finiscono per non essere neppure utilizzate. Nonostante questo, supporta il tagging, ha un’ottima documentazione e non ci ha mai creato problemi, qualsiasi cosa tentassimo di fargli fare. Anche se potrebbe essere sottoposto a una radicale cura dimagrante per eliminare almeno la metà delle sue caratteristiche, vale davvero ogni minuto passato a provarlo. Infine, è l’unico capace “Le funzioni di Data Crow sono tante, addirittura troppe, ma non si può fare a meno di apprezzarle” 4° Data Crow Web: www.datacrow.net Licenza: GPL Versione: 3.12.5 Davvero completo. Un grande programma da usare anche dal browser. 2° Molto flessibile e ben integrato con KDE e i desktop Linux. In poche e semplici mosse potete lanciare il Web Server di Data Crow e avere così a disposizione la vostra intera raccolta online LibreOffice Base Web: www.libreoffice.org Licenza: LGPL Versione: 4.1 Un’eccellente base per un programma, se avete la pazienza di svilupparlo. 5° Tellico Web: http://tellico-project.org Licenza: GPL Versione: 2.3.8 3° di supportare un proprio Web Server che, se configurato a dovere, vi permette di accedere ai vostri archivi da remoto sfruttando un browser (come potete vedere nell’immagine riportata qui sopra). Kexi Web: www.kexi-project.org Licenza: GPL Versione: 2.7.4 Stessi risultati di Base, stesso giudizio. A voi la parola... GCstar Web: www.gcstar.org Licenza: GPL Versione: 1.7.0 Un po’ meno flessibile di Tellico, ma con un sacco di collezioni predefinite. Non siete d’accordo con le nostre scelte? Avreste usato altri programmi? Inviate le vostre opinioni su questo Confronto a: [email protected] Considerate anche... Il gestore di collezioni più funzionale, spesso, non è quello che ha il miglior aspetto, bensì il programma che si interfaccia meglio con Internet per scaricare i dati relativi alle vostre collezioni. Un altro aspetto da considerare, è la capacità dei gestori di archivi di lavorare con altri software, per esempio i player multimediali. Nessuna delle applicazioni del nostro Confronto punta ad avere queste funzioni e quindi, sotto questo aspetto, dovete prepararvi a fornirgli un valido appoggio per consentirgli di leggere e riprodurre musica e video (se è ciò che collezionate). Se poi siete appassionati di un solo genere collezionabile, è probabile che ci siano gestori FOSS specificatamente dedicati al vostro campo. Un esempio è il progetto Palatina, rivolto ai collezionisti di libri e pubblicazioni (http://palatin.as), che è stato riscritto da zero per sostituire il più vetusto Alexandria. LXP Linux pro 136 51 i migliori nuovi programmi open Source del pianeta Da non perdere LiVES Catfish Sxiv Colorful Choria Programma di video editing LiVES Versione: 2.0.6 Web: http://lives.sourceforge.net L iVES è un ospite frequente della nostra rassegna sui programmi da non perdere. il motivo del nostro interesse è essenzialmente dovuto alla produttività dei suoi sviluppatori. in poco tempo, infatti, sono riusciti a passare dalle versioni 1.x alla 2.0.x. proprio a ottobre di quest’anno è stata rilasciata la release più recente: la 2.0.6. Tecnicamente LiVES 2.0.6 è stabile, anche se potreste comunque incappare in qualche piccolo bug. A livello di dipendenze, questa applicazione ha bisogno di almeno GTK 3 per far funzionare a dovere la propria interfaccia, di ImageMagick per processare le immagini e di MPlayer per la gestione dei diversi formati video. Se poi installate altri strumenti e librerie, come libtheora, allora godrete perfino di un’ulteriore flessibilità nei processi di importazione ed esportazione delle clip. LiVES permette di scegliere tra una serie di interfacce: la modalità Clip Edit che, come spiegato nel box qui sotto, è progettata per operazioni di montaggio base, come per esempio le attività su un unico file, con l’aggiunta di qualche Nelle preferenze, potete dire a LiVES quali strumenti esterni usare per riprodurre e convertire file audio e video. “Con LiVES potete usare FireWire per importare le clip dalle videocamere” L’interfaccia del programma Menu potete importare ed esportare le vostre clip e applicare una larga scelta di effetti. Anteprima A sinistra e a destra, vedete le immagini che appartengono al primo e all’ultimo fotogramma della selezione. Da provare Barra degli strumenti i pulsanti riportati qui, vi permettono di riprodurre la vostra clip o solo la porzione inclusa nella selezione. 52 Linux pro 136 taglio, un paio di effetti e la ricodifica in un altro formato. La modalità Multitrack, invece, è piuttosto complicata, ma si rivela perfetta quando operate su più file video e audio contemporaneamente. Entrambi gli ambienti sono un po’ rozzi e avrebbero bisogno di una maggiore cura. Tuttavia è un aspetto che non infastidisce più di tanto, visto che gli strumenti rimangono tutti a portata di click. potete poi usare lo standard FireWire per importare clip da DVD o videocamere e perfino registrare ciò che avviene sul desktop (funzione utilissima per i video tutorial). inclusa trovate poi una vasta selezione di filtri, che vanno dal contrasto standard ai modificatori di luminosità per l’aggiunta di più luce o per la riduzione del rumore digitale. Output Selezioni Date un’occhiata a questa barra. Troverete una serie di informazioni utili sui plug-in e gli strumenti esterni. Fate click e trascinate il cursore sulla barra per cambiare la parte selezionata del video. Dalla versione 1.4.2 in poi i miglioramenti sono stati moltissimi. oltre ai nuovi effetti, la maggior parte dei bug che si verificavano è stata risolta. Molti formati che impiegavano una vita a essere lanciati (come WebM), adesso si avviano all’istante. È stato poi aggiunto il supporto per il plug-in LADSpA e quindi gran parte del codice ha visto una seconda giovinezza. Ecco perché, anche se avete già provato questo programma in passato, vi consigliamo di aggiornarlo. Da non perdere Test Motore di ricerca interno Catfish Versione: 0.8.2 Web: https://launchpad.net/catfish-search S e cercate qualcosa nel vostro disco fisso usando il terminale, ci sono due modi di procedere: usare find o locate. Nel primo caso, si tratta di una ricerca al volo che, scandagliando le varie directory, controlla i nomi dei file al loro interno e segnala quelli che corrispondono al termine di ricerca. Nel caso di locate, invece, vengono usati dei database di nomi preconfezionati, che rendono l’operazione molto più veloce. Lo svantaggio di questo sistema, risiede nella necessità da parte del sistema di aggiornare periodicamente i database usati da locate, onde evitare che diventino obsoleti. Catfish è un wrapper grafico che opera utilizzando questi comandi, ma con alcune funzioni extra. Lo trovate incluso in Xubuntu, ma dovrebbe funzionare su qualsiasi distro basata su Python. Noi lo abbiamo provato su Mint 15 ed è filato tutto liscio. Quando lo si avvia la prima volta, si presenta con una finestra minimale, contenente solo il campo ricerca nella parte superiore e il riquadro dedicato ai risultati al centro. Basta immettere il nome di qualsiasi file e aspettare qualche secondo. Se nel disco fisso esiste una corrispondenza, Catfish la trova. Fin qui è veloce e facile da usare, ma non è certo niente di speciale. Però, se fate click sull’icona in alto a destra e scegliete Mostra impostazioni avanzate, ecco che si apre un menu a sinistra contenente le funzioni avanzate. Ora potete restringere le ricerche a tipi di file specifici o trovare solo i documenti modificati di recente o nell’arco di date predeterminate. L’altra opzione, che trovate sotto il menu Tipo di file consente di perfezionare la ricerca per L’interfaccia di Catfish è molto funzionale. Basta fare click con il tasto destro del mouse su un file e scegliere Open per aprirlo “Con Catfish restringete le ricerche a file specifici in un batter d’occhio” una vasta gamma di MIME. Sempre dall’icona che permette di accedere alle impostazioni, potete impostare delle ricerche complete che, come è ovvio, sono molto più lente, nonché raffinare il processo per trovare i file nascosti. Tramite lo switch da terminale --thumbnails possiamo ingrandire le icone che compaiono nei risultati di ricerca. Peccato non ne venga mostrato il contenuto. In definitiva, Catfish è un ottimo strumento e se volete fuggire dalla lentezza del motore di ricerca di GNOME e KDE può essere davvero la soluzione perfetta. Visualizzatore di immagini Sxiv Versione: 1.1.1 Web: https://github.com/muennich/sxiv C ’è un momento in cui chiunque rimane affascinato dalla tastiera. Per chi come noi usa Linux dalla mattina alla sera, questo innamoramento comincia con la scoperta del terminale e con la consapevolezza di riuscire a lanciare applicazioni e istruzioni attraverso i comandi testuali, anziché andando in giro a fare click sulle icone. Poi ci sono i gestori di finestre keyboarddriven e, naturalmente, Vi(m) ed Emacs, i famosi editor di testo che richiedono all’utente di imparare una serie di comandi e combinazioni di tasti. Alla fine, una volta che vi abituate alla tastiera, è difficile tornare indietro. E se siete alla ricerca di altre applicazioni che funzionino a riga di comando, ecco che Sxiv fa per voi. Non è certo uno strumento rivoluzionario, ma vi permetterà di non togliere le mani dalla tastiera neppure quando volete richiamare un’immagine. Iniziate aprendo il terminale e scrivendo: sxiv percorso/*.jpg Ecco che a questo punto si apriranno tutti i file JPEG nella cartella “percorso”. È anche possibile visualizzare una barra di stato nella parte inferiore, contenente il nome del file, la percentuale di zoom e il numero dell’immagine corrente all’interno della lista (per esempio 1/6). Utilizzate i tasti N e P per muovervi tra le immagini precedenti e successive, quindi, per rimuoverne una, premete D. Mediante i tasti < e > ruotate la visuale, mentre con + e - aumentate o diminuite lo zoom. Quando visualizzate una serie di immagini, premendo Invio passate alla Con Sxiv le immagini memorizzate in un dato percorso si aprono con un semplice comando. Facile, veloce e senza fronzoli “Dopo essersi affezionati alla tastiera, è difficile tornare indietro” modalità miniature. Ci sono comunque un sacco di altre operazioni che potete compiere, tutte descritte nelle pagine del manuale, che richiamate con il comando man sxiv. In fin dei conti, Sxiv è un programma che non nasconde alcuna difficoltà, e che dimostra quanto sia molto più fluido e veloce lavorare senza coinvolgere il mouse. Quindi, se siete costantemente impegnati a scrivere comandi nel terminale e ogni tanto volete richiamare qualche immagine senza usare l’onnipresente roditore, Sxiv è l’applicazione giusta. Linux pro 136 53 Test Da non perdere Giochi Applicazioni per il tempo libero Retro game Colorful Versione: 1.1 Web: http://svgames.pl/en/down L a versione originale di questo gioco è stata scritta in appena 48 ore in una competizione online rivolta ai programmatori. Il tema era “tu sei il cattivo” e ha richiesto ai partecipanti di inventare trame particolarmente insolite. Lo sviluppatore di Colorful si è superato, inventandosi un’ambientazione davvero strana: il personaggio principale è un ragazzo innamorato di una ragazza a cui è morta la madre, e visto che lei è caduta in depressione, il fidanzato va in cerca di oggetti colorati per rallegrarla. Il tutto si riduce in un eterno su e giù, avanti e indietro in un continuo esplorare le varie stanze, sparando contro i nemici che di volta in volta si avvicinano. I comandi sono molto semplici e prevedono l’uso delle frecce per muoversi, del tasto Z per sparare a sinistra e X a destra. Il gioco è scritto in Pascal, ma se estraete il file binario, basta copiare libbass.so all’interno di /usr/local/lib ed eseguire ./Colorful. Il codice sorgente, come detto, è in Pascal, ma è compreso in un altro file compresso. Stranamente, nonostante la licenza sia Open Source, lo sviluppatore chiede di trattare con lui qualsiasi modifica prima di rilasciare versioni derivate. Il gioco è comunque semplice e divertente. Durante l’esplorazione verrete ostacolati da piccoli mostri e porte elettriche. Disponete di un indicatore di salute capace di assorbire un paio di colpi, ma se il personaggio muore, sarete costretti Dovete andare su e giù, a destra e a sinistra e uccidere i nemici. Semplicissimo, no? “In Colorful impersonate un ragazzo che deve trovare oggetti colorati” a ricominciare da capo. E quando trovate qualche cosa di colorato, dovrete portarlo alla vostra ragazza che vi aspetta nella stanza principale. In definitiva, Colorful non è certo un gioco all’ultimo grido, ma è pur sempre fluido e veloce. La grafica, seppure molto spartana, rende bene l’azione e permette di mirare con precisione contro i nemici, evitando di proporci sfondi troppo colorati che potrebbero nascondere le traiettorie. Retro game Choria Versione: 0.4.1Web: http://code.google.com/p/choria/ S e siamo dei tipi un po’ particolari, potremmo pensare che un gioco di ruolo, per essere divertente, dovrebbe lasciarci ore e ore a girovagare, macinando punti esperienza facendo più o meno sempre le stesse cose. Potrà sembrare strano, ma parecchi amanti degli RPG in realtà non amano concentrarsi molto su aspetti strategicotattici, preferendo invece accumulare risorse e uccidere qualche mostro. Ecco, Choria è proprio questo: una sequenza di compiti che ci faranno macinare risorse. Il primo e forse anche quello più complicato esula però dal gioco. Dovrete infatti iniziare compilando il codice. Vi consigliamo pertanto di dare un’occhiata approfondita al file README, dov’è spiegata nel dettaglio la procedura. L’unica cosa che non ci spieghiamo 54 Linux pro 136 è come Choria, che ha una grafica 2D del tutto insignificante, necessiti del motore 3D Irrlicht 1.8. Detto questo, una volta installate le dipendenze, inizierete a giocare. Iniziate in una classica città dove ci sono alcuni negozi in cui potete scambiare oggetti. Vagando in giro, troverete vari nemici a cui dovrete fare la pelle per ricevere in cambio oro e punti esperienza. Quando ottenete abbastanza punti, passate al livello successivo e potrete aggiungere una nuova abilità al vostro personaggio. Ora, vi starete sicuramente chiedendo perché stiamo parlando di un gioco La qualità audio è pessima e anche la grafica non è un granché, ma il gioco è comunque divertente “Per progredire nel gioco in poco tempo, basta esplorare” del genere se lo giudichiamo così mediocre. E infatti non è così, perché Choria può essere divertente per passare qualche ora. Acquisire i primi livelli è facilissimo e perfino veloce. Basta esplorare. Se si muore, anche se tornate al punto di partenza, i punti esperienza vengono mantenuti. E se vi annoiate, avete a disposizione un editor di mappe per creare nuove ambientazioni e perfino una modalità multiplayer. LXP Tutorial I nostri esperti offrono ogni mese i loro consigli di programmazione e di amministrazione del sistema LA VOSTRA GUIDA DI RIFERIMENTO Esiste 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 numero il giusto mix di argomenti, ma se avete suggerimenti su temi particolari che vorreste vedere trattati, scriveteci via e-mail all’indirizzo [email protected] TUTORIAL FPM Un programma semplice e pratico per “impacchettare” le vostre creazioni in formato Deb e RPM pag. 56 Juju Lo strumento di gestione dei servizi cloud che funziona a “charm” pag. 60 ZFS Create array RAID, salvate snapshot e ripristinateli con questo filesystem straordinariamente flessibile pag. 66 Raspberry Pi Un tutorial passo passo su come installare il sistema operativo Raspian con Linux, avviarlo e come risolvere problemi in modo rapido ed efficiente pag. 70 persino troppe informazioni. Ecco come ricevere via mail solamente i messaggi critici che vi interessano davvero pag. 74 Hacking Gli strumenti di monitoraggio e logging sono estremamente utili ma tendono a fornire COME RAPPRESENTIAMO LE LINEE DI CODICE 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 := not end Quando una riga di codice supera la lunghezza della colonna la riporteremo su più righe utilizzando la notazione seguente: printf(“Vi preghiamo di inserire una password.“); ACCADEMIA DEL CODICE Concetti di base Go C++11 Haskell Lo staff di Linux Pro vi insegnerà a utilizzare SQL e un database relazionale per capire come strutturare i dati pag. 76 Consigli su questo interessante linguaggio di programmazione: puntatori, puntatori smart e funzioni membro pag. 78 Una guida rapida su questo linguaggio perfetto per script che richiedono un rapido accesso alla memoria pag. 82 Alla scoperta di questo linguaggio compilato funzionale e divertente che vi aprirà una nuova prospettiva di programmazione pag. 86 LINUX PRO 136 55 TutorialGeneratore Xxxx di package Scoprite il metodo più semplice per produrre Deb e RPM Creare pacchetti con FPM Insieme allo staff di Linux Pro che vi guiderà alla scoperta di FPM, imparerete la via più semplice e indolore per realizzare i vostri pacchetti in formato Deb e RPM N intermedio elle situazioni in cui funziona, la gestione dei pacchetti di Linux è davvero meravigliosa. Le dipendenze si risolvono automaticamente, potete installare e rimuovere qualsiasi applicazione con pochi e semplici comandi e capire senza difficoltà quali file appartengono a determinate fonti. Purtroppo, però, il mondo non è sempre rose e fiori e talvolta anche la gestione dei pacchetti può dare grattacapi. Quante volte vi sarete trovati faccia a faccia con programmi spezzettati in una miriade di parti, dove il solo venirne a capo può essere causa di sonori mal di testa. E ancora, vi sarete sicuramente cimentati in qualche installazione all’ultimo grido per tentare di far funzionare un vecchio pacchetto su una nuova distro. Certo, rispetto a Windows, dove ci sono mille programmi d’installazione che il più delle volte finiscono per imbrattare il registro con ogni sorta di chiavi, la gestione dei pacchetti di Linux, pur con tutti i suoi limiti, rimane sempre un’oasi felice. Ora, tutti noi apprezziamo il lavoro svolto dagli sviluppatori per pacchettizzare i propri software, e se almeno una volta avete provato l’ebrezza di creare un file Deb o RPM da soli, non sarebbe inusuale se foste scappati urlando dopo i primi tentativi. Infatti non è certo un processo semplice e anche quando avete organizzato tutto per bene, di solito ci vuole ugualmente parecchio tempo. FPM (http://github.com/ jordansissel/fpm) mira a risolvere proprio questi problemi. Il suo principale fondamento non lascia adito a dubbi e “se FPM non vi aiuta a creare facilmente i vostri pacchetti, significa che FPM ha un bug”. Perfetto! A questo punto, però, potreste anche domandarvi per quale motivo dovreste cimentarvi nell’arte della creazione di un package. Siete dei programmatori e volete distribuire online qualcosa di molto più semplice da installare rispetto al tradizionale codice sorgente. Siete Admin, avete realizzato diverse versioni personalizzate di alcuni software e volete esportarle facilmente anche su altre piattaforme. Siete semplicemente curiosi di sapere come lavorano i pacchetti, volete aumentare le vostre credenziali da geek o semplicemente trovare un argomento con cui mettervi in mostra al prossimo LUG. Qualunque sia il motivo che vi spinge ad approfondire questo argomento, continuate a leggere. Scoprirete come la creazione e la modifica dei pacchetti è molto più facile di quanto credete. I primi passi con FPM In questa schermata potete vedere come Dateutils non sia stato installato a livello di sistema, bensì in una directory temporanea ( /tmp/directorypacchetto) 56 Linux pro 136 FPM è scritto in Ruby e quindi, prima di tutto, avrete bisogno di recuperare l’ultima versione di questo linguaggio, più i vari file di sviluppo. In X/K/Ubuntu 13.04 è semplice come scrivere il comando che segue: sudo apt-get install ruby1.9.1 ruby1.9.1-dev Quasi tutte le principali distro hanno Ruby nei propri repository, quindi non avrete problemi a trovarlo nel vostro gestore pacchetti. FPM è disponibile come Gem - ovvero un pacchetto Ruby - e per installarlo è sufficiente scrivere sudo gem install fpm Vedrete quindi sfrecciare una serie di comandi con cui RubyBem recupera e ricostruisce le varie dipendenze. Una volta terminato il processo, siete pronti per usare FPM. Ora, per compiere il proprio dovere, FPM ha bisogno di un gruppo di file da racchiudere in un pacchetto. Non ci sono preferenze sulla natura stessa dei file, anche perché, dopotutto, i pacchetti possono contenere qualsiasi cosa, dagli eseguibili alle immagini. FPM Tutorial FPM, quindi, non chiede alcuna specifica. Quello di cui invece ha bisogno, è la posizione in cui sono collocati i file con un’appropriata struttura della directory. Supponete adesso di trovarvi nel secondo scenario che abbiamo indicato nel paragrafo precedente: avete creato una versione personalizzata di un programma e volete inserirlo in un pacchetto. In questo caso ci doteremo di un programma facile da utilizzare, come Dateutils (www.fresse.org/dateutils). Scaricate dateutils-0.2.6.tar.xz ed estraetelo con tar xfv dateutils-0.2.6.tar.xz A questo punto potete iniziare a personalizzare quello che volete, ma per adesso evitate questo passaggio, andate direttamente nella directory del programma e iniziate la compilazione. Ricordate che i pacchetti binari, di solito, si installano in /usr anziché in /usr/local/. Questa precisazione fa comunque riferimento a una procedura convenzionale e non è necessariamente importante. Bene, iniziate usando l’opzione --prefix= per configurare lo script: cd dateutils-0.2.6/ ./configure --prefix=/usr make Nella fase successiva, di solito si userebbe un comando di installazione come sudo make install. Tuttavia, in questo momento, non abbiamo intenzione di spargere tutti i file all’interno del filesystem, quanto piuttosto disporli in una directory separata in cui FPM può facilmente recuperarli per inserirli in un pacchetto. Ecco come dovete procedere: mkdir /tmp/directorypacchetto make install DESTDIR=/tmp/directorypacchetto Se date un’occhiata in /tmp/directorypacchetto, noterete come al suo interno siano stati spostati tutti i file necessari all’installazione di Dateutils. DESTDIR deve sempre essere applicato con i programmi che seguono le tradizionali procedure di ./configure, make e make install. Con altri sistemi di compilazione è infatti necessario controllare la documentazione e capire come installare i vari file in una directory temporanea. Creare un pacchetto Deb Adesso entriamo nel vivo del tutorial, usando FPM per inserire questa directory all’interno di un pacchetto. Il comando di cui avete bisogno è: fpm -s dir -t deb -n dateutils -v 0.2.6 -C /tmp/directorypacchetto/ . Bene, analizziamo quindi questa istruzione punto per punto. Il primo comando, -s, istruisce FPM su ciò che volete utilizzare come risorsa per il pacchetto. In questo caso si tratta di una directory. FPM, infatti e come vedremo in seguito, può usare anche altre fonti. Di seguito, il comando -t descrive il tipo di pacchetto che volete creare (nel nostro caso si tratta di un Deb, ma si può usare anche -t rpm per creare un RPM, fornendo quindi il relativo software installato. Per approfondire, date un’occhiata al box a pagina 52 Generare RPM). Il comando -n evidenzia il nome del pacchetto, mentre -v specifica la versione. Infine, il comando -C indica a FPM di cambiare directory prima di cominciare la ricerca e il “.” lo informa di dover partire dalla base della directory stessa su cui lo avete indirizzato. Una volta completata la procedura, vedrete comparire questa istruzione: Created deb package {:path=>”dateutils_0.2.6_i386.deb”} Date uno sguardo ai dettagli del pacchetto: dpkg --info dateutils_0.2.6_i386.deb Vedrete che FPM ha riempito molti dei campi di descrizione Ecco il nostro pacchetto da poco generato in tutto il suo splendore. Alcuni campi informativi hanno bisogno di maggiori dettagli del pacchetto automaticamente, usando per esempio il nome con cui avete eseguito il login e l’hostname del sistema per riempire i campi Vendor e Maintainer. Altri, invece, hanno un testo generico, come per esempio Homepage e Description. Fra un attimo vedrete come personalizzare anche queste voci con le opzioni accessorie di FPM, ma per ora ci limiteremo a installare il pacchetto per controllare che tutto funzioni a regola d’arte: sudo dpkg -i dateutils_0.2.6_i386.deb Usate poi uno dei comandi contenuti nel pacchetto, per esempio ddiff, così da controllare che tutto sia in ordine. Ecco fatto, è stato un gran successo! Se avete provato almeno una volta a creare un pacchetto Deb in modo tradizionale, probabilmente starete facendo i salti di gioia per la semplicità con cui l’operazione è andata a buon fine. E siamo solo all’inizio... Come abbiamo già anticipato, durante la fase di creazione è possibile aggiungere informazioni supplementari con cui perfezionare il risultato finale. Questo passaggio non influisce sulle funzionalità del pacchetto, ma se lo state creando per altre persone, può essere utile dargli un aspetto più professionale. Per prima cosa aggiungete una descrizione testuale con il flag --description: utilizzate le virgolette singole per specificare il testo, che consente anche di inserire i caratteri su una nuova linea. Una buona descrizione non è mai troppo lunga o dispersiva, bensì semplice e concisa. In definitiva, deve spiegare bene lo scopo principale del programma, senza perdersi in inutili voli pindarici. Personalizzare i risultati Adesso potete usare --url per aggiungere l’indirizzo alla pagina Web del programma. È poi una buona idea usare --license (se necessario, inserite più parole nelle virgolette singole), così che gli utenti sappiano in quale modo possono ridistribuire il pacchetto, aggiungendo poi --vendor e --maintainer per fornire un contatto cui rivolgersi in caso di bisogno. Le opzioni --before-install, --after-install, --before-remove e --after-remove sono estremamente utili. Con esse siete in grado di fornire script che possono avviarsi prima o dopo i processi di (dis)installazione. Molti pacchetti, prima di posizionare i file, fanno infatti uso di funzioni automatizzate per eseguire le operazioni di configurazione iniziale. E, allo stesso modo, usano altri script dopo la rimozione del pacchetto, magari per ripulire il sistema dai file temporanei creati durante l’operazione. Per vedere come lavorano, create un file di testo chiamato postinstallazione in /tmp con i seguenti campi: Linux pro 136 57 Tutorial FPM trucchi per l’indipendenza delle distro Costruire un pacchetto che funzioni su più distro non è un’impresa da poco. Alcuni hanno provato a realizzare un formato neutrale, come per esempio l’oramai defunta Autopackage, ma nessuno è mai riuscito fino in fondo nell’intento. Eppure ci sono alcune cose che potete fare. in primo luogo, cercare di realizzare il pacchetto usando una versione leggermente più vecchia della vostra distro. Se possibile o meno dipende dalle dipendenze del programma, ma è molto meglio usare librerie un po’ più vetuste. Se la vostra distro ha libfoo 3.4, potete creare un pacchetto per una distribuzione precedente che sfrutta libfoo 3.1. in questo modo potrà lavorare su un più ampio spettro di distribuzioni con diverse varianti sulla versione di libfoo (per esempio una spin-off di una distro che ha libfoo 3.0). in generale, le librerie open source prendono la questione della compatibilità molto sul serio, quindi non dovreste avere grossi #!/bin/sh ls --color Rendetelo eseguibile (chmod +x /tmp/postinstallazione) e ricreate di nuovo il pacchetto, usando l’opzione --after-install utilizzando i seguenti comandi: fpm -s dir -t deb -n dateutils -v 0.2.6 --after-install /tmp/ postinstallazione -C /tmp/directorypacchetto/ . Quando installerete di nuovo il pacchetto, vedrete l’output di ls --color dopo la riga Configurazione di dateutils (0.2.6). Questo sistema si rivela estremamente versatile, in quanto potrete stampare i messaggi durante le operazioni di installazione o fare all’utente alcune domande. Basta solo realizzare qualche script di shell. Conflitti e dipendenze Alcuni pacchetti non possono essere installati se un altro file dello stesso tipo è già presente nel sistema. Di solito non è una cosa molto comune, tuttavia non è impossibile. Questo comportamento, di norma, evita che più pacchetti con le stesse funzioni si scontrino tra loro all’interno della stessa posizione nel filesystem. Per simulare una cosa del genere, provate a creare il pacchetto con l’istanza --conflicts xterm e installatelo di nuovo (comparirà quindi un errore che informa dell’impossibilità di installare il pacchetto perché Xterm è già presente nel sistema, ovviamente a patto che abbiate precedentemente installato Xterm). ora, mentre il nostro Dateutils necessita solo della libreria C standard, la maggior parte dei programmi, per funzionare a dovere, avrà bisogno di librerie e pacchetti diversi. E sì, qui stiamo giusto parlando di dipendenze e non c’è assolutamente bisogno di buttare la rivista per terra e scappare problemi. nei vostri script post installazione, cercate di usare i tool che sono disponibili in ogni distro, anziché programmi specifici per singole distribuzioni. Se create un pacchetto in openSuSE e avete bisogno di lanciare alcune procedure di configurazione con vari script dopo la fase d’installazione, potreste essere tentati di richiamare il modulo Yast, salvo poi accorgervi che con Fedora il pacchetto sarà inutilizzabile. Date inoltre un’occhiata al Linux Standards Base e al Filesystem Hierarchy Standard (www.linuxfoundation.org/ collaborate/workgroups/lsb). Questi progetti, infatti, si ripropongono di uniformare i set di strumenti comuni, le librerie e la struttura delle directory tra le varie distro. Molte distribuzioni includono poi uno script lsb_release, utile per ottenere informazioni sulla versione. E quindi si potrebbe usare proprio lsb-release-a all’interno di uno script, per scoprire quale distro e quale relativa versione sono state usate. urlando, perché FPM riesce a gestirle senza alcun problema. Prima di tutto avrete bisogno di scoprire quali librerie (e versioni) sono richieste dall’applicazione per cui volete creare il pacchetto. Se la documentazione del software è ben fatta, non avrete difficoltà a reperire tutte le informazioni consultando i file Readme e Install. Se così non fosse, ci sono comunque dei trucchi piuttosto funzionali che vi aiutano. Lanciando ldd con il file binario principale del programma dopo la compilazione, vedrete comparire l’elenco dettagliato di tutti i file utilizzati dalla libreria. A questo punto, con i tradizionali strumenti di packaging, potete scoprire l’appartenenza di un file alla rispettiva libreria. Diciamo quindi che Dateutils necessita perlomeno della libreria C versione 2.17. Ecco quindi come potete specificare questa dipendenza durante la fase di realizzazione del pacchetto. Scriviamo i seguenti comandi: fpm -s dir -t deb -n dateutils -v 0.2.6 -d ‘libc6 (>= 2.17)’ -C /tmp/directorypacchetto/ . La cosa più importante da sottolineare qui, è la parte relativa all’istruzione >=, che significa “maggiore o uguale di”. in questo modo, il pacchetto di Dateutils non verrà installato a meno che nel sistema non sia presente la libreria C versione 2.17 o successive. nel caso in cui voleste modificare questo parametro, magari aggiungendo un numero di versione particolarmente alto, come per esempio 9.99, ricostruendo il pacchetto e provando a installarlo di nuovo, vedrete comparire il seguente messaggio: dpkg: problemi con le dipendenze impediscono la configurazione di dateutils: dateutils dipende da libc6 (>= 9.99); comunque: La versione di libc6:i386 nel sistema è 2.17-0ubuntu5. È possibile specificare dipendenze multiple con una serie di flag Generare RPM Come già accennato, per creare un RPM basta aggiungere il comando -t rpm a FPM. Dovrebbe quindi funzionare senza alcun intoppo sui sistemi basati su RPM, ma se state operando da un’altra distribuzione avete bisogno di qualche strumento aggiuntivo. nelle distro basate su ubuntu, potete servirvi di sudo apt-get install rpm, che vi fornisce il programma rpmbuild di cui FPM ha bisogno. Poi, lanciando -t rpm insieme ai comandi cui abbiamo accennato in precedenza, realizzerete un pacchetto chiamato dateutils-0.2.6-1.i686.rpm. È importante 58 LinuX PRo 136 ricordare che ci sono alcune opzioni di FPM che si applicano solo agli RPM. Per conoscerle, basta eseguire fpm --help e dare un’occhiata alle righe che contengono “rpm only”. Particolare attenzione, invece, è bene porla quando realizzate RPM in sistemi basati su Deb. nella maggior parte dei casi non dovreste andare incontro a problemi, ma se state realizzando un’applicazione che prevede una larga distribuzione online, prima di aprire le porte a tutti, vale la pena di provare il pacchetto su una distro basata su RPM. FPM Tutorial -d seguiti dal nome dei pacchetti e dalle rispettive versioni, così come illustrato precedentemente nel codice. Se il programma di cui volete creare il pacchetto ha un ampio raggio di dipendenze, controllate il gestore pacchetti della vostra distro, per vedere così se fosse presente un meta-pacchetto capace di coprire tutte le richieste. Se per esempio siete impegnati nella creazione di un pacchetto per un’applicazione GnoME, invece di specificare sfilze interminabili di dipendenze per i vari componenti, potete semplicemente configurare il vostro pacchetto come dipendente da “gnome”, in modo da fargli racimolare da solo tutte le principali dipendenze di Gnu network object Model Environment. opzioni avanzate Fino a ora, in questo tutorial abbiamo utilizzato le directory come sorgenti principali per FPM (-s dir). Tuttavia FPM può generare pacchetti altrettanto bene anche da altri file, come per esempio i tarball. Se disponete di foo-1.0.tar.gz in cui sono contenuti diversi file e una directory strutturata che può essere copiata direttamente nel filesystem (es. /usr/bin/foo, /usr/share/doc/ foo/ e così via), potete convertire il tutto in un .deb o un RPM tramite -s tar. Ecco come: fpm -s tar -t deb -n foo -v 1.0 foo-1.0.tar.gz un’altra sorgente che FPM può utilizzare sono i moduli Python. Grazie alla cosiddetta “installazione semplice”, FPM può scaricare i moduli e impacchettarli automaticamente, senza perdere tempo nel cercarli in giro per il Web. Per esempio, per creare il pacchetto di PyX, un modulo per la realizzazione di PostScript e file PDF, scrivete il comando che segue: fpm -s python -t deb pyx Collegatevi a http://goo.gl/sWs3Z per vedere una divertente presentazione rilasciata dall’autore di FPM, in cui spiega le motivazioni che l’hanno spinto a scrivere il software infine, con -s empty potete creare pacchetti completamente vuoti. Di certo qualcuno si starà domandando per quale motivo dovrebbe fare una cosa del genere. Beh, semplicemente perché questa funzione è utile per creare meta pacchetti. Per esempio potreste configurare una serie di macchine desktop con una combinazione specifica di programmi (un particolare windows manager, un browser, un editor di testo e così via). in questo modo, anziché installare i vari programmi su ogni singolo computer, o ancor peggio mettersi a trafficare con gli script, siete in grado di creare un meta-pacchetto con tutte le applicazioni come dipendenze. non dovrete far altro che installare il pacchetto su ogni postazione e lasciar fare il resto al gestore pacchetti. LXP Creare pacchetti statici ermine semplifica enormemente le operazioni di creazione dei pacchetti statici, ma purtroppo non è open Source un trucco per rendere i vostri pacchetti funzionanti su molteplici distro è quello di collegare staticamente i file eseguibili. normalmente i programmi usano librerie di codice esterno tramite un sistema chiamato collegamento dinamico. i software, in pratica, accedono alle librerie solo quando ne hanno bisogno. Queste ultime, di solito, stazionano in /lib e /usr/lib, vengono fornite nei rispettivi pacchetti e possono essere aggiornate in modo del tutto indipendente rispetto al programma che le utilizza. Questo sistema è poi estremamente sensibile, ma viene da domandarsi: perché ogni programma basato su GTK include la propria versione dell’omonima libreria, quando tutti possono condividerla? La risposta è semplice e si tratta di un aspetto positivo soprattutto dal punto di vista della sicurezza, poiché quando viene scoperta una vulnerabilità in GTK, è possibile aggiornare la versione condivisa, così che tutti i programmi che ne fanno uso godano dei vantaggi immediati dei fix. ora, se siete disposti a perdere tutti questi benefici, potete collegare staticamente i file eseguibili all’interno del pacchetto. Ed ecco quindi che questo stratagemma attira tutto il codice della libreria condivisa all’interno dell’eseguibile, creando sì un file molto più grande, ma capace di funzionare praticamente ovunque. non importa quali siano le versioni delle librerie usate da una distro; tutto LXP il codice necessario alle esigenze del programma è incluso nel file eseguibile. Tenete presente che compilare dei binari statici è piuttosto complicato, tuttavia esiste un programma proprietario chiamato ermine che rende la procedura molto più semplice (www.magicermine.com). Scaricate il file ermineLighttrial.i386 (o x86_64) e rendetelo eseguibile. Adesso, per esempio, date un’occhiata al binario gedit: se lanciate ldd /usr/bin/gedit vedrete che usa oltre 60 librerie condivise nel sistema. Ma dopo aver fatto questo: ./ErmineLightTrial.i386 /usr/bin/gedit --output static-gedit abbiamo ora un pacchetto completo chiamato static-gedit che non dipende da nessuna libreria, sebbene sia ingrassato fino a 42 MB, rispetto ai 671 KB di partenza. in generale è sempre meglio collegare le librerie dinamiche, ma se state utilizzando FPM per distribuire in Rete un software scritto da voi, potreste creare un pacchetto opzionale collegato staticamente, e destinarlo agli utenti che per varie ragioni non possono prelevare quello normale. LinuX PRo 136 59 Tutorial Xxxx Juju Mettete nel cloud i vostri servizi preferiti senza fare sforzi Il cloud secondo Ubuntu Per rendere compatibili con il cloud i tuoi servizi Web bastano un po’ di magia sudafricana e un tocco di charm difficile J uju è grandioso. Se non ne avete mai sentito parlare, allora non conoscete il cloud come dovreste (leggete il box Juju GUI nella prossima pagina per scoprire dettagli sulla demo online). Alla base di Juju c’è il concetto di charm. Uno charm si può paragonare a un distillato di esperienza sulla messa in opera di un particolare servizio: pensate a qualcosa tipo MySQL o WordPress. Ma si tratta di più di un semplice script d’installazione: si può anche rendere conto della presenza di altri servizi e collegarli tutti tra loro (per esempio, può far collaborare un database MySQL con WordPress in modo da usarlo come back-end per il CMS). La struttura della vostra directory dello charm deve avere questo aspetto 60 Linux pro 136 Uno charm è, per dirla in breve, una cosa magica e in questo tutorial la vedrete in azione. Ci sono alcune cose di cui avete bisogno per creare uno charm. Anche se è possibile farlo usando un’altra distro, il processo è molto più semplice se adottate una versione recente di Ubuntu. Precise Penguin (Ubuntu 12.04 LTS) va bene, così come la 13.04. Dovete poi installare il pacchetto juju-core o il vecchio pacchetto Juju (per i dettagli sull’installazione relativi alla vostra distro/ piattaforma andate all’URL https://juju.ubuntu.com/docs/ getting-started.html). È una buona idea installare anche il pacchetto charms-tools che contiene alcune funzionalità che vi possono aiutare più avanti. In tutti i casi dovrete avere anche un ambiente in cui creare le istante di Juju, come un account AWS, HP Cloud o OpenStack. Se trovate delle difficoltà nell’impostare Juju con il vostro provider cloud, controllate l’URL che vi abbiamo suggerito poco fa. Ipotizzando che sia tutto a posto, potete iniziare. La prima cosa da fare è creare la struttura di directory per il vostro charm, riempiendola con i file che vi serviranno. Visto che avete installato i charm-tools (l’avete fatto, vero?) è molto semplice: mkdir -p ~/localcharms/precise cd ~/localcharms/precise charm create vacilla Vedrete apparire un messaggio d’errore che vi comunica l’impossibilità di trovare “vanilla” in apt-cache. Non preoccupatevene. Se steste creando un charm da un pacchetto già installato localmente, i tool charm farebbero un lavoro maggiore inserendo anche qualche metadato, ma va bene lo stesso. Creare charm Il primo file da guardare è metadata.yaml. Esso contiene tutte le informazioni importanti che servono a Juju per sapere qualcosa sullo charm, ma è comunque molto semplice. La prima parte è banale: name: vanilla summary: Vanilla is an open-source forum. maintainer: my name <[email protected]> description: | Vanilla è un sistema di forum multilingua estendibile. Questo charm installa Vanilla seguendo le istruzioni ufficiali. Come potete vedere, il formato YAML è facilmente leggibile e contiene delle semplici coppie chiave:valore, che per quanto visto finora hanno delle descrizioni molto facili. La parte seguente è più importante: categories: applications provides: website: interface: http requires: database: Juju Tutorial interface: mysql Categories è una lista, visto che il vostro charm può stare in più di una categoria (inserite ognuna in una nuova riga). Le opzioni valide per questa voce sono: databases; file-servers; applications; cache-proxy; app-servers; miscellaneous. non preoccupatevi di questo elenco, serve solo per rendere le categorie ricercabili online. Ci sono due importanti sezioni subito sotto: provides e requires. La sezione provides contiene i servizi offerti dal vostro charm. nell’esempio si tratta di un sito Web quindi si indica “website” e sotto, indentato, si deve indicare l’interfaccia che verrà usata per fornire il servizio. i nomi in questo caso non sono fondamentali, avreste potuto chiamare “web” o “forum” il servizio, ma è importante ricordare il nome assegnato perché lo dovrete usare per scegliere il nome del vostro script più avanti. requires è un po’ più specifico, perché in questo caso si fornisce un altro servizio (MySQL). Se controllate il metadato del charm MySQL, vedrete che essi forniscono una sezione che indica un database con interfaccia MySQL. Questo è proprio ciò che vi serve. Questa informazione consente a Juju di capire i modi in cui i servizi si possono collegare e di conseguenza sa quali script cercare. La GUI di Juju Stanchi di digitare? Allora dovreste guardare Juju GUI, un’interfaccia drag & drop per fare il deploy dei charm nel cloud. La Gui esegue un’istanza e semplifica la gestione di tutto il lavoro noioso. un browser sulla sinistra mostra tutti gli charm disponibili nello store delle demo, e potete trascinarli nel pannello principale per renderli attivi. potete provare il sito per una demo live così da scoprire cosa vi state perdendo: https://jujucharms.com/sidebar. Agganciamento ora passate al prossimo step. La directory hooks contiene script eseguibili con nomi specifici che vengono richiamati quando succede qualche evento. Questi eventi si possono dividere in due tipi: relativi al ciclo di vita (lifecycle) o all’ambiente (environmental). i primi trattano con eventi che accadono solo al vostro servizio, e hanno sempre lo stesso nome: start, stop e install. Scrivetene uno. iniziate con start, il più semplice: #!/bin/bash set -e service apache2 restart Visto che si tratta di un file eseguibile, deve iniziare con il classico shebang. una nota importante: stiamo usando Bash perché è facile da comprendere dalla maggior parte degli utenti, ma potete usare il linguaggio che preferite per scrivere gli script, basta che siano eseguibili su un server ubuntu standard. Vi sconsigliamo il Fortran 77, ma fate come volete. La linea set -e è importante, visto che dice allo script di uscire e restituire un codice d’errore se uno qualunque dei comandi seguenti fallisce – se qualcosa va storta, vogliamo che Juju lo sappia. il forum Vanilla gira sotto il server Web Apache Se avete bisogno di aiuto con Juju, controllate la documentazione online all’URL https://juju.ubuntu.com/docs La GUI di Juju semplifica un po’ il deploy dei servizi cloud (nel nostro caso, voi potete usare altro se volete). per far partire il servizio, quindi, tutto quello che bisogna fare è avviare Apache. Ma che succede se il server è già in esecuzione? Dovreste semplicemente riavviarlo – l’opzione restart avvierà Apache se è fermo, e lo riavvierà se è già in esecuzione. Questo vuol dire che il vostro script sarà idempotente (guardate il box Idempotenza!), il che vuol dire che potete eseguirlo più volte senza cambiare il risultato desiderato. Lo script stop è simile e usa un comando differente di poco per fermare Apache. il vero trucco in questa situazione si nasconde dentro lo script install, deve scaricare e installare tutto ciò che serve per far funzionare Vanilla e copiare i file nella cartella corretta. Ve lo spieghiamo un pezzetto alla volta. #!/bin/bash set -e apt-get install -y apache2 php5-cgi php5-mysql curl php5gd wget libapache2-mod-php5 Sì! potete usare apt-get per installare tutte le dipendenze (ricordatevi di usare lo switch -y per disabilitare ogni interattività). in questo caso si vuole recuperare Apache, wget (per scaricare i sorgenti di Vanilla) e varie componenti pHp che servono al forum per funzionare. i vostri requisiti potrebbero essere diversi dai nostri – basate l’elenco delle dipendenze richieste dal vostro software su una installazione base di ubuntu Server. dl=“https://github.com/vanillaforums/Garden/archive/ Vanilla_2.0.18.8.tar.gz” # Grab Vanilla from upstream. juju-log “Fetching $dl” wget “$dl” -o /tmp/vanilla.tar.gz Questa parte recupera il tarball dal sito Web del forum – è una buona idea scaricare un file specifico, uno che siete sicuri che funzioni. # check if installed if [ -f /var/www/vanilla/conf/config.php ]; then Linux pro 136 61 Tutorial Juju Idempotenza! idempotenza è una parola che sentirete molto spesso in relazione con gli hook degli charm (e forse anche in altri posti, dipende da dove lavorate). Significa che rieseguire un’operazione non dovrebbe cambiare il risultato atteso. Quindi se un’operazione deve avviare un servizio, dovrebbe fermare quelli già avviati, non importa in quale stato si trovino. può essere complesso pensare a tutti gli scenari ai quali si applicano gli hook delle relazioni, ma basta tenere a mente che non dovete fare voi delle assunzioni sullo stato dei servizi quando fate partire uno script. Questo aiuta gli charm a essere più robusti. cp /var/www/vanilla/conf/config.php /tmp/ rm -rf /var/www/vanilla Online potete esaminare il codice di altri charm; leggere i file Readme per capire come collegarvi fi Cosa succede se Vanilla è già installato? in questo caso dovreste preservare la sua configurazione ed è esattamente ciò che fanno le righe precedenti. ora si procede estraendo i file: # Extract to a known location juju-log “Estraiamo Vanilla” tar -xvzf /tmp/vanilla.tar.gz -C /var/www/ mv /var/www/Garden-Vanilla* /var/www/vanilla if [ -f /tmp/config.php ]; then mv /tmp/config.php /var/www/vanilla/conf/ fi Dovrete anche cambiare i permessi di alcuni file e cartelle: chmod -r 777 /var/www/vanilla/conf /var/www/vanilla/ uploads /var/www/vanilla/cache Lo step successivo prevede la configurazione di Apache in modo che sappia della presenza di Vanilla e modificare la sua configurazione in modo da includere una voce per il forum. Questo può essere fatto facilmente mandando l’output del comando cat nel file corretto: juju-log “Creiamo la configurazione di apache2” cat <<EoF $gt; /etc/apache2/sites-available/vanilla <VirtualHost *:80> ServerAdmin webmaster@localhost Documentroot /var/www/vanilla <Directory /var/www/vanilla> options indexes FollowSymLinks MultiViews Allowoverride All order allow,deny allow from all </Directory> ErrorLog \${ApACHE_LoG_Dir}/vanilla.log LogLevel warn CustomLog \${ApACHE_LoG_Dir}/access.log combined </VirtualHost> EoF a2dissite 000-default a2ensite vanilla service apache2 reload juju-log “File estratti, aspetto altri eventi prima di fare altro!” L’ultima parte fa sapere ad Apache che c’è il sito Web e lo ricarica in modo da leggere i cambiamenti alla configurazione. Forse avete notato alcuni comandi ju-ju. Questi comandi si usano per inviare messaggi di log al file /var/juju, molto utile per fare il debug dei vostri script. Relazioni Le relazioni possono essere difficili, ma i collegamenti (hook) tra di esse sono immediati. La prima cosa da sapere su questo tipo di hook è che prendono il nome dalla relazione menzionata nei metadati. Quindi, per esempio, avrete bisogno di qualche hook per gli eventi: <relation name>-relation-joined <relation name>-relation-changed <relation name>-relation-departed <relation name>-relation-broken Alcuni di questi eventi si spiegano da soli. relation-joined viene richiamato quando viene stabilita una relazione. Questo vuol dire anche che la relazione è cambiata, per cui l’hook relation-changed viene avviato subito dopo. Lo stato departed accade quando un servizio si disconnette, e lo stato broken quando una relazione che era stata stabilita non è più disponibile, per avviare una pulizia. Quindi vi serve un set di script per il vostro servizio di database che trattino questi eventi. Comunque, ogni volta che accade un evento, se Juju non trova lo script con lo stesso nome da eseguire, assume che vada tutto bene. Questo vi evita di scrivere degli script “vuoti”. per esempio, non c’è bisogno di scrivere uno script database-relation-joined se si va a creare uno script relation-changed che può gestire anche la connessione iniziale. #!/bin/bash set -e # Se un comando fallisce, ferma l’esecuzione dell’hook con un errore db_user=`relation-get user` db_db=`relation-get database` db_pass=`relation-get password` db_host=`relation-get private-address` if [ -z “$db_db” ]; then juju-log “non ci sono ancora info sul database. Esco silenziosamente” exit 0 fi vanilla_config=“/var/www/vanilla/conf/config.php” cat < $vanilla_config <?php if (!defined(‘AppLiCATion’)) exit(); \$Configuration[‘Database’][‘Host’] = ‘$db_host’; \$Configuration[‘Database’][‘name’] = ‘$db_db’; 62 Linux pro 136 Juju Tutorial In locale con LXC non dovete avere per forza un account cloud con Hp o Amazon per fare esperimenti con i charm. Al momento c’è il supporto sperimentale per LxC (Linux Containers), il che vuol dire che potete eseguire un cloud virtualmente su un’istanza locale: in questo modo si risparmiano tempo e soldi. potete trovare le istruzioni per procedere in questo modo all’urL http://juju.ubuntu.com/docs/config-LXC.html. \$Configuration[‘Database’][‘user’] = ‘$db_user’; \$Configuration[‘Database’][‘password’] = ‘$db_pass’; EoF open-port 80 il comando relation-get è una funzione helper per Juju, che può essere usata per comunicare con gli script di Juju che girano su altre istanze. in questo caso invocando il comando juju add-relation vanilla mysql verrà eseguito lo script database-relation-joined nel vostro charm, ma si avvierà anche lo script corrispondente nello charm MySQL. Esaminando lo script potete vedere che quando qualcosa crea una connessione con il servizio MySQL, lo script genera un database e un utente con i permessi corretti. La funzione helper può recuperare questi valori generati (sono casuali per ovvie ragioni di sicurezza) per voi, poi il vostro script può scriverli nel file di configurazione di Vanilla. ogni volta che la connessione viene cambiata, i valori vengono recuperati nuovamente (per esempio quando il database originale viene sostituito da un’unità differente) così che la comunicazione possa essere mantenuta. Visto che vi serve un database, non ha molto senso creare altri script: il servizio semplicemente non funzionerà senza questa connessione. far funzionare il tutto A questo punto dovete creare uno script che gestisca le connessioni al servizio che fornite. Quindi, per il file website-relation-joined avrete #!/bin/sh relation-set hostname=`unit-get private-address` port=80 relation-set è il corollario di relation-get, espone valori chiave=valore, in questo caso hostname e port. i comandi con un backtick davanti usano un’altra funzione helper, unit-get, per recuperare un valore locale (l’indirizzo del server). potreste pensare che il servizio, che è solo un sito Web dopotutto, può operare e creare connessioni all’esterno di Juju: questo è fondamentale per un forum. Ciò è vero, ma non trascurate mai il fatto che altri charm potrebbero voler usare il vostro servizio, in questo caso dovrebbe esserci un proxy cache da qualche parte nel cloud, per esempio. Queste sono le basi che vi servono conoscere per far funzionare il vostro servizio. ipotizzando che abbiate installato e configurato Juju, tutto ciò che vi serve ora è avviare un ambiente e caricarci il vostro charm. Ah, e anche MySQL! juju bootstrap juju deploy mysql juju deploy --repository=~/localcharms local:precise/vanilla juju add-relation mysql vanilla juju expose vanilla La seconda linea deploy del vostro charm indica a Juju di guardare in una directory locale, in questo caso abbiamo specificato anche la “serie”, cioè precise. il comando expose fa sapere a Juju che si tratta di un servizio pubblico e quindi deve fare gli opportuni aggiustamenti al firewall affinché le persone riescano a collegarsi. Ma dove si trova? Se aspettate qualche minuto (ci vuole un po’ per installare tutto il software) potete eseguire: juju status Questo comando elencherà tutte le macchine e i servizi in esecuzione e, cosa fondamentale, elencherà anche le loro porte, così: units: vanilla/0: agent-state: started agent-version: 1 machine: “2” public-address: ec2-54-224-220-210.compute-1. amazonaws.com A questo punto potete semplicemente copiare e incollare il public-address nel vostro server Web per vedere il servizio in funzione. Se la pagina d’avvio di Vanilla appare, complimenti, avete mandato in esecuzione il vostro primo charm I tocchi finali Se volete distribuire il vostro charm ci sono alcune altre cose da fornire assieme a esso; un file readme è fondamentale, e anche alcune note sul copyright. Dovreste fornire anche un’icona! Questa viene usata nello Juju Charm Store (un repository online che contiene charm utilizzabili) e anche nella Gui (vedi il box in seconda pagina). i charm non sono pensati solo per fare il deploy di servizi, ma anche per gestirli. per fare un ulteriore passo in avanti dovreste pensare in che modo rendere disponibili i vostri servizi in un ambiente ad alta disponibilità. noi vi abbiamo mostrato solo le basi, ma potete trovare molto di più leggendo la documentazione che trovate all’indirizzo Web http://juju.ubuntu.com. LXP Quando le cose vanno male inevitabilmente i vostri charm difficilmente funzioneranno al primo colpo. per capire cosa è andato storto potete collegarvi via SSH alla vostra macchina che contiene lo charm, usando il nome della macchina fornito dal comando juju status. Juju aggiungerà automaticamente la vostra chiave SSH a ogni macchina attiva, quindi basta scrivere juju ssh <nomemacchina> Dopodiché potete esaminare i file di log o qualunque altra cosa vi serva. Linux pro 136 63 Diventa protagonista del mondo Linux ABBONATI SUBITO SCEGLI IL METODO PIÙ COMODO PER ABBONARTI: •POSTA Compila, ritaglia e spedisci il coupon in busta chiusa a: Sprea Editori S.p.A. - Servizio Abbonamenti - Via Torino 51 - 20063 Cernusco Sul Naviglio (MI) •FAX invia il coupon al N. 02 •TELEFONA al N. 02 700537672 •ONLINE sul sito www.myabb.it/linuxpro 87168074 Dal lunedì al venerdì dalle ore 9,00 alle ore 18,00. Il costo massimo della telefonata da linea fissa è pari a una normale chiamata su rete nazionale in Italia. Da telefono cellulare il costo dipende dal piano tariffario in uso. Via mail: [email protected]  anno -  numeri € € 90 € ,80 € , 39 invece di 70 39,90 invece 70,80 SCONTO 43% 43% SCONTO COUPON DI ABBONAMENTO SI! Mi abbono a Linux Pro Riceverò 12 numeri di Linux Pro a soli € 39,90 anziché € 70,80 con lo sconto del 43%. ABBONANDOTI ▷ Inviate Linux Pro al mio indirizzo: Cognome e Nome AVRAI DIRITTO AI SEGUENTI VANTAGGI Prov. email ▷ Scelgo di pagare, in un unico versamento: Con il bollettino postale che mi invierete Con carta di credito: Visa American Express Diners Mastercard Numero Firma Scad. (mm/aa) ▷ Regalo Linux Pro a: Cognome e Nome Via N. Località CAP Prov. Tel. Compila, ritaglia e invia questo coupon in busta chiusa a: Sprea Editori S.p.A. - Servizio abbonamenti - Via Torino ,  Cernusco Sul Naviglio (MI) ABBONATI ANCHE IN INTERNET! Collegati subito a: www.myabb.it/linuxpro Accetto di ricevere offerte promozionali e di contribuire con i miei dati a migliorare i servizi offerti (come specificato al punto 1 dell’informativa privacy): ☐ SI ☐ NO Accetto che i miei dati vengano comunicati a soggetti terzi (come indicato al punto 2 dell’informativa privacy): ☐ SI ☐ NO OFFERTA VALIDA SOLO PER L’ITALIA LXP136 Informativa ex Art.13 LGS 196/2003. I suoi dati saranno trattati da Sprea Editori S.p.A., nonché dalle società con essa in rapporto di controllo e collegamento ai sensi dell’art. 2359 c.c. titolari del trattamento, per dare corso alla sua richiesta di abbonamento. A tale scopo, è indispensabile il conferimento dei dati anagrafici. Inoltre previo suo consenso i suoi dati potranno essere trattati dalle Titolari per le seguenti finalità: 1) Finalità di indagini di mercato e analisi di tipo statistico anche al fine di migliorare la qualità dei servizi erogati, marketing, attività promozionali, offerte commerciali anche nell’interesse di terzi. 2) Finalità connesse alla comunicazione dei suoi dati personali a soggetti operanti nei settori editoriale, largo consumo e distribuzione, vendita a distanza, arredamento, telecomunicazioni, farmaceutico, finanziario, assicurativo, automobilistico e ad enti pubblici ed Onlus, per propri utilizzi aventi le medesime finalità di cui al suddetto punto 1) e 2). Per tutte le finalità menzionate è necessario il suo esplicito consenso. Responsabile del trattamento è Sprea Editori S.p.A. via Torino 51 20063 Cernusco SN (MI). I suoi dati saranno resi disponibili alle seguenti categorie di incaricati che li tratteranno per i suddetti fini: addetti al customer service, addetti alle attività di marketing, addetti al confezionamento. L’elenco aggiornato delle società del gruppo Sprea Editori S.p.A., delle altre aziende a cui saranno comunicati i suoi dati e dei responsabili potrà in qualsiasi momento essere richiesto al numero +39 0287168074 “Customer Service”. Lei può in ogni momento e gratuitamente esercitare i diritti previsti dall’articolo 7 del D.Lgs.196/03 – e cioè conoscere quali dei suoi dati vengono trattati, farli integrare, modificare o cancellare per violazione di legge, o opporsi al loro trattamento – scrivendo a Sprea Editori S.p.A. via Torino 51 20063 Cernusco SN (MI). N. CAP Tel. Tagliare lungo la linea tratteggiata ■ PREZZO BLOCCATO: per tutta la durata dell’abbonamento non pagherai un euro in più, anche se il prezzo di copertina dovesse subire aumenti. ■ TUTTI I NUMERI ASSICURATI: se per cause di forza maggiore qualche numero della rivista non venisse stampato, l’abbonamento verrà prolungato fino al raggiungimento dei numeri previsti. ■ RIMBORSO GARANTITO: potrai disdire il tuo abbonamento quando vorrai, con la sicurezza di avere il rimborso dei numeri che non hai ancora ricevuto. Via Località Tutorial Xxxx Filesystem Rendetevi la vita più semplice con ZFS Gestione dischi flessibile Andiamo alla scoperta delle gioie di ZFS. Come creare array RAID, salvare snapshot e ripristinarli, comprimere i dati e condividere i filesystem in rete un sistema più semplice. Ora questo sistema esiste e si chiama ZFS. Sviluppato in origine da Sun per Solaris, ZFS mette insieme in un unico pacchetto RAID e gestione di dischi, volumi e filesystem. Ditegli che dischi avete e come li volete configurati e lui si prenderà in carico tutto il lavoro più faticoso. Dovete semplicemente dirgli di creare i filesystem. ZFS è un classico, anche se non molto comune, esempio di procedure semplificate dal computer. Due programmi gestiscono tutti i componenti separati che riguardano la gestione di dischi e filesystem. Tra questi troviamo la creazione e la gestione di array RAID, la creazione di filesystem e il loro montaggio e smontaggio, l’impostazione di quote, la creazione e il ripristino di snapshot, la compressione dei dati e addirittura la condivisione dei filesystem in rete. Non tutto è perfetto però, perché ZFS non fa parte di nessuna distro Linux, non a causa di una qualche limitazione tecnica, ma per via della licenza scelta da Sun per rilasciare il codice. facile ZFS su Linux Un singolo comando per creare una versione migliorata di un array RAID 5 completo del suo primo filesystem 66 U n po’ di anni fa publicammo un paio di tutorial sull’utilizzo del RAID. Durante la loro realizzazione ci eravamo resi conto del fatto che stavamo facendo apparire complicati i due argomenti e cercammo di semplificare le cose. Per prima cosa bisognava creare i dispositivi RAID, creare i volumi fisici e un gruppo di volumi per essere infine in grado di creare alcuni volumi logici. Ma la cosa non finiva lì, dato che occorreva creare dei filesystem sui volumi. Il ridimensionamento, seppure più semplice di quello delle partizioni fisiche, richiedeva operazioni distinte sul filesystem e sul volume logico: ero sicuro che ci doveva essere Linux pro 136 Due sono le implementazioni di ZFS disponibili su Linux. Una è un modulo FUSE, ma quella che esamineremo in questo tutorial è un vero e proprio modulo del kernel, proveniente dal progetto ZFS on Linux (http://zfsonlinux.org/). È disponibile per un’ampia gamma di distro, anche se il supporto migliore è per Ubuntu e Gentoo (quanto spesso vi capita di sentir menzionare insieme queste due distro?). Ci sono alcuni requisiti per il sistema su cui va installato, in particolare ZFS, a causa della sua forte dipendenza dalla memoria virtuale, funziona in maniera affidabile solo con kernel a 64 bit. Ha anche bisogno di parecchio spazio e non funziona molto bene con un quantitativo ridotto di memoria: il sistema più piccolo su cui l’ho usato aveva 2 GB di RAM. L’installazione su Ubuntu o su uno dei suoi derivati richiede semplicemente di aggiungere il PPA zfs-native (ppa:zfs-native/ stable) alla lista dei sorgenti, seguita dall’installazione del pacchetto ubuntu-zfs. Gentoo usa invece il comando emerge zfs. Dato che ZFS usa moduli che non fanno parte del kernel, se lo ricompilate o lo aggiornate dovete anche ricompilare i moduli ZFS, altrimenti non funzionerà. È lo stesso problema che affligge cose come i driver grafici proprietari di Nvidia. Se la vostra distro usa DKMS, come Ubuntu, questo avverrà automaticamente. Quando un nuovo kernel viene installato nel corso di un normale aggiornamento del sistema, i moduli verranno ricompilati e il filesystem RAM di inizializzazione (initramfs) aggiornato. Se avete installato ZFS dai sorgenti ricordatevi di ricompilarlo prima di avviare un nuovo kernel. Il pacchetto ZFS installa una decina di comandi, ma solo due di essi sono usati di solito, i rimanenti sono strumenti per il test e il debug: confrontateli con la cinquantina di comandi installati da LVM e avrete un’idea della maggiore semplicità di ZFS. I due comandi da usare sono zpool e zfs. Il primo permette di gestire i pool ZFS, cioè dei gruppi di filesystem su un singolo dispositivo, qualcosa di analogo a una combinazione di volumi fisici e gruppi di volumi di LVM. L’altro comando serve invece per la gestione dei filesystem stessi. ZFS Tutorial Entrambi richiedono i privilegi di root, quindi precedete tutti i comandi con sudo se non siete collegati come root. Cominciamo quindi con la creazione di un pool su /dev/sdb1: zpool create primopool sdb1 La sintassi è semplice, il primo argomento è il nome del pool, il secondo il dispositivo da usare. Lo /dev iniziale non è necessario per i dischi, ma se volete usare dei file per le vostre prove dovrete dare il percorso completo. ZFS usa il termine vdev per riferirsi ai vari tipi di dispositivi che possono essere usati per creare un pool. oltre ai nodi di dispositivi e percorsi di file che usiamo in questo tutorial è possibile usare iD di dischi, come compaiono in /dev/disk/by-id. per verificare l’avvenuta creazione del pool bisogna dare il seguente comando: % zpool list nAME SiZE ALLoC FrEE CAp DEDup HEALTH ALTrooT primopool 1,95G 124K 1,95G 0% 1.00x onLinE non solo abbiamo creato il nostro primo pool ZFS, ma su di esso è anche stato montato un filesystem, senza bisogno di usare mkfs.* o il comando di montaggio: è stato fatto tutto automaticamente. % df -Th /primopool File system Tipo Dim. usati Dispon. uso% Montato su primopool zfs 2,0G 0 2,0G 0% /primopool ora potete copiare dei file in /primopool proprio come in qualsiasi altro filesystem. Avere un unico filesystem molto grande non è però particolarmente utile, tanto varrebbe tenere tutto nella directory radice. ZFS ci permette di creare dei volumi all’interno del pool: zfs create primopool/testdir Questo singolo comando crea il volume, gli mette sopra un filesystem e lo monta. ora copiate qualche file in /primopool/testdir e poi digitate % zfs list nAME uSED AVAiL rEFEr MounTpoinT primopool 24,4M 1,90G 31K /primopool primopool/testdir 24,4M 1,90G 24,4M /primopool/testdir notate come l’utilizzo sia lo stesso per il pool e il filesystem di test, dato che c’è un solo filesystem. Proprietà dei filesystem Finora tutto bene, ma montare automaticamente i volumi in base al loro nome non è sempre utile. Se voleste avere /home su un volume ZFS andrebbe a finire nel posto sbagliato. oltre a contenere dati, i filesystem ZFS hanno delle proprietà, che è possibile esaminare con il comando zfs get: zfs get all primopool/testdir Vedrete una lista molto lunga di proprietà che controllano tutti gli aspetti del comportamento del filesystem, ma quello che ci interessa ora è il punto di montaggio. potete modificarlo, così come la maggior parte delle altre proprietà, con il comando zfs set: zfs set mountpoint=/home/test primopool/testdir ora quando ZFS monterà questo volume lo farà sul nuovo punto di montaggio. Tutti i volumi ZFS sono montati per default quando viene lanciato zfs mount -a, cosa che di solito avviene all’interno degli script di avvio del sistema. È possibile avere un volume che non viene montato automaticamente impostando la proprietà canmount a noauto: in questo caso il volume va montato esplicitamente con il comando zfs mount primopool/testdir A differenza dei comandi standard di montaggio, ZFS non richiede che il punto di montaggio esista, ma se esiste deve essere vuoto. in alternativa è possibile impostare la proprietà mountpoint a legacy e stabilire tutto in /etc/fstab alla solita maniera. ambiente di test per provare ZFS, come qualsiasi altro filesystem, occorre formattare qualche partizione di disco, quindi conviene stare alla larga dai dati e dal sistema operativo fino a quando non si è soddisfatti dei risultati. Si possono usare dischi rigidi esterni, probabilmente una chiavetta uSB non è una buona idea, oppure si possono creare dischi rigidi virtuali: dd if=/dev/zero of=/percorso/di/file1 bs=1G count=2 dd if=/dev/zero of=/percorso/di/file2 bs=1G count=2 dd if=/dev/zero of=/percorso/di/file3 bs=1G count=2 Questi comandi creano tre file da 2 GB ciascuno: ce ne vogliono tre per iniziare a fare esperimenti con le opzioni rAiD. Si tratta di una funzionalità di ZFS pensata unicamente per i test, nessuno userebbe dei file come questi per un filesystem di produzione. Ci sono altre proprietà che vale la pena esaminare. Ad esempio, per impostare una quota su un filesystem basta il comando zfs set quota=10G primopool/testdir Le proprietà possono essere impostate anche al momento della creazione del filesystem. inoltre le proprietà che non sono specificate esplicitamente sono ereditate dal genitore. Se create un filesystem per /home con il comando zfs create primopool/home -o mountpoint=/home -o quota=10G tutti i filesystem che creerete per gli utenti con un comando di questo genere zfs create /primopool/home/utente avranno la loro quota da 10 GB. Ecco qua, la semplice creazione di un filesystem con quota per un singolo utente senza bisogno di creare partizioni o volumi logici e senza lanciare mkfs e modificare /etc/fstab. E quando un filesystem non serve più lo si può eliminare e recuperare tutto lo spazio che usava con il comando zfs destroy. ZFS suppone che sappiate quello che state facendo e cancellerà silenziosamente i dati senza fare alcuna domanda. Se non siete sicuri lanciatelo all’inizio con le opzioni -v e -n (verbose e dry run). zfs destroy -vn primopool/home/utente Quando impostate una quota per un filesystem assegnate solamente l’ammontare massimo dello spazio che può essere usato, ma non avete garanzie sulla sua disponibilità. un processo fuori controllo potrebbe ugualmente utilizzare tutto lo spazio in un filesystem senza lasciarne per gli altri utenti. ZFS risolve questo problema per mezzo della proprietà reservation, che consente di mettere da parte lo spazio per quel filesystem. un filesystem può avere una quota, dello spazio riservato o entrambe le cose. Sia la quota che lo spazio riservato possono in questo esempio creiamo un filesystem home con alcune proprietà. Poi creiamo dei nuovi filesystem sotto di esso che ereditano quelle proprietà Linux pro 136 67 Tutorial ZFS licenza È estremamente improbabile che ZFS entri mai a fare parte del kernel Linux. il codice è rilasciato sotto la Common Development and Distribution Licence (CDDL) che, pur essendo una licenza open Source, contiene alcune clausole che sono in conflitto con quelle della GpL. risulta quindi impossibile avere nello stesso file binario codice rilasciato sotto le due diverse licenze. Questo impedisce a ZFS di essere distribuito all’interno del kernel, ma non ne vieta, invece, la sua distribuzione come modulo separato. essere modificati a volontà, compatibilmente con lo spazio disponibile. non c’è da preoccuparsi del ridimensionamento di volumi o filesystem, basta cambiare la proprietà a qualsivoglia valore si desideri. Se serve più spazio per una directory o un filesystem basta aumentarlo. Quando non serve più è sufficiente ridurre la quota. RaiD Una pletora di proprietà, troppe per stare tutte in una schermata. alcune sono informative, altre controllano il comportamento del filesystem; tutte sono descritte nella pagina di manuale di ZFS 68 Abbiamo finora usato un singolo dispositivo per creare il nostro primo pool, ma uno zpool può essere realizzato su un numero qualsiasi di dispositivi in diverse configurazioni. i dispositivi possono essere sia partizioni che interi dischi: ZFS elimina persino la necessità di partizionare i dischi. ovviamente dovrete dividere il disco che contiene /boot o il filesystem radice, ma un disco di soli dati non ha bisogno di partizioni: zpool create nomepool sda sdb Questo comando crea un pool che si estende su due dischi. È qualcosa di analogo all’avere più dispositivi in un gruppo di volumi LVM o al rAiD 0 (che non è un vero e proprio rAiD). La dimensione del pool è pari alla somma delle dimensioni dei dispositivi che ne fanno parte. Ci sono poi le vere e proprie opzioni rAiD: zpool create nomepool mirror sda sdb zpool create nomepool raidz sda sdb sdc il primo comando crea l’equivalente di un array rAiD 1 mentre il secondo crea la variante ZFS di un rAiD 5, senza la penalizzazione nelle prestazioni dovuta al write hole che affligge il rAiD 5 tradizionale. uno snapshot (istantanea in inglese) è una copia in sola lettura di un filesystem al momento della creazione dello snapshot. permette di creare una versione ripristinabile prima di fare modifiche pericolose o addirittura essere usato come strategia di backup a buon mercato per proteggersi dagli errori umani se non dai guasti ai dischi. Consente anche di salvare quei dati che possono cambiare durante il processo di backup, come il contenuto di /var. È possibile creare uno snapshot del filesystem Linux pro 136 che esegue il backup dello snapshot stesso sapendo che non cambierà. per creare uno snapshot si usa il seguente comando: zfs snapshot miopool/miovolume@nomesnapshot il nome dello snapshot, specificato dopo @, può essere qualsiasi cosa. Gli snapshot non occupano spazio su disco quando vengono creati. Man mano che vengono aggiunti nuovi file o ne vengono modificati di vecchi lo spazio usato aumenta, dato che il filesystem deve tenere traccia di vecchie e nuove versioni. L’accesso agli snapshot avviene attraverso la directory nascosta .zfs. Lo snapshot creato qui sopra, ad esempio, supponendo che il punto di montaggio non sia cambiato, si troverà in /miopool/ miovolume/.zfs/snapshot/nomesnapshot. La directory zfs è veramente nascosta, non solo perché il nome comincia con un punto. Anche mostrando i file nascosti o con ls -a o impostando la corrispondente opzione del gestore di file non la si può vedere. Bisogna modificare la proprietà snapdir del filesystem o del pool da hidden a visible. una volta usato uno snapshot può essere rimosso, liberando lo spazio che occupa, con il comando zfs destroy miopool/miovolume@nomesnapshot per rimuovere una serie di snapshot si usa il carattere %: zfs destroy miopool/miovolume@snapshot1%snapshot5 zfs destroy miopool/miovolume@%snapshot5 il primo comando distrugge tutti gli snapshot tra 1 e 5 compresi, il secondo distrugge snapshot5 e tutti i più vecchi. La selezione degli snapshot da cancellare non si basa sui numeri, ma sulle date, quindi dando il comando zfs destroy mypool/myvolume@%giovedi verrà cancellato anche lo snapshot di mercoledì. per vedere l’elenco di tutti gli snapshot si usa il comando zfs list: zfs list zfs list -t snapshot zfs list -t all zfs list -t all -r primopool/testdir il primo comando elenca solo i filesystem, il secondo solo gli snapshot, il terzo entrambi e l’ultimo solo quelli che appartengono al filesystem specificato. Esiste un programma che crea automaticamente snapshot a intervalli regolari e cancella quelli vecchi, chiamato zfs-autosnapshot. È uno script di shell e un certo numero di script di Cron che possono essere scaricati da https://github.com/zfsonlinux/zfs-autosnapshot o dal ppA ubuntu. La creazione automatica di snapshot di filesystem che cambiano frequentemente può richiedere parecchio spazio su disco, quindi conviene configurare alcuni filesystem in modo che non sia possibile creare snapshot automatici, impostando la proprietà com.sun:autosnapshot a false. per ripristinare uno snapshot si usa l’opzione rollback: zfs rollback miopool/miovolume@nomesnapshot È possibile eseguire il rollback solo dello snapshot più recente: il comando dà un messaggio di errore se si prova con snapshot più vecchi. Bisogna prima rimuovere manualmente le copie più recenti di quella che si intende ripristinare oppure usare l’opzione -r. Gli snapshot sono in sola lettura, ma esiste un modo per farne una copia in un filesystem scrivibile, che viene definito un clone. i cloni si basano sugli snapshot, quindi bisogna per prima cosa crearne uno: zfs snapshot primopool/mieidati@oggi zfs clone primopool/miedati@oggi primopool/oggi Come gli snapshot, i cloni non occupano spazio all’inizio, ma lo occupano solo se il filesystem originale o il clone viene modificato. Lo snapshot è necessario, non è possibile distruggerlo se prima non si distrugge il clone. ora è possibile scrivere in primopool/ oggi e primopool/mieidati indipendentemente uno dall’altro. ZFS Tutorial compressione i dischi stanno diventando sempre più grandi, ma anche il numero e le dimensioni dei file che vogliamo tenerci sopra, cosa che rende più necessaria che mai la compressione dei dati. ZFS supporta la compressione trasparente a livello di filesystem. per abilitarla bisogna impostare a yes la proprietà compression del filesystem: il valore di default è no. È anche possibile specificare il metodo di compressione usato impostando la proprietà a lzjb, gzip, zle o lz4. Se si usa gzip è possibile aggiungere un numero che indica il livello di compressione, come spiegato nella pagina di manuale di gzip. LZJB è il metodo di default e permette di ottenere una buona compressione dei dati senza penalizzare in maniera apprezzabile le prestazioni, ma LZ4 è più moderno, più veloce e permette una maggiore compressione. La compressione è trasparente all’utente, ls visualizza la dimensione originale del file e file dà il tipo originale del file, ma df e du mostrano l’uso reale dello spazio. i seguenti comandi mostrano i risultati dopo aver copiato un file di log di 19 MB su un filesystem compresso e su uno non compresso: % df -Th /primopool/normale /primopool/compresso File system Tipo Dim. usati Dispon. uso% Montato su primopool/normale zfs 100M 19M 81M 19% /primopool/normale primopool/compresso zfs 100M 5.0M 95M 5% /primopool/compresso % ls -lh /primopool/compresso totale 4.9M rw-rw---- 1 nelz portage 19M lug 11 15:09 emerge.log Come potete notare, abilitando la compressione si ottiene un sensibile risparmio di spazio su file comprimibili. ovviamente non vedreste nessun miglioramento sulla vostra collezione di foto, ma, tenuto conto del carico aggiuntivo per la Cpu conseguente all’abilitazione della compressione, vale in generale la pena di abilitarla sulla directory home e sicuramente per cose come /var. Se volete vedere quando sia efficace la compressione su un filesystem, esaminate la sua proprietà compressratio: % zfs get compressratio primopool/compresso nAME propErTY VALuE SourCE primopool/compresso compressratio 3.87x L’abilitazione della compressione su un filesystem già in uso non ha effetto sui file esistenti, non si noterà alcun cambiamento, ma i file nuovi e quelli modificati verranno compressi. ZFS è stato creato da Sun, l’azienda il cui mantra era the network is the computer (la rete è il computer), quindi non c’è da sorprendersi quando si scopre che i filesystem ZFS possono essere condivisi in rete. A questo punto vi aspetterete che questo vada impostato come proprietà del filesystem e avete ragione. È ancora necessario avere in esecuzione i demoni di nFS o Samba, ma gli export e gli share sono definiti come proprietà del filesystem. Gli export nFS sono configurati nella proprietà sharenfs, che per default è off. per rendere disponibile sulla rete locale uno share la proprietà va configurata così: zfs set sharenfs=“[email protected]/24” primopool/public Va poi condiviso con uno dei seguenti comandi: zfs share primopool/public zfs share -a È ora possibile usare exportfs o showmount -e localhost per vedere se lo share è disponibile. Lo script di avvio del sistema che monta i filesystem ZFS esporta anche per default tutte le share, quindi il comando zfs share va dato solo al momento della creazione di un nuovo export. La condivisione via SMB/CiFS è analoga: si usa l’opzione sharesmb, che può assumere solo i valori on e off. La condivisione SMB è leggermente più instabile, quindi per ora probabilmente è meglio limitarsi a usare il solito smb.conf. i dati sono importanti, addirittura senza prezzo, quindi bisogna assicurarsi che il filesystem ne prenda cura. ZFS conserva un checksum per ogni blocco del filesystem e ne verifica il contenuto confrontandolo con esso. Questo permette un controllo continuo dei dati, ma è anche possibile verificare un intero pool e riparare gli errori che vengono scoperti. Questa operazione viene detta scrubbing nel gergo ZFS e viene fatta così: zfs scrub primopool Se vi aspettate di vedere sul video una sfilza di informazioni stile fsck resterete sorpresi: il prompt dei comandi ricompare immediatamente. Questo perché ZFS esegue lo scrub del filesystem in background, mentre l’utente continua a usarlo. Lanciando il comando zpool status o zpool status primopool vedrete una riga che indica il procedere dello scrub in corso oppure il risultato dell’ultimo. Si raccomanda di eseguire regolarmente lo scrub dei pool, magari una volta alla settimana con un job di Cron. un altro termine che potreste incontrare è resilver, che suona abbastanza strano. non ha nulla a che fare con l’elettrosmaltatura dei dischi, ma si riferisce alla copia dei dati tra elementi di un array rAiD, come quando un disco viene sostituito. un processo descritto nella documentazione rAiD con il più banale termine di syncing. lXP la distruzione dei filesystem o degli snapshot è veloce e silenziosa. Per questo conviene prima usare le opzioni -ve e -n cifratura Che dire della cifratura? Speravamo che non ce lo chiedeste. Anche se le versioni più recenti di ZFS supportano la cifratura, l’ultima versione rilasciata come open Source non ha questa funzionalità. Abbiamo però a disposizione un paio di opzioni per usare una tecnologia di cifratura esistente con ZFS. possiamo usare dm-crypt, che fa parte del kernel, per cifrare il dispositivo a blocchi prima di aggiungerlo a un pool: è l’opzione migliore nel caso si desideri cifrare l’intero disco. Significa che l’intero pool risulterà crittografato: non è possibile scegliere i filesystem da cifrare. Se invece desiderate avere questa possibilità l’alternativa è usare encryptfs per crittografare le singole directory: è il metodo usato da ubuntu e da altri per cifrare la directory home degli utenti. Linux pro 136 69 Tutorial Xxxx Raspberry Pi Raspberry Pi Raspbian è l’OS ideale per gestire la Pi: ecco come installarlo Installare Raspbian Volete metttere le mani su una Raspberry Pi nel modo più affidabile? Installate un sistema operativo ottimizzato direttamente da Ubuntu! 1 Passo passo Setup dal pinguino Anche da LiveCD Se non avete mai usato Linux prima d’ora, non preoccupatevi. Le versioni recenti di questo sistema hanno la stessa facilità d’uso degli altri sistemi operativi più noti. È facile. Non dovete combattere quasi mai con driver che fanno i capricci e le nuove applicazioni si installano con un programma simile ai vari App Store che sono nati ultimamente. Visto che volete scrivere una versione di Linux (Raspbian) su una scheda SD da usare con la Raspberry Pi, ha senso compiere l’operazione usando un altro sistema Linux. Non è una cosa indispensabile, ma vi permette di dare un’occhiata al nuovo sistema ancor prima di accendere la RP. 2 Vi raccomandiamo Ubuntu Linux, che è l’ideale per i principianti, ma queste istruzioni valgono per qualunque altra distribuzione – rimpiazzate l’Ubuntu Software Center che useremo a breve con il gestore di pacchetti della distro scelta. Il bello è che potete fare tutto direttamente da un LiveCD di Linux, quindi senza installare nulla nel PC e quindi senza correre il rischio di danneggiare i dati presenti sul disco fisso. Vi basta inserire il CD/DVD nel PC e avviare la macchina. Dopo qualche momento scegliete la voce Prova Ubuntu (dopo aver selezionato l’italiano) invece di quella per l’installazione. Presto apparirà il desktop di Ubuntu. Anche senza avere Linux installato, potete usare un LiveCD per usare questo sistema Preparazione Un problema legato all’uso di una distro Live per installare Raspbian è che non riuscirete a scaricare l’immagine del sistema per la RP. In molti casi non c’è abbastanza RAM per scaricare e decomprimere l’immagine, quindi dovrete scaricarla su un supporto esterno (ma non nella SD che vi serve per la RP). Gli utenti con Linux installato non hanno questo problema, visto che possono recuperare l’immagine sul disco e poi decomprimerla senza preoccuparsi della mancanza di spazio. Noi procederemo da una Ubuntu installata, in particolare Ubuntu 12.10 perché useremo un tool 3 Quando inserite un dispositivo USB in Ubuntu, il sistema mostrerà il contenuto di tutte le partizioni presenti ImageWriter State per usare un tool chiamato ImageWriter come front-end grafico per scrivere l’immagine di Raspbian sulla SD. Se come vi abbiamo suggerito prima state usando una versione non recente di Ubuntu, lo potete installare senza sforzi dall’Ubuntu Software Center: lo trovate nella barra sulla sinistra dello schermo, è l’icona con una busta. Inserite “imagewriter” nella casella di ricerca e dovrebbe apparirvi un solo risultato. Fate doppio click su questa voce e nella schermata successiva scoprirete che il tool è disponibile e installabile con un click. Inoltre potete leggere che il tool non 70 non più disponibile dalla 13.04 in poi. Recuperata Ubuntu 12.10 e Raspbian, verificate la scheda SD: inseritela nel lettore di card e dovreste vedere apparire la sua icona nel desktop (o più di una se ci sono più partizioni). Vi ricordiamo ancora che gli eventuali dati presenti nella SD verranno cancellati installando Raspbian, quindi questo è il momento per mettere al sicuro ciò che vi può servire. Linux pro 136 è direttamente supportato da Ubuntu, ma viene sviluppato e aggiornato dalla comunità. Se non lo trovate, dovete attivare il repository Universe in Sorgenti software: trovate questo tool facendo una ricerca nella Dash di Unity. Inserite la vostra password e il programma verrà scaricato e installato. Tutto funziona anche se state usando Ubuntu in modalità Live, perché il pacchetto di ImageWriter è piccolo, diversamente dall’immagine di Raspbian per la RP. Ora, con ImageWriter installato e la scheda SD montata, siete pronti a procedere. ImageWriter è disponibile nelle vecchie versioni di Ubuntu. Dall’URL www.ubuntu.com/download/ desktop potete scaricare la release 12.04 LTS Raspberry Pi Tutorial 4 Scrivete l’immagine Dovete avviare ImageWriter dopo aver collegato il lettore di schede e aver inserito la SD, altrimenti ne lamenterà l’assenza. Quando appare la finestra principale (dopo aver inserito la vostra password di amministratore) dovrete indicare la posizione dell’immagine da scrivere e poi su quale device effettuare la scrittura. Questo secondo dettaglio è molto importante perché se avete più di un dispositivo collegato (come un disco USB o una chiavetta), dovete fare attenzione a scegliere quello corretto. La stessa attenzione la dovete avere con Windows o Mac OS X, ma con Linux almeno avete la certezza che 5 ImageWriter ha bisogno solo di un’immagine da scrivere e di una scheda SD su cui fare l’operazione. Facile, no? simile a quello della partizione root del vostro disco fisso o del LiveCD di Ubuntu, questo perché entrambi i sistemi derivano dalla stessa distribuzione genitrice, Debian. La cartella home, per esempio, contiene la cartella “base” per l’utente, dove si possono memorizzare i file personali. Raspbian è preconfigurata con un unico utente, chiamato pi, ma potete aggiungerne altri con facilità (vedrete apparire le home dei nuovi utenti dentro la cartella home). Quando avete finito, smontate la SD e inseritela nell’alloggiamento della Raspberry Pi. Linux può leggere le partizioni Windows, OS X e Linux, ovviamente la scheda SD. Quello che vedete è uno dei log di sistema e dovete cercare la linea simile a sdb: sdb1. Questo vuol dire che il sistema ha individuato il nuovo dispositivo e gli ha assegnato un nodo nel filesystem (sdb - sdb1 è la prima partizione su sdb). Dovrebbero esserci altre righe, poiché Linux cerca di leggere il filesystem e montarlo. Se viene montato, smontatelo dalla GUI e poi digitate sudo dd bs=1M if=raspbian.img of=/ dev/sdX sostituendo il nome del file immagine con quello del vostro file e sdX con il nodo della vostra scheda SD. Premendo Invio l’immagine verrà scritta sulla scheda. Potete bloccare l’esecuzione di dd premendo Ctrl+C in qualunque momento Provate la SD Diversamente da Windows e OS X, Linux è l’unico sistema operativo che può leggere entrambe le partizioni create sulla SD. La prima è formattata in FAT ed è di circa 60 MB. Questa partizione serve per il boot prima di lasciare il controllo alla seconda partizione. Questa seconda partizione occupa una buona fetta dello spazio rimanente sulla SD (circa 2,7 GB) con il filesystem Linux. Visto che in Ubuntu potete vedere entrambe le partizioni, avete l’occasione di osservare per bene cosa contengono. Quella Linux ha un aspetto 6 ImageWriter non selezionerà per sbaglio il vostro disco fisso. ImageWriter vi mostra anche il nome del dispositivo selezionato, cosa che vi aiuta a scegliere in modo esatto. Quando tutto è pronto, premete il pulsante scrivi a strumento (eh sì, la traduzione è un po’ zoppicante) e aspettate la conclusione dell’operazione. Se non vedete lampeggiare il LED del lettore di schede, ricontrollate che tutto sia stato selezionato nel modo giusto. Nel nostro caso ci sono voluti circa 15 minuti, con la barra di progresso che ci ha tenuto aggiornati sulla situazione. Installazione alternativa C’è un altro metodo per installare Raspbian su una SD e ve lo diciamo nel caso la prima via non sia praticabile. Ma fate attenzione: usando questo metodo potreste cancellare accidentalmente il contenuto del vostro disco fisso, quindi state attenti. Il metodo implica l’uso del comando dd dalla shell. Questo comando accetta in input un file immagine e lo scrive byte per byte su un altro device. Indicate la destinazione sbagliata e sovrascriverete l’hard disk e tutti i vostri file. Per capire qual è il device corretto, per prima cosa staccate la scheda SD e lanciate il Terminale. Ora digitate tail -f /var/log/syslog e inserite Linux pro 136 71 Tutorial Raspberry Pi In caso di problemi nove volte su dieci non vi servirà quanto scritto in queste due pagine, la vostra rp farà semplicemente il boot. Ma se qualcosa va storto… Questo indica che il dispositivo sta ricevendo il giusto quantitativo di corrente; questo LED dovrebbe rimanere acceso fintanto che la scheda rimane alimentata. Anche senza connessione di rete, o se la SD non è inserita nel suo slot, questo LED deve rimanere acceso. Se lampeggia, o si spegne, state alimentando la scheda in modo sbagliato, quindi la prima cosa da fare è controllare il cavo di alimentazione e l’alimentatore. Con la scheda SD inserita, deve lampeggiare il primo LED che segnala la lettura dei dati dalla scheda. Sequenza di boot L a grande differenza tra la raspberry pi e un pC è che la rp non ha un BioS. È il BioS il primo software che vedete quando accendete il computer – quella schermata dal sapore antico piena di testo che vi mostra i dettagli su Cpu, memoria e dischi in un decimo di secondo per poi far sparire tutto. Se c’è un problema con il vostro pC, il BioS spesso può essere usato per risolvere l’intoppo al boot. inoltre questo software integrato nella scheda madre può emettere fastidiosi beep e accendere LED per segnalarvi che qualcosa non va. Ma senza queste facilitazioni offerte dal BioS, la raspberry pi non ha le stesse possibilità; anche se si spera che la scheda faccia il boot senza problemi, prima o poi qualcosa potrebbe accadere. Ed ecco perché dovete leggere queste due pagine, come si dice di solito: prevenire è meglio che curare. Il significato dei LED L’unico elemento che può fornirvi qualche indizio sul funzionamento del computer è l’insieme di LED presenti a fianco del jack audio e delle porte uSB. il modello B della rp ha cinque LED, mentre il modello A solo due, anche se le label stampate rimangono. ∆ LED1 Verde, denominato oK (o ACT): accesso alla SD ∆ LED2 rosso, denominato pWr: i 3,3V sono presenti ∆ LED3 Verde, denominato FDx: LAn Full Duplex connessa ∆ LED4 Verde, denominato LnK: Link/Attività LAn ∆ LED5 Giallo, denominato 10M: 100Mbit (LAn) connessa Visto che il modello A non ha la porta di rete, gli ultimi tre LED sono assenti sul pCB; inoltre se avete le prime revisioni della rp (quelle con solo 256 MB di rAM, per esempio) la denominazione dei LED potrebbe essere leggermente diversa, anche se le funzioni sono identiche. Quando collegate la rp alla corrente, il LED rosso LED2 dovrebbe illuminarsi. 72 Linux pro 136 inizialmente il LED1 lampeggerà, poi farà una pausa e infine tornerà ad accendersi e spegnersi man mano che la rp legge i dati dalla SD. Se ciò non avviene la causa potrebbe essere che il codice di boot non è stato scritto correttamente oppure che per qualche motivo la scheda non è compatibile con la rp. Assicuratevi che la scheda sia inserita correttamente e anche che i connettori della rp siano ben saldi, alcuni hanno lamentato alcuni problemi di questo tipo. È anche possibile capire a quale stadio del processo di boot la rp si è fermata. Di seguito trovate un elenco delle varie sequenze di lampeggi che il LED oK può fare, assieme al loro significato. Abbiamo trovato questo elenco nel forum della rp, controllate voi stessi se avete bisogno perché il significato potrebbe cambiare con il variare della versione del firmware. Vi facciamo notare che avventurarvi nella comprensione del processo di boot non è facile e nonostante possa dimostrarsi divertente, è anche un po’ frustrante. ∆ 3 lampeggi: loader.bin non trovato ∆ 4 lampeggi: loader.bin non avviato ∆ 5 lampeggi: start.elf non trovato ∆ 6 lampeggi: start.elf non avviato un aggiornamento del firmware di fine 2012 ha cambiato il significato di alcuni casi: ∆ 3 lampeggi: start.elf non trovato ∆ 4 lampeggi: start.elf non avviato ∆ 7 lampeggi: kernel.img non trovato È possibile risolvere gli intoppi cercando i file coinvolti e assicurandosi che siano corretti. Date un’occhiata a una cosa chiamata checksum e assicuratevi che questo valore per i file sulla scheda sia uguale a quello dichiarato per i file originali. Comunque più spesso questi errori sono dovuti a una mancata lettura della scheda SD oppure al fatto che il sistema non è stato scritto bene. provate a rifare la procedura di scrittura su una nuova SD con un modo diverso: la nostra guida precedente vi ha mostrato quattro possibili vie per scrivere raspbian su una SD, quindi potete scegliere senza problemi una via alternativa. inoltre, nelle nostre prove, a volte le cose non sono andate per il verso giusto quando abbiamo usato il lettore SD integrato nel pC, pertanto vi consigliamo di usarne uno uSB per scrivere il sistema sulla SD. Raspberry Pi Tutorial Networking Se la vostra Raspberry supera in modo indolore la prima fase del boot, il sistema operativo partirà regolarmente. In questa fase dovreste vedere il primo LED verde rimanere acceso per la maggior parte del tempo, visto che ci sono molti dati da leggere e poco tempo per farlo. La velocità del lampeggio dipende dalle caratteristiche velocistiche della SD che state usando. Subito dopo l’inizio dell’avvio di Linux dovreste vedere lampeggiare anche il quarto LED (LNK) seguito dal LED della rete che si illumina un istante dopo. Questo accade non appena lo stack di rete viene inizializzato e forma un link con la rete Ethernet. Lo stato di questi LED ricalca quello dei LED presenti nelle porte delle schede di rete dei PC e se segnalano problemi è molto facile che ciò sia dovuto alla LAN e non alla RP. Il LED arancione indica una connessione full duplex. Se una connessione era full duplex o solo half duplex è importante quando si parla di networking, perché vuol dire che può essere usata solo una direzione di trasmissione. Questo ovviamente ha un impatto sulla velocità e l’efficienza, ma è raro incappare in un collegamento half duplex oggigiorno. Dovreste sempre vedere questo LED accendersi indicando full duplex, cioè con i dati che possono essere inviati e ricevuti in contemporanea. Tutte le reti moderne funzionano in questo modo. Il LED LNK è l’equivalente di rete del LED ACT per l’accesso alla SD perché lampeggia mentre i dati transitano sul cavo di rete. Se il LED si accende, potete desumere che, almeno a basso livello, il vostro hardware è riuscito a negoziare una connessione con lo switch che gestisce la LAN. Questo però non vuol dire necessariamente che la rete funzioni e che possiate navigare sul Web o controllare le email. È perfettamente possibile notare attività in questo LED man mano che i dati transitano e avere al contempo una RP che non è attiva in LAN. In questi casi dovete ricontrollare bene la configurazione della rete locale, per prima cosa assicurandovi che alla scheda sia stato assegnato un indirizzo IP corretto dal router. Poi controllate il setup di Raspbian: questa distro è capace di configurarsi in molte situazioni, ma potrebbe non essere così se la vostra LAN è un po’ strana – ad esempio se state usando due domini o un paio di router diversi. L’unico modo di risolvere questi problemi è provare la RP nel ramo più semplice della vostra rete e poi lavorare sulla configurazione. L’ultimo LED è usato per indicare la velocità della rete. Se è acceso, allora la RP ha negoziato una velocità di 100Mbps, cioè 1.000.000 di bit di dati al secondo o 100 Megabit, nota anche come connessione Fast Ethernet. Questa situazione è decisamente migliore del caso in cui il LED non si accende. In quel caso la RP sta andando a soli 10Mbps. Purtroppo la Raspberry non supporta le connessioni Gigabit; il motivo è che la porta Ethernet è implementata attraverso il bus USB 2 (che ha una velocità di punta teorica di 480Mbps), quindi c’è un limite nella banda disponibile che impedisce di andare oltre la Fast Ethernet. Comunque la velocità offerta dai 100Mbps è più che sufficiente per il normale uso, considerando che fino a pochi anni fa era la velocità offerta da tutti i device. Potreste incappare in un collo di bottiglia solo nel caso vogliate usare la RP come NAS oppure per fare streaming di filmati in alta risoluzione. In tutti gli altri casi l’uso della connessione di rete non costituirà un limite per voi. LXP I LED lampeggianti sulla RP sono ipnotizzanti, ma sono anche la chiave per risolvere eventuali problemi durante l’uso Linux pro 136 73 Hacker Zone Log di sistema Ricevere avvisi via mail I tool che registrano i log di sistema sono potentissimi programmi di monitoraggio. Vi spieghiamo come filtrare i tanti dati generati e ricevere le cose utili via mail N el vostro computer è in esecuzione continua, zitto zitto, in background, un programma chiamato system logger, o syslog. Questo software raccoglie informazioni da tutti gli altri programmi che stanno girando nella vostra Linux box – esso conosce il vostro sistema meglio di Google o Facebook. Le applicazioni devono comunicare con le persone. Un programma interattivo dotato di interfaccia grafica può far apparire una finestra per dire “Qualcosa è andato storto” o “Lavoro finito”, ma un’applicazione che gira in background non può farlo. Ogni software può includere una parte di codice che si occupa di creare un log da qualche parte, ma questo vorrebbe dire ritrovarsi file di log sparsi un po’ ovunque oppure dare a tutti i tool i privilegi di root affinché possano scrivere in una stessa cartella. Il demone syslog vi viene in soccorso in questo caso: un’applicazione invia i suoi messaggi a syslog, quindi il programmatore non deve scrivere del codice ad hoc per scrivere i log, ed è syslog che si occupa di scriverli nel file corretto, quindi solo esso deve avere privilegi più elevati. Questo vuol dire anche che potete raccogliere i messaggi di tutti i programmi in un unico file senza che si generino conflitti dovuti all’accesso simultaneo al file da parte di software diversi. Fa tutto syslog. Come capita molto spesso in GNU/Linux, non c’è un solo logger di sistema, bensì ne esistono diversi, ognuno con dei pro e dei contro. Tutti, però, offrono la stessa interfaccia verso il sistema, risultando in qualche modo intercambiabili. La differenza principale che noterete è nella posizione del file di log creato, che vive sempre in /var/log ma può essere chiamato in modi diversi (per esempio messages, current o syslog) a seconda del demone di syslog installato dalla vostra distro. I tool di log più gettonati sono syslog-ng, rsyslog e metalog. Negli esempi seguenti useremo il file /var/log/messages, ma voi sostituitelo con quello usato dal vostro logger. In tutti i casi il formato del log è sempre lo stesso, con una voce per ogni linea; ecco un esempio tipico: Nov 29 15:34:34 hactar sudo: nelz : TTY=pts/2 ; PWD=/ home/nelz ; USER=root ; COMMAND=/sbin/fdisk /dev/sda I primi due elementi sono ovvi, la data e l’ora. Poi c’è l’hostname. I logger di sistema possono inviare messaggi a un altro computer, in questi casi la presenza dell’hostname assume fondamentale importanza. L’elemento successivo indica il programma che sta scrivendo la riga di log in esame, in questo caso sudo, mentre la parte restante è il messaggio salvato da sudo; nell’esempio ci dice chi ha eseguito cosa nel sistema. Ogni log ha una coda Logwatch vi fornisce un pratico report di ciò che è accaduto nel PC nell’ultima giornata 74 Linux pro 136 Quindi avete questo file che risiede in /var/log e contiene tutta una serie di informazioni sul vostro sistema, ma come potete usarlo? Esistono due impieghi principali: uno come strumento diagnostico per capire cosa è andato storto quando vi accorgete che il sistema non funziona come dovrebbe. Il secondo, ed è qui l’aspetto più “hacker” della storia, è come tool per monitorare attività sospette, come tentativi ripetuti di login remoto senza successo provenienti dallo stesso indirizzo IP. L’esempio più semplice del primo caso è la lettura del file di log con un pager come less o la ricerca nel file con grep. Se conoscete il nome del programma “imbizzarrito”, trovare le linee corrispondenti è facile. Log di sistema Hacker Zone Potete anche usare tail per esaminare il log in modo interattivo: tail -f /var/log/messages Vedrete le ultime 10 linee del log e poi ogni nuovo messaggio che si va ad aggiungere in coda. Se eseguite questo comando prima di compiere una qualche operazione, potrete tenere sotto controllo quanto sta accadendo. Per esempio, inserite una chiave USB e vedrete qualcosa del genere: Nov 30 09:24:34 hactar kernel: [15796.301313] sd 7:0:0:0: [sdb] Attached SCSI removable disk Nov 30 09:24:35 hactar udisksd[1890]: Mounted /dev/sdb1 at /media/ninjak/0C90-0006 on behalf of uid 1000 Come vedete il kernel ha inviato un messaggio e potete vedere il device associato alla chiave USB, un particolare da guardare bene se dovete scriverci qualcosa con dd! La lettura di un log è qualcosa da fare quando si deve risolvere un problema, non è un passatempo, ma ci possono essere dei messaggi importanti che vengono scritti mentre non state guardando. Ci sono dei programmi, però, che vi possono dare un supporto, uno di questi è logwatch (www.logwatch.org). Questo tool legge il log di sistema una volta al giorno e vi invia per email un report su qualunque attività sospetta. Il file di configurazione di default si trova in /usr/share/logwatch/default.conf/logwatch.conf ma non cercate di modificarlo, visto che verrebbe sovrascritto al prossimo aggiornamento. Dovete mettere le vostre impostazioni in /etc/logwatch/conf/logwatch.conf, che ha precedenza sul file di configurazione di default. Potete creare il file da zero ma conviene copiare quello di default e poi personalizzarlo secondo le vostre esigenze. Quantomeno dovete impostare il campo MailTo con il vostro indirizzo email per l’invio del report e magari definire anche MailFrom per individuare al volo la mail. Potete aggiungere anche Format = html se volete ricevere un report ben formattato in HTML invece che in semplice testo. Logwatch & Logcheck Altre impostazioni chiave sono: Detail che precisa il livello di informazione incluso nella mail; Range, il periodo coperto da ogni mail; Service, che seleziona le particolari scansioni da eseguire. Il valore di default per quest’ultima voce si spiega da sola: All, ma potete anche rimuovere dei servizi da questo controllo con Service = -foo per rimuovere il servizio foo. I servizi sono definiti in usr/ share/logwatch/scripts/services, con uno script per ogni servizio che contiene una descrizione. Essi sono configurati con i corrispondenti file in /usr/share/logwatch/default. conf/services. Come con il file di configurazione principale, ognuno di essi può essere copiato nella directory equivalente dentro /etc/logwatch e da qui può essere modificato. In particolare, potete cambiare il livello di dettaglio per ogni servizio per avere più o meno informazioni nel report. Logwatch vi fornisce una comoda panoramica sulle attività quotidiane. Noi lo troviamo molto utile per individuare attacchi SSH, ma potreste volere qualcosa di più immediato. Per questo è possibile ricorrere a logcheck (http:// packages.debian.org/sid/logcheck). Questa è una pagina di Debian, ma il programma è disponibile per la maggior parte delle distro. Funziona in modo simile a Logwatch ma è progettato per essere eseguito più di frequente; la configurazione standard prevede l’esecuzione ogni ora. I suoi report sono meno dettagliati rispetto a quelli di Logwatch, ma fornisce comunque un’ottima vista su quanto accade nella Linux box. A ogni report logcheck tiene traccia del punto in cui si è fermato e da lì riprende per il report seguente. Dopo aver installato logcheck potete agire su due file di configurazione. In /etc/logcheck/logcheck.conf potete impostare REPORTLEVEL a Workstation, Server o Paranoid. Il secondo valore è quello di default, ma potete usare Workstation per un normale sistema desktop. SENDMAIL è ovvio, ma deve essere impostato, mentre definendo SYSLOGSUMMARY a 1 potete ottenere un riassunto degli eventi registrati nel log piuttosto che una lista grezza (affinché ciò funzioni dovete installare il pacchetto extra syslog-summary). L’altro file è /etc/logcheck/ logcheck.logfiles, che contiene una lista dei file da controllare – per syslog-ng questo è semplicemente /var/ log/messages. Ora ricevere ogni ora una mail con le nuove voci presenti nel file di log di sistema. Forse troverete queste mail un po’ troppo prolisse; c’è un elenco di messaggi da ignorare ma non è molto esteso. Sicuramente vorrete aggiungere qualche voce a questo elenco, specialmente se avete dei task Cron che entrano in funzione di frequente. Se guardate in /etc/logcheck/ignore.d.workstation (o server se usate questo profilo) potete vedere i file contenenti le espressioni regolari da ignorare. Non modificate questi file ma piuttosto createne uno nuovo, per esempio chiamato local. Ogni sua linea è un’espressione regolare il cui risultato è da ignorare; per fare un esempio, se non volete che venga registrato il precedente inserimento della chiave USB nel PC, Nov 30 09:24:34 hactar kernel: [15796.301313] sd 7:0:0:0: [sdb] Attached SCSI removable disk potete usare questa espressione regolare: ^\w{3} [ :0-9]{11} [._[:alnum:]-]+ kernel: sd .* Attached SCSI removable .* Può apparire un po’ arcana, ma segue il formato delle regole esistenti. La prima parte identifica ora, data e nome dell’host, poi cerca “kernel” seguito da una stringa che contiene “Attached SCSI removable”. Dovete cercare di creare espressioni regolari il più precise possibile per evitare dei falsi positivi. Potete verificare la bonta di una espressione con egrep: egrep -f /etc/logcheck/ignore.d.workstation/local /var/log/ messages Questo comando vi mostrerà tutte le linee che corrispondono a quanto indicato nell’espressione regolare e che non volete appaiano nei report di logcheck. LXP Logcheck vi offre un report orario su quanto avviene nel computer, ma dovete modificare la sua configurazione per non essere sommersi dai messaggi Linux pro 136 75 Concetti Hai qualche linguaggio da suggerirci? Scrivici a [email protected] Ritorno alle basi: organizzazione dei dati Lo staff di Linux Pro vi mostrerà come utilizzare SQL e un database relazionale per strutturare la vostra collezione di musica rock anni 70 N el numero scorso abbiamo parlato di come rendere persistenti i dati utilizzati all’interno di un programma Python. La tecnica utilizzata era molto basilare, e per quanto utile possa essere, non è sicuramente la migliore per gestire una grande mole di dati. Quando la vostra applicazione cresce, le prestazioni diventano sempre più importanti e potrebbe nascere la necessità di instaurare delle relazioni tra i vari dati; a questo punto diventa obbligatorio utilizzare altre tecnologie, come un database a oggetti oppure un database relazionale. Dato che i database relazionali sono lo strumento più utilizzato per gestire la complessità dei dati, in questo tutorial parleremo di questo e andremo a illustrarvi il linguaggio utilizzato per gestire i database relazionali (che viene chiamato SQL, Structured Query Language). una volta apprese le basi, potrete iniziare a integrare i database relazionali nel vostro codice. Prima di cominciare assicuratevi di avere MySQL installato e di avere accesso alla sua console: mysql -uroot Se avete impostato una password utilizzate lo switch -p per inserire i dati di login. Con MySQL pronto possiamo iniziare a lavorare sul database per gestire la nostra collezione di musica. Relazioni Iniziamo pensando a quali informazioni vogliamo inserire nella nostra collezione. Potremmo iniziare pensando in termini di CD che possediamo. Ogni CD è un singolo album, ogni album contiene diverse informazioni, o attributi, come l’artista a cui appartiene, e le tracce presenti in esso. Potremmo inserire tutti i dati in un’unica tabella, come quella qui sotto: funziona, ma contiene molti dati superflui. Per ogni traccia dello stesso album, ci ritroviamo molte informazioni duplicate come la durata dell’album, il suo nome, l’anno di pubblicazione e tutte le informazioni legate all’artista, il suo nome e l’anno di fine carriera. Questo approccio, oltre a essere molto ripetitivo e occupare molto più spazio del dovuto, rende la ricerca tra le informazioni molto lenta, difficile da interpretare e complica moltissimo la modifica dei dati. I database relazionali risolvono questi Dati duplicati 76 Album Free At Last Free At Last Artista Free Free Traccia Little Bit of Love Travellin’ Man Durata 2:34 3:23 Durata album 65:58 65:58 Anno 1972 1972 Fine carriera 1973 1973 LINux PrO 136 Database relazionale Album Free At Last Durata 65:58 Anno 1972 Id_Artista 1 problemi permettendo di suddividere i dati e salvarli in un formato molto più utile ed efficiente. Ci permettono di identificare entità separate all’interno del database che vengono salvate in tabelle differenti. Nel nostro esempio, potremmo dividere le informazioni relative all’album, all’artista e alle tracce in tabelle separate. A questo punto potremo avere un singolo dato per l’artista Free (che contiene il nome e l’anno di fine carriera), un singolo dato per l’album Free At Last (che contiene il nome, l’anno di pubblicazione e la durata), e un singolo dato per ogni traccia (che contiene tutti i dati legati alla traccia) ognuno nella propria tabella. Tutti i dati duplicati sono spariti, ma ora sono separati su diverse tabelle, cosa succede se vogliamo mostrare tutte le informazioni di una singola traccia, incluso l’artista che l’ha prodotta e l’album a cui appartiene? Qui è dove la parte “relazionale” entra in gioco. Ogni riga all’interno di una tabella deve essere in qualche modo identificabile, e per questo deve avere una colonna che contenga dati unici (per esempio se il nome dell’artista è univoco o il titolo dell’album), oppure una combinazione di colonne (per esempio il nome dell’album e l’anno di produzione). Queste colonne univoche sono chiamate chiave primaria. Siccome una chiave primaria naturale (una o più colonne che abbiamo la certezza conterranno sempre dati diversi) non esiste normalmente in una tabella, potete aggiungerne una artificiale, un ID che si incrementi in automatico. Possiamo quindi aggiungere una colonna supplementare a tutte le nostre tabelle che funga da chiave primaria. Per esempio, consideriamo la tabella qui sopra. Invece di inserire tutte le informazioni relative all’artista nella tabella, abbiamo semplicemente specificato l’ID unico di una riga di un’altra tabella, chiamata probabilmente Artista. Quando vogliamo mostrare le informazioni di questo album a un utente, possiamo prendere le informazioni relative all’artista direttamente dalla tabella corrispondente, recuperando dalla tabella i dati relativi all’artista con ID 1 e visualizzarli insieme ai dati dell’album. SQL Quanto detto finora è, molto semplicisticamente, il funzionamento di un database relazionale. Suddividere le informazioni in pezzi riutilizzabili, e gestibili, e manipolare le relazioni che intercorrono Concetti tra i vari pezzi. Per creare le tabelle sul database, gestire le relazioni, inserire i dati e interrogarli, molti database relazionali utilizzano SQL, e ora che sapete cos’è una tabella e cos’è una relazione, possiamo mostrarvi come crearle e utilizzarle in SQL. Dopo aver effettuato il login nella console MySQL la prima cosa che dobbiamo fare è creare un database. Il database è il contenitore di tutti i dati, per questo dobbiamo crearlo prima di fare qualsiasi cosa. Per farlo è sufficiente utilizzare lo statement create database: create database musicalxp; Da notare il punto e virgola alla fine dell’istruzione: tutte le istruzioni SQL devono terminare con un punto e virgola. Nell’esempio abbiamo utilizzato tutte lettere minuscole ma SQL non è case sensitive quindi potete utilizzare maiuscole o minuscole a vostro piacimento. Ora che abbiamo un database, dobbiamo accederci. In MySQL la maggior parte dei comandi è relativa al database selezionato, un po’ come funziona con le cartelle nella console Linux. Potete cambiare database utilizzando il comando use: use musicalxp; Ora creiamo alcune tabelle: create table Album ( Id_Album int auto_increment primary key, nome varchar(100) ); create table Traccia ( Id_Traccia int auto_increment primary key, titolo varchar(100), durata int, Id_Album int ); La cosa più ovvia da notare è che abbiamo eseguito due comandi, separati da punto e virgola, e che abbiamo suddiviso i due comandi su più righe. A SQL non interessano gli spazi bianchi, quindi potete suddividere il vostro codice come preferite, fintanto che utilizzate la punteggiatura giusta nei posti giusti. Per quanto riguarda il comando in sé potete notare che assomiglia molto allo statement create database. Abbiamo specificato l’azione che vogliamo compiere, il tipo di oggetto su cui vogliamo operare e le proprietà dell’oggetto. Quando abbiamo utilizzato create database, l’unica proprietà che abbiamo aggiunto era il nome del database; con create table invece, abbiamo aggiunto anche diverse proprietà aggiuntive all’interno di parentesi e separate da virgola. Queste proprietà sono conosciute come definizioni di colonne, e ogni dato separato da virgola descrive una colonna. Per prima cosa diamo un nome alla colonna, descriviamo poi quale tipo di dato andrà a contenere (questa parte è necessaria in quasi tutti i database) e poi definiamo eventuali altre proprietà aggiuntive della colonna, per esempio se è parte della chiave primaria. La keyword auto_increment fa sì che non ci si debba preoccupare del valore di Id_Traccia quando si inseriscono i dati, in quanto MySQL si occuperà di inserirci all’interno un valore intero che si incrementa a ogni nuova riga inserita nella tabella, creando una chiave primaria. Potete trovare molto altro relativamente all’istruzione create table all’indirizzo http://dev. mysql.com/doc/refman/5.7/en/create-table.html (in inglese). Inserimenti e interrogazioni Inserire un dato all’interno di una tabella è molto semplice: insert into Album (nome) values (“Free at Last”); Ancora una volta, abbiamo specificato l’azione e l’oggetto MariaDB è un valido rimpiazzo per MySQL e sta rapidamente conquistando consensi in diverse distribuzioni incluse Mageia, OpenSUSE e perfino Slackware poi abbiamo aggiunto le colonne nelle quali volevamo inserire un valore e infine i valori. Prima di poter inserire un dato nella tabella Traccia, comunque, dobbiamo scoprire qual è l’ID dell’album Free At Last, altrimenti non saremo in grado di collegare i due dati. Per fare ciò, dobbiamo utilizzare lo statement select per interrogare il database (l’interrogazione al database viene comunemente chiamata “query”): select * from Album where nome = “Free At Last”; Questo comando dice che vogliamo vedere tutte le colonne di tutte le righe della tabella Album il cui campo nome corrisponde a Free At Last. In realtà si spiega da solo. Se avessimo voluto avere soltanto l’ID, sarebbe stato sufficiente sostituire l’asterisco con Id_Album e la query ci avrebbe mostrato soltanto quella colonna. Siccome a noi ha restituito il valore 1 (essendo il primo inserimento nel database), possiamo inserire una traccia in questo modo: insert into Traccia (titolo, durata, Id_Album) values (‘Little Bit of Love’, 154, 1); La cosa più importante da notare è che abbiamo specificato la durata in secondi e salvata come integer. In molti database è necessario specificare il tipo di dati che la colonna contiene, e alcune volte questo significa che dovete salvare sul database i dati in un formato diverso da quello che utilizzerete per visualizzarli nella vostra applicazione. Sarà quindi necessario scrivere un po’ di codice per convertirli prima di poterli mostrare. MySQL offre una vasta gamma di tipi di dati quindi la maggior parte delle eventualità è contemplata. Questo è tutto ciò che lo spazio a nostra disposizione ci consente di trattare per questo mese, ma non lasciate che la vostra conoscenza di MySQL si fermi qui. Ora che avete visto le basi, potreste approfondire la conoscenza delle chiavi esterne e dei join, due tecniche un po’ più avanzate che vi permetteranno di esprimervi molto più creativamente con SQL. Potreste approfondire anche le differenze tra i vari tipi di relazioni, uno-a-uno, uno-a-molti, molti-a-uno e molti-amolti. Se infine volete integrare MySQL al vostro linguaggio di programmazione, potete cercare un modulo che vi permetta di farlo, come python-mysql per Python. LXP Linux pro 136 77 C++ PartE 2 C++11: puntatori smart Eccovi altri interessanti consigli sul C++, questa volta sfruttando l’ultima versione disponibile del linguaggio di programmazione: C++11 I n questo tutorial affronterete altri aspetti di C++. In particolare vedrete i puntatori e il loro uso; imparerete qualcosa in più sull’ereditarietà e qualcos’altro sui fondamentali del linguaggio. Inoltre lavorerete con la versione attuale di C++, C++11 (del quale il padre di C++, Bjarne Stroustrup, disse “…C++11 sembra un linguaggio totalmente nuovo…”). Ritroverete anche alcune particolarità legate all’ereditarietà introdotte nella scorsa puntata. Tutti gli esempi sfrutteranno le classi Shape e Circle già definite. Puntatori e puntatori smart C++ è, in pratica, un’estensione di C. Questo linguaggio supporta i puntatori tipizzati e le espressioni dei puntatori. Un puntatore (“pointer”) è semplicemente una variabile che può registrare l’indirizzo di un’altra variabile in memoria, nel qual caso si dice che il puntatore “punta” alla variabile. Un puntatore può puntare potenzialmente a qualsiasi cosa del tipo definito. Per esempio, un puntatore a int può registrare l’indirizzo di un qualsiasi intero, ma non di altri tipi di dato. Così per tutti gli altri tipi di puntatori. Essi sono utilizzati per varie ragioni: offrono una metafora comoda e pratica con un bonus nascosto, il valore 0 indicante che il puntatore non punta a nulla. L’uso dei puntatori è potenzialmente più efficiente delle alternative in alcuni casi, e in altri è richiesto, per esempio, per gestire gli indirizzi della memoria allocata dinamicamente. Tali puntatori “grezzi” sono un mezzo molto potente e altrettanto pericoloso. Errori anche minimi nei puntatori possono portare a bug seri e talvolta difficili da trovare. Per questo, C++ li completa con alcuni cosiddetti “puntatori smart”, ognuno con un ventaglio di scorciatoie per cui, alla fine, possono essere più semplici e sicuri da usare di quelli “grezzi”. Così come quelli offerti dalla C++ Standard Library, un utente può potenzialmente scrivere il proprio puntatore smart per i propri scopi. I puntatori base sono definiti con la seguente sintassi: int *p_int // definisce un puntatore (variabile) Shape Shape oppure int *p_int(0); // o int *p_int = 0; // definisce e inizializza p_int = &i; // imposta p_int perché punti a i *p_int // utilizza il valore dell’intero al quale p_int sta attualmente puntando Puntatori a costanti Potete avere puntatori a valori di sola lettura, per esempio const. È importante notare, comunque, che una dichiarazione o definizione della forma const char *p; (che definisce p come puntatore che il compilatore controllerà) è utilizzata solo per la lettura del dato puntato. In altre parole al puntatore p è negato l’accesso in scrittura dell’oggetto al quale punta (in questo caso il target di p è un char, o un array di char, se avesse valore 0 non punterebbe a nulla). Nel codice che usa p il puntatore stesso non è const: può essere cambiato, ma la cosa a cui punta (un char o array di char in questo caso) non può essere modificata attraverso di esso. Per oggetti di una classe MyClass con un puntatore definito così MyClass my_obj; MyClass *p = &my_obj; // definisce un puntatore p che punta ad un oggetto pre-esistente (my_obj) del tipo MyClass i membri possono essere letti p->m // valuta il membro m dell’oggetto my_obj referenziato dal puntatore Dal momento che i data member di una classe sono tipicamente privati e le member function pubbliche, la convenzione è p->mf(); // invoca la member function mf dell’oggetto referenziato da p Puntatori e array Fig.1 L’oggetto base e il derivato in memoria. Un oggetto Circle ha tutti i data member della classe Circle, più quelli della classe Shape (per ereditarietà), memorizzati come mostrato 78 Linux pro 136 Circle Gli array e i puntatori sono legati a doppio filo. Il nome di un array viene trattato come un puntatore costante all’inizio dei suoi elementi: cioè l’array viene memorizzato da qualche parte nella memoria e il suo indirizzo viene riportato nel puntatore. Il compilatore tratta il nome dell’array, perlopiù, come il suo indirizzo. Una copia di questo valore può essere cambiata, e l’elemento dell’array può essere modificato C++ a runtime, ma la variabile (nome) con la quale l’array è definito avrà un valore fisso corrispondente all’indirizzo dell’array in memoria. I nomi di array sono dunque trattati come puntatori costanti. Viceversa, i puntatori possono essere trattati come se fossero nomi di array allo scopo di indirizzare elementi di array. è quindi possibile scrivere una definizione di questo tipo, per esempio: int a[10]; // a è un array di 10 int oppure MyClass a[10]; // a è un array di 10 istanze di MyClass Puntatori come parametri di funzioni I puntatori possono essere passati come parametri alle funzioni, con l’ovvia sintassi, definendole per esempio così: void foo(int *p); oppure void foo(const int *p); Nel secondo esempio la chiave const si applica alla referenza del puntatore: è possibile modificare il valore di p all’interno della funzione, ma il compilatore non permetterà a p di cambiare la propria referenza in modo diretto. Incidentalmente, dal momento che i nomi di array sono perlopiù trattati come puntatori all’inizio (elemento 0) dell’array, gli array stessi possono essere passati come argomenti a funzioni che ammettano un puntatore del tipo appropriato. Per esempio, dato MyClass arr[7]; e void foo(MyClass *pmc); la funzione foo() può essere chiamata semplicemente così: foo(arr); // arr è un puntatore all’inizio di arr I puntatori possono essere altresì ritornati dalle funzioni, così: int *bar(); // bar() ritorna un puntatore a int Puntatori smart ed ereditarietà Base Derivata Fig.2 Una generalizzazione dell’esempio in Fig.1 La Fig.1 vi mostra quello che ci si potrebbe aspettare in memoria per un oggetto Shape e un oggetto Circle. Ci si aspetta che ognuno abbia poco o niente più dei data member dell’oggetto stesso. Perciò un oggetto Circle ci si aspetta abbia il data member radius, r, adiacente a quelli della classe base (Shape), ovvero le coordinate x e y. La Fig.2 mostra la stessa cosa generalizzata, per oggetti base e derivati. La Fig.3, nella pagina successiva, mostra come un puntatore a classe base possa puntare alla parte base dell’oggetto derivato. Puntatori e referenze In molti casi la scelta tra l’uso dei tipi di puntatori e referenze è questione di gusti o convenzione. Una differenza semantica importante, tuttavia, è che mentre una referenza deve referenziare qualcosa (un oggetto che è contenuto nella sua definizione), un puntatore può puntare a nulla. Una funzione che accetta un parametro per referenza avrà l’oggetto corrispondente disponibile all’interno della sua definizione; se il parametro fosse passato come puntatore sarebbe necessario controllare se il suo valore è diverso da 0. Viceversa, una funzione find(), per esempio, potrebbe ritornare un valore puntatore indicante dove l’oggetto è stato trovato, se lo è stato; un valore di 0 indicherebbe che l’oggetto non è stato trovato per nulla. Questa tecnica non sarebbe disponibile se il tipo di ritorno fosse una referenza, dal momento che quest’ultima deve necessariamente referenziare un oggetto. “Normalmente i puntatori possono puntare solo a membri del loro tipo” I puntatori smart sono oggetti di classi disegnati per fare qualsiasi cosa specifichiate possano fare, quando sono usati con le sintassi mostrate sopra. Cioè, possono essere inizializzati per referenziare indirizzi specifici (tipicamente valori) quando impiegati con l’operatore * e per accedere a membri quando usati con l’operatore ->. Per i puntatori smart, queste operazioni sono definite come funzioni. Nel contesto dell’ereditarietà, un oggetto derivato è trattato come ‘un tipo di’ (a kind of, AKO) oggetto del suo tipo base (seppure, come avete visto, con possibili variazioni o estensioni della versione base). In questo modo, un puntatore al tipo base può puntare a un oggetto di qualsiasi tipo derivato da tale classe (normalmente i puntatori possono puntare solo a oggetti del loro tipo; questo comportamento rispetto ai derivati è consistente: gli oggetti dei tipi derivati sono considerati AKO delle loro basi). Questo comportamento può essere spiegato anche in termini di layout della base e derivato in memoria. Considerate le classi Shape e Circle definite nella prima parte del tutorial, con Circle pubblicamente derivato da Shape aggiungendo un data member per il raggio, il proprio costruttore e la propria implementazione di draw(). I puntatori nel C++ moderno Con l’ampia disponibilità dei puntatori smart e dei componenti standard che gestiscono i dettagli di allocazione e deallocazione dinamica della propria memoria, l’uso dei puntatori base è diventato sempre meno necessario. Per esempio i contenitori standard, come i vettori, possono Linux pro 136 79 C++ essere espansi dinamicamente per registrare elementi mano a mano che vengono aggiunti, e i distruttori gestiscono la deallocazione. Vantaggi per l’embedded I puntatori possono essere usati esplicitamente in codice di basso livello e con necessità di altissime performance, dove il piccolo overhead e la perdita di flessibilità dei puntatori smart non sono più accettabili. Nella maggior parte delle applicazioni però ci si può affidare alla sicurezza e convenienza dei puntatori smart, disegnati comunque per essere efficienti e flessibili. Quando gli oggetti sono creati dinamicamente con new viene restituito l’indirizzo al quale sono stati allocati. Le espressioni dei puntatori appaiono quando l’operatore new è usato in questo modo, e normalmente devono essere salvate; possono offrire, piuttosto, valori per argomenti utilizzati immediatamente (per esempio per creare un puntatore smart) oppure essere registrate in un puntatore grezzo e riusate nel codice dell’applicazione. I puntatori e/o le espressioni di puntatori sono necessari anche nell’uso di codice legacy (per esempio C) che presenti un tipo di puntatore nell’interfaccia. Possono anche essere usati in C++, a seconda dei gusti; la tendenza generale è tuttavia, come già detto, di usarli sempre meno a livello dell’applicazione. Base Base Derivata Puntatore a classe base Fig.3 Un puntatore alla classe base può puntare a un oggetto del tipo della classe base o (alla parte base di) un oggetto del tipo di una qualsiasi classe derivata dalla base Funzioni membro Dato un oggetto avete visto che potete invocarne una funzione membro con la sintassi obj.mf(); // mf() è una member function della classe obj Potete avere diverse classi nel vostro sistema con una member function chiamata mf. Il compilatore si occuperà di recuperare quella appropriata per l’oggetto (obj) interessato nella chiamata; la effettuerà, in altre parole, in base al tipo di oggetto. Ereditarietà con funzioni non virtuali Tip Ogni directory degli esempi di codice contiene un file Readme. Leggetelo per istruzioni sulla compilazione! 80 “Potete avere diverse classi nel sistema con una funzione membro chiamata mf” In casi dove si abbiano classi relazionate tramite ereditarietà, le regole di cui sopra si applicano comunque. In particolare, se la dichiarazione di una data funzione è definita a diversi livelli di un albero di ereditarietà (o rete), allora: base_obj.mf(); // chiama mf() di Base derived_obj.mf(); // chiama mf() di Derived Se la classe Derived non definisce mf() allora verrà chiamata la funzione della classe più vicina da cui eredita che implementa tale funzione. In modo simile, se invocate una funzione come: derived_obj.ClasseParent::mf(); non verrà richiesto che mf() sia effettivamente implementata da ClasseParent, che potrebbe semplicemente ereditare la definizione a sua volta. Il compilatore utilizzerà la funzione implementata dalla classe chiamata o dalla più vicina che la definisce; se non ne vengono trovate (per esempio non è definita nemmeno nella Base) scatenerà un errore di compilazione. Se utilizzate puntatori a oggetti, allo stesso modo la funzione invocata sarà in base al tipo di puntatore (e non al tipo dell’oggetto puntato). Per esempio, un puntatore Linux pro 136 a Shape (Shape *) è pensato per puntare a un oggetto di tipo Shape; può però puntare a oggetti derivati come Circle. Quando viene invocata una funzione tramite puntatore, tale funzione sarà quella della classe del tipo definito dal puntatore. Quindi anche se il vostro Shape* punta a un Circle, quando invocate draw() con tale puntatore verrà chiamato il metodo di Shape: Shape shp … // crea gli oggetti Cicle c … // con gli argomenti richiesti Shape *sp(&shp); Circle *cp(&c); sp->draw(); // chiama draw() di Shape cp->draw(); // chiama draw() di Circle // ma con sp = cp; // ora sp punta ad un Circle sp->draw(); // chiama draw() di Shape Questo comportamento della selezione delle funzioni in base al tipo è dimostrato nel primo passo del box della pagina successiva. Ereditarietà con le funzioni virtuali Spesso, comunque, il suddetto comportamento non è quello desiderato. Quello che volete è invocare la funzione rilevante per il tipo di oggetto. In casi come quello dell’esempio, dove state iterando con un puntatore a classe base, vorreste che C++ la funzione fosse scelta in base al tipo dell’oggetto puntato, non del puntatore. in maniera simile, potreste avere una funzione che accetta un parametro di una classe base. Se lo passaste per valore avreste l’oggetto classe base all’interno della funzione, malgrado gli passiate un qualsiasi derivato. Se passate l’argomento per puntatore, o riferimento, al tipo base, e le funzioni rilevanti sono virtuali, allora le funzioni da chiamare sono determinate in base al tipo dell’oggetto puntato o riferito. Questo è mostrato nel passo 2 del box in questa pagina. Override in azione in conclusione, quando una funzione è ridefinita a vari livelli (prevalenza o override) in una gerarchia di ereditarietà, la funzione rilevante può essere chiamata in base al tipo di oggetto, ammesso che la funzione sia dichiarata come virtuale nella classe base. Questo si applica in due scenari comuni: avete una collezione eterogenea di oggetti su cui iterare con un puntatore a classe base, e volete chiamare la versione appropriata della funzione prevalente in base al tipo di oggetto; state passando un oggetto come argomento puntatore o riferimento a una funzione, e il tipo di parametro usato è un puntatore/riferimento alla classe base. il concetto e la terminologia usati qui riguardano una funzione prevalente a vari livelli in una gerarchia d’ereditarietà. in questo caso la funzione ha un nome e una sequenza di tipi di parametro a tutti questi livelli (ovvero ha la stessa segnatura). Anche i tipi di ritorno sono identici, eccetto il fatto che possano differire restando all’interno, a loro volta, di una gerarchia d’ereditarietà. Questo è diverso dal sovraccarico (overload), dove le funzioni hanno un nome comune ma diverse sequenze di parametri. Esempi Gli esempi illustrano alcune caratteristiche del C++ proseguendo il disegno, allo scopo di renderizzarlo finalmente a schermo. potete modellare il vostro disegno creando una collezione arbitraria di forme e chiedendo a queste ultime di disegnarsi; effettuerete questo iterando sulle forme e chiamando la funzione appropriata per ognuna (potrebbe servire effettivamente, per esempio, ogni volta che la finestra viene spostata o ridimensionata). La libreria C++ standard offre diverse classi contenitori e alcuni algoritmi utili che possono essere usati in questo caso. Volete che il contenitore possa memorizzare una collezione eterogenea (Circle, rectangle, ecc.). Qualsiasi contenitore standard C++ può memorizzare una collezione di elementi di tipo identico (in quel caso si chiama collezione omogenea). potete, tuttavia, gestire le collezioni eterogenee se il contenitore memorizza una collezione di puntatori od oggetti simili a puntatori, ognuno puntante a un oggetto derivante da Shape. in questo modo il contenitore sta registrando logicamente una collezione eterogenea, mentre fisicamente registra una collezione omogenea di oggetti (elementi che puntano a oggetti). Compilare gli esempi Come prima, il codice d’esempio che trovate nel DVD allegato (nel lato B) è fornito di file readme.txt per mostrare i comandi rilevanti usando g++. La maggior parte degli esempi illustreranno specificamente le particolarità di C++11, quindi per compilarli dovreste avere un compilatore ragionevolmente moderno, g++ 4.6.3 o superiore. La libreria C++ offre effettivamente da tempo diverse classi per le collezioni con alcune particolarità utili. Gli esempi di codice mostrano l’uso dei vettori per memorizzare logicamente collezioni eterogenee di forme e, per esempio, per iterare su tali collezioni, processando gli elementi contenuti. illustrano anche l’uso di funzioni polimorfiche e non polimorfiche, e varie altre caratteristiche del linguaggio e della Standard Library. ora non vi resta che mettervi a programmare! LXP Passo passo Compilazione ed esecuzione 1 Creare gli oggetti utilizzate l’operatore new per creare una collezione eterogenea di oggetti, come mostrato nella directory Shapes_2. Scrivete e compilate il codice C++11 con g++. Leggete il file Readme.txt e il file main.cpp. Costruite una collezione eterogenea di oggetti utilizzando le istruzioni in readme e osservate il comportamento del programma (a questo punto non lanciate ancora main_1.cpp). 2 Polimorfismo Seguendo le istruzioni nella directory Shapes_3 potete vedere come ottenere il polimorfismo. Compilate ed eseguite main.cpp e main_1.cpp comparandone l’output con il codice corrispondente al passo 1. 3 Creare una collezione A questo punto potete creare una collezione di oggetti basata su input utente a runtime. per farlo, usate i file presenti nella directory Shapes_4. Linux pro 136 81 Go Un linguaggio sprint! Go è un linguaggio veloce (sia in fase di scrittura sia di compilazione) e sicuro per quello che riguarda gli accessi alla memoria. Gli abbiamo dato un’occhiata per voi G o (ossia Golang) è un linguaggio compilato, Open Source sviluppato da Google. È particolarmente adatto per scrivere codice per processi concorrenti e ambisce a essere facile da programmare come lo è ogni linguaggio dinamico. Come molti linguaggi moderni, Go sfrutta le prestazioni degli attuali analizzatori lessicali per dedurre dal contesto informazioni sui tipi e sui costrutti impiegati, e questo lo rende facile da apprendere, da usare e anche da compilare. Leggendo qui di seguito, saprete tutto quello che è necessario sapere per iniziare a scrivere codice in Go. Primi passi La prima cosa da fare è installare Go a partire dall’archivio .tar, che dovete scaricare dalla pagina Web http://golang.org/doc/install. Una volta ottenuto l’archivio, decomprimetelo nella cartella /usr/local digitando via console il comando sudo tar -C /usr/local -zxf go1.1.2.linux-amd64.tar.gz (noi abbiamo usato la versione a 64 bit, ma ovviamente è disponibile anche quella a 32 bit). Dovete poi modificare il valore della variabile PATH nel file .bashrc o .profile, in modo che includa il percorso /usr/local/go/bin. È anche possibile, se lo preferite, installare i file sorgente al posto dei file binari. Il prossimo passo da compiere è impostare l’ambiente di lavoro. Il codice Go ha bisogno di risiedere all’interno di uno spazio essenzialmente strutturato come segue: mia_cartella_go/ bin/ <- cartella dei file eseguibili pkg/ <- cartella dei pacchetti src/ <- cartella del codice sorgente, formattato in pacchetti, uno per ciascuna cartella Potete disporre di più comandi e librerie all’interno del vostro spazio di lavoro, come risulterà evidente dalla lettura di questo tutorial. A questo punto, possiamo iniziare creando la cartella radice dello spazio di lavoro, tutorialgo/. Poi si deve inizializzare la variabile di ambiente GOPATH in maniera che punti all’indirizzo del workspace appena creato e aggiungere la sottocartella bin/ a $PATH: export GOPATH=$HOME/tutorialgo export PATH=$PATH:$GOPATH/bin Naturalmente consigliamo di inserire questi comandi nel file .bashrc o nel .profile, in modo che queste impostazioni siano caricate automaticamente a ogni accensione. Go è impostato per integrarsi in modo ottimale con gli archivi online di codici sorgente: se il vostro codice risiede in un dato archivio, conviene specificarlo già nel nome base per i file; si evitano così conflitti con i pacchetti standard di libreria. Questo significa per esempio che, se impiegate GitHub, potrete usare github.com/mio_nome come nome base. Il classico “Ciao Mondo!” non è mai visivamente molto gratificante, ma la mascotte di Go nella pagina sullo sfondo è carina... 82 Linux pro 136 Nel seguito useremo genericamente repo.com/nome, quindi il codice sorgente si chiamerà $GOPATH/src/repo.com/nome. Il codice del nostro primo programma Go, il classico “Ciao Mondo”, necessita della sua sottocartella in /src: cd $GOPATH/src mkdir -p repo.com/nome/ciao All’interno della cartella si può creare ciaomondo.go con un editor di vostra scelta: package main import “fmt” func main() { fmt.Printf(“Ciao mondo!\n”) } I programmi in Go sono costruiti da pacchetti, a partire dal package main, come si può vedere dalla prima riga di codice. Se scrivete una libreria che sarà usata da altri programmi, all’interno del codice che la usa la chiamerete con la sintassi package nome_libreria, ma per l’esecuzione del vostro codice da linea di comando è necessario che sia presente il pacchetto main. Proseguiamo nell’analisi del codice e notiamo che abbiamo importato il pacchetto fmt, con lo scopo di gestire l’I/O (in maniera simile a quello che avviene in C con printf e scanf, ma il formato degli identificatori è più semplice). La funzione main() è come al solito la prima che verrà invocata durante l’esecuzione del pacchetto. Il corpo di questa funzione è, nel caso in esame, piuttosto semplice, essendo costituito da una sola riga di codice, contenente l’invocazione della funzione Printf che semplicemente stampa il suo argomento. È anche possibile specificare un formato di stampa, ma con una stringa semplice come nel caso in esame, non ne abbiamo veramente bisogno (un’altra opzione possibile sarebbe usare fmt.Printf(), in modo da rendere superfluo il carattere di ritorno a capo \n). Si noti anche che il nome della funzione inizia con la lettera maiuscola P: nel riquadro dedicato (Standard per scrittura codice e nomi) sono date Go maggiori informazioni sulle convenzioni per i nomi in Go, ma vi anticipiamo comunque che solo i nomi che iniziano con una lettera maiuscola sono esportabili e quindi invocabili per l’esecuzione, quindi i nomi di funzione iniziano sempre con una lettera maiuscola. Infine si noti l’assenza di punti e virgola al termine di ogni costrutto del codice: la grammatica di Go richiede la loro presenza, ma l’analizzatore lessicale del linguaggio riesce a inserirle quasi tutte in piena autonomia, quindi non avete bisogno di farlo voi manualmente. Comunque, i ritorni a capo possono apparire all’analizzatore lessicale come se fossero la fine di un costrutto, ed essere quindi trattati di conseguenza: fate attenzione, quando dovete spezzare una lunga riga di codice, a dove la spezzate. Per esempio, è necessario che la parentesi graffa iniziale che identifica il blocco delle istruzioni di un costrutto if sia sulla stessa riga dove inizia il costrutto stesso, altrimenti viene generato un punto e virgola spurio: // Corretto if j<1 { <corpo del costrutto> } // Non corretto: l’analizzatore lessicale pone un ; alla fine della prima riga if j<1 { <corpo del costrutto> } Per terminare l’analisi del nostro programma Ciao Mondo, è necessario compilarlo: entrate nella cartella che contiene il pacchetto (repo.com/nome/ciao) e digitate da linea di comado go install. A questo punto per vederlo in azione basterà digitare $GOPATH/bin/hello. Tip Il nostro primo vero programma Scrivere “Ciao mondo” è sempre un buon esercizio iniziale: ora vogliamo però ottenere qualcosa di più utile. Diversamente da quanto fatto qualche volta in passato, qui vi proponiamo la creazione di una “lista di compiti finiti”: si tratta di uno strumento che, quando viene usato, chiede quale compito avete appena terminato e lo registra. Il primo passo da compiere è realizzare una procedura di ingresso dati e successiva stampa: creiamo una nuova cartella src/repo/nome/listafiniti e il listato listafiniti.go: //Il pacchetto lancia un programma che ha lo scopo di registrare i compiti terminati e di stamparli. package main import “fmt” var ( finito string ) func main() { chiediFiniti() stampaFiniti() } // chiediFiniti chiede all’utilizzatore di inserire qualche compito finito. func chiediFiniti() { fmt.Printf(“Quali compiti hai terminato?”) fmt.Scan(&finito) } // stampaFiniti mostra tutti i compiti terminati fino ad ora func stampaFiniti() { fmt.Println(“Avete terminato:”) fmt.Println(finito) } I commenti in Go possono essere automaticamente rilevati durante il parsing da godoc per generare la documentazione del software. Ogni pacchetto deve contenere una riga di commento al suo contenuto prima della dichiarazione del pacchetto stesso, che ne dia una descrizione generale. Ogni funzione esportabile (pubblica) deve avere un commento che ne descrive l’uso e che inizia con il nome della funzione stessa. La parola riservata var permette la creazione e inizializzazione di variabili (in questo esempio però noi abbiamo dichiarato finito senza inizializzarla), con visibilità sia locale che globale, mentre per le costanti si usa const. Nell’esempio mostrato, finito ha visibilità globale, in modo da essere accessibile a più funzioni. La funzione di libreria fmt.Scan legge i dati in ingresso assegnandoli a una variabile. Cosa possiamo dire dell’espressione &finito? In Go, il passaggio di un argomento avviene sempre per valore, vale a dire copiandolo su una variabile locale. Se quindi abbiamo invocato la funzione fmt.Scan() con argomento finito, questa assegnerà il valore letto in ingresso a una copia, non all’originale, della variabile di invocazione. In questo caso, invocando la nostra stampaFiniti(), avremo un output nullo, perché la variabile globale finito ha ancora il valore null iniziale (potete vederlo più esplicitamente assegnandole un valore iniziale all’atto della sua definizione). La soluzione a questo problema è usare i puntatori, che contengono l’indirizzo di memoria di una variabile, piuttosto che il valore della variabile stessa. L’espressione &finito in Go restituisce un puntatore all’indirizzo della variabile finito, per esempio 12345678. A questo punto fmt.Scan() internamente usa il puntatore passatogli, ‘deferenziandolo’ (con *pointerName) per ottenere il valore della variabile puntata. Quindi il valore del puntatore &finito è sì copiato, ma tutto funziona perché la copia di un indirizzo punta comunque allo stesso oggetto puntato dall’originale. Quando stampaFiniti() cerca il valore referenziato, trova immancabilmente il valore della variabile finito, che viene così modificato: in seguito, quando invocheremo stampaFiniti(), otterremo quindi il nuovo valore risultato delle modifiche operate. A questo punto possiamo compilare il programma digitando go install e farlo eseguire con listafiniti. Dovrete spesso creare delle librerie nome_libreria. go nella cartella lib/, che iniziano con package nome_libreria, e i relativi file nome_ applicazione. go che ne fanno uso, risiedenti nella cartella src/ e caratterizzati da package main e dall’importazione di libreria specificata nel loro preambolo. Gestire i buffer Una soluzione al problema descritto alla fine della precedente sezione potrebbe essere quella di creare un array e definirne i valori con un ciclo che usa fmt.Scan(). Il difetto di questa soluzione è però l’eccessivo lavoro necessario quando si vuole realizzare qualcosa con strumenti non atti allo scopo, come risulta essere Scan(). Noi impiegheremo invece un pacchetto, bufio, progettato proprio per risolvere questa classe di problemi, ossia gestire buffer in ingresso/ uscita. Proviamo una prima riscrittura del codice di chiediFiniti(), mostrando solo le variazioni rispetto alla stesura originale: import ( “bufio” “fmt” “os” ) const terminatore=’\n’ func chiediFiniti() { fmt.Printf(“Quali compiti hai terminato?”) r := bufio.NewReader(os.Stdin) Linux pro 136 83 Go Tip Potete usare la funzione println() per il debugging, ma dovete usare fmt.Println per gestire le stampe effettive del codice: println() scrive sullo standard error stderr, non sullo standard output stdout, e non è garantito che venga mantenuta nel linguaggio. 84 finito, err := r.ReadString(terminatore) if err!=nil { println(err) os.Exit(1) } } Però il codice dà il seguente messaggio di errore: $ go install # repo.com/nome/listafiniti ./listafiniti.go:21: finito declared and not used Gestire le dichiarazioni Cosa sta succedendo? Il problema sta nell’assegnazione tramite :=. Con questo operatore si dichiara una variabile e le si assegna un valore in un colpo solo. Può anche essere usato per ri-assegnare il valore a una variabile, ma solo a patto che abbia la stessa visibilità dell’assegnamento e che esista almeno una nuova variabile dichiarata nel medesimo. Il codice qui di seguito dovrebbe funzionare: func chiediFiniti() { fmt.Printf(“Quali compiti hai terminato?”) r := bufio.NewReader(os.Stdin) mioFinito : = “ping” mioFinito, err := r.ReadString(terminatore) if err!=nil { println(err) os.Exit(1) } println(mioFinito) } Se provate questo listato (si noti il println() di debug alla fine), il risultato sarà la stampa corretta di tutto ciò che avete inserito come valore di mioFinito. Quali sono allora le ragioni per cui quello che usa la variabile finito non funziona? Il problema è che questa variabile è definita globalmente, mentre := è in grado di creare solo una variabile locale. Ecco come risolvere il problema. func chiediFiniti() { fmt.Printf(“Quali compiti hai terminato?”) r := bufio.NewReader(os.Stdin) riga, err := r.ReadString(terminatore) if err!=nil { println(err) os.Exit(1) } stampaFiniti(riga) } func stampaFiniti(finito string) { println(“Avete terminato:”) fmt.Println(finito) } // In questo modo potete non invocare stampaFiniti() nel main(), ma solo dentro chiediFiniti() Questo esempio illustra anche come dichiarare funzioni che accettano argomenti: la sintassi è del tipo func nomeMetodo(nomeVariabile tipoVariabile). Eseguendo il codice vedrete che funziona senza che sia necessaria una variabile globale. Comunque dobbiamo ammettere che è un modo di procedere poco pulito, che non separa nettamente il ricevere dati dallo stamparli. Per continuare con la nostra soluzione che usa una variabile globale, si possono provare le seguenti modifiche: func chiediFiniti() { fmt.Printf(“Quali compiti hai terminato?”) r := bufio.NewReader(os.Stdin) Linux pro 136 riga, err := r.ReadString(terminatore) if err!=nil { println(err) os.Exit(1) } done = line } // A questo punto potete invocare stampaFiniti() nel main() senza passare argomenti Esiste anche un altro metodo che funziona: var err error finito, err = r.ReadString(terminatore) Seguendo questo metodo, prima si dichiara la variabile err poi si assegna il risultato della funzione r.ReadString(terminatore) alle due variabili esistenti, direttamente con =. Ciascuna delle due variabili può essere dichiarata o globalmente o localmente: il software funziona in entrambi i casi. Qualunque sia la via che decidete di scegliere, l’esecuzione del software vi darà i risultati attesi, permettendovi l’immissione di frasi o gruppi di parole e stampandole parimenti assieme. Salvare in un file Come possiamo salvare i dati che immettiamo nel nostro programma, in modo che siano accessibili in tempi successivi alla loro immissione? Ecco una parte di codice che usa la libreria IOUtil: import ( “io/ioutil” ) func main() { chiediFiniti() salvasuFile() } func salvasuFile() { t := []byte(finito) err := ioutil.WriteFile(“uscita.txt”, t, 0644) if err!=nil {panic(err)} } Naturalmente esistono molti altri modi per salvare un file in Go, ma questo che vi proponiamo ci sembra essere il più semplice di tutti (fate comunque attenzione ad adottare sempre questa soluzione, perché nel caso che dobbiate scrivere file di notevoli dimensioni potreste avere problemi di buffer). L’unica cosa che dobbiamo fare è trasformare finito in una suddivisione di byte, poi usare la funzione di libreria ioutil.WriteFile() per fare esattamente quello che dice il suo nome (e già che ci siamo, settare i permessi di accesso a 0644). Si noti la linea di gestione delle eccezioni che controlla se ci sono problemi all’atto della scrittura. Infine, una breve nota sulle suddivisioni: queste strutture di Go sono simili agli array degli altri linguaggi (e anche agli array che Go stesso offre). E infatti sono costituite da array ma, mentre questi ultimi hanno dimensioni fisse (per esempio [1]string e [3]string sono due oggetti ben definiti e distinti), per le suddivisioni non è così. Nel codice mostrato sopra abbiamo creato una suddivisione di byte a partire dalla variabile finito. È anche possibile usare la funzione make per lo stesso compito. Le suddivisioni possono essere a loro volta ripartite (per ottenere suddivisioni più piccole), copiate ed estese: raccomandiamo di osservare il loro uso nelle parti di codice che vi proporremo qui di seguito. Se compilate ed eseguite il codice sopra, poi analizzate il file uscita.txt, noterete che tutto funziona a meraviglia, ma anche che detto file viene sovrascritto ogni volta. WriteFile() non ha opzioni di append, quindi se ci interessa “economizzare” le operazioni in questo senso, dobbiamo cercare un’altra soluzione, ad esempio la seguente: Go func salvasuFile() { f, err := os.OpenFile(“uscita.txt”, os.O_APPEND|os.O_WRONLY, 0644) if err != nil { panic(err) } defer f.Close() if _, err = f.WriteString(finito); err != nil { panic(err) } } os.OpenFile() è la chiamata generale di apertura file, che consente di specificare tutti i flag opportuni (mentre Open() permette l’apertura in sola lettura): in questo caso APPEND apre il file con l’opzione append, mentre WRONLY consente la sola scrittura. Possiamo anche impostare i permessi, come nell’esempio precedente, salvo per il fatto che questi varranno solo se stiamo creando il file e non alle successive aperture. Il costrutto defer è un trucco di Go per semplificare la struttura del codice. Tutto ciò che fa è semplicemente mettere una data chiamata a funzione (in questo caso f.Close()) in uno stack, in modo che questa sia eseguita non appena la funzione in cui è inserito restituisce un risultato. Ciò significa che anche in caso di presenza di eccezioni il file aperto verrà invariabilmente chiuso. Se avessimo voluto procedere altrimenti, per assicurare la chiusura del file, una volta terminata ogni possibile operazione, avremmo dovuto distribuire chiamate a f.Close() in tutto il listato. Avrete forse notato la presenza di un altro metodo per la gestione delle eccezioni nel costrutto if che include la chiamata a WriteString(). Se però oltrepassassimo il controllo e cancellassimo il file uscita.txt, riusciremmo a mandare in crisi l’applicazione. Per scongiurare questa evenienza possiamo fare qualche controllo di esistenza file usando diverse funzioni delle libreria os, come nell’esempio seguente func controllaSeEsisteFile(file string) { if _, err := os.Stat(file); os.IsNotExist(err) { f, err := os.Create(file) File cancellato e ricreato durante l’esecuzione successiva. Si noti che stampaFiniti() è ancora in esecuzione if err != nil { panic(err) } f.Close() } } Questa parte di codice mostra anche l’identificatore blank _ di Go: lo si usa quando è indispensabile eseguire un assegnamento ma non vi interessa affatto quale sia il suo valore effettivo. Nel caso in esame, os.Stat() restituisce sia informazioni sulla struttura del file a cui è applicata sia eventuali messaggi di errore, ma noi siamo interessati solo a questi ultimi (per proseguire nell’esecuzione e controllare con os.IsNotExist() se il file effettivamente non esiste) quindi, anziché allocare risorse per creare una variabile che non useremo, ricorriamo a _ come se fosse un cestino. Nota importante: non usate mai _ per assegnargli valori di un messaggio di errore, ma controllate sempre questo tipo di valori. Anche se l’uso di _ è un modo di procedere pulito, il codice che vi abbiamo proposto è in realtà inutilmente verboso: è molto più semplice aggiungere un semplice flag nella chiamata di OpenFile(): f, err := os.OpenFile(“uscita.txt”, os.O_APPEND|os.O_WRONLY|os. O_CREATE, 0644) A questo punto, se provate di nuovo a cancellare uscita.txt, ricompilando e rieseguendo di nuovo il nostro listato, il file verrà ricreato al volo per voi. Stampare i contenuti Per finire, vediamo come si possono stampare i contenuti del nostro file. Ecco il listato veloce di una funzione che può fare al caso nostro. import “strings” func main() { stampaInteraLista() } var ( fileUscita = “uscita.txt” ) func stampaInteraLista() { fileContent, err := ioutil.ReadFile(fileUscita) if err != nil { panic(err) } tuttiFiniti := strings.Split(string(fileContent), string(terminatore)) for i, v := range tuttiFiniti { fmt.Printf(“%d: %s \n”, i, v) } } ReadFile() restituisce i contenuti dell’intero file in forma di suddivisione di byte (siate cauti a usare questo metodo se il file che dovete trattare è realmente enorme, perché potreste avere dei problemi di prestazioni: ricordate che ci sono altre opzioni per la lettura di file potenzialmente grandi). Successivamente viene usata stringsSplit() per spezzare la suddivisione, trasformandola in prima un’unica stringa con string(fileContent) e poi dividendola in una suddivisione di stringhe assegnata a tuttiFiniti. Si noti che mentre ReadString() ha bisogno di un terminatore di tipo byte, String() necessita di un terminatore di tipo stringa, quindi è necessario eseguire una conversione di tipi sulla costante terminatore. Notate infine l’uso di range per iterare su tutte le stringhe della suddivisione tuttiFiniti. i è l’indice di iterazione (che parte da 0, come potrete vedere durante l’esecuzione) e v è il valore corrispondente. Printf() li stampa formattati rispettivamente come cifra e stringa. Il come innestare tutto questo all’interno del main() e in quale ordine eseguire le funzioni che abbiamo realizzato è a vostra discrezione. Come in ogni breve tutorial, ci sono molti argomenti che non abbiamo potuto nemmeno sfiorare. Per esempio, Go fa uso estensivo di interfacce per condividere il comportamento degli oggetti usati e permettere il loro uso con altri metodi rispetto a quelli originariamente previsti. Se implementate i metodi per l’interfaccia, i vostri oggetti possono essere inseriti in qualsiasi cosa che richieda il tipo interfaccia. La concorrenza è anche una grande possibilità da sfruttare per chiunque voglia lavorare con Go. Occorre ricordare che il linguaggio è di nascita recente ed è ancora in sviluppo, quindi ci sono ancora molte cose che verranno elaborate e gli verranno aggiunte da Google. Noi pensiamo che si tratti di un linguaggio elegante con cui divertirsi, dotato di buona documentazione online e facile da imparare e usare. Detto questo potete sbizzarrirvi a pensare a quale problema Go può risolvere per voi. LXP Linux pro 136 85 Haskell Primi passi con Haskell Curiosi di provare la programmazione funzionale? Vi mostriamo un linguaggio che vi aprirà una nuova prospettiva di programmazione H askell è un linguaggio compilato, funzionale e ‘pigro’. Funziona diversamente dai linguaggi imperativi come C++, e anche dai linguaggi OO, e prenderci confidenza può aiutare a vedere prospettive e soluzioni diverse nei vari problemi di programmazione. Non è, ad esempio, presente un costrutto for. Ovviamente, è previsto un modo per ripetere le cose e ciclare costrutti. Haskell è un linguaggio divertente e l’eccellente interprete interattivo rende facile il suo apprendimento. È inoltre possibile effettuare certi tipi di attività con piccole quantità di codice, una volta presa confidenza con l’idioma. Questo tutorial non vuol essere una guida approfondita ad Haskell, ma vi fornirà i concetti fondamentali alla base. Per familiarizzare con il linguaggio, come sempre, dovrete scrivere parecchio codice, sperimentare diversi modi per ottenere lo stesso risultato e seguire le risorse disponibili online. Per cominciare, visitate il sito http://www.haskell. org/platform per informazioni su come ottenere i pacchetti della piattaforma Haskell per la vostra distribuzione o su come compilarla da sorgente. Questo vi fornirà un completo ambiente di sviluppo, inclusivo di ghc – il Glasgow Haskell Compiler (GHC) – e ghci, l’interprete interattivo. Fondamenti di Haskell Avviate l’interprete ghci e provate a valutare le vostre prime espressioni Haskell: ghci> 4 + 3 7 ghci> 67*13 871 ghci> (/) 15 3 5.0 ghci> “Hello world” “Hello world” È possibile scrivere le espressioni da valutare sia in formato standard (operatore tra gli operandi) o in formato prefisso (come in Lisp; operatore tra parentesi prima degli operandi). Ecco, inoltre, alcuni fondamenti del linguaggio da sapere: 0 non è lo stesso di False (è un intero non un Booleano e Haskell è fortemente tipizzato) l’operatore non uguale è /= l’operatore negazione è not. Provate ora una serie basilare di operazioni sulle liste: ghci> [1,2,3] ++ [4,5,6] [1,2,3,4,5,6] ghci> 3 : [6,9,12] [3,6,9,12] Le liste sono composte da parentesi quadre, concatenate con ++ e l’operatore push (conosciuto come operatore ‘cons’) è :. [] e “” indicano entrambi la lista vuota. Si noti che una stringa è attualmente una lista di caratteri ([‘h’,’e’,’l’,’l’,’o’] è lo stesso di “hello”). Questo significa che le stringhe possono essere concatenate e aggiunte con gli operatori lista. È tuttavia possibile aggiungere un solo carattere alle stringhe alla volta: ghci> ‘h’ : “world” “hworld” ghci> “hello” : “world” <interactive>:12:11: Couldn’t match expected type `[Char]’ with actual type `Char’ Expected type: [[Char]] Actual type: [Char] In the second argument of `(:)’, namely `”world”’ In the expression: “hello” : “world” Haskell è staticamente tipizzato; il che vuol dire che il tipo di variabile è noto durante la compilazione. Include, tuttavia, l’inferenza di tipo, che significa la capacità di dedurre il tipo di variabile dal contesto. Qui, Haskell sta utilizzando la notazione “” per trattare implicitamente hello come [Char]. Il vantaggio Funzionalità I linguaggi imperativi consistono in una sequenza di azioni; il programmatore dice al computer cosa fare e cosa cambiare. I linguaggi funzionali invece valutano espressioni. Con un linguaggio funzionale (come Haskell), viene considerato solo cosa computare e non come o quando è computato. Un aspetto importante dei linguaggi funzionali è che le funzioni non dovrebbero avere effetti collaterali. Un’espressione funzionale non dovrebbe cambiare lo stato del programma e il risultato dovrebbe dipende solo dall’input e non da qualsiasi altra cosa che possa essere accaduta. Questo inoltre significa che le variabili non variano; 86 LINUX PRO 136 una volta impostate, rimangono tali. La mancanza di effetti collaterali implica che è possibile valutare le espressioni in qualsiasi ordine, dato che le variabili non cambiano, indipendentemente dagli eventi (si veda il box Codice puro e codice I/O per ulteriori approfondimenti sulla purezza del codice ed effetti collaterali). Questo fatto è legato alla pigrizia di Haskell: questi infatti ritarda l’esecuzione di ogni computazione al momento in cui il risultato sia veramente necessario. Non saprete, perciò, il momento esatto (o in quale ordine) in cui una qualsiasi elaborazione verrà eseguita, tuttavia data la natura funzionale di Haskell questo non è particolarmente importante. Non appena si prenderà confidenza con la valutazione lazy, si comincerà a pensare in modo più efficiente. I linguaggi funzionali rendono inoltre facile il passaggio di una funzione in un’altra, per collegarle insieme (un po’ come Lisp, che vedremo dei prossimi numeri). Date un’occhiata alla sezione map del tutorial per capire meglio cosa si intende. Se siete abituati a utilizzare la programmazione imperativa ci vorrà un po’ prima di riordinare i pensieri in termini di programmazione funzionale. Come al solito, giocate con il linguaggio e leggete codice di altri per facilitarvi la vita. Haskell di questo accorgimento è che ogni errore di tipizzazione verrà visualizzato in fase di compilazione; lo svantaggio è una perdita di flessibilità. Haskell è inoltre fortemente tipizzato, che significa porre forti restrizioni sul tipo di dati da utilizzare. Haskell non si occuperà della differenza tra una stringa e un intero per voi, anche se la stringa è a tutti gli effetti un numero: ghci> let x = “2” ghci> :type x x :: [Char] ghci> let y = 3 ghci> :type y y :: Integer ghci> x + y <interactive>:87:5: Couldn’t match expected type `[Char]’ with actual type `Integer’ In the second argument of `(+)’, namely `y’ In the expression: x + y In an equation for `it’: it = x + y Il frammento di codice riportato consente di vedere come “2” venga interpretato come lista di Char e 2 come Integer. Non è possibile sommarli. Un’ultima nota sulle liste. I membri di una lista devono tutti essere dello stesso tipo, tuttavia le liste possono essere di qualsiasi lunghezza. Se desiderate una collezione di oggetti di diverso tipo (per esempio, un intero e una stringa) dovete utilizzare una tupla. Le tuple hanno dimensione fissa (non è possibile aggiungere oggetti una volta create) ma possono contenere mix di tipi: ghci> :set +t ghci> (15, “March”) (15,”March”) it :: (Integer, [Char]) ghci> (15, “March”, 2013) (15,”March”,2013) it :: (Integer, [Char], Integer) ghci> unset +t set +t e unset +t accendono e spengono rispettivamente l’impostazione che visualizza il tipo dell’ultima espressione valutata. Funzioni Leggermente allarmante nel caso abbiate utilizzato altri linguaggi, le funzioni in Haskell non utilizzano le parentesi: ghci> [1,2,3,4,5] [1,2,3,4,5] Gli operatori && e || funzionano, tuttavia vi verrà restituito un errore nel caso trattiate 0 come False La piattaforma Haskell è disponibile attraverso il package manager integrato in molte distribuzioni ghci> drop 3 it [4,5] (it si riferisce all’ultima espressione valutata. Dovrete utilizzare le parentesi solo nel caso l’argomento sia qualcosa di confuso o ci sia una precedenza ambigua. E se voleste scrivervi funzioni personalizzate? Per farlo dovrete creare un file sorgente fuori da GHCI e caricarlo; non è infatti possibile scrivere funzioni direttamente in GHCI. Cominciate con un semplice “Hello World”. Aprite un file hello.hs e scrivete: ghci> :load hello.hs [1 of 1] Compiling Main ( hello.hs, interpreted ) Ok, modules loaded: Main. *Main> helloworld “Hello World” È perciò possibile definire la funzione helloworld semplicemente con =, come per le variabili. Tuttavia, diversamente da molti altri linguaggi, non è possibile cambiare assegnazione una volta eseguita. Tornate a hello.hs e aggiungete questa coppia di righe: x=4 x = “Me!” helloworld = print (“Hello World from “ ++ x) Se provate a caricare questo file nuovamente, Haskell si lamenterà: ghci> :load hello.hs [1 of 1] Compiling Main ( hello.hs, interpreted ) hello.hs:2:1: Multiple declarations of `x’ Declared at: hello.hs:1:1 hello.hs:2:1 Failed, modules loaded: none. Una volta dichiarata x, questa diventa immutabile; cambiate la prima dichiarazione da x=4 a a=4 per far funzionare il tutto: ghci> :load hello.hs [1 of 1] Compiling Main ( hello.hs, interpreted ) Ok, modules loaded: Main. *Main> helloworld “Hello World from Me!” Anche questo è un tassello della dedizione alla pulizia del codice di Haskell. LINUX PRO 136 87 Haskell Un programma a tutti gli effetti Tip Se volete provare Haskell senza scaricare nulla, http:// tryhaskell. org/ vi farà usare l’interprete direttamente da browser. Proverete ora a scrivere un programma vero e proprio. Comincerete con lo scrivere il codice in un file, per poi caricarlo ed eseguirlo in GHCI. Il programma che scriverete selezionerà una citazione casuale da un file di testo e la stamperà a schermo. Per prima cosa create il file delle citazioni, quote.txt, con un po’ di citazioni al suo interno, una per riga, per poterlo parsare. Per prima cosa fate in modo che il file venga letto e stampato interamente su schermo, giusto per prendere confidenza con l’IO. Create un file quote.hs come questo: import System.IO main :: IO () main = do inhandle <- openFile “quote.txt” ReadMode outhandle <- openFile “output.txt” WriteMode mainloop inhandle outhandle hClose inhandle hClose outhandle mainloop :: Handle -> Handle -> IO () mainloop inhandle outhandle = Ecco cosa succede se vi dimenticate di importare System.IO: otterrete molti messaggi ‘Not in scope’. Dopo l’aggiunta della riga tutto torna a funzionare do ineof <- hIsEOF inhandle if ineof then return () else do inpStr <- hGetLine inhandle hPutStrLn outhandle inpStr mainloop inhandle outhandle Si noti che utilizzando do per inanellare una sequenza di azioni bisogna assicurarsi che l’indentazione sia corretta; questo è infatti il modo in cui Haskell collega le varie azioni. Questo codice per esempio non funzionerà: -- this code is wrong! mainloop inhandle outhandle = do ineof <- hIsEOF inhandle if ineof -- too many indented spaces! Does not line up! -- .... etc Il codice definisce due funzioni: main e mainloop. Ogni programma Haskell necessita di una funzione main, che viene eseguita come entry point del programma. main è inoltre un’azione IO (si veda il box in basso per approfondire le azioni IO e il codice ‘puro’). Qui vengono aperti il file di input e il file di output e vengono collegati ai rispettivi handle. Questi vengono poi passati alla funzione mainloop, che effettivamente svolge il lavoro, e poi i file vengono chiusi. La funzione mainloop è quella che si occupa effettivamente della scansione del file. Viene impostata una variabile per controllare l’effettiva fine del file (la versione Haskel di qualcosa di simile a while(<FILE>) in Perl). Nel caso si arrivi alla fine del file, la funzione ritorna. Altrimenti si ottiene la riga successiva (con hGetLine) dall’handle di input e la si porta in output con hPutStrLn. Si chiama poi nuovamente mainloop per continuare il ciclo (questa funzione ha la ricorsione in coda; i calcoli vengono effettuati prima della chiamata ricorsiva, perciò non dovete salvare nessuno stato evitando problemi con lo stack). Questo codice include le firme di funzione tipizzate. Non dovete necessariamente fornire queste informazioni – Haskell se ne occuperà per voi – tuttavia è raccomandabile farlo per la manutenibilità futura del codice. Cosa significa questa firma? mainloop :: Handle -> Handle -> IO () Il nome della funzione è mainloop e :: segna l’inizio della firma. Il valore più a destra, IO () è il valore di ritorno della funzione. In questo caso una funzione di IO che non ritorna nulla. () è l’equivalente Haskell del void in C++ o Java. Handle -> Handle definisce i parametri: due ed entrambi Handle. Tornando al codice. Nel caso volessimo visualizzare l’output su stdout (lo schermo) invece che in output.txt? Haskell prevede tre handle sempre disponibili: stdin, stdout, e stderr. Quindi semplicemente dovrete rimuovere Codice puro e codice I/O Data la sua natura funzionale, Haskell cerca di evitare gli effetti collaterali. Le operazioni di I/O, per necessità, includono effetti collaterali; interagiscono con il mondo esterno, e possono alterare lo stato del programma o del sistema. Haskell quindi divide strettamente il codice in ‘puro’ (pure) e ‘IO’. Il codice puro produce sempre lo stesso risultato con lo stesso input, non ha mai effetti collaterali e non altera mai lo stato. Il codice di I/O, 88 LINUX PRO 136 impuro, non segue necessariamente queste regole. Gli effetti collaterali includono I/O, modifiche delle variabili globali o comandi di sistema. Come dimostrato nel tutorial, la barriera consiste nel fatto che le variabili di IO devono essere convertite in variabili pure (con <-) per poterle utilizzare in codice puro. Questo è un modo per evitare certe classi di bug: quelli che succedono per effetti collaterali non previsti o perché lo stato del programma è stato alterato e lo stesso input genera un output diverso. In Haskell, c’è la garanzia che le parti pure del codice non possano fare ciò. Inoltre, è possibile parallelizzare automaticamente le parti pure del codice (le versioni recenti di ghc lo faranno per voi); gli effetti collaterali sono uno dei grandi problemi con il codice parallelizzato. Questi accorgimenti rendono il codice più facile da testare, sicuramente comodo. Haskell tutti i riferimenti a outhandle e sostituirli con stdout: main :: IO () main = do inhandle <- openFile “quote.txt” ReadMode mainloop inhandle hClose inhandle mainloop :: Handle -> IO () mainloop inhandle = do ineof <- hIsEOF inhandle if ineof -- correct number of spaces here then return () else do inpStr <- hGetLine inhandle hPutStrLn stdout inpStr mainloop inhandle Esiste una via ancora più semplice per leggere un file utilizzando hGetContents, che è una funzione lazy. Questa ottiene il contenuto ma non al momento della chiamata. La funzione legge infatti il file man mano che ne viene processato il contenuto (che viene letto come stringa e quindi come lista di caratteri) e la memoria viene liberata dal garbage collector non appena letta. In questo modo è possibile elaborare piccoli pezzi alla volta anche con stringhe, e quindi file, arbitrariamente lunghe. Ecco un esempio: import System.IO main = do inhandle <- openFile “quote.txt” ReadMode inputStr <- hGetContents inhandle hPutStr stdout inputStr hClose inhandle Questo snippet funziona solo nel caso inputStr venga usata in un singolo posto. Se questa viene riutilizzata in altre parti del codice, il compilatore dovrà attendere che venga letta e quindi non potrà liberare la memoria. Con file particolarmente grandi questo occuperà tutta la memoria disponibile. Utilizzare quindi questo trucchetto con particolare attenzione! Nei prossimi paragrafi scoprirete di più sulle notazioni <- e do. Tip Si consulti il wiki di Haskell http://www. haskell.org/ haskellwiki/ Programming_ guidelines per gli standard della community. I tipi cominciano con la maiuscola, le funzioni in lowercase e i nomi (variabili) sono camelCase e descrittivi. Fate attenzione all’indentazione. Array e numeri casuali Finora avete semplicemente fatto output: quello che dovete fare ora è prendere una delle righe. Un’opzione possibile è quella di leggere le righe e di inserirle in una struttura dati e utilizzare un numero casuale per scegliere un elemento dalla lista. Potreste utilizzare un hash o un array associativo, tuttavia l’opzione più semplice è quella di leggere le citazioni in un array e scegliere un indice casuale. Vi renderete inoltre la vita più semplice utilizzando la funzione integrata e lazy readFile per leggere il file: import System.Random main :: IO () main = do -- Read the file lazily contents <- getQuotes “quote.txt” let quotes = lines contents index <- randomRIO (0, (length quotes)-1) let singlequote = quotes !! index putStrLn singlequote getQuotes :: FilePath -> IO String getQuotes path = do readFile path getQuotes legge il file in una stringa; successivamente lines spezza la stringhe in un array di stringhe. randomRIO genera un numero casuale tra 0 e l’ultimo indice dell’array e !! ritorna La vostra prima versione del codice in esecuzione; e poi la versione che estrae una parola casuale dalla citazione selezionata l’elemento corrispondente all’indice dell’array. Infine putStrLn stampa la singola citazione. Potreste voler fondere le ultime due righe con: putStrLn ( quotes !! index ) La parola chiave do viene utilizzata per concatenare una serie di azioni di IO. In questo caso l’ordine è importante, perciò utilizzare un blocco di azioni do assicura che queste avvengano nell’ordine corretto. <- è l’operatore di assegnazione IO. È possibile utilizzarlo per collegare un’azione di I/O a un certo nome. Qui readFile path ritorna una IO string tuttavia lines deve operare su una string classica. La linea contents <- getQuotes “file” prende la IO string e la collega come string a contents. È ora possibile utilizzare contents in codice puro (infatti sia do che <- non vengono utilizzate solo per I/O – nonostante sia il punto di partenza di molti principianti – ma vengono impiegate per molti altri monad. Per maggiori informazioni sui monad consultate il box relativo, anche se non è oggetto del tutorial approfondire la loro conoscenza). Una qualsiasi cosa con un tipo IO è da considerarsi un’azione di I/O. Queste possono essere utilizzate a piacimento – memorizzate e concatenate con altre azioni (utilizzando do) – tuttavia possono essere eseguite solo all’interno di un’altra azione di IO. La funzione main è un’azione I/O con tipo IO () (senza valore di ritorno). Questo significa che è possibile eseguire altre azioni di I/O dal main, ovvero il punto da cui ogni programma Haskell viene avviato. Qualsiasi azione che non coinvolga l’IO dovrebbe essere gestita in codice puro, che può essere chiamato sia da main che da altre azioni di I/O. Noterete che insieme a <- il codice utilizza let. Come utilizzate <- per estrarre i risultati dal codice di I/O, utilizzate let (all’interno di un blocco do) per estrarre i risultati dal codice puro. lines è una funzione di codice puro; agisce su stringhe e non ha effetti collaterali e lo stesso input restituisce sempre lo stesso output. Anche !! è un operatore puro; ritorna un elemento dato un certo indice da un array (perciò [‘a’,’b’,’c’] || 1 ritorna b; le liste sono indicizzate partendo da 0). Invece randomRIO è un operatore di IO perciò dovrete utilizzare <-. Per compilare il tutto come programma a sé stante utilizzate ghc: $ ghc quote.hs $ ./quote Be the change that you wish to see in the world. – Mahatma Gandhi Il codice in main è eseguito automaticamente. LINUX PRO 136 89 Haskell Monad e astrazioni ma è sicuramente uno dei principali. Consentono di garantire che certe computazioni avvengano in un particolare ordine, che non è generalmente il comportamento predefinito di Haskell. Le azioni monadiche passano elementi e risultati da una funzione alla seguente in un modo illegittimo per il codice puro. Contengono inoltre un modo per convertire i tipi in tipi monad: per esempio, il monad IO può convertire una stringa in IO string. Questo I monad sono delle caratteristiche della funzionalità e sono anche parte della divisione puro/non puro. IO è un monad comune, così come Maybe, che non utilizzerete in questo tutorial ma che potrebbe esservi utile per computazioni che possono fallire. I monad sono modulari, flessibili e consentono ad Haskell di rimanere puro isolando le parti di codice che potrebbero avere effetti collaterali (come il codice di IO). Non è il loro unico scopo è nuovamente parte del modo in cui codice puro e ‘reale’ vengono tenuti separati. Sono state effettivamente spese migliaia di parole (e immagini) sui monad e persone diverse li comprendono in modo diverso. Se volete saperne di più, online troverete molte spiegazioni e potrete giocare con monad esistenti. Non potreste infatti andare molto lontano in Haskell senza di essi, ma una volta presa confidenza li troverete terribilmente utili. Mapping Darete ora un rapido sguardo al modo in cui Haskell gestisce uno degli aspetti più importanti della sua sintassi, il mapping. Scrivete per esempio un qualcosa che stampi la quinta parola di ogni citazione: import System.Random main :: IO () main = do contents <- getQuotes “quote.txt” let quotes = lines contents let fifthWords = map getFifthWord quotes index <- randomRIO (0, (length quotes)-1) putStrLn ( fifthWords !! index ) getFifthWord :: String -> String getFifthWord = (!!4) . words map genera un array di lunghezza x da un array di lunghezza y e prende due argomenti in ingresso: la funzione che genera il mapping (qui, getFifthWord) e l’array al quale applicarla (qui, quotes). GetFifthWord è la concatenazione di due funzioni (in Haskell, concatenerete spesso le funzioni): words esplode la stringa passata per singola parola (producendo un array); !!4 ritorna l’indice 4 (il quinto membro dato che l’indice inizia da zero) dell’array risultante. Quindi map getFifthWord quotes applica getFifthWord a quotes, e ritorna un array della quinta parola di ogni citazione, che viene assegnato a fifthWords. TECNologIA FUTURo Mensile N°15 Dicembre 2012 Ruby Ottimizza il codice per lavorare meglio Python Testo e stringhe al tuo comando Android Crea il tuo servizio in stile Instagram Concetti Realizza uno script Python da zero Inoltre… Asus Fonepad Straordinaria autonomia e ottimo rapporto qualità/prezzo! Secure Boot Avvia Linux nonostante i limiti imposti dall’UEFI di Microsoft Tutta un’altra musica Come catturare, etichettare e gestire i tuoi file musicali preferiti AUDiO DA PrO Con Ardour 3 lavori con file multitraccia e sequencer MIDI come un professionista Cloud enterprise Scopri Amazon Web Services teSt PerFetti Pianifica controlli di qualità per creare codice a prova di bomba! LINUX PRO 136 ARTISTI DIGITALI Crea la tua rivista personale e unica con il nuovo Flipboard p66 ACCENDE LA TUA PASSIONE! VIDEOGuIDE VIDEOGu IDE IN ITALIANO Fotoritocco ancora più F Facile acile con le videolezioni passo passo! arriva l’auto controllata da linux! UBUNTU UBUNTU FACILE RNA Come fare NUMERO 302 FACILE tutto NEL CLouD FotoGRAFIE Sfondi sfocati Tempi lunghi Scie luminose Panning e tanto altro... Con Jolicloud controlli file, social network e app remote dal desktop! APOCALYPSE NOW P e r c h é i l m o n d o P ot r e b b e da v v e r o f i n i r e a d i c e m b r e 2 0 1 2 (e non c’entra la Profezia maya) Allucinazioni Alla scoperta dei meccanismi che ingannano i nostri sensi I segreti della bellezza Ecco quali sono i tratti del viso che rendono più attraenti B B C S C I E N C E N ° 15 - M E N S . - A N N O I I - 2 0 12 - € 3 , 9 0 in prova Voyager Air: Air 1 Terabyte di memoria per il tuo iPad p75 XCOM: EnEMy UnknOwn Il miglior gioco per iOS! p48 App Journal N°30 Mensile Anno 3 €3,90 chf 9,20 Task L’App per gestire i promemoria in modo semplice e veloce p14 ScoreCleaner Notes Crea uno spartito musicale cantando p15 Dov'è il mio Topolino? In prova il divertente gioco Disney p50 Scatti ravvicinati di fiori e... dolciumi di stagione! In anteprima le nuovissime app per le mappe, le foto e la musica un ARtIstA A 360 GRAdI Mensile N°302 €4,99 FIFA 14 VS PES 2014 TGM DECRETA IL VINCITORE NELLA SFIDA PIÙ ATTESA DELL'ANNO! s sullA VIA pER dAmAsco p L’eroica storia del fotogiornalista Paul Conroy nell’inferno siriano 000_Cover_DCM135_A2.indd 2 STAR CITIZEN CHRIS ROBERTS SVELA I SEGRETI DEL SUO GIOCO! 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, DCB MILANO Cop_001_Cover_TGM_302_EVO.indd 1 09/10/2013 08.49.14 Se leggi Linux Pro ti potrebbero anche piacere... FAi uN sito DA PRo Intervista a Ed Templeton, skater, fotografo, pittore, imprenditore... Press-Di Distribuzione stamPa e multimeDia s.r.l. milano INTERNATIONAL Governi e malintenzionati ti spiano! difenditi con la parola chiave giusta mAcRo d’Autunno Mensile N°135 €5,90 Gangstar Vegas Sei pronto a conquistare la città del peccato? p51 PaSSwORd LE APP DEL FutuRo utuRo Da sapere Ami la natura? Ecco 10 App selezionate per te! p38 LG OPTIMUS G PRO Potenza da urlo e maxi schermo a prova dI hackeR creative E in più... Come sfruttare al massimo il flash Fotoritocco rapido Test: monopiedi economici 8 obiettivi 50 mm a confronto Dicembre 2013 L’ottica che non può mancare neLLa tua borsa! 21/10/13 15:30 Crea un sito professionale senza scrivere codice Ubuntu Facile N°9 Mensile € 2,50 AccAdemiA del codice spEAkEr AirplAy iPod 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, DCb milano - CHF 13,60 18 pagine di pura programmazione iPad 20 App PER DIpINGERE E DISEGNARE 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, dCb mIlANo Distro la Rivista pRAtICA, UtILE E INDISpENSAbILE potenza wireless iPhone THE GAMES MACHINE SCIENZA JOURNAL A! Quanto si può parlare velocemente? Sarà possibile ibernare un uomo? Come funzionano i vetri autopulenti? i criteri vincenti  Versatilità d'uso  Livello di sicurezza  Scalabilità Linux Pro 131- Mensile - €5,90 - CHF 13,60 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, DCb milanO - DisTribuTOre: Press-Di, milanO LAB TEST 90 & SCIENCE Le risposte sono negli abissi Gestire al meglio i torrent! JOU mondi perduti Raspberry Pi UN IC Pro ok te lo an o ss ov re nu inte ù pi Diventa protagonista nel mondo Linux main :: IO () main = do -- Read the file lazily contents <- getQuotes “quote.txt” let quotes = lines contents index <- randomRIO (0, (length quotes)-1) index2 <- randomRIO (0, 10) let randomWords = map (getRandomWord index2) quotes putStrLn ( randomWords !! index ) getRandomWord :: Int -> String -> String getRandomWord x = (!!x) . words La comprensione di questo codice è un esercizio per voi. Si noti come si potrebbe usare qualche metodo di verifica degli errori per assicurarsi che le citazioni siano lunghe almeno 10 parole. Questa rapida carrellata ha lo scopo di mettervi la pulce nell’orecchio e farvi interessare a Haskell per cominciare a sperimentare. Nel sito di Haskell sono presenti diversi link a risorse interessanti; avviate quindi GHCI e cominciate a programmare! LXP Prova la tua rivista anche in dioitale digitale L ∆ A confronto 5 sistemi operativi per la Raspberry Pi ∆ Le nuove CPU Intel Core Viene poi stampata una parola casuale nell’array, esattamente come prima. Potete fare anche un passo avanti e utilizzare la funzione getRandomWord. Date un’occhiata: import System.Random ARtisti CoN ubuNtu stuDio Tutti gli strumenti per audio e video e Se T T iM a n 14 calendari202014 In anteprima SOLO per te! O I A a N GEN io bbra - 19 Fe naio  CALENDARIO-AGENDA FAMIGLIA 2014 Indica il quantitativo delle pubblicazioni che vuoi ricevere La nostra famiglia 1 2 Giovedì 3 Venerdì 4 Sabato 5 Domenica nicaarTire aM 6 Lunedì 7 Martedì dìdel SiGnore ia 8 Mercoledì 9 Giovedì r teodnìdo Sac. 10 Venerdì a iM 11 Sabato ledì MeMracSSoiMo 12 Domenica 13 Lunedì ì e GioGiUvleiadno MarTir 14 Martedì S. 15 Mercoledì ì iTa d r e n e M V a l do e r e 16 Giovedì S. 17 Venerdì o t a b a S iGino papa 18 Sabato S. 19 Domenica a ic n e m 20 Lunedì DoTaTiana S. 21 Martedì ì d e vo Mercoledì Luilnario veScBo22 i GeSù aTT. d S. 23 Giovedì ì rTireVenerdì MaferlticeedMa24 S. 25 Sabato dì Domenica le o MeMracUro 26 a BaT e S. 27 Lunedì dìloMartedì i pa pa GioMavrec28 el S. 29 Mercoledì rdìGiovedì ne30 a BaT e VeOTTOBRE onioGiuseppe T Venerdì n a . 31 S 2014 1 Mercoledì e a Maria Madre di dio capodanno  S. faUSTa S. aMelia MarTire 2 !! ODO ! I È COM E SCOPRÀ IT L IA SFOG A PRATIC U S LA epifania del SiGnore S. raiMondo Sac. S. MaSSiMo S. GiUliano MarTire € 5,90 calendario-agenda per lei f.to cm15x50 € 5,90 Totale Ordine ➫ Totale quantità SE VUOI ORDINARE VIA POSTA O VIA FAX, COMPILA QUESTO COUPON Ritaglia o fotocopia il coupon, invialo in busta chiusa a: Sprea Editori S.p.A. socio unico Sprea Holding 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 ulteriori informazioni puoi scrivere a [email protected] o telefonare al 02.87158224. a NOME COGNOME S. aldo ereMiTa  S. iGino papa MARCO S. TaTiana S. ilario veScovo BaTT. di GeSù 3 a Ricevilo comodamente a casa senza spese aggiuntive S. BaSilio veSc. S. Genoveffa verGine € 6,00 calendario-agenda dei nonni f.to cm15x50 2 SeTTiMane GENNAIO Acquario • 21 Gennaio - 19 Febbraio calendario-agenda della famiglia f.to cm30x42,5 ➫ via N° a C.A.P.  a 3PROV. CITTà TEL. S. felice MarTire e-mail S. MaUro aBaTe S. Marcello i papa UGO MARIA MarTin lUTher KinG’S day SS. SeBaSTiano e faBiano MarTiri O FID S. aGneSe verGine S. vincenzo MarTire S. eMerenziana verG. LAURA S. franceSco di SaleS conv. di S. paolo 01_ICOVER_famiglia.indd 1 Olga  COMPLEANNI ANNIVERSARI 2014  GENNAIO S. TERESA VERG. • FESTE COMPLEANNI ANNIVERSARI Gli impegni di... Natalia Aspesi, Lui visto da S. GENOVEFFA VERGINE S. FRANCESCO D’ASSISI S. AMELIA MARTIRE S. PLACIDO MONACO EPIFANIA DEL SIGNORE S. BRUNO ABATE S. RAIMONDO SAC. S. PELAGIA VERGINE PESCI “il sognatore” Pianeta: Nettuno Elemento: Acqua Segno: Femminile Colore: Verde mare Transito del Sole: tra il 20 Febbraio e il 19 Marzo Pietra portafortuna: Turchese Metallo: Stagno Giorno favorevole: Giovedì, giorno di Giove GIORNO DELLA VISTA S. IGINO PAPA S. DANIELE S. TATIANA S. BRUNO S. ILARIO VESCOVO S. MAURO ABATE S. ANTONIO ABATE S. EDVIGE S. BEATRICE Gli impegni di... G. RIFIUTO DELLA MISERIA S. LUCA EVANGELISTA MARTIN LUTHER KING’S DAY S. BIAGIO FESTA DELLA CANDELORA S. AGNESE VERGINE S. LAURA S. EMERENZIANA VERG. S. PAOLO MIKI S. FRANCESCO DI SALES S. TEODORO MARTIRE S. DONATO VESCOVO CONV. DI S. PAOLO S. GIROLAMO EMILIANI S. GIOVANNI SACERDOTE SS. TITO E TIMOTEO VESC. S. APOLLONIA VERGINE S. ANGELA MERICI G.DELLA PSORIASI S. GUGLIELMO MEM. DELLA SHOAH RICORDO DELLE FOIBE S. TOMMASO D’AQUINO S. EVARISTO PAPA S. COSTANZO S. DELIA S. MARTINA MARTIRE B. V. MARIA DI LOURDES S. EULALIA VERGINE SS. FOSCA E MAURA SACRE CENERI S. GIOVANNI BOSCO SACERDOTE SS. SIMONE E GIUDA TADDEO AP. LISA GOODMAN CALENDAR N. X/2013 - ANN - € 5 ,9 0 29 Mercoledì 30 Giovedì 31 Venerdì S. ERMELINDA VERGINE DISTRIBUTORE PER L’ITALIA E PER L’ESTERO: PRESS-DI DISTRIBUZIONE S TA M PA E M U LT I M E D I A S . R . L . - 2 0 13 4 M I L A N O S. GERMANO VESCOVO 1_ICOVERnonni150X500.indd 1 S. LUCILLA VERGINE NUMERI SALVAVITA HALLOWEEN soccorso pubblico di emergenza 113 vigili del fuoco 115 nonni150X500.indd 10 carabinieri d con v. 112 emergenza sanitaria 118 NUMERI SALVAVITA olo i S. pa 12/06/13 13:04 soccorso pubblico di emergenza vigili del fuoco o e T iM 07/06/13 18:17 SS. T iT carabinieri o T eo 112 118 115 emergenza sanitaria S. VALENTINO FESTA DEGLI INNAMORATI 19 GENNAIO 22 FEBBRAIO ACQUARIO S. FAUSTINO FESTA DEI SINGLE S. GIULIANA MARTIRE 31/05/13 11:52 nonni150X500.indd 1 23 OTTOBRE 22 NOVEMBRE SCORPIONE 113 S. PATRIZIA 01_cover_SINGLELEI150X500.indd 2 DEL GATTO FESTA ceno con Giovanni fine set timan a in mo con Fed erico ntagna S. VINCENZO MARTIRE Compleanno Giorgio S. EMERENZIANA VERGINE S. FRANCESCO DI SALES 7 ici a Mer la2Shoah elpio.indd FAM GLOB_207x285_senza S. a nG MeM. del CONV. DI S. PAOLO SS. TITO E TIMOTEO VESC. 5 S. ANGELA MERICI MEM. DELLA SHOAH S. COSTANZO S. MARTINA MARTIRE S. GIOVANNI BOSCO SACERDOTE 31/05/13 15:21 12/06/13 14:33 dd 1 SINGLELEI150X500.in S. MANSUETO VESCOVO S. SILVANO 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 Cremona (CR), via Beltrami 21, è 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. www.spreastore.it (tiratura limitata) S. PIER DAMIANI DOTT. S. MARGHERITA S. ROMINA 9 S. ETELBERTO RE S. COSTANZA S. FAUSTINIANO VESCOVO S. LEANDRO Venerdì 5 PRENOTALI SUBITO SU S. TOMMASO D’AQUINO 8 S. CINZIA v e S c. a 4 S. AGNESE VERGINE palestra palestra Firma del titolare S. ANTONIO ABATE SS. SEBASTIANO E FABIANO MARTIRI Giornata alle Terme con Pia parrucchiere Data S. MAURO ABATE S. MARIO M. MARTIN LUTHER KING’S DAY h.18 shopping con Carla inizio corso di danza caraibica 3 S. FELICE MARTIRE S. BEATRICE S. AGATA VERGINE S. ORSOLA E COMPAGNE S. CRISPINO MARTIRE 6 h. 18 estetista S. TATIANA S. MARCELLO I PAPA anniversario papà e mamma S. GILBERTO VESC. S. VINCENZO MARTIRE S. IRENE S. ANTONIO MARIA VESC. Elisabetta S. MAURIZIO GIORNO DELLA MARMOTTA SS. SEBASTIANO E FABIANO MARTIRI G. DELL’OSTEOPOROSI 1 Sabato 2 Domenica 3 Lunedì 4 Martedì 5 Mercoledì 6 Giovedì 7 Venerdì 8 Sabato 9 Domenica 10 Lunedì 11 Martedì 12 Mercoledì 13 Giovedì 14 Venerdì 15 Sabato 16 Domenica 17 Lunedì 18 Martedì 19 Mercoledì 20 Giovedì 21 Venerdì 22 Sabato 23 Domenica 24 Lunedì 25 Martedì 26 Mercoledì 27 Giovedì FESTE COMPLEANNI ANNIVERSARI S. VERDIANA VERGINE S. MARIO M. S. IGINO PAPA S. ILARIO VESCOVO BATT. DI GESÙ George Eliot, Adam Bede, 1859 G. DELL’ALIMENTAZIONE S.MARISA S. ALDO EREMITA DISTRIBUTORE PER L’ITALIA E PER L’ESTERO: PRESS-DI DISTRIBUZIONE S TA M PA E M U LT I M E D I A S . R . L . - 2 0 13 4 M I L A N O S. RUGGERO S. GIULIANO MARTIRE Non nego che le donne siano stupide; Dio Onnipotente le ha fatte per vivere insieme agli uomini. S. MARCELLO I PAPA L I S A G O O D M A N C A L E N D A R N . X / 2 0 13 - A N N - € 5 , 9 0 S. FORTUNATO CVV sul retro della carta di credito) Nome e Cognome del Titolare S. MASSIMO 2014 S. FELICE MARTIRE (Codice di tre cifre che appare Scad. S. RAIMONDO SAC. FEBBRAIO BATT. DI GESÙ S. SERAFINO DA M. S. EDOARDO RE 2 EPIFANIA DEL SIGNORE S. ALDO EREMITA S. DIONIGI COLUMBUS DAY (Per favore riportare il numero della Carta indicandone tutte le cifre) S. FAUSTA S. AMELIA MARTIRE o bonifico bancario sul conto IBAN IT 05 F 07601 01600 000099075871 intestato a Sprea Editori S.P.A. Via Torino 51 - 20063 Cernusco Sul Naviglio MI Assegno bancario intestato a: Sprea Editori S.P.A. Carta di Credito N. S. GENOVEFFA VERGINE S. GIULIANO MARTIRE G. DELLA SALUTE MENTALE 02/07/13 10:05 S. BASILIO VESC. S. MASSIMO B. V. MARIA DEL ROSARIO 1 1 Mercoledì 2 Giovedì 3 Venerdì 4 Sabato 5 Domenica 6 Lunedì 7 Martedì 8 Mercoledì 9 Giovedì 10 Venerdì 11 Sabato 12 Domenica 13 Lunedì 14 Martedì 15 Mercoledì 16 Giovedì 17 Venerdì 18 Sabato 19 Domenica 20 Lunedì 21 Martedì 22 Mercoledì 23 Giovedì 24 Venerdì 25 Sabato 26 Domenica 27 Lunedì 28 Martedì 29 Mercoledì 30 Giovedì 31 Venerdì MARIA MADRE DI DIO CAPODANNO G. DEGLI ANIMALI lei, 1978 FESTE COMPLEANNI ANNIVERSARI Gli impegni di... S. FAUSTA ∆ ∆ L’adulterio è la medicina indispensabile di ogni buon matrimonio, come sa ogni moglie accorta da uno essendo lei stessa in cura o più guaritori del coito furtivo. CAPODANNO a 4 ∆ Ricevuta di versamento su CCP 99075871 2014 S F O G L I A L O E S C O P R I L A P R AT I C I TÀ DI ORGANIZZARE IL TUO TEMPO MARIA MADRE DI DIO S. BASILIO VESC. FESTA DEI NONNI PROV. SCELGO IL SEGUENTE METODO DI PAGAMENTO E ALLEGO: GENNAIO SS. ANGELI CUSTODI S. GERARDO DI BROGNE AB. C.A.P. CITTà ACQUARIO “il comunicatore” Pianeta: Urano Elemento: Aria Segno: Maschile Colore: Blu e Viola Transito del Sole: tra il 21 Gennaio e il 19 Febbraio Pietra portafortuna: Zaffiro. Metallo: Zinco, Argento. giorno di Saturno Giorno favorevole: Sabato, SINGLE per Scelta e per Amore COMPLEANNI ANNIVERSARI Gli impegni di... 1 Mercoledì 1 2 Giovedì 2 Giovedì cena a casa dei nipotini 3 Venerdì 3 Venerdì 4 Sabato e ric UMENTO T Sabatoe a B R 4 . 5 Domenica CO ST S03_INTfamiglia.indd 1 UN R ATI CE P ICA EFF TILE ILE 5 Domenica 6 Lunedì U SAB PEN IS Lunedì D 7 Martedì 6 IN 8 Mercoledì y 7 Martedì a . d io M er KinG’S r 9 Giovedì MercoledìM a 8 S. recita scuola UTh materna H.16 rTin l 10 Venerdì 9 Giovedì Mafinale di bocce Sabato 11 h.10 gatto 10 Venerdì dal veterinario 12 Domenica 11 Sabato T ia no iri Lunedì S a 13 B e 12 DomenicaS S. S MarT 14 Martedì Bia no sarta 13 Lunedì e faVinaio 15 Mercoledì 14 Martedì 16 Giovedì ine h.16etèrG 15 Mercoledì 17 Venerdì eSeconv Elsa S. a G n 16 Giovedì 18 Sabato 19 Domenica 17 Venerdì giornata con i nipoti Sabato preparativi partenza T ire 20 Lunedì 18 Mar 21 Martedì o z H.10 partenza 19 Domenica n ce 22 Mercoledì S. v in 20 Lunedì 23 Giovedì 21 Martedì 24.Venerdì G 22 Mercoledì r e v 25 Sabato na 23 Giovedì enzia r e 26 Domenica M e SCOPRI COM’È Venerdì S. 24 COMODO: 27 Lunedì IMPEGNI, Sabato 25 COMPLEANNI 28 Martedì VISITE MEDICHE Domenica eS Mercoledì 26 a TUTTO di S 29l Giovedì QUELLO CHE VUOI Lunedì 27 ceSco 30 RICORDARE n a r SEMPRE SOTTO S. f Martedì 31 Venerdì AI TUOI OCCHI 28 S. Giovanni BoSco SacerdoTe N° Indica con una ✔ la forma di pagamento desiderata LEI S. coSTanzo Mercoledì via  DEI S. ToMMaSo d’aqUino Gli impegni di...  COGNOME 5a MeM. della Shoah 2014 NOME 05/07/13 12:31 S. anGela Merici S. MarTina MarTire Voglio regalare questo calendario a: 4a  SS. TiTo e TiMoTeo veSc.  DISTRIBUTORE PER L’ITALIA E PER L’ESTERO: PRESS-DI S. Mario M. DISTRIBUZIONE STAMPA E MULTIMEDIA S.R.L. - 20134 MILANO EDO S. BeaTrice LISA GOODMAN CALENDAR N. 4/2013 - ANN - € 6,00 1 12 13 14 15 16 NONNI 17 ato Sab 18 enica Dom 19 edì Lun 20 tedì Mar 1 2 ledì Merco 22 edì Giov 23 erdì Ven 24 ato Sab 5 2 ica Domen 26 edì Lun 27 Linux Pro 136 S. anTonio aBaTe per io no podan v erGin Scegli i tuoi calendari preferiti DELLA en 1 04/12/13 16:44 • L’eco dei LUG L’eco dei LUG 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 ecodeilug@ linuxpro.it aBrUZZO anxaLUG - Lanciano www.anxalug.org il Pinguino - Teramo Non disponibile MarsicaLUG - Marsica www.marsicalug.it OpenLUG - L’aquila Non disponibile Pescara LUG www.pescaralug.org Pineto LUG www.pinetolug.org Pollinux LUG - Pollutri Non disponibile SSVLUG - San Salvo, Vasto, Termoli www.ssvlug.org SulmonaLUG http://sulmonalug.it TeateLUG - Chieti Non disponibile TeLUG - Teramo www.telug.it User Group Valle roveto http://linuxvalley-os4.blogspot.com/ BaSiLiCaTa Basilicata LUG - Potenza e Matera www.baslug.org CaLaBria 3BYLug - Trebisacce www.3bylug.tk Bogomips - Bisignano www.blug.it CastroLUG http://castrolug.altervista.org Cosenza hack Laboratory http://hacklab.cosenzainrete.it/ CSLUG - Cosenza http://cslug.linux.it CzLug Non disponibile hackLab Catanzaro http://hacklab.cz Piana LUG - Piana di Gioia Tauro Non disponibile reggio Calabria LUG http://rclug.linux.it revolutionary Mind www.revolutionarymind.org SpixLug - Spezzano albanese Non disponibile CaMPania aFr@Linux LUG www.afralinux.netsons.org afralug - afragola www.afralug.com CasertaLUG www.casertaglug.org hackaserta 81100 www.81100.eu.org hackMeetnaples napoli hackLab www1.autistici.org/hmn iGLUG - napoli e provincia 92 Linux pro 136 www.iglug.org irLUG - irpinia www.irlug.it LUG-ischia www.lug-ischia.org naLUG - napoli www.nalug.net neapolis hacklab www.officina99.org/hacklab.html Padulug - Paduli (Bn) http://linux.paduli.com SCaLUG - Scafati (Sa) http://xoomer.alice.it/scalug/ Tuxway.org - Provincia di napoli www.tuxway.org VaLug - Vallo Linux User Group www.valug.it XaLUG - Salerno http://xalug.tuxlab.org eMiLia rOMaGna aLFLUG - alfonsine www.alflug.it Borgotaro LUG - Val Taro http://btlug.it/ ConoscereLinux - Modena www.conoscerelinux.it erLUG http://erlug.linux.it Ferrara LUG www.ferrara.linux.it FoLUG - Forlì http://folug.linux.it imoLUG - imola www.imolug.org LUGPiacenza www.lugpiacenza.org PanLUG - Vignola Non disponibile PLUG - Parma http://parma.linux.it ravennaLUG www.ravennalug.org reLug - reggio emilia e provincia http://relug.linux.it riminiLug www.riminilug.it S.P.r.i.Te http://sprite.csr.unibo.it UieLinux - Valle del rubicone www.uielinux.org FriULi VeneZia GiULia GOLUG - Gorizia www.golug.it iGLU - Udine http://iglu.cc.uniud.it LUG Pordenone www.pordenone.linux.it LugTrieste http://trieste.linux.it LUG [a] [L] [P] - aquileia www.alproject.org LaZiO CiLUG - Frosinone www.cilug.org CLUG - Cassino http://cassino.linux.it/ GioveLUG - Terracina www.giovelug.org La Sapienza LUG www.lslug.org Latina LUG www.llg.it LUG Privernum Volsca - Priverno (LT) www.pvlug.org LUG rieti www.lugrieti.net LUGroma www.lugroma.org LUGroma 3 www.lugroma3.org TorLUG - Università Tor Vergata - roma www.torlug.org V.i.S.C.O.S.a. - Ciampino www.viscosa.org LiGUria Genuense Lug - Genova e d’intorni http://genova.linux.it LugGe - Genova e provincia www.lugge.net GinLug - Genova Sampierdarena www.sennaweb.org Govonis GnU/LUG - Provincia di Savona www.govonis.org SavonaLug - Savona http://savona.linux.it/ TLug-TSL - Tigullio Ligure http://tlug.linux.it/ LOMBarDia BGLug - Bergamo e provincia www.bglug.it BGLug Valle Seriana - Valle Seriana http://bglugvs.web3king.com/ GL-Como - Como www.gl-como.it GLUX - Lecco e provincia www.lecco.linux.it GULLP - Gruppo Utenti Linux Lonate Pozzolo www.gullp.it ispraLUG - ispra http://ispralug.eu/ LiFO - Varese www.lifolab.org LiFOS - Cinisello Balsamo www.lifos.org Linux Var - Varese www.linuxvar.it LoLug - Lodi e provincia www.lolug.org Lug Bocconi - Milano www.lug-bocconi.org LugBS - Brescia e provincia http://lugbs.linux.it/ Lug Castegnato - Castegnato www.kenparker.eu/LugCastegnato LugCr - Cremona e provincia www.lugcr.it Lug Crema - Crema http://filibusta.crema.unimi.it/ L’eco dei LUG LUGDucale - Vigevano www.lugducale.it LugMan - Mantova e provincia www.lugman.org LugOB - Cologne e ovest bresciano www.lugob.org MoBLUG - Monza e Brianza www.bubblesfactory.it OpenLabs - Milano www.openlabs.it POuL - Milano www.poul.org TiLug - Pavia http://pavia.linux.it ViGLug - Vignate www.viglug.org marche Ascolinux LUG/FSUG Ascoli http://marche.linux.it/ascoli/ CameLUG - Camerino www.camelug.it CMlug www.cmlug.org Egloo www.egloo.org FanoLUG www.fanolug.org Fermo LUG www.linuxfm.org/fermolug/ GLM - Macerata www.gruppolinuxmc.it/start/index.php LUG Ancona www.egloo.org LUG Jesi www.lugjesi.net LUG Marche http://marche.linux.it PDP Free Software User Group http://pdp.linux.it Picenix - Piceno http://picenix.altervista.org SenaLug - Senigallia www.lug.senigallia.biz molise Campobasso LUG http://cb.linux.it/ FrenterLUG - Larino non disponibile SmaLUG - San Martino www.smalug.org piemonte ABC Lug - Alba/Bra/Carmagnola http://abc.linux.it/ AlLug - Alessandria e provincia www.allug.it BiLUG - Provincia di Biella www.bilug.linux.it FASoLi - Alessandria e provincia http://softwarelibero.al.it/ Gallug - Galliate www.gallug.it GlugTO - Torino e provincia www.torino.linux.it IvLug - Ivrea Linux User Group www.ivlug.it SLIP - Pinerolo http://pinerolo.linux.it/ ValSusinux - Val Susa e Val Sangone www.valsusinux.it puglia BriLUG - Brindisi www.brilug.it CapitanLUG - Capitanata www.capitanlug.it LATLUG - Latiano Linux User Group www.latlug.org LUGargano www.lugargano.it LUGBari - Bari e provincia www.lugbari.org MurgiaLug - Santeramo in Colle www.open-pc.eu/index.php/murgialug/ SaLUG! - Salento http://salug.it Talug - Taranto www.talug.it www.gulp.linux.it GuruAtWork - Grosseto e provincia www.guruatwork.com Lucca LUG http://luccalug.it L.U.G.A.R - Arezzo non disponibile PLUG - Prato e provincia www.prato.linux.it PtLug - Pistoia e provincia www.ptlug.org SLUG - Siena e provincia www.siena.linux.it sardegna CeSar LUG non disponibile GNUraghe www.gnuraghe.org GULCh - Cagliari www.gulch.crs4.it Isolalug non disponibile PLUGS - Sassari www.plugs.it trentino alto adige AltinumLUG - Rovereto nondisponibile LinuxTrent - Trento http://linuxtrent.it LugBz - Bolzano www.lugbz.org sicilia CefaLug - Cefalù http://cefalug.linux.it cLUG - Caltanissetta www.clug.it EnnaLUG www.ennalug.org FreakNet MediaLab - Catania www.freaknet.org Leonforte LUG http://leonforte.linux.it LUG Catania www.catania.linux.it LUGSR - Siracusa www.siracusa.linux.it MELUG - Messina non disponibile Norp LUG - Noto, Pachino, Rosolini non disponibile PALUG - Palermo http://palermo.linux.it RgLUG - Ragusa e provincia http://ragusa.linux.it VPLUG Linux Planet - Provincia Caltanisetta www.vplug.it SputniX - Palermo www.sputnix.it toscana ACROS - Versilia, Lucca, Massa Carrara www.lug-acros.org Cancelliaperti non disponibile Elbalinux non disponibile ElsaGLUG - Val d’Elsa www.elsaglug.org FLUG - Firenze www.firenze.linux.it GOLEM - Empoli, Valdelsa http://golem.linux.it GroLUG - Grosseto www.grolug.org G.U.L.LI - Livorno www.livorno.linux.it GulP! Piombino http://gulp.perlmonk.org GULP Pisa umbria OrvietoLUG www.orvietolug.it LUG Perugia www.perugiagnulug.org TerniLUG www.ternignulug.org Valle d’aosta SLAG - Aosta www.slag.it veneto 0421ug - Provincia di Venezia www.0421ug.org BLUG - Belluno http://belluno.linux.it Faber Libertatis - Padova http://faberlibertatis.org GrappaLUG - Bassano del Grappa http://grappalug.homelinux.net/ ILC - Informatica Libera Cittadellese - FSUG http://ilc.pd.it LegnagoLUG non disponibile Linux Ludus - Villafranca (VR) www.linuxludus.it LugAnegA www.luganega.org lugSF - San Fidenzio non disponibile LUG Vicenza www.vicenza.linux.it LugVR - Verona www.verona.linux.it MontelLUG - Montebelluna www.montellug.it FSUG Padova www.fsugpadova.org RoLUG - Rovigo http://rovigo.linux.it TVLUG - Treviso www.tvlug.it VELug - Venezia www.velug.it AViLUG Schio http://www.avilug.it/doku.php NAZIONALI FSUGitalia www.fsugitalia.org Gentoo Channel Italia www.gechi.it MajaGLUG www.majaglug.net SkyLUG http://tech.groups.yahoo.com/group/skylug/ Linux pro 136 93 Guida Software Ogni mese Linux Pro vi offre i programmi e le distribuzioni più recenti su DVD Distribuzione PRO dentro il Ogni volta che troverete questo simbolo in un articolo, vorrà dire che i file citati si trovano nel DVD allegato alla rivista. OpenSUSE 13.1 (32 bit) I l lato A del DVD di questo mese ospita la release più recente della distro realizzata dal progetto OpenSUSE, sponsorizzato da un nome importante nel mondo Open Source, Novell. Come recitano le note di rilascio, racchiuso in OpenSUSE 13.1 c’è quanto di meglio si può trovare oggi in fatto di Free Software. Dal punto di vista dell’utente desktop, si hanno a disposizione i migliori ambienti, tra cui KDE 4.11 (il desktop attivo di default), Plasma Netbook, GNOME 3.10, Enlightenment 17, Xfce e LXDE. Insomma, c’è una scrivania per ogni esigenza, e tutte sono assolutamente ben integrate nell’ambiente. A corredo, poi, trovate tutta una pletora di applicazioni che coprono gli usi quotidiani. Per fare qualche esempio, tra i software aggiornati, trovate le due suite per l’ufficio LibreOffice 4.1 e Calligra 2.7. L’ottima procedura d’installazione (una delle migliori in circolazione) vi guida passo passo nella definizione delle partizioni e nella scelta dei programmi da installare. Una nota: tra i filesystem supportati trovate anche il promettente Btrfs, che pur non essendo quello di default ha subìto netti miglioramenti per prestazioni e stabilità. Server e cloud Visto che OpenSUSE è sponsorizzata da una grande azienda software, non potevano mancare novità dal punto di vista server e cloud. Per quel che riguarda la virtualizzazione, è presente KVM 1.6, un wrapper per gli eseguibili forniti da Qemu; inoltre è supportato Xen. Per i database, OpenSUSE continua a presentare MySQL Community Server (un po’ ignorato da altre distro), ma al contempo offre anche MariaDB e PostegreSQL. Apache 2.4 è invece il server Web preferito, e porta con sé diversi potenziamenti per quel che riguarda il multi-processing. Infine l’aspetto cloud, sempre più importante per chi lavora con Linux. La release 13.1 offre varie tecnologie per il cloud, inclusa la versione più aggiornata di OpenStack Havana. Si nota poi il debutto di s3fs, un filesystem per FUSE che consente di montare i bucket di Amazon S3 come se fossero un filesystem locale. A dimostrazione che OpenSUSE è una distro davvero eclettica, non mancano poi nuovi strumenti per gli sviluppatori (non c’è solo Fedora per chi programma): trovate infatti il nuovo GCC 4.8 e anche la versione 5.1 del toolkit Qt. Inoltre si hanno a disposizione Rails 4, Ruby 2.0 e PHP 5.4.20. Lo stesso YaST (il pluripremiato tool di configurazione della distro) è stato convertito in Ruby, così da consentire agli sviluppatori di potenziarlo ulteriormente. Diversamente da altre distro (chi ha detto Ubuntu?) 94 LINUX PRO 136 Il desktop di OpenSUSE è sempre più elegante e la distro ha strumenti per ogni esigenza. Il centro di controllo YaST continua a essere un tool di prima categoria OpenSUSE rispetta la privacy dell’utente e lo aiuta a rendere sicura la macchina con un firewall preinstallato e attivo di default. Infine, sotto il cofano si trova un kernel della serie 3.11 che offre grandi vantaggi in termini di prestazioni, stabilità e funzionalità. Il supporto (cioè gli aggiornamenti di sicurezza e la correzione dei bug) previsto per questa versione di OpenSUSE è di ben tre anni. Insomma, questa distro ha fatto enormi passi avanti e ora si propone come scelta ottimale per ogni tipo di utente, da quello desktop che si limita a navigare, scrivere e creare/fruire contenuti multimediali, a chi invece si occupa, anche professionalmente, di server, cloud e virtualizzazione. Ben fatto, OpenSUSE! LXP Slackware 14.1 Il lato B del DVD, tra le altre cose, ospita BackBox, una distro pensata per la sicurezza e il penetration testing, ma soprattutto la nuova Slackware 14.1, una delle più storiche delle distro GNU/ Linux. Dedicata ai “puristi” del sistema del Pinguino, Slackware 14.1 adotta il kernel 3.10.17 (che verrà supportato per due anni), GCC 4.8.2, Apache 2.4.6, tutta una serie di linguaggi di programmazione, KDE 4.10.5, diversi browser e molte applicazioni, tra le quali Pidgin 2.10.7, GIMP 2.8.6, X-Chat 2.8.8, XSane 0.998 e Pan 0.139. Per saperne di più leggete le note di rilascio: http:// www.slackware.com/ releasenotes/14.1.php. COD. LP124 COD. LP125 COD. LP126 ∆ SERVER DI POSTA CON KERIO CONNECT ∆ GUIDA AI BREVETTI Diventa protagonista nel mondo Linux 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, DCB MILANO € 5,90 I primi rudimenti di programmazione con “Guido il Robot” Migliore di Ubuntu ! Mint ExtraForte Le caratteristiche La filosofia I nuovi desktop I punti chiave 10 pagine di pura programmazione ACCADEMIA DEL CODICE Concetti Le tipologie dei dati in Python Django Costruire una Web App in pochi minuti Python Come distribuire i propri programmi Linux embedded Aria, la scheda italiana per creare server, sistemi di allarme, controllare processi e altro ancora Bitcoin, la valuta digitale Fai “produrre” al tuo computer la nuova moneta che funziona sul Web senza il controllo di una banca Inoltre… Samsung Camera 16 Megapixel con Android e schermo touch da 4,8’’ Unison Realizza un clone di Dropbox senza problemi di privacy € 5,90 SFIDA PER PROGRAMMATORI COD. LP128 NUMERO 125 - GENNAIO 2013 COD. LP129 € 5,90 Linux Pro Mensile N°126 €5,90 CHF 13,60 Il concorso Liberated Pixel Cup dimostra che lo sviluppo Open Source non prevede solo la realizzazione di noiosi programmi, ma anche divertenti videogiochi Distributore: Press-Di, Segrate (MI) LXP126_cover.indd 1 NUMERO 124 - DICEMBRE 2012 Se leggi Linux Pro, ti possono piacere anche... COD. LP127 Raspberry Pi PRO La nuova NUMERO 1 delle distro! € 5,90 ∆ MOODLE N. 126 - RIVISTA + DVD € 5,90 - CHF 13,60 23/01/13 17:26 NUMERO 126 - FEBBRAIO 2013 COD. LP130 NUMERO 127 - MARZO 2013 COD. LP131 OFFERTA SPECIALE I segreti dello smartphone Android più acclamato dell’anno COD. SAJ4 € 4,90 € 5,90 NUMERO 128 - APRILE 2013 COD. LP132 € 5,90 NUMERO 132 - AGOSTO 2013 € 5,90 NUMERO 129 - MAGGIO 2013 COD. LP133 € 5,90 NUMERO 131 - LUGLIO 2013 COD. LP134 COD. LP135 € 5,90 NUMERO 133 - SETTEMBRE 2013 € 5,90 NUMERO 130 - GIUGNO 2013 € 5,90 NUMERO 134 - OTTOBRE 2013 COD. SLP7 € 9,90 COD. SLP8 € 9,90 € 5,90 NUMERO 135 - NOVEMBRE 2013 Completa la tua collezione ordinando gli arretrati su www.spreastore.it/linuxpro oppure utilizzando il modulo qui sotto SCEGLI L‘ARRETRATO CHE VUOI ORDINARE NOME SE VUOI ORDINARE VIA POSTA O VIA FAX, COMPILA QUESTO COUPON COGNOME Ritaglia 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 informazioni puoi scrivere a [email protected] oppure telefonare allo 02/87158224 tutti i giorni dalle 14.00 alle 18.00 VIA INSERISCI I CODICI delle pubblicazioni che desideri ricevere: CITTÀ TEL. € E-MAIL PROV. € 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) SCELGO IL SEGUENTE METODO DI SPEDIZIONE: ∆ Bonifico intestato a Sprea Editori S.P.A. Abbonamenti sul conto Indica con una ˝ la forma di spedizione desiderata Spedizione tramite posta tradizionale al costo aggiuntivo di € 2,90 Spedizione tramite Corriere Espresso al costo aggiuntivo di € 7,00 TOTALE COMPLESSIVO Data C.A.P. € € Totale Ordine N° l € Firma del titolare 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. 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) In edicola il 24 gennaio NEL PROSSIMO NUMERO Hai un argomento da proporci? Scrivi a [email protected] INTERFACCE GRAFICHE SENZA CONFINI Siamo andati alla scoperta di Qt5, la nuova versione del framework che fornisce agli sviluppatori gli strumenti ideali per creare app multipiattaforma E inoltre: Foto in ordine Scegli le news! Desktop fai da te Con Shotwell, gestire le foto e riorganizzare la vostra raccolta di immagini su disco fisso è facile e divertente: ecco tutte le potenzialità di un eccellente programma Con i feed RSS puoi scegliere quali notizie ricevere e rimanere sempre informato sugli argomenti che ti interessano. Ecco i migliori programmi Open Source per le news Massima personalizzazione, minimo investimento di risorse: ecco gli strumenti perfetti per creare il desktop fatto su misura per le tue esigenze LINUX PRO Mensile - 2013 - 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] Brunetta Pieraccini (segreteria) Digital media coordinator: Massimo Allievi Realizzazione editoriale: Oku Studio Iconografia e fotografie: Marco Coppola Contenuti tratti da “Linux Format” - Future Publishing Limited Plc., Bath (UK) Pubblicità: Luigi De Re - [email protected] Tel. 339 4546500 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’indirizzo www.myabb.it/linuxpro oppure scrivi ad abbonamenti@ myabb.it; 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. Arretrati Si sottoscrivono online all’indirizzo: www.spreastore.it/linuxpro Per informazioni o richieste: [email protected] oppure 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.36 www.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 PRO Pubblicazione 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/NA ISSN: 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. Ecco la RIVISTA CHE STAVI ASPETTANDO News, prove, guide pratiche, hacker zone La tua rete ovunque Facile, con FRITZ! FRITZ!Box 7390 Massime prestazioni e comfort per la tua rete e Internet! Noto per la sua versatilità, FRITZ!Box realizza ogni tuo desiderio in fatto di comunicazione trasformando la mera connettività in una porta su infinite possibilità.  Modem xDSL integrato e WLAN N con 2 x 300 Mbit/s simultanei  Centralino, DECT, segreteria e fax per la massima comodità Condivisione in rete di stampanti USB e memorie (NAS) Perfetta integrazione di iPhone e Android con le App gratuite FRITZ!OS con media server, MyFRITZ! e molto altro ancora Maggiori informazioni sul sito fritzbox.eu FRITZ!Box: comfort e molteplici funzioni per ogni tipo di connessione, FRITZ!Fon: telefono, e-mail, radio web, FRITZ!Powerline: rete domestica attraverso la linea elettrica, FRITZ!WLAN Repeater: estensione della portata wireless, FRITZ!DECT 200: presa di corrente intelligente, FRITZ!Apps: accesso remoto al FRITZ!Box 13/023 I prodotti FRITZ! – pluripremiati: avm.de/awards_en fritzbox.eu [email protected]
Copyright © 2024 DOKUMEN.SITE Inc.