468x60

martedì 26 agosto 2008

Service Oriented Architecture

Nell'ambito dell'informatica, con la locuzione inglese di Service-Oriented Architecture (SOA) si indica un'architettura software atta a supportare l'uso di servizi Web per soddisfare le richieste degli utenti così da consentire l'utilizzo delle singole applicazioni come componenti del processo di business.

Elementi di una SOA, di Dirk Krafzig, Karl Banke, e Dirk Slama. Enterprise SOA. Prentice Hall, 2005
Elementi di una SOA, di Dirk Krafzig, Karl Banke, e Dirk Slama. Enterprise SOA. Prentice Hall, 2005

Indice

Definizioni di SOA

Una SOA è progettata per il collegamento a richiesta di risorse computazionali (principalmente applicazioni e dati), per ottenere un dato risultato per gli utenti, che possono essere utenti finali o altri servizi. L'OASIS (Organizzazione per lo sviluppo di standard sull'informazione strutturata) definisce la SOA così:

Un paradigma per l'organizzazione e l'utilizzazione delle risorse distribuite che possono essere sotto il controllo di domini di proprietà differenti. Fornisce un mezzo uniforme per offrire, scoprire, interagire ed usare le capacità di produrre gli effetti voluti consistentemente con presupposti e aspettative misurabili.

Anche se esistono molteplici definizioni di SOA, solo il gruppo OASIS ha prodotto una definizione formale applicabile profondamente sia alla tecnologia che ai domini aziendali.

Il concetto di SOA (WebServices e non solo ) deriva dalla riconsiderazione delle strutture aziendali: organizzazioni rizomatiche che fonda le sue radici nella cultura biologica. L'evoluzione delle infrastrutture di comunicazione, che ormai sono pervasive consente di pensare l'interconnessione tra soggetti economici, come le aziende, come un processo dinamico, non fissato una volta per tutte.


Elenco definizioni

Sebbene molte definizioni di SOA si limitino alla tecnologia o solo ai Web services, questo aspetto è predominante per i fornitori di tecnologia. Nel 2003 questi parlavano di Web services, e nel 2006 di Motori di Processo.

Descrizione

Nell'ambito di un'architettura SOA è quindi possibile modificare, in maniera relativamente più semplice, le modalità di interazione tra i servizi, oppure la combinazione nella quale i servizi vengono utilizzati nel processo, così come risulta più agevole aggiungere nuovi servizi e modificare i processi per rispondere alle specifiche esigenze di business: il processo di business non è più vincolato da una specifica piattaforma o da un'applicazione ma può essere considerato come un componente di un processo più ampio e quindi riutilizzato o modificato.

L'architettura orientata ai servizi si presenta particolarmente adatta per le aziende che presentano una discreta complessità di processi e applicazioni, dal momento che agevola l'interazione tra le diverse realtà aziendali permettendo, al contempo, alle attività di business di sviluppare processi efficienti, sia internamente che esternamente ed aumentarne la flessibilità e l'adattabilità.

Benché molte aziende offrano prodotti che possono formare la base di una SOA va sottolineato che la SOA non è un prodotto.

Non è affatto vero che un'architettura orientata ai servizi non sia legata ad una specifica tecnologia. Chi dice che può essere realizzata usando una vasta gamma di tecnologie, comprese REST, RPC, DCOM, CORBA, MOM, DDS non ha chiaro il vero valore e l'intrinseco significato delle SOA: nessuna di queste tecnologie è infatti capace di implementare entità che descrivano se stesse come è possibile fare usando i Web services mediante il linguaggio di definizione dei servizi WSDL. Infatti applicazioni di test che a run-time capiscano la semantica di un servizio e lo invochino senza "conoscere" nulla del servizio stesso "a priori", non esistono per nessuna delle tecnologie citate. La chiave sta nella totale assenza di business logic sul client SOA il quale è totalmente agnostico rispetto alla piattaforma di implementazione, riguardo i protocolli, il binding, il tipo di dati, le policy con cui il servizio produrrà l'informazione richiesta Service Level Agreement (SLA). Tutto a beneficio dell'indipendenza dei servizi, che possono essere chiamati per eseguire i propri compiti in un modo standard, senza che il servizio abbia conoscenza dell'applicazione chiamante e senza che l'applicazione abbia conoscenza, o necessiti di averne, del servizio che effettivamente eseguirà l'operazione.

SOA può anche essere vista come uno stile dell'architettura dei sistemi informatici che permetta la creazione delle applicazioni sviluppate, combinando servizi debolmente accoppiati e interoperabilità degli stessi. Questi servizi interoperano secondo una definizione formale, detta protocollo o contratto, come per i WSDL indipendente dalla piattaforma sottostante e dalle tecnologie di sviluppo (come Java, .NET, ecc). I servizi, per esempio, scritti in Java usando la piattaforma Java EE e quelli in C# con .NET possono essere utilizzati dall'applicazione sovrastante. Le applicazioni in esecuzione su una piattaforma possono anche utilizzare servizi in esecuzione su altre, come con i Web services, facilitando quindi la riusabilità.

SOA può supportare l'integrazione e la consolidazione di attività all'interno di complessi sistemi aziendali, ma non specifica o fornisce la metodologia o il framework per documentare capacità e potenzialità dei servizi.

I linguaggi di alto livello come BPEL e le specifiche come WS-CDL e WS-Coordination estendono il concetto di servizio, fornendo un metodo per definire e supportare la coordinazione dei servizi di rifinitura con quelli maggiori, che, di conseguenza, possono essere inclusi in flussi di controllo e processi aziendali implementati con applicazioni composte o portali.

Tecnologie alla base della SOA

Aspetti dello sviluppo della SOA

La validità di un'architettura orientata ai servizi (SOA) è conseguenza degli elementi e degli standard su cui si fonda. In particolare vanno considerati i seguenti aspetti:

  • Standard aperti: per poter operare in ambienti multipiattaforma è necessario, o quantomeno consigliabile, utilizzare esclusivamente standard aperti quali XML, WSDL e WS-Security (WSS).
  • Modularità: bisogna trovare il giusto equilibrio tra i servizi erogati da ogni singolo componente, creando un insieme bilanciato di piccoli servizi riutilizzabili per le funzioni comuni e servizi più grandi per processi specifici.
  • Contratti di servizio: WSDL (Web Services Description Language) è la specifica standard per la creazione di contratti di Web Services, un contratto definito avrà come conseguenza servizi più flessibili.
  • ESB (Enterprise Service Bus): La dorsale di pubblicazione dei servizi ed abilitazione delle applicazioni per accedervi. Inoltre include caratteristiche quali adattatori per i sistemi legacy, capacità di orchestrazione dei servizi, autorizzazione e autenticazione lato sicurezza, trasformazione dei dati, supporto per regole di business e capacità di monitorare i service-level agreement.

Bibliografia

  • Douglas K. Barry. Web Services and Service-Oriented Architectures: The Savvy Manager's Guide. San Francisco, Morgan Kaufmann Publishers, 2003. ISBN 1-55860-906-7
  • Norbert Bieberstein; Sanjay Bose, Marc Fiammante, Keith Jones, Rawn Shah. Service-Oriented Architecture Compass - Business Value, Planning and Enterprise Roadmap. Upper Saddle River, Pearson, 2006. ISBN 0-13-987-0471-768
  • Jason Bloomberg; Ronald Schmelzer. Service- orient or Be Doomed. Hoboken, New Yersey, WILEY, 2006. ISBN 0-13-187002-5
  • Thomas Erl. Service-Oriented Architecture: A Field Guide to Integrating XML and Web Services. Upper Saddle River, Prentice Hall PTR, 2004. ISBN 0-13-142898-5
  • Thomas Erl. Service-Oriented Architecture: Concepts, Technology, and Design. Upper Saddle River, Prentice Hall PTR, 2005. ISBN 0-13-185858-0
  • Judith Hurwitz; Robin Bloor, Carol Baroudi, Marcia Kaufman. Service Oriented Architecture for Dummies. Hoboken, Wiley, 2006. ISBN 0-470-05435-2



Collegamenti esterni

lunedì 25 agosto 2008

Intelligenza artificiale

Con il termine intelligenza artificiale (o IA, dalle iniziali delle due parole) si intende generalmente l'abilità di un computer di svolgere funzioni e ragionamenti tipici della mente umana.
L'intelligenza artificiale è una disciplina dibattuta tra scienziati e filosofi, la quale manifesta aspetti sia teorici che pratici.

Nel suo aspetto puramente informatico, essa comprende la teoria e le tecniche per lo sviluppo di algoritmi che consentano alle macchine (tipicamente ai calcolatori) di mostrare un'abilità e/o attività intelligente, almeno in domini specifici.

Uno dei problemi principali dell'intelligenza artificiale è quello di dare una definizione formale delle funzioni sintetiche/astratte di ragionamento, meta-ragionamento e apprendimento dell'uomo, per poter poi costruire dei modelli computazionali che li concretizzano e realizzano ( in modo "goal-oriented").

L'origine del termine

L'espressione "Intelligenza Artificiale" (Artificial Intelligence) fu coniata nel 1956 dal matematico americano John McCarthy, durante uno storico seminario interdisciplinare svoltosi nel New Hampshire. Secondo le parole di Marvin Minsky, uno dei "pionieri" della I.A., lo scopo di questa nuova disciplina sarebbe stato quello di "far fare alle macchine delle cose che richiederebbero l'intelligenza se fossero fatte dagli uomini".

Storia

I primi passi

In tal senso la storia ha inizio nel XVII secolo quando Blaise Pascal (scienziato, scrittore e filosofo francese) inventa la cosiddetta "Pascalina" per aiutare il padre, incaricato dall'amministrazione fiscale della Normandia di eseguire un difficile lavoro di calcolo. La macchina era capace di eseguire automaticamente addizione e sottrazione; questa "macchina aritmetica" fu la capostipite dei calcolatori ad ingranaggi.

In età vittoriana Charles Babbage creò macchine calcolatrici a rotelle: "The difference engine" (la macchina delle differenze)[1] riusciva a fare calcoli differenziali ed arrivò a progettarne una intelligente che però, per problemi tecnici, non riuscì mai a funzionare, avrebbe dovuto essere programmata con schede perforate, un po' come accadde in seguito con i primi calcolatori. Le schede perforate, cartoncini forati a seconda della necessità, furono ampiamente usate per esempio per il funzionamento dei telai Jacquard, di pianole meccaniche, quindi dei primi calcolatori. Hermann Hollerith (statistico U.S.A. di origine tedesca) ideò le schede perforate applicate a calcolatrici attorno al 1885; questo sistema fu usato per la prima volta per i calcoli relativi all'11° censimento U.S.A., nel 1891. Il sistema meccanografico adottato da Hollerith riscosse tale successo da indurlo a fondare la Tabulating Machine corporation. In seguito i calcolatori furono molto usati dai militari per regolare il tiro dell'artiglieria.

La rivoluzione informatica

Se la teoria dell'IA evolve indipendentemente dai progressi scientifici, le sue applicazioni sono fortemente legate agli avanzamenti della tecnologia informatica. Infatti, solo nella seconda metà del XX secolo è possibile disporre di dispositivi di calcolo e linguaggi di programmazione abbastanza potenti da permettere sperimentazioni sull'intelligenza.
La struttura dei calcolatori viene stravolta con la sostituzione dei "relè", usati per i primi calcolatori elettromeccanici, con le "valvole" o tubi elettronici. Nel 1946 nasce ENIAC (Electronic Numerical Integrator And Calculator), concepito come calcolatore moderno nel '45 da John von Neumann; faceva l'elaborazione a lotti (batch) nell'ordine di migliaia di informazioni al minuto. La programmazione avveniva comunque tramite schede.
La seconda generazione di computer si ha nei '60, "The time sharing", sistemi basati sulla divisione di tempo e quindi più veloci; più terminali, soprattutto telescriventi, sono collegati ad un calcolatore centrale". L'innovazione in questo periodo sta nel passaggio dalle valvole ai transistor.
A quell'epoca i programmi erano fortemente condizionati dai limiti dei linguaggi di programmazione, oltre che dai limiti di velocità e memoria degli elaboratori. La svolta si ha proprio tra gli anni '50 e '60, con linguaggi di manipolazione simbolica come l'ILP, il LISP e il POP.

Il punto di svolta

Un punto di svolta della materia si ha con un famoso articolo di Alan Turing sulla rivista Mind nel 1950. Nell'articolo viene indicata la possibilità di creare un programma al fine di far comportare un computer in maniera intelligente. Quindi la progettazione di macchine intelligenti dipende fortemente dalle possibilità di rappresentazione simbolica del problema.
Il test di Turing -così viene chiamata la condizione che la macchina dovrebbe superare per essere considerata intelligente- è stato più volte superato da programmi e più volte riformulato, tanto che queste teorie hanno ricevuto diverse confutazioni. Il filosofo Searle ne espose una famosa, chiamata "la stanza cinese".

Nello stesso anno dell'articolo di Turing sull'omonimo test per le macchine pensanti, Arthur Samuel presenta il primo programma capace di giocare a Dama, un risultato molto importante perché dimostra la possibilità di superare i limiti tecnici (il programma era scritto in Assembly e girava su un IBM 704) per realizzare sistemi capaci di risolvere problemi tradizionalmente legati all'intelligenza umana. Per di più, l'abilità di gioco viene appresa dal programma scontrandosi con avversari umani.

Nel 1956, alla conferenza di Dartmouth (la stessa conferenza a cui l'IA deve il suo nome), viene mostrato un programma che segna un'altra importante tappa dello sviluppo dell'IA. Il programma LT di Allen Newell, J. Clifford Shaw e Herb Simon rappresenta il primo dimostratore automatico di teoremi.

La linea seguita dalla giovane IA si basa quindi sulla ricerca di un automatismo nella creazione di un'intelligenza meccanica. L'approccio segue essenzialmente un'euristica di ricerca basata su tentativi ed errori oltre che investigare su tecniche di apprendimento efficaci.

Verso l'IA moderna

Secondo le parole di Minsky, dopo il 1962 l'IA cambia le sue priorità: essa dà minore importanza all'apprendimento, mentre pone l'accento sulla rappresentazione della conoscenza e sul problema ad essa connesso del superamento del formalismo finora a disposizione e liberarsi dalle costrizioni dei vecchi sistemi.

"Il problema della ricerca efficace con euristiche rimane un presupposto soggiacente, ma non è più il problema a quale pensare, per quanto siamo immersi in sotto-problemi più sofisticati, ossia la rappresentazione e modifica di piani" (Minsky, 1968).

I punti cardine di questa ricerca sono gli studi di Minsky sulla rappresentazione distribuita della conoscenza, quella che viene chiamata la "società delle menti", e il lavoro di John McCarthy sulla rappresentazione dichiarativa della conoscenza. Quest'ultima viene espressa formalmente mediante estensioni della logica dei predicati e può quindi essere manipolata facilmente. Con i suoi studi sul "ragionamento non monotono" e "di default", McCarty contribuisce a porre gran parte delle basi teoriche dell'IA.

Il punto di vista psicologico non viene assolutamente trascurato. Ad esempio il programma EPAM (Feigenbaum e Feldman, 1963) esplora la relazione tra memoria associativa e l'atto di dimenticare. Alla Carnegie Mellon University vengono sperimentati programmi per riprodurre i passi del ragionamento, inclusi eventuali errori.

L'elaborazione del linguaggio naturale sembra essere un campo destinato a un rapido sviluppo. La traduzione diretta di testi porta però ad insuccessi che influenzeranno per molti anni i finanziamenti in tale campo. Malgrado ciò, viene dimostrato abbastanza presto che si possono ottenere buoni risultati in contesti limitati.

I primi anni '70 vedono lo sviluppo dei sistemi di produzione, ossia dei programmi che sfruttano un insieme di conoscenze organizzate in base di dati, attraverso l'applicazione di regole di produzione, per ottenere risposte a domande precise. I sistemi esperti hanno sostituito i sistemi di produzione per via delle difficoltà incontrate da questi ultimi, con particolare riferimento alla necessità di fornire inizialmente la conoscenza in forma esplicita e la poca flessibilità delle regole di produzione. Questi sistemi, di cui Dendral è il più rappresentativo, mostrano le enormi possibilità offerte da un efficace sfruttamento di (relativamente) poche basi di conoscenza per programmi capaci di prendere decisioni o fornire avvisi in molte aree diverse. In pratica l'analisi dei dati è stata razionalizzata e generalizzata.

Si pone ora il problema del trattamento dell'incertezza, che è parte costituente della realtà e delle problematiche più comuni. Mycin introduce l'uso di "valori di certezza": un numero associato a ciascun dato e che viene calcolato per la nuova conoscenza inferita.

Malgrado ciò, le difficoltà nel trattare correttamente l'incertezza portano ad abbandonare l'uso di sistemi a regole per avvicinarsi a quella che è la moderna IA.

Caratteristiche e dibattiti filosofici

La formulazione attuale

L'IA, come viene studiata attualmente, tratta dell'individuazione dei modelli (appropriata descrizione del problema da risolvere) e degli algoritmi (procedura effettiva per risolvere il modello).

Questa formulazione viene studiata con differenti sapori e con approcci differenti. Ognuno dei due aspetti (modellizzazione o algoritmico) ha via via maggiore o minore importanza e varia lungo uno spettro abbastanza ampio.

Creare un computer pensante

Le attività e le capacità dell'Intelligenza Artificiale comprendono:

La domanda al centro del dibattito sull'intelligenza artificiale è fondamentalmente una sola: "I computer possono pensare?"

Le risposte sono varie e discordi, ma perché abbiano un senso bisogna prima determinare cosa significhi pensare. Ironicamente, nonostante tutti siano d'accordo che gli esseri umani sono intelligenti, nessuno è ancora riuscito a dare una definizione soddisfacente di intelligenza; proprio a causa di ciò, lo studio dell'IA si divide in due correnti:

  • la prima, detta intelligenza artificiale forte, sostenuta dai funzionalisti, ritiene che un computer correttamente programmato possa essere veramente dotato di una intelligenza pura, non distinguibile in nessun senso importante dall'intelligenza umana. L'idea alla base di questa teoria è il concetto che risale al filosofo empirista inglese Thomas Hobbes, il quale sosteneva che ragionare non è nient'altro che calcolare: la mente umana sarebbe dunque il prodotto di un complesso insieme di calcoli eseguiti dal cervello;
  • la seconda, detta intelligenza artificiale debole, sostiene che un computer non sarà mai in grado di eguagliare la mente umana, ma potrà solo arrivare a simulare alcuni processi cognitivi umani senza riuscire a riprodurli nella loro totale complessità.

Rimanendo nel campo della programmazione "classica", basata su linguaggi simbolici e lineari, in cui la grande velocità di calcolo dei processori moderni supplisce alla carenza di parallelismo, sicuramente assume una posizione dominante l'AI debole, in quanto si può facilmente constatare come un computer elabori una serie di simboli che non comprende e che si limiti ad eseguire i suoi compiti meccanicamente.

Bisogna tuttavia riconoscere che, con la diffusione sempre maggiore di reti neurali, algoritmi genetici e sistemi per il calcolo parallelo, la situazione si sta evolvendo a favore dei sostenitori del connessionismo.

A detta di alcuni esperti del settore, però, è improbabile il raggiungimento, da parte di un computer, di una capacità di pensiero classificabile come "intelligenza", in quanto la macchina stessa è "isolata" dal mondo, o, al massimo, collegata con esso tramite una rete informatica, in grado di trasmettergli solo informazioni provenienti da altri computer. La vera "intelligenza artificiale", perciò, potrebbe essere raggiungibile solo da robot (non necessariamente di forma umanoide) in grado di muoversi (su ruote, gambe, cingoli o quant'altro) ed interagire con l'ambiente che li circonda grazie a sensori ed a bracci meccanici. Spesso, difatti, anche nell'uomo, l'applicazione dell'intelligenza deriva da qualche esigenza corporea, perciò è improbabile riuscire a svilupparne un'imitazione senza un corpo.

Inoltre, finora, nel tentativo di creare AI, si è spesso compiuto un errore che ha portato i computer all'incapacità di applicare il buonsenso e alla tendenza a "cacciarsi nei pasticci". L'errore consiste nel non considerare a sufficienza il fatto che il mondo reale è complesso e quindi una sua rappresentazione lo sarà altrettanto. Non solo sarà complessa, ma sarà anche incompleta, perché non potrà mai includere tutti i casi che il robot potrà incontrare. Perciò, o immettiamo nel cervello artificiale una quantità enorme di informazioni corredate da altrettante regole per correlarle (il che originerà, probabilmente, un vicolo cieco logico alla prima difficoltà incontrata), oppure lo mettiamo in condizione di imparare. La chiave dell'AI, sembra proprio essere questa: l'imitazione della sua analoga naturale, tenendo ben presente l'importanza dei processi evolutivi nello sviluppo delle caratteristiche morfologiche e comportamentali di un individuo e nella formazione di ciò che viene definito "senso comune".

Vincenzo Tagliasco, ricercatore al Laboratorio integrato di robotica avanzata presso la facoltà di Ingegneria dell'università di Genova, fa notare che nell'evoluzione delle macchine intelligenti si è cercato di saltare intere generazioni di macchine più modeste, ma in grado di fornire preziosi stimoli per capire come gli organismi biologici interagiscono con l'ambiente attraverso la percezione, la locomozione, la manipolazione. Ora c'è chi segue un approccio più coerente: prima di insegnare a un robot a giocare a scacchi, è necessario insegnargli a muoversi, a vedere, a sentire. Insomma, anche nel robot intelligente occorre creare una "infanzia", che gli consenta di mettere a punto autonomi processi di apprendimento e di adattamento all'ambiente in cui si troverà ad agire. È necessario quindi riprodurre due evoluzioni parallele: una che da costrutti semplici porti alla produzione di macchine sempre più complesse e sofisticate, un'altra, tutta interna alla vita del singolo automa, che lo faccia crescere intellettualmente, dandogli modo di apprendere, da solo o sotto la supervisione umana, le nozioni necessarie al suo compito ed alla formazione di un'autonomia decisionale.

Questo modo di procedere è sintetizzato in una disciplina di recente sviluppo come branca dell'IA. Stiamo parlando di Artificial Life - A.I., la cui prima proposta si deve a Chris Langton. Comprendendo in tale disciplina la robotica avanzata si può anche introdurre lo studio della robotica evolutiva. Il tutto fa uso di simulazioni software e hardware di quello che potrebbe essere l'ambiente e gli organismi primitivi che in tale ambiente interagiscono, si riproducono ed evolvono verso popolazioni sempre più complesse e sofisticate ma senza necessità dell'intervento umano.

L'intelligenza artificiale, continuando lungo le attuali direttrici di sviluppo, diverrà sicuramente un'intelligenza "diversa" da quella umana, ma, probabilmente, comparabile a livello di risultati in molti campi in cui è necessario applicare capacità di scelta basate su casi precedenti, nozioni generali e "ragionamento".

È invece molto difficile immaginare un computer in grado di filosofeggiare ed esprimere concetti e dubbi riguardo l'origine o il senso della vita. Il terribile computer-dio del racconto La Risposta di Fredric Brown non è altro - per fortuna - che fantascienza.

La versione fantascientifica

Nelle opere di fantascienza l'intelligenza artificiale è un tema ricorrente, come semplice strumento o come protagonista della storia. In generale è presentata come computer avanzati o robot.

Nel primo caso rientrano ad esempio Multivac, presente in alcuni racconti di Isaac Asimov, paragonabile ai moderni sistemi di grid computing, e HAL 9000 del film 2001 Odissea nello spazio. Pensiero Profondo nella Guida galattica per autostoppisti è una intelligenza artificiale capace di fornire la risposta alla domanda fondamentale sulla vita, l'universo e tutto quanto.

I robot senzienti sono anch'essi un classico. Nell'ipotesi che le macchine possano man mano diventare più simili agli esseri umani, gli autori hanno ipotizzato macchine dalla enorme capacità di calcolo e dotate di personalità. I "robot positronici" come il robot Robbie del film Il pianeta proibito, Marvin l'androide paranoico, C1-P8 di Guerre stellari e Data di Star Trek sono solo alcuni esempi tra i più noti.

Queste macchine si distinguono dai semplici robot per una personalità spiccata, resa possibile da un'intelligenza artificiale estremamente evoluta.

Un altro caso è invece Skynet del ciclo cinematografico di Terminator, in cui viene presentato come un sofisticatissimo insieme di networks alla difesa costruiti dagli Stati Uniti verso la fine della guerra fredda, e che comanda un esercito di cyborgs di classe T-800, T-1000 e TX.

Nel ciclo di Dune di Frank Herbert, invece, il tema delle intelligenze artificiali costituisce ciò che si potrebbe definire un sacrilegio: migliaia di anni prima gli avvenimenti di Dune, le macchine pensanti avevano ridotto alla schiavitù l'umanità, e a seguito della Jihad Butleriana, occasione in cui si impongono le scuole di pensiero quali la Gilda Spaziale, i Mentat, il Bene Tleilax e le Bene Gesserit, il primo comandamento della nuova religione del nascente impero della Casa Corrino è: "Non costruirai mai una macchina somigliante a una mente umana.".

Applicazioni principali

Attualmente questi sono i principali algoritmi dell'intelligenza artificiale

Voci correlate

Collegamenti esterni

giovedì 21 agosto 2008

Ajax: un nuovo approccio per le applicazioni Web

Incipit

Questo articolo è la traduzione della versione inglese intitolata “Ajax: A New Approach to Web Applications” scritta da Jesse James Garrett.

Introduzione

Qualsiasi progetto interattivo definito “affascinante” è destinato a diventare un’applicazione Web.
Dopo tutto, quando è stata l’ultima volta che abbiamo sentito qualcuno parlare di un progetto interattivo che non era presente sul Web? (Ok, oltre l’iPod.) Tutti i nuovi progetti innovativi sono destinati ad essere online.

Nonostante ciò, i progettisti web non possono fare altro che essere un po’ invidiosi dei colleghi che creano applicazioni Desktop.
Le applicazioni Desktop hanno una completezza e una velocità di risposta elevata che risultano essere fuori dalla portata del Web.
La semplicità che ha portato alla proliferazione del Web ha creato un divario tra le esperienze che noi possiamo fornire mediante le applicazioni Web e le applicazioni Desktop.

Quel divario oramai non esiste più. Basta dare uno sguardo a Google Suggest. Si può vedere come i termini suggeriti durante la digitazione vengano aggiornati quasi istantaneamente. Focalizziamoci su Google Maps. Ingrandiamo la mappa. Usiamo il cursore per trascinare e muovere la mappa. Ancora possiamo notare come qualsiasi cosa che accade è quasi istantanea, senza dover aspettare il ricaricamento della pagina.

Google Suggest e Google Maps sono due esempi del nuovo approccio alle applicazioni web che Adaptive Path chiama Ajax. Il nome è l’abbreviazione di Asynchronous JavaScript + XML e rappresenta una svolta fondamentale su ciò che sarà possibile fare sul Web.

Definiamo Ajax

Ajax non è una tecnologia. E’ l’insieme di più tecnologie indipendenti che insieme danno vita a potenti prospettive. Ajax incorpora a se:

Le classiche applicazioni Web lavorano in questo modo: molte delle operazioni non sono altro che una richiesta HTTP inoltrata al web server. Il server fa l’elaborazione - raccolta dati, manipolazione numeri, dialogo con eventuali sistemi legacy (datati) - e ritorna una pagina HTML al client. Questo è un modello adottato sin dalle origini del Web, considerato medium ipertestuale, ma come sanno i fanatici della User Experience, esso rende il Web ottimale per l’ipertesto ma non necessariamente così ottimale anche per le applicazioni software.

Modello tradizione applicazioni Web confrontato con quello Ajax
Figura 1: Il modello tradizionale delle applicazioni Web (alla sinistra) confrontato col modello Ajax (alla destra).

Questo approccio crea una miriade di soluzioni/quesiti tecnici che annebbiano quelli inerenti la User Experience. Mentre il server stà elaborando, l’utente cosa fa? Aspetta, e sarà costretto a farlo ad ogni richiesta.

Naturalmente, se noi progettavamo l’applicazione Web come un’applicazione software, questo non accadeva. Una volta che è stata caricata l’interfaccia, perchè l’interazione dell’utente deve fermarsi ogni volta che l’applicazione ha bisogno di processare il server? Perchè l’utente deve vedere l’applicazione dialogare con il server così pesantemente?

Ajax fa la differenza

Un’applicazione Ajax elimina la natura del Web ad essere contraddistinta da momenti alternati di dialogo-risposta che fanno attendere l’utente, introducendo un intermediario - un motore Ajax - tra l’utente e il server.
Può sembrare di aggiungere un livello all’applicazione che la rende meno veloce a rispondere, però è vero il contrario.

Invece di caricare una classica pagina web, ad inizio sessione, il browser carica il motore Ajax - scritto in Javascript e usualmente associato ad un frame invisibile. Questo motore è responsabile della comunicazione tra l’interfaccia utente e il server, mettendoli in comunicazione tra di loro. Il motore Ajax, indipendentemente dalla comunicazione con il server, permette all’interazione dell’utente con l’applicazione di essere asincrona. Così l’utente non è mai succube della finestra del browser bianca e dell’iconcina indicante il caricamento, aspettando che il server esegua le operazioni.

Modello di interazione sincrona confrontato con quella asincrona
Figura 2: Modello di interazione sincrona di un’applicazione web (sopra) confrontato con il modello asincrono Ajax (sotto).

Ogni azione dell’utente che normalmente genera una richiesta HTTP prende la forma di una chiamata Javascript verso il motore Ajax. Ogni risposta che non richiede la chiamata diretta al server - come validare alcuni dati, modificare dati in memoria - è un lavoro compiuto dal motore Ajax. Se il motore ha bisogno di interagire con il server per rispondere - invio dati da processare, caricare un interfaccia aggiuntiva, ricevere nuovi dati - il motore rende queste richieste asincrone, usualmente utilizzando XML, senza bloccare l’interazione tra utente e applicazione.

Chi usa Ajax

Google stà facendo molti investimenti nell’utilizzare AJAX come nuovo approccio. La maggior parte dei prodotti di Google introdotti anni fa - Orkut, Gmail, Google Groups, Google Suggest e Google Maps - sono applicazioni basate su Ajax. (per una migliore trattazione tecnica sull’implementazione Ajax, si consiglia di vedere l’analisi di Gmail, Google Suggest e Google Maps) Molti altri stanno seguendo lo stesso approccio: molte funzioni di Flickr sono basate su Ajax e il motore di ricerca di Amazon A9.com usa tecniche similari.

Questi progetti dimostrano che Ajax non risulta essere pura tecnica ma anche un’ottima pratica per la creazione di applicazioni molto utili. Non è una delle tante tecnologie utilizzate solo nei laboratori. Le applicazioni Ajax possono avere dimensioni diverse, dalla più semplice come Google Suggest, alla più complessa come Google Maps.

Uno sguardo al futuro

La maggiore sfida che Ajax pone davanti ai nostri occhi non riguarda la risoluzione dei problemi tecnici da esso derivati, ma il dimenticare tutte le limitazioni che riguardavano il Web, per lanciarsi verso la creazione di applicazioni robuste, veloci e sempre più simili alle applicazione Desktop.

WEKA - ottimo tool per data mining

Cos'è

WEKA è una sigla è sta per "Waikato Environment for Knowledge Analysis". È un software sviluppato nell'università di Waikato in Nuova Zelanda, è open source e viene rilasciato con licenza GNU. Curiosamente la sigla corrisponde al nome di un simpatico animale simile al Kiwi (vedi foto), presente solo nelle isole della Nuova Zelanda.

Caratteristiche

WEKA è un ambiente software interamente scritto in Java. Un semplice metodo per utilizzare questo software consiste nell'applicare dei metodi di apprendimento automatici (learning methods) ad un set di dati (dataset), e analizzarne il risultato. È possibile attraverso questi metodi, avere quindi una previsione dei nuovi comportamenti dei dati.

L'interfaccia grafica di Weka è composta da:

  • Simple CLI: l'interfaccia dalla linea di comando;
  • Explorer: ambiente che consente di esplorare i dati attraverso i comandi WEKA;
  • Experimenter: compie test statistici fra i diversi algoritmi di data mining.

Il dataset

Insieme di valori e attributi presenti all'interno di una relazione. In una tabella di un database relazionale le istanze corrispondono alle righe e gli attributi alle colonne. Il formato utilizzato in WEKA per la lettura dei dataset e l'ARFF(Attribute Relationship File Format), è simile al più famoso CSV (Comma-separated values) ed è equivalente alla tabella di un database relazionale.

La matrice di confusione

Vengono utilizzate per la valutazione dei classificatori utilizzati in WEKA.

--- Confusion Matrix ---
a b <-- classified as

7 2 | a = yes

3 2 | b = no

Le colonne della matrice rappresentano le istanze che sono state classificate come appartenenti a quella classe. Nell’esempio la prima colonna mostra che in totale sono state classificate 10 istanze “a” da WEKA, e 4 sono state classificate come “b”.
Le righe della matrice di confusione rappresentano le reali istanze che appartengono a quella classe. Attraverso questo meccanismo la matrice è in grado di fornire il numero di casi che sono stati classificati correttamente e il numero di casi classificati in modo scorretto.

mercoledì 20 agosto 2008

Battaglia e Miseferi - duo comico cabarettistico

Ieri sera, nel bellissimo anfiteatro di Palmi, ho assistito allo spettacolo comico cabarettistico di Battaglia e Miseferi. Da scompisciarsi dalle risate!!!

martedì 19 agosto 2008

Eclipse - più che un IDE

Credevo che Eclipse fosse un semplice IDE, ma usandolo sto sempre più rendendomi conto che è molto di più. Essendo open source è utilizzato da una miriade di sviluppatori in tutto il mondo, e di conseguenza si riesce a trovare supporto per lo sviluppo delle applicazioni più disparate (dalle applicazioni desktop alle web apps ed alle applicazioni per i mobile devices). Inoltre si trovano una miriade di plugins e frameworks...

Grafica free - Background, Gif Animate, Clip Art, Bottoni

Ho scoperto che su questo sito ci sono belli ed utilissimi elementi grafici, free...

lunedì 18 agosto 2008

Conoscere la popolarità di un sito con Alexa e Google Trends

Introduzione

Gli esperti di web-marketing sanno bene quant'è importante conoscere l'effettivo grado di popolarità di un sito, in quanto solo grazie a questo dato è possibile valutare consapevolmente le strategie commerciali e pianificare profittevoli investimenti pubblicitari su Internet.

Prima di pianificare una campagna on-line, infatti, è bene conoscere alcuni dati sul sito web che si è scelto quale veicolo per il proprio messaggio pubblicitario, in quanto solo in questo modo potremo sapere quale sarà il prevedibile ritorno del nostro investimento.

Conoscere questi dati, tuttavia, non è semplicissimo.

- Le statistiche di un sito web sono dati privati in possesso del webmaster e non è dato conoscerle, salvo che sia lo stesso titolare del sito ad autorizzarci ad accedervi.

Siti web molto noti e popolari possono fare affidamento su sistemi di auditing come quello offerto da Nielsen/Net Ratings o Audiweb. Questi sistemi, tuttavia, non sono certo alla portata di tutti (i costi di accesso a tali servizi sono tutt'altro che irrisori) e spesso diviene utile fare ricorso a strumenti alternativi, meno precisi e dettagliati - ma gratuiti! - come Alexa ed il più recente Google Trends.

Entrambi questi servizi sono dei sistemi basati su indagini di tipo statistico e pertanto non forniscono dati precisi e dettagliti sugli accessi ad un sito, ma rappresentano comunque un indice piuttosto utile per conoscere la popolarità di un sito web in Rete. Vediamo come funzionano.

Verificare il Traffic Rank con Alexa

Clicchiamo su Alexa (www.alexa.com) e digitiamo nella casella di ricerca il dominio del sito da verificare, avendo cura di selezionare la voce Site Ranking nella selectbox al fianco della casella di testo.

A questo punto comparirà la pagina con le informazioni del sito. Si noti che alcuni siti, troppo recenti o poco visitati, non hanno dati statistici.

Oltre al traffic rank, Alexa ci fornisce anche degli interessanti grafici relativi all'andamento del Reach, dell Rank ed delle Page Views del sito in un dato periodo di tempo. E' anche possibile effettuare ricerche comparative con altri siti.

Seguono, ancora, tante altre utili informazioni riguardanti:
  • la percentuale di utenti Internet che utilizzano il dominio ricercato;
  • il Traffic Rank del dominio del periodo corrente;
  • il numero di pagine viste per utente del dominio;
  • i paesi di provenienza del traffico;
  • le principali sezioni del sito visitate.
Verificare il trend del traffico con Google Trends

Per prima cosa accediamo al nuovo servizio nato dalle menti del Google Labs: Google Trends (trends.google.com) e clicchiamo sul link Trends for Websites che si trova nella parte inferiore della pagina.

Il nuovo servizio targato Google consente anche di specificare l'area geografica ed il periodo cui restringere la ricerca.

Oltre al grafico, che rappresenta il cuore del servizio, Google Trends fornisce altre sintetiche, ma interessanti, informazioni:
  • la provenienza geografica dei visitatori del sito;
  • gli altri siti visitati dall'utenza del sito ricercato;
  • le principali ricerche correlate al dominio ricercato.
Anche per Google Trends (come per Alexa) è opportuno ricordare che si tratta di dati "imperfetti" in quanto derivanti da una indagine di tipo statistico (Google non ci dice quali sono le sue fonti, ma ci avvisa che i dati forniti da Analytics non sono tra le fonti di questo servizio!) e quindi non necessariamente corretti al 100%.

The First

18/08/2008, il mio primo post da blogger :-)
468x60

Cerca su Google

Cerca nel Blog con Google