Skillbook Logo
foto profilo

Tutte le categorie


2.Intelligenza Artificiale: i modelli linguistici di grandi dimensioni (LLM)

Gino Visciano | Skill Factory - 11/10/2024 20:02:22 | in Home

Fino a qualche tempo fa le macchine potevano svolgere compiti solo se venivano programmate. Oggi il paradigma è cambiato, perché le macchine sono capaci di apprendere e risolvere i problemi da sole, per questo motivo parliamo di "Intelligenza Artificiale".

Le macchine si sono evolute al punto che riescono a comprendere il linguaggio naturale (NLP - Natural Language Processing). Per uno come me che ha iniziato a programmare le macchine negli anni '80 con l'Assembler, un linguaggio artificiale mnemonico, molto simile al linguaggio delle macchine, fatto di lunghe sequenze di numeri 1 e numeri 0,  vedere oggi macchine che eseguono comandi o rispondono a domande complesse elaborando il linguaggio naturale rappresenta un passo avanti notevole, impensabile fino a qualche anno fa. 

Il settore dell'IA che si occupa dell'apprendimento delle macchine si chiama "Machine Learning". Gli algoritmi di ML permettono alle macchine di apprende grandi quantità di dati, proprio come fanno gli uomini quando studiano.

Un delle aree più avanzata del Machine Learning è quella del Deep Learning,  che si occupa dell'apprendimento delle macchine attraverso algoritmi avanzati, anche detti algoritmi di apprendimento profondo, questi modelli sono così evoluti che si comportano come reti neurali artificiali

Il risultato dei dati raccolti durante la fase di addestramento di una macchina attraverso algoritmi di tipo Deep Learning sono gli LLM (Large Language Model) o modelli linguistici di grandi dimensioni.

Potete immaginare un LLM come un computer super intelligente che ha letto tantissimi libri, articoli e pagine web, grazie a questo è capace di comprendere il linguaggio naturale, rispondere alle domande, tradurre testi in molte linguescrivere testi e generare immagini, musica e video.

Attenti a non fare l'errore di credere che gli LLM siano dei database in cui si trovano domande e risposte frequenti, come avviene per le FAQ (Frequently Asked Questions); essi contengono solo le informazioni per creare le risposte, che vengono generate ogni volta dall'inferenza

COME FUNZIONA L'INFERENZA?
L'inferenza è il processo attraverso cui si utilizzano le conoscenze dell'LLM per rispondere alle domande o risolvere problemi. L'inferenza si basa su algoritmi e modelli matematici che permettono all'LLM di prendere decisioni più probabili.
 

L'LLM non dà mai una risposta con una certezza assoluta. Le sue risposte sono sempre basate sulla probabilità. Il modello sceglie sempre la sequenza di parole più probabile nel contesto dato. Più dati ha a disposizione, più accurate saranno le risposte, le previsioni o le soluzioni.

Le fasi del processo d'inferenza sono le seguenti:

1) Input: si fornisce all'LLM un input, sotto forma di domanda.
2) Elaborazione: l'LLM analizza l'input, cercando di capire il contesto, il significato e le intenzioni.
3) Generazione: l'LLM utilizza i modelli linguistici che ha appreso durante l'addestramento per generare una risposta o un testo che sia coerente con l'input e con le informazioni che ha a disposizione.


Gli LLM sono strumenti potenti, ma è importante evidenziarne subito i limiti:

- Non pensano come gli umani: gli LLM non capiscono veramente il significato delle parole, ma seguono delle regole che hanno imparato.
- Possono sbagliare: a volte gli LLM possono dare risposte sbagliate o senza senso, soprattutto se le domande sono molto complesse. In questo caso parliamo di allucinazioni.
- Dipendono dai dati: le risposte degli LLM vengono create  in base ai dati con cui sono stati addestrati; quindi, potrebbero evidenziare dei pregiudizi che dipendono dal tipo d'informazioni acquisite durante l'apprendimento. Naturalmente questo fenomeno, chiamato BIAS, può creare delle implicazioni etiche.


COME VENGONO ADDESTRATI GLI LLM
L'addestramento degli LLM è un processo complesso, che richiede tempo e una notevole quantità di risorse.

L'addestramento può essere: supervisionato, non supervisionato e per rinforzo.

Nel caso degli LLM:

Addestramento supervisionato: utilizziamo enormi quantità di testo, dove ogni frase o paragrafo è etichettato con un'informazione specifica (es: traduzione, risposta a una domanda). Il modello impara a generare testo simile a quello di esempio.
Addestramento non supervisionato: forniamo al modello grandi quantità di testo senza etichette. Il modello impara a prevedere la parola successiva in una frase, a completare frasi o a tradurre testi, identificando le relazioni tra le parole e le frasi.
Apprendimento per rinforzo: il modello viene addestrato a svolgere un compito specifico (es: giocare a scacchi) e riceve un feedback positivo o negativo in base ai risultati ottenuti.

Il primo passo per addestrare un LLM è la raccolta dei dati che vengono puliti, formattati e pre-elaborati per rimuovere errori, incoerenze e informazioni non pertinenti.

I testi raccolti da internet, libri, articoli, codice e altre fonti, vengono divisi in unità più piccole chiamate token, che possono essere parole, sotto-parole o caratteri speciali.
A ogni token viene assegnato a un numero unico, creando una rappresentazione numerica del testo.

Gli LLM si basano su algoritmi avanzati o modelli, che si comportano come reti neurali artificiali, in particolare quelle chiamate "trasformatori", che sono particolarmente adatte a gestire sequenze di dati come il testo.

La potenza di un modello dipende dal numero di parametri che ha disposizione. I parametri sono numeri che vengono prodotti durante la fase di addestramento. Maggiore è il numero di parametri di un modello, migliori sono le capacità di fare previsioni o prendere decisioni. Il ruolo dei parametri, che si possono immaginare come nodi della rete neurale artificiale,  è quello di mettere in relazione tra loro il maggior numero di neuroni in base ad una logica basata sul calcolo della probabilità della conoscenza.

Dovete immaginare i parametri o nodi come a delle piccole unità di calcolo (funzioni matematiche). Quando ricevono degli input (dati in ingresso), li elaborano secondo una certa funzione e producono un output (un risultato). Insieme, i nodi formano una rete complessa che permette all'algoritmo di apprendere e fare previsioni.

Tipi di nodi:

Nodi di input: sono i primi nodi della rete, quelli che ricevono i dati grezzi.
Nodi nascosti: si trovano negli strati intermedi della rete e svolgono la maggior parte del lavoro di elaborazione dei dati.
Nodi di output: sono gli ultimi nodi della rete, quelli che forniscono il risultato finale.

Come funzionano i nodi?

Ricezione degli input: ogni nodo riceve un segnale da altri nodi o dall'esterno della rete.
Calcolo: Il nodo applica una funzione matematica (funzione di attivazione) ai dati in ingresso, generando un risultato.
Trasmissione dell'output: il risultato viene trasmesso ai nodi successivi della rete.

L'organizzazione dei parametri di un modello, attraverso algoritmi di ottimizzazione, viene aggiornata continuamente in modo iterativo con l'obbiettivo di ridurre al minimo la differenza tra previsioni del modello e le risposte corrette. Per misura la differenza tra previsioni del modello e le risposte corrette, si usa una funzione matematica chiamata funzione di perdita.  

L'addestramento richiede un'enorme potenza di calcolo, spesso utilizzando cluster di GPU o TPU

Letteralmente, cluster, significa “computazione a grappolo”: un gruppo di computer collegati in rete tra loro che lavorano in parallelo utilizzando processori potentissimi e veloci specializzati nella gestione delle immagini come le GPU (Graphics Processing Unit) oppure le TPU (Tensor Processing Unit) unità di elaborazione progettate da Google specializzate nelle operazioni di Machine Learning. Sono ottimizzate per eseguire operazioni sui tensori: strutture dati multidimensionali fondamentali per le reti neurali artificiali.

Dopo l'addestramento iniziale, il modello può essere ulteriormente addestrato su dataset più piccoli e specifici per migliorare le sue prestazioni su compiti particolari, come la generazione di codice, la traduzione o la risposta a domande, questa operazione di chiama "Fine-tuning".

PRINCIPALI LLM A CONFRONTO

 Anno 

 Nome   LLM

 Parametri 

 Tipo rete   neurale

 Scopo   principale

 Licenza

 Azienda/Organizzazione 

2023

GPT-4

>100 miliardi

Transformer

Generazione di testo, comprensione, traduzione, ecc.

Proprietario

OpenAI

2023

PaLM 2

Varianti

Transformer

Generazione di testo, comprensione, traduzione, coding

Proprietario

Google AI

2023

LLaMA

7B - 65B

Transformer

Ricerca, creazione di contenuti

Non-commerciale

Meta AI

2022

T5

Varianti

Transformer

Molteplici compiti NLP

Open-source

Google AI

2020

GPT-3

175 miliardi

Transformer

Generazione di testo

Proprietario

OpenAI

2020

BART

Varianti

Transformer

Generazione di testo, riassunto, traduzione

Open-source

Facebook AI Research

2019

RoBERTa

Varianti

Transformer

Comprensione del linguaggio naturale

Open-source

Facebook AI Research

2018

BERT

340 milioni

Transformer

Comprensione del linguaggio naturale

Open-source

Google AI

 

COSA SONO I PROMPT?
I prompt sono lo strumento che ci permette di interagire con gli LLM e di sfruttarne al meglio le potenzialità. Sono il ponte tra le nostre richieste e la capacità dell'LLM di generare testi complessi e informativi. È come una chiave che ci permette di aprire le porte della creatività e dell'innovazione. Più siamo abili nel formulare i prompt, più saremo in grado di sfruttare tutto il potenziale di questi modelli linguistici.

La capacità di formulare prompt è così importante che in futuro, con la diffusione dell'Intelligenza Artificiale, la figura del creatore di prompt sarà sempre più richiesta. Il creatore di prompt non è semplicemente colui che fa domande, ma un vero e proprio ingegnere della comunicazione che, attraverso la formulazione di istruzioni precise e creative, è in grado di sfruttare al massimo le potenzialità degli LLM

il creatore di prompt è una figura che, oltre alle sue competenze linguistiche e creative, si avvale di una serie di strumenti e tecniche per ottimizzare il processo di creazione dei prompt e ottenere i migliori risultati possibili dagli LLM.

Approfondirò sicuramente l'argomento dei creatori di prompt in uno dei miei prossimi articoli, perché è un argomento molto interessante.


CONCLUSIONI

Gli LLM sono sistemi informatici, chiamati modelli, che attraverso algoritmi di apprendimento profondo si addestrano su enormi quantità di dati.

Le informazioni raccolte vengono organizzate in uno spazio vettoriale e collegate tra loro attraverso l'uso di parametri,  anche detti nodi, che utilizzano funzioni matematiche per creare una fitta rete di percorsi usati dall'inferenza per creare le risposte o le soluzioni più probabili alle domande o alle richieste formulate dai prompt

Dopo l'addestramento gli LLM, possono essere ulteriormente specializzati attraverso una fase di fine tuning, che prevede l'apprendimento di un dataset di dati più dettagliato. 

La qualità dei dati durante la fase di addestramento degli LLM è importante per evitare il problema dei pregiudizi o Bias. Un DATASET per essere di valore deve contenere una grande quantità di dati, sempre aggiornati velocemente, provenienti da fonti eterogenee e contesti differenti e le informazioni devono essere affidabiliutili e senza fake.

 

Gli LLM sono utilissimi nell'ambito scientifico, del lavoro, dell'educazione e dell'intrattenimento; i chatbot e assistenti virtuali sono solo la punta dell'iceberg.


Nel prossimo articolo vi parlerò di reti neurali artificiali, per capire che cosa sono e cosa ci permettono di fare.


1.Intelligenza Artificiale: se la conosci non la temi


- Abiti in Campania?
- Sei diplomato in ambito contabile, economico o amministrativo?
- Sei alla ricerca di un percorso di formazione gratuito perché 
vuoi acquisire competenze in amministrazione e contabilità, con un focus sulla piattaforma SAP?

Non perdere questa opportunità, il 4 novembre, presso la "Skill Factory"l'Academy delle professioni digitali, in collaborazione con Keytech - SAP S/4® Solution Operations, parte il corso PAR GOL 10778 finanziato dalla Regione Campania:

 

📚 𝗗𝗲𝘁𝘁𝗮𝗴𝗹𝗶 𝗱𝗲𝗹 𝗰𝗼𝗿𝘀𝗼:
210 ore di formazione online (teoria/laboratorio: dal lunedì al venerdì, dalle 9:30 alle 13:30 e dalle 14:30 alle 16:30)
110 ore di tirocinio in presenza presso l'azienda Keytech di Napoli (8 ore al giorno, dal lunedì al venerdì)

🎯 𝗥𝗲𝗾𝘂𝗶𝘀𝗶𝘁𝗶: Diploma o Laurea in Contabilità/Economia o Status di disoccupazione o inoccupazione

Al termine del corso, otterrai la 𝗾𝘂𝗮𝗹𝗶𝗳𝗶𝗰𝗮 𝗽𝗿𝗼𝗳𝗲𝘀𝘀𝗶𝗼𝗻𝗮𝗹𝗲 𝗘𝗤𝗙𝟱, riconosciuta a livello internazionale.

I posti sono limitati! Invia subito il tuo CV a recruiting@skillfactory.it o contattaci ai numeri:
- 3270870141
- 08118181361

Per maggiori dettagli sui corsi PAR GOL, visita il nostro sito: www.skillfactory.it

Share Button

1.Intelligenza Artificiale: se la conosci non la temi

Gino Visciano | Skill Factory - 23/09/2024 08:33:01 | in Home

La storia ci ha abituati alle rivoluzioni tecnologiche, ovvero quei cambiamenti che coinvolgono tutti modificando radicalmente le nostre abitudini e i nostri comportamenti, basta fare l'esempio del telefono, della radio, della TV, del personal computer, di Internet, dei cellulari e del cloud.

Oggi stiamo vivendo la rivoluzione dell'Intelligenza Artificiale; che sia tale si capisce dal fatto che ne parlano tutti e chi non la conosce la teme.

Come le rivoluzioni precedenti, anche questa era inevitabile; il progresso è scritto nel nostro DNA e non si può fermare!

Il progresso da sempre ci ha permesso di  aumentare le nostre capacità; attraverso la tecnologia muoviamo e alziamo masse enormi, ci spostiamo velocemente sulla terra, sull'acqua e nell'aria, fino a raggiungere lo spazio estremo, comunichiamo a distanza, osserviamo sia lo spazio infinito, sia i corpi infinitesimali, elaboriamo e memorizziamo enormi quantità di dati e oggi con l'Intelligenza Artificiale abbiamo aumentato anche le nostre capacità intellettuali, come ad esempio: l'apprendimento, la risoluzione di problemi, prendere decisioni, svolgere compiti, sintetizzare argomenti e creare testi, immagini e video.

Il precursore dell'idea d'Intelligenza Artificiale fu il matematico Alan Turing che, in un articolo del 1950, per la prima volta parlò di macchine intelligenti.

Nell'articolo Turing descriveva il modo per testare se una macchina era intelligente. Secondo il test una macchina (A) poteva essere considerata intelligente se il suo comportamento, osservato da un essere umano (C), fosse considerato indistinguibile da quello di una persona (B):

Il termine intelligenza artificiale (IA) è stato coniato per la prima volata nel 1955 da John McCarthy

Nel 1956, McCarthy e altri scienziati organizzarono la conferenza “Dartmouth Summer Research Project on Artificial Intelligence”; questo evento ha dato origine alla scienza dei dati (data since).

L'idea di macchina intelligente (IA) si è potuta concretizzare solo oggi grazie ai seguenti fattori:

1) quasi tutti i dati che produciamo sono in forma digitale;
2) attraverso il cloud riusciamo a memorizzare enormi quantità di dati;
3) grazie alle GPU (Graphics Processing Unit - Unità di Elaborazione Grafica), è aumentata la potenza di calcolo;
4) l'esperienza ci ha permesso di creare algoritmi capaci di imitare il comportamento dei neuroni.

L'Intelligenza Artificiale attuale è molto lontana da quello che si racconta nei romanzi o nei film di fantascienza e non è quello che vogliono farci credere alcuni divulgatori scientifici o esperti dell'argomento; quindi, per ora, non dobbiamo temerla, anzi, al contrario penso che sia estremamente utile per tutti.

Per comprendere il progresso e le sfide attuali nell'ambito dell'Intelligenza Artificiale, è importante comprendere la differenza tra: IA Debole IA Forte.

L'IA debole è progettata per eseguire compiti specifici e predefiniti, come:

- il riconoscimento del linguaggio naturale
- la classificazione delle immagini
- la previsione dei dati

- la generazione di testi, immagini e video

Un esempio di IA debole sono gli assistenti virtuali come Siri, Cortana o Alexa: essi possono rispondere alle domande degli utenti e compiere una serie di funzioni, ma non hanno nessuna consapevolezza di sé e non capiscono veramente ciò di cui si sta parlando.

Le macchine che riescono a fare queste cose, anche se sembrano “intelligenti”, non comprendono realmente quello che fanno e non hanno nessuna percezione del mondo o del contesto in cui stanno operando.

L'IA forte, anche conosciuta come Intelligenza Artificiale Generale (AGI - Artificial General Intelligence), rimane ancora largamente teorica e non esiste concretamente al momento. Essa dovrebbe essere in grado di eseguire qualsiasi compito intellettuale che un essere umano può fare e di avere una forma di autoconsapevolezza e comprensione del mondo.

Al momento l'IA forte resta ancora un obiettivo a lungo termine per la comunità scientifica.

Oggi gli strumenti di IA più evoluti sono gli LLM (Large Language Model -  Modello linguistico di grandi dimensioni), algoritmi molto avanzati capaci di riconoscere il linguaggio naturale (NLP - Natural Language Processing) e le immagini. 

Gli LLM vengono usati dai chatbot:

Chat: conversazione
Bot: robot (programma informatico)

oppure dagli assistenti AI come  Siri, Cortana o Alexa per rispondere alle domande poste dagli utenti che li usano. Questi programmi nonostante sembrano intelligenti, rientrano nell'ambito dell'intelligenza artificiale debole

Il termine, coniato nel 1994 da Michael Mauldin (il creatore del ChatBot Verbot), deriva da “chatterbot” e viene utilizzato per descrivere i programmi di conversazione.

Gli attuali chatbot, attraverso gli LLM, oltre a riconoscere il linguaggio naturale, riescono anche a comprendere il contenuto delle immagini e a generare testi, immagini e video di fantasia; per questo motivo parliamo anche di intelligenza artificiale generativa.

I modelli linguistici più avanzati, sono di tipo GPT (Generative Pretrained Transformer - Trasformatore Generativo Preaddestrato); utilizzano algoritmi di apprendimento profondo (Deep Learning), per generare risposte simili a quelle umane all'interno di un discorso.

I chatbot AI e gli assistenti AI più diffusi sono: ChatGPTZendeskGeminiCopilotClaudePerplexity AIJasper Chat.


 


Nel prossimo articolo approfondirò l'argomento degli LLM.


2.Intelligenza Artificiale: i modelli linguistici di grandi dimensioni (LLM)


- Abiti in Campania?
- Sei diplomato in ambito contabile, economico o amministrativo?
- Sei alla ricerca di un percorso di formazione gratuito perché 
vuoi acquisire competenze in amministrazione e contabilità, con un focus sulla piattaforma SAP?

Non perdere questa opportunità, il 4 novembre, presso la "Skill Factory", l'Academy delle professioni digitali, in collaborazione con Keytech - SAP S/4® Solution Operations, parte il corso PAR GOL 10778 finanziato dalla Regione Campania:

 

📚 𝗗𝗲𝘁𝘁𝗮𝗴𝗹𝗶 𝗱𝗲𝗹 𝗰𝗼𝗿𝘀𝗼:
- 210 ore di formazione online (teoria/laboratorio: dal lunedì al venerdì, dalle 9:30 alle 13:30 e dalle 14:30 alle 16:30)
- 110 ore di tirocinio in presenza presso l'azienda Keytech di Napoli (8 ore al giorno, dal lunedì al venerdì)

🎯 𝗥𝗲𝗾𝘂𝗶𝘀𝗶𝘁𝗶: Diploma o Laurea in Contabilità/Economia o Status di disoccupazione o inoccupazione

Al termine del corso, otterrai la 𝗾𝘂𝗮𝗹𝗶𝗳𝗶𝗰𝗮 𝗽𝗿𝗼𝗳𝗲𝘀𝘀𝗶𝗼𝗻𝗮𝗹𝗲 𝗘𝗤𝗙𝟱, riconosciuta a livello internazionale.

I posti sono limitati! Invia subito il tuo CV a recruiting@skillfactory.it o contattaci ai numeri:
- 3270870141
- 08118181361

Per maggiori dettagli sui corsi PAR GOL, visita il nostro sito: www.skillfactory.it

Share Button

Come progettare e sviluppare giochi per l'educazione e la formazione con Python: lezione 5

Mirko Onorato | Skill Factory - 23/09/2024 08:30:04 | in Tutorials

In questa lezione completiamo la prima esperienza di matematica di Hammer-XP, implementando tutti i livelli di gioco previsti:

1) Elimina dall'area di gioco i numeri pari;
2) Elimina dall'area di gioco 3 e i multipli di 3;
3) Elimina dall'area di gioco 7 e i numeri divisibili per 7;
4) Elimina dall'area di gioco i numeri primi.

I livelli sono stati progettati per ragazzi delle scuole elementari, che hanno un'età massima di 10 anni.

I quattro livelli sono stati implementati attraverso le funzioni seguenti:

1) def exp_01_01(block_list,sprite_list,game_exit,scheda);
2) def exp_01_02(block_list,sprite_list,game_exit,scheda);
3) def exp_01_03(block_list,sprite_list,game_exit,scheda);
4) def exp_01_04(block_list,sprite_list,game_exit,scheda).

Puoi consultare il codice delle funzioni, scaricando il programma Python nel file zip alla fine di questa lezione.

Il primo livello parte subito all'avvio del gioco, con la funzione:

def exp_01_01(block_list,sprite_list,game_exit,scheda).

L'avvio degli altri livelli viene gestito attraverso la variabile level_progressivo e la struttura condizionale seguente:

level_progressivo+=1
 if level_progressivo==2:
      exp_01_02(block_list,sprite_list,game_exit,scheda)
elif level_progressivo==3:
      exp_01_03(block_list,sprite_list,game_exit,scheda)
elif level_progressivo==4:
      exp_01_04(block_list,sprite_list,game_exit,scheda)

Per passare al livello seguente è stato aggiunto il pulsante "START NEXT LEVEL >>":

bloccoGoalNextLevel=Etichetta((201,55,184),300,40,500,164,'START NEXT LEVEL >>')

Quando Hammer tocca il pulsante START NEXT LEVEL >>", si passa al livello successivo.

Il suono per accedere al prossimo livello è stato creato con la funzione seguente:

def beep_next_level():
    frequenza=150
    durata=[200,75,100,125,350,500,700]
    for x in range(5):
        winsound.Beep(frequenza,durata[x])
        frequenza+=150
    winsound.Beep(frequenza,1000)

FASI DEL GIOCO
All'avvio, il gioco presenta subito il primo livello, dove bisogna eliminare tutti i numeri pari.
Il gioco finisce se termina il tempo a disposizione oppure gli errori (wrong) superano i successi (score).
Quando il gioco termina appare il pulsante "GAME OVER", come mostra l'immagine seguente:

Se il giocatore elimina dall'area di gioco tutti i numeri pari passa al livello successivo.

Il secondo livello prevede che il giocatore deve eliminare dall'area di gioco il 3 e i multipli di 3. Anche in questo caso il gioco finisce se termina il tempo a disposizione oppure gli errori (wrong) superano i successi (score)

Il terzo livello è simile al secondo, ma qui il giocatore deve eliminare dall'area di gioco il 7 e i numeri divisibili per 7.

Infine, il quarto livello è quello più difficile, perché il giocatore deve eliminare dall'area di gioco tutti i numeri primi; quindi, prima d'iniziare a giocare, è il caso di studiare bene l'argomento.

Se il giocatore, termina con successo anche l'ultimo livello, appare il pulsante "GOAL!!!"

Tutte le fasi del gioco vengono gestite con il codice Python seguente: 

            if not gameNextLevel:
                blocks_hit_list = pygame.sprite.spritecollide(hammer, block_list, True)
                t2=time.time()
                t_value=math.floor(t2-t1)
                for blocco in blocks_hit_list:
                    if blocco.hit:
                        score_value+=1
                    else:
                        wrong_value+=1
                if score_value==game_exit.score_value_exit and level_progressivo<4:
                    gameNextLevel=True
                    block_level.add(bloccoGoalNextLevel)
                    sprite_list.add(bloccoGoalNextLevel)
                    beep_next_level()
                elif score_value==game_exit.score_value_exit and level_progressivo==4:
                        gameOver=True
                        sprite_list.add(bloccoGoal)
                        beep_goal()
                elif wrong_value>score_value or t_value==game_exit.t_value_exit:
                        gameOver=True
                        sprite_list.add(bloccoGameOver)
                        beep_game_over()


COME ESEGUIRE IL GIOCO

Per eseguire il gioco HAMMER-XP dovete installare il framework Python sul vostro computer.

Per eseguire il download del setup per installare Python clicate qui oppure collegatevi al link seguente: https://www.python.org/downloads/.
Dopo il download del setup, eseguitelo per installare Python.

Attenzione, durante l'installazione è importante spuntare l'opzione "Add Python 3.X to PATH:



Dopo che avete impostato l'opzione, cliccate sul comando Install Now.

Per verificare se il framework Python è stato installato correttamente, dal prompt dei comandi del sistema operativo, eseguite il comando:

python --version

Se l'installazione è andata a buon fine viene visualizzata la versione di Python, come mostra l'immagine seguente:

Successivamente create una cartella "HAMMER-XP" e in questa cartella estraete il contenuto del file zip che contiene le risorse del gioco.

Per avviare il gioco dal prompt dei comadi, entrate nella cartella hammer-xp, ed eseguite il comando:

python hammer_experience_matematica_001_V02.py


Nella prossima lezione implementeremo l'esperienza d'italiano per imparare a riconoscere i sostantivi, gli aggettivi, i verbi e gli avverbi.


Per il download delle risorse di questa lezione cliccate qui.


< LEZIONE PRECEDENTE  VAI ALLA PRIMA LEZIONE


T U T O R I A L S    S U G G E R I T I


PER IMPARARE A PROGRAMMARE, SEGUI LE PLAYLIST SUL NOSTRO CANALE YOUTUBE "SKILL FACTORY CHANNEL": clicca qui per accedere alle playlist


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

... collegati al nostro sito: www.skillfactory.it

 

Share Button

6. Competenze per programmare: date, ore e fusi orari

Gino Visciano | Skill Factory - 16/08/2024 11:59:36 | in Tutorials

Il tempo sulla Terra non è assoluto, ma relativo, quindi la sincronizzazione delle date e delle ore, nell'era della globalizzazione, può diventare una cosa complicata se non sono chiari alcuni concetti.

Il primo concetto fondamentale per gestire le date è il formato della data, perché ogni nazione o sistema informatico può adottare delle regole diverse.

I formati data più utilizzati dai sistemi informatici sono i seguenti:

1) MM/dd/yyyy;
2) yyyy/MM/dd;
3) dd/MM/yyyy.

dd=giorno
MM=mese
yyyy=anno
 
A volte, al posto del separatore slash "/", viene anche utilizzato il segno meno "-":
 
1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.
 
Il secondo formato: yyyy/MM/dd è utile per ordinare in modo crescente le date di tipo stringa.

Esempio 1

Inserire una data di tipo stringa, nel formato dd/MM/yyyy.
Estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Utilizzare il giorno, il mese e l'anno estratti per creare una data di tipo oggetto.
Dalla data di tipo oggetto estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Infine, utilizzando la data di tipo oggetto stampare le date nei formati seguenti:

1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.

Soluzione Python:
 
Soluzione JavaScript (node.js):
 
Prima di eseguire il programma assicurati di aver installato i moduli:
1) readline-sync
2) moment
 
Per installare i due moduli, devi eseguire i comanadi seguenti nella directory in cui è stato salvato il file gestione_date.js:
 
npm install readline-sync
npm install moment

 

Esempio 2

Creare un vettore con 5 date di tipo stringa.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

Esempio 3

Creare un vettore con 5 oggetti di tipo data.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Un altro concetto importante è quello di fuso orario, perché permette di sincronizzare l'ora degli eventi tra località molto distanti tra loro. L'ora locale di una località cambia in base alla longitudine in cui si trova, per questo motivo il tempo sulla Terra non è assoluto, ma è relativo; attraverso i fusi è possibile conoscere la differenza di orario che esiste tra due località diverse.  

Per chiarire i due concetti, facciamo un semplice esempio: immaginate che un amico di New York vi dà un appuntamento telefonico per il 10/05/2024 alle ore 11:00.

Per essere sicuri di quando riceverete la telefonata del vostro amico, dovete chiarire tre cose:

1) il formato della data indicata;
2) la città a cui fa riferimento l'ora indicata;
3) se è in vigore l'ora legale

In questo caso il problema dell'ora legale non c'è perché sia in America che in Italia va in vigore a marzo e termina a fine ottobre; quindi, l'ora legale non avrà nessun effetto sul fuso orario.

Allora vediamo quali sono gli altri casi possibili:

A.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di Roma

Questo è il caso più semplice, perché la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 11:00.

B.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di New York

In questo caso c'è il problema del fuso orario tra Roma e New York. La longitudine (meridiano) di New York è diversa da quella della città di Roma, quindi, l'ora di New York è di 6 ore indietro rispetto a quella di Roma.

A causa del fuso orario, la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 17:00.

C.  Data espressa in formato  USA (MM/dd/yyyy) e ora di Roma

Il formato USA prevede che nella data venga indicato prima il mese e poi il giorno; in questo caso la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 11:00.
 
D.  Data espressa in formato  USA (MM/dd/yyyy) e ora di New York
 

In questo caso considerando il formato USA della data e il fuso orario di New York, otteniamo che la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 17:00.

sistemi informatici, per allineare le date e le ore tra località del mondo con longitudine diversa, usano le informazioni di Time zone, da cui si può ottenere il fuso orario e se è in vigore o meno l'ora legale.


Esempio 4

Stampare l'ora corrente di Roma.
Estrarre ore, minuti e secondi e stamparli.
Stampare il fuso orario con Greenwich.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Esempio 5

Stampare la data e l'ora corrente e le informazioni di Time zone di Roma e di New York.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

COME MISURIAMO IL TEMPO SULLA TERRA
La misura del tempo sulla Terra è una questione di giri ... Per questo motivo il tempo si misura in sessagesimi (sistema di misura in base 60).

Un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360°, intorno al proprio asse.

La Terra ruota in senso antiorario, da ovest (occidente/ponente) verso est (oriente/levante); per ogni ora che passa ruota di 15°, per questo motivo un giorno è composto da circa 24 ore, come mostra la formula seguente:

360° / 15° = 24 ore.

In base al sistema sessagesimale, le unità sono rappresentate dai secondi (simbolo ''). Ogni sessanta secondi s'incrementano di 1 i minuti (simbolo '). Ogni sessanta minuti s'incrementano di 1 le ore.

Per questo motivo il tempo sulla Terra si indica nel formato:

ore:minuti:secondi

oppure

hh:mm:ss  

1 ora  (rotazione Terra di 15°) = 60 minuti (60')

1 minuto (rotazione Terra di 0,25°) = 60 secondi (60'')

Quindi

1 ora = 60' = 3600''

1 giorno = 24 ore = 1440' = 86400''

Anche le lancette dell'orologio analogico, con cui misuriamo il tempo, girano.

Un orologio non è altro che un contatore sessagesimale

Per ogni giro completo (360°) della Terra intono al proprio asse, che si completa in circa 24 ore:

1) la lancetta dei secondi ruota intorno al quadrate dell'orologio per 1440 volte. 
2) la lancetta dei minuti ruota intorno al quadrate dell'orologio per 24 volte;
1) la lancetta delle ore ruota intorno al quadrate dell'orologio per 2 volte;


Esempio 6

Visualizzare le seguenti informazioni sulla rotazione della Terra:
1) Data e ora di Greenwich con fuso orario
2) Data e ora di Roma con fuso orario
3) Differenza di fuso orario tra Roma e Greenwich
4) Percentuale di rotazione della Terra prima di completare un giro
5) Percentuale di rotazione della Terra per completare un giro

 

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


LATITUDINE E LONGITUDINE
La posizione di qualunque località o punti sulla Terra si può indicare attraverso due coordinate chiamate: Latitudine e Longitudine.

Ad esempio, la città di Roma ha le seguenti coordinate:

Latitudine: 41°53′57.12″ nord
Longitudine: 12°32′42.00″ est.

Mentre la città di Brasilia ha le seguenti coordinate:

Latitudine: 15°46′46″ sud
Longitudine: 47°55′46″ ovest

Potete immaginare la latitudine come il cerchio perpendicolare all'asse terrestre e parallelo all'equatore che passa per una località specifica. Per convenzione la latitudine è Nord se il cerchio si trova nella parte tra l'equatore e il polo Nord (emisfero Boreale), altrimenti è Sud, se il cerchio si trova tra l'equatore e il polo Sud (emisfero Australe).

I cerchi che indicano le latitudini da 0° a 90°, distanziati di 1° l'uno dall'altro, sono detti paralleli. Si contano 90 paralleli a Nord e 90 a Sud

il parallelo 0 coincide con l'equatore, quindi in totale i paralleli sono 181. Sulle mappe si indica un parallelo solo ogni 15°, quindi ci sono 12 paralleli a Nord e 12 a Sud, oltre l'equatore naturalmente.

Allo stesso modo, potete immaginare la longitudine come un semicerchio parallelo all'asse terrestre e perpendicolare all'equatore che unisce il polo Nord con il polo Sud e passa per una località specifica. 

I semicerchi che indicano le longitudini, distanziati di 1° l'uno dall'altro, sono detti meridiani. I meridiani sono 360; quello più importante è il meridiano 0

Verso la fine del 1800, i Paesi più importanti del mondo, decisero che il meridiano 0 dovesse essere quello che passava per  Greenwich, un distretto di Londra in Inghilterra, sulle sponde del fiume Tamigi. Per convenzione le località a destra del meridiano 0 hanno longitudine Est, quelle a sinistra hanno longitudine Ovest

Sulle mappe si indica un meridiano ogni 15°, quindi ci sono solo 24 meridiani identificati con i numeri da 0 a 23. Questi meridiani sono anche detti meridiani orari, perché a causa della rotazione della Terra, ciascun meridiano, partendo da quello 0 a quello 23, incontra il Sole alle ore 12:00:00, dopo ogni ora. 

I meridiani orari permettono di definire i fusi orari, fondamentali per stabilire l'ora locale di ogni località del mondo.


Esempio 7

Inserire la latitudine e la longitudine di una località e indicare tra quali paralleli e quali meridiani si trova.

Soluzione Python:

 
Soluzione JavaScript (node.js):

CHE COS'E' IL FUSO ORARIO
Quando parliamo di misura del tempo sulla Terra, dobbiamo ricordare che non sono importanti i paralleli (cerchi paralleli all'equatore, con latitudine da 1 a 90 gradi dell'emisfero Nord e Sud), ma sono fondamentali i meridiani (i 360 semicerchi che unisco, il polo Nord con il polo Sud, a 1° di longitudine l'uno dall'altro), in particolare quelli orari (i 24 meridiani a 15° di longitudine l'uno dall'altro), perché permettono di determinare i fusi orari che servono per calcolare l'ora locale di qualunque località del mondo.

Sappiamo che un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360° intorno al proprio asse. Il problema è che le località del mondo si trovano in posizioni diverse; quindi, per misurare il tempo sulla Terra è importante scegliere una località specifica, da usare come riferimento.

Per convenzione si è deciso di utilizzare come località di riferimento per misurare il tempo sulla Terra il distretto di Greenwich, che corrisponde al meridiano zero o longitudine zero. Il tempo s'inizia a contare quando questa località incontra il Sole (punto fisso della volta celeste) alle ore 12:00:00. 

Ogni volta che Greenwich compie un giro completo, sul nostro Pianeta sarà trascorso un giorno. Quindi l'ora locale di Greenwich, detta anche Greenwich Mean Time, abbreviato in GMT, è l'ora di riferimento da cui partire per calcolare le ore locali delle altre località del mondo, utilizzando i fusi orari.

Per ottenere l'ora locale di qualunque località del mondo basta usare la formula seguente:

OL = GMT + FO

OL=ora locale della località in esame
GMT=Greenwich Mean Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).

Naturalmente il fuso orario di Greenwich, che coincide con il meridiano 0, è uguale a zero.

Il valore del fuso orario aumenta di un'ora (+) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Est del meridiano 0. Altrimenti diminuisce di un'ora (-) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Ovest del meridiano 0, come mostra l'immagine seguente:

Ad esempio, quando a Greenwich sono le 12:00 a Roma sono le 13:00, perché Roma si trova sul primo meridiano orario ad Est, di Greenwich, dove il fuso orario è uguale a +1. Anche a Parigi sono le 13:00, perché Roma e Parigi, hanno latitudini diverse, ma si trovano sulla stessa longitudine, quindi si trovano sullo stesso meridiano orario e il fuso orario è uguale.

L'Islanda, si trova sul primo meridiano orario ad Ovest di Greenwich; in questo caso il valore del fuso orario è uguale a -1. Quindi quando a Greenwich sono le 12:00, in Islanda sono le 11:00

La differenza tra i fusi orari di due località diverse, ci permette di conoscere le ore di differenza che ci sono tra le loro ore locali. Ad esempio, il fuso orario di Roma è +1, mentre quello di New York è -5. Questo significa che tra l'ora locale di Roma e quella di New York c'è una differenza di:

-5 - (+1) = -6 ore.

Quindi, quando a Roma sono le 12:00, a New York sono le 6:00 del mattino. 


DIFFERENZA TRA GMT E UTC
Il Tempo medio di Greenwich (GMT), come abbiamo visto è il tempo a cui bisogna far riferimento per calcolare l'ora locale di qualunque località del mondo utilizzando i fusi orari. Il GMT non è preciso perhcé è basato su fenomeni celesti e con il tempo deve essere corretto.

Oggi il GMT è stato sostituito dal Tempo Coordinato Universale (Coordinated Universal Time - UTC), conosciuto anche come tempo civile. Il nuovo nome è stato coniato per non dover menzionare una specifica località in uno standard internazionale. L'UTC si basa su misurazioni condotte da orologi atomici, quindi è molto più preciso del GMT.

A causa delle oscillazioni nella velocità di rotazione della Terra (il fenomeno è dovuto soprattutto alla gravità degli altri pianeti), il GMT ritarda costantemente rispetto al "tempo atomico" UTC. Il ritardo è mantenuto entro 0,9 secondi, aggiungendo o togliendo un  secondo ad UTC alla fine del mese quando necessario, convenzionalmente il 30 giugno o il 31 dicembre. Il secondo extra, detto intercalare è determinato dall'International Earth Rotation and Reference Systems Service (IERS), basandosi sulle loro misurazioni della rotazione terrestre.

L'UTC è un problema per i sistemi informatici che memorizzano le date come il numero di secondi passati rispetto ad una data antecedente, come ad esempio il sistema operativo  Unix, che memorizza la data come il numero di secondi passati dal 1° gennaio 1970. In questi casi diventa impossibile determinare la rappresentazione di una data futura, a causa dei secondi che potrebbero essere stati inseriti o sottratti nel frattempo.

L'UTC è il tempo usato per molti standard Internet e nel World Wide Web. In particolare, il Network Time Protocol è progettato come un modo per distribuire dinamicamente il tempo UTC attraverso Internet.

Il fuso orario UTC è a volte indicato dalla lettera 'Z', per scopi militari, meteorologici, di navigazione aeronavale militare e civile. Poiché l'alfabeto fonetico della NATO e dei radioamatori usa la parola "Zulu" per 'Z', UTC è a volte chiamato "tempo" o "orario Zulu".

Per ottenere l'ora locale di qualunque località del mondo, attraverso l'UTC, basta usare la formula seguente:

OL = UTC + FO

OL=ora locale della località in esame
UTC=Coordinated Universal Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).


Esempio 8

Visualizzare la data e l'ora corrente e le informazioni di tutti i Time zone del mondo.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

 

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione


LO STANDARD ISO 8601
Per indicare le date e le ore in modo univoco in tutto il mondo, è stato creato lo standard ISO 8601. In Europa questo standard è anche conosciuto come EN 28601.

Lo scopo della norma ISO 8601, è quello di fornire indicazioni per i formati numerici di date e orari.

Secondo questo standard le data vanno espresse nel formato anno-mese-giorno, mentre gli orari nel formato ore-minuti-secondi. Tutte le indicazioni di orari, date o intervalli di tempo conformi alla norma ISO vengono indicati con una successione precisa: cominciano con l'unità più grande a cui segue sempre l'unità inferiore. Questo tipo di scrittura è noto anche come "scrittura decrescente".

Rappresentazione conforme all'ISO 8601  Valori
Anno (Y) YYYY, di quattro cifre, abbreviato in due
Mese (M) MM, da 01 a 12
Settimana (W) WW, da 01 a 53
Giorno (D) D, giorno della settimana, da 1 a 7
Ora (h) hh, da 00 a 23, 24:00:00 come orario finale
Minuti (m) mm, da 01 a 59
Secondi (s) ss, da 01 a 59
Frazioni decimali (f) Frazioni di secondo, precisioni facoltative

La data è l'ora nella stringa ISO, sono divise dalla lettera "T", ad esempio:

25 luglio 1980 ore 15:30:10 = "1980-07-25'T'15:30:10".

Dopo l'indicazione della data e dell'orario, spesso si esprime anche la differenza rispetto al tempo universale coordinato, abbreviato con la sigla UTC. In questo modo il formato tiene conto anche degli eventuali diversi fusi orari o dell'ora legale specifica di un paese.

Ad esempio, la stinga ISO seguente:

2020-11-16T04:25:03-05:00

indica la data e l'ora solare di una località ad Ovest di Greenwich (meridiano 0), perché c'è il segno meno, cinque ore prima dell'ora UTC; Il segno -/+ indica il numero di ore prima (Ovest) o dopo (Est) dell'ora UTC. 

Nel prossimo esempio, viene indicato valore della data e dell'ora per il 16 novembre 2020 alle 4:25:03 dell'ora UTC:

2020-11-16T04:25:03Z

La data viene specificata per prima, seguita dal valore T, che definisce l'inizio dell'elemento time. Il valore Z (Zulu) alla fine della stringa indica che l'ora è espressa in formato UTC.
 
L'ISO 8601 usa il calendario gregoriano, quindi il campo di applicazione degli anni in questo formato comprende soltanto gli anni che vanno dal 1583 al 9999 perché il calendario gregoriano è stato introdotto soltanto a partire dall'anno 1583.

Il calendario gregoriano è il calendario solare ufficiale adottato da quasi tutti i paesi del mondo. Fu introdotto da papa Gregorio XIII nel 1582 come correzione del precedente calendario giuliano (di epoca romana), il quale era sfasato di 11 minuti ogni anno solare. 

Il calendario giuliano aggiunge un giorno al calendario ogni 4 anni. Il calendario gregoriano fa lo stesso, tranne quando l'anno è divisibile per 100 e non divisibile per 400


Clicca qui per vedere  come facciamo in programmazione a capire se un anno è secolare e bisestile.


Esempio 9

Visualizzare la data e l'ora corrente e le informazioni del Time zone sia in formato standard, sia in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj=dt.datetime.now()
print("Data e ora: "+str(dataObj))
print("ISO 8601: "+dataObj.isoformat())

 

Soluzione JavaScript (node.js):

// Ottieni la data attuale
const dataObj = new Date();

console.log("Data e ora: " + dataObj.toString());
console.log("ISO 8601: " + dataObj.toISOString());


Esempio 10

Trasformare la data e l'ora corrente e le informazioni del Time zone da formato standard in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj = dt.datetime.now()
print(dataObj.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))

Soluzione JavaScript (node.js):
 
const moment = require('moment');

// Ottieni la data attuale
const dataObj = moment();

// Formatta la data nel formato ISO richiesto
console.log(dataObj.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));


Esempio 11

Stampare in formato ISO 8601, le informazioni del Time zone UTC.
Sempre in formato ISO 8601, stampare anche le informazioni del Time zone Europe/Rome.
Infine, stampare la differenza di fuso orario tra l'ora locale di Roma e l'UTC.


Soluzione Python:

# Gestione date ISO
import datetime as dt
import pytz
dataObj = dt.datetime.now()
dataObjUTC=dataObj.astimezone(pytz.timezone("UTC"))
dataObjRM=dataObj.astimezone(pytz.timezone("Europe/Rome"))
print("Informazioni Time zone UTC: "+dataObjUTC.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))
print("Informazioni Time zone Roma: "+str(dataObjRM.strftime('%Y-%m-%dT%H:%M:%S.%f%z')))
print("Offset tra fuso orario UTC e Roma: "+str(dataObjRM.utcoffset()))

Soluzione JavaScript (node.js):
 
const moment = require('moment-timezone');

// Ottieni la data attuale
const dataObj = moment();

// Converti in UTC
const dataObjUTC = dataObj.tz('UTC');
console.log("Informazioni Time zone UTC: " + dataObjUTC.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Converti in fuso orario di Roma
const dataObjRM = dataObj.tz('Europe/Rome');
console.log("Informazioni Time zone Roma: " + dataObjRM.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Offset tra UTC e Roma
const offset = dataObjRM.utcOffset() / 60; // Ottieni l'offset in ore
console.log("Offset tra fuso orario UTC e Roma: " + offset + " ore");

Prima di eseguire il programma assicurati di aver installato il modulo moment-timezone.

Per installare il modulo, devi eseguire il comanado seguente nella directory in cui è stato salvato il file gestione_date_iso.js:
 
npm install moment-timezone.
 

Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
3-La reppresentazione digitale dei numeri interi e decimali
4-Le stringhe
5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

Share Button

4. CV Story (Gino Visciano): "L'esperienza in SUN Educational Services" - la fine del primo decennio degli anni '2000

Gino Visciano | Skill Factory - 02/08/2024 12:15:03 | in Work experience

Il primo decennio degli anni '2000, professionalmente è stato caratterizzato dalla mia esperienza di formatore con la Sun Educational Services, la divisione della Sun Microsystems Italia che si occupava dei servizi di training.

In quel periodo la mia esperienza in DGS si era conclusa; volevo creare qualcosa di innovativo nel settore della formazione, ma nel nuovo modello di business di DGS la formazione non era più strategica, per questo motivo abbandonai l'azienda e fondai il Consorzio Copernicus. L'obiettivo era quello di rivoluzionare il mondo della formazione con le mie idee -  non fu un caso se scelsi il nome Copernicus.

Nel 2003, quando ci fu la fusione tra Telecom Italia e l'Olivetti, Adriana Fasano, la mia ex responsabile dell'area formazione in Olivetti, diventò  account manager education in Sun Educational Services. Questo evento mi diede l'opportunità d'iniziare a collaborare, attraverso il Consorzio Copernicus, con la più importante azienda di formazione al mondo. Naturalmente devo tutto ad Adriana Fasano che mi permise di entrare a far parte del suo team di formatori.

ISun, collaboravo anche con Claudia Castellano responsabile dei servizi di formazione,  che ho conosciuto a Milano, quando tenevo i corsi persso la sede di v.le Fulvio Testi, 327 e Alberto Mosca,  che ho conosciuto a Roma, lui svolgeva il ruolo di commerciale.

Grazie ad Adriana Fasano, Claudia Castellano e Alberto Mosca, ho avuto l'opportunità di formare i dipendneti delle aziende d'informatica più importanti d’Italia.

All'inizio, facevo  corsi di Unix Sun Solaris, formavo i dipendenti delle aziende IT che utilizzavano le workstation oppure i server Sun; già conoscevo Unix System V (Unix System Five) e le mie conoscenze di C risultarono molto utili perché con Solaris si utilizzava la C shell, che permetteva di creare script Unix con il linguaggio C, mentre con Unix System V si usava la Korn shell, che invece permetteva di creare gli script Unix con un linguaggio proprietario.

Poi, a causa della profonda crisi del mercato dello sviluppo software che si verificò tra la fine degli anni '90 e l'inizio del 2000, Java diventò uno dei linguaggi di programmazione ad oggetti più utilizzati dai programmatori. Il passaggio dalla programmazione procedurale a quella ad oggetti creò una grossa richiesta di corsi, prima di alfabettizzazione e via via sempre di maggiore specializzazione. Fu così che iniziò la mia esperinza in Sun di formatore Java


QUANDO E' NATO L'OBJECT ORIENTED
Alla fine degli anni '90, il Modello a cascata (Waterfall) venne messo in discussione, perché non era adatto alla produzione di software di qualità sempre più complesso e che richiedeva la riusabilità del codice e  continui aggiornamenti.

Il Waterfall prevedeva che il ciclo di vita del software si basasse sulle seguenti fasi, svolte in sequenza: pianificazione (plan), analisi (analysis), progettazione (design), implementazione (code), collaudo (test), installazione (install), utilizzo (use),  come mostra l'immagine seguente:

Questo tipo di modello di sviluppo software andava bene solo per applicazioni dove i requisiti funzionali e di business, definiti durante la fase di analisi, non cambiavano nel tempo, altrimenti si rischiava di non soddisfare mai i clienti. 

La prima conseguenza di questa crisi fu il passaggio dal paradigma procedurale al paradigma ad oggetti. Questo nuovo paradigma di sviluppo software, permetteva di riutilizzare il codice, perché le applicazioni venivano sviluppate con componenti e non più con istruzioni. Così iniziò l'era industriale dello sviluppo software, dove i principali concorrenti furono la Microsoft e la Sun Microsystems

Naturalmente cambiarono anche i linguaggi di programmazione utilizzati, tra questi quelli che ebbero il maggiore successo furono il linguaggio C++ (C plus plus) creato da Bjarne Stroustrup e il linguaggio Java creato da James Gosling della Sun Microsytems e il linguaggio C# (C sharp) creato da Anders Hejlsberg della Microsoft. 

Tutti è tre i linguaggi permettevano di sviluppare applicazioni orientate agli  oggetti, ma Java e C# erano stati pensati per il Web, per questo motivo erano trasportabili (generavano codice intermedio, diverso dal linguaggio macchina,  eseguibile con Virtual Machine), a differenza del C++ non permettevano l'ereditarietà multipla e disponevano di linguaggi di tipo SERVER SIDE come JSP (Java Server Page) per Java e ASP (Active Server Page) per C#, che permettevano di creare pagine Html dinamiche.


Per approfondire la conoscenza del linguaggio C clicca qui.
Per maggiori informazioni sugli oggetti e sul linguaggio C++ clicca qui.
Per imparare tutto quello che ti serve su Java Object Oriented clicca qui.


Allora conoscevo benissimo il C++ e in breve tempo, attraverso il supporto della Sun Educational Services, imparai tutto quello che bisognava sapere su Java.

Con il diffondersi di Java, iniziarono ad aumentare le richieste di corsi e di certificazioni Java da parte del mercato IT. Fu così che iniziò la mia esperienza di formatore esperto di linguaggio Java. Ricordo ancora i codici dei corsi che erogavo in tutta Italia:

1) SL-110 (Introduzione al linguaggio Java);
2) SL-275 (Java Programming Language);
3) SL-314 (Java Web Component);
4) SL-351 (Java Business Component);
5) FJ-310 (Developing Application for Java EE Platform);
6) SL-425 (Architecting and Designing J2EE Applications);
7) DWS-385 (Java Web Service);
8) DTJ-3109 (Developing Secure Web Applications).

A Roma, la sede della Sun si trovava in via Gian Domenico Romagnosi, 4,  nei pressi di p.zza del Popolo, ma i corsi si tenevano presso la sede di Atlantica, in P.zza Barberini, adiacente a Via Veneto e a pochi passi dalla fontana di Trevi e da P.zza di Spagna - è lì che ho imparato ad amare Roma e la Formazione, quella con la EFFE maiuscola.

Conservo ancora in libreria i manuali originali da cui studiavo:

 

Purtroppo, non trovo il manuale SL-275 Java Programming Language, devo averlo prestato a qualche collega o a qualche mio studente; in questo manuale c'era tutto quello che bisognava sapere per lavorare con Java SE (Standard Edition). Con questa versione di Java si potevano creare applicazione a due livelli di tipo desktop che permettevano di archiviare informazioni in un database relazionale.

Per creare le interfacce grafiche, inizialmente usavo la libreria Java AWT, successivamente passai alla libreria Java SWING, perché era molto più dinamica della precedente. Per gestire i database usavo la libreria Java JDBC, ovviamente combinata con il linguaggio SQL

Sono molto legato all'SL-275, perché tutte le conoscenze di Object Oriented che ho appreso da questo manuale sono state utili superare l'esame di certificazione Java Programmer.


LA PIATTAFROMA JAVA EE (ENTERPRISE EDITION)
La Sun Microsystems a dicembre del 1999 estende la versione Java SE con una versione molto più potente che, inizialmente venne chiamata Java 2 EE, poi qualeche anno dopo Java EE.

Java EE è un framework potente e completo per lo sviluppo e la distribuzione di applicazioni aziendali su larga scala, affidabili e sicure. Fornisce un'architettura solida e multilivello che separa i livelli di logica aziendale, presentazione e accesso ai dati, promuovendo modularità e manutenibilità.

La piattaforma comprende un'ampia gamma di API (Application Programming Interface) che facilitano vari aspetti dello sviluppo di applicazioni, come servizi Web, architettura basata su componenti e servizi a livello aziendale. Queste API aiutano gli sviluppatori a gestire attività come la connettività del database, la messaggistica, la gestione delle transazioni e la sicurezza, consentendo la creazione di applicazioni scalabili e ad alte prestazioni.

I componenti principali di Java EE sono:

  • servlet
  • JavaServer Pagine (JSP)
  • JavaBean aziendali (EJB)
  • API di persistenza Java (JPA)
  • Servizio messaggi Java (JMS)
  • API di transazione Java (JTA)
  • JavaMail
  • API Java per servizi Web RESTful (JAX-RS)
  • API Java per servizi Web XML (JAX-WS)
  • Interfaccia di denominazione e directory Java (JNDI).

 

Tutto quello che mi serviva per lavorare con questi nuovi componenti l'ho appreso dai manuali seguenti: 

1) SL-351 (Java Business Component);
2) FJ-310 (Developing Application for Java EE Platform);
3) SL-425 (Architecting and Designing J2EE Applications);

4) DWS-385 (Java Web Service);
5) DTJ-3109 (Developing Secure Web Applications).

In breve tempo diventati un esperto di Java EE (Enterprise Edition), sapevo creare applicazione Web con i Servlet e implementare la logica di business con qualunque tipo di EJB (Enterprise Javabeans), scambiavo dati anche tra applicazioni diversi usando Web Sevice e RESTFul.

Per lavorare con gli EJB usavo i seguenti Application Server:

1) Glassfish (della Oracle)
2) WebLogic (della Oracle)
3) WebSphere (dell'IBM)
4) JBoss (allora era un prodotto Open Source, oggi della Red Hat).

Gli EJB erano oggetti che potevano essere istanziati solo in un EJB Container di un Application Server, a differenza dei POJO (Plan Old Java Object - Oggetti Java Standard), che possono essere istanziati sia in una Java Virtual Machine, sia in un Web Container di un Web Server come Apache o di un Application Server qualsiasi, perchè questo servizio dispone sia di un Web Container, sia di un EJB Containar, come mostra l'immagine seguente:


PERCHE'  OGGI I POJO SONO MOLTO PIU' UTILIZZATI DEGLI EJB? 
Gli EJB permettono di fare in modo più professionale esattamente tutto quello che facciamo oggi con i POJO (Plan Old Java Object - Oggetti Java standard), utilizzando Hibernate e Spring. Il motivo per cui oggi quasi tutti i programmatori, per implementare la Dipendency Injection e l'ORM, usano oggetti POJO,  si spiega con il fatto che i framework  Hibernate e Spring sono più semplici da utilizzare e quindi richiedono un minore costo d'implementazione rispetto alle soluzioni di tipo EJB che invece risultano più complesse da utilizzare, ma probabilmente esiste anche un'altra spiegazione dovuta a un fattore storico che ho vissuto personalmente ...

Purtroppo, la versione EJB 2.0 della piattaforma Java EE, aveva diversi problemi, che creavano grosse difficoltà ai programmatori, quindi erano considerati non affidabili. Questo ha dato spazio a soluzioni alternative  come Hibernate prima e Spring dopo. Quando la Sun, con la versione EJB 3.5 ha risolto tutti i problemi, probabilmente non sono più riusciti a riconquistare la fiducia dei programmatori che ormai avevano iniziato ad usare le soluzioni alternative.

Questo grave errore della Sun ha permesso a Hibernate e Spring di diventare i leader di questa fascia di mercato.


LA RIVOLUZIONE DELLO SVILUPPO AGILE
Quando si è verificata la crisi dello sviluppo software, oltre al paradigma di sviluppo, cambiarono anche i modelli di sviluppo software che diventarono prima iterativi e successivamente iterativi incrementali. Allora collaboravo anche con l'IBM e altre società del gruppo come la Sistemi Informativi e la Selfin, per i clienti del gruppo ho fatto molti corsi di Rational Unified Process (RUP), uno dei primi modelli di sviluppo software iterativi.

Il RUP a differenza del Waterfall divideva il ciclo di vita del software in quattro transazioni: avvio (inception), elaborazione (elaboration), costruzione (construction) e transizione (transaction), ciascuna indicava il livello di maturità di un progetto di sviluppo software.  In base alla transazione, le fasi del modello a cascata venivano gestite in modo diverso, in base agli obiettivi da raggiungere. Ad esempio, per le transazioni iniziali (avvio/elaborazione), dove la conoscenza del progetto software era minore, si dedicava più tempo alle fasi di analisi e di progettazione, mentre per le transizioni finali (costruzione/transizione), dove l'applicazione cominciava a prendere forma, si dedicava più tempo alle fasi d'implementazione, testing e deployment.

L'immagine seguente mostra il RUP (Rational Unified Process):  

Comunque, l'evento più importante che cambiò radicalmente il modo di sviluppare le applicazioni software e da cui dipendono gli attuali modelli di sviluppo software, fu l'incontro del 2001 a Snowbird (Utah), tra i più grandi produttori di software del mondo. Alla fine di questo storico incontro, in diciassette, sottoscrissero il Manifesto Agile che conteneva i 4 valori e 12 principi guida da seguire per progettare e sviluppare applicazioni complesse in modo agile.

I quattro valori del Manifesto agile erano:

1. Individui e interazioni su processi e strumenti;
2. Software funzionante sulla documentazione completa;
3. Collaborazione con i clienti sulla negoziazione del contratto;
4. Rispondere al cambiamento anziché seguire un piano.


Per ricevere maggiori informazioni sul manifesto agile clicca qui.


Oggi il modello di sviluppo software che maggiormente si rifà ai valori e ai principi del Manifesto agile è il modello iterativo incrementale DevOps, riportato nell'immagine seguente:


La metodologia Agile più usata nelle aziende che fanno sviluppo software è SCRUM, un framework, inteso come insieme di regole, ruoli, eventi e artefatti, che permette di accelerare le attività di progettazione applicativa, migliorando contestualmente la qualità del software.

L'immagine seguente mostra gli elementi che compongono il framework SCRUM:

Conosco bene sia il modello di sviluppo software DevOps, sia la metodologia SCRUM perché sono corsi molto richiesti dalle aziende IT che devono aggiornare oppure riqualificare i propri dipendenti. Faccio anche molta consulenza per supportare le aziende IT che vogliono implementare il modello DevOps e applicare un project management di tipo Agile, svolgendo spesso il ruolo di SCRUM Master.


IL TRAMONTO DELLA SUN MICROSYSTEMS: LA FINE DI UNA GRANDE VISIONE AZIENDALE
Prima degli anni '80 i sistemi informatici erano di tipo mainframe, sistemi centralizzati, molto affidabili, con grosse capacità di elaborazione dati, utilizzati solo dalle grandi aziende; i principali produttori mondiali di mainframe erano l'IBM, l'HP e l'Olivetti.

Solo qualche anno più tardi arriveranno i minicomputer e i personal computer, accessibili a tutti e che attraverso le reti comunicavano tra loro, rendendo i sistemi non più centralizzati, ma distribuiti; fu così che inizio l'era della trasformazione digitale

Tra le aziende che hanno favorito il passaggio dai sistemi centralizzati verso i sistemi distribuiti,  la Sun Microsystems ha avuto un ruolo molto importante, dovuto soprattutto all'innovativa visione commerciale di questa grande azienda Californiana.

Lo slogan della SUN era "La rete è il computer", anticipando quello che poi diventerà Internet e il cloud


La Sun Microsystems nasce nel 1982 da un piccolo gruppo di compagni di classe dell'Università di Stanford in California: Vinod Khosla, Scott MacNealy, Bill Joy, Andy Bechtolsheim, Vaughan Pratt; la vision di quest'azienda rivoluzionerà completamente il mondo dell'informatica. 

Scott McNealy, uno dei co-fondatori della Sun, affermava: "Il mondo sta cambiando, sarà tutto in rete". È assurdo che conserviamo tutti i nostri dati su PC e laptop, dove possono essere persi troppo facilmente. Se affidi i tuoi soldi alla banca, perché non dovresti affidare i tuoi dati alla rete? Affidando i dati alla rete li potresti scaricare quando ti servono, così come prelevi soldi quando ne hai bisogno.

Inizialmente era un'azienda di nicchia che produceva workstation con sistema operativo Unix Sun Solaris, alla fine degli anni '80 è entrata nel mercato dei server multiutente e verso la meta degli anni '90 ha iniziato ad operare anche nel mercato emergente dei server web


La Sun, attraverso le sue scelte di mercato s'era riposizionata dal mercato delle workstation, considerato a crescita lenta, verso il mercato Internet a crescita elevata. I suoi server gestivano siti Web di alto profilo come AOL, Amazon.com ed e-bay.

Nel 1997, ogni giorno dagli stabilimenti Sun, venivano spediti ai clienti circa 100 server e 2.500 workstation. Il prezzo di un Server SUN oscillava dai 14.000 a un milione di dollari ($), mentre una workstation costava in media 15.000 dollari ($).

Alla fine del 1998, Sun era cresciuta fino a raggiungere quasi 26.300 dipendenti con circa 10 miliardi di dollari di ricavi. I ricavi erano suddivisi per il 52% negli Stati Uniti e per il 48% a livello mondiale. 



Sun rispetto ai suoi concorrenti offriva soluzioni hardware scalabili e affidabili per il funzionamento di Unix; era il principale concorrente di Microsoft. Insieme ad Apple, era l'unico fornitore a non installare Windows NT sui propri server o Windows sulle workstation.


I server e le workstation Sun non usavano processori Intel, ma avevano una propria architettura basata su processori SPARC RISC. Anche IBM, Compaq e Hewlett-Packard avevano sistemi operativi e architetture proprietarie, ma vendevano anche macchine basate sullo standard Wintel (Windows/Intel)

Compaq, Dell e la maggior parte dei piccoli venditori operavano quasi completamente nel campo Wintel

I prodotti della Sun erano progettati per comunicare attraverso le reti e il protocollo TCP/IP, erano scalabili e affidabili, per questo motivo la Sun riuscì a soddisfare anche le esigenze delle grandi aziende, che si convertirono ai server basati su Unix su cui potevano girare applicazioni come SAP, PeopleSoft, Baan e Oracle.

Sun, oltre a progettare il proprio microprocessore SPARC, il proprio sistema operativo Unix Solaris, creò anche il linguaggio di programmazione Java, per sviluppare applicazioni a oggetti basate sul web. Tutte queste tecnologie pur essendo proprietarie erano considerate aperte, perché Sun pubblicava gli standard e i protocolli concedendoli in licenza per l'utilizzo ad altri.

Sun faceva molto affidamento su terze parti per i servizi di integrazione e il supporto, tra i partner software strategici di Sun cerano: Baan, BEA, Computer Associates, Informix, J.D. Edwards,Lotus, Netscape, Oracle, PeopleSoft, SAP, SAS Institute, Sybase, Tivoli e IBM.

Aveva anche forti rapporti con le principali società di consulenza, tra cui KPMG, Price Waterhouse, Andersen Consulting, EDS, MCI e Cambridge Technology Partner, Perot Systems, Ernst and Young, CSC, Cap Gemini e Deloitte ICS.


La più grande debolezza di Sun fu la sua focalizzazione sul mercato Unix; mentre altri fornitori iniziavano ad investire su Windows NT e Linux e sulla tecnologia Wintel, il CIO (chief information officer) della Sun, ovvero il  responsabile della gestione strategica dei sistemi informativi dichiarava: 

“La tecnologia Sun on Sun è un punto religioso... Gestiamo la nostra azienda da soli.

Sebbene Java proliferasse con una penetrazione dell'85% sui client, la concorrenza dei prodotti Microsoft e delle tecnologie Intel compatibili aumentò a tal punto che la Sun entrò in crisi.

Dopo una serie di voci sulla possibile acquisizione da parte di IBM e di Cisco, a gennaio del 2010, arrivò inaspettata la mossa di Oracle, che acquistò Sun Microsystems per un valore di 7,4 miliardi di dollari ($).

Con questa acquisizione la Oracle ottenne grossi vantaggi di mercato perché poteva disporre di un ottimo sistema operativo Unix, di un ottimo linguaggio di programmazione come Java e dalla disponibilità di tutto l'hardware prodotto dalla Sun.

Con l'acquisto di Sun, Oracle portò in casa anche MySQL, acquistato da Sun nel gennaio 2008.

Il resto lo conoscete perché è storia recente ...


LA BREVE ESPERIENZA DI FORMATORE IN ORACLE
In Sun, oltre a ricevere una grande crescita professionale come formatore, avevo avuto anche l'opportunità di diventare un programmatore molto esperto; tutto quello che insegnavo, lo sapevo anche applicare praticamente. Quindi oltre alla formazione ero capace di fare anche progettazione ed implementazione di applicazioni aziendali distribuite, multilivello.

La gratificazione maggiore che ho ricevuto durante la mia esperienza in Sun è stato l'invito in Scozia, ricevuto direttamente dalla Sun Microsystems al meeting degli Educational Center Sun di tutto il mondo. E' stata un'esperienza bellissima che mi ha ripagato di tutto lo studio e i sacrifici che avevo fatto per arrivare a quel livello.

Conservo ancora il badge che mi consegnarono per accedere all'evento:

  

Ho continuato a collaborare con la Sun fino al 2010, quando in modo inaspettato, arrivò la notizia improvvisa che la Oracle aveva acquistato la Sun Microsystems.

Per qualche anno continuai a fare il formatore anche per la Oracle; oltre ai corsi del catalogo Sun facevo anche corsi di amministrazione Oracle e di programmazione PL/SQL,  naturalmente i miei riferimenti principali continuarono ad essere Adriana FasanoClaudia Castellano e Alberto Mosca.
 
Questa bella esperienza professionale e di vita continuò fino a quando non prevalse il mio desiderio di utilizzare l'enorme esperienza accumulata nel campo della formazione tecnica per aiutare i giovani a entrare nel mondo del lavoro. Fu così che abbandonai i miei vecchi amici di lavoro, con cui avevo fatto tanta strada, per fondare la Skill Factory ...

1. CV Story (Gino Visciano): "dalle schede perforate al primo Personal computer in rete" - gli anni '80
2. CV Story (Gino Visciano): "Dai Sistemi operativi multitasking ai linguaggi ad oggetti" - gli anni '90
3. CV Story (Gino Visciano): "La rivoluzione WWW (World Wide Web) e i linguaggi visuali" - l'inizio del primo decennio degli anni '2000

Share Button
TOP