Categoria: sulla tecnologia

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/

Anche Big G può fallire (a volte)

L’immagine che segue, nella sua estrema semplicità, è assolutamente geniale. E’ perfetta. Non c’è nulla da togliere o da aggiungere.

Un colosso come Google 1.000 ne pensa e 1.000 ne fa… quindi un fallimento ogni tanto è più che normale e fisiologico.

Però in questo momento storico, dove tutto passa per il colosso di bigG, avverto un piccolo sussulto di piacere. Google è immensa e fa parte della mia crescita considerando che l’ho vista nascere come alternativa indipendente e fuori dagli schemi rispetto ai primi grandi motori di ricerca come Yahoo e Altavista… però inizio a pensare che sia anche l’artefice della brutta piega commerciale che sta strisciando nei meandri (neanche tanto nascosti) della rete.

Riporto di seguito un po’ di articoli interessanti (e in parte anticipatori del futuro):

Permalink link a questo articolo: http://www.andrea.rustichelli.name/anche-bigg-puo-fallire-a-volte/

The Java Brothers

Era il finire degli anni ’90 e primi anni 2000. Java iniziava a prendere piede come il nuovo linguaggio di programmazione (se non ricordo male è stato il primo linguaggio a superare, come numero di sviluppatori, il linguaggio C).

Questa immagine mi ha fatto ridere, e mi ha fatto tornare in mente alcuni momenti del mio periodo universitario a Modena… quando prendevo il treno a Carpi e ogni tanto mi fermavo presso l’edicola vicina a prendere le riviste di informatica che avevano in allegato i DVD pieni di tool e IDE di programmazione.

Gli IDE più evoluti venivano sviluppati dalla Borland (con la loro serie “Builder”, ad esempio C++ Builder e JBuilder) e dalla Microsoft (con la loro serie “Visual”, ad esempio Visual C++ e Visual J++).

Poi la Microsoft ha rilasciato il suo nuovo linguaggio C# (pronuncia “C sharp” o “see sharp” se pronunciato in inglese) all’interno della nuova architettura di sviluppo denominata .NET (dot NET).
Il creatore del linguaggio Java, James Goslin e uno dei fondatori della Sun Microsystem (che rilasciò il linguaggio Java) Bill Joy, dissero subito che si trattava di un evidente clone del loro linguaggio di programmazione ma depotenziato e con notevoli carenze in fatto di riutilizzabilità, produttività e sicurezza.

L’immagine mi ha ricordato che nella documentazione in linea delle prime versione del SDK di C#, si faceva ancora riferimento a Java… molto probabilmente nel corso dei primi rilasci le pagine della guida on-line non erano ancora state “convertite” correttamente. Grande Microsoft Java.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/the-java-brothers/

Dissertazione confusionaria sui tablet

Sottotitolo: noi informatici smanettoni e appassionati, alle prese con un nuovo device che catalizza le attenzioni. Provo un po’ di odio e un po’ di attrazione che non so spiegarmi.

Una piattaforma chiusa, con un unico punto (o quasi) dove recuperare il software, che è diventato il vero punto fermo di questi dispositivi.
Gli smanettoni abituati a vedere il disco, il file system i file e tutto quello che a vario titolo ha a che fare con il proprio pc, difficilmente si riescono ad abituare ad un simile dispositivo. Le informazioni in campo informatico sono sempre state rappresentate dai file che ora hanno assunto un aspetto secondario, se non nullo nei tablet. Navigando in rete posso aver bisogno di scaricare un file … ma dove lo metto? Sul desktop? Nella cartella documenti? Dove? Nel “cloud”?

Il tablet è il dispositivo perfetto nell’evoluzione del pc. Dopotutto adesso siamo abituati a vederli in vendita nei grandi centri commerciali tra i frigoriferi e i televisori, come se quello fosse il loro posto naturale.

Nell’evoluzione dei personal computer i netbook avevano almeno una loro intima utilità: prodotti a basso prezzo (almeno all’inizio) per fornire un dispositivo funzionale e con tutto il necessario per scrivere, navigare e accedere alla rete. Adesso i tablet hanno soppiantato completamente i netbook, rappresentando un prodotto tecnologicamente più evoluto e sicuramente più accattivante; la Mela da questo punto di vista non ha rivali. Ma almeno sui netbook si poteva installare qualsiasi sistema operativo; erano nati una pletora di sistemi operativi dedicati ai nuovi dispositivi e comunque rappresentavano, in piccolo, un normale pc portatile. I tablet sono i figli di una tecnologia e di un paradigma chiuso, tanto è vero che i tablet della Mela non hanno neanche la porta USB e non sono espandibili. Una bella comodità; così sei sicuro che, anche se ti venisse voglia di smanettarci seriamente, non avresti comunque la possibilità di interfacciare il dispositivo con il mondo esterno. L’unico mondo che il dispositivo vede e al quale ha accesso è quello reso disponibile dalle innumerevoli App (usare il termine software o programma è eccessivo e fuorviante in questo nuovo contesto di non-informatica). D’altronde gli utenti della Mela e adesso gli utilizzatori di tablet sono alla ricerca della semplicità. Quella semplicità e quella immediatezza che i normali PC non possono offrire perchè se cerchi potenza, espandibilità e completezza non puoi certo prescindere da un PC… non c’è rosa senza spine.

Nel mondo dei tablet è bellissimo notare come la concezione mainstream porti la gente a pensare che siano stati inventati dalla Apple e dal guru Jobs, qando in realtà i tablet (o un loro precursore chiamato Tablet PC) furono introdotti nel mercato dei big player dalla Microsoft. Come sempre la Mela ha dimostrato ancora una volta che non è sufficiente una buna idea, ma bisogna anche impacchettarla con una scatola accattivante e dire alle persone che hanno un bisogno impellente da soddisfare.

E poi, come disse il Cuginetto, le App stanno rovinamndo intere generazioni di programmatori e hanno peggiorato il modo di programmare. Ma come è possibile che ogni settimana ci siano da aggiornare tutte le App installate e che il loro peso, in termini di occupazione disco, sia in costante aumento. Ci sono App che superano abbondantemente i 100 MB e a 100 MB arrivava una delle prime versione di Acrobat Writer negli anni 2000. Si qualche problema lo devono avere queste App…

Però per onestà intellettuale devo dire che anche io utilizzo i tablet, sia l’iPad (che mi è statore regalato) sia di vari produttori asiatici con installato l’immancabile Android. Anche questi ultimi hanno qualche vantaggio rispetto a quelli della Mela (vedi espandibilità), ma rimangono chiusi e, a mio modo di vedere, molto limitati per gli smanettoni.

Il tablet: Comodo è comodo… però se devo fare delle cose serie lo devo appoggiare e tirare fuori il mio portatile… vecchio rappresentante di una informatica che non morirà mai.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/dissertazione-confusionaria-sui-tablet/

Dall’Extreme Programming all’Agile, passando per l’APP IO

Partiamo dall’inizio di tutto… partiamo dall’Extreme Programming (XP).
L’ Extreme Programming è una metodologia per lo sviluppo software nata intorno all’anno 1996 e i suoi cardini sono rappresentati da:

  • Simplicity
  • Communication
  • Feedback
  • Respect
  • Courage

mentre le regole da rispettare sono declinate nelle 5 fasi dello sviluppo software (Planning, Managing, Designing, Coding e Testing.)

In pratica molti progetti di successo sono basati su questa metodologia (soprattutto dal 1996 ai primi anni del 2000).
Ma qual’è un progetto software di successo basato su questa metodologia? Il mio esempio preferito è VLC Media Player (Video LAN Client) il noto player multimediale presente per ogni piattaforma e famoso per l’icona a forma di cono per i lavori stradali.
VLC fin dal suo rilascio iniziale ha rispettato tutte le caratteristiche della metodologia XP.
La versione 1.0.0 è arrivata solamente a Giugno 2010 nonostante il software fosse disponibile già dal primi anni 2000. Questo significa che il software ha iniziato a circolare liberamente anche quando non era ancora considerato sufficientemente stabile e maturo. Però il suo compito principale, quello del player multimediale, lo ha svolto bene fin da subito e questo gli ha permesso di guadagnare costantemente consensi da parte degli utilizzatori arrivando addirittura a sbaragliare tutta la concorrenza perchè, anche se non perfetto, era migliore della maggioranza dei suoi competitor.
Su Windows era obbligatorio installarlo per sostituire l’imbarazzante Windows Media Player installato di default e, anche sui sistemi linux, si dimostra un ottimo player rispetto alla numerosa concorrenza free.
L’XP funziona anche nei confronti degli utilizzatori perchè:
1) venendo rilasciato anche se non perfettamente maturo, permette di “occupare” una fetta di mercato e rubare utilizzatori agli altri software
2) venendo aggiornato in continuazione permette di aggiungere sempre nuove funzionalità (o risolvere bug)e di fidelizzare l’utilizzatore
Gli sviluppatori di VLC sono riusciti a farsi una ampia base di utilizzatori fedeli e contenti del prodotto.
Una dovuta precisazione: i dati riportati sotto partono dalla versione 0.8.6 del 2006 ma in realtà lo sviluppo di VLC iniziò nel 1996 (all’interno di un campus francese con architettura client/server… da qui il nome originario di Video LAN Client).
Riporto di seguito le date di rilascio delle varie versioni di VLC dalla versione 0.8.6 all’attuale versione 3.1.10 (stabile) o 3.1.11 (beta) che occupano un arco temporale di circa 14 anni.

VLC v3.0.11 Beta – 16 Jun 2020
VLC v3.0.10 – 29 Apr 2020
VLC v3.0.8 – 20 Aug 2019
VLC v3.0.7.1 – 12 Jun 2019
VLC v3.0.7 – 07 Jun 2019
VLC v3.0.6 – 12 Jan 2019
VLC v3.0.5 – 27 Dec 2018
VLC v3.0.4 – 01 Sep 2018
VLC v3.0.3 – 31 May 2018
VLC v3.0.2 – 25 Apr 2018
VLC v3.0.1 – 28 Feb 2018
VLC v3.0 – 09 Feb 2018
VLC v2.2.8 Beta – 23 Nov 2017
VLC v2.2.6 – 25 May 2017
VLC v2.2.5.1 – 13 May 2017
VLC v2.2.5.1 Beta – 15 Mar 2017
VLC v2.2.4 – 05 Jun 2016
VLC v2.2.3 – 04 May 2016
VLC v2.2.2 – 06 Feb 2016
VLC v2.2.2 Beta – 22 Jan 2016
VLC v2.2.1 – 14 Apr 2015
VLC v2.2.0 – 27 Feb 2015
VLC v2.2.0 RC2 – 23 Nov 2014
VLC v2.2.0 RC 1 – 12 Nov 2014
VLC v2.1.5 – 27 Jul 2014
VLC v2.1.3 – 05 Feb 2014
VLC v2.1.2 – 10 Dec 2013
VLC v2.1.1 – 14 Nov 2013
VLC v2.1.0 – 26 Sep 2013
VLC v2.1.0 RC 2 – 10 Sep 2013
VLC v2.1.0 RC 1 – 28 Aug 2013
VLC v2.0.8 – 29 Jul 2013
VLC v2.0.7 – 10 Jun 2013
VLC v2.0.6 – 13 Apr 2013
VLC v2.0.5 – 15 Dec 2012
VLC v2.0.4 – 23 Oct 2012
VLC v2.0.3 – 20 Jul 2012
VLC v2.0.2 – 01 Jul 2012
VLC v2.0.1 – 20 Mar 2012
VLC v2.0.0 – 19 Feb 2012
VLC v2.0. RC1 – 16 Feb 2012
VLC v1.1.11 – 16 Jul 2011
VLC v1.1.10 – 06 Jun 2011
VLC v1.1.9 – 13 Apr 2011
VLC v1.1.8 – 24 Mar 2011
VLC v1.1.7 – 01 Feb 2011
VLC v1.1.6 – 25 Jan 2011
VLC v1.1.5 – 14 Nov 2010
VLC v1.1.4 – 30 Aug 2010
VLC v1.1.3 – 19 Aug 2010
VLC v1.1.2 – 05 Aug 2010
VLC v1.1.0 – 23 Jun 2010
VLC v1.1.0 RC 4 – 16 Jun 2010
VLC v1.1.0 RC 3 – 11 Jun 2010
VLC v1.1.0 RC – 26 May 2010
VLC v1.1.0 pre4 – 12 May 2010
VLC v1.1.0 pre3 – 02 May 2010
VLC v1.1.0 pre1 – 13 Apr 2010
VLC v1.0.5 – 01 Feb 2010
VLC v1.0.3 – 02 Nov 2009
VLC v1.0.3 RC – 22 Oct 2009
VLC v1.0.2 – 23 Sep 2009
VLC v1.0.1 – 29 Jul 2009
VLC v1.0.0 – 07 Jul 2009
VLC v1.0.0 RC 4 – 18 Jun 2009
VLC v1.0.0 RC 3 – 12 Jun 2009
VLC v0.9.9 – 03 Apr 2009
VLC v0.9.8a – 08 Dec 2008
VLC v0.9.6 – 10 Nov 2008
VLC v0.9.4 – 08 Oct 2008
VLC v0.9.3 – 06 Oct 2008
VLC v0.9.2 – 15 Sep 2008
VLC v0.9.0 Test 2 – 01 Aug 2008
VLC v0.8.6i – 12 Jul 2008
VLC v0.8.6h – 08 Jun 2008
VLC v0.8.6f – 03 Apr 2008
VLC v0.8.6e – 28 Feb 2008
VLC v0.8.6d – 01 Dec 2007
VLC v0.8.6c – 17 Jun 2007
VLC v0.8.6b – 18 Apr 2007
VLC v0.8.6b Test 1 – 13 Apr 2007
VLC v0.8.6a – 05 Jan 2007
VLC v0.8.6 – 10 Dec 2006
VLC v0.8.6 RC1 – 01 Dec 2006
VLC v0.8.6 Test 2a – 21 Nov 2006
VLC v0.8.6 Test 2 – 16 Nov 2006
VLC v0.8.6 Test 1 – 27 Oct 2006

Poi nel 2001 alcuni ideatori della metodologia XP (Kent Beck, Jeff Sutherland, Ken Schwaber e Ward Cunningham) firmarono insieme ad altri sviluppatori il manifesto Agile. Il manifesto altro non è che, IMHO, una riscrittura “politically correct” della metodologia XP. Non a caso adesso la parola imperante sui sociale è “Agile” e non “Extreme Programming”.
Ecco il manifesto Agile in italiano, ma sul sito ufficiale è disponibile in molte lingue tra cui, ovviamente, anche l’originale testo in inglese.

Stiamo scoprendo modi migliori di creare software, sviluppandolo e aiutando gli altri a fare lo stesso.
Grazie a questa attività siamo arrivati a considerare importanti:

Gli individui e le interazioni più che i processi e gli strumenti
Il software funzionante più che la documentazione esaustiva
La collaborazione col cliente più che la negoziazione dei contratti
Rispondere al cambiamento più che seguire un piano

Ovvero, fermo restando il valore delle voci a destra, consideriamo più importanti le voci a sinistra.

Sicuramente questo manifesto è stato plasmato dalla metodologia XP per essere più aderente alle nuove realtà aziendali, alle nuove forme di managing e ai prodotti software emergenti (principalmente applicazioni web-oriented e app per smartphone/tablet). L’XP si è liberata delle rigidità ed è diventata fluida, malleabile e dinamica.
Tramite i 12 principi della programmazione Agile sono state gettate le basi per una nuova metodologia di sviluppo software che trae le sue origini proprio dalla metodologia XP ma rendendola più attuale e fruibile.

Tra le due metodologie preferisco ancora l’Extreme Programming perchè la reputo più vera, più essenziale e più pragmatica… lontana dalle logiche e dagli slogan maintream che imperano sui social network.

Poi tra il 7 e l’8 Dicembre 2020 è stata pubblicata su tutti gli store l’App IO. L’app IO è la parte software derivante dal progetto IO per la promozione della “cittadinanza digitale” del Governo italiano. Ideato dal team per la Trasformazione Digitale promossa dall’AGID (Agenzia per l’Italia Digitale) ha l’obiettivo di facilitare l’accesso dei cittadini a tutti i servizi digitali della Pubblica Amministrazione. L’app IO è stata rilasciata in occasione del progetto “Cashback” per incentivare l’utilizzo dei pagamenti digitali effettuati dall’ 8 al 31 Dicembre 2020. Inutile dire che il 9 Dicembre l’app IO era parzialmente inutilizzabile e i continui aggiornamenti dell’app dimostrano che il software non può essere definito “stabile” (come evidenziato anche dai vari screenshot).

Anche questo è un esempio di Extreme Programmig. Nonostante gli evidenti limiti e malfunzionamenti milioni di utenti hanno scaricato l’app nei primi giorni e attendono con ansia la versione stabile.
L’app IO rispetta i 5 cardini della Extreme Programming:

  • Simplicity: SI (ma con pre-requisiti COMPLESSI)
  • Communication: ECCESSIVA e MARTELLANTE
  • Feedback: NON PERVENUTO
  • Respect: NESSUN RISPETTO
  • Courage: DA VENDERE

Permalink link a questo articolo: http://www.andrea.rustichelli.name/dallextreme-programming-allagile-passando-per-lapp-io/

Dialogo sui massimi sistemi (operativi)

“Il Mac è meglio di Windows, senza ombra di dubbio; se non altro non si pianta mai, e, comunque, è molto più veloce.”

Questo è quello che mi è toccato sentire.
Beh vorrei esprimere alcune considerazioni personali sui 2 principali sistemi (intendendo con la parola sistemi l’accoppiata Mac+iOS e PC assemblati + Windows).

Per iniziare vorrei sottolineare come l’instabilità di Windows non sia solamente un blocco di sistema, ma una frustrante e sporadica dimostrazione della fallibilità del lavoro umano. Qualcosa di più profondo dunque di un errore di sistema, è un’occasione di crescita per il Vero Uomo (che ricordiamo, non usa certo il Mac). Quando compare il c.d. “schermo blu” (detto anche BSOD – Blue Screen Of Death) il Vero Uomo sa che ha commesso un errore. Ha scritto un programma errato, ha eseguito contemporaneamente troppe istanze di programmi, oppure, molto più semplicemente, il programma in esecuzione ha cercato di accedere ad una porzione di memoria RAM già occupata da altri dati e il SO ha avvisato l’utente dell’accaduto e vi ha posto rimedio.

Ma perchè il Mac è più stabile?

La risposta è molto semplice: perchè è un sistema operativo creato per essere eseguito su 4 pc e 5 portatili, con un hardware prestabilito e non scelto/modificabile dall’utente. Windows nasce per poter girare su qualsiasi pc e quindi, per estensione di questa filosofia, fatto per non girare alla perfezione su nessuna macchina. Windows (in qualsiasi delle sue versioni) ha al suo interno un numero enorme di driver proprio per poter gestire praticamente qualsiasi periferica acquistabile sul mercato (passata, presente e, qualche volta, anche futura come i draft dei vari protocolli in fase di beta test). Addirittura il sistema operativo del Mac ad un certo punto del suo sviluppo termina di essere compatibile con i modelli precedenti dei computer della Mela. E’ quindi chiaro che se un sistema operativo nasce per “girare” su un numero ristretto di periferiche hardware allora sarà sicuramente stabile e performante (altrimenti ci sarebbero dei seri problemi se ciò non avvenisse).
Per certi versi è un po’ come ricompilare il kernel dei sistemi Unix/Linux che permettono di conformare perfettamente il cuore del sistema operativo all’hardware del pc. Vorrei chiedere ad un utente della Mela quanto volte ha aperto il proprio Mac, magari per aumentare la dotazione di memoria RAM, oppure per aggiungere un disco fisso o anche solamente per guardare la meraviglia tecnologica che c’è dentro un computer. Ma cosa lo apre a fare un Mac? Tanto non puoi aggiungerci nulla perchè il Sistema Operativo non riconoscerebbe il nuovo hardware. Per la cronaca: i Veri Uomini hanno la necessità di “smanettare” con l’hardware dei propri PC, quindi, per derivazione, i Veri Uomini non hanno Mac.

Passiamo ora ad affrontare il problema della velocità. Il Mac dal 2006 a questa parte monta dei processori sviluppati dalla Intel e quindi si è allineata con gli altri produttori di PC e ha abbandonato i vecchi processori sviluppati dalla Motorola (fino al 1996) e poi dal “consorzio AIM (Apple-IBM-Motorola); possiamo parlare quindi di un’era RISC e di un’era CISC.
Nel corso della prima era, l’architettura del processore era di tipo RISC (Reduced Instruction Computer Set) ovvero era un processore che, a prescindere dalla velocità di clock, aveva un ridotto numero di istruzioni. Storicamente tutti i processori con architettura RISC proprio in virtù del basso numero di istruzioni elementari, erano particolarmente ‘veloci’ nell’eseguire le istruzioni booleane (and, or, not, nor ecc.). Le istruzioni booleane sono da sempre utilizzate per la grafica e l’editing audio/video che, in quanto le funzioni che vengono applicate su foto, immagini, audio e video, altro non sono che complesse funzioni aventi come fondamenti proprio le istruzioni booleane. E guarda caso dov’è che i sistemi Mac hanno sempre dato un grosso contributo? Proprio nei settori della dell’editing grafico e della creazione musicale. Quindi tornando alla domanda iniziale possiamo dire che nell’era pre-Intel i Mac erano sicuramente più veloci, a parità di velocità di clock, degli altri processori con architettura CISC (Complex Instruction Computer Set) soprattutto in quegli ambiti dove si faceva un massiccio utilizzo di operazioni elementari e booleane.
Adesso che siamo nell’era Intel questo divario, causato dalla differente architettura del processore non sussiste più. Che poi il Sistema Operativo abbia una migliore gestione dell’hardware per tutti i motivi sopra elencati questa è un’altra storia, ma sicuramente i Mac non sono più veloci degli altri PC.

Inoltre girano alcuni “rumors” secondo i quali nel 2021 l’Apple equipaggierà i propri computer (sia portatili sia da tavolo) con i processori basati su architettura ARM della serie A abbandonando quindi il sodalizio con la Intel. La serie A fa parte della famiglia di processori ARM Cortex presentati dalla ARM Holding nel 2005 e sono indirizzati principalmente verso l’utilizzo di computer e dispositivi portatili che necessitano di potenza di calcolo e flessibilità.

Infine voglio far notare una verità assoluta: gli utilizzatori di Windows sanno che il loro sistema fa schifo, ma lo utilizzano ugualmente al massimo delle loro potenzialità (e del sistema). Know your enemy!

Non parlo di Linux in questo post perchè ho voluto concentrarmi sullo scontro sociale, culturale ed economico che da sempre avviene tra queste due fazioni opposte e inconciliabili.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/dialogo-sui-massimi-sistemi-operativi/

Linux, fatti riconoscere!

Riporto di seguito alcuni comandi che possono essere utili per identificare una versione di Linux, del Kernel e, in caso di Linux Mint (LM), la versione corrispondente di Ubuntu. Questo ultimo aspetto è particolarmente comodo quando dobbiamo installare un pacchetto e troviamo solo la corrispondenza con Ubuntu (ad esempio Virtual Box). In questo modo possiamo sapere quale pacchetto scaricare che sia compatibile con la nostra versione di LM.

Quindi, per trovare la versione di Ubuntu da cui deriva la nostra versione installata di LM, il comando più comodo è:

cat /etc/upstream-release/lsb-release

Per ottenere info sul kernel:

uname -r

Infine, per ottenere info sulla versione di linux in formato “verboso” occorre lanciare il seguente comando:

lsb_release -a

oppure per avere le singole informazioni usare i seguenti comandi:

 lsb_release -d #per avere la descrizione (ad esempio "Linux Mint 20")
 lsb_release -r #per avere il numero di release (ad esempio "20")
 lsb_release -c #per avere il nome in codice  (ad esempio "ulyana")

Le stesse informazioni possono essere recuperate dal file /etc/os-release:

more /etc/os-release

Permalink link a questo articolo: http://www.andrea.rustichelli.name/linux-fatti-riconoscere/

“Hello World”… le prime parole di ogni programma (in tutti i linguaggi di programmazione)

Chiunque abbia mai programmato in un qualsiasi linguaggio di programmazione lo sa!
La prima cosa da fare è imparare come scrivere “Hello World” (a prescindere dal fatto che lo “standard output” sia il monitor, una pagina web o una stampante).

Sul sito The Hello World Collection c’è la più vasta raccolta di linguaggi di programmazione e di esempi su come un nuovo programma debba salutare il mondo alla nascita.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/hello-world-le-prime-parole-di-ogni-programma-in-tutti-i-linguaggi-di-programmazione/

La mia prima CPU – il “protopentium” Intel DX4

Il primo computer mi è stato regalato durante i primi anni delle superiori da mia nonna (era circa il 1993/1994). L’acquisto fu fatto alla Computer Line di Reggio Emilia che, all’epoca, era la boutique dell’informatica in provincia.

C’erano ancora le lire e i pc erano ancora abbastanza costosi, soprattutto alcuni componenti che adesso hanno un costo irrisorio (come i lettori CD-rom). Mi ricordo infatti che per non gravare troppo sul costo del regalo ho deciso di non comprare subito il lettore e demandare l’acquisto ad un momento futuro (poi mai acquistato). Anche se in realtà per il mio PC non comprai mai un lettore CD da inserire nel case, ma ne trovai uno abbastanza grosso (per intenderci delle dimensioni di un videoregistratore) che potevo collegare al mio computer tramite la porta parallela.
La RAM e il disco fisso erano ancora misurabili in MB e la scheda grafica VGA era fantascienza. Il computer montava il sistema operativo MS-DOS (la versione 5 e poi la versione 6) e avevo installato Microsoft Windows 3.11 for Workgroup (che a differenza della precedente versione Windows 3.1 includeva anche il supporto per le nascenti reti… da qui la definizione “for workgroup”). Il PC si avviava e veniva subito mostrata la shell DOS; per avviare Windows (che all’epoca era un programma e non un vero e proprio sistema operativo) era necessario lanciare il comando win.

In quel periodo stava uscendo sul mercato anche il mitico processore Intel Pentium (non chiamato 586 per motivi di marketing / problemi con i concorrenti come AMD) che però, le prime versioni, presentavano un famoso bug “Pentium FDIV bug”. L’ho definito mitico perchè è stato il primo processore “di massa” che ha portato (insieme a Windows 95) il PC dentro le case delle famiglie.
Per questo motivo mi piaceva chiamare il mio processore un “proto-pentium” perchè era l’ultima versione della famiglia 486 prima dell’avvento della famiglia 586.

Il processore 486DX4 era la versione a 100 MHz (frequenza a 33,3 MHz con un moltiplicatore pari a 3) a 32 bit con una cache di 1° livello di 8 kb.

Case e monitor erano del classivo colore “grigio apparato informatico” che tanto andava di moda.

Ho smanettato molto con questo PC e, sebbene molto arretrato come performace rispetto agli attuali personal computer, mi ha permesso di esplorare a fondo il mondo dell’informatica. Negli strumenti di programmazione che utilizzavo durante le superiori (come i compilatori / IDE della Borland) erano infatti disponibili numerosi programmi per lavorare a basso livello con i sorgenti e le DLL. Se non ricordo male era già possibile installare le prime versioni di DOOM e DOOM 2 (della ID Software) su 5/8 floppy disk.

Insomma… un inizio con il botto…

Permalink link a questo articolo: http://www.andrea.rustichelli.name/la-mia-prima-cpu-il-protopentium-intel-dx4/

Dato vs. Informazione

Ipotizziamo di indossare un orologio particolarmente evoluto che, ogni ora, identifica la nostra posizione e legge a voce alta la temperatura esterna.
Ogni ora ci comunica la temperatura esterna.
La temperatura esterna è un dato.
A che ora il dato diventa informazione?
Dipende.
Da cosa dipende?
Dipende a che ora ci stiamo vestendo per uscire. Solo in quel momento il dato della temperatura esterna diventa informazione perchè ci permette di attuare una scelta su quali vestiti indossare in funzione della temperatura esterna.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/dato-vs-informazione/

Cosa mi sta succedendo?

Oggi ho vissuto la seguente esperienza.

Un collega, appassionato di montaggi video in 4K registrati con il drone, mi dice che il suo computer scatta ed è parecchio lento nell’aprire e modificare i file video (che hanno la dimensione di circa 1,2/2 GB). Ok, detta così è troppo semplice, gli chiedo di portarmi il portatile così provo a dare un occhio per capire quale sia il reale problema.

Mi porta il suo computer e, nonostante abbia un paio di anni, è equipaggiato con un processore Intel i7, scheda grafica dedicata ATI e 12 GB di ram. Sistema operativo Windows 8 nativo (quello già installato al momento dell’acquisto). Provo a smanettarci un po’ e capisco subito che il sistema operativo è piantatissimo. Ho provato anche ad installare VLC (che generalmente fornisce ottimi risultati in termini di stabilità e velocità rispetto a Media Player) ma il problema è del sistema operativo. Lentissimo, piantatissimo, inutilizzabile.

Svengo

Poi mi riprendo, mi guardo in giro, poi lo fisso negli occhi e gli dico: “Non l’ho mai detto a nessuno, ma se fossi in te comprerei un Mac”.

Sono svenuto nuovamente.

Morale della storia: se uno è uno smanettone può provarci a mettere mano al pc e provare a reinstallare da 0 una versione non OEM di Windows oppure provare a installare una qualsiasi distro di Linux e incrociare le dita per trovare i programmi con le stesse funzionalità di quelli utilizzati in ambiente Microsoft. Però alla fine, comprando un Mac, potrebbe risolvere velocemente il problema visto che i programmi per la gestione dei file multimediali abbondano su questo sistema operativo. Per me è stato un modo per dare un ottimo consiglio senza dover metterci le mani perchè poi ho aggiunto: “Però per il Mac non posso aiutarti perchè è un sistema che non conosco (e che non voglio conoscere)”.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/cosa-mi-sta-succedendo/

Il mio rapporto con i social network

Non è che odio i social network.

Cioè… alla fine sono presente su tutti i principali social network, ma non li frequento attivamente.

Il problema è che sono pieni di tag, di slogan, di hastag (che poi non sono altro che tag con un nome più accattivante) e di vuoto.

I social network partono bene, ma poi si perdono… sono pochi quelli che continuano a mantenere un certo “appeal” nel tempo. Un esempio su tutti Facebook (che secondo me tra 3 anni da ora non ci sarà più)… o G+ che non è neanche decollato. All’inizio, su Facebook, tutti postavano qualcosa di originale e personale… adesso ci sono solo dei link a dei link e ad altro materiale spazzatura presente in giro per la rete (che lucra sul traffico generato).

E poi sono drammaticamente vuoti di contenuti interessanti. Se si ricerca qualcosa (ad esempio per interesse personale, per hobby, perchè si vuole trovare una soluzione ad un problema, ecc.), si verrà reindirizzati verso siti, blog, forum, newsgroup ma sicuramente non verso un social network, perché li è impossibile trovare contenuti degni di nota.

Ecco, questo penso che sia il problema principale dei social… devono essere utilizzati solamente per scopo “ludico”.

Quindi massimo rispetto per tutte quelle persone che perdono tempo a scrivere e mantenere attivi i siti e i blog sparsi per la rete. Conosco benissimo quanto tempo e passione ci vuole…

Permalink link a questo articolo: http://www.andrea.rustichelli.name/il-mio-rapporto-con-i-social-network/

La nascita del Vero Uomo 2.0

Se in epoche passate, dove l’informatica era una materia conosciuta da pochi eletti, il Vero Uomo utilizzava sistemi Unix, adesso, dove  l’informatica è diventata una sottocategoria dell’elettronica di consumo, il Vero Uomo 2.0 utilizza (anche) Windows. E il Mangiatore di Quiche che fine ha fatto? Esiste ancora? Si, il Mangiatore di Quiche esiste ancora e usa un qualsiasi prodotto della Mela o un Tablet (di qualsiasi marca) in quanto li considera entrambi soluzioni informatiche avanzate; non si accorge che stanno uccidendo la Vera Informatica.

L’informatica di consumo (che è quella che piace ai Mangiatori di Quiche) è diventata talmente modaiola, poco affascinante e quanto di più lontano dalla Vera Informatica ci possa essere, da rendere i sistemi Microsoft (e quindi, di conseguenza, i personal computer non iQualcosa) degni di un Vero Uomo 2.0.

I veri uomini sono i veri smanettoni e adesso che Windows sta morendo a causa della sua incapacità di rimanere uguale alle versioni che ne hanno determinato il successo i veri uomini sono quelli che usano sistemi operativi alternativi… ma sempre meno di nicchia.L’importante è che il Vero Uomo ne sappia di informatica e sia uno smanettone… comprare un pc da 2.000 € solo perché è costoso non aggiunge nessun valore alla persona che rimane, di conseguenza, un Mangiatore di Quiche. Perchè la verità è che sul nuovo portatile era installata una versione del nuovissimo Windows 10 e, piuttosto di imparare ad utilizzare questo “nuovo” sistema operativo, ho preferito imparare ad utilizzare Linux Mint per le attività di tutti i giorni. E devo ammettere che mi sto adattando molto bene e il divertimento e il piacere aumentano giorno dopo giorno.

E poi vuoi mettere la sensazione di potenza quando per spegnere un pc devi scrivere sulla riga di comando (preferibilmente la BASH Shell):

shutdown -h now

Permalink link a questo articolo: http://www.andrea.rustichelli.name/la-nascita-del-vero-uomo-2-0-2/

Microsoft Service Agreement

Ero curioso di leggermi il Service Agreement di Microsoft dopo aver visto la puntata di South Park con la parodia di “The Human Cent iPad” e degli “Apple Terms” di Apple che vengono sempre accettati senza mai leggere veramente il loro contenuto.

Mi sono guardato i servizi legati a Windows Live ed è Interessante quello che c’è scritto al punto 3.3 delle condizioni:

3.3. Quali operazioni effettua Microsoft sul contenuto dell’utente? Quando l’utente carica contenuto nei servizi, accetta che tale contenuto venga utilizzato, modificato, adattato, salvato, riprodotto, distribuito e visualizzato nella misura necessaria per proteggere se stesso e fornire, proteggere e migliorare i prodotti e i servizi Microsoft. Ad esempio, Microsoft potrà, occasionalmente, utilizzare mezzi automatici per isolare informazioni presenti in messaggi di posta elettronica, chat o foto allo scopo di consentire il rilevamento di posta indesiderata e malware o per migliorare i servizi con nuove funzionalità che ne semplifichino l’utilizzo. Durante l’elaborazione del contenuto, Microsoft eseguirà una procedura necessaria a garantire la riservatezza dei dati dell’utente.

Beh mi fa piacere sapere che Microsoft analizzerà il contenuto dei miei file per la mia sicurezza (non si sa mai che in un file che ho caricato ci sia una bomba o un batterio killer nocivo per la mia salute.
Ovviamente sono sicuro che clausole simili siano presenti in tutti i servizi in line (Google Drive, Dropbox, ecc), però è sempre piacevole sapere che le grandi Internet Company si occupino della nostra sicurezza personale.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/microsoft-service-agreement/

Facciamo un salto nel passato ed evolviamoci a 3-tier

Giusto per capirci, l’architettura a 3 livelli o “3-tier architecture” non è proprio un paradigma dell’ultima ora. Possiamo dire che si è affermata sul finire del XX° millennio e nei primi anni 2000 con la grandissima diffusione di internet (e quindi di applicazioni di rete con accesso ad un database) e con l’affermarsi del paradigma di programmazione OOP ovvero Object Oriented Programming. Grazie soprattutto all’espansione continua e inarrestabile del linguaggio Java e del pattern MVC (Model View Controller) tutto è stato separato in 3 livelli diversi, ciascuno con la propria specificità.

In particolare, come si può vedere dai file allegati, già nella versione 5 e 6 del JBuilder (epico IDE della Borland per lo sviluppo di applicazioni Java) si parla di architetture a 3 livelli e sono citate tecnologie e “best practice” per programmare architetture in formato “3-tier”.  Se consideriamo che il JBuilder 5 e 6 risalgono all’anno 2001 direi che è facile capire come questa architettura sia tutt’altro che recente.

Lo schema dell’architettura è tratto dal sito https://security.stackexchange.com ed è stata rilasciata con copyleft e quindi riutilizzabile.

Permalink link a questo articolo: http://www.andrea.rustichelli.name/facciamo-un-salto-nel-passato-ed-evolviamoci-a-3-tier/