468x60

domenica 28 dicembre 2008

Skype su Samsung Omnia i900

Skype è ormai da tempo rinomato per essere un ottimo software gratuito per comunicazioni Voice-Over-IP (Voce su protocollo internet). Il software è gratuito ma le chiamate verso telefoni no, anche se molto inferiori ai costi dei gestori telefonici tradizionali. Se però le chiamate vengono effettuate via internet tra utenti Skype sono completamente gratuite. In ogni caso, se si potesse eliminare il costo della connessione ad internet, le chiamate tramite Skype sarebbero molto convenienti, soprattutto se chiamiamo da un telefono cellulare! Detto ciò, è dunque facile dedurre che utilizzando una connessione wi-fi è possibile effettuare chiamate gratuite dal proprio cellulare, come se fosse un "citofono" da e verso il mondo!
Quando ho comprato il mio Samsung Omnia ho deciso di installare la versione mobile di skype e posso dire che funziona alla grande!
Ho seguito questa procedura per installarlo:
Questa è la pagina per il download.  Ti troverai davanti a 2 tipologie di programmi da poter scaricare, una per Poketpc e l’ altra per Smartphone. Scegliere quello per pocketpc. Ora hai 2 possibilità: scaricare il file in formato .exe oppure quello in formato .cab. Io ho scaricato il software direttamente dal cellulare e quindi per tale motivo ho scaricato il file in formato .cab, in questo modo per installarlo basterà cliccare sul file scaricato e voilà il gioco è fatto. Durante l’ installazione viene chiesto dove installare il software, io consiglio di installare in mystorage così salvaguardiamo la memoria interna.

venerdì 7 novembre 2008

Free Download Manager

Mentre ero al lavoro ho avuto la necessità di utilizzare un download manager che fosse con licenza d'uso libera, ed ho scoperto Free Download Manager (www.freedownloadmanager.org), un ottimo download manager open source. Funziona davvero bene, e non ha proprio nulla da invidiare ai download managers commerciali.

Tra le principali caratteristiche:
- Increase your download speed and resume broken downloads
- HTTP/FTP/BitTorrent support
- Flash video download
- Easy file sharing
- GNU General Public Licens

martedì 28 ottobre 2008

7-Zip

Finalmente Rar e Zip sono open source... grazie 7-Zip!

Ho recentemente scoperto questo tool open source, le cui caratteristiche sono davvero interessanti:

  • High compression ratio in new 7z format with LZMA compression
  • Supported formats:
    • Packing / unpacking: 7z, ZIP, GZIP, BZIP2 and TAR
    • Unpacking only: RAR, CAB, ISO, ARJ, LZH, CHM, MSI, WIM, Z, CPIO, RPM, DEB and NSIS
  • For ZIP and GZIP formats, 7-Zip provides a compression ratio that is 2-10 % better than the ratio provided by PKZip and WinZip
  • Strong AES-256 encryption in 7z and ZIP formats
  • Self-extracting capability for 7z format
  • Integration with Windows Shell
  • Powerful File Manager
  • Powerful command line version
  • Plugin for FAR Manager
  • Localizations for 69 languages

mercoledì 15 ottobre 2008

Web Services

Secondo la definizione data dal World Wide Web Consortium (W3C) un Web Service (servizio web) è un sistema software progettato per supportare l'interoperabilità tra diversi elaboratori su di una medesima rete; caratteristica fondamentale di un Web Service è quella di offrire un'interfaccia software (descritta in un formato automaticamente elaborabile quale, ad esempio, il Web Services Description Language) utilizzando la quale altri sistemi possono interagire con il Web Service stesso attivando le operazioni descritte nell'interfaccia tramite appositi "messaggi" inclusi in una "busta" (la più famosa è SOAP): tali messaggi sono, solitamente, trasportati tramite il protocollo HTTP e formattati secondo lo standard XML.

Proprio grazie all'utilizzo di standard basati su XML, tramite un'architettura basata sui Web Service (chiamata, con terminologia inglese, Service oriented Architecture - SOA) applicazioni software scritte in diversi linguaggi di programmazione e implementate su diverse piattaforme hardware possono quindi essere utilizzate, tramite le interfacce che queste "espongono" pubblicamente e mediante l'utilizzo delle funzioni che sono in grado di effettuare (i "servizi" che mettono a disposizione) per lo scambio di informazioni e l'effettuazione di operazioni complesse (quali, ad esempio, la realizzazione di processi di business che coinvolgono più aree di una medesima azienda) sia su reti aziendali come anche su Internet: la possibilità dell'interoperabilità fra diversi software (ad esempio, tra Java e Python) e diverse piattaforme hardware (come Windows e Linux) è resa possibile dall'uso di standard "aperti" (per un concetto assimilabile cfr. la voce "open source").

Il consorzio OASIS (Organization for the Advancement of Structured Information Standards) ed il W3C sono i principali responsabili dell'architettura e della standardizzazione dei Web Service; per migliorare l'interoperabilità tra le diverse implementazioni dei Web Service l'organizzazione WS-I sta inoltre sviluppando una serie di "profili" per meglio definire gli standard coinvolti.

Pila protocollare dei Web Service

Esempio di utilizzo dei protocolli per i Web Service

La pila protocollare dei Web Service è l'insieme dei protocolli di rete utilizzati per definire, localizzare, realizzare e far interagire tra di loro i Web Service; è principalmente composta di quattro aree:

  • Trasporto del servizio: responsabile per il trasporto dei messaggi tra le applicazioni in rete, include protocolli quali HTTP, SMTP, FTP, XMPP ed il recente Blocks Extensible Exchange Protocol (BEEP).
  • XML Messaging: tutti i dati scambiati sono formattati mediante "tag" XML in modo che gli stessi possano essere utilizzati ad entrambi i capi delle connessioni; il messaggio può essere codificato conformemente allo standard SOAP, come anche utilizzare JAX-RPC, XML-RPC o REST.
  • Descrizione del servizio: l'interfaccia pubblica di un Web Service viene descritta tramite WSDL (Web Services Description Language) un linguaggio basato su XML usato per la creazione di "documenti" descrittivi delle modalità di interfacciamento ed utilizzo del Web Service.
  • Elencazione dei servizi: la centralizzazione della descrizione e della localizzazione dei Web Service in un "registro" comune permette la ricerca ed il reperimento in maniera veloce dei Web Service disponibili in rete; a tale scopo viene attualmente utilizzato il protocollo UDDI.

Ulteriori protocolli standard utilizzati sono:

  • WS-Security: il protocollo Web Services Security protocol è stato adottato come standard OASIS; tale standard permette l'autenticazione degli utenti e la confidenzialità dei messaggi scambiati con l'interfaccia del Web Service
  • WS-Reliability: si tratta di specifiche basate su SOAP ed accettate come standard OASIS che soddisfano la richiesta di messaggi "affidabili" (reliable), richiesta critica per alcune delle applicazioni che utilizzano i Web Service (come, ad esempio, transazioni monetarie o applicazioni di E-commerce).

Vantaggi dei Web Service

  • permettono l'interoperabilità tra diverse applicazioni software su diverse piattaforme hardware
  • utilizzano standard e protocolli "open"; i protocolli ed il formato dei dati è, ove possibile, in formato testuale, cosa che li rende di più facile comprensione ed utilizzo da parte degli sviluppatori
  • mediante l'uso di HTTP per il trasporto dei messaggi i Web Service non necessitano, normalmente, che vengano effettuate modifiche alle regole di sicurezza utilizzate come filtro sui firewall
  • possono essere facilmente utilizzati, in combinazione l'uno con l'altro (indipendentemente da chi li fornisce e da dove vengono resi disponibili) per formare servizi "integrati" e complessi.
  • consentono il riutilizzo di infrastrutture ed applicazioni già sviluppate e sono (relativamente) indipendenti da eventuali modifiche delle stesse

Svantaggi dei Web Service

  • attualmente non esistono standard consolidati per applicazioni critiche quali, ad esempio, le transazioni distribuite
  • le performance legate all'utilizzo dei Web Service possono essere minori di quelle riscontrabili utilizzando approcci alternativi di distributed computing quali Java RMI, CORBA, o DCOM
  • L'uso dell'HTTP permette ai Web Service di evitare le misure di sicurezza dei firewall (le cui regole sono stabilite spesso proprio per evitare le comunicazioni fra programmi "esterni" ed "interni" al firewall).

Perché creare un Web Service

La ragione principale per la creazione e l'utilizzo di Web Service è il "disaccoppiamento" che l'interfaccia standard esposta dal Web Service rende possibile fra il sistema utente ed il Web Service stesso: modifiche ad una o all'altra delle applicazioni possono essere attuate in maniera "trasparente" all'interfaccia tra i due sistemi; tale flessibilità consente la creazione di sistemi software complessi costituiti da componenti svincolati l'uno dall'altro e consente una forte riusabilità di codice ed applicazioni già sviluppate.

I Web service hanno inoltre guadagnato consensi visto che, come protocollo di trasporto, possono utilizzare HTTP "over" TCP sulla porta 80; tale porta è, normalmente, una delle poche (se non l'unica) lasciata "aperta" dai sistemi firewall al traffico di entrata ed uscita dall'esterno verso i sistemi aziendali e ciò in quanto su tale porta transita il traffico HTTP dei web browser: ciò consente l'utilizzo dei Web Service senza modifiche sulle configurazioni di sicurezza dell'azienda (un aspetto che se da un lato è positivo solleva preoccupazioni concernenti la sicurezza).

Un'ultima ragione che ha favorito l'adozione ed il proliferare dei Web Service è la mancanza, prima dello sviluppo di SOAP, di interfacce realmente funzionali per l'utilizzo di funzionalità distribuite in rete: EDI, RPC, ed altri tipi di API (Application Programming Interface) erano e rimangono meno conosciute e di facile utilizzo che non l'architettura dei Web Service.

Voci correlate

Collegamenti esterni

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...
468x60

Cerca su Google

Cerca nel Blog con Google