Skillbook Logo
foto profilo

Skill Factory

Tutte le categorie


Impariamo Python giocando al "Solitario del Ferroviere" - Lezione 2

Gino Visciano | Skill Factory - 21/12/2019 10:02:13 | in Tutorials

Come creare il mazzo di carte

Nella lezione precedente abbiamo descritto le regole del gioco per giocare al "Solitario del ferroviere" ed implementato la  funzionalità per scegliere la carta da pensare.

In questa seconda lezione implementeremo la funzionalità che permette di girare le carte del mazzo.

 

Per iniziare serve il  mazzo di carte, per crearlo abbiamo usato la lista mazzo_carte a cui sono stati aggiunti i valori delle 10 carte da gioco, come mostra il comando seguente:

mazzo_carte=[1,2,3,4,5,6,7,8,9,10]

Successivamente, per associare i valori delle carte alle ripsettive immagini, abbiamo usato come indice della lista immagini_carte, i valori della lista mazzo_carte, come mostra il comando seguente:

immagini_carte[mazzo_carte[indice_carta_girata]]

La variabile indice_carta_girata è l'indice che ci permette di scegliere uno dei 10 valori presenti nella lista mazzo_carte a cui viene associata l'immagine della carta da visualizzare.   

Ad esempio, se indice_carta_girata è uguale a 4, il valore corrispondente alla carta da visualizzare  è 5, come mostra l'esempio seguente:

mazzo_carte=[1,2,3,4,5,6,7,8,9,10] 

Utilizzando il valore ottenuto come indice della lista immagini_carte, che contiene le immagini delle carte da gioco, si ottine la carta da gioco corrispondente:

 

Come abbiamo già visto nella lezione precedente, le immagini nella lista immagini_carte vengono caricate con la funzione carica_immagini_carte(), nell'ordine seguente:
 

Per visualizzare le carte da gioco sul pannello di gioco, abbiamo usato le etichette seguenti:

label_mazzo_di_carte=tk.Label(root, image=immagini_carte[0])
label_carta_girata=tk.Label(root, image=immagini_carte[0])

Per cambiare l'immagine associata all'etichetta label_carta_girata, abbiamo usato la funzione config(...), come mostra il comando seguente :

label_carta_girata.config(image=immagini_carte[mazzo_carte[indice_carta_girata]])

 

Come girare le carte mazzo

Per girare le carte del mazzo, è sufficiente incrementare ogni volta di uno la variabile indice_carta_girata, naturalmente la variabile deve essere azzerata ogni volta che il suo valore va oltre il limite massimo consentito, per evitare che venga generato l'errore:

IndexError: list index out of range  

Per gestire questa funzionalità abbiamo creato il  pulsante gira associato alla funzione gira(), come mostra il comando seguente:

pulsante_gira=tk.Button(root,text="GIRA", width=10, height=2, bd = 3,command=gira, bg="green",font=("Helvetica", 12))

Ogni volta che si clicca sul pulsante gira, la funzione gira() incrementa di 1 la variabile indice_carta_girata, in questo modo, di volta in volta, vengono visualizzate tutte le carte del mazzo, come mostra l'immagine seguente:
 

 

Quando la variabile indice_carta_girata diventa uguale a 8,  la funzione gira(), gestisce le seguenti attività:

1) visualizza il dieci di coppe

2) elimina dal pannello di gioco, l'ultima carta del mazzo 

3) elimina dal pannello di gioco il pulsante gira

4) permette  di iniziare una nuova partitta, visualizzando il pulsante nuova partita.

L'immagine seguente mostra il pannello di gioco quando la variabile indice_carta_girata diventa uguale ad 8.

 Cliccando sul pulsante nuova partita, viene eseguita la funzione nuova_partita(), che svolge le attività necessarie per riprendere il gioco.
 

Analisi del codice Python

# Solitario del ferroviere (Lezione 2)
import pygame 
# Importo la libreria pygame per gestire i suoni
import tkinter as tk  # Importo la libreria tkinter con alias (abbreviazione) tk, per gestire il pannello su cui giocare
import time #Importo la libreria time per gestire il tempo attraverso l'orologio di sistema
from PIL import Image, ImageTk # Importo da PIL le librerie per gestire le immagini 
from tkinter import messagebox 
 Importo da tkinter la libreria per gestire una finestra modale per gestire la fine del programma (game over)

 # Lista per gestire il mazzo di carte
mazzo_carte=[1,2,3,4,5,6,7,8,9,10]
# Lista in cui caricare i riferimenti alle immagini delle carte
immagini_carte=[]
# Indice che punta al valore della carta girata
indice_carta_girata=0

# Questa funzione gestisce i suoni, sound permette di scegliere il suono, tempo indica pa pausa richiesta dopo il suono  
def suono(sound,tempo):
    if sound==1:
       pygame.mixer_music.load("TickSound.mp3")
    elif sound==2:
       pygame.mixer_music.load("ElectronicSound.wav")
    else:
       pygame.mixer_music.load("ComputerSound.wav")
    pygame.mixer_music.play()
    time.sleep(tempo)    
    

# Questa funzione permette di aggiungere le immagini del gioco nella lista immagini_carte 
def carica_immagini_carte():
    immagini_carte=[]
    immagini_carte.append(ImageTk.PhotoImage(Image.open('Carte_Napoletane_retro.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('1coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('2coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('3coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('4coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('5coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('6coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('7coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('8coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('9coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('10coppe.png')))
    return immagini_carte

# Questa funzione permette di girare le carte del mazzo  
def gira():
    global indice_carta_girata
    global mazzo_carte
    global flag
   
# Visualizza la carta girata
     label_carta_girata.config(image=immagini_carte[mazzo_carte[indice_carta_girata]])
    label_carta_girata.place(x=240,y=40)
    girate="   "+str(indice_carta_girata+1)+"/10 "
    label_girate.config(text=girate)
    label_girate.place(x=285,y=370)
    if indice_carta_girata<9:
       indice_carta_girata=indice_carta_girata+1
       suono(1,0.1)
    else:

       # Questo blocco gestisce le attività richieste quando finiscono le carte del mazzo
       pulsante_gira.place_forget()
       label_girate.place_forget()
       indice_carta_girata=0
       label_mazzo_di_carte.place_forget()
       pulsante_nuova_partita.place(x=270,y=370)
       suono(2,0.1)
    

# Questa funzione avvia una nuova partita
def nuova_partita():
   global indice_carta_girata
   label_carta_girata.place_forget()
   pulsante_nuova_partita.place_forget()
   suono(3,2.5)
   label_girate.config(text="   0/10  ")
   start()

# Questa funzione inizializza il pannello di gioco
def start():
    global indice_carta_girata
    label_titolo_mazzo_di_carte.place(x=45,y=5)
    label_mazzo_di_carte.place(x=25,y=40)
    pulsante_gira.place(x=70,y=370)
    label_girate.place(x=285,y=370)
    pygame.init()
    indice_carta_girata=0

# Preparazione dei componenti del pannello di gioco
root = tk.Tk()
root.wm_title('Solitario del ferroviere')
root.geometry("460x450")
root.resizable(False, False)
label_titolo_mazzo_di_carte=tk.Label(root, text="MAZZO DI CARTE",font=("Helvetica", 14))
pulsante_gira=tk.Button(root,text="GIRA", width=10, height=2, bd = 3,command=gira, bg="green",font=("Helvetica", 12))
pulsante_nuova_partita=tk.Button(root,text="NUOVA PARTITA", width=15, height=2, bd = 3,command=nuova_partita, bg="orange",font=("Helvetica", 12))
label_girate=tk.Label(root, text="   0/10  ",font=("Helvetica", 25),fg="white",bg="orange")
immagini_carte=carica_immagini_carte()
label_mazzo_di_carte=tk.Label(root, image=immagini_carte[0])
label_carta_girata=tk.Label(root, image=immagini_carte[0])
start()
root.mainloop()

 

Nella prossima lezione implementeremo la funzione per mischiare le carte del mazzo centrale.

Arrivederci ...


<< Lezione precedente           Lezione successiva >>



 Per scaricare le risorse di questa lezione clicca sul link seguente:risorse_lezione_02

 



 

Share Button

Impariamo a programmare in Python, giocando al "Solitario del Ferroviere" - Lezione 1

Gino Visciano | Skill Factory - 18/12/2019 20:28:16 | in Tutorials

Regole del gioco

Il Solitario del Ferroviere è un passatempo che si può giocare con le carte napoletane, le regole del gioco sono le seguenti:

1) Mischiare le carte e metterle al centro; 

2) Pensare ad una carta del mazzo;

3) Alzare una carta dal mazzo;

4) Se la carta alzata è uguale a quella pensata, mettere la carta a sinistra, altrimenti metterla a destra;

5) Continuare a giocare mentre ci sono carte nel mazzo centrale;

6) Quando le carte del mazzo centrale finiscono, mentre ci sono carte a destra (carte non indovinate), mischiare le carte, metterle al centro e ricominciare a giocare.


Per semplificare la realizzazione del gioco con Python, utilizzeremo solo 10 carte napoletane , come mostra l'immagine seguente:
 



Il Diagramma di Flusso segunte descrive l'Algoritmo per giocare al Solitario del Ferroviere:
 

La pseudo-codifica  seguente descrive meglio le strutture logiche dell'Algoritmo per giocare al Solitario del Ferroviere, soprattutto perché permette di riconoscere i cicli che spesso nei Diagrammi di Flusso vengono confusi con le selezioni

#Algoritmo in pseudo-codifica, per giocare al solitario del ferroviere

Inizio
    Inizio Mentre
         Mischia le carte e mettile al centro
         Inizio Mentre
              Pensa ad una carta
              Alza una carta
              Se carta pensata==carta alzata allora
                   Metti la carta a sinistra
              Altrimenti
                   Metti la carta a destra
              Fine Se
         Mentre carte al centro !=0
    Mentre carte a destra !=0
Fine


In questa prima lezione implementeremo la funzione Python che permette di scegliere la carta pensata, come mostra l'immagine seguente:



 

Cosa serve per iniziare

Per iniziare dovete installare Python (almeno la versione 3.8), per scrivere il codice,  vi suggerisco di usare come ide (integrated development environment ) Visual Studio Code.

Usando la guida seguente potete installare sia Python che Visual Studio Code: guida_installazione.

Inoltre dovete installare  le seguenti librerie Python:

- pygame

- pillow

- time
 

con i comandi seguenti:

pip install pygame

pip install Pillow

pip install time

Se il comando pip non è installato, procedete nel modo seguente:

1) Scaricate il file get-pip.py;

2) Eseguite il comando: python get-pip.py.

 

Cosa dovete sapere

In Python non esistono comandi per dichiarare i tipi di variabili, le  variabili vengono tipizzate quando si assegna il primo valore, come mostra l'esempio seguente:

a=10 # Variabile intera
b=2.5 # Variabile Decimale
nome='Mario' # Variabile Stringa
flag=True # Variabile Booleana 

Le liste sono insiemi dinamici di valori, per dichiarare una lista si usa la sintassi seguente:

valori=[10,20,30] # Lista di valori di tipo intero 
nominativi=['Mario','Clara','Paolo','Roberta'] # Lista di valori di tipo Stringa
elenco=[] 
# Lista di valori vuota non ancora tipizzata

Per aggiungere un elemento ad una lista si usa il metodo append, come mostra l'esempio seguente:

elencoValori=[] # Lista di valori vuota non ancora tipizzata
# Aggiungo tre valori alla lista
elencoValori.append(10)
elencoValori.append(20)
elencoValori.append(30)
# Ciclo usato per visualizzare il contenuto della lista, i assume ad ogni ripetizione i valori seguenti: 0,1 e 2
for i in range(0,3):
      print(elencoValori[i]) 

L'esempio seguente, si differenzia da quello precedente, perchè per visualizzare il contenuto della lista usa un foreach.
Questa struttura di programmazione permette di leggere il contenuto di una lista senza usare l'indice dell'elemento da visualizzare, perché automaticamente ad ogni iterazione (loop) legge il valore seguente e lo assegna alla variabile del ciclo. 

elencoValori=[] # Lista di valori vuota non ancora tipizzata
# Aggiungo tre valori alla lista
elencoValori.append(10)
elencoValori.append(20)
elencoValori.append(30)
# Ciclo foreach, ad ogni ripetizione ad a viene assegnato un valore della lista elencoValori
for a in elencoValori:
      print(a) 

 
In Python l'indent assume un ruolo molto importante, perché si usa per indicare il bloccho d’istruzioni all'interno di una struttura di programmazione o di una funzione, come mostra l’esempio:
 
 
 
 

Analisi del codice Python

Per implemetare la specifica funzionale richiesta in questa prima lezione, dovete prima di tutto caricare le librerie per gestire i suoni, le immagini, il tempo ed il pannello (frame) su cui poggiare le carte da gioco. Successivamente bisogna creare (istanziare) il pannello da gioco, con il comando root = tk.Tk() e tutti i componenti che servono, principalmente le etichette ed il pulsante cambia.
 
La funzione carica_immagini_carte(), crea la lista che contiene le immagini delle carte, mentre la funzione cambia(), associata al pulsante cambia, permette di visialuzzare ad ogni click un carta diversa della lista immagini_carte.
 
Infine la funzione start() serve per visualizzare e posizionare tutti i componeti del pannello di gioco.
 
Studiate il codice seguente, con attenzione, anche facendo uso dei commenti e successivamente scaricate le risorse allegate alla lezione per ottenere tutto quello che vi serve per provare la prima funzionalità che serve per creare il "Solitario del ferroviere".
 
   
# Solitario del ferroviere (Lezione 1)
import pygame # Importo la libreria pygame per gestire i suoni
import tkinter as tk  
# Importo la libreria tkinter con alias (abbreviazione) tk, per gestire il pannello su cui giocare
from PIL import Image, ImageTk # Importo da PIL le librerie per gestire le immagini
from tkinter import messagebox # Importo da tkinter la libreria per gestire una finestra modale per gestire la fine del programma (game over)
import time #Importo la libreria time per gestire il tempo attraverso l'orologio di sistema
indice_carta_pensata=0
flag=True

 
# Questa funzione permette di aggiungere le immagini del gioco nella lista immagini_carte    
def carica_immagini_carte():
    immagini_carte=[]
    immagini_carte.append(ImageTk.PhotoImage(Image.open('Carte_Napoletane_retro.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('1coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('2coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('3coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('4coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('5coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('6coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('7coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('8coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('9coppe.png')))
    immagini_carte.append(ImageTk.PhotoImage(Image.open('10coppe.png')))
    return immagini_carte
 

 

# Questa funzione incrementa la variabile indice_carta_pensata, per cambiare la carta visualizzata, viene eseguite ogni volta che si esegue un click sul pulsante cambia
def cambia():
   
# indica che la variabile indice_carta_pensata è una variabile globale, creata all'esterno della funzione 
    global indice_carta_pensata
    # Imposta l'immagine della carta corrente 

    label_carta_pensata.config(image=immagini_carte[indice_carta_pensata])
    # Visualizza la carta corrente alla posizione indicata 

    label_carta_pensata.place(x=5,y=40)
    if indice_carta_pensata<10:
       indice_carta_pensata=indice_carta_pensata+1
    else:
       indice_carta_pensata=1
    # Emette un suono ed imposta una pausa 0.1 secondi
    pygame.mixer_music.load("TickSound.mp3")
    pygame.mixer_music.play()
    time.sleep(0.1)    

# Questa funzione inizializza il pannello di gioco
def start():
    global indice_carta_pensata
    # Visualizza il pulsante cambia, che ad ogni click esegue la funzione cambia() 

    pulsante_cambia.place(x=60,y=370)
    label_titolo_carta_pensata.place(x=25,y=5)
    label_carta_pensata.place(x=5,y=40)
    # Inizializza la gestione dei suoni
    pygame.init()
    indice_carta_pensata=2

# Crea il pannello di gioco
root = tk.Tk()
root.wm_title('Solitario del ferroviere') # Imposta il titolo del 
 pannello di gioco 
root.geometry("215x450") # Imposta le dimensioni del 
 pannello di gioco 
root.resizable(False, False) # Disabilità il ridimensionamento del 
 pannello di gioco

# Preparazione pulsanti ed etichette, l'attributo commad permette di indicare la funzione eseguita quando si clicca sul pulsante
pulsante_cambia=tk.Button(root,text="CAMBIA", width=10, height=2, bd = 3,command=cambia, bg="green",font=("Helvetica", 12))
label_titolo_carta_pensata=tk.Label(root, text="CARTA PENSATA",font=("Helvetica", 14))

# Prepara il vettore con i riferimenti alle immagini delle carte
immagini_carte=carica_immagini_carte()

# Carica nell'etichetta la prima carta del mazzo
label_carta_pensata=tk.Label(root, image=immagini_carte[1])

# Inizializza l'applicazione e visualizza l'etichetta ed il bottone cambia
start()
root.mainloop() # Rende il pannello di gioco interattivo

 

Nella prossima lezione implementeremo la funzione per girare le carte del mazzo centrale.

Arrivederci ...

 


Lezione successiva >>



 Per scaricare le risorse di questa lezione clicca sul link seguente: risorse_lezione_01

 



Resto a casa a fare formazione ...
Anche durante il lockdown non ci siamo mai fermati, erogando oltre 3000 ore di formazione e laboratorio in Smart-Learning/Working. Grazie al nostro impegno, durante il periodo di emergenza COVID50 giovani programmatori hanno iniziato un tirocinio formativo presso un nostro Job partner IT, con l'opportunità di essere assunti a settembre 2020.  

 


Tutto quello che ti serve per diventare programmatore te lo insegniamo noi!
Vuoi partecipare ad una "Skill Factory"? Invia il tuo CV a recruiting@skillfactory.it, ti contatteremo per verificare se hai i prerequisiti richiesti.
Non cerchiamo talenti o esperti d'Informatica, ma giovani seri volenterosi, predisposti a risolvere problemi logici.   


Sei un programmatore esperto?
Pensi che la tua esperienza possa essere utile agli utenti della nostra community?
Cosa aspetti, conttattaci!  Puoi diventare un nostro "Competence partner" e dare valore alla tua esperienza ...

mail: sid@skillfactory.it 


Per far parte della nostra community registrati su www.skillbook.it.


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


EDUCATIONAL GAMING BOOK (EGB) "H2O"

Nell'era dello SMART LEARNING e di PYTHON i libri non si scrivono, ma si sviluppano, in questo modo chi studia, può sperimentare ed apprendere contemporaneamente; un libro con queste caratteristiche lo possiamo definire un  Educational Gaming Book (EGB).

"H2Oè un EGB che descrive tutte le caratteristiche dell'acqua, la sostanza formata da molecole di H2O, che attraverso il suo ciclo di vita garantisce la sopravvivenza di tutti gli esseri viventi del Pianeta

L'obiettivo dell'EGB è quello di far conoscere ai giovani le proprietà dell'acqua, sotto molti aspetti uniche, per sensibilizzarli a salvaguardare un bene comune raro, indispensabile per la vita


Per il DOWNLOAD di "H2Oclicca qui.

Share Button

Agic Technology, Gold Partner Microsoft, assume a Napoli laureati e diplomati per svolgere il ruolo di Microsoft Dynamics CRM Junior Developer

Gino Visciano | Skill Factory - 12/04/2019 10:12:46 | in Formazione e lavoro

Agic Technology per consolidare il gruppo di lavoro per la sede di Napoli, assume giovani laureati e diplomati per svolgere il ruolo di Microsoft Dynamics CRM Junior Developer.

Si tratta sicuramente di un'offerta di formazione e lavoro molto interessante perché, le risorse selezionate, oltre ad apprendere le conoscenze tecniche  per lo sviluppo e la manutenzione di applicazioni Microsoft Dynamics CRM,  acquisiranno anche le competenze di programmazione per lavorare con ASP.NET Core, il nuovo framework MIcrosoft, completamente Open Source, che permette di creare applicazioni C# trasportabili su qualunque sistema operativo.

Per le 12 risorse selezionate la formazione sarà gratuita, avrà una durata di 40 giorni e si svolgerà nelle aule della nostra sede di Napoli, presso il Centro Polifunzionale INAIL di via Nuova Poggioreale. 

Se siete interessati a questa attività di  formazione e lavoro clccate sul link seguente: come partecipare alle selezioni per svolgere il ruolo di Microsoft Dynamics CRM Junior Developer (Napoli)


Per ulteriori informazioni di seguito pubblichiamo l'intervista fatta alla Dott.ssa Laura Petrini, responsabile Risorse Umane (HR) della società Agic Technology

SF - Può descriverci brevemente la sua azienda?
LP - Agic Technology è uno dei principali partner di Microsoft in Italia, conosciuto per innovazione, competenze e servizi a valore aggiunto. Agic Technology implementa soluzioni e progetti al servizio delle Organizzazioni e degli Utenti Aziendali basati sulle tecnologie Microsoft. Business Applications (ERP e CRM), Data Analytics, Artificial Intelligence, Cloud Platform, IOT, Mobile, Machine Learning, Web, App, Portal & Collaboration sono soltanto alcune delle piattaforme sulle quali basiamo le nostre soluzioni. Professionisti esperti di Governance, Risk e Compliance intervengono a fianco degli specialisti di tecnologie per accompagnare il rilascio delle soluzioni nel rispetto della sicurezza e del nuovo GDPR.

Cinque sedi in Italia e un HUB di sviluppo a Tirana consentono una capacità di consulenza, supporto e sviluppo di progetti locali e internazionali, rilasciando soluzioni specializzate per i principali settori industriali e di servizi, quali: Finance, PA, Associazioni ed Enti, Professional Services, Manufacturing, Engineering & Construction, Telco, Media & Gaming, Pharma.

Con un parco clienti di oltre 400 aziende e un team di più di 200 professionisti, Agic Technology si propone come partner tecnologico specializzato sulle piattaforme Microsoft per le medie e grandi imprese.

SF -  A breve quali sono i vostri obiettivi di crescita?

LP - Il nostro obiettivo è di crescere ulteriormente e di guardare sempre all’innovazione grazie alla nostra Partnership con Microsoft!

SF -  Quante risorse intendete assumere a Napoli?

LP - Stiamo puntando sulla sede di Napoli, saranno almeno 20 gli ingressi programmati per il 2019.

SF - Che ruolo dovranno svolgere le risorse che state cercando?

LP - Conoscere tecnicamente e/o funzionalmente la tecnologia Microsoft Dynamics 365.

SF -  Quali sono le caratteristiche peculiari dei vostri dipendenti?

LP - Aperti al cambiamento, devono codividere la propria esperienza con gli altri colleghi del team,  essere concreti e sempre focalizzati sugli obiettivi da raggiungere.

SF -  Qual è il candidato ideale per la vostra offerta di lavoro?

LP - Motivato ed appassionato, con voglia di intraprendere un percorso di crescita sfidante, predisposto all’innovazione!

SF -  Per formare i candidati che non sono in possesso di tutte le competenze richieste, avete previsto un percorso di formazione?

LP - Certo! Il nostro intento è di formare le risorse con un academy di 8 settimane (5 devolute alla spiegazione del framework .net e 3 per la spiegazione del Dynamics 365).

SF -  Dopo aver terminato il percorso di formazione, quali sono le modalità d'inserimento  in azienda?

LP - Il nostro intento è di formare le risorse e arricchire il percorso con la formazione on the job.

SF -  Coloro che sono interessati alla vostra offerta di lavoro, dove devono inviare il proprio cv?

LP - Possono inviarlo anche sul nostro sito: lavora con noi.

SF -  Qual è il termine ultimo per inviare la propria candidatura e partecipare ai test di ammissione?

LP - Entro il 15 maggio.

SF -  Grazie per il tempo concesso alla nostra intervista e per l'opportunità di formazione e lavoro offerta.

Share Button

Big Data - Cosa sono e cosa cambia (terza parte)

Gino Visciano | Skill Factory - 05/04/2019 00:02:53 | in Formazione e lavoro

La piattaforma che offre il maggior numero di strumenti per la gestione dei Big Data è Hadoop, un ecosistema open source  sviluppato da Apache Software Foundation.

I motivi principali della diffusione di Hadoop sono i seguenti:

- per la sua flessibilità ad immagazzinare i dati indipendentemente dal fatto che siano strutturati o destrutturati; 
- permette di processare i dati di natura complessa e di elevate dimensioni;
- è economico e scalabile rispetto ai sistemi di immagazzinamento dei dati tradizionali;
- è tollerante ai guasti (fault tolerant).

 

Hadoop offre strumenti per la gestione dei Big Data strutturati e destruturati permettendo la loro elaborazione sia in modalità batch, sia in modelità streaming (aggiornamento dei dati in tempo reale on line).

La caratteristica principale di questo framework è quella di essere scalabile orizzontalmente (MPP -  Massively Parallel Processing), in pratica Hadoop sfrutta le potenzialità offerte da un cluster di computer, detti nodi, su cui vengono distribuiti dati e gestiti i processi di lavoro sincronizzati.

Ciascuno dei Computer che appartengono al Cluster è chiamato nodo, esistono due tipologie di nodi nell’architettura Hadoop: il nodo master ed il nodo slave.

Il nodo master (Namenodecontrolla tutti i nodi slave (Datanode), è qui che le informazioni vengono immagazzinate in blocchi.

I blocchi sono gestiti direttamente dal nodo master ed hanno una dimensione minima di 128MB

Hadoop per essere tollerante ai guasti, replica i blocchi su più nodi, in modo da poter essere recuperati in caso di errori.

 

ARCHITETTURA DI HADOOP

L'architettura di Hadoop può essere divisa in quattro parti fondamentali:

1) HDFS

2) MAPREDUCE

3) YARN 

4) STRUMENTI PER GESTIRE ED ANALIZZARE BIG DATA 

 

 

HDFS
L'HDFS è il File System distribuito di Hadoop, permette di distribuire file di grandi dimensioni in blocchi registrati sui DataNode associati ai nodi di tipo slave del Cluster, in pratica è un grande virtual storage, tollerante ai guasti, è lui che gestisce le repliche dei blocchi tra nodi per evitare la perdita di dati.

  
 

 

MAPREDUCE
MapReduce è popolare grazie a Google che lo utilizza per elaborare ogni giorno molti petabyte di dati. Il modello di MapReduce è costituito da due programmi scritti dall’utente, chiamati map e reduce e da un framework che abilita l’esecuzione di un grande numero di istanze di ciascun programma sui diversi nodi del cluster.
Il programma map legge un insieme di record da un file di input, svolge le operazioni di ETL, quindi produce una serie di record di output nella forma (chiave, dati).

Mentre il programma map produce questi record, una funzione separata li organizza in contenitori multipli e indipendenti, applicando una funzione alla chiave di ciascun record, questa funzione è tipicamente hash, sebbene sia sufficiente qualsiasi tipo di funzione deterministica. Una volta che il contenitore è pieno, il suo contenuto viene salvato sul disco. 

Il programma map termina producendo una serie di file di output, uno per ciascun contenitore.

Dopo essere stati raccolti dal framework map-reduce i record di input vengono raggruppati per chiavi (attraverso operazioni di sorting o hashing) e sottoposti al programma reduce.

Il programma reduce esegue una elaborazione dei dati attraverso un linguaggio general purpose, come ad esempio Java, Scala oppure Python. Cascuna istanza reduce può scrivere record in un file di output e quest’ultimo rappresenta una parte della risposta elaborata da MapReduce.

La coppia chiave/valore prodotta dal programma map può contenere qualsiasi tipo di dati nel campo assegnato al valore del campo. Google, per esempio, utilizza questo approccio per indicizzare grandi volumi di dati non strutturati.

Le coppie chiave/valore utilizzate nell’elaborazione MapReduce possono essere archiviate in un file o in un database  che sfruttano la logica di coppie chiave/valore. 

 

 

YARN
YARN (Yet Another Resource Negotiator) gestisce le risorse del Cluster, come ad esempio la memoria e la CPU, la larghezza di banda della rete e lo spazio di archiviazione disponibile e monitora l’esecuzione delle applicazioni. Rispetto alla prima versione di MapReduce è ora un sistema molto più generico, infatti la seconda versione di MapReduce è stata riscritta come applicazione YARN, con alcune sostanziali differenze.

YARN offre chiari vantaggi in termini di scalabilità, efficienza e flessibilità rispetto al classico motore MapReduce nella sua prima versione.

Le applicazioni da eseguire si chiamano Application Master,  il Resource manager richiede la possibilità di installare l’application master sul cluster.
Il Resource manager richiede a un nodo del cluster la creazione di un container per eseguire l'applicazione. Al container è associato un determinato ammontare di risorse RAM e CPU,  per evitare di bloccare il nodo.

Una volta in esecuzione, il master si moltiplica, richiedendo a sua volta al resource manager (tramite le apposite API di YARN) altri container su altri nodi su cui lanciare le varie copie dell’applicazione distribuita.

L’application master a sua volta manda segnali di heartbeat al resource manager per indicare di essere ancora vivo e funzionante.

Un esempio di una applicazione YARN è proprio MapReduce. In questo caso l’Application Master è il JobTracker mentre le varie repliche lanciate sui vari container sono i vari TaskTracker (mapper o reducer).

MapReduce è un Application Master già disponibile in YARN, in modo da mantenere un minimo di retro-compatibilità con Hadoop 1.0 (la retro compatibilità non è però garantita).

AMBARI
Ambari semplifica la gestione ed il monitoraggio di un cluster Apache Hadoop grazie ad un'interfaccia utente Web facile da usare. Ambari è usato per monitorare il cluster e modificare la configurazione di Hadoop.


HCATALOG
HCatalog presenta agli utenti una vista tabellare dei dati presenti in HDFS, indipendentemente dal formato di origine, rendendo più semplice la creazione e la modifica dei metadati.
PIG
È un linguaggio di scripting evoluto che consente di bypassare le difficoltà di approccio al framework MapReduce grazie a una sintassi semplice, ma al tempo stesso potente e efficace. Al momento dell’esecuzione lo script Pig viene automaticamente tradotto in uno o più job Tez o MapReduce2.
HIVE
Hive consente di creare l’infrastruttura necessaria a gestire un completo data warehouse on top of Hadoop. Hive si posiziona all’interno del batch layer di Hadoop e consente di gestire sia dati strutturati che destrutturati immagazzinati all’interno del Blob Storage. Utilizza un linguaggio SQL-like chiamato HiveQL. È ideale per qualsiasi tipo di analytics di tipo non transazionale.


HBASE
HBase è il database NoSQL di Hadoop: utilizza HDFS per immagazzinare i dati ed è totalmente scalabile su tutti i nodi del cluster stesso di Hadoop. Utilizza un modello key-value dove i dati sono distribuiti secondo una mappa key-value ordinati per key. Può contenere miliardi di righe e milioni di colonne.
SQOOP
Sqoop è l’ETL nativo di Hadoop. Consente l’accesso a sistemi RDBMS esterni, la lettura automatica dello schema e l’ingestion dei dati all’interno di HDFS. Grazie all’utilizzo del framework MapReduce2 qualsiasi data ingestion basata su Sqoop è scalabile e altamente performante.

FLUME
Flume è uno dei principali tool di data ingestion dell’ecosistema Hadoop per la raccolta, l’aggregazione, il controllo e l’immagazzinamento di stream di dati (tipicamente machine data) all’interno di HDFS.


OOZIE
Oozie è uno schedulatore di workflow che risiede e opera all’interno di Hadoop: è in grado di gestire, controllare e concatenare job MapReduce2, Sqoop, Hive e Pig e può essere utilizzato sia all’interno di un batch layer che di uno speed layer.

 


ZOOKEEPER
È un servizio centralizzato per la gestione delle configurazioni, la creazione di ensemble per i servizi di naming e group e la sincronizzazione delle distribuzioni di informazioni (es: transazioni distribuite). Molti servizi dell’ecosistema di Hadoop dipendono da ZooKeeper (es: HBase e NameNode HA).

 


Big Data - Cosa sono e cosa cambia (prima parte)

Big Data - Cosa sono e cosa cambia (seconda parte)

Share Button

Big Data - Cosa sono e cosa cambia (seconda parte)

Gino Visciano | Skill Factory - 16/03/2019 00:16:42 | in Formazione e lavoro

Tutte le volte che interagiamo con un dispositivo connesso ad Internet, consapevolmente ed a volte anche inconsapevolmente, produciamo dati.

Le aziende lavorano ed analizzano i nostri dati principalmente per ottenere un vantaggio competitivo.

Il mercato dei Big Data è in forte crescita perché le aziende, sempre di più, richiedono l'uso di questo strumento per i seguenti motivi:

- Aumentare il fatturato attraverso la crescita delle vendite;
- Rendere prevedibile lo sviluppo della domanda, basandosi sui comportamenti dei clienti;
- Dare più valore all’account management analizzando le operazioni tra venditori e clienti e prevedere ciò che è meglio fare per un qualsiasi cliente;
- Aprire nuove opportunità di business, per chi voglia allargare il mercato puntando su clienti relativamente nuovi.

Quando ai Big data si uniscono gli analytics è possibile:

- Determinare, quasi in tempo reale, le cause di guasti, avarie o difetti;
- Creare offerte nei punti vendita basate sulle abitudini dei clienti;
- Ricalcolare interi portafogli di rischio in pochi minuti;
- Individuare comportamenti fraudolenti prima che colpiscano la propria organizzazione.

Si usano quattro modelli di analytics:

Descriptive Analytics: strumenti orientati a descrivere la situazione attuale e passata dei processi aziendali e/o aree funzionali. Tali strumenti permettono di accedere ai dati secondo viste logiche flessibili e di visualizzare in modo sintetico e grafico i principali indicatori di prestazione;
Predictive Analytics: strumenti avanzati che effettuano l’analisi dei dati per rispondere a domande relative a cosa potrebbe accadere nel futuro; sono caratterizzati da tecniche matematiche quali regressione, forecasting, modelli predittivi, ecc;
Prescriptive Analytics: applicazioni big data avanzate che, insieme all’analisi dei dati, sono capaci di ottenere soluzioni operative/strategiche sulla base delle analisi svolte;
Automated Analytics: capaci di implementare autonomamente l’azione proposta secondo il risultato delle analisi svolte (Machine Learning).

I Big Data possono essere analizzati in due modalità diverse:

1 - Batch: in questa modalità i dati da analizzare vengono aggiornati ad intervalli periodici, è una modalità tipica del Data warehouse
2 - Streaming: in questa modalità i dati da analizzare vengono aggiornati in tempo reale, modalità tipica dell'IoT.

Per individuare i modelli di utilizzo degli Analytics è necessaria anche definire le tipologie di dati da analizzare che possono essere principalmente di due tipi:

1 - dati strutturati: organizzati in tabelle o modellati in formati tipo XML, JSON, BSON e CSV.
2 - dati destrutturati.

I dati destrutturati sono tipicamente:

- testo;
- immagini;
- video;
- audio;
- elementi di calcolo.

L'immagine seguente descrive l'ecosistema Hadoop, la piattaforma che offre tutti gli strumenti necessari per gestire grandi quantità di dati.

Lo schema mette in relazione tra loro tutti i livelli fondamentali per la lavorazione e l'analisi di Big Data.

I diversi tipi di repositories disponibili, possono essere alimentati da sorgenti di dati differenti attraverso processi di caricamento (ETL/ELT) di tipo batch o streaming.
La grande quantità di dati caricati, attraverso il  filesystem distribuito HDFS, può essere immagazzinata sui nodi del cluster Hadoop, rappresentato da un insieme di computer, detti nodi, che condividono i propri dischi, creando un'unica grande memoria di massa.

Utilizzando strumenti come MapReduce, i Big Data possono essere mappati e ridotti, il risultato di questo lavoro potrà essere analizzato dalle diverse applicazioni diponibili oppure potrà essere interessato ad operazioni di Machine Learning

La potenza di calcolo richiesta per l'esecuzione dei JOB di map reduce e di analasi viene fornita dalle CPU dei computer del cluster Hadoop, attraverso multiprocessi paralleli (MPP) gestiti da YARN di Hadoop.

 

Attualmente esistono esperienze d'implementazione di progetti di Big Data Analytics in medie e grandi aziende dei seguenti settori: 

La figura professionale che in azienda si occupa delle strategie per gestire grandi quantità di dati e della loro interpretazione è il Data Scientist

Per svolgere questo ruolo bisogna avere competenze in ingegneria, informatica, statistica, economiamatematica, in particolare è richiesta la conoscenza dei seguenti linguaggi di programmazione:

  • Java
  • Scala
  • R
  • Python

e la capacità di sviluppare ed implementare algoritmi di Machine Learning.

In Italia un Data Scientist può guadagnare oltre €30.000,00 all'anno, in funzione del livello di seniority raggiunto.

DIFFERENZA TRA DATA ANALYST E DATA SCIENTIST
Il Data Analyst è colui che esplora, analizza e interpreta i dati, con l’obiettivo di estrapolare informazioni utili al processo decisionale, da comunicare attraverso report e visualizzazioni ad hoc.

Il Data Analyst parte dal lavoro svolto dal Data Scientist per trasmettere e interpretare le informazioni al fine di supportare gli utenti con cui collabora.

Questa figura professionale non proviene da un percorso estremamente tecnico, è preferibile anzi che abbia compiuto studi economico-manageriali, in modo da poter parlare lo stesso linguaggio delle figure di business con cui andrà ad interfacciarsi.

Lo stipendio medio di un Data Analyst in Italia è di circa €27.000 all'anno.

 

PRINCIPALI STRUMENTI PER L'ANALISI DEI DATI
Gli strumenti di analisi dei dati, anche detti di front-end,  più richiesti dalle aziende sono: Tableau, Qlik e Power BI, cliccate sui loghi per accedere ai siti ufficiali.

 


Big Data - Cosa sono e cosa cambia (prima parte)

Big Data - Cosa sono e cosa cambia (terza parte)

Share Button
TOP