martedì 13 aprile 2021

IBM CodeEngine: come una tecnologia particolarmente acuta può modificare il modo di lavorare

Nell'informatica (e non solo) le cose si possono dividere in 2 categorie:
-le cose che possono essere fatte con un tuo stile personale
-le cose che invece devono essere fatte necessariamente sempre allo stesso modo.


Nella prima categoria ricadono sicuramente tutte le attività relative alla disciplina della programmazione: dall'ideazione all'analisi funzionale, dal coding alle strategie di test.
Nella seconda ricadono le modalità di compilazione, la costruzione di una build, il delivery in produzione di un sistema software, il funzionamento dell'infrastruttura e cose simili.

Ho la percezione che le discipline ed attività ricadenti nella prima categoria siano più divertenti e significative di quelle della seconda categoria.
Amplifica questa percezione un pensiero di Robert M. Pirsig, che condivido totalmente:
"Qualsiasi lavoro tu faccia, se trasformi in arte ciò che stai facendo, con ogni probabilità scoprirai di essere divenuto per gli altri una persona interessante e non un oggetto."

Ovviamente un lavoro meccanicistico che deve per forza essere fatto in un modo specifico, come il deploy di un'immagine docker in un orchestratore, non lascia certamente spazio all'inventiva, allo stile personale e probabilmente offre poca soddisfazione. E non può essere trasformato in arte.

Come nella guida di un'automobile: ciascuno ha un suo stile di guida, ma il modo in cui premi il pedale della frizione ha poco a che fare con uno tuo stile o soddisfazione personale e se non lo fai esattamente nell'unico modo giusto fai dei danni.
Che soddisfazione si prova ad azionare i tergicristalli quando inizia a piovere? Non è meglio che sia l'automobile stessa ad attivarli? Ed i fari, non è meglio che si accendano automaticamente al calare della sera, piuttosto che a doverli accendere manualmente, rischiando anche di dimenticare di farlo?
E se ogni volta che smetti di usare l'automobile devi tirare il freno a mano, non sarebbe tanto meglio che lo facesse l'automobile?
Oggi le automobili fanno automaticamente queste cose, lasciandoci liberi di pensare a guidare (almeno per ora).

Allo stesso modo se una tecnologia, come quella dei container&microservizi, è così conveniente e porta molti benefici, non possiamo permettere che sia inibita o rallentata da ostacoli procedurali, complessità tecniche o fattori umani. 


Le cose appartenenti al secondo gruppo (quelle da fare sempre allo stesso modo) devono essere automatizzate perché portano poca soddisfazione alla persona (talvolta sono attività deprimenti) e sono spesso fattori di inibizione o, come si dice spesso, lock-in.

Hai del codice sorgente scritto magistralmente e vuoi farlo eseguire come applicazione web in Internet, ma non hai né skill né voglia per trasformarlo in un'immagine docker, di attrezzare il tuo orchestratore, di utilizzare HELM chart, avviare il deploy ecc?


Le alternative sono queste:
-il tuo codice resta li, inutilizzabile
-paghi qualcuno che faccia tutte queste cose per te
-spendi mesi di studio per essere in grado un giorno di gestire autonomamente tutto il processo
-usi la moderna tecnologia di automazione!

IBM con CodeEngine offre proprio la quarta alternativa.

Gli dici dove si trova il tuo sorgente, fai pochi click di mouse, viene creata la tua web app in cloud nel giro di un minuto. Sei felice!
Se poi hai già un'immagine docker del tuo software puoi semplicemente metterla in funzione in cloud sempre con pochi click di mouse e pochi secondi di attesa.
Non c'è nessun altro skill necessario oltre a quello della pura programmazione (che è l'attività dove andiamo a creare valore).

Inoltre, perché continuare a pagare un runtime in esecuzione in cloud se per qualche tempo (minuti, ore, nottate per esempio) nessuno sta utilizzando quell'applicazione?

IBM CodeEngine può fermare automaticamente il tuo runtime, in assenza di input, senza mantenerlo in idle, azzerandone i costi di consumo.  Esso verrà avviato alla prima richiesta di utilizzo.
Il risparmio energetico derivante da questa prassi è un ulteriore effetto collaterale benefico per il Pianeta.

IBM CodeEngine è una tecnologia di IBM Cloud, utilizzabile dall'url:

https://cloud.ibm.com/codeengine/overview

 

 



martedì 17 aprile 2018

IBM Cloud Platform come laboratorio per scuole ed università di informatica

Oggi voglio mettere a punto delle riflessioni sul tema della formazione scolastica ed universitaria ed indicare una possibile soluzione al problema delle esercitazioni di laboratorio e a quello della amplificazione degli skill del futuro informatico.

Le università (e le scuole) che insegnano le discipline dell'informatica, hanno sempre l'esigenza di utilizzare strumenti e laboratori affinché gli studenti possano esercitarsi e apprendere al meglio le varie materie.
Una volta si ottemperava a questa esigenza recandosi (e spesso facendo la fila) nei laboratori appositamente approntati, ora sempre di più le esercitazioni si effettuano su notebook personali o comunque su sistemi di informatica individuale opportunamente connessi all'IT dell'università oppure in autonomia.

Stando così le cose sembrerebbe che la situazione sia sufficientemente stabilizzata e adeguata alle esigenze degli studenti.

Questo approccio però implica l'installazione di strumenti sulle singole macchine con vari problemi occasionali e perdita di tempo, non sempre incoraggia o supporta il lavoro di team e sicuramente offre un'esperienza di apprendimento distante dalla realtà tecnologica che sarà quella da utilizzare nel mondo industriale e lavorativo.

La mia idea è quella di supportare i vari esami e la varie materie che si vanno studiando tramite l'utilizzo della piattaforma IBM Cloud.

Vediamo quali materie ed esami possono trarre supporto e facilitazione dall'utilizzo della nostra piattaforma.

1) Materie di Programmazione

tutti gli esami che trattano il tema della programmazione a qualsiasi livello trovano in IBM Cloud un mezzo fantastico di lavoro.
Sono supportati i vari linguaggi presenti nel catalogo (Java, Go, NodeJS, Python, Ruby, Asp.net ecc ecc)
Troviamo qui la maggior parte dei runtimes:
https://console.bluemix.net/catalog/?category=cf-apps

Questa lista è espandibile con qualsiasi linguaggio si voglia, mediante la costruzione di un BuildPack.
(per esempio Clojure per gli amanti del LISP e della programmazione funzionale) 

Inoltre sono disponibili NodeRED, Spark, R, SQL ecc in altri servizi del catalogo.
In questo modo si possono realizzare sistemi di front-end e back-end di qualsiasi tipo.

2) Materie inerenti Sistemi operativi ed architetture software

Come sappiamo IBM Cloud offre alcune modalità di esecuzione del software:
  • Macchine virtuali
  • Containers
  • Runtimes CloudFoundry
  • Function serverless
con queste modalità si possono insegnare nel migliore dei modi le architetture software che sono richieste dalle aziende per la realizzazione di applicazioni in cloud oppure on premise, seguendo la tecnica dei microservizi. Questa è un'altra buona cosa da imparare per trovare subito lavoro!! :)

Allo stesso modo, la possibilità di apprendere tutti i segreti dei container Docker e delle inevitabili esigenze di orchestrazione con Kubernetes fanno di IBM Cloud lo strumento ideale di esercitazione e di reperimento di informazioni e tutorial.
Inoltre strumenti come il Secure Gateway sono molto utili per spiegare problemi e soluzioni di integrazione tra sistemi Cloud ed onPremise con tecniche di tunneling e VPN.
Anche il tema della API economy è affrontabile serenamente tramite l'utilizzo di API Connect per comprendere come creare e gestire le API per un utilizzo reale.

3) Materie di ingegneria del software
La possibilità di utilizzare con un click di mouse un'intera Toolchain (includente per esempio un Source Control Management, un defect tracking e delle procedure di build e deploy personalizzabili) per ciascuna applicazione che si stia costruendo, offre agli studenti ed al docente una potenzialità ed una amplificazione delle conoscenze trattate durante ai corsi davvero eccellente.
Essendo il codice sorgente depositato nel repository in cloud, sarà possibile impostare qualsiasi lavoro di team il docente o gli studenti riterranno utile, con studenti dello steso corso ma anche di università remote a tutto vantaggio della formazione della mentalità di team, che è l'unica possibile per chi fa software in un ambito industriale.

A questo riguardo chi fosse interessato potrà richiedermi delle informazioni relative ad un esperimento di didattica distribuita che abbiamo realizzato intorno al 2010 con l'università di Napoli Federico II con il  progetto ETC (Enforcing Team Collaboration with IBM Rational). Producemmo alcuni articoli per conferenze italiane ed internazionali, per esempio ISBN-978889043881.
Otto anni fa non esisteva Bluemix o IBM Cloud ma già il problema di dotare gli studenti di strumenti di cooperazione per il migliore apprendimento dell'informatica era molto sentito. Ora con IBM Cloud il gioco è alla portata di tutti, per tutte le università del mondo!

4) Materie inerenti l'Intelligenza artificiale applicata e Cognitive

Non so se esistano ovunque queste tipologie di esami (... sono assolutamente necessari!!)... però con IBM Cloud è possibile aggiungere alle proprie applicazioni tutta una serie di funzionalità intelligenti:
  • una chat robotica istruita su un dominio di conoscenza, 
  • funzioni di comprensione e discernimento di immagini
  • trattamento di traduzioni in linguaggio naturale
  • trascrizione vocale da varie lingue ed il suo complementare
  • comprensione di testi scritti in linguaggio naturale,
  • sentiment analysis
  • rilevamento dell'umore o dei valori emozionali presenti in un testo
  • Machine learning & Deep learning
 e molti altri.

La maggior parte di questi approcci è programmato con una tecnologia molto differente dalla programmazione usuale, quindi sono necessari skill differenti, come l'istruttore di chat, l'ideatore di reti neurali o l'annotatore di documenti, per esempio

Molte di queste funzionalità sono raggiungibili tramite questa pagina:

https://console.bluemix.net/catalog/?category=watson

La conoscenza anche non troppo approfondita di queste tecnologie, dà all'informatico una incredibile marcia in più per competere nel mercato del lavoro e per ideare nuove applicazioni

5) Materie sull'Internet of Things
IBM Cloud offre una dotazione completa di strumenti per la gestione di dati provenienti da sensori tramite la IoT Platform e la possibilità di realizzare in modo estremamente facilitato anche sistemi di controllo complessi con l'utilizzo di NodeRED.


 6) Statistica e Ricerca Operativa applicate
I vari strumenti di Analytics ed intelligenza artificiale applicata ai dati (tramite Watson Studio) offrono un ambiente ideale per sperimentare algoritmi statistici e di Ricerca Operativa per la soluzione di problemi complessi. Finalmente il metodo del Simplesso potrà essere utilizzato in pochi secondi per risolvere problemi di ottimizzazione reali con centinaia di migliaia di vincoli senza dover installare particolari software.
Sono supportati i notebook Jupiter e quindi i linguaggi R, Spark, Python ed altri.

7) Materie inerenti le BASI DATI e la Data Science
Il catalogo relativo al trattamento della persistenza del dato è un vera apoteosi, con DB relazionali SQL e non SQL, sono presenti vari approcci e possibilità di utilizzo. Il Cloud Object Storage inoltre rappresenta una sorta di File system in cloud con modalità di memorizzazione sicura al top delle prestazioni.
https://console.bluemix.net/catalog/?category=data



Watson Studio è lo strumento dove formare ed approfondire tutti gli skill del Data Scientist,  Con esso la scrittura ed esecuzione di Notebook è estremamente facilitata, con la possibilità di utilizzare  vari linguaggi tra cui SQL.
Con esso è anche possibile afferire ad una serie infinita di data-set pubblici, eccezionali per qualsiasi tipo di esercitazione.

8) Materie relative alla SICUREZZA
Servizi di Single Sign On, Secure Gateway, AppID, IoT Platform ecc, offrono molti spunti operativi per gli esami che trattano la sicurezza di applicazioni in cloud o di architetture ibride.

Potrei continuare citando la disponibilità della BlockChain, di servizi per Mobile e altre materie, tra cui tra poco il Quantistic computing.

Ovviamente IBM Cloud è costruito per la realizzazione in produzione di sistemi software industriali di qualsivoglia complessità e proprio per la sua natura è ideale per l'utilizzo nelle università per amplificare e facilitare l'apprendimento delle varie materie, con una impronta rivolta verso il business e verso l'industria.

Ricordo che IBM Cloud Platform è disponibile per la didattica universitaria (a docenti e studenti) in modo completamente gratuito, tramite l'Academic Initiative di IBM.









lunedì 28 agosto 2017

Un giro di OpenWhisk per tutti - Parte 1

Il serverless computing è un modo di far girare del software davvero interessante.

Tutorial su OpenWhisk in Bluemix
Livello: beginners
Tempo di esecuzione: < 20 minuti

>>>NOTA DI SETTEMBRE 2017: ora OpenWhisk si chiama Function, quindi eseguendo gli step proposti, tenetene conto. <<<


Uno dei problemi che i gestori di sistemi software devono affrontare è quello della determinazione del Total Cost of Ownership (TCO) di un sistema, cioè quanto viene a costare in modo omnicomprensivo l'avere quel sistema in esercizio.
Per i sistemi che girano su macchine presso i datacenter locali, il costo è un miscuglio di elementi: hardware, energia elettrica, presidio, manutenzione, affitto o gestione del locale, stipendi del personale ecc.
Inoltre c'è l'obsolescenza e l'ammortamento degli investimenti.



Il serverless computing invece è una modalità con cui una buona parte di un sistema software, in particolare quelle parti del sistema che vengono eseguite all'accadere di una certa condizione o evento, non implica nessun costo quando il software non è eseguito e quando invece esso lo è, il costo è ben determinato e collegato ai millisecondi di esecuzione.
Essendo questa modalità di esecuzione ottenibile in Cloud sulla piattaforma Bluemix, evidentemente non ci saranno costi aggiuntivi di ammortamento, energia elettrica, hardware ecc. ed il TCO diviene non solo prevedibile e misurabile, ma direttamente correlato con numero di istruzioni software che il sistema esegue.
Cioè il costo del sistema viene ad essere una componente fissa del business che quel software sta instrumentando. Ad esempio, se oggi col mio sistema che gestisce il mio shop on-line, per 10 vendite ho un costo x,  domani facendo 100 vendite, il costo sarà 10x.




In IBM il serverless computing su Bluemix si chiama OpenWhisk e il software in esso allocato segue i concetti di Action, di Trigger e di Sequenza
In questo tutorial voglio mostrare in modo molto semplice come iniziare a scrivere delle action OpenWhisk affinché si capisca meglio questo eccellente meccanismo per costruire architetture complesse a piacere, totalmente robuste, ma eccezionalmente poco costose.

Step 1) Accesso a OpenWhisk

Iniziamo con l'aprire il nostro account Bluemix, selezioniamo lo Space che preferiamo e clicchiamo il menù con le tre lineette in alto a sinistra, selezionaniamo quindi OpenWhisk:







Comparirà la pagina di Overview che consiglio di leggere, clicchiamo il pulsante StartCreating:


Step 2) Creazione Action

Nella pagina successiva clicchiamo su Create Action.
Si apre una pagina di dettaglio dove inseriremo il nome della nostra Action selezioneremo il linguaggio in cui vogliamo scrivere il sorgente, scelto tra Node.JS, Python3 e Swift.
Io ho scelto il nome salutami e come linguaggio Node.js:

clicchiamo il pulsante Create e arriviamo a scrivere il codice:

 Nella schermata 'Code' scrivere il seguente codice (o altro a vostra scelta):

/**
 * Hello world as an OpenWhisk action.
 */
function main(params) {
    var name = params.name || 'Mondo';
    return {payload:  'Ciao, ' + name + '!'};
}


A questo punto siamo pronti a salvare e ad eseguire questa prima Action cliccando in alto a destra Salva e Invoca.

Vediamo un basso nella pagina il risultato:
{
  "payload": "Ciao, Mondo!"
}
 
Ragioniamo un attimo su cosa abbiamo fatto: abbiamo preso un pezzo di codice 
sorgente, vi abbiamo applicato un nome e senza nessuna compilazione o deploy evidente 
ne abbiamo invocato l'esecuzione. 
In pratica ogniqualvolta quel codice viene invocato, esso viene installato ed eseguito. Robusto ed efficace!
Poiché abbiamo scritto un programma con un parametro proviamo ad instanziare il parametro 
ed eseguiamo ancora una volta la nostra action.
Clicchiamo su Change Action Input
e scriviamo questo statement, magari inserendo il vostro nome:
 
{
    "name" : "Ferdinando"
}







Clicchiamo Apply e poi invochiamo di nuovo l'action cliccando Invoke in alto a destra.
Vediamo che effettivamente l'action fornisce un risultato differente.
 



Ora questa Action può essere invocata anche da programmi esterni usando l'URI impostata
 automaticamente al momento della creazione.

Step 3) Monitoraggio esecuzioni

Ora vediamo come monitorare le chiamate alla nostra action.
Clicchiamo in alto a destra il pulsante Open in Develop View
Nel menù di sinistra clicchiamo Monitoring.
Si apre una schermata dove possiamo vedere quante volte abbiamo invocato la nostra Action ed altri indicatori:



Per il momento mi fermo qui, ma prossimamente vedremo come generalizzare l'utilizzo di Actions OpenWhisk utilizzandole anche dall'esterno di Bluemix, per monetizzare le nostre invenzioni software!