Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
it
n. 62 - marzo/aprile 2005
bimestrale - anno undicesimo
Direttore Responsabile
Marialetizia Mari (mmari@infomedia.it)
Direttore Esecutivo
Il fascino delle Francesco Balena (fbalena@infomedia.it)
Managing Editor
coding guidelines
Renzo Boni (rboni@infomedia.it)
Collaboratori
Marco Aldrovandi
Gionata Aladino Canova
Dino Esposito, Andrea Ferendeles
© 2004 Microsoft. Tutti i diritti riservati. Tutti i marchi registrati citati sono di proprietà delle rispettive società.
quanto tu possa immaginare. Lo stile RAD delle Web Form ti permette di
creare rapidamente applicazioni per qualsiasi browser e piattaforma. In
più, l’utilizzo della tecnologia IntelliSense all’interno del migliorato editor
HTML ti aiuta a velocizzare la scrittura dei tag. Tutto ciò significa che
puoi diventare più produttivo e più abile nel concretizzare le tue idee.
Misco Italy S.p.A, fornitore di prodotti per informatica e ufficio, ha
realizzato in ASP.NET un nuovo sito per offrire servizi completi ai propri
clienti. L’utilizzo di Visual Studio .NET e del debugger integrato, l’uso
dei controlli Web di ASP.NET e il nuovo linguaggio C# hanno garantito
tempi di sviluppo e di test senza precedenti.
microsoft.com/italy/vstudio/value/
N.62
SPECIALE
ENTERPRISE
SOA e il .NET Framework (seconda puntata) 31
Aspetti pratici della Service Oriented Architecture per gli sviluppatori .NET
di Paolo Pialorsi
SOFTWARE ENGINEERING
I design pattern più famosi implementati in VB .NET (prima puntata) 36
In questa breve serie di articoli vedremo alcuni esempi di implementazione dei design pattern più noti
di Lorenzo Vandoni
Editoriale 4
.NET Tools 60
a cura di Davide Mauri
Recensione libri 65
INTELLIGENZA ARTIFICIALE
Oracoli di Turing e Sistemi Logicamente Aperti 41
In questo articolo, anteprima assoluta, parliamo di Nuove Frontiere della Computazione: “frontiere” che hanno a che fare
con il concetto stesso di computazione oltre il limite di Turing. In particolare sono illustrate due teorie della computazione,
unite da un mix di idee nuove, tra cui la ricerca sui “sistemi logicamente aperti”.
di Ignazio Licata
ARCHITECT'S CORNER
Un cluster in 15 clic 46
Specialità del giorno. Soluzioni pratiche invece della teoria.
di Ingo Rammer
PRIMO PIANO
Verso la sanità elettronica 51
di Alberto Rosotti
I MITI
Configurazione e deployment in ASP.NET 56
Vediamo come ASP.NET risolve molte delle limitazioni che affliggevano ASP.
di Dino Esposito
Codice allegato
All’indirizzo ftp.infomedia.it/pub/VBJ sono liberamente scaricabili tutti i listati relativi agli articoli pubblicati.
La presenza di questa immagine indica l’ulteriore disponibilità, allo stesso indirizzo, di un progetto software
relativo all’articolo in cui l’immagine è inserita. Il nome identifica la cartella sul sito ftp.
I
l programmatore è un animale particolare, general- base autocomposizioni che creano
mente pigro ma dotato di molta inventiva. Chi ha let- piccole applicazioni già funzionan-
to “Gli uomini vengono da Marte e le donne da Ve- ti; esistono poi una vasta gamma
nere”, capisce facilmente che, per le sue caratteristi- di wizard che aiutano l’utente nei
che, il programmatore è quasi sempre maschio. Date compiti più disparati.
un problema ad un programmatore ed esso ve lo risol- Il limite di questi strumenti sta nel-
verà. Affidate allo stesso individuo un compito ripetiti- l’essere stati creati per acconten-
vo: dopo poche iterazioni vi svilupperà un sistema che tare il massimo numero possibile
faccia il lavoro al posto suo; questo succede anche se, di utenti (si tratta cioè di strumenti
in termini di lavoro complessivo, la seconda soluzione orizzontali). Quando, nel creare le
dovesse essere più onerosa! Tralasciando le conside- nostre applicazioni, ci troviamo di
razioni filosofiche, tutte le volte che si automatizza un fronte ad un compito ripetitivo per
processo ripetitivo, si produce più in fretta e si riduce cui non esiste nessuno strumento
la possibilità di commettere errori. In questo articolo ve- in Access, probabilmente abbia-
dremo come sviluppare uno strumento atto allo scopo, mo un’esigenza verticale. Il primo
che funziona dal lato Access, mentre in un prossimo passo per creare la nostra cassetta
appuntamento vedremo come sviluppare una ulteriore degli attrezzi sarà un’attenta analisi
aggiunta per l’editor VBE. Il codice è disponibile come di quello di cui avremo veramente
sempre al sito FTP di Infomedia ed il suo utilizzo è gra- bisogno. Appena scoperto cosa si
tuito; è fornito completo di sorgenti che possono esse- può fare con una semplice toolbar,
re modificati e ridistribuiti a condizione di non rimuove- è facile cadere nella tentazione di
re le indicazioni sull’autore. Per la comprensione del- aggiungerci tutto quello che ci vie-
l’articolo serve una discreta padronanza dell’ambiente ne in mente. Selezioniamo invece
di Access e la conoscenza del VBA; i concetti esposti ciò che ci è realmente utile e svi-
sono validi da Microsoft Access 2000 in poi. luppiamolo al meglio.
?codeproject.AllForms(0).Name
si lavora; come si può intuire, le potenzialità sono
ed otterremo frmHistory, che è il nome della sola enormi. Per avere un’idea di cosa è possibile fare,
maschera contenuta nel file VBJWiz.mda. è sufficiente considerare che i wizard di Access
L’add-in può lavorare sulla maschera seleziona- sono realizzati in Access e VBA!
ta tramite le istruzioni Per progettare un add-in, è bene considerare i
seguenti passi:
Screen.ActiveForm.SetFocus
Set frm = Screen.ActiveForm • Identificare quali sono le funzioni desiderate
• Dividere le funzioni già fornite da Access da
Ovviamente, una volta che si è impostato il rife- quelle da creare; ad esempio, allineare a de-
rimento alla maschera, si può iterare sull’insieme stra i controlli è una funzione già inclusa
dei controlli o navigarne il modello a oggetti. • Realizzare le funzioni non incluse nel databa-
E se volessimo aggiungere del codice che ge- se dell’add-in e collaudarle
stisce un evento? Il modello ad oggetti di Access • Realizzare nell’add-in una toolbar o un menu
ci aiuta: il codice descritto nel Listato 2 aggiun- che richiami tutte le funzioni volute
ge l’evento Click alla form selezionata in quel mo- • Pubblicare l’add-in
mento. Un particolare degno di nota è il metodo
CreateEventProc, che crea automaticamente la Una menzione speciale merita la denomina-
dichiarazione della funzione con i parametri ne- zione degli oggetti. Conviene cercare un prefis-
cessari e la posiziona al giusto posto nel modulo so inusuale sia per gli oggetti di database che
associato alla maschera. per le funzioni.
In pratica, una volta creato il riferimento al mo- Access è abbastanza intelligente da tenere
dulo associato alla maschera, è sufficiente dichia- separati gli spazi dei nomi; infatti, creando nel
rare l’evento da creare e poi inserirvi le righe di database VBJ.mdb una funzione che si chia-
codice volute. ma “VBJWizMiaFunzione”, ossia uguale a quel-
la presente nell’add-in, il pulsante della toolbar
Progettare un add-in continuerà a richiamare quella giusta. Comunque,
L’esempio appena visto consente di capire che esplorando il progetto può essere utile ricono-
si possono costruire tabelle, form e codice che scere al volo dove una certa funzione sia stata
stanno in un database separato da quello su cui implementata, grazie al suo nome.
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\
0
11.0\Access\Menu Add-Ins\&VBJ Toolbar
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\
1 Expression =VBJWizStart()
11.0\Access\Menu Add-Ins\& VBJ Toolbar
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\ |ACCDIR\
1 Library
11.0\Access\Menu Add-Ins\& VBJ Toolbar VBJWiz.mda
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\
4 Version 3
11.0\Access\Menu Add-Ins\& VBJ Toolbar
richiede che sia abilitata la visualizzazione dell’in- pi di tipo data. Se la provate, non funzionerà, sem-
testazione e del pié di pagina maschera. plicemente perché il codice
Stored Procedure
sotto controllo
L’architettura a due livelli è tuttora il tipo di architettura più comune nelle applicazioni
multi-utente, e le stored procedure sono lo strumento favorito nella sua implementazione
fisica. L’uso di stored procedure solleva necessariamente delle problematiche legate alla
consistenza dei dati e alla gestione degli errori con T-SQL.
di Francesco Quaratino
L'
introduzione delle stored procedure (SP) ha evitando così l’interazione impro-
permesso di spostare buona parte della lo- pria con i dati da parte degli utenti
gica dell’applicazione nel DBMS, apportan- non autorizzati. Infatti, è possibile
do notevoli benefici nello sviluppo e nella manuten- concedere ad un utente di data-
zione dell’applicazione stessa. base il diritto d’esecuzione di una
L’aspetto forse più evidente delle stored procedure è SP indipendentemente dai diritti
quello prestazionale, poiché il codice in esso conte- d’accesso alle tabelle interessate,
nuto è compilato ed ottimizzato dal DBMS e lo stes- assegnati allo stesso utente. SQL
so piano d’esecuzione della SP è riusato da altre ses- Server permette di avere fino a 32
sioni concorrenti. livelli di nidificazione (nesting) di
L’impiego più efficiente della rete rende le architettu- SP che consentono di incapsulare
re basate su SP notevolmente scalabili. Infatti, al mo- in ogni procedura singole opera-
mento della richiesta di esecuzione di una SP, il client zioni secondo i dettami della pro-
invia al server unicamente i parametri di input della gettazione strutturata.
SP piuttosto che l’intera istruzione T-SQL, producen- È molto meglio scrivere N pro-
do in tal modo un traffico di rete minore. Dal punto cedure articolate in una struttu-
di vista ingegneristico, le SP garantiscono una forte ra “chiamante/chiamato” piutto-
centralizzazione della manutenzione della logica del- sto che scrivere un’unica proce-
l’applicazione e una distribuzione degli aggiornamen- dura che racchiude in sé l’intero
ti a dir poco immediata, dal momento che modificare codice T-SQL.
il codice di una SP non richiede alcun intervento sul La prima soluzione è più vantag-
client, il quale si aspetta soltanto di trovare lo stesso giosa per la creazione, il test e la
nome di procedura e stessi nomi e tipi di parametri manutenzione e garantisce il riu-
nel database a cui è connesso. so più oculato dei piani di esecu-
Attraverso le SP è possibile anche implementare un zione da parte del DBMS.
meccanismo di sicurezza dei dati – incapsulando de- Ad ogni modo occorre fare suf-
finitivamente la logica racchiusa nel codice delle SP – ficiente attenzione alla consisten-
za dei dati trattati nella SP, poiché
al di là dei vincoli d’integrità refe-
renziale applicati nel database, un
Francesco Quaratino è consulente in ambito di progettazione
controllo superficiale degli erro-
e amministrazione di database OLTP e OLAP, oltre che di
applicazioni software orientati ai dati. È certificato MCDBA e ri generati nell’esecuzione di una
sviluppa in VB6, ASP, VB.NET e ASP.NET. Può essere contatto stored procedure può dar luogo a
all’indirizzo e-mail: fquaratino@infomedia.it transazioni non consistenti.
ria, ne risulterebbe che non solo l’Istruzione 1 esterne – che altimenti solleverebbero un errore
non avrebbe effetto, ma anche che l’Istruzione numero 3903 (che denota appunto l’assenza di
3 non sarebbe processata. una transazione aperta).
Allo scopo di rendere più leggibile una struttu-
ra di transazioni nidificate, è buona norma dare
un nome a ciascuna transazione.
Con le transazioni esplicite Se si sceglie di seguire questa norma, sarà
il DBA può creare delle ato- bene ricordare che è possibile specificare il
nome della transazione per ogni BEGIN e COM-
mic unit of work composte MIT TRAN e solo per il ROLLBACK TRAN più
esterno, altrimenti verrà generato un errore nu-
da istruzioni multiple mero 6401.
giunto della funzione @@ERROR e delle istru- Quindi, sia il roll back che il commit sono de-
zioni RETURN, GOTO e RAISERROR. legati alla sp_A più esterna, dove il flusso di
La funzione di sistema @@ERROR ha lo sco- esecuzione giunge per mezzo dei due RETURN
po di catturare il numero dell’errore intercorso presenti nelle procedure chiamate. Inoltre, i RE-
nell’esecuzione di un’istruzione T-SQL. Se il va- TURN comunicano il numero di errore a sp_A,
lore restituito è uguale a 0, significa che è an- che è quindi in grado di decidere la sorte della
dato tutto liscio. transazione dell’intera struttura nidificata.
Nel valutare il valore restituito da @@ERROR Si noti il modo in cui viene recuperato il valo-
occorre fare attenzione al fatto che il suo valore re restituito dal RETURN durante l’esecuzione
viene alterato dall’esecuzione di una qualsiasi delle procedure interne – che avviene attraver-
altra istruzione T-SQL che la segue (per inten- so il comando EXEC[UTE].
derci anche un IF). In presenza di un errore, RAISERROR consen-
Ne consegue che è buona norma assegnarne te la comunicazione al client di un messaggio
sempre il valore a una variabile, in modo da po- ad-hoc, definito dall’utente, e la registrazio-
terne valutare il contenuto anche in seguito, e ne dello stesso nel log degli eventi, attraverso
soprattutto interrogare la funzione subito dopo l’opzione WITH OPTION.
ogni istruzione di interazione col database: In questo modo fornisce al DBA uno stru-
mento di diagnostica veloce e facile da im-
INSERT INTO … plementare.
SELECT @ERROR = @@ERROR
IF @ERROR <> 0 Conclusioni
ROLLBACK TRAN L’inerzia della conoscenza è uno dei mali in-
curabili dell’informatica.
RETURN ordina l’uscita incondizionata da un In altre parole, quanto più consolidata è una
batch e restituisce alla procedura chiamante il tecnologia, tanto più difficile risulta modificar-
numero intero specificato (esempio RETURN 1). la, anche quando i benefici della neo-tecnolo-
GOTO fa saltare il flusso d’esecuzione ad un’eti- gia sono palesi e evidenti anche alle menti più
chetta specificata, mentre RAISERROR restitui- conservatrici.
sce al client un messaggio d’errore definito dal- L’architettura a due livelli è una dimostrazione
l’utente, con la possibilità di registrarlo nel log esemplare di tale fenomeno, tenuto conto che è
degli eventi del sistema. sicuramente il tipo di architettura software più
Supponiamo di avere una procedura sp_A che comune nelle applicazioni multi-utente orienta-
chiama in ordine sp_B e sp_C. Per semplicità te ai dati.
le procedure chiamate si intendono identiche Sovente le stored procedure non vengo-
(vedi Listato 2). no sfruttate appieno ma relegate ad assolve-
re funzioni particolarmente laboriose e lunghe
senza poterne sfruttare le qualità prestaziona-
li, ad esempio ignorando la possibilità di nidi-
XACT_ABORT ON causa ficazione.
il roll back automatico Inoltre, laddove si fa un uso considerevole di
SP, è bene non sottovalutare il controllo de-
della transazione al gli errori che potrebbero causare gravi incon-
sistenze dei dati e che sarebbero difficilmen-
verificarsi di un errore te rintracciabili senza un metodo di diagnosti-
ca efficace.
Logica applicativa
in programmi VB.NET
Prima puntata
di Lorenzo Vandoni
Considerazioni preliminari
.N
ET fornisce molti strumenti per scrive-
re programmi con funzionalità di acces- In [3], prendendo spunto da
so ai dati, ma non offre un vero e pro- una discussione relativa ai pa-
prio framework per la realizzazione di applicazio- radigmi di accesso ai dati tipici
ni gestionali. dei linguaggi di programmazio-
Lo stesso vale per tutti gli altri strumenti di svilup- ne object-oriented, si era arriva-
po più diffusi, come Java e Delphi, prova ne sia la ti a ipotizzare la realizzazione di
proliferazione di strumenti CASE o framework spe- un’estensione ad ADO.NET per
cifici, come ad esempio [1] e [2]. creare delle classi polimorfiche
Chi sviluppa abitualmente applicazioni gestionali che facilitassero lo sviluppo di
è abituato a dover implementare spesso funziona- funzionalità lato server.
lità simili tra loro, come classi per la gestione del- Riassumo nei punti seguenti le
la logica applicativa, finestre per l’inserimento dei conclusioni a cui si era giunti:
dati, o report riassuntivi.
Quasi tutte le software house che lavorano in que- • il problema dell’impedance
sto ambito hanno creato insiemi di componenti, più mismatch, tipico delle ap-
o meno evoluti, allo scopo di generalizzare queste plicazioni object-oriented,
funzionalità e diminuire quindi il tempo necessario consiste nel fatto che ogget-
per sviluppare programmi simili. ti intrinsecamente comples-
In questo articolo, che può essere considerato si, come ad esempio il mo-
come l’ideale continuazione di [3], verrà discus- dello di un’automobile in un
sa una possibile soluzione per la realizzazione di programma CAD, debbano
classi .NET che implementino la logica applicativa essere rappresentati in me-
del programma. moria utilizzando strutture
dati diverse da quelle usate
per rappresentare gli stessi
oggetti in un DBMS relazio-
nale, con la conseguente ne-
Lorenzo Vandoni è laureato in Informatica, ed è uno spe- cessità di scrivere algoritmi
cialista di progettazione e sviluppo con tecniche e linguaggi
di traduzione per convertire
object-oriented. Ha collaborato alla realizzazione di framework,
strumenti di sviluppo e software commerciali in C++, Java e la rappresentazione di uno
Visual Basic. Può essere contattato tramite e-mail all’indirizzo stesso oggetto tra due for-
vandoni@infomedia.it. mati differenti;
Questo non significa però che le stesse con- gi e Ruota non è assimilabile ad un DataSet,
siderazioni non possano essere riportate su al- che rappresenta una collezione di tabelle, ma
tri linguaggi e librerie. piuttosto ad un DataRow, cioè ad una singo-
la riga di una tabella.
Architettura di ADO.NET Per questo motivo, la classe Automobile ver-
L’architettura di ADO.NET è molto più ricca rispet- rà creata come sottoclasse di DataRow;
to a quella di ADO, grazie anche alla disponibilità di
meccanismi come ereditarietà e il polimorfismo. • un DataSet costituisce una rappresentazione
Questo rende possibile progettare le nostre clas- in memoria di una struttura relazione costituita
si applicative come estensioni delle classi del fra- da un insieme di tabelle e dalle loro relazioni.
mework, ereditandone tutte le funzionalità di base. Per questo motivo, è il candidato ideale per
Potremo quindi cercare all’interno del framework definire il mapping tra le due rappresentazio-
una classe che costituisca un’astrazione del con- ni dei dati, relazionale ed object oriented. La
cetto di tabella, e utilizzarla come classe base classe AutomobileSet viene definita come sot-
per le classi applicative più specifiche, come ad toclasse di DataSet, per implementare questo
esempio Automobile. mapping nel caso specifico;
La struttura gerarchica delle classi di ADO.NET,
però, prevede anche una separazione di re- • un Data Adapter viene incapsulato all’interno
sponsabilità fra le classi dedicate al reperi- della classe AutomobileSet, ed utilizzato per
mento dei dati, che fanno parte dei managed accedere ai dati sul DBMS.
provider, come ad esempio DataReader e Da- L’obiettivo progettuale, in questo caso, è quel-
taAdapter, e le classi dedicate al mantenimen- lo di incapsulare all’interno di un’unica classe
to degli stessi dati in memoria, come DataTa- la logica di mapping, invece di lasciare all’ap-
ble e DataSet. plicazione client il compito di creare il Data
Questa struttura rende meno ovvie alcune scel- Adapter necessario per accedere ai dati;
te di progettazione.
Tornando a considerare il Listato 1, possiamo • la rappresentazione in memoria dei dati può
vedere come l’ipotesi di partenza fosse quella essere costituita da altri oggetti collegati al
di creare delle classi che fornissero sia dei me- disegno dell’automobile, come ad esempio
todi generici per permettere l’accesso ai dati, Carrozzeria e Motore.
come Leggi e Salva, sia dei metodi specifici, La rappresentazione object-oriented di questi
come Capovolgi e Ruota. In questa ipotesi, si oggetti potrà essere diversa dalla corrispon-
era sfruttata la possibilità di definire dei metodi dente rappresentazione sul DBMS.
Shared – o statici – per implementare le opera-
zioni che dovevano essere applicati all’insieme
di oggetti, e non al singolo oggetto (per esem- Listato 1 Scheletro di una classe che maschera
pio, il metodo Trova applica una condizione al- l’accesso ai dati mantenuti in una tabella
l’insieme delle automobili per estrarre un’uni-
ca automobile).
La decisione di cercare di sfruttare ed esten- Class Automobile
‘metodi specifici dell’oggetto
dere ADO.NET, piuttosto che creare una ge- Public Sub Ruota(nGradi As Integer)
rarchia di classi ad-hoc, ci costringe a rivede- ...
re questa ipotesi. Public Sub Capovolgi()
La nostra classe Automobile, cioè, dovrà es- ...
Public Sub Stampa()
sere costruita in modo da adattarsi all’architet- ...
tura sottostante. ‘metodi per la gestione del DBMS
Public Sub Salva()
Progettazione ...
Public Shared Sub Leggi(nObjId As Long)
La soluzione proposta è schematizzata in Figu- As Automobile
ra 1. L’idea è la seguente: ...
Public Shared Sub Trova(sCondition As String) As
• l’oggetto che rappresenta il disegno di un’au-
...
Automobile
tomobile, al quale devono poter essere ap- End Class
plicate operazioni specifiche quali Capovol-
TDO
Typed Data Object
TDO è l’acronimo di Typed Data Object (“oggetto dati tipizzato”), un insieme di strumenti e
metodologie di supporto per lo sviluppo di applicazioni basate su piattaforma Microsoft .NET.
In questo articolo scopriremo come funziona e quali sono i vantaggi per lo sviluppatore.
di Andrea Ferendeles
T
DO è l’acronimo di Typed Data Object (“oggetto
dati tipizzato”), un insieme di strumenti e meto- “Ogni qual volta si deve realizza-
dologie di supporto per lo sviluppo di applica- re un’applicazione a n livelli, che
zioni basate su piattaforma Microsoft .NET. TDO con- fa uso di una base dati, occorre
sente agli sviluppatori di applicazioni basate sul Fra- scrivere codice per utilizzare que-
mework Microsoft.NET (v. 1.0 e v. 1.1) di produrre, in sti dati.”
modo completamente automatico, tutto il codice sor- Tale codice, in un’ottica Object
gente necessario (in C#), per la gestione di una base Oriented e in applicazioni ad n
dati Microsoft SQL Server 7.0 e 2000. TDO è basa- strati, viene modellato in classi
to su ADO.NET ed è un generatore di codice sorgen- e incapsulato nello strato Data
te Visual C# .NET. e successivamente utilizzato nel-
“Anziché scrivere a priori codice generico per una ge- lo strato Business. Chiameremo
nerica base dati ed a posteriori codice specifico per d’ora in avanti “Data Object” il
la base dati specifica (operazione che richiede tempi codice necessario alle operazio-
non indifferenti rispetto all’intero ciclo di vita del sof- ni di accesso ai dati.
tware), dotiamoci a priori di uno strumento che scriva Dalle osservazioni fatte durante
all’occorrenza il codice per quella base dati specifica”. il processo di sviluppo di una ap-
Questo si fa con TDOCodeGenerator.exe. plicazione, si osserva che:
Inoltre è facile osservare come, nonostante ogni base
dati abbia la propria struttura e le proprie caratteristiche, • il codice nello strato Business
su tutte sia possibile compiere le stesse operazioni in è sempre il frutto della logi-
modo parametrico (ricerca, inserimento, ecc…). ca delle esigenze del Cliente
Se in aggiunta riusciamo ad ottimizzare tale codice (Business Requirements), e tali
ed a renderlo robusto, grazie anche alle caratteristi- esigenze sono diverse di volta
che intrinseche dei prodotti specifici utilizzati (MS SQL in volta;
Server 2000 e .NET), allora possiamo portare a fattor
comune tali accorgimenti e “usufruirne” ogni volta dal • il codice nello strato Data, è
codice scritto automaticamente per la nostra base dati sempre il frutto delle operazio-
specifica, tramite System.Data.TDO.dll. ni che si compiono sui dati, e
tali operazioni sono sempre
concettualmente le stesse (ri-
Andrea Ferendeles ha iniziato ad appassionarsi di informatica
cerca, inserimento, modifica,
dai tempi del VIC20. Ha sviluppato in BASIC, Logo, Turbo
Pascal, C, C++, Visual Basic, fino ad arrivare ai linguaggi
ecc…);
.NET, quali VB.NET e C#. È certificato MCP, MCAD, MSF,
MCSD (.NET), MCDBA, MCT. Può essere contattato via email: • la struttura della base dati vie-
aferendeles@infomedia.it. ne invece creata ad hoc per
caratteristica di oc-
cupazione della me-
moria RAM “al primo
utilizzo”, consenten-
do così l’uso seletti-
vo delle classi TDO.
Adattamento ai cam-
biamenti: a fronte di
cambiamenti nella
struttura della base dati
(cambiamenti della base
dati in corso d’opera/
manutenzione evolutiva)
è sufficiente rieseguire
TDOCodeGenerator.exe
sul database ed in po-
Figura 3 TDOCodeGenerator.exe in azione sul Database Northwind chi secondi tutte le clas-
si sono rigenerate. Ad
esempio, l’esecuzione
di TDOCodeGenerator
Documentazione automatica del codice: tutta sul database Northwind ha generato 16.590 ri-
la documentazione “tecnica” delle classi prodot- ghe di codice C#, per un totale di 720 Kb di co-
te da TDOCodeGenerator è automaticamente dice sorgente, 192 Kb di codice compilato MSIL
scritta attraverso XML Documentation, per ogni e 25 Kb di spazio occupato in RAM; il tutto in
classe, property, function, ecc… Questa carat- soli 8 secondi.
teristica unitamente alle funzionalità di VS.NET,
consente allo sviluppatore di produrre automati- Bindable: TDO può essere utilizzato per ope-
camente tutta la documentazione tecnica neces- razioni di data binding (simple e complex); inol-
saria (in formato HTML) per il Data Object. tre implementando l’interfaccia IComponent può
essere utilizzato come componente .NET.
Basato su ADO.NET connesso e/o disconnes-
so: TDO può essere utilizzato sia in modalità Serializable: tutte le classi TDO sono mar-
connessa che in modalità disconnessa, proprio cate con l’attributo [Serializable] e sono dun-
perché utilizza e si integra appieno con la parte que serializzabili sia in formato binario che
connessa (Connection, Command, ecc…) e la in formato XML; in virtù di questa feature
parte disconnessa (DataSet) di ADO.NET. TDO non è stato costruito con il namespace
System.Data.SqlTypes, che contiene tutte clas-
Performance: le performance di TDO sono del si non Serializzabili.
45% migliori rispetto alla parte disconnessa di
ADO.NET (DataAdapter); del 5% rispetto a sta- COM Interoperability: TDO può essere utilizzato
tement T-SQL non parametrici della parte con- da applicazioni basate su COM (ad esempio ap-
nessa (Command). plicazioni scritte in Microsoft Visual Basic 6.0).
Tali performance sono ottenute adottando al-
cuni accorgimenti noti per l’ottimizzazione del- Esempi di utilizzo
le query su MS SQL Server 2000 (es. caching
execution plan). Creare una istanza della classe TDOHelperClass
di TDO:
Scalabilità: TDO risulta molto scalabile in quan-
to tutti gli statement lanciati dallo sviluppatore • Creare un nuovo Progetto in C#.NET
attraverso TDO vengono resi parametrici prima (qualsiasi template)
di essere inviati a SQL Server 2000, sfruttan- • Aggiungere un riferimento a System.Data.TDO.dll
do dunque la scalabilità delle query parametri- • Aggiungere il file di classi generato da TDO
che di SQL Server 2000. Inoltre TDO offre una per il Vs. Database MS SQL Server 7.0/2000
Oppure …
DataTable dt;
tdo.OpenConnection();
//select * from Employees
// where
// Lastname=’Davolio’
// AND
// FirstName=’Nancy’
dt=tdo.tEmployees.SelectDataTable
(
Clause.Where
(
tdo.tEmployees.Lastname==”Davolio”
&&
Figura 2 TDOCodeGenerator.exe /Interactive - La gestione diventa tdo.tEmployees.Firstname==”Nancy”
più semplice tramite una finestra Windows. In modalità
Interactive è addirittura possibile scegliere per quali ope- )
razioni TDO dovrà generare codice per ogni db object );
tdo.CloseConnection();
//Select * FROM [Alphabetical List of Products] Effettuare una Select con la clausola WHE-
tdo.OpenConnection(); //Opzionale RE ... IN:
DataTable myproducts=tdo.vAlphabeticallistofproducts.
SelectDataTable(); • Aprire la connessione al Database
tdo.CloseConnection(); //Opzionale • Utilizzare il metodo SelectXXXXX più appro-
priato.
Eseguire una User/Table Function: • Nella Clause.Where utilizzare la classe
TDOWhereSetOfValues.
• Aprire la connessione al database
• Utilizzare il metodo fNomeFunzione più appro- //Select * FROM Employees WHERE EmployeeID IN (1,3,5)
priato. Tutte le Functions hanno come prefis- tdo.OpenConnection();
so ‘f’. DataTable myEmployees=tdo.tEmployees.SelectDataTable(
• Chiudere la connessione al database Clause.Where(tdo.tEmployees.Employeeid==new TDOWhereSetO
fValues(1,3,5)));
tdo.CloseConnection();
• Aprire la connessione al
Database
• Utilizzare il metodo Se-
lectXXXXX più appropria-
to.
• Nella Clause.Where uti-
lizzare la classe TDOWhe-
reRange.
SOA e il .NET
Framework SOA2
Aspetti pratici della Service Oriented Architecture per gli sviluppatori .NET
N
el precedente articolo a proposito della Servi- re lo schema di una struttura dati
ce Oriented Architecture abbiamo visto quali che estraggo da un database. Vi-
sono gli aspetti chiave e gli obiettivi di questa sual Studio .NET consente infatti di
nuova architettura del software. Affrontiamo ora alcu- trascinare (drag’n’drop), all’interno
ni aspetti pratici dello sviluppo SOA, rivolgendo la no- dell’area di disegno di un XSD, le
stra attenzione agli strumenti e alle tecniche da adot- tabelle di una base dati, converten-
tare per lavorare con il .NET Framework e con Visual do in schema la loro struttura.
Studio .NET 2003. Esistono poi sul mercato decine di
programmi in grado di fornire editor
Strumenti per disegnare i messaggi evoluti di XSD. Il più famoso di que-
Come abbiamo già visto, una delle fasi più importanti sti è certamente XMLSpy della Al-
di un progetto SOA è il disegno dei messaggi, ad oggi tova [2]. A prescindere dal tool che
sotto forma di documenti XSD. Benché la sintassi di XML utilizziamo per definire lo schema
Schema non sia eccessivamente complessa, consenten- XSD, avremo l’esigenza di trattar-
doci di prendere in considerazione un qualsiasi editor lo da codice. Se stiamo lavorando
testuale (persino il Blocco Note di Windows), conviene con il Framework .NET possiamo
comunque appoggiarsi a qualche software che ci aiuti utilizzare un ulteriore tool, questa
nella definizione dei messaggi. Sicuramente uno stru- volta a riga di comando, di nome
mento comodo e che tutti noi dovremmo avere a dispo- XSD.EXE, che è in grado di leggere
sizione è Visual Studio .NET. Con esso possiamo infatti un XSD e crearne una rappresenta-
creare dei documenti XSD sia utilizzando un designer zione equivalente sotto forma di lin-
grafico (Figura 1), che sfruttando un comodo editor te- guaggio .NET (C#, VB.NET, J#).
stuale, dotato di intellisense sulla grammatica di XSD Pensiamo quindi a questo sem-
(Figura 2). Personalmente utilizzo nella maggioranza dei plice schema:
casi l’editor testuale, perchè ritengo che avendo un mi-
nimo di padronanza del linguaggio XSD si riesca ad es- XSD
sere molto più rapidi, quindi anche più produttivi, che <?xml version=”1.0” encoding=”utf-8”?>
non lavorando con il mouse e il designer grafico. Que- <xsd:schema targetNamespace=”http:
st’ultimo lo utilizzo generalmente quando devo defini- //schemas.devleap.com/Product”
elementFormDefault=”qualified”xmlns=”http:
//schemas.devleap.com/Product” xmlns:
xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”product”>
Paolo Pialorsi è un consulente e autore specializzato nello
<xsd:complexType>
sviluppo di Web Service e soluzioni Web con il Framework
.NET di Microsoft. Lavora nell’omonima società Pialorsi Sistemi <xsd:sequence>
S.r.l. e fa parte del gruppo DevLeap. Può essere contattato <xsd:element name=”description”
via email: paolo@devleap.it. type=”xsd:string” />
</xsd:schema> [XmlAttributeAttribute()]
public int id;
Ipotizzando che il file XSD si chiami product.xsd,
possiamo invocare XSD.EXE nel modo seguente: [XmlAttributeAttribute()]
public System.Decimal euroPrice;
Command Line
XSD.EXE /c /n:DevLeap.Entities product.xsd [XmlAnyAttributeAttribute()]
public System.Xml.XmlAttribute[] AnyAttr;
Dove il parametro /c indica che vogliamo ge- }
nerare una o più classi, corrispondenti alle entità }
descritte nello schema. Il parametro /n comunica
invece quale deve essere il namespace del codi- Siamo a questo punto pronti per includere il file
ce autogenerato. Il terzo parametro è ovviamen- di codice nei nostri progetti e utilizzarlo. Ciò che
te il file XSD sorgente. per noi sarà un’istanza della classe product, per
Il risultato sarà simile al seguente: chi si interfaccerà con noi e per i nostri stessi ser-
vizi sarà un messaggio strutturato come definito
C# in product.xsd. Chi ci garantisce tutto questo è la
using System.Xml.Serialization; presenza nel codice di una serie di attributi, relativi
namespace DevLeap.Entities { al namespace System.Xml.Serialization che sono
finalizzati proprio a dire a XmlSerializer, il motore di
serializzazione dei messaggi, che tipo
di struttura XML deve generare.
Per esempio XmlAttributeAttribute
dice al serializzatore di generare un
attributo XML al cui interno inserire il
valore della proprietà id.
<xsd:import namespace=”http://schemas.devleap.com/
Product”
schemaLocation=”http://localhost/Product.xsd” />
<xsd:element name=”getProduct” type=”xsd:string” />
</xsd:schema>
</types>
più famosi
implementati in VB .NET Prima puntata
In questa breve serie di articoli vedremo alcuni esempi di implementazione dei design
pattern più noti
di Lorenzo Vandoni
I
l movimento dei pattern, nato nel 1993 a seguito È più corretto quindi parlare di
della pubblicazione del libro “Design Pattern” di esempi, anche se nessuno vi vie-
Gamma, Helm, Johnson e Vlissides (soprannomi- terà di utilizzare il codice propo-
nati gang of four, o GoF), costituisce una delle più sto come base per un’analoga im-
significative novità dell’ultimo decennio nel campo plementazione all’interno di una
dell’ingegneria del software. vostra applicazione.
Un pattern è una soluzione generalizzata per un
determinato problema, valida nell’ambito di un con- Descrizione di un design
testo. pattern
Per capire di cosa si tratta, basta fare un parallelo La descrizione di un pattern è
con una ricetta di cucina. Il problema è il piatto da principalmente testuale, ma deve
preparare, la soluzione è la ricetta, e il contesto sono essere strutturata in modo da evi-
gli ingredienti disponibili. denziare alcune proprietà che han-
Un pattern, di per sé, è quindi semplicemente un no lo scopo di descrivere sepa-
approccio alla risoluzione di problemi, del tutto in- ratamente il problema, i vincoli e
terdisciplinare. la soluzione, nonché evidenziare i
Quando si parla di “design pattern”, invece, si in- possibili legami di questo con al-
tende l’applicazione di questo approccio alla proget- tri pattern.
tazione del software. Queste proprietà non sono esat-
In questa serie di articoli verranno mostrati degli tamente identiche in tutte le pub-
esempi di implementazione di alcuni pattern, utiliz- blicazioni. Utilizzando come rife-
zando il linguaggio Visual Basic.NET. Parlare di “im- rimento il libro “Design Pattern”,
plementazione” di un design pattern è di per sé scor- possiamo citare, tra le proprietà
retto, perché la soluzione di un pattern di questo tipo principali:
è di tipo progettuale, e può essere implementata in
molti modi diversi. • Intent, una breve descrizione
dell’obiettivo del pattern;
• Applicability, alcuni possibili usi concreti del • Known uses, un elenco di usi noti del pattern.
pattern; Va notato che questi possono essere antece-
denti alla pubblicazione dello stesso pattern.
• Structure, il diagramma UML delle classi coin- In questo caso il pattern costituisce semplice-
volte; mente la formalizzazione di un procedimento
già noto e applicato in vari contesti.
• Participants, una descrizione più dettagliata Non per questo ne viene diminuita l’utilità.
delle responsabilità delle classi coinvolte; Anzi, descrivere in modo preciso una buo-
na pratica di programmazione può essere il
• Collaborations, eventuali possibili interazioni modo migliore per incentivarne l’utilizzo an-
con altri pattern; che in altri progetti.
• l’interfaccia Iterator definisce i metodi che Object. In questo modo, diventa possibile utiliz-
dovranno essere implementati da qualsiasi zare la collezione per gestire elementi di qual-
iteratore concreto per permettere alle appli- siasi tipo, anche se non ci sarà nessun control-
cazioni client di spostarsi tra i vari elementi lo sul fatto che elementi di tipo diverso venga-
della collezione; no inseriti nella stessa collezione. Le due inter-
• la classe ConcreteIterator implementa l’inter- facce e le due classi, in questo esempio, sono
faccia Iterator per una specifica collezione; state per comodità implementate all’interno del-
• l’interfaccia Collection definisce i metodi che lo stesso file di codice.
dovranno essere implementati da una collezio- Più probabilmente, un’implementazione reale
ne che debba permettere l’utilizzo di iteratori; vedrebbe separate le due interfacce dalle due
• la classe ConcreteCollection implementa classi.
l’interfaccia Collection. Le due classi dovranno però essere in qualche
modo collegate, perché è ovvio che il ConcreteI-
• Collaborations. Nessuna. terator dovrà avere un accesso privilegiato alla
ConcreteCollection, in modo da poterne mani-
• Consequences. Le conseguenze derivanti dal- polare gli elementi senza che questa sia neces-
l’utilizzo del pattern sono la possibilità di de- sariamente costretta a definire dei metodi pub-
finire diversi modi per accedere agli elemen- blici per farlo (il che, tra l’altro, renderebbe qua-
ti della collezione, una semplificazione dell’in- si inutile l’iteratore).
terfaccia pubblica delle classi Collection, che Questa modalità di accesso privilegiato tra clas-
non dovranno dotarsi dei metodi di naviga- si viene resa disponibile con diverse modalità da
zione, e la possibilità di avere diversi iteratori quasi tutti i linguaggi di programmazione orien-
contemporaneamente attivi sulla stessa col- tati ad oggetti.
lezione, che quindi non sarà limitata ad avere Con Visual Basic.NET si può utilizzare la parola
un unico elemento “corrente” o selezionato. chiave Friend, che indica che un particolare me-
todo o proprietà di una classe deve risultare ac-
• Known uses. Gli iteratori sono comunemente cessibile da tutte le altre classi dello stesso pro-
usati in molte librerie e framework ad ogget- getto, ma invisibile all’esterno dello stesso, esat-
ti, sia specializzati, come quelli per l’accesso tamente come se fosse un membro Private.
a database relazionali, sia generici, come ad L’iteratore utilizza questo privilegio per accede-
esempio la Standard Template Library (STL) re alla struttura della collezione, implementata in
di C++. questo esempio tramite un semplice array, e te-
nere traccia della posizione corrente.
Implementazione del pattern in VB.NET L’applicazione di esempio è costituita da una
Il codice di esempio allegato all’articolo ripor- form che sfrutta il principio dell’iteratore per per-
ta l’implementazione delle due interfacce e del- mettere di navigare all’interno della collezione in
le due classi tratteggiate nel paragrafo prece- due modi diversi e indipendenti.
dente. Il numero di metodi definiti nelle interfac-
ce è stato volutamente contenuto in modo da Conclusioni
evidenziare meglio le caratteristiche progettua- La conoscenza dei principali pattern di proget-
li del pattern. tazione permette in molti casi concreti di evitare
L’interfaccia Iterator contiene due metodi per di “reinventare la ruota”, ricorrendo invece a so-
spostare la posizione del record corrente, e un luzioni già note e consolidate.
metodo CurrentItem che permette di accedere Spesso, capita di ritrovare all’interno di un pat-
all’elemento corrente secondo la posizione del- tern la formalizzazione di un ragionamento che
l’iteratore. L’interfaccia Collection, da parte sua, ha portato a una particolare implementazione.
contiene i metodi necessari per aggiungere nuo- In questi casi, il pattern può aiutare a compren-
vi elementi e per contarne il numero. dere meglio implicazioni e limitazioni della solu-
Per definire il tipo degli elementi mantenuti all’in- zione adottata.
terno della collezione sarebbe corretto utilizzare la L’applicazione di pattern, in particolare, può
programmazione generica, ma questo sarà pos- evitare l’adozione di soluzioni troppo rigide od
sibile solo con la prossima versione di .NET. orientate alla semplice risoluzione di problemi di
Per questo motivo, ci si accontenterà di por- programmazione, che alla lunga potrebbero pro-
re il tipo degli elementi della collezione uguale a vocare seri problemi di manutenzione.
Oracoli di Turing
e Sistemi
Logicamente Aperti
In questo articolo, anteprima assoluta, parliamo di Nuove Frontiere della Computazione:
“frontiere” che hanno a che fare con il concetto stesso di computazione oltre il limite di
Turing. In particolare sono illustrate due teorie della computazione, unite da un mix di
idee nuove, tra cui la ricerca sui “sistemi logicamente aperti”.
di Ignazio Licata
G
ran parte dei progressi dell’informatica sono ri- ceva effettivamente quando ese-
volti ad ampliare le risorse dei sistemi di calco- guiva un calcolo. Diversamente
lo in termini di tempo/velocità di elaborazione da quello che si sarebbe portati a
e capacità di memoria. In particolare ci si è concentrati pensare oggi, il problema non ave-
sul “collo di bottiglia” di Von Neumann – computazione va una vocazione puramente appli-
step by step –, ideando architetture massivamente pa- cativa, ma era legato piuttosto al
rallele che distribuiscono l’elaborazione tra più nodi di programma di assiomatizzazione di
calcolo/memoria interconnessi. In alcuni casi si è fatto D. Hilbert ed ai limiti messi in luce
ricorso anche a materiali diversi per realizzare le porte nel 1931 da K. Gödel con i suoi fa-
logiche, in alternativa agli attuali chip di silicio; è il caso mosi teoremi di indecidibilità ed in-
dei bio-chip o del calcolatore ottico. In nessuno di que- completezza: non esiste un siste-
sti casi però la teoria fondamentale della computazio- ma inferenziale deduttivo in grado
ne che deriva dal formidabile lavoro di Alan Turing, On di rispondere della verità o falsità
computable numbers (1936), viene messa radicalmen- di ogni proposizione costruibile tra-
te in discussione. In questa sede vogliamo proporre al- mite funzioni ricorsive enumerabili.
cune considerazioni altamente speculative sulla possi- In pratica una MT fornisce il con-
bilità di definire nuovi modelli di computazione, equiva- testo matematico corretto ed uni-
lenti o addirittura più potenti di quello offerto dalla Tu- versale per la definizione genera-
ring-computabilità. le di algoritmo, in accordo con la
Tesi di Church-Turing: Le MT sono
Il limite di Turing una classe di automi computazio-
Alan Turing mise a punto la sua famosa Macchina di nalmente universali.
Turing (MT) considerando ciò che un essere umano fa- Al di là dei vari formalismi (mac-
chine a registri, sistemi di produ-
zione di Post,Lambda-Calcolo di
Church,Grammatiche di Chomsky,
Ignazio Licata è un fisico teorico. Si occupa di sistemi
ecc.), la MT resta il modello con-
complessi e processi cognitivi. Nel 1998 ha fondato l’Isti-
tuto di Cibernetica Non-Lineare per lo Studio dei Sistemi cettuale più brillante e chiaro del-
Complessi. Può essere contattato tramite e-mail all’indirizzo la computazione, e può essere de-
ilicata@infomeda.it scritta come un nastro infinito sul
Tabella 1 Le caratteristiche significative della computazione naturale rispetto alle Macchine di Turing
Informazione discreta; logica binaria; distribuzione Informazione continua; logica a valori multipli; pat-
sintattica dell’informazione tern continui nello spazio-tempo
Processo deterministico; emergenza computazionale Elementi random; emergenza intrinseca
Seriale/Lineare Parallela/Non-Lineare
re una tabella di valori, oppure una “black-box”. Turing-Computabile, per il quale è impossibile sta-
Ciò che qui conta è rendersi conto del tipo di li- bilire una procedura effettiva per stabilire a priori
mitazioni di una MT. Per definizione, un oracolo è quale informazione è rilevante per la descrizione
dunque in grado di superare i limiti di una MT, ad del sistema. Questo perché l’informazione viene
esempio fornendo l’algoritmo di un insieme non fornita al sistema in modo non-algoritmico (ran-
ricorsivo rispetto alla MT, e risolvendo così l’hal- dom) e soprattutto perché il gioco di interrelazioni
ting problem. In pratica, l’accesso all’oracolo ren- tra sistema ed ambiente è particolarmente com-
derebbe una macchina ibrida capace di affrontare plesso e porta ad una continua riorganizzazione
classi di problemi che nessun sistema algoritmi- strutturale del sistema che non può essere espli-
co può risolvere. Un altro campo in cui gli oracoli citata tramite una semplice procedura ricorsiva.
hanno mostrato una funzione teorica è nella clas- In questa classe rientrano i sistemi non-lineari e
sificazione dei problemi “trattabili” o “intrattabili”, context-dependent, come gli sciami o esseri col-
risolvibili cioè in tempo polinomiale o esponenzia- lettivi, e le reti neurali. Questi sistemi presentano
le in relazione alla dimensione n del problema. Lo un tipo di emergenza detta intrinseca o osserva-
studio delle classi P ed NP è uno dei grandi pro- zionale, non riconducibile ad una produzione com-
blemi aperti della matematica, ma alcune convin- putazionale. È possibile ordinare in una gerarchia
centi argomentazioni hanno messo in luce che i di ordini di complessità i LOS, e dimostrare che
problemi del tipo “NP-completo” (come i problemi è impossibile descrivere un sistema logicamente
di ottimizzazione, dal “commesso viaggiatore” al aperto per mezzo di un singolo modello formale,
folding protein), possono essere ridotti a proble- ossia una MT, e che un sistema ad alto grado di
mi “trattabili” con algoritmi in tempo polinomiale apertura logica può essere soltanto approssima-
con l’ausilio di oracoli. La stessa linea di ragio- to da un altro con apertura di grado n, con n in-
namento ha mostrato però che il tipo di soluzio- terpretabile come numero di vincoli che formaliz-
ne dipende strettamente dalle caratteristiche del- zano le relazioni tra sistema ed ambiente. D’altra
l’oracolo adottato, e dunque non ha un carattere parte, una MT può essere identificata con un ti-
universale ma piuttosto relativo. pico sistema logicamente chiuso (LCS), la cui ar-
È possibile gettare nuova luce sulle caratteristi- chitettura globale non cambia, o comunque può
che delle MT ed ibride utilizzando la teoria dei si- sempre essere ricavata da una procedura effetti-
stemi logicamente aperti (LOS). Com’è noto, tutti i va, ragione essenziale degli scacchi storici dell’IA
sistemi fisici possono essere classificati utilizzando “forte”. Arriviamo dunque al punto essenziale:
tre categorie principali: 1) i sistemi conservatori di Una MT è un sistema logicamente chiuso, un
informazione, che conservano l’energia; 2) i sistemi oracolo è un sistema logicamente aperto.
distruttori di informazione, soggetti a dissipazio- Anche se un oracolo ideale non esiste, ed è frut-
ne; 3) i sistemi amplificatori di informazione, dove to del genio speculativo di A.Turing, è possibile di-
si hanno fenomeni di emergenza e di auto-orga- sporre di dispositivi con capacità “oracolari” che
nizzazione in tempo polinomiale o esponenziale. corrispondono a vari gradi di apertura logica, come
In questa terza classe rientrano i sistemi logica- le reti neurali o gli agenti autonomi dell’IA distribui-
mente aperti, descritti tramite un modello formale ta. Lo studio di questi sistemi suggerisce un nuo-
logicamente aperto, ad esempio un sistema non vo paradigma computazionale analogico.
Sistemi super & sub Turing aperti presentano fenomeni di emergenza intrin-
Lo studio dei sistemi logicamente aperti con ca- seca e dunque sono soggetti ad un forte grado
pacità “oracolari” trova in un gran numero di si- di impredicibilità logica. La computazione “oraco-
stemi fisici la sua ispirazione. Questo corrisponde lare” appare dunque come una forma di compu-
all’ovvia considerazione che in natura non esisto- tazione “dedicata”, costruita sul particolare pro-
no i problemi di “incompletezza” ed “indecidibi- blema e sulle caratteristiche del sistema. La cosa
lità” che affliggono i nostri sistemi formali. La T- non dovrebbe sorprenderci, perché conosciamo
comp è soltanto uno dei modi possibili che pos- bene un dispositivo di questo tipo, messo a pun-
siamo adottare per descrivere il flusso di informa- to dall’evoluzione in millenni di “prove ed errori”:
zione nei processi naturali e artificiali. Una carat- la mente umana.
teristica che va rimarcata, oltre alla non-linearità,
alla sensibilità al contesto, alle capacità evolutive Bibliografia:
ed auto-organizzative multi-livello, è la continuità, [1] M. Davis, “Il calcolatore universale”, Adepti,
che situa il “grado di infinità” dei sistemi oracolari Milano, 2003;
alla potenza del continuo. Ad esempio le configu- [2] M. Davis, “Computability and Unsolvability”,
razioni di una rete neurale possono essere para- Dover, NY, 1982;
metrizzate tramite un parametro reale connesso [3] J.W.Dawson Jr., “Dilemmi logici. La vita e
ai pesi della rete. In generale, lo studio dei siste- l’opera di Kurt Gödel”, Bollati-Boringhieri, To-
mi formali continui, ancora allo stato germinale, rino, 2001;
ha permesso di individuare le caratteristiche signi- [4] A. Hodges, “Storia di un enigma.Vita di Alan
ficative della computazione naturale rispetto alle Turing 1912-1954”, Bollati-Boringhieri, Tori-
MT (vedi Tabella 1). no,1991.
Ma in pratica, quali sistemi fisici possono esse- [5] G. Chaitin, “Information, Randomness and In-
re effettivamente utilizzati per realizzare disposi- completness”, World Scientific, Singapore,
tivi dalle capacità super-Turing? Esistono in que- 1990;
sto senso degli “indizi” interessanti, tutti piutto- [6] J.L.Casti & A.Karlqvist (eds.), “Boundaries and
sto recenti, che in questa sede possiamo soltan- Barriers”, Addison-Wesley,1996;
to menzionare. Esistono classi di sistemi dinami- [7] I. Licata, “Verso una teoria generale dei siste-
ci che possono risolvere formulazioni particolari mi intelligenti”, neuroscienze.net, vol.1, n.1,
dell’halting-problem. Le reti neurali ricorrenti(RNR) 2004;
a modificazione sincrona e con pesi reali posso- [8] C. Hewitt, “The Challenge of Open Systems”,
no ottenere ottime performance su problemi NP- in Byte, 10, 1985;
completi, come i sistemi DAI asincroni, ed anche [9] C. Hewitt, “Open Information Systems:
alcuni algoritmi quantistici mostrano di poter ri- Semantics for Distributed Artificial Intelligence”,
solvere in tempi polinomiali problemi di difficoltà Artificial Intelligence, 47, 1991;
esponenziale per sistemi classici di computazio- [10] G. Minati, M.P. Penna, E.Pessa,
ne. Stesse indicazioni provengono dal DNA-com- “Thermodynamical and Logical Openness in
puting, dove le informazioni opportunamente “in- General Systems”, Systems Research and
cise” sul DNA vengono elaborate da processi en- Behavioral Science, 15, 1998;
zimatici. Infine, anche il chaos computing, erede [11] H.T.Siegelmann, “Computation Beyond the
delle tecniche di controllo dei sistemi caotici, sta Turing Limit”, Science, 268,1995;
entrando in una fase matura, ricca di grandi pos- [12] H.T. Siegelmann, “Neural Networks and
sibilità su problemi di ottimizzazione. Analog Computation.Beyond the Turing Limit”,
È possibile dunque immaginare una tecnologia di Birkhäuser, Boston, 1999;
oracoli neuro-fuzzy, caotici e quantistici. Il prezzo [13] B. MacLennan, “Transcending Turing
da pagare è l’universalità. In tutti i casi citati in- Computability”, Tech. Rep. UT-CS-01-473,
fatti è possibile fornire dei contro-esempi in cui la Dept. Comp. Science, Univ. Of Tennessee,
prestazione viene compromessa da piccole varia- Knoxville, 2001;
zioni dei parametri in gioco, in corrispondenza di [14] D. Deutsch e R. Jozsa, “Rapid Solution of
ciò che si delineano essere come soglie critiche Problems by Quantum Computation”, Proc.
della capacità computante. Al di là dei casi parti- Royal Soc., A439, 1992;
colari, esiste una considerazione intuitiva che può [15] A. Berthiaume e G. Brassard, “Oracle Quan-
aiutarci a comprendere questa convivenza di ca- tum Computing”, Jour. of Modern Optics, XLI,
pacità super & sub Turing. I sistemi logicamente 1994.
Un cluster
in 15 clic
Specialità del giorno: soluzioni pratiche invece della teoria
di Ingo Rammer
N
elle ultime puntate di questa rubrica, ho scritto lo indirizzo IP. In questo scena-
abbastanza di design e di sviluppo di applica- rio, si può non solo gestire un ca-
zioni scalabili. Qualcosa che vi devo per com- rico di lavoro superiore, ma si è
pletezza è una dimostrazione pratica di come installare anche protetti dalle interruzioni di
un cluster e quali sono i vantaggi che se ne ricevono. servizio del sistema: se una delle
In effetti non è in realtà un classico argomento di archi- due macchine va in errore, l’altra
tettura del software. Ho comunque deciso di mostrarvi può gestire semplicemente il ca-
questo aspetto pratico, poiché ho osservato che molti rico ulteriore.
sviluppatori e architetti non sanno come sia facile crea- L’utente noterebbe questa “ava-
re un cluster “load balancing” con Windows. ria” solo perché le prestazioni del-
Se avete seguito i numeri precedenti della rubrica Ar- l’applicazione si degradano di una
chitect’s Corner, avrete certamente notato che sono certa percentuale.
un fautore delle applicazioni scalabili, applicazioni che Tuttavia, l’applicazione non an-
possono essere distribuite su un cluster di macchine drà in errore e continuerà a fun-
per utilizzarne l’ulteriore potenza di elaborazione. Ma zionare.
un attimo! Utilizzare un cluster può non solo migliorare Qualcosa di analogo sarà vero
il throughput dell’applicazione ma permette di ottenere anche per l’installazione dei ser-
anche dei sostanziali vantaggi, anche se a lavorare con vice pack e degli aggiornamenti
l’applicazione sono solo alcuni utenti. del sistema operativo: si posso-
no rimuovere semplicemente sin-
Una macchina va giù... e nessuno lo nota goli nodi dal cluster, applicare l’ag-
Provate a immaginare che i componenti di servizio giornamento a questi nodi, esegui-
(web service, remoting e anche siti web) siano in ese- re il reboot se necessario, e riunirli
cuzione su due macchine in parallelo. al cluster in seguito.
Immaginate anche che entrambe le macchine si com- Possono anche esistere cluster in
portino in modo che dall’esterno si veda un singo- cui vi è un mix di sistemi operati-
vi, dove alcune macchine utilizza-
no Windows NT 4.0, alcune Win-
dows 2000, e altre che sono già
state aggiornate a Windows Ser-
ver 2003.
Ingo Rammer è il fondatore di thinktecture, una com- Fantasticherie? No. È necessario
pagnia che aiuta gli sviluppatori e gli architetti software dell’hardware speciale? No. È co-
a progettare e implementare applicazioni e Web service stoso? No! La funzionalità che ho
.NET. Partecipa come speaker alle conferenze internazio-
descritto è già compresa nel si-
nali dedicate a tali argomenti ed è autore del best-seller
Advanced .NET Remoting (APress). È Microsoft Regional stema operativo Windows Server
Director per l’Austria e può essere contattato tramite il sito 2003 (e anche di Windows Server
http://www.thinktecture.com/staff/ingo. 2000, ma con meno Wizard GUI
Con un doppio clic sulla prima regola di default so provenienti dallo stesso utente siano gestite
già esistente, si possono modificare i dettagli come dallo stesso nodo.
mostrato nella Figura 2. Per le applicazioni scalabili che sono state svilup-
A meno che non si utilizzi lo stato di sessione in- pate in modalità cluster-compatibile, questa impo-
memory per le applicazioni web, si deve sempre stazione ha delle conseguenze piuttosto negative,
modificare le impostazioni di affinità da “Single” pertanto di solito si dovrebbe scegliere “None”.
a “None” per permettere il miglior failover traspa- Dopo aver completato questo dialogo, si deve
rente possibile (ossia, in caso di interruzione del- specificare l’indirizzo IP del primo nodo del clu-
l’operatività di un computer, interviene automati- ster. Per ciascun nodo, si deve anche specificare
camente un’altra macchina ad assorbire il carico un ID univoco nel cluster (un valore da 1 a 32). Es-
delle richieste. La transizione è del tutto traspa- sendo il primo nodo, si deve selezionare 1 come
rente all’utente. NdT). ID. Completata la configurazione del primo nodo,
Se non si modifica questa impostazione a NLB manager contatterà la macchina specificata
“None”, ma la si lascia a “Single” o a “Class C”, utilizzando WMI (Windows Management Instru-
ciò inciderà sulla distribuzione delle richieste in mentation) per applicare alcune modifiche di con-
ingresso. Dopo che la prima richiesta in ingres- figurazione direttamente a ciascun nodo. Nel frat-
so da un singolo host (o da una intera sottorete tempo, si può continuare ad aggiungere ulteriori
di classe C) è stata assegnata in modo random, nodi nella schermata principale di NLB manager,
questa impostazione specifica che le successi- come mostrato nella Figura 3.
ve richieste che provengono dalla stessa origi- Nota: NLB è compatibile con una ampia varie-
ne (host o sottorete) verranno gestite dallo stes- tà di hardware di rete. In passato, ho comunque
so nodo del cluster. sperimentato dei problemi con le schede di rete
Ciò è ad esempio necessario se si esegue il de- on-board, al punto di aver dovuto inserire in uno
ployment di una applicazione ASP vecchio stile slot della macchina una seconda scheda di rete
(pre .NET) che utilizza lo stato di sessione in-me- per supportare NLB.
mory. In questo caso, la sessione verrà diretta-
mente associata a una singola macchina del clu- Internet Information Server in un cluster
ster e sarà disponibile solo a questa macchina. È Prima di poter pubblicare i propri Web Service o
perciò necessario che tutte le richieste in ingres- componenti Remoting in un cluster, si deve ese-
guire una ulteriore modifica alla configurazione.
Per inciso: NLB funziona a livello di connessio-
ni TCP/IP ed è distribuito solo con le richieste di
connessione iniziale. Non appena la connessio-
ne tra un client e un nodo del cluster è stata sta-
bilita, NLB non prenderà più parte in alcuna ul-
teriore comunicazione. Naturalmente ciò non do-
vrebbe comportare alcun problema, se non fosse
per il fatto che i Web Service ASP.NET e i com-
ponenti .NET Remoting riutilizzano le connessio-
ni già stabilite per lunghi periodi di tempo. Nelle
specifiche HTTP 1.1, ciò è detto “Keep-Alive”. Ciò
significa che una connessione HTTP già stabilita
verrà disconnessa solo dopo due minuti di inat-
tività. Ciò ha molto senso per i siti web classici
con una gran quantità di elementi <IMG>, perché
può migliorare le prestazioni, altrimenti dovreb-
be essere creata una nuova connessione TCP/IP
per ogni <IMG>.
Nelle architetture application-server ad alta di-
sponibilità, il keep-alive è tuttavia alquanto nega-
tivo. Se fallisce un nodo, tutte le macchine che
Figura 2 Modifica dell’affinità di sessione del cluster hanno una connessione persistente (keep-alive) ad
essa riceverebbero una eccezione. E ciò accade
anche se volessero solamente inviare una ulte-
riore richiesta un po’ di tempo dopo che la mac- sioni esistenti senza accettare alcuna nuova ri-
china è andata giù. Sostanzialmente, ciò significa chiesta di connessione. Dopo che questa moda-
che non si ha la possibilità di un fail-over traspa- lità “drain” è stata terminata, il nodo sarà tem-
rente. Per modificare questo comportamento, si poraneamente rimosso dal cluster. Si può quindi
deve aprire lo snapin IIS MMC (Start Admini- installare il service pack ed eseguire il reboot se
strative Tools Internet Information Services). In necessario. Per ricongiungere il nodo al cluster,
questo tool, si passa al sito web site che contie- basta scegliere Control Hosts Start.
ne l’applicazione in cluster (questa impostazione è
sempre valida per un sito completo e non per una Riassumendo
sola directory). Nella prima scheda (“Web Site”), Come si è visto, la creazione di cluster basato
si potrà disattivare la checkbox “HTTP Keep-Ali- su sistemi Windows non è affatto complessa. Ri-
ves Enabled”. Dopodiché, ogni singola richiesta chiede solo alcuni clic del mouse e nessun hard-
HTTP sarà soggetta al load balancing. Il costo di ware ulteriore per congiungere due o più nodi in
ciò in termini di prestazioni è di circa soli 2 milli- cluster. Tuttavia, NLB distribuisce solo le richieste
secondi per ciascuna richiesta in una LAN, e nel- di rete in ingresso, ma non gestisce le applicazioni
la gran parte dei casi il potenziale del failover tra- installate. È perciò estremamente importante es-
sparente è ben più prezioso di questa piccolissi- sere certi che tutti i nodi contengano sempre le
ma degradazione delle prestazioni. stesse identiche versioni delle applicazioni. Gra-
zie al deployment XCOPY, di solito questo non
Aggiornamenti a caldo è un grosso problema, poiché può essere risol-
Per rimuovere un nodo da un cluster in modo to semplicemente scrivendo alcuni script a riga
controllato (ad esempio per applicare un aggior- di comando. In alternativa, si possono utilizzare
namento o un service pack), non va semplice- prodotti come Microsoft Application Center 2000,
mente disconnesso dalla rete. Altrimenti, tutte le che si appoggia a NLB, e offre ulteriori tool di ge-
richieste correntemente in esecuzione dovrebbero stione per il cluster. Ma, come ho già detto, ciò
essere nuovamente inviate dopo che i client rice- è del tutto opzionale. Il cluster funzionerà senza
vono una eccezione. Invece, si deve aprire il tool questo ulteriore software. Distribuirà le richieste in
NLB manager, spostarsi sul nodo da rimuovere, ingresso tra più nodi e noi trarremo vantaggio dal
e con un clic destro del mouse selezionare Con- maggiore “uptime” dell’applicazione, dalla mag-
trol Hosts Drainstop. Questa selezione farà sì giore disponibilità e dal supporto degli aggiorna-
che il server termini l’elaborazione delle connes- menti a caldo. Cosa state aspettando?
Verso la sanità
elettronica
di Alberto Rosotti
L'
automazione delle procedure cliniche, am- abbattere i costi. Le vie più pro-
ministrative e di supporto alle decisioni nel- mettenti per risparmiare mante-
le moderne strutture sanitarie si sta manife- nendo alti i LEA3 sono l’automa-
stando in maniera sempre più evidente, portando no- zione del flusso di lavoro (work-
tevoli vantaggi per la salute dei pazienti ed al tempo flow) e l’applicazione delle best
stesso ponendo sfide sempre più ardue agli operato- practice4.
ri del settore: ne è un buon esempio il workflow nei Ciò comporta, al di là delle
reparti di radiologia. possibilità offerte dalle tecnolo-
I vantaggi dell’introduzione dell’informatica e del- gie emergenti, la formazione de-
l’integrazione dei reparti sia clinici che amministrati- gli operatori sanitari e la reinge-
vi sono noti a tutti: si pensi alla possibilità di preno- gnerizzazione del workflow, tan-
tare un esame tramite Internet o call center, all’uso to nelle corsie come nei reparti e
di diagnostiche complesse come TAC o PET che ar- nei laboratori.
chiviano gli esami nei fileserver insieme ai referti fir-
mati elettronicamente, alla Telemedicina o alla robo- La sanità elettronica
tica operatoria. Il sistema sanitario italiano, pub-
Mentre in Inghilterra si sta lavorando al progetto di un blico per il 65% circa, raggiunge
PACS1 distribuito, nel nostro paese sono stati stanzia- a fatica l’efficienza dei percorsi
ti “44 milioni di euro con l’obiettivo di conseguire una terapeutici a causa della scarsità
riduzione della crescita della spesa complessiva della di personale, di risorse ed orga-
Sanità italiana, un innalzamento dei livelli essenziali di nizzazione. Se da un lato dobbia-
assistenza, un incremento della qualità dei servizi per- mo tutti adoperarci per difende-
cepita dai cittadini, una riduzione ed un maggior con- re il diritto alla salute così come
trollo dei tempi di attesa delle prestazioni e della de- sancito dall’articolo 32 della Co-
genza ospedaliera”, come affermato dal Ministro per stituzione, è pur vero che i fondi
l’innovazione e le tecnologie Lucio Stanca. Fin dall’ini- a disposizione sono limitati e van-
zio del nuovo millennio l’imperativo dei CIO2 sanitari no trovati nella eliminazione de-
è stato quello di risparmiare, perchè la coperta della gli sprechi e nella razionalizzazio-
spesa pubblica era diventata corta per tutti. ne dei costi.
La teoria dello sviluppo sostenibile richiede sacrifi- Partendo da un’analisi della cali-
ci: o si diminuisce la qualità dei servizi, o si diminui- forniana Kaiser Foundation, il Mi-
sce il numero delle prestazioni, o si allungano le liste nistro Stanca ha quantificato un ri-
di attesa, o si privatizza il servizio pubblico, o si au- sparmio del 2% annuo nella spesa
mentano i ticket o si razionalizzano le prestazioni per sanitaria nazionale, pari ad alme-
no 1,6 miliardi di euro, derivante
dall’adozione di tecnologie infor-
Alberto Rosotti è laureato in ingegnria elettronica. È respon- matiche inserite nell’iniziativa “Sa-
sabile sistemi informativi della ditta FBL di Pesaro. Può essere nità elettronica”, varata il 16 mar-
contattato tramite e-mail all’indirizzo arosotti@infomeda.it zo 2004. Questa iniziativa è stata
1. La prevenzione attiva
2. Le prenotazioni on line integrate a livello nazionale
3. I dati elettronici sulla storia sanitaria dei pazienti
4. La telemedicina
Configurazione
e deployment
in ASP.NET
Vediamo come ASP.NET risolve molte delle limitazioni che affliggevano ASP
di Dino Esposito
G
ran parte del successo di ASP è dovuto alla zato l’ingegno e, per i vari proble-
sua facilità di utilizzo. E in effetti chiunque rie- mi “strutturali” di ASP, sono venu-
sca ad orientarsi nel mondo dello sviluppo per te fuori soluzioni eleganti e meno
Windows – non importa con quale strumento, da Visual eleganti ma tutte allo stesso modo
C++ a PowerBuilder passando per Delphi e Visual Basic efficaci e risolutive.
– non fa soverchia fatica a buttar giù pagine ASP anche Nel corso di questi quattro anni
relativamente complesse ed articolate. sono state sviluppate un buon nu-
Lo stesso fatto che per circa quattro anni (un'eterni- mero di best-practice per i maggiori
tà nel mondo Microsoft) in ASP non sia cambiato qua- limiti di ASP. Tanto per fare qualche
si nulla dimostra l’assoluta stabilità ed equilibrio rag- nome: supporto per le Web Farm,
giunti da ASP. form rientranti, oggetti di caching,
Il che – non fraintendete – non equivale certo a dire trasformazioni XSL, trucchi per limi-
che tutto va ben, madama la marchesa ASP. tare l’ammasso di roba nella Ses-
Il fatto è che per lungo tempo ad ASP non vi sono sion, e così via. A tutte queste que-
state alternative affidabili o praticabili su nessuna piat- stioni risponde oggi con indubbia
taforma. E su Windows nemmeno a parlarne (escludo efficacia ASP.NET. E così sia.
soluzioni proprietarie solitamente alquanto costose e Ma la vera tragedia di ASP è il
dall’efficacia tutta da dimostrare, per non parlare della deployment delle applicazioni. Non
documentazione). tanto per ASP stesso, quanto per
Per chi doveva scrivere applicazioni Web (e tantissimi la strutturale complessità del mo-
hanno dovuto…), per lungo tempo ASP è stato lo stru- dello di componenti utilizzato: COM
mento ideale in quanto ottimo compromesso tra presta- prima e COM+ dopo. Per miglio-
zioni (mai strutturalmente eccelse), costo e facilità di uti- rare la performance e “distribuire”
lizzo. Di fronte a situazioni in cui non vi sono alternative il sistema si è finito per introdur-
da invocare, né vi sono precedenti versioni da rimpian- re un discreto numero di compo-
gere, il programmatore può solo svolgere al meglio il suo nenti che per loro intrinseca natura
compito istituzionale: scrivere codice e pedalare. hanno bisogno di sotto-componen-
Messi alle strette, tanti programmatori hanno aguz- ti, interfacce, type library, configu-
razioni varie e soprattutto del regi-
stry e di un buon numero di mo-
Dino Esposito Si occupa di applicazioni Web-based e lavora
duli runtime.
come consulente per diverse società. È autore di “Professional
Windows Shell Programming” e “Windows Script Host Program-
Per far girare poche pagine ASP
mer’s Reference” entrambi per Wrox Press. È contributing editor sono necessari pesanti interventi
di MSDN Magazine e Windows 2000 Magazine. Può essere sul registry e sul metabase di In-
contattato tramite e-mail all’indirizzo esposito@infomedia.it. ternet Information Services (IIS) con
creazione e modifica di parametri in vari folder vir- In ASP.NET la stragrande maggioranza delle in-
tuali. Tutta roba da fare, se non a mano, tramite formazioni sull’ambiente runtime – cioè le informa-
un ottimo strumento di setup. E in ogni caso una zioni che l’utente programmatore/amministratore
serie di operazioni da far tremare i polsi e la me- può voler modificare – sono memorizzate in un file
moria. Al punto che di consegna chiavi-in-mano XML chiamato web.config. Esso, oltre ad essere
proprio è difficile parlare. facilmente leggibile e manualmente modificabile, è
anche isolato dal resto dell’ambiente, indipendente
Deployment in ASP.NET da crash e affini e non richiede restart in seguito
Per fortuna, la consegna chiavi-in-mano di una a modifiche – basta che sia possibile rileggerne il
applicazione ASP.NET è molto più semplice. La contenuto. Cosa che avverrà a partire dalla suc-
differenza però non dipende granché da ciò che cessiva sessione del successivo utente.
rende differente ASP da ASP.NET. A ben guardare, Il file web.config permette di associare e modi-
la differenza vera è in ciò che fa da sfondo ad ASP ficare impostazioni in modo dichiarativo invece
e ASP.NET. E cioé l’impalcatura .NET. Vediamo più che procedurale. Può farlo in maniera gerarchica
in dettaglio perché. I passi fondamentali del de- dal momento che le modifiche si estendono dalla
ployment di una applicazione ASP.NET sono: directory in cui web.config si trova al sottoalbe-
ro. Impostazioni definite nel web.config principale
• copia dei file ASPX e quant’altro in un Web possono essere sovrascritte da web.config trovati
folder; a livelli più annidati. Il file web.config principale si
• copia di controlli e servizi nel folder BIN del trova in una directory sotto winnt\microsoft.net.
Web server;
• modifica del file web.config per creare le im- Struttura di web.config
postazioni a livello di applicazione e/o di siste- Come detto, web.config è un file XML. Tutte le
ma. informazioni sono racchiuse da un tag chiamato
<configuration>. Il contenuto può essere di due
Dov’è la differenza? Vediamo più o meno i pas- tipi: handler e setting. Gli handler sono racchiusi
si necessari in ASP: in un blocco centrato in <configsections>. I set-
ting hanno nomi di nodi personalizzati e sono tutti
• copia dei file ASP e quant’altro in un Web fol- diretti figli del nodo radice <configuration>. Ecco
der; lo schema di base:
• installazione e registrazione di componenti
COM; <configuration>
• creazione delle applicazioni COM+ necessa- <configsections>
rie; <!-- Configuration section handlers -->
• tuning delle proprietà di IIS. </configsections>
<!-- Configuration section settings -->
Apparentemente non vi è una grandissima diffe- </configuration>
renza. I passi sono più o meno quelli e per le pa-
gine non cambia nulla. La novità si ha a proposi- I Configuration Section Handlers (CSH) sono di-
to di componenti. chiarati tramite il tag <add> e fanno riferimento
Se il modello è COM(+) allora il registry gioca un alle classi handler utilizzate per la gestione di un
ruolo essenziale. Se il modello è .NET allora la re- certo tipo di parametri.
flection dà il meglio di sé e per installare e regi- Si tratta di classi che implementano l’interfaccia
strare un componente, alla fin fine, basta copiar- IConfigSectionHandler.
lo in un percorso pubblico. Il registry è essenziale Non è necessario dichiarare i section handler in
per individuare nome, ruolo e attributi di un com- ogni file web.config dal momento che le impo-
ponente COM. I componenti .NET espongono le stazioni sono ereditate da folder più in alto nel-
stesse informazioni da programma tramite le in- la gerarchia del file system. Ecco un esempio di
terfacce di reflection: una volta trovato il file DLL file web.config:
il più è fatto. Le informazioni, infatti, sono lì espo-
ste con una serie di interfacce particolari. <configuration>
Il tuning di IIS è in gran parte manuale e in ogni <configsections>
caso richiede lo stop-and-restart del Web server <add name=”sessionstate”
per ogni blocco di modifiche. type=”System.Web.SessionState.
Firefox Web Developer Extensions in pixel dei blocchi div, l’id dei controlli e simili.
Le Outline Features permettono in modo davvero molto
Il prodotto in questione, lo anticipo subito, non è stret- semplice di evidenziare la struttura di tabelle, frame e
tamente legato a .NET, ma si è ugualmente meritato un più in generale di qualsiasi porzione della pagina.
posto in queste pagine perché diverrà sicuramente un Oltre a questo è possibile evidenziare tutti gli elementi
fidato strumento per tutti coloro che sviluppano appli- deprecati dall’HTML 4.0 così da poterli identificare, ed
cazioni web, nella fattispecie applicazioni ASP.NET. eventualmente sostituire, in modo piuttosto rapido.
Il tool è di fatto una estensione di Firefox (c’è anche Per quanto riguarda la sezione Tool Features, all’inter-
una versione per Mozilla), che permette di analizzare no si trova tutto ciò che concerne la validazione delle
ed applicare modifiche ad una pagina web in tempo pagine web e dei vari elementi collegati.
reale. Le features disponibili, raggiungibili direttamente La sezione più importante e probabilmente più utile è
tramite una barra di menù aggiuntiva, sono raggruppate quella delle Css Features.
in dieci sezioni: Tramite le funzionalità presenti all’interno della stessa
è possibile operare in modo particolareggiato sugli stili
Disable utilizzati nella pagina.
Form È possibile visualizzare, tramite un semplice click del
Information mouse, gli stili applicati su un particolare elemento della
Outline pagina. Oltre a questo è possibile modificare in tempo
Tools reale gli stili presenti, applicando immediatamente tali
Css cambiamenti alla pagina web.
Images Questo è reso possibile da un editor di testo interno,
Miscellaneous che si posiziona nella sezione sinistra del browser, dove
Resize viene caricato il codice dei Css in uso (Figura 1). Ogni
Other modifica apportata ad essi viene istantaneamente appli-
cata alla pagina, rendendo così davvero molto semplice il
Nella sezione Disable Features sono raggruppate le
impostazioni che permettono di disabilitare diverse fun-
zionalità del browser. Si va dai cookies alle immagini,
dal javascript agli stili.
Questo permette di vedere come il sito viene visualiz-
zato da un browser non recentissimo, in modo tale da
poter intervenire e assicurare una buona fruizione del
sito anche a chi usa questo tipo di browser.
In Form Features si trovano tutte le opzioni riguardanti
i form. Da qui è possibile avere informazioni dettagliate
sul form, visualizzare i campi nascosti, convertire azioni
GET in POST e viceversa e via dicendo. Tali funziona-
lità sono molto utili per effettuare debug e test delle
applicazioni web.
Tramite le Information Features è possibile mostrare
tutte le caratteristiche altrimenti non facilmente visibili
delle pagine web come gli ancoraggi, le dimensioni reali
VBJ 62
LIBRI
Verification of Reactive System SMIL 2.0 - Interactive Multimedia
Formal Methods and Algorithms for Web and Mobile Devices
Autore Klaus Schneider Autore J. E. Hansen, C. Thomsen
Editore Springer Editore Springer
ISBN 3540002960 ISBN 354020234X
Lingua Inglese Lingua Inglese
Anno 2004 Anno 2004
Pagine 600 Pagine 439
Prezzo € 74,85 Prezzo € 53,45
i sono applicazioni software progettate per sistemi il cui scopo MIL è un linguaggio basato su XML, progettato per la realizza-
Contro
La trattazione avviene solamente attraverso definizioni e teoremi;
il libro è quindi riservato al pubblico, molto ristretto, dei docenti e
dei ricercatori.
Marco Aldrovandi Gianluca Masina