Tag: stallman

I.A. vs. ITS (the Incompatible Timesharing System)

L’acronimo I.A. (o anche semplicemente IA) sta per Intelligenza Artificiale (in inglese invece è più nota come AI Artificial Intelligence).

Ma cos’è realmente questa IA che ormai riempie la bocca di molti (soprattutto degli esperti di informatica dell’ultimo minuto, che si sono appena comprati un nuovo PC in un grande magazzino nel reparto tra le asciugatrici e i forni a microonde)?

La definizione che ho trovato sul sito inglese di Wikipedia (e che mi piace molto) è la seguente:

In computer science, artificial intelligence (AI), sometimes called machine intelligence, is intelligence demonstrated by machines, in contrast to the natural intelligence displayed by humans and animals. Leading AI textbooks define the field as the study of “intelligent agents”: any device that perceives its environment and takes actions that maximize its chance of successfully achieving its goals. Colloquially, the term “artificial intelligence” is often used to describe machines (or computers) that mimic “cognitive” functions that humans associate with the human mind, such as “learning” and “problem solving”.

https://en.wikipedia.org/wiki/Artificial_intelligence

Molte implementazioni in realtà si “fregiano” del’acronimo “IA” ma in realtà non sono altro che programmi contenenti una infinità di cicli “IF… THEN… ELSE” o di costrutti “CASE”.

Ma questo, il mangiatore di Quiche, non lo sa e si impressiona e pensa che ci siano software miracolosi che, se utilizzati, ci proietteranno nel futuro e porteranno l’umanità verso una società utopistica e fantascientifica, dove saranno le macchine a dirci come comportarci per raggiungere il successo e gli obiettivi che l’uomo si prefigge (a qualsiasi dimensione e in qualsiasi campo). E questo è una dato di fatto, perché altrimenti non si spiegherebbe tutto questo pseudo-interesse verso l’IA e il proliferare di applicazioni (funzionanti???) che adottano questo prodigio della tecnica.

L’intelligenza artificiale, come definizione, era nata per indicare un tipo di intelligenza diversa e disgiunta da quella tipica dell’uomo. Con il passare del tempo e delle evoluzioni tecnologiche l’IA si è ampliata e ha, al momento, delle interessanti sotto categorie di analisi e applicazione come, ad esempio, l’apprendimento automatico (o machine learning) e l’elaborazione del linguaggio naturale (o NLP Natural Language Processing). Esistono delle librerie (o API) per molti linguaggi di programmazione rivolte proprio a questi particolari aspetti dell’IA. Aspetti che, proprio per la loro complessità, non sono facili da realizzare, nè tanto meno la loro applicazione trova sbocchi concreti e attendibili. Ad esempio, un sistema basato sul machine learning, tanto più è sofisticato, tanto più dovrà essere testato su una mole sempre crescente di dati (i famosi Big Data). Se un sistema complesso apprende su un set limitato di informazioni, il rischio è che il sistema impari “a memoria” e non sia poi in grado di fornire output di qualità quando sarà messo alla prova in una situazione reale e complessa.

All’inizio ho detto che, al momento, uno dei rami principali dell’IA è rappresentato dalle tecniche di Machine Learning; proprio su questo argomento vorrei aprire due parentesi ad hoc.

Parentesi 1) L’altro giorno ho sentito dire che sui siti internet è possibile mettere dei banner che, grazie agli algoritmi di machine learning, è possibile visualizzare delle pubblicità “ritagliate” sul profilo del visitatore (che si è preventivamente loggato).
Ottimo.
Allora forse è meglio spiegare come stanno le cose:
Quando un utente si logga su un sito internet viene creato un oggetto “sessione” che può contenere i dati più disparati e che generalmente vengono recuperati dal database sui cui si trovano le informazioni dell’utente (nome, lingua, valuta, preferenze in generale) e “attaccate” all’oggetto “sessione” per tutta la durata della sessione (o comunque entro un tempo massimo stabilito per motivi di sicurezza).
Ipotizziamo che nell’oggetto “sessione” vengano anche memorizzate (ad esempio sotto forma di variabili booleane) le informazioni sui servizi attivi sul cliente.
A questo punto, nel banner delle pubblicità ci sarà un blocco di codice simile (ovviamente declinato in un determinato linguaggio di programmazione server side):

SE il cliente NON HA il SERVIZO_1 attivo, ALLORA mostra la pubblicità del SERVIZIO_1 altrimenti mostra pubblicità “standard”

IF
cliente.SERVIZO_1 = false
THEN
mostra pubblicità SERVIZIO_1
ELSE
mostra pubblicità “standard”
END IF

A questo punto possiamo avere le seguenti opzioni:
1) dietro il banner non c’è nessun algoritmo di Machine Learning e quindi hanno usato dei termini impropri per essere “cool” e alla moda
2) l’intelligenza umana è definita tale perché il cervello umano ha la capacità di gestire i “SE”. Grandissimo tassello nell’evoluzione umana. Beh vorrebbe dire sottovalutare enormemente i ragionamenti e l’intelligenza dell’uomo e non voglio certo credere che sia questo aspetto a denotare e classificare la nostra intelligenza.

E se parliamo dei banner pubblicitari personalizzati per noi, il merito è da attribuire unicamente ai cookies che vengono scaricati sul nostro durante la navigazione e che poi vengono utilizzati dai banner per “pescare” le pubblicità che meglio si adattano al nostro profilo. Ma gli algoritmi in sé non contengo blocchi di IA, anche se sicuramente sono programmati molto bene e con grande precisione. La prova è molto semplice… basta collegarsi ad un sito pieno di pubblicità con un browser normale e uno in modalità anonima (meglio un buon browser tipo Mozilla Firefox settato con parametri da paranoico) per notare che le pubblicità non sono più “profilate” sul nostro profilo commerciale.

Parentesi 2) il Machine Learning è in realtà l’applicazione degli algoritmi di Regressione Lineare (LR – Linear Regression), non a caso quando si scrive un programma di ML la prima cosa da fare è importare una o più librerie matematiche che contengono le funzioni utilizzate nella RL.

Il concetto di ML chiama, in modo molto naturale, un altro termine molto abusato, che è quello di Big Data. Cosa sono i Big Data? Tantissimi dati (strutturati e non strutturati) che esistono più o meno da quando sono nati i database relazionali.

Ma perchè i Big Data sono così importanti? Vediamolo.

Se scrivo un programma di ML, per avere un output “ragionato” dovrò fornirgli dei dati per poter arrivare alla risposta. Più il programma “ragione bene”, più è necessario fornire una quantità enorme di dati, altrimenti è probabile che il programma fornisca una risposta”a memoria”, come fanno alcuni studenti quando imparano a memoria un tema e poi lo ripetono senza capire le sfumature e le peculiarità, e quindi rischiando anche di dare un risultato errato.

Quindi scrivo il programma, formulo una domanda, il programma analizza una mole incredibile di dati e poi formula una risposta.

Voglio porre al programma una nuova domanda, il programma analizza ancora una mole incredibile di dati e poi formula una risposta.

Approccio non molto “intelligente”, considerando che il concetto di memoria, di esperienza, di “attitudine” al rischio intrinseche in ogni decisione sono ancora ben lontane dall’essere raggiunte… ma un approccio basato sulla regressione lineare può essere un ottimo surrogato (il più è riconoscerlo e non abusare del concetto di Machine Learning e di Intelligenza Artificiale).

Ultima cosa: da dove deriva la seconda parte del titolo di questo post, ovvero ITS (the Incompatible Timesharing System)?

Nel testo “The GNU Project” pubblicato all’interno del libro “Open Sources”, Stallman inizia a descrivere il suo inizio di carriera nel 1971 all’interno del MIT nel laboratorio di Intelligenza Artificiale. La veloce descrizione è la seguente:

The AI Lab used a timesharing operating system called ITS (the Incompatible
Timesharing System) that the lab’s staff hackers (*) had designed and written in assembler language for the Digital PDP-10, one of the large computers of the era. As a member of this community, an AI lab staff system hacker, my job was to improve this system.

Richard Stallman, The GNU Project

Dalle prime righe del testo si può quindi dedurre che già nel 1971 si parlava di IA e che all’epoca l’IA era programmata in assembler e lo scopo ultimo di Stallman (in quanto “AI lab staff system hacker”) era quello di migliorare il sistema.

Come ultima chicca, dalla nota evidenziata con l'(*), è possibile trarre una bellissima definizione del termine hacker:

(*) The use of “hacker” to mean “security breaker” is a confusion on the part of
the mass media. We hackers refuse to recognize that meaning, and continue using the word to mean, “Someone who loves to program and enjoys being clever about it.”

Richard Stallman, The GNU Project

Leggi il testo in inglese sul sito del Progetto GNU

Leggi il testo in italiano sul sito del Progetto GNU

Cercando di identificare un intervallo temporale all’interno del quale racchiudere l’evoluzione del concetto di Intelligenza Artificiale, possiamo dire che:

Il punto -1 è riconducibile all’anno 1950 quando, sulla rivista Mind, viene pubblicato un articolo di Alan Turing denominato Computing machinery and intelligence. Nell’articolo, partendo dal gioco denominato “gioco dell’imitazione”, Turing teorizza quello che poi diventerà noto come Testi di Turing (TT) che rappresenta un criterio per determinare se una macchina sia in grado di mostrare un comportamento intelligente ad un osservatore umano.

Il punto 0 si colloca temporalmente nell’anno 1956 quando, in un seminario presso il Dartmouth College di Hanover nel New Hampshire, si sono riuniti i principali esponenti informatici per raccogliere i risultati e le opinioni degli studi condotti negli anni precedenti e per delineare le linee guida degli sviluppi futuri.

Il punto di arrivo è il matrix creato dall’IA per utilizzare gli uomini come batterie per alimentare il sistema (cit. Matrix).

Diciamo che tra il punto 0 il punto di arrivo, siamo ancora nettamente nella prima parte del percorso. Oltretutto non sono convinto, IMHO, che l’attuale tecnologia basata sul silicio sia condizione sufficiente per lo sviluppo di una vera e propria IA.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/i-a-vs-its-the-incompatible-timesharing-system/

Eric S. Raymond – La cattedrale e il bazaar

La cattedrale e il bazaar di Eric Steven Raymond è un testo (o saggio… ma mi sembra eccessivo) del 1997 dove Raymond, utilizzando come esempio lo sviluppo del software fetchmail (sviluppato dallo stesso Raymond), analizza il successo della metodologia di sviluppo software introdotte la Linus Torvald per il progetto Linux, in contrasto al paradigma di programmazione “a cattedrale” in voga in gran parte del mondo commerciale (ma anche all’interno della stessa Free Software Foundation di Stallman di cui Raymond era un “seguace”). L’analisi dei due modelli viene condotta confrontando le diverse modalità di interpretare l’attività di debugging.

Al di là dei tecnicismi però ci sono degli spunti molto interessanti che scorrono costantemente su due binari paralleli: da un parte Raymond con il suo software fetchmail e sull’altro binario Torvalds con Linux e la grande rivoluzione del software open source.

Stallman storcerebbe il naso ad una simile definizione… preferirebbe “free software”… ma d’altronde HURD non ha ancora visto la luce…

Ed ecco le 19 regole che emergono, come capisaldi, dal nuovo paradigma del bazaar:

  1. ogni buon lavoro software inizia dalla frenesia personale di uno sviluppatore.
  2. I bravi programmatori sanno cosa scrivere. I migliori sanno cosa riscrivere (e riusare).
  3. “Preparati a buttarne via uno; dovrai farlo comunque.” (Fred Brooks, “The Mythical Man-Month”, Capitolo 11)
  4. Se hai l’atteggiamento giusto, saranno i problemi interessanti a trovare te.
  5. Quando hai perso interesse in un programma, l’ultimo tuo dovere è passarlo a un successore competente.
  6. Trattare gli utenti come co-sviluppatori è la strada migliore per ottenere rapidi miglioramenti del codice e debugging efficace.
  7. Distribuisci presto. Distribuisci spesso. E presta ascolto agli utenti.
  8. Stabilita una base di beta-tester e co-sviluppatori sufficientemente ampia, ogni problema verrà rapidamente definito e qualcuno troverà la soluzione adeguata.
  9. Meglio combinare una struttura dati intelligente e codice non eccezionale che non il contrario.
  10. Se tratti beta-tester come se fossero la risorsa più preziosa, replicheranno trasformandosi davvero nella risorsa più preziosa a disposizione.
  11. La cosa migliore, dopo l’avere buone idee, è riconoscere quelle che arrivano dagli utenti. Qualche volta sono le migliori.
  12. Spesso le soluzioni più interessanti e innovative arrivano dal fatto di esserti reso conto come la tua concezione del problema fosse errata.
  13. “La perfezione (nel design) si ottiene non quando non c’è nient’altro da aggiungere, bensì quando non c’è più niente da togliere.” Antoine de Saint-Exupèry (aviatore e designer di aerei, quando non scriveva libri per bambini)
  14. Ogni strumento dovrebbe rivelarsi utile nella maniera che ci si attende, ma uno strumento davvero ben fatto si presta ad utilizzi che non ci si aspetterebbe mai.
  15. Quando si scrive del software per qualunque tipo di gateway, ci si assicuri di disturbare il meno possibile il flusso dei dati – e mai buttar via alcun dato a meno che il destinatario non ti ci costringa.
  16. Quando il linguaggio usato non è affatto vicino alla completezza di Turing, un po’ di zucchero sintattico può esserti d’aiuto.
  17. Un sistema di sicurezza è sicuro soltanto finché é segreto. Meglio diffidare degli pseudo-segreti.
  18. Per risolvere un problema interessante, comincia a trovare un problema che risvegli il tuo interesse.
  19. Stabilito che il coordinatore dello sviluppo abbia a disposizione un medium almeno altrettanto affidabile di Internet, e che sappia come svolgere il ruolo di leader senza costrizione, molte teste funzionano inevitabilmente meglio di una sola.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/eric-s-raymond-la-cattedrale-e-il-bazaar/