130

Share Embed Donate


Short Description

130...

Description

ioProgrammo

AL VIA IL TUTORIAL SU ZEND FRAMEWORK

Come utilizzare al meglio l’ambiente PHP per eccellenza VERSIONE STANDARD

VERSIONE PLUS

Anno XII - N°9 (130)

RIVISTA+CD E6,90

RIVISTA+LIBRO+CD E9,90

PER ESPERTI E PRINCIPIANTI

Poste Italiane S.p.A Spedizione Spedizione in inA.P. A.P. ••D.L. D.L.353/2003 353/2003(conv.in (conv.inL.27/02/2004 L.27/02/2004n.46) n.46)art.1 art.1comma comma22DCB DCBROMA ROMAPeriodicità • Periodicità mensile ANNO N.9 (130) mensile 2007 •2008 ANNO• XI • N.4XII, (113) • SETTEMBRE • APRILE

HTML

IL TUO SITO WEB PRONTO PER PAYPAL

Come implementare un carrello elettronico per gli acquisti PROGRAMMARE L'IPHONE • SVILUPPARE UN SOFTWARE DI MASTERIZZAZIONE • REALIZZARE APPLICAZIONI RIA

PYTHON

ti programmo così!

SQLAlchemy per trasformare i dati di un DB in istanze del linguaggio JAVA

TUTTO SU COME SVILUPPARE APPLICAZIONI PER IL CELLULARE PIÙ CHIACCHIERATO DELLA STORIA

LA LIBRERIA VISUAL LIBRARY DI NETBEANS Strumenti di visualizzazione evoluti nelle applicazioni

SISTEMA Come funziona

MOBILE

GESTIRE I COMPONENTI GRAFICI DI J2ME

il sistema operativo che equipaggia il gioiello di casa Apple

Adoperare form, etichette, campi di testo e altri elementi grafici

TECNICA Cosa bisogna conoscere

DATABASE

prima di addentrarsi nel codice

PRIMI PASSI IN ADO.NET ENTITY FRAMEWORK

SOFTWARE Una prima applicazione

Interrogare un database senza conoscere struttura e relazioni

da provare immediatamente sullo Smartphone

CMS

SCRIVERE UN NUOVO MODULO PER DRUPAL

SCOPRI IL SIMULATORE Per sviluppare anche senza possedere il dispositivo

Progettare un plug-in Ajax per visualizzare le immagini SOFTWARE

NERO 8 FAI DA TE! Come sfruttare le API di Windows per sviluppare un software di masterizzazione C#

PC HARDWARE MONITORING EDIZIONI MASTER

001_ioprog130.indd 1

UTILIZZARE GLI OBJECT RELATIONAL MAPPING

WMI per riconoscere lo stato dei dischi removibili

LE RICETTE PER USARE ECLIPSE

Creazione, compilazione ed esecuzione di un progetto Java

CODICE S O RG E N T E SUL CD

JAVA

VISUAL BASIC .NET

JavaFX Script per creare facilmente interfacce grafiche

Gli strumenti per gestire resoconti di ogni tipologia

SVILUPPARE STAMPE CON APPLICAZIONI RIA CRYSTAL REPORT

POSTA ELETTRONICA DAL WEB CON PHP

RoundCube, leggi la posta dal tuo sito in stile Gmail/Hotmail

SNIPPET E DI CneOi tuDoiIC lavori

20

da usare subito

SOLUZIONI GLI ALGORITMI E LE TECNICHE PER RAPPRESENTARE ENTITÀ GEOMETRICHE CON UN INSIEME DI PIXEL: LA RASTERIZZAZIONE www.edmaster.it

17-07-2008 12:08:14

004-005 editoriale:004-005 editoriale

Anno XII - N.ro 09 (130) - Settembre 2008 Periodicità: Mensile Reg. Trib. di CS al n.ro 593 del 11 Febbraio 1997 Cod. ISSN 1128-594X E-mail: [email protected] http://www.edmaster.it/ioprogrammo http://www.ioprogrammo.it Direttore Editoriale: Massimo Sesti Direttore Responsabile: Massimo Sesti Responsabile Editoriale: Gianmarco Bruni Vice Publisher: Paolo Soldan Collaboratori: C. Pelliccia, F. Paparoni, E. Bottari, F. Grimaldi, A. Leganza, F. Cozzolino, G. De Marco, M. Buccio, C. Morano, G. Malanga, G. Ascione, M. Morelli, G.Pennella Segreteria di Redazione: Emanuela Giordano Consulenza Redazionale: SET S.r.l. G. Forlino, P. Mannelli Realizzazione grafica: Cromatika S.r.l. Art Director: Paolo Cristiano Responsabile grafico di progetto: Salvatore Vuono Responsabile area tecnica: Giancarlo Sicilia Illustrazioni: M. Veltri Impaginazione elettronica: Francesco Cospite, Lisa Orrico, Nuccia Marra, Luigi Ferraro Realizzazione Multimediale: SET S.r.l. Realizzazione CD-Rom: Paolo Iacona Pubblicità: Master Advertising s.r.l. Via C. Correnti, 1 - 20123 Milano Tel. 02 831212 - Fax 02 83121207 e-mail [email protected] Sales Director: Max Scortegagna Editore: Edizioni Master S.p.a. Sede di Milano: Via Ariberto, 24 - 20123 Milano Sede di Rende: C.da Lecco, zona ind. - 87036 Rende (CS) Presidente e Amministratore Delegato: Massimo Sesti Direttore Generale: Massimo Rizzo ABBONAMENTO E ARRETRATI

ITALIA: Abbonamento Annuale: IOPROGRAMMO (11 NUMERI) E59,90 SCONTO 21% SUL PREZZO DI COPERTINA DI E75,90 • IOPROGRAMMO CON LIBRO (11 NUMERI) E75,90 SCONTO 30% SUL PREZZO DI COPERTINA DI E108,90 Abbonamento Biennale: IOPROGRAMMO (22 NUMERI) E75,90 SCONTO 50% SUL PREZZO DI COPERTINA DI E151,80 • IOPROGRAMMO CON LIBRO (22 NUMERI) E108,90 SCONTO 50% SUL PREZZO DI COPERTINA DI E217,80 OFFERTE VALIDE FINO AL 30/09/2008. Costo arretrati (a copia): il doppio del prezzo di copertina + E 5.32 spese (spedizione con corriere). Prima di inviare i pagamenti, verificare la disponibilità delle copie arretrate allo 02 831212. La richiesta contenente i Vs. dati anagrafici e il nome della rivista, dovrà essere inviata via fax allo 02 83121206, oppure via posta a EDIZIONI MASTER via C. Correnti, 1 - 20123 Milano, dopo avere effettuato il pagamento, secondo le modalità di seguito elencate: • cc/p n.16821878 o vaglia postale (inviando copia della ricevuta del versamento insieme alla richiesta); • assegno bancario non trasferibile (da inviarsi in busta chiusa insieme alla richiesta); • carta di credito, circuito Visa, Cartasì, o Eurocard/Mastercard (inviando la Vs. autorizzazione, il numero di carta di credito, la data di scadenza, l'intestatario della carta e il codice CVV2, cioè le ultime 3 cifre del codice numerico riportato sul retro della carta). • bonifico bancario intestato a Edizioni Master S.p.A. c/o BCC MEDIOCRATI S.C.AR.L. IBAN: IT 85 Q 07062 80881 000000012000 (inviando copia della distinta insieme alla richiesta). SI PREGA DI UTILIZZARE IL MODULO RICHIESTA ABBONAMENTO POSTO NELLE PAGINE INTERNE DELLA RIVISTA. L’abbonamento verrà attivato sul primo numero utile, successivo alla data della richiesta. Sostituzioni: qualora nei prodotti fossero rinvenuti difetti o imperfezioni che ne limitassero la fruizione da parte dell’utente, è prevista la sostituzione gratuita, previo invio del materiale difettato. La sostituzione sarà effettuata se il problema sarà riscontrato e segnalato entro e non oltre 10 giorni dalla data effettiva di acquisto in edicola e nei punti vendita autorizzati, facendo fede il timbro postale di restituzione del materiale. Inviare il CD-Rom difettoso in busta chiusa a: Edizioni Master - Servizio Clienti - Via C. Correnti, 1 - 20123 Milano Assistenza tecnica: [email protected] Servizio Abbonati: tel. 02 831212 @ e-mail: [email protected]

Stampa: Arti Grafiche Boccia S.p.a. Via Tiberio Felice, 7 Salerno Duplicazione CD-Rom: Neotek S.r.l. C.da Imperatore - Bisignano (CS) Distributore esclusivo per l’Italia: Parrini & C S.p.A. Via Vitorchiano, 81 - Roma Finito di stampare nel mese di Agosto 2008

Nessuna parte della rivista può essere in alcun modo riprodotta senza autorizzazione scritta della Edizioni Master. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Edizioni Master non sarà in alcun caso responsabile per i danni diretti e/o indiretti derivanti dall’utilizzo dei programmi contenuti nel supporto multimediale allegato alla rivista e/o per eventuali anomalie degli stessi. Nessuna responsabilità è, inoltre, assunta dalla Edizioni Master per danni o altro derivanti da virus informatici non riconosciuti dagli antivirus ufficiali all’atto della masterizzazione del supporto. Nomi e marchi protetti sono citati senza indicare i relativi brevetti. “Rispettare l’uomo e l’ambiente in cui esso vive e lavora è una parte di tutto ciò che facciamo e di ogni decisione che prendiamo per assicurare che le nostre operazioni siano basate sul continuo miglioramento delle performance ambientali e sulla prevenzione dell’inquinamento”

Certificato UNI EN ISO 14001 N.9191.EMAS

Certificato n.6168 L’Universo Tecnologico www.itportal.it del 11/12/2007

22-07-2008

15:21

Pagina 4

Questo mese su ioProgrammo

M MA QUANT’È BELLO L’IPHONE… SPERIAMO PERÒ CHE IL PROSSIMO SIA ANCHE UTILE! A un paio di mesi dall’uscita nel nostro paese del tanto atteso “melafonino” siamo a tirare un po’ le somme, dopo averne fatto la diretta conoscenza. L’iPhone è figo, non c’è dubbio. L’iPhone è sottile, non c’è dubbio. L’iPhone ha una comoda e originale interfaccia touchscreen. Ma è largo quasi quanto la padella per le bistecche usata da mia madre, e anche la sua lavatrice ha l’interfaccia con lo schermo che basta sfiorare, e la centrifuga si avvia in un lampo. Magari la lavatrice di mamma non avrà le stesse accattivanti icone, ma la centrifuga gira che è un piacere. Che queste parole non sembrino un attacco a occhi chiusi diretto al “gioiellino” della casa di Steve Jobs da parte di uno che da sempre usa a intermittenza Windows e Linux snobbando un po’ la mela di Cupertino per ignoti motivi, probabilmente ancestrali, ma è che siamo rimasti un tantino delusi da quello che si può fare con il “fashion-fonino” per eccellenza di questi ultimi mesi. Sì, ok… ha il WI-FI, il BLUETOOTH, supporta anche (ma soltanto dalla seconda release) le reti 3G, ha l’accelerometro, il caffè che fa non è esattamente alla napoletana, è sicuramente veloce nella risposta

J CD J WEB

nome_file.zip

(mooolto più dell’HTC Diamond, tanto per citarne uno) quando le dita scorrono sullo schermo lanciando immagini come fossero tanti piccoli frisbee e, soprattutto, è chiuso come le porte delle chiese quando ti vuoi confessare. È forse questa la cosa che ci indispone maggiormente. È chiuso nel senso che per sviluppare un’applicazione da far girare sull’iPhone, c’è ovviamente bisogno dell’SDK distribuito da Apple. E quando l’SDK non sarà più soltanto una versione beta, sarà a pagamento. E chi vorrà distribuire le proprie applicazioni dovrà farlo per forza tramite l’App Store, con i vincoli imposti dallo stesso. Non ci sembra una bella mossa, sinceramente, anche se c’è da riconoscere che questo certificherà in maniera inequivocabile le applicazioni dell’App Store. Mentre aspettiamo la terza versione dell’iPhone, che speriamo essere in grado di fare anche altro, iniziamo a dare uno sguardo ad Openmoko (www.openmoko.com), per esempio, e al suo primo nato: Freerunner. Da questo sistema Open Source sì che ci aspettiamo grandi cose. E siamo sicuri che le vedremo. Piero Mannelli

All’inizio di ogni articolo, troverete un simbolo che indicherà la presenza di codice e/o software allegato, che saranno presenti sia sul CD (nella posizione di sempre \soft\codice\ e \soft\tools\) sia sul Web, all’indirizzo http://cdrom.ioprogrammo.it

TUTTO SU COME SVILUPPARE APPLICAZIONI PER IL CELLULARE PIÙ CHIACCHIERATO DELLA STORIA  SISTEMA

Come funziona il sistema operativo che equipaggia il gioiello di casa Apple  TECNICA

Cosa bisogna conoscere prima di addentrarsi nel codice

 SOFTWARE

Una prima applicazione da provare immediatamente sullo SmartPhone

004-005 editoriale:004-005 editoriale

22-07-2008

15:21

Pagina 5

Questo mese su ioProgrammo

NERO 8 FAI DA TE! Come sfruttare le API di Windows per sviluppare un software di masterizzazione pag. 72 SOFTWARE Progetti java con eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 22 Iniziamo a conoscere l'ambiente di sviluppo e le tecnologie per realizzare software per il nuovo gioiello di casa Apple. Vedremo come si progetta un’applicazione, riuscendo a testarla anche se non possediamo il costoso smartphone

IOPROGRAMMO WEB Creare un nuovo modulo per drupal . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 26 Una della potenzialità dei nuovi CMS è quella di poterne aumentare le funzionalità attraverso la creazione di moduli dedicati a un compito particolare, facilmente gestibili e integrabili all'interno del CORE dell’applicazione

Primi passi con Zend Framework . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 30 Esaminiamo in dettaglio la struttura del più noto ambiente per Web Application PHP. Getteremo le basi per progettare un’applicazione basata sul paradigma Model View Controller

Roundcube. La posta in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 34 Installiamo e configuriamo un potente software gratuito di webmail. Con Roundcube avremo un sistema capace di gestire i messaggi così come fanno i mostri sacri Gmail,Hotmail e Yahoo!

Il tuo sito pronto per PayPal . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 39 In questo primo articolo ci occuperemo di descrivere l’insieme dei servizi di pagamento sicuro offerti da Paypal. Analizzeremo, altresì, gli strumenti per l’integrazione dell’IPN all’interno di un proprio sito web

Creare un image viewer con java . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 44 Scopriamo come sfruttare alcune delle funzioni principali della Visual Library, una libreria opensource distribuita come parte di Netbeans. La adopereremo per realizzare un visualizzatore di immagini con pochissime righe di codice

MOBILE Videogiochi in Java per cellulari (quarta parte) . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 54 Dopo aver introdotto i principi di programmazione delle MIDlet, il corso prosegue illustrando i componenti grafici di alto livello, indispensabili in qualsiasi applicazione MIDP: etichette, bottoni e gestione delle immagini

SISTEMA Creare report con Visual Basic.NET . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 60 In questo articolo spiegheremo come utilizzare il tool dedicato alla reportistica fornito con Visual Studio: Crystal Reports. Vedremo la struttura di un report e come integrare lo stesso all’interno di una nostra applicazione

Masterizzazione facile con C# . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 72 La versatilità del .NET Framework permette,

tra le altre cose, anche di scrivere dati su supporti ottici. Vediamo praticamente come realizzare un’applicazione di masterizzazione sfruttando un componente COM integrato nel sistema

Monitorare le periferiche del PC . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 84 Utilizziamo WMI per rilevare i cambiamenti di stato dei dispositivi removibili. Inserimento, modifica e rimozione di supporti CD-rom/DVD-rom, USB Mass Storage, Memory Card e via discorrendo

Database come istanze di Python . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 91 SQLAlchemy è un nuovo Object-Relational Mapper che offre agli sviluppatori, stanchi dei soliti approcci alle basidati, un nuovo modo di pensare e concepire il codice e l'SQL, sfruttando un unico strumento integrato

Utilizzare Ado.Net Entity Framework . . . . . . . . . . . . . . . . . . . . . . . . . . pag. 99 Visual studio 2008 integra un ORM molto evoluto che permette di astrarre il modello relazionale in un modello a oggetti. Tale tecnica consente di interrogare un DB senza conoscerne struttura e relazioni

RUBRICHE Gli allegati di ioProgrammo pag. 8

Il software in allegato alla rivista

Il libro di ioProgrammo pag. 6

Il contenuto del libro in allegato alla rivista

News

Un punto cruciale e di estremo interesse nell’ambito della grafica computazionale è il processo con il quale si convertono entità, descritte nel continuo, in corrispondenti entità discrete, ossia insiemi di pixel

pag. 10

Le più importanti novità del mondo della programmazione

Biblioteca

pag. 67

I migliori testi scelti dalla redazione

Tips & Tricks

pag. 48

Una raccolta di trucchi da tenere a portata di... mouse

Software

SOLUZIONI Il processo di rasterizzazione . . . . . . . . . . . . . . . . . . . . . . . . . pag. 110

QUALCHE CONSIGLIO UTILE I nostri articoli si sforzano di essere comprensibili a tutti coloro che ci seguono. Nel caso in cui abbiate difficoltà nel comprendere esattamente il senso di una spiegazione tecnica, è utile aprire il codice allegato all’articolo e seguire passo passo quanto viene spiegato tenendo d’occhio l’intero progetto.

pag. 105

I contenuti del CD allegato a ioProgrammo.

http://forum.ioprogrammo.it

006 Presentaz Libro:008

22-07-2008

15:22

Pagina 6

Le versioni di ioProgrammo

PLUS e n o i s Ver

RIVISTA + LIBRO + CD-ROM

in edicola

,90

9h

I contenuti del libro POCKET EXCEL 2007 MACRO rogrammare le macro è contemporaneamente una sfida e un gioco, ed è molto più semplice di quanto si possa pensare. Vederle produrre i risultati desiderati, poi, è una notevole soddisfazione. Infatti si potrà orgogliosamente dire: questo l’ho fatto io! Per chi utilizza con dimestichezza Microsoft Excel, il mondo delle macro è un passaggio obbligato per arricchire il foglio elettronico di nuove caratteristiche e funzionalità, di automatismi creati appositamente per le proprie esigenze. Questo libro ha un taglio pratico e ha l’obiettivo di indicare con semplicità le tecniche da adottare nell’utilizzo delle macro, per ottenere rapidamente i risultati desiderati. L’aspetto più importante è comprendere che le immense potenzialità delle macro possono essere sfruttate iniziando con la creazione di quelle più semplici, per aumentarne progressivamente le complessità, fino a realizzare macro (anche dette funzioni o routine) molto articolate, in grado di aprire un documento, cercare un’informazione, chiedere all’utente cosa fare e agire di conseguenza.

P

G 6/Settembre 2008

AMPLIARE LE POTENZIALITÀ DI EXCEL CON FUNZIONI E PROGRAMMAZIONE • Imparare a sfruttare le potenzialità di Excel attraverso le macro. • Il linguaggio VBA: Visual Basic for Application • Visual Basic Editor • Funzioni, routine e subroutine • Operatori, variabili, matrici e costanti • Esecuzione condizionale e ciclica delle istruzioni • Gestione degli errori • Creare finestre di dialogo • Interagire con celle, fogli e cartelle h t t p : / / w w w. i o p r o g r a m m o . i t

008 Presentaz CDRom 1:010

22-07-2008

15:23

Le versioni di ioProgrammo

Pagina 8

Posta elettronica con Visual basic

BASE e n o i s r Ve

SPECIALE TOOL

,90

6h

+ CD-ROM

RIVISTA

in edicola

Molte volte, sviluppando una qualunque applicazione, ci si trova in situazioni particolari e impreviste che provocano a volte la sgradevole sensazione di non sapere cosa fare. L’integrazione di un particolare componente che intervenga sui file di Office piuttosto che su quelli in formato PDF, la necessità di testare un’espressione regolare prima di inserirla nel programma o, ancora, la volontà di dotare l’applicazione che si sta creando di un’accattivante interfaccia che distingua il nostro programma dalla marea di applicazioni in circolo. Spesso si perde prezioso tempo cercando la soluzione adatta al problema di turno. Proprio per questo, nel CD-Rom allegato a questo numero proponiamo una raccolta di componenti, tool e programmi che di sicuro agevoleranno il lavoro quotidiano di chi ci segue. Gli attrezzi giusti per inserire un motore antivirus nelle proprie applicazioni o per proteggere il proprio codice da impertinenti decompilatori, e ancora i programmi per conservare le porzioni riutilizzabili del proprio prezioso codice. Sfogliando il CD-Rom troverete tutti questi tool, e molti altri ancora, pronti da installare ed utilizzare per perfezionare il vostro lavoro…e divertimento!

Come usare l’interfaccia del CDRom IL SOFTWARE Una accurata recensione dei contenuti

IL SOFTWARE L’elenco del software contenuto nelle categorie

IN EVIDENZA Il top software del mese individuato dalla redazione

DIMENSIONE

IL SOFTWARE

La dimensione del software sul CD

Il software diviso in categorie per una comoda consultazione

SALVA Clicca qui per installare o salvare il software sul tuo PC

HOME Torna alla pagina iniziale del CD-ROM

INFO CONTATTACI Vuoi inviare una email alla redazione con le tue richieste

G 8/Settembre 2008

RICERCA SOFTWARE

Abbonamenti informazioni e servizi utili

Il database di tutti i software pubblicati da ioProgrammo anche gli arretrati

h t t p : / / w w w. i o p r o g r a m m o . i t

010-011:014-015

17-07-2008

12:52

Pagina 10

NEWS 

News PICCOLI PIRATI CRESCONO

M

icrosoft ha reso pubblici i risultati di un'indagine mirata a individuare le abitudini sull'uso dei computer da parte di bambini e adolescenti. La realtà dei fatti, già palese da tempo, è abbastanza inquietante. I baby-informatici, infatti, crescono in un ambiente dove la pirateria è all'ordine del giorno, e viene vista anzi come una strada, facile e veloce, per acquisire informazioni, conoscenza e, soprattutto, software e materiale multimediale come film e brani MP3. A nulla servirebbero, quindi, i vari software utilizzati dai genitori per limitare e controllare l'uso di Internet, e del computer in genere. La fascia d'età interessata dallo studio condotto dalla casa di Redmond, infatti, è un particolare tipo di utenza. Bambini e adolescenti hanno molto più tempo a disposizione rispetto a un adulto, e sono certamente dotati di maggiore elasticità mentale; è proprio quest'ultima che li avvantaggia nell'apprendimento di nuovi tool, software e tecniche da utilizzare. Il 40% dei bambini intervistati, appartenente, inoltre, a una fascia d'età compresa tra gli 11 e 16 anni, ha candidamente ammesso di cercare sul Web materiale pirata, pur sapendo che si tratta di un'azione illegale. Microsoft "se la cava" con il commento del suo responsabile del settore antipirateria di Microsoft UK: "I genitori dovrebbero prestare maggiore attenzione alle attività svolte propri figli davanti al PC”. Solita strategia del terrore, quindi, che probabilmente è proprio la causa di questo fenomeno baby pirata.

G 10 /Settembre 2008

GMAIL? SEMPRE PIÙ SICURO!

L’

implementazione del nuovo servizio non è ancora ufficiale, e non è disponibile per tutti gli utenti. Si tratta di una nuova e originale caratteristica di Google che offre maggior sicurezza ai suoi utenti. Ogni persona che dispone di un account Gmail potrà controllare in tempo reale se qualcun altro sta utilizzando la sua casella di posta. Il sistema fornirà dei completi log , attraverso i quali l’utente potrà monitorare gli ultimi accessi effettuati sul suo account, gli IP di provenienza e gli orari nei quali sono stati effettuati i login. Qualora si dovesse trovare una sessione aperta e loggata, l’utente avrà anche la possibilità di “terminarla” , effettuando il logout alla persona che si era indebitamente loggata al suo posto. Questa nuova feature di Google è stata pensata per proteggere – ad esempio - coloro che, controllando la propria casella e-mail da una postazione all’interno di un Internet Cafè, distrattamente lasciano aperto il loro account e danno la possibilità

a chiunque passi da quella postazione di controllare la sua posta. È stata pensata anche per coloro che magari hanno rivelato la propria password a qualche amico o collega, e questi approfitta per controllare la posta dell’ingenuo proprietario della casella. Controllare gli accessi effettuati al proprio account darà la possibilità di capire se qualcun altro usa la propria casella senza la preventiva autorizzazione, con tanto di indirizzo IP, che si rivelerà molto utile per eventuali denuncie presso le autorità competenti.

NOKIA SI COMPRA SYMBIAN E LO TRASFORMA IN OPEN SOURCE

F

orse la spinta è stata data dall’imminente uscita di Android, la piattaforma per cellulari e smartphone creata da Google per contrastare il dominio Microsoft nel mondo della telefonia mobile. Nokia non è rimasta a guardare, e si è impegnata ad acquisire le azioni di Symbian non ancora in suo possesso. La casa finlandese, che deteneva già il 53% dei titoli di borsa di Symbian, tenta in questo modo di contrastare l’imminente ingresso di BigG nel mondo degli SO mobili. Nulla di

nuovo sotto il sole, osserveranno alcuni, visto che da sempre Nokia e Symbian vanno a braccetto, e il produttore di telefoni contribuisce attivamente allo sviluppo e all’aggiornamento del S.O. in questione. La novità, invece, sta nel cambio di licenza operato da Nokia. Symbian diventerà, infatti, Open Source a tutti gli effetti. Guarda caso, la stessa licenza dovrebbe essere quella adottata da Android di Google. Una volta terminate le procedure di acquisizione, Nokia si impegnerà, assieme alla Symbian Foundation, della conversione del codice sorgente di Symbian da chiuso a open source. La “metamorfosi” dovrebbe avvenire entro un paio d’anni, di fatto avvantaggiando la diffusione della già utilizzatissima piattaforma di sviluppo mobile. h t t p : / / w w w. i o p r o g r a m m o . i t

010-011:014-015

17-07-2008

12:52

Pagina 11

NEWS 

IPHONE: RECORD DI VENDITE IN POCHE ORE. OPPURE NO

M

entre scriviamo, iPhone è approdato in Italia da qualche giorno (a proposito, vi invitiamo a leggere l’articolo di copertina che parla proprio del nuovo smartphone) ed è stato subito “boom!”. Apple ha infatti dichiarato di aver venduto in tutto il mondo addirittura un milione di esemplari dello schic-

cosissimo Melafonino (quello di seconda generazione) in soli tre giorni dalla data del lancio ufficiale. Grazie a questo risultato il titolo Apple in borsa (come se ce ne fosse bisogno) in un attimo è salito dell’1,24%. Successone, ovviamente, anche per Apple Store, negozio virtuale tramite il quale è possibile scaricare applicazioni realizzate ad hoc per il gioiellino di Cupertino. Attenzione però: alcuni analisti hanno smentito crudamente le affermazioni di Apple. Steve Jobs & C., infatti, avrebbero la cattiva abitudine di conteggiare come venduto anche il quantitativo di merce semplicemente inviato presso i rivenditori, i partner e gli stessi Apple Store. In pratica, gli iPhone venduti nel famoso weekend di fuoco, sarebbe “soltanto” circa 500.000, cifra certamente di tutto rispetto, ma ben lontana dalla “milionata di telefoni” dichiarata da Jobs e soci. Si pensi anche che la stessa Apple, per vendere un milione di iPhone di prima generazione impiegò infatti ben 74 giorni. C’è anche chi scommette che il dispositivo si rivelerà un flop, superato alla grande da concorrenti dietro l’angolo.

LE CPU INTEL POSSIBILI BERSAGLI DEI NUOVI HACKER

N

on è una novità, quella che nei processori Intel siano presenti da tempo alcuni bug che possono essere sfruttati per attaccare le macchine che utilizzano tali CPU. Finora, però, nessuno ha mai sfruttato realmente queste falle, né tantomeno sono ancora stati creati dei malware o virus che approfittano delle suddette debolezze. Kris Kaspersky (che non ha nulla a che vedere con la famosa casa produttrice di software antivirus, se non l’omonimia del cognome e l’interesse per le questioni legate alla sicurezza informatica), noto autore di numerosi testi sul cracking, dimostrerà alla prossima HITBSecConf2008 come sia possibile far crashare da remoto un computer che utilizza un processore Intel. Kaspersky ha dichiarato che sarà sufficiente del normale codice Javascript accompagnato da particolari pacchetti TCP/IP. Tale metodologia, oltre a provocare un “corto” del PC, potrebber con-

h t t p : / / w w w. i o p r o g r a m m o . i t

sentire la presa totale di controllo del PC vittima. A prescindere dalla potenza dell’attacco e dai danni che possono da questo essere provocati, il reale pericolo è dovuto al fatto che un eventuale virus, concepito sfruttando queste falle, potrebbe funzionare a prescindere dal sistema operativo e infettare quindi macchine Windows, Mac e Linux senza, di fatto, “guardare in faccia nessuno”. Preoccupante l’atteggiamento di Intel, che non ha mai fornito alcun tipo di strumento per accertarsi che la propria macchina sia affetta dai questi problemi che non sembrano pochi visto che, sempre a detta di Kaspersky, i processori Core 2 contengono 128 bug e quelli Itanium circa 230. Solo que-

stione di tempo, continua il ricercatore, prima che gli smanettoni cattivi di tutto il mondo inizino a produrre “vermiciattoli” pronti a insinuarsi nelle CPU. Staremo a vedere cosa succederà a fine ottobre, quindi, quando Kris (che ha promesso di rilasciare il codice delle sue “scoperte” sotto licenza Open Source) proverà a distruggere un Hard Disk sfruttando i bug dei processori Intel.

Settembre 2008/ 11 G

012-021:032-035

16-07-2008

10:38

Pagina 12

COVER STORY 

Software e tecniche per programmare l’iPhone

PROGRAMMARE L’APPLE IPHONE INIZIAMO A CONOSCERE L'AMBIENTE DI SVILUPPO E LE TECNOLOGIE PER REALIZZARE SOFTWARE PER IL NUOVO GIOIELLO DI CASA APPLE. VEDREMO COME SI PROGETTA UN’APPLICAZIONE, RIUSCENDO A TESTARLA ANCHE SE NON POSSEDIAMO IL COSTOSO SMARTPHONE

Iniziamo con il dire che riferirsi all'IPhone come un telefono cellulare è un'affermazione abbastanza restrittiva. Personalmente lo descriverei come un dispositivo che fornisce una potente piattaforma di sviluppo e abilitato alla telefonia. Vedetelo quindi come uno smartphone evoluto. Questa frase potrà sembrerà una puntualizzazione inutile, ma considerarlo in tale modo rende più giustizia alle sue intrinseche caratteristiche (la registrazione di circa 300 brevetti su tale dispositivo da parte di Apple ha sicuramente una certa rilevanza in questa mia precisazione). Ecco quindi le caratteristiche del "telefono" (comuni sia al modello 2G che al 3G): G G G

Fig. 1: La semplice interfaccia per dispositivo iPhone che andremo a realizzare

G G G

IPHONE MANIA

REQUISITI Conoscenze richieste OOP - Object-C Software Sistema Operativo Leopard 10.5.3 (necessario per utilizzare l'SDK beta 7 o superiore), Iphone SDK Impegno Tempo di realizzazione

L'oggetto dei desideri di molti italiani (e non solo) è finalmente sbarcato sul mercato tramite canali ufficiali e ora che è possibile acquistarlo liberamente (disponibilità a parte), è giunto il tempo che vi mostri come realizzare soluzioni software con questo piccolo gioiellino. Come primo passo forniremo una descrizione delle caratteristiche, delle novità presenti nel modello 3G rispetto al precedente, successivamente si descriverà la struttura del sistema operativo e dell'SDK e, infine, mostreremo come realizzare una semplice interfaccia. Questo articolo è indirizzato sia agli utenti proprietari della versione 2G che quella 3G: non faremo quindi distinzione tra i due modelli, a meno di utilizzare qualche funzionalità specifica che non sia presente, a causa una carenza hardware, in uno o nell'altro dispositivo.

G 12 /Settembre 2008

G

G G G G G G G

Sistema operativo: iPhone OS; Processore: Samsung S5L8900 (412 MHz ARM 1176); Scheda video: PowerVR MBX 3D; Perifericha di input: Multi-touch screen; Risoluzione: 320 x 480 pixel a 163 pixel per pollice; Fotocamera da 2 megapixel; Localizzazione utilizzando la posizione delle celle e sfruttando anche le reti Wi-Fi disponibili; Memoria: 128 MB DRAM; Memoria fisica disponibile: 8 GB o 16 GB di memoria flash; UMTS (850/1900/2100); Quad band GSM (850/ 900 / 1800 / 1900) / GPRS / EDGE; Wi-Fi (802.11b/g); Bluetooth 2.0 con EDR; Sensore di prossimità (per disabilitare lo schermo quando si avvicina la testa al telefono per rispondere o effettuare una telefonata).

Le differenze principali, a esclusione di quelle estetiche/strutturali (più plastica e meno metallo nel nuovo modello)/durata della batteria, presenti tra le due generazioni di IPhone, sono l'aggiunta dell'A-GPS (assisted GPS), che ha perh t t p : / / w w w. i o p r o g r a m m o . i t

012-021:032-035

16-07-2008

10:38

Pagina 13

Software e tecniche per programmare l’iPhone

messo di realizzare il photo geotagging (ogni foto sarà associata alla posizione misurata dal GPS, questa funzionalità viene già utilizzata in ambito professionale fotografico, in genere naturalistico), del supporto per l'UMTS, e dell' HSDPA. L'A-GPS è una tecnologia che è stata realizzata per ridurre il carico computazionale necessario per la prima localizzazione (Fixing) e risolvere quei casi in cui è impossibile, in genere a causa della presenza di barriere fisiche, rilevare almeno i quattro satelliti necessari per la localizzazione del dispositivo; utilizza quello che viene chiamato un Assistance Server, il cui scopo è quello di fornire, venendo a conoscenza della cella a cui si è collegato il telefono, la sua posizione approssimata e le informazioni su quali satelliti sono visibili nelle vicinanze di tale cella. Se non disponete di un software di navigazione, con relative mappe, sarete costretti a utilizzare i servizi disponibili online, Google Maps in primis, rendendo necessario il pagamento del traffico Internet utilizzato per reperire tali informazioni. L'HSDPA è il protocollo attualmente utilizzato su reti UMTS per raggiungere velocità di download oltre il Mbit/s. Mancano il supporto di memorie esterne rimovibili, una fotocamera frontale per fare le videotelefonate e il Flash Player! La seconda carenza è stata una scelta abbastanza inusuale (anche se presente in alcuni modelli di cellulari Nokia sempre UMTS) e preclude un possibile sviluppo di applicazioni che sfruttino la seconda videocamera: si sarebbe potuto sviluppare software per realizzare effetti da applicare sul volto dell'utente mentre effettuava una videochiamata o possibili sistemi di sicurezza tramite face detection, per citarne solo alcuni. La mancanza del player Adobe Flash è purtroppo dovuta a problemi di prestazioni, che sia Adobe che Apple stanno cercando di risolvere; una possibile esclusione da questo modello sarebbe di sicuro una grave penalizzazione per la fruizione dei contenuti disponibili in rete. Queste tre mancanze sono, forse, quelle che potrebbero scoraggiare molti utenti all’acquisto e invogliarli ad aspettare magari la terza release hardware di questo piccolo telefono/non telefono.

NOVITÀ NELL’ APPLE IPHONE 2.0 I successivi aggiornamenti del sistema operativo dell'IPhone hanno apportato migliorie e risolto problemi più o meno noti, sono state inoltre aggiunte funzionalità per renderlo più aperto alla comunicazione con tecnologie non Apple. h t t p : / / w w w. i o p r o g r a m m o . i t

 COVER STORY

È possibile ora sincronizzarsi con Microsoft Exchange ActiveSync, quindi avere appuntamenti, contatti ed email sempre aggiornati con la propria postazione fissa/mobile; è stata aggiunto il supporto per la connessione su reti VPN con L2TP/IPSEC utilizzando tecnologia Cisco; ora supporta il WPA2 Enterprise (tecnologia che utilizza un server per autenticarsi) e il protocollo autenticazione per reti 802.1X; può gestire, inoltre, documenti Microsoft Word, Excel e Powerpoint, Adobe PDF e Apple IWork. Segnali, questi, di un forte indirizzamento verso il mondo business e una volontà di divenire un nuovo dispositivo di riferimento per chi ha necessità di gestire diverse tipologie di informazioni e connettersi a organizzazioni che utilizzano tecnologie e documenti in formati diversi.

NOTA

RIFERIMENTI E DOCUMENTAZIONE All’indirizzo http://developer.apple.co m/iphone/program/

L'ITER DI SVILUPPO SU IPHONE SECONDO APPLE Finchè l'SDK sarà distribuito come beta, avrete la possibilità di realizzare qualunque software senza alcun limite, ma questo stato durerà ancora per poco: quando verrà rilasciata una versione stabile si dovrà acquistare una delle due licenze disponibili. Lo Standard Program (attualmente il prezzo dichiarato è di 99$) è dedicato a programmatori intenzionati a realizzare software gratuito e a pagamento sia per IPhone sia per ITouch, L'enterprise Program ($299) è indirizzato, invece, allo sviluppo e alla distribuzione. Prezzi comunque competitivi, ovviamente tralasciando il "leggero" requisito di possedere un computer con Mac OS X 10.5.3 installato, oltre a un IPhone per effettuare dei test “sul campo”. Il centro nevralgico da cui fluisce qualunque software è, a meno di cambi di strategia da parte di Apple, l'App Store, nel quale è possibile inserire le proprie creazioni, deciderne il prezzo (è inoltre concesso rilasciarle in maniera gratuita) e ottenere un 70% di ricavi dalla loro vendita. Le applicazioni non possono superare i 2GB di grandezza e, nel caso non fossero gratuite, dovranno costare non meno di 0.99$ e non più di 999$. È possibile disabilitare il download/utilizzo a seconda del paese di appartenenza. Sarà obbligatorio firmare digitalmente la propria release software con un sistema di chiavi (pubblica/privata) ottenute su richiesta direttamente ad Apple, per avere accesso alla distribuzione online; il vostro programma sarà, inoltre, firmato ulteriormente dalla casa di Cupertino prima di venire resa effettivamente disponibile ai possibili acquirenti: tutto questo allo scopo di garantire la provenienza e l'originalità del software.

potrete ottenere tutta la documentazione (in formato HTML e/o PDF) necessaria per realizzare qualunque idea vi venga in mente, inoltre, previa registrazione, potrete scaricare l'SDK (che include inoltre XCode e tutti gli strumenti necessari per realizzare una soluzione completa). I manuali che ho consultato per generare questo articolo sono (scaricabili gratuitamente dal sito Apple appena citato): IPhone OS Programming Guide, Cocoa Fundamentals Guide, The Objective-C 2.0 Programming Language, XCode User Guide, UIKit Framework Reference, Foundation Framework Reference. Presso http://en.wikipedia.org/w iki/List_of_ISO_6391_codes e http://en.wikipedia.org/w iki/List_of_ISO_6392_codes troverete i codici

da utilizzare per supportare la localizzazione.

Settembre 2008/ 13 G

012-021:032-035

16-07-2008

10:38

Pagina 14

COVER STORY 

Software e tecniche per programmare l’iPhone

SENSORI, SENSORI E ANCORA SENSORI... Oltre all'accelerometro di sensibilità +/-5G , in grado di fornire informazioni sulla posizione (rotazione, rollio e beccheggio) e descritto in maniera esaustiva in un precedente articolo per utilizzare il controller della WII (i più attenti ricordano che la sua sensibilità è invece di +/3G), sono integrati altri due tipi di sensori: uno di luce ambientale, il cui scopo è quello di misurare l'intensità della luminosità esterna e regolare la propria conseguentemente, e l’altro di prossimità, in grado di determinare se l'utente ha posto il proprio volto vicino al telefono e il cui unico intervento è quello di spegnere l'LCD per risparmiare batteria (semplice come idea ma sicuramente efficace per aumentare di qualche minuto la durata della non proprio performante batteria).

Fig. 2: I versi positivi degli assi di riferimento dell'accelerometro

IL CICLO DI VITA DI UN'APPLICAZIONE L'SDK permette di creare applicazioni esplicitamente grafiche in grado di essere eseguite sull'IPhone OS, il sistema operativo dello smartphone. Ogni applicazione installata trova posto all'interno dell’Home Screen, la finestra principale che ogni utente si trova davanti all'accensione del telefono, contenente tutte le icone degli applicativi disponibili. All'avvio, il vostro programma occuperà tutto lo schermo, ad esclusione del kernel e di alcuni demoni di basso livello, sarà l'unica applicazione a essere eseguita: dimenticatevi quindi di poter avviare numerosi programmi in background e farli colloquiare come avviene in un ambiente multitasking. La scelta di evitare

G 14 /Settembre 2008

l'esecuzione in contemporanea è “giustificata” da Apple come una garanzia di accedere in maniera esclusiva alle risorse disponibili. Dopo che l'utente ha terminato di utilizzare il sofware gli basterà premere il tasto home, quello posizionato sotto lo schermo, per terminare il programma e tornare alla schermata di benvenuto del telefono.

LINEE GUIDA DI SVILUPPO Dal primo utilizzo dell'IPhone si apprezza la velocità del reperimento delle informazioni; per tale motivo conviene sempre seguire alcune regole che miglioreranno l'esperienza che fornirete ai vostri utenti. Più renderete veloce la vostra applicazione nell'avvio e nella chiusura, più sarà utilizzata da un utente; un'interfaccia intuitiva e nella quale l'accesso alle informazioni importanti è alla portata di uno o due colpetti di dita, sarà di sicuro un incentivo per incrementare il numero di utilizzi del vostro programma. È importante memorizzare in che menu si trovava l'utente prima che uscisse durante il precedente utilizzo, in modo da permettergli di accedere subito al punto in cui si era fermato (a causa di una telefonata o per altro motivo). Non create decine di finestre di configurazione con poche informazioni, ma raggruppate il più possibile tali dati, magari separandoli opportunamente (dopo tre o quattro finestre consecutive in cui si incrementa il dettaglio delle impostazioni, si incrementa il senso di confusione di molti utenti). Non cercate di ridurre il testo e/o le immagini oltre l'umana visione per visualizzare tutto in una schermata, non abbiamo tutti 10/10: una soluzione è quella di fornire la possibilità di cambiare a piacimento tali dimensioni (come avviene in molti siti web accessibili). Utilizzare prima quei controlli dell'interfaccia grafica forniti con l'SDK, poiché sono ben noti all'utente e ha esperienza nel loro utilizzo: se fosse veramente necessario, sviluppatene altri, cercando di ridurre al minimo la loro complessità. Ricordate che molti di voi realizzeranno soluzioni per un insieme eterogeneo di utenti e che la gran parte di queste persone non ha molta pazienza, essendo abituate ad avere tutto già preconfigurato: semplificate quindi il più possibile!

COCOA E L'OBJECT-C Cocoa è il termine coniato da Apple per raggruph t t p : / / w w w. i o p r o g r a m m o . i t

012-021:032-035

16-07-2008

10:38

Pagina 15

Software e tecniche per programmare l’iPhone

pare un'intera famiglia di framework, API e software annesso, realizzati principalmente in Object-C, che costituiscono il substrato necessario per realizzare ogni applicazione indirizzata per Mac OS X e Iphone OS. Il linguaggio con cui dovrete confrontarvi sarà quindi l'Object-C, insieme di estensioni del linguaggio ANSI C, realizzato per fornire un approccio più semplice all'object orienting. Per chi avesse iniziato a programmare con linguaggi quali .NET o JAVA, e non avesse mai avuto necessità di confrontarsi (per molti sarebbe meglio dire scontrarsi) con il linguaggio C e/o il C++ dovrà abituarsi a gestire la memoria utilizzata poiché l'IPhone non supporta il garbage collecting, presente invece in Mac OS; questo, per i non pratici, significa che ogni allocazione di risorse, utilizzare un qualunque file presente sull'HD delll'IPhone, creare un'istanza di una classe o una struttura dati, comporterà, ovviamente, un utilizzo di un certo quantitativo di memoria: tale richiesta dovrà essere gestita personalmente da voi e sarete responsabili del rilascio di tali informazioni. Per nostra fortuna è comunque disponibile un sistema di gestione controllata della memoria tramite i metodi autorelease e release. Malloc e free sono comunque obbligatori per riservare e rilasciare blocchi di memoria. Un'altra sgradevole notizia, a mio dire la più grande limitazione, è che non potrete utilizzare più risorse di quelle disponibili (in termini di memoria) poiché non è supportata alcuna tecnologia di swapping (quindi non si potranno creare eccessive strutture dati ad esempio, o caricare file di grandi dimensioni): la memoria fisica a disposizione è l'unica che sarà accessibile; il sistema operativo cercherà di liberare più blocchi di RAM possibile quando richiesto, rimuovendo quei programmi non necessari al momento. Caratteristiche che potrebbero scoraggiare molti sviluppatori, mentre di sicuro allettano quei programmatori più indirizzati all'ottimizzazione delle proprie applicazioni, e magari con un background di C/C++.

 COVER STORY

delle direttive @interface e @end, contenente solo i metodi (senza il corpo) e le variabili, mentre il secondo, l'implementazione, racchiusa tra le direttive @implementation e @end, conterrà tutto il codice utilizzato da ogni metodo; ovviamente quest'ultimo file dovrà essere collegato al file di estensione .h con la direttiva #import “filediinterfaccia.h”. Un'istanza di una classe viene creata tramite id nomeistanza =[[nomeclasse alloc] init], in cui il tipo id è utilizzato per identificare una variabile che contiene (in realtà è un puntatore) un'istanza di una classe, alloc richiede l'allocazione di memoria per contenere l'oggetto in questione, init invocherà il costruttore omonimo; la distruzione dell'oggetto avverrà tramite il metodo release/dealloc (a seconda del metodo reso disponibile dalla classe). I metodi si possono invocare utilizzando la seguente sintassi: [nomeinstanza metodo: parametro1 :parame-troN]; è possibile creare, automaticamente, metodi getter e setter per una proprietà di una classe utilizzando la direttiva @synthetize nomeproprietà all'interno del codice dell'implementazione, descrivendo poi nell'interfaccia le caratteristiche di tali accessors nel seguente modo: @nomeproprietà(attributi) tipo *nome; nel caso voleste creare dei metodi ad hoc basterà utilizzare la direttiva @dynamic e scrivere il relativo codice. Nei prossimi numeri spiegherò ovviamente in dettaglio molte delle caratteristiche di questo linguaggio, ma le informazioni che vi ho fornito sono sicuramente il minimo indispensabile per riuscire a comprendere, almeno superficialmente, il codice presente nell'applicativo generato dall'SDK quando si crea un nuovo progetto.

LA STRUTTURA DEL SISTEMA OPERATIVO Il kernel presente sull'IPhone è una variante di quello esistente su Mac OS X, il Mach kernel; entrambi sono strutturati su alcuni livelli che utilizzano i servizi forniti da quelli inferiori e ne mostrano altri a quelli superiori (la tipica strut-

UN BREVE SGUARDO ALL'OBJECT-C Programmare in Object-C non è così difficile se si ha una buona conoscenza di un linguaggio object oriented, come Java o C#, ma sono necessarie delle spiegazioni per ridurre al minimo il “disagio” necessario per addentrarsi in un linguaggio sicuramente più spartano. Per ogni classe troverete (e dovrete realizzare) due file, uno con estensione .h e l'altro .m, il primo conterrà l'interfaccia, inclusa all'interno h t t p : / / w w w. i o p r o g r a m m o . i t

Fig. 3: La struttura a stack disponibile per lo sviluppo di programmi su iphone

Settembre 2008/ 15 G

012-021:032-035

16-07-2008

10:38

Pagina 16

COVER STORY 

Software e tecniche per programmare l’iPhone

tura a stack, come quella definita dal Modello ISO/OSI utilizzato per la comuncazione tra computer). Di seguito l'elenco dei layer disponibili: G

Core OS: fornisce tutto il necessario per accedere all'IPhone OS al livello più basso consentito, quindi accesso ai file di sistema, thread POSIX, socket BSD, servizi Bonjour (ricerca di periferiche collegate, quali stampanti e webcam ad esempio), servizio DNS, allocazione della memoria, funzioni matematiche etc. Il codice qui implementao è scritto completamente in C;

G

Core Services: questo layer fornisce il framework Core Foundation, supporta la gestione delle stringhe, delle date, delle preferenze, thread e loop del metodo run, comunicazione tramite socket, collezioni quali array, set e altre strutture dati, supporto per i file bundle (che andremo a mostrare in dettaglio, sono comunque i “contenitori” delle applicazioni che andremo a creare). Troviamo, inoltre, il framework Address Book, per accedere e gestire i contatti, il framework Address Book UI responsabile della visualizzazione di tali voci, il framework Core Location che vi fornirà la posizione del vostro telefono (quando possibile) in termini di latitudine e longitudine, il framework CFNetwork, che permette, attraverso astrazioni realizzate tramite programmazione a oggetti, di utilizzare i socket BSD, resolving di indirizzi tramite DNS, creare connessioni sicure utilizzando SSL o TLS, gestire connessioni HTTP/S e/o FTP, avere accesso ai servizi Bonjour. Il framework Security permette di gestire certificati, chiavi pubbliche e private, generare sequenze e criptare informazioni sensibili sul vostro device. La libreria SQLite consente di utilizzare un database molto leggero. È supportata la gestione di file XML tramite le librerie libXML2 e libXSLT, la seconda fondamentale per la trasformazione veloce, in html ad esempio, dei vostri file xml in formati human-readable. In questo layer troviamo sia oggetti realizzati in C che in Objective-C.

G

Cocoa Touch: la punta di questo “iceberg” di servizi è il livello Cocoa Touch, scritto quasi completamente in Objective-C: al suo interno sono disponibili il framework Foundation e quello UIKit; compito di questi due servizi è quello di fornire il supporto per la gestione degli eventi, delle finestre, dell'interfaccia utente, dei controlli, dei testi, dei contenuti web, dei dati provenienti dall'accelerometro, della fotocamera, della libreria delle foto, delle informazioni del vostro dispositivo, gestione object oriented delle collezioni, dei file, delle connessioni di rete. In questo layer troviamo quindi la maggior parte delle classi e funzioni necessarie per realizzare un'applicazione completa.

Quartz è sia il window server sia il motore di rendering in grado di gestire contenuti grafici, gradienti, font, colori, livelli, immagini, PDF e tracciati, mentre UIKit, posizionato proprio sopra il suddetto server, fornisce, tramite opportune strutture e classi, quegli strumenti che rendono più semplice l'accesso e la modifica dei contenuti forniti da Quartz. Il consiglio è quindi quello di iniziare a programmare partendo dal livello più alto, e semplice, il Cocoa Touch, per poi scendere in caso maturasse la necessità di realizzare soluzioni ad hoc che non sono ancora disponibili.

IL PUNTO DI INIZIO Un’applicazione, quando viene avviata, esegue immediatamente il tipico metodo/funzione main, presente nel file main.m localizzato nella cartella Other Sources, nel quale è obbligatorio creare un oggetto responsabile del rilascio delle risorse (autorelease), invocare la funzione UIApplicationMain e rilasciare l'oggetto autorelease quando l'interfaccia è terminata. #import int main(argc, *argv[]) { NSAutoreleasePool* pool = [[] ]; intretVal = (argc, argv, , ); [pool release];

G

Media: situato in posizione elevata nello stack troviamo oggetti e funzioni realizzati in Objective-C, come il Media Layer, per la gestione di 2D, 3D, contenuti audio e video, il supporto per OpenGL ES, Quartz e Core Audio (scritti invece in C), Open Audio (fornisce il supporto per l'audio 3D). È inoltre disponibile la Core Animation, libreria Objective-C per la realizzazione di animazioni in grado di sfruttare un rendering ottimizzato.

G 16 /Settembre 2008

returnretVal; }

Ogni applicazione che riceve eventi da parte di un utente, o di altri componenti, deve utilizzare un ciclo durante il quale li cattura e modifica l'interfaccia grafica di conseguenza: tali funzionalità sono abilitate dalla chiamata della funzione UIApplicationMain. Il sistema operativo riceverà le pressioni sul touch screen e le invierà a una coda (Event Queue) che provvederà a instrah t t p : / / w w w. i o p r o g r a m m o . i t

012-021:032-035

16-07-2008

10:38

Pagina 17

Software e tecniche per programmare l’iPhone

dare le relative informazioni verso l'opportuno oggetto della nostra applicazione: il primo a rispondere a tali messaggi è l'oggetto di tipo UIView, che rappresenta la finestra visibile in quel momento, altrimenti “risale” nell'albero delle finestre (la cosiddetta responder chain) venendo scartato nel caso peggiore. Questa serie di risposte alle interazioni da parte dell'utente è posizionata all'interno di un ciclo chiamato main event loop. La gestione di tocchi multipli viene risolta incapsulando le relative informazioni in un oggetto di tipo UIEvent, che conterrà una serie di oggetti UITouch, ognuno in grado di fornire i dati di ogni singola pressione. La classe che vi permetterà di intercettare tali eventi sarà la UIResponder e dovrete quindi implementare i relativi metodi. Ogni UITouch contiene come informazioni almeno la fase (inizio della pressione UITouchPhaseBegan, movimento del dito UITouchPhaseMoved o allontanamenteo dallo schermo UITouchPaseEnded), la posizione e la View che ha ricevuto tale evento. Il comportamento in risposta a più pressioni contemporanee viene gestito in maniera simile.

mente necessario, appena prima di utilizzarla, e non all'avvio del software; G

rilasciate appena possibile le risorse precedentemente allocate e non più necessarie;

G

riducete al minimo la dimensione dei file salvati sul device poiché, quando caricati, sarete comunque obbligati ad allocare memoria per gestirli;

G

comprimete al meglio le immagini (PNG, che utilizza un algoritmo lossless, se non volete perdere informazioni importanti, mentre JPEG, che invece ne sfrutta uno lossy, se siete disposti a ridurne la qualità) e riducete le dimensioni (intendo larghezza e altezza) al minimo necessario;

G

utilizzate SQLLite quale gestore dei vostri dati, ovviamente quando necessario: questa soluzione vi permetterà di ottenere solo le singole entità (come record del database) invece di dover gestire l'intera struttura dati;

G

compilate usando il flag -mthumb, in grado di ridurre il codice di circa un 30%, ma solo nel caso non utilizziate pesanti calcoli in virgola mobile (altrimenti potrebbe avere un effetto degradante in termini di prestazioni, in tal caso utilizzate le istruzioni ARM).

FORMATI AUDIO/VIDEO/IMMAGINE SUPPORTATI I formati di immagini supportati sono: JPEG, BMP, GIF, TIFF, PNG, ICO, CUR, XBM. Il framework Mediaplayer è responsabile della visualizzazione corretta di file multimediali, le estensioni supportate sono le seguenti: MOV, MP4, M4V, 3GP. I codec supportati, invece sono: H.264 (fino a 640x480 pixel a 30fps), MPEG-4, MP3, AAC, Apple Lossless (ALAC), A-law, IMA/ADPCM (IMA4), linear PCM, Ì-law. La registrazione dell'audio può essere effettuata nei seguenti formati: A-law, IMA-ADP CM (IMA4), linear PCM, Ì-law. È comunque probabile che il numero di tali formati possa aumentare nei successivi aggiornamenti del sistema operativo (si vocifera un supporto per i filmati Adobe Flash).

OTTIMIZZARE LA MEMORIA Come segnalato, è importante tenere sotto controllo le risorse allocate durante l'intera vita del vostro software e per tale motivo è necessario fornire opportuni consigli: G

caricate in memoria una risorsa (file di testo, immagine, suono, video) solo quando stretta-

h t t p : / / w w w. i o p r o g r a m m o . i t

 COVER STORY

Resta comunque obbligatorio, per realizzare un buon prodotto, utilizzare più volte, durante tutto il ciclo di sviluppo, Shark e Instruments, per comprendere meglio, e possibilmente semplificare e/o alleggerire, possibili punti critici del vostro codice. Ma cosa succederebbe se si utilizzassero tutte le risorse disponibili di memoria? Il sistema lancerebbe una notifica indirizzata al programma attualmente in primo piano e spetterà al codice, che avrete ovviamente creato, intercettarla e cercare di rilasciare il prima possibile quelle risorse che al momento non sono necessarie. Altrimenti? Il vostro software verrà terminato automaticamente. Per ricevere tali notifiche potrete: G

implementare il metodo applicationDidReceive MemoryWarning;

G

fare overriding del metodo didReceiveMemory Warning se avete realizzato una sottoclasse della UIViewController;

G

registrarsi per ricevere la notifica tramite il metodo UIApplicationDidReceiveMemmory WarningNotification.

Settembre 2008/ 17 G

012-021:032-035

16-07-2008

10:38

Pagina 18

COVER STORY 

Software e tecniche per programmare l’iPhone

È importante che, oltre ai file utilizzati, rimuoviate anche quelle finestre (views) che non sono visibili sullo schermo. È possibile inviare tale avviso durante l'esecuzione nel simulatore utilizzando il comando Simula avviso memoria disponibile nel menù Hardware.

interrupt, e altre informazioni più o meno interessanti. Instruments è, invece, stato realizzato per fornire dettagliati log e grafici sull'utilizzo delle risorse, della CPU, della memoria, del file system, del traffico sulla rete e degli oggetti utilizzati (solo per citarne alcuni).

PRESERVIAMO LA DURATA DELLA BATTERIA

IL TOOL XCODE

Le non eccezionali prestazioni della batteria sono ormai una certezza, ma con qualche piccolo consiglio riuscirete a non ridurne ulteriormente la vita quando un utente eseguirà un vostro applicativo: G

Connettetevi utilizzando qualunque tecnologia wireless solo quando strettamente necessario. Evitate, inoltre, di effettuare richieste cicliche per verificare se una data informazione è disponibile o un certo oggetto ha variato il suo stato;

G

Se richiedete, o inviate, informazioni attraverso una rete, trasmettete solo il minimo indispensabile, siate parsimoniosi!

G

Se serve ottenere la posizione del device utilizzate i sistemi di localizzazione per il più breve tempo possibile (l'intervallo tra attivazione e disattivazione sia il più breve possibile).

Nonostante non sia una legge scritta, sarebbe lecito considerare quasi indissolubile il legame Xcode-IPhone SDK: questo tool (insieme agli altri ad esso collegati) permette di gestire l'intero ciclo di sviluppo di una soluzione software per IPhone. Insieme a questo editor troviamo installato inoltre un debugger, un profiler (Shark) e l'editor WYSIWYG (Interface Builder) per velocizzare la realizzazione delle interfacce grafiche. E' ovviamente possibile utilizzare repository che utilizzano tecnologie quali SVN, CVS e Perforce. La documentazione può essere richiamata immediatamente sia se disponibile in locale che in remoto. XCode non è comunque un insieme di strumenti unicamente indirizzati allo sviluppo per IPhone poiché fornisce tutto il necessario per sviluppare in JAVA, AppleScript RUBY, Python, C, C++ su Mac OS X: è uno strumento veramente potente e completo, che necessità di decine di ore prima di venire utilizzato adeguatamente.

IL SIMULATORE DELL'IPHONE

Fig. 4: La pagina di selezione del tipo di studio da effettuare in Instruments

OTTIMIZZAZIONE CON SHARK E INSTRUMENTS Shark e Instruments (oltre ad altri programmi presenti nell'SDK) dovrebbero divenire i vostri fedeli compagni di sviluppo, se avete un minimo di interesse nel realizzare programmi performanti. Shark permette di visualizzare gli eventi ricevuti e trasmessi, i thread in esecuzione, gli

G 18 /Settembre 2008

Chi non ha modo di acquistare un IPhone si sentirà escluso da questo articolo, ma non è così: è infatti possibile realizzare praticamente qualunque applicazione senza possederlo! Questo è consentito dall'ottimo simulatore presente nell'SDK che fornisce tutte le funzionalità del telefono reale. È stato inoltre permesso di emulare la pressione di due dita contemporaneamente utilizzando un tasto della tastiera mentre si muove il mouse. Sembrerebbe tutto rose e fiori, ma non lo è, poiché il vero dispositivo diventa necessario quando si vuole testare un'applicazione relativamente complessa; inoltre è obbligatorio se si utilizzano i dati dell'accelerometro, oppure si gestiscono ulteriori tocchi con le proprie dita, e soprattutto quando se ne vogliono testare le reali prestazioni. Il simulatore ha modo di sfruttare il processore Intel Dual Core del vostro Mac che non ha nulla a che fare con il modello a "soli" 412Mhz che avrete effettivamente a disposizione! Identico discorso per la h t t p : / / w w w. i o p r o g r a m m o . i t

012-021:032-035

16-07-2008

10:38

Pagina 19

Software e tecniche per programmare l’iPhone

memoria disponibile! Non potrete provare ovviamente la vibrazione, il sensore di prossimità e tutte quelle interazioni che necessitano del vero telefono. Attenzione, quindi, a tenere in considerazione problemi quali un refresh rate troppo lento, accesso a strutture dati "corpose" o trasformazioni di immagini di dimensioni ragguardevoli. Per il resto, se il vostro sviluppo verrà affrontato in maniera attenta e con la consapevolezza di tali limiti, potrete ridurre al minimo tali problematiche.

IL PATTERN MVC Per chi sviluppa nel settore web, enterprise e non (utilizzando ad esempio CakePHP o Symfony in ambiente PHP, Struts in Java oppure ASP.NET MVC framework di Microsoft), avrà ormai maturato una certa esperienza nella realizzazione di soluzioni software in cui si scindono le tre componenti fondamentali di una soluzione informatica in singoli raggruppamenti semantici di codice: si parla del design pattern chiamato MVC (model-view-controller), il cui scopo è quello di separare l'interfaccia grafica (view, chiamato strato di presentazione, una pagina web oppure una vera e propria finestra con relativi controlli) dal motore che gestisce i dati (model, chiamato strato di business, in genere un database) dal codice (controller) responsabile di mettere in comunicazione i due precedenti “livelli” (ad esempio è responsabile del salvataggio in un database dei dati inseriti da un utente e di mostrarli al suo successivo accesso nelle relative

 COVER STORY

creare problemi in caso decidesse di modificare una certa parte di codice (uno spostamento, ad esempio, tra Mysql a MSQL risulterebbe così indolore per chi è responsabile del layout del sito). Tutto questo è permesso a patto che siano ben definite le interfacce di comunicazione tra i tre gruppi logici e che non cambino, a meno di casi eccezionali. Il sistema operativo dell'IPhone è in effetti realizzato in tal modo, un esempio? Applicando una singola modifica alla finestra principale noterete che tali operazioni non influenzeranno i file di codice presenti nella cartella /Classes.

LE WINDOW E LE VIEW Alla base di ogni applicazione per IPhone troviamo una serie di finestre, chiamate View e Window, in cui la seconda è una semplice View con alcune caratteristiche aggiuntive. Sono organizzate in un albero la cui radice principale è

Fig. 6: La struttura tipica di un'applicazione

Fig. 5: Struttura logica del design pattern MVC

posizioni). Questo approccio ha lo scopo di ridurre al minimo la dipendenza (il termine inglese è loose coupling) tra i tre livelli lasciando libertà agli sviluppatori di trovare le soluzioni più adatte senza h t t p : / / w w w. i o p r o g r a m m o . i t

identificata da una Window, che a sua volta contiene tutte le View creata. Tutto quello che realizzerete sfruttando queste View utilizzerà la Core Animation, il cui scopo è quello di permettere di animarle, spostarle, scalarle, trasformarle, nasconderle, renderle parzialmente trasparenti variando il valore di alpha, ruotarle utilizzando opportune operazioni matriciali, tutto senza rendere necessario

Settembre 2008/ 19 G

012-021:032-035

16-07-2008

10:38

Pagina 20

COVER STORY 

Software e tecniche per programmare l’iPhone

aggiornare il loro contenuto (con un effettivo guadagno di prestazioni e risparmio di risorse). Ma cosa sono le View allora? Semplici regioni rettangolari, in realtà istanze della classe UIView descritte da file XML di estensione .xib, in caso utilizziate l'editor visuale, blocchi di codice se preferirete un approccio più diretto, il cui scopo è ricevere eventi e disegnare il proprio contenuto. Tra le classi da essa derivate segnaliamo: G

Tab Bar: posizionata in basso, può contenere pulsanti utili per attivare velocemente alcune opzioni;

G

Navigation Bar: consente di spostarsi tra le varie view disponibili.

G

Search Bar: accetta l'inserimento di testo che può essere poi ricercato all'interno di uno o più testi.

G

Container: permette di raggruppare, separare dei contenuti oppure gestisce situazioni in cui spesso le informazioni mostrate sono più grandi dell'area visibile, come avviene nel caso della UIScrollView;

G

Control: fanno parte di questa classe bottoni, switch, campi di testo e barre di scorrimento;

G

Alert: tipico popup di avviso che può contenere anche una richiesta di inserimento testo;

G

Action: messagio che compare dal basso dello schermo;

G

TextField: visualizza il testo con font, colore, allineamento definiti, oltre a permettere di modificarlo;

Ricordiamo nuovamente d’evitare troppe finestre aperte, visibili e non, per non rischiare di esaurire la memoria disponibile. Non ripulite quelle zone che non lo necessitano, non utilizzate troppe finestre con sfondo trasparente o semitrasparente, salvate i file PNG senza i canali alpha, utilizzate immagini già con le dimensioni ideali, magari prediligete la creazione di più versioni con diverse risoluzioni per evitare che il sistema operativo debba ridimensionarle ripetutamente. Il sistema di coordinate utilizzato è molto semplice: il punto (0,0) (valori float) è posizionato nell'angolo alto a sinistra, l'asse x cresce in direzione orizzontale verso la destra del telefono, mentre quello y verso il basso. Le dimensioni e la posizione di una View rispetto a quella che la contiene, chiamata superview, sono calcolate utilizzando le sue tre proprietà:

G 20 /Settembre 2008

frame, bounds e center: la prima indica la posizione e la dimensione utilzzando il sistema di coordinate della view padre; il campo bounds rappresenta i margini interni che definiscono l'area utile per disporre i suoi contenuti; center indica la posizione del centro geometrico del rettangolo che identifica la view utilizzando le coordinate della superview. È possibile, come accennato in recedenza, applicare delle trasformazioni ad una view, che avranno diversi effetti a seconda di come è stato impostata la proprietà transform, UIView ContentModeScaleToFill, UIViewContent ModeScale AspectFit, UIViewContentModeScale AspectFill, in cui il primo valore distorce semplicemente il contenuto senza mantenere le proporzioni, il secondo, invece, tiene conto del rapporto tra larghezza e altezza, mentre l'ultimo ingrandisce il contenuto cercando di occupare la maggiore area possibile, uscendo anche dall'area visibile. Il ridisegno delle zone segnalate come dirty/sporche, oppure nuove, avviene solo al rientro nel ciclo principale di loop, il framework UIKit provvederà, quindi, a navigare attraverso la gerarchia di view e a verificare quali hanno reale necessità di tale operazione; è possibile comunque forzare tale evento e impostare solo una sottoarea da ridisegnare utilizzando la funzione setNeeds DisplayInRect, invece di richiamare il generico setNeedsDisplay, sempre con il fine di migliorare le prestazioni del vostro programma.

L’SDK E L’AVVIO DEL SIMULATORE Dopo esservi registrati sul sito, da cui è possibile scaricare l'SDK, armatevi di buona pazienza poiché è un file di oltre 1GB (non è un errore di stampa mi dispiace); al temine di questa operazione potrete procedere con l'installazione (che occuperà circa 4GB) che finalmente consentirà di accedere a tutti i software (presenti nella cartella /Developer/Applications per quanto riguarda gli eseguibili). Avviamo XCode, creiamo un nuovo progetto, una View Based Application (notate la possibilità di creare un programma OpenGL ES), noterete, quindi, la comparsa di numerosi file nella colonna di sinistra. Premete il tasto Build and GO per avviare il simulatore, vi troverete davanti a un IPhone perfettamente funzionante (potrete anche usare Safari per navigare sul web e aggiungere nuovi contatti nella rubrica). Il mouse sarà equiparao alla pressione del dito (tenete inoltre premuto il tasto Option per simulare due dita contemporaneamente, simultaneamente a Shift per il trascinamento sullo schermo, doppio clic per zoomare nel visualizzatore di immagini, la rotellina per fare h t t p : / / w w w. i o p r o g r a m m o . i t

012-021:032-035

16-07-2008

10:38

Pagina 21

Software e tecniche per programmare l’iPhone

nella sezione Impostazioni/Settings del telefono;

scrolling. Utilizzando il tasto in basso all'IPhone chiuderete il programma e tornerete alla Home.

STRUTTURA DI UN'APPLICAZIONE Il programma che realizzerete e andrete a installare ed eseguire sarà contenuto in un sandbox, un ambiente protetto che eviterà che i vostri dati vengano modificati da programmi esterni, ma anche che voi alteriate risorse di cui non avete il controllo; ad ogni programma installato viene associato un numero identificativo unico che sarà il nome della relativa sottocartella che lo conterrà situata in /ApplicationRoot. La struttura è la seguente: Application Home/ G Programma.app G Documents/ G Library/Preferences/ G tmp/ G

Programma.app: il bundle contenente tutte le risorse necessarie per l'esecuzione del programma;

G

Documents/: cartella in cui il programma ha il permesso di salvare i dati;

G

Library/Preferences/: cartella in cui vengono salvati (utilizzando l'API CFPreferences) tutte le impostazioni di configurazione;

G

tmp/: i file temporanei possono essere qui scritti ma devono essere rimossi volontariamente dal vostro applicativo.

Dovete comunque porre attenzione a bug, come i buffer overflow, spesso scaturiti dal mancato controllo dei dati di input forniti dall'utente, che permetterebbero a un programmatore di inserire del codice per eseguire software malevolo. Il software, come appena scritto, è contenuto all'interno di un bundle, un file la cui struttura è simile al tipico tree di un file system, di estensione .app. Include tutte le risorse necessarie per il corretto funzionamento dell’applicativo (immagini, video, suoni, altri file ed eseguibili). Un programma per IPhone dovrebbe contenere almeno i seguenti file: Programma.app/, Pro gramma, Settings.bundle, MainWindow.nib, Sfondo.png, Icon.png, Default.png, Info.plist, en.lproj, it.lproj. G

Programma: l'eseguibile da noi realizzato;

G

Settings.bundle: una cartella che contiene varie impostazioni, e consente di renderle visibili

h t t p : / / w w w. i o p r o g r a m m o . i t

 COVER STORY

G

MainWindow.nib: è il file utilizzato per definire un'interfaccia grafica minimale;

G

Icon.png e Default.png: due risorse utilizzate per rappresentare l'icona (formato PNG, 57x57 pixel) che andremo a cliccare per farlo avviare e quella dello splashscreen (formato PNG, 320x480 pixel); basterà aggiungere l'Icon.png e il file Default.png da voi creati tramite la voce Project->Add to project per visualizzarli al successivo avvio del simulatore;

G

Sfondo.png: esempio di risorsa non localizzata, questo tipo di file viene salvato nella root principale, poiché non è associato ad alcuna lingua specifica;

G

info.plist: contiene le informazioni associate al software tra cui ID, versione e nome;

G

en.lproj e it.lproj: cartelle contenenti tutte le traduzioni necessarie per la corretta localizzazione

I file contenuti nella cartella en.lnproj/ sono i seguenti: InfoPlist.strings, Localizable.strings, flag.png. In cui: InfoPlist.strings integra la traduzione delle voci presenti nel file info.plist presente nella cartella principale; Localizable.strings la traduzioni delle stringhe presenti nel codice; flag.png l’immagine localizzata; in questo caso potrebbe rappresentare la bandiera del Regno Unito. Cliccando sul file Info.plist, presente nella cartella Resources del vostro progetto, quando siete in XCode, potrete modificare alcune impostazioni del programma. Notate come sia impostato nell'ultima voce il file nib (la finestra principale) che viene eseguito all'avvio (MainWindow in questo caso). Cliccando, invece, due volte sui file presenti nella cartella /NIB Files avrete modo di eseguire l'Interface Builder. Apriamo, quindi, tale editor sul file nomeprogetto ViewController.xib e, cercando all'interno della finestra Library, trasciniamo un oggetto Label e uno Data Picker: eseguite l'applicazione e avrete così creato, con una velocità strabiliante, una semplice interfaccia grafica per il vosto amato Apple iPhone.

L’AUTORE Laureato in Ingegneria Informatica, da oltre un decennio realizza soluzioni multimediali e software su svariate piattaforme e con diversi linguaggi. Certificato EUCIP Core, appassionato di fotografia, lingua giapponese, istruttore di nuoto FIN, ha recentemente lavorato come tester di dispositivi mobili per un grande operatore mobile italiano; è contattabile su [email protected] o direttamente sul sito www.leganza.it.

CONCLUSIONI Nei prossimi numeri approfondiremo l'utilizzo delle librerie disponibili e dell'interface builder allo scopo di realizzare un programma completo. Andrea Leganza

Settembre 2008/ 21 G

022-024:088-093-corsi-xsl

16-07-2008

SOFTWARE 

9:10

Pagina 22

Impariamo a utilizzare il framework Eclipse

PROGETTI JAVA CON ECLIPSE QUESTA NUOVA “RICETTA” ILLUSTRA I PASSI NECESSARI PER LA CREAZIONE E LA GESTIONE DI UN PROGETTO JAVA. SARANNO ILLUSTRATE LE PROSPETTIVE E LE VISTE CLASSICHE PER LO SVILUPPO DI UN’APPLICAZIONE

E

clipse, con i suoi tanti plug-in, è virtualmente un ambiente di sviluppo per qualsiasi linguaggio e per qualsiasi ambito. Può essere impiegato per sviluppare codice C/C++, può essere utilizzato anche per realizzare documenti web (HTML, CSS, XML) e persino per manipolare i contenuti di un database. Nella stragrande maggioranza dei casi, però, Eclipse viene adoperato per lo sviluppo di software Java. In questa lezione saranno illustrati e dimostrati i concetti di base indispensabili per la creazione e la manipolazione di un progetto Java in Eclipse.

CREARE UN PROGETTO JAVA La prima cosa da fare per creare un progetto Java in Eclipse è utilizzare l’apposito wizard della piattaforma. Dal menu bisogna selezionare “File » New » Java Project”. Fig. 2: La prima schermata del wizard di creazione di un nuovo progetto Java.

Fig. 1: Per creare un nuovo progetto Java selezionare dal menu di Eclipse la voce “File » New » Java Project”.

REQUISITI Conoscenze richieste Rudimenti di Java Software Java SDK (JDK), Eclipse

Impegno

¥ Tempo di realizzazione

Immediatamente sarà mostrata la schermata della procedura di creazione del progetto. La prima informazione richiesta è il nome che si vuole dare al progetto. Digitiamo “Ciao Mondo” per la nostra applicazione esemplificativa. Le aree sottostanti permettono di controllare alcuni parametri fondamentali.. La prima area, titolata “Contents”, chiede di stabilire come creare il progetto. La scelta predefinita è “Create new project in workspace”; significa che un nuovo progetto inizialmente vuoto sarà creato nel workspace in uso (cfr. Ricetta #1, ioProgrammo 129). In alternativa, selezionando “Create project from existing source” è possibile creare un nuovo progetto importando dei sorgenti già esistenti. La seconda delle aree disponibili, quella titolata “JRE”, permette di scegliere la piattaforma

G 22 /Settembre 2008

di sviluppo da utilizzare fra quelle configurate precedentemente in Eclipse (cfr. Ricetta #1). Grazie a questa opzione è possibile sviluppare (e contemporaneamente verificare) il proprio software su una specifica versione di Java. La terza area, “Project layout”, permette di scegliere come organizzare i sorgenti all’interno del nuovo progetto. Due le ipotesi possibili: inserire i package e i sorgenti direttamente all’interno della cartella principale del progetto, oppure creare all’interno di questa una sotto-directory specifica per i sorgenti, tipicamente nominata src. Nelle più recenti versioni di Eclipse quest’ultima è la scelta predefinita. Utilizzare una cartella specifica per i sorgenti, infatti, è generalmente più comodo, in quanto il progetto può contenere anche altri tipi di cartelle e di file, come immagini, configurazioni ecc. L’ultima area, “Working sets”, permette di associare il progetto a un working set. I working set sono una delle mille facilitazioni offerte da Eclipse per filtrare i progetti e imporre delle viste sui contenuti. h t t p : / / w w w. i o p r o g r a m m o . i t

022-024:088-093-corsi-xsl

16-07-2008

9:10

Pagina 23

Impariamo a utilizzare il framework Eclipse

Per ora è possibile tralasciare questo aspetto. Dopo aver compilato, come si desidera, la schermata del wizard, è possibile passare immediatamente alla configurazione di altre caratteristiche di progetto con il tasto “Next”, oppure creare e utilizzare immediatamente il progetto, con il tasto “Finish”. Scegliamo quest’ultima strada. D’altronde, la configurazione di un progetto può sempre essere variata, in qualsiasi momento, selezionando il progetto e visualizzandone le proprietà nel menu mediante tasto destro.del mouse.

LE PROSPETTIVE L’aggettivo più adatto per descrivere il piano di lavoro di Eclipse è: liquido. Ogni elemento può essere scelto, dimensionato e posizionato a piacere dall’utente. La piattaforma comprende centinaia di strumenti e gadget, e lo sviluppatore può mescolare insieme quelli a lui più congeniali, in modo da crearsi uno o più set di riferimento. Queste combinazioni prendono il nome di prospettive (perspective). Eclipse, inoltre, mette a disposizione un buon numero di prospettive predefinite. La distribuzione di Eclipse dedicata agli sviluppatori Java comprende almeno tre o quattro prospettive predefinite che si adattano bene alla produzione del codice di questo tipo. Tipicamente, lo sviluppatore Java passa la maggior parte del proprio tempo sulla prospettiva chiamata genericamente proprio “Java”. È la prospettiva predefinita per i progetti Java, può essere attivata (qualora fosse stata cambiata) dal menu “Window » Open Perspective » Java”. La medesima operazione può essere compiuta anche con alcuni bottoni presenti solitamente nell’angolo in alto a destra, nella finestra principale del programma.

 SOFTWARE

sionata. È possibile chiudere una vista, eliminandola così dalla prospettiva, oppure è possibile aggiungere altri componenti, scelti fra quelli disponibili, agendo con la voce di menu “Window » Show View”. Adesso è facile immaginare quale grado di personalizzazione possa raggiungere l’ambiente.

REALIZZAZIONE DEI SORGENTI Torniamo all’argomento principale della ricetta, cioè alla realizzazione di un progetto Java. Per ora disponiamo del progetto “Ciao Mondo”, vuoto. Il miglior componente che lo sviluppatore Java può utilizzare per organizzare i contenuti del proprio progetto, è il Package Explorer che per default viene posizionato a sinistra. Questa vista permette di organizzare i sorgenti e le risorse che sono dentro al progetto. Di base è simile ad un file system manager, in quanto visualizza i file che sono nel progetto, ma fornisce alcune agevolazioni pensate appositamente per lo sviluppatore Java. I package, ad esempio, non vengono mostrati come delle semplici cartelle, nidificate l’una dentro l’altra: questo aspetto viene mascherato, e ciascun pacchetto è mostrato come un elemento a sé stante. Provare per credere. Selezionate la cartella 7 del progetto, aprite il menù contestuale (quello che nella maggior parte dei sistemi è il menù da tasto destro) e scegliete “New » Package”.

NOTA

CARTELLA BIN A ogni cartella di sorgenti presente in un progetto Java di Eclipse corrisponde una cartella di eseguibili. Normalmente alla cartella di sorgenti predefinita src è abbinata la cartella di compilati bin. In pratica, i file .class compilati automaticamente dall’ambiente, vengono conservati in questo percorso. Il Package Explorer di Eclipse tiene nascoste le cartella con i compilati, ma è possibile localizzarla con il file manager del proprio sistema operativo o con la vista di Eclipse chiamata Navigator.

Fig. 4: Creazione di un nuovo pacchetto con il Package Explorer.

Fig. 3: Per cambiare prospettiva è disponibile l’apposito menu “Window » Open Perspective”.

Ogni prospettiva è formata da una serie di viste (view), ognuna delle quali è, di fatto, un componente indipendente. La prospettiva predefinita per Java, normalmente, comprende un’area di editing centrale contornata da una collezione di viste quali il Package Explorer, la Console, l’Outline ed altre ancora. Ciascuna di queste viste può essere trascinata lungo lo schermo e venire riposizionata o ridimenh t t p : / / w w w. i o p r o g r a m m o . i t

Fig. 5: Il wizard di creazione di un nuovo package Java.

Nel wizard di creazione del nuovo pacchetto scegliamo il nome it.ioprogrammo.test. Il nuovo pacchetto, inserito nella cartella src, sarà presentato come un elemento unico, e non come tre

Settembre 2008/ 23 G

022-024:088-093-corsi-xsl

16-07-2008

SOFTWARE 

9:10

Pagina 24

Impariamo a utilizzare il framework Eclipse

cartelle nidificate. Molto comodo! Adesso selezionate il package appena creato e, sempre con il menu contestuale, andate a scegliere la voce “New » Class”.

Non dimenticate di salvare le modifiche apportate al sorgente.

Fig. 8: Il codice della classe CiaoMondo all’interno dell’editor.

NOTA

DISATTIVARE LA COMPILAZIONE AUTOMATICA La compilazione automatica dei sorgenti è, nella maggior parte dei casi, utile e proficua. Può però capitare che si preferisca disattivarla, in modo che il progetto venga compilato solo su esplicita richiesta. È possibile farlo deselezionando l’opzione di menu “Project » Build Automatically”. Per compilare, a questo punto, bisognerà richiamare la voce “Project » Build Project”. Con l’opzione “Project » Clean”, invece, è possibile cancellare gli eseguibili generati da una compilazione precedente, automatica o manuale che sia, in modo da ripulire eventuale sporcizia accumulata sul file system.

Fig. 6: Creazione di una nuova classe con il Package Explorer.

ESEGUIRE UNA CLASSE Il wizard di creazione di una nuova classe Java comprende numerose facilitazioni. Agendo con i comandi dell’interfaccia è possibile scegliere i modificatori della classe (public, private ecc.), eventuali superclassi estese ed interfacce implementate, e molte altre cose. Ad esempio si può lasciare all’ambiente il compito di generare lo scheletro dei metodi astratti che la classe deve implementare. Tutto ciò fa risparmiare tempo allo sviluppatore. Utilizzando il wizard creiamo la classe pubblica CiaoMondo, nel pacchetto it.ioprogrammo.test, e dotiamola del metodo main() con l’apposita opzione.

Prima di eseguire un software Java è sempre necessario compilarlo. Eclipse provvede automaticamente alla compilazione dei sorgenti, nel momento stesso in cui vengono salvati, in modo tale che non sia necessario compilare esplicitamente prima di ogni lancio. L’ambiente, quindi, nasconde il passaggio da sorgente a bytecode. Per lanciare l’esecuzione di una classe è necessario, per regola Java, che questa contenga un metodo public static void main(String[]). La classe it.ioprogrammo.test.CiaoMondo contiene uno di questi punti di avvio, quindi è possibile utilizzarla allo scopo. Selezioniamola dal Package Explorer, quindi agiamo con il menu “Run » Run As » Java Application”, oppure selezionando l’opzione corrispondente che si ha dalla freccia a fianco del bottone tipo tasto play (Fig. 9). Il programma, a questo punto, verrà eseguito inter-

Fig. 9: “Run As » Java Application” permette di eseguire una classe contenente un metodo main() valido.

namente a Eclipse. L’output prodotto viene mostrato nella speciale vista chiamata Console, solitamente posizionata nella parte bassa dell’ambiente.

NOTA

SCORCIATOIE UTILI G CTRL + S Salva il file corrente. G ALT + INVIO Apre la finestra delle proprietà dell’elemento corrente. G CTRL + M Espande o normalizza le dimensioni della vista selezionata. G CTRL + SHIFT + R Mostra la finestra di ricerca risorse, grazie alla quale è possibile cercare molto velocemente dei sorgenti o delle risorse presenti all’interno di un progetto.

Fig. 7: Il wizard di creazione di una nuova classe Java. Fig. 10: L’output prodotto dalla classe CiaoMondo, come mostrato dalla vista denominata Console.

Agiamo ora sul codice generato dall’ambiente, in modo che corrisponda al seguente:

NELLA PROSSIMA RICETTA

package it.ioprogrammo.test; public class CiaoMondo { public static void main(String[] args) { System.out.println("CIAO MONDO!"); } }

G 24 /Settembre 2008

La prossima “ricetta” insegnerà come inserire delle librerie in un progetto Java e come esportarne le proprie creazioni, in modo da poterle distribuire a terzi. Carlo Pelliccia h t t p : / / w w w. i o p r o g r a m m o . i t

026-029:032-035

22-07-2008

15:24

Pagina 26

ioProgrammo Web 

Un plug-in per implementare una galleria fotografica

CREARE UN NUOVO MODULO PER DRUPAL UNA DELLA POTENZIALITÀ DEI NUOVI CMS È QUELLA DI POTERNE AUMENTARE LE FUNZIONALITÀ ATTRAVERSO LA CREAZIONE DI MODULI DEDICATI A COMPITI PARTICOLARI, FACILMENTE GESTIBILI E INTEGRABILI ALL'INTERNO DEL CORE DELL’APPLICAZIONE

C J CD J WEB drupal.zip

cdrom.ioprogrammo.it

creare un portale da zero è diventato semplice grazie ai software di tipo CMS (Content Management System). Il primo è stato PhpNuke, poi PostNuke e ora la ne esistono per tutti i linguaggi di programmazione. Alcuni di essi sono basilari, altri sono avanzati, modulari ed espandibili ed altri ancora, quelli più complessi per intenderci, sono considerati CMF (Content Management Framework). Tra questi ultimi, quelli che vanno per la maggiore nel mondo LAMP (Linux Apache Mysql PHP) sono Joomla e Drupal. Abbiamo scelto Drupal con l’intenzione di mostrare come sia semplice aumentarne le potenzialità, creando dei moduli da inserire all'interno del core, così da permetterci di realizzare quello di cui abbiamo bisogno. In questo articolo partiremo, dunque, dalla base della modularità di Drupal, facendo la nostra conoscenza con gli Hook.

BASI PER LA STESURA DI UN MODULO

REQUISITI Conoscenze richieste Programmazione di base PHP, installazione e gestione del CMS Drupal Software Drupal

Impegno Tempo di realizzazione

La prima cosa da fare per scrivere il nostro modulo, da ora in poi mymod, è quello di creare una directory all'interno del path dedicato ai moduli che non fanno parte del core di Drupal (/modules): sites/all/modules. Il nome di questa directory dovrà essere lo stesso scelto per il modulo, quindi mymod, al suo interno dovranno essere creati i due file che rappresentano la base del nostro modulo. Anche in questo caso questi file dovranno avere come nome quello del modulo, ma uno avrà estensione .info, l'altro estensione .module. Il primo, mymod.info, serve a Drupal per mostrarci le informazioni sul modulo al momento della sua installazione all'interno della sezione di admin, mentre il secondo,, mymod.module, è il modulo vero e proprio. A questi due file è possibile aggiungerne un

G 26 /Settembre 2008

terzo, non sempre richiesto, che avrà come nome sempre quello del modulo, e come estensione .install. Scopo di questo file è quello di definire le operazioni SQL necessarie alla corretta installazione del nostro modulo all'interno del sistema, il che si traduce di solito nella creazione della tabella o delle tabelle dedicate al modulo stesso. Se vi state chiedendo il perché di questa divisione, la risposta è molto semplice: nella versione 4 di Drupal, la divisione tra .info e .module non esisteva, e quello che ora è nel .info era contenuto all'interno di una funzione del modulo. Si era notato, però, che questa scelta si ripercuoteva sulle performance del sito perché tutto il file del modulo, e tutti i file che venivano inclusi tramite include e/o require, erano parsati dall'interprete PHP solamente per riuscire ad avere indietro quei pochi dati che ora sono contenuti nel file con estensione .info.

CARATTERISTICHE DEL .INFO Il contenuto del file mymod.info è molto semplice: ; $Id$ name = MyMod; description = Il mio primo modulo version = "0.1x" package = IoProgrammo Ed Master dependencies = thickbox

La prima riga è sempre ;$Id$ ed avrebbe un significato soltanto se usassimo il cvs, l'svn o altro sistema analogo. La seconda (name) dichiara il nome del modulo in linguaggio umano, e sarà usato all'interno della sezione di amministrazione di Drupal. Da non confondere con il nome del modulo che abbiamo scelto (mymod) all'inizio dell'articolo, e che ci porteremo dietro per tutta la sua durata. La h t t p : / / w w w. i o p r o g r a m m o . i t

026-029:032-035

16-07-2008

9:19

Pagina 27

Un plug-in per implementare una galleria fotografica

terza riga corrisponde alla descrizione del modulo, sempre in linguaggio a noi comprensibile; la quarta alla versione del modulo e la quinta permette di raggruppare i moduli, all'interno di una stessa area, vedi Fig. 1.

Fig. 1: Il nostro modulo all'interno della sezione apposita

Vi è poi la sesta riga “dependencies”, il cui scopo è quello di definire quali sono i moduli necessari per il funzionamento di quello che andremo a creare. Questi devono essere già attivi all'interno del sistema prima di tentare l'installazione del nostro modulo; in Fig. 1 si può notare come il mymod non sia selezionabile essendo Thickbox non installato (la scritta “missing” in rosso è autoesplicativa). Come si è notato, essendo questi dei prerequisiti, la mancanza (o la non attivazione) anche di uno solo renderà impossibile l'installazione del nostro nuovo modulo. In questo modulo la richiesta di Thickbox è solo una questione di spiegazione, che noi trasformeremo in bellezza visiva del risultato finale. Quindi installiamolo ed attiviamolo prima di tentare di attivare il nostro modulo.

COSA VOGLIAMO REALIZZARE Siamo pronti alla scrittura del nostro modulo ma, a ben vedere, ancora non abbiamo deciso lo scopo: iniziamo dalle basi e definiamo i vari elementi:

 ioProgrammo Web

Drupal: quest'ultimo ci permette di usare il primo all'interno del nostro portale, ma non ha niente a che fare con Ajax. Prima di procedere, controlliamo di aver creato la directory madre delle nostre gallerie (la chiameremo galleria/), una sotto directory per il nostro esempio (la chiameremo galleria1/) e, all'interno di quest'ultima, due directory: mini/ che conterrà le thumbnail delle nostre immagini e tb/ che conterrà le immagini in dimensione reale. Ovviamente, questa è una struttura semplicistica, non ottimizzata; il codice proposto, come vedrete, salta alcuni dei controlli basilari, focalizzando l’attenzione solo su quanto di nosto reale interesse. Ricapitolando, la struttura delle nostre cartelle sarà così formata:

NOTA

RISORSE WEB Ecco alcune risorse che sicuramente vi saranno utili:

/ {la root di drupal} gallery/ galleria1/

Drupal.org (http://www.drupal.org): è il quartier generale di Drupal.

mini/ tb/

INIZIAMO A SCRIVERE IL CODICE Ora che abbiamo definito cosa vogliamo fare, e abbiamo definito la base su cui lavorare, iniziamo a scrivere il codice del nostro modulo. Partiamo indicando al core di Drupal di prestare attenzione anche al nostro modulo, vigilando quando l'utente cerca di accedere a un determinato path: function mymod_menu($may_cache) { $items = array();

Drupal.it (http://www.drupal.it): è la comunità italiana dedicata a Drupal. Se non siete anglofoni o se comunque cercate aiuto in Italia è quello che fa per voi. ZioBuddalabs.it (http://www.ziobuddalab s.it): se state cercando una azienda che possa realizzare i vostri progetti usando Drupal come base, avete trovato le persone giuste.

if ($may_cache) { $items[] = array

G

tutti possono utilizzare il nostro modulo

G

tutto quello di cui abbiamo bisogno è già presente all'interno di una directory del nostro sito web.

( 'path' => 'gallerià, 'title' => 'Directory gallerià, 'description' => 'Le nostre gallerie', 'callback' => 'mymod_main', //'callback arguments' => array(''),

Ok, ma allora cosa deve fare il nostro modulo? Una cosa molto semplice: mostrare a video, leggasi passare al browser, il codice HTML necessario alla visualizzazione di tutte le immagini contenute in una particolare directory. Utilizzeremo il plugin Thickbox di Jquery (la libreria AJAX usata da Drupal) per dare quel tocco di originalità al nostro output. Attenzione a non confondere il plugin Thickbox di Ajax con il modulo Thickbox di h t t p : / / w w w. i o p r o g r a m m o . i t

'access' => TRUE, 'type' => MENU_CALLBACK ); } return $items; }

Analizziamo il codice, partendo dalla definizione della funzione: la prima parte del nome è mymod, esattamente uguale al nostro

Settembre 2008/ 27 G

026-029:032-035

16-07-2008

9:19

Pagina 28

ioProgrammo Web 

NOTA

INSTALLIAMO SEMPRE DEVEL Quando si inizia a programmare per Drupal è sempre consigliabile installare ed attivare il modulo “devel” che permette tra le altre cose di cancellare tutta la cache, di vedere cosa è registrato nella nostra sessione, ma soprattutto ci consente di vedere il contenuto del nodo che abbiamo appena caricato. Inoltre quando sviluppate togliete la cache dall'hook_menu() inserendo la dicitura “|| 1==1” prima della “)” di chiusura dell'if.

Un plug-in per implementare una galleria fotografica

modulo, mentre la seconda è _menu($may_ cache). Se provate ad aprire altri file .module noterete che tutti contengono una funzione simile, dove quello che cambia è il solo nome del modulo. Questo perché Drupal, per conoscere chi gestisce un certo path (galleria/) opera un ciclo sui moduli installati e attivati, richiamando da questi tutte le funzioni che vengono formate, quindi unendo il nome fisico del modulo (mymod) e la stringa _menu(), quello che in gergo viene definito come hook. Per capirci, se dovessimo eseguire delle istruzioni ogni volta che viene eseguito il cron, ci basterebbe definire una funzione interna al nostro modulo chiamata mymod_ cron() e ,automaticamente, il core la richiamerebbe allo scoccare di ogni ora (oppure ogniqualvolta si deciso di impostare il tempo di cron). Esistono anche hook per le operazioni sugli utenti (mymod_user), quelli sui nodi (mymod_ nodeapi) e, ancora, quelli per i form (mymod _form_alter).Per una lista esaustiva vi rimandiamo alla seguente URL:

G

callback: rappresenta il cuore dell'elemento, il suo contenuto è la funzione da richiamare quando viene invocata una pagina web corrispondente a questo elemento.

G

callback_arguments: alla funzione definita tramite callback è possibile passare dei parametri oltre a quello che viene fornito dal core (vedrete tra poco cosa intendiamo). Tale parametro è utile quando vogliamo far gestire alla stessa funzione due URL diverse, diversificando il comportamento della funzione a seconda dell'URL richiesta; gli elementi di questo parametro devono essere racchiusi all'interno di un array() e verranno passati alla funzione di callback come primi argomenti.

G

access: permette di gestire gli accessi alla pagina da parte dell'utente collegato, basando questo controllo sui permessi dell'utente stesso. Nel nostro modulo, non avendo particolari restrizioni da considerare, settiamo il parametro direttamente a 7, mentre, in caso contrario, avremmo dovuto utilizzare la funzione user_access(). La descrizione del funzionamento di questa routine esula dallo scopo di questo articolo.

G

type: come detto per i parametri title e description, Drupal lega questo elemento all'interno di un menu che viene visualizzato dall'utente. Tuttavia esistono vari tipi di menu, ed esiste anche la possibilità che non ci debba essere nessun tipo di collegamento. Nel nostro esempio con MENU_CALLBACK, abbiamo indicato a Drupal che la nostra scelta è quella di non legare l'elemento a un menu in particolare.

http://api.drupal.org/api/group/hooks/5

Ritorniamo alla nostra funzione. Il parametro $may_ cache consente a Drupal di memorizzare il contenuto della funzione e, nel contempo, gestire gli elementi che devono essere modificati a runtime; un esempio potrebbe essere un modulo sulle quotazioni di borsa, in cui il titolo non dovrebbe essere “Quotazioni di oggi”, ma “Quotazioni del 23 Agosto 2008 alle 10.30”. Siamo così giunti alla creazione del singolo elemento ($items[]), formato dai campi: G

path: rappresenta la base del percorso che viene gestito dal modulo. In questo modo il core di Drupal è sempre a conoscenza di qual è il modulo delegato alla gestione di una pagina web, nonchè di tutte le sue sottopagine.

G

title: è il titolo dell'elemento. Questo campo è necessario perché, di default, Drupal associa ogni elemento a un link inserito all'interno di un menu che viene presentato all'utente (sempre che l'utente abbia i permessi per visualizzarlo). Quale sia questo menu dipende dal path: più il path è articolato, maggiore sarà il sottolivello del menu che verrà linkato, sempre che ci siano altri $items che definiscono dei path di livello superiore.

G

description: è la descrizione dell'elemento e, come per title, è utile quando ci si trova all'interno di un menu.

G 28 /Settembre 2008

Prima di continuare, cerchiamo di comprendere meglio la funzione del campo path, perché questo rappresenta una delle componenti principali di tutto il modulo. Il funzionamento di Drupal, quando cerca qual è il “responsabile” di una certa URL, è il seguente: preso il path nella sua interezza e diviso in pezzi più piccoli tramite il divisore “/” (slash) controlla se qualche modulo lo gestisce per intero: in caso di risposta affermativa viene chiamata la callback associata a tale path, passando NULL come argomento. In caso di risposta negativa, viene tolto l'ultimo “pezzo” e riformulata quest'ultima domanda. Tutto questo termina quando la risposta diventa positiva: c'è un elemento che riesce a gestire l'URL, e alla callback associata vengono passati tanti parametri quanti sono i “pezzi” che sono stati h t t p : / / w w w. i o p r o g r a m m o . i t

026-029:032-035

16-07-2008

9:19

Pagina 29

Un plug-in per implementare una galleria fotografica

tolti, in cui il valore di ogni parametro è il pezzo che è stato eliminato. Nel nostro caso, mymod gestisce, ad esempio, l'URL galleria (nessun parametro passato), galleria/kde (dovremo poter gestire un parametro di funzione) e galleria/kde/4 (dovrebbe poter gestire due parametri di funzione).In modo analogo, ma molto più semplicemente, vengono presentati all'utente i vari menu: si raggruppano tutti i path definiti negli $items[] , e li si mette in ordine alfabetico ascendente; poi, per ogni / contenuto nel path, l'elemento viene indentato. Questa indentazione è legata anche alla necessità che ci sia un elemento che gestisca l’elemento padre. Ad esempio, “galleria/” e “sistema/” saranno mostrati allo stesso livello, mentre aggiungendo, dopo “sistema/”, “galleria/kde/” questo verrà posto dal motore di template sotto “galleria/” (mostrato in modo che si noti che è un sottolivello e magari rendendolo “nascondibile”),ma prima di “sistema”.

LA FUNZIONE DI CALLBACK Non ci resta che vedere come è implementata la funzione di callback dell'elemento definito all’interno di hook_ menu(): function mymod_main($galleria = NULL) { $tmpl = ''; $handle =

 ioProgrammo Web

$output .= ""; } else { $output = "Non esiste quella galleria"; } return $output; }

Questa funzione è molto semplice, e non essendo questo un corso sul PHP, analizzeremo solamente il funzionamento della stessa. Lo scopo è quello di prendere il nome di tutte le immagini contenute all'interno della directory mini/ di una directory definita dal parametro $galleria e, dopo averle ordionate, creare un HTML basato su un template costruito all’uopo, Il codice da noi sviluppato tiene conto della scelta di utilizzare il plugin Thickbox di Jquery: all'utente viene mostrata una versione in miniatura dell'immagine reale, quando egli cliccherà sulla thumbnail, la stessa sarà ingrandita; il plugin Thickbox entrerà in funzione, mostrando l'imm agine vera senza la necessità di cambiare la pagina. Il codice dell’ultima riga: return $output;

è il tipico costrutto che si trova all'interno delle funzioni di callback definite dai vari hook_ menu(); il contenuto di $output deve essere l'HTML che il browser dell'utente dovrà opportunamente gestire. el nostro caso, $output conterrà l'HTML delle immagini della galleria che vogliamo visualizzare.

opendir("/var/www/iop/galleria/".$galleria."/mini");

Michel “Zio Budda” Morelli $output = ' '.$galleria.' '; if ($handle) { $files = array(); while (false!==($dir=readdir($handle))) { if ($dir!='.'&&$dir!='..' && !strpos($dir,"_resize")) { array_push($files,$dir); } } closedir($handle); sort($files); foreach($files as $file) { $output .= str_replace('%FILE%',$file,$tmpl); }

h t t p : / / w w w. i o p r o g r a m m o . i t

Fig. 2: Un’anteprima di come apparirà la galleria di immagini che abbiamo imparato a creare leggendo questo articolo

Settembre 2008/ 29 G

030-033:032-035

16-07-2008

9:21

Pagina 30

ioProgrammo Web 

Ambienti per lo sviluppo di Web Application in PHP

PRIMI PASSI CON ZEND FRAMEWORK ESAMINIAMO IN DETTAGLIO LA STRUTTURA DEL PIÙ NOTO AMBIENTE PER WEB APPLICATION PHP. GETTEREMO LE BASI PER PROGETTARE UN’APPLICAZIONE BASATA SUL PARADIGMA MODEL VIEW CONTROLLER

T J CD J WEB zend.zip

cdrom.ioprogrammo.it

REQUISITI Conoscenze richieste Buona conoscenza di PHP e dei PATTERN Software PHP, APACHE

Impegno Tempo di realizzazione

ra i fattori che rendono PHP ancora appetibile come linguaggio di programmazione per applicazioni Web, a distanza di oltre dieci anni dal suo primo rilascio, è la sua capacità di disporre di una serie pressoché infinita sia di estensioni, sia di applicazioni riusabili Open Source. In particolare, l’introduzione di un nuovo motore ad oggetti con la versione 5, ha iniettato nuova linfa al progetto, permettendogli di accedere ad un’area molto interessante della programmazione: quella dei framework ad oggetti. Ovviamente, nel caso del PHP, quelli di interesse sono i Web Application Framework, ovvero finalizzati allo sviluppo di Web Services e Web Applications. Alla base dell’utilizzo di un framework vi è un semplice concetto: risparmiare tempo nella stesura di codice che svolge compiti eguali o simili a quello già sviluppato da altri, evitando così di reinventare ogni volta soluzioni a problemi già noti. Un classico campo di applicazione di tale filosofia si trova nelle interfacce grafiche, dove tale approccio è divenuto, col tempo, sempre più applicabile in quanto gli elementi di interazione con l’utente appartengono ad un ben identificato insieme. Dal punto di vista della programmazione, un framework prevede un approccio “full object oriented”, nel senso che una applicazione (o parte di essa, come una GUI) possono essere viste come delle specializzazioni di una applicazione più generica, dalla quale ereditano una serie di funzioni e proprietà, alcune delle quali dovranno essere specializzate, altre potranno essere lasciate come sono. Pertanto si applicano i vari concetti del paradigma OO non tanto a singoli elementi (come le classi) quanto ad un insieme coordinato costituente una intera applicazione. Ad oggi, PHP dispone di diversi framework, più o meno noti. In questo articolo e nei successivi che seguiranno, verrà esaminato uno di quelli più noti in assoluto: Zend Framework. In particolare, in questo primo articolo, prima di addentrarci nel costruire una applicazione di esempio,

G 30 /Settembre 2008

andremo a vedere come si installa e quali sono gli elementi cardine del framework in questione, facendo riferimento all’ultima versione disponibile mentre scriviamo: la 1.5.2.

PREREQUISITI DI INSTALLAZIONE Prima di addentrarci nell’installazione, è bene rilevare una caratteristica cardine del nostro framework: la strutturata interna a componenti. Come da manuale, ogni componente offrirà un servizio ben identificato, non legato ad un contesto specifico e riusabile; inoltre può essere usato a prescindere dalla presenza di altri componenti, e disporrà di una interfaccia ben definita con l’esterno grazie all’utilizzo dei metodi pubblici. Nella versione 1.5.2, troviamo ben 39 componenti, che vanno dalla gestione di Access Control List (ACL) alla creazione di server e/o client per XML-RPC. In generale, un framework è costituito da una o più librerie, che devono essere agganciate alla nostra applicazione. Zend Framework non fa eccezione, dove la libreria che deve essere installata non prevede dei file binari, ma è una libreria “full php”. Dato che tale architettura sfrutta pesantemente il motore PHP dovremo verificare, a seconda dei componenti che intendiamo utilizzare, che nel motore siano disponibili una serie di estensioni a loro volta necessarie per costruire correttamente il componente e quindi indispensabili per attivare correttamente i servizi offerti. Ad esempio: il componente “Zend_Db”, che fornisce dei servizi di interfaccia verso database con accesso tramite SQL standard, a seconda della base dati a cui vogliamo realmente agganciarci, a sua volta necessita della presenza delle estensioni PHP che permettono la comunicazione col database specifico. Per cui, avendo un database di tipo MySQL dovremo curare che il motore PHP abbia attiva l’estensione “mysqli”. Inoltre il h t t p : / / w w w. i o p r o g r a m m o . i t

030-033:032-035

16-07-2008

9:21

Pagina 31

Ambienti per lo sviluppo di Web Application in PHP

motore stesso deve essere almeno aggiornato alla versione 5.1.4 o successiva (in particolare si consiglia la 5.2.3 o successiva, in quanto da quella versione vengono introdotti una serie di miglioramenti di performance e sicurezza). La lista completa delle estensioni necessarie ad i vari componenti è indicata alla URL http://framework.zend.com/manual/en/requirements.extensions.ht ml e non viene qui replicata per brevità.

Chiaramente, se le estensioni necessarie ad un componente non sono presenti, quel componente non potrà essere usato (ma ciò non compromette l’utilizzabilità di altri componenti con requisiti diversi).

INSTALLAZIONE E PRIMI PASSI CON ZEND FRAMEWORK Per come è strutturato, l’installazione della libreria contenente i vari componenti del framework risulta particolarmente banale – come si vede nell’apposito riquadro. Per riferimento, indicheremo la directory dove è stato decompresso il file della libreria con $ZEND_HOME. Costruiamo rapidamente un primo, banalissimo, test per verificare che l’installazione sia andata a buon fine, richiedendo di stampare a video il numero della versione. Vi è infatti un componente, chiamato Zend_Version, che mette a disposizione una costante VERSION contenente il numero di versione e il metodo “compare Version($versione)” che permette di valutare la versione corrente rispetto a una di riferimento, passata al metodo (che ritorna 0 in caso la versione corrente sia la stessa indicata, numeri positivi se la versione corrente è più aggiornata o numeri negativi in caso la versione corrente sia meno aggiornata). L’uso di tale componente permette, costruendo applicazioni ridistribuibili, di verificare che sul server vi sia una versione compatibile con quanto richiesto dal nostro codice. Il file, che chiameremo zf_test_base.php ed inseriremo in una directory visibile via web sarà semplicemente:

Chiaramente l’output sarà una scritta nel browser del tipo: “Versione di ZF installata: 1.5.2” Da questo semplicissimo esempio si possono notare immediatamente due elementi cardine h t t p : / / w w w. i o p r o g r a m m o . i t

 ioProgrammo Web

della programmazione col Zend Framework: prima di poter utilizzare un componente dovremo caricare la parte della libreria che lo contiene tramite una chiamata “require_once” e, una volta caricato il componente, per poterlo usare correttamente, dovremo usare il suo namespace completo. In particolare, per il caricamento del componente, se andiamo ad esaminare il contenuto della sottodirectory “Zend” di $ZEND_ HOME, troveremo una serie di file PHP che costituiscono la porta di accesso ad i vari componenti. Ricordarsi di includere il corretto file PHP per usare un dato componente è senza ombra di dubbio un qualcosa che vorremmo evitare, dato che è sicuramente una attività soggetta ad errori e dimenticanze. Per questo motivo è possibile sfruttare un componente, chiamato Zend_Load, che permette in generale di includere file PHP dal nome variabile (o che contengono una data classe) e di gestire l’autoloader dei file delle classi messe a disposizione dal framework, registrandosi come PHP SPL Autoloader per le classi Zend_*. Usando tale componente, il file di test diviene:

Chiaramente, usando solo una classe non è possibile apprezzare l’utilità dell’utilizzo dell’autoloader. Proviamo, quindi, a estendere il test usando i servizi di data, messi a disposizione dal componente Zend_Date. In particolare chiediamo di stampare la data corrente, formattata in base alle impostazioni della lingua da noi scelte. Per far ciò dovremo definire un nuovo oggetto della classe Zend_Date e di questo usare il metodo “get”, passandogli come parametro una costante che specifica la formattazione come sopra indicata. L’esempio diviene quindi:

NOTA

LA NASCITA DI ZEND Zend, note come “The PHP Company” è l’azienda fondata da Andi Gutmans e Zeev Suraski nel 1999 per fornire servizi professionali e prodotti utili per lo sviluppo in PHP. Per quanto sia una azienda che commercializza anche prodotti non Open Source, mantiene sempre una forte leadership per tutto ciò che riguarda il mondo PHP, contribuendo fortemente allo sviluppo delle versioni aggiornate del motore e supporta progetti Open Source, come il Zend Framework ed il plugin di sviluppo PHP per Eclipse (PDT).

IL PATTERN FRONT CONTROLLER Il pattern Front Controller è concepito appositamente per le Web Application e prevede di inviare le diverse, possibili richieste, a prescindere della visualizzazione effettiva da effettuare, ad un unico gestore delle viste, che a sua volta è

composto da: 1) una sezione “comune” alle diverse tipologie di viste possibili 2) una o più sezioni che vengono caricate a runtime (dette “command object”) in base alle caratteristiche peculiari della vista specifica da gestire.

Settembre 2008/ 31 G

030-033:032-035

16-07-2008

9:21

Pagina 32

ioProgrammo Web 

Ambienti per lo sviluppo di Web Application in PHP



Vediamo ora di iniziare a sviluppare la base di una applicazione MVC con il nostro framework; come inizio ovviamente creeremo un “hello world” e poi nei prossimi articoli proseguiremo costruendo un’ applicazione strutturata. Una applicazione sviluppata in base a questo paradigma con Zend, prevede di organizzare l’alberatura delle directory con una struttura che separi i tre elementi del pattern. In particolare dobbiamo far riferimento alla struttura di Fig. 1.

Come si vede, non è stato necessario specificare i require_once delle due classi usate.

NOTA

PHP. LE ORIGINI Un po’ di storia. Il PHP nasce nel 1994 come una collezione di script CGI per la gestione della pagine personali, ad opera di Rasmus Lerdorf. A quel tempo il prodotto si chiamava infatti PHP/FI (Form Interpeter). Dalla versione 3, rilasciata nel 1998, nella quale il motore venne riscritto in larga parte da Andi Gutmans e Zeev Suraski con un approccio analogo a quello usato da ASP, il nome diviene “semplicemente” PHP.

IL PARADIGMA MVC: LO STATO DELL’ARTE DELLE WEB APP L’ultima caratteristica che vogliamo esaminare di Zend Framework è come questo permetta di costruire applicazioni basandosi sul paradigma Model-View-Controller (MVC). Dietro questo “three-letter acronym” vi è lo standard di fatto nella costruzione delle moderne Web Applications complesse, in cui si deve tenere presente che creare pagine in cui vi è un misto di codice e markup, nel caso di applicazioni complesse, può risultare poco gestibile se non dallo sviluppatore originale, nonchè, visto che la costruzione dell’interfaccia utente è oggi divenuta un’arte a se stante, spesso possono esservi nel team degli esperti di creazione di interfacce, che non conoscono bene come invece deve essere gestita la logica di back end della stessa. Infine la logica di funzionamento di una applicazione deve dipendere esclusivamente dai dati e non da come questi vengono presentati e/o inseriti dall’utente tramite l’interfaccia. Quanto appena detto, porta sia a separare il codice della business logic da quello della presentation logic della nostra applicazione, sia a separare i ruoli nel team che si occupa di costruire tutta l’applicazione. Il paradigma MVC realizza tale separazione distinguendo tre elementi nella nostra applicazione (che possono corrispondere a tre diverse professionalità nel team): la parte di MODEL, che rappresenta le funzionalità basilari della nostra applicazione (e.s.: in genere l’accesso ad i dati viene gestito da qui); la parte di VIEW, che gestisce come viene effettuata la presentazione dei dati all’utente (nel caso di una Web Application qui troviamo la sezione HTML) e la parte di CONTROLLER, che rappresenta il legame tra il MODEL ed il VIEW, dove viene deciso come gestire la parte di presentazione (ovvero quali parti del VIEW mandare effettivamente a video) e quali funzioni del MODEL è necessario attivare.

G 32 /Settembre 2008

Fig. 1: Schema ad albero del progetto MVC

L’implementazione del paradigma MVC usata dalla Zend usa un altro pattern di base che è il Front Controller, pertanto è necessario fare in modo di direzionare l’accesso iniziale ad una pagina specifica che inizializzerà il pattern, e quindi attiverà le sottosezioni specifiche a seconda della vista reale da gestire. Su un sistema LAMP, supponendo di aver definito un virtual server APACHE per LOCALHOST che punta alla directory PUBLIC della Fig. 2, questo passo coincide con la creazione, nella directory PUBLIC 1) di un file .htaccess contenente le seguenti righe di codice: RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Che permette di direzionare tutte le richieste di file che non abbiano le estensioni elencate verso la pagina index.php. La pagina index.php, che deve contenere un puntatore ad una pagina di ingresso all’interno della sezione APPLICATION della nostra alberatura, contenente la parte comune alle viste, ovvero: h t t p : / / w w w. i o p r o g r a m m o . i t

030-033:032-035

16-07-2008

9:21

Pagina 33

 ioProgrammo Web

Ambienti per lo sviluppo di Web Application in PHP



require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action

A questo punto è necessario costruire la nostra pagina di base app_comune.php all’interno della directory application. Questa dovrà contenere, dopo l’attivazione dell’autoloader, la chiamata al pattern Front Controller (gestito dal framework tramite un singleton per assicurare che vi sia una singola istanza per request del browser) che a sua volta si preoccupa di passare la palla ad un controller.

In questo primo esempio supponiamo sempre di voler attivare la vista di default (anch’essa chiamata “Index”), per cui la classe sarà vuota. Quello che manca ora per finire è proprio la vista, che (non avendo specificato nulla) dovrà trovarsi views/scripts/index/index.phtml (in cui l’estensione phtml è usata come “best practice” da Zend per segnalare che il file non contiene solo codice PHP, ma anche tag HTML). La vista che andremo a costruire conterrà finalmente il nostro “hello world”.

// Gestione del singleton del front controller $frontController =

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF