Skillbook Logo
foto profilo

Tutte le categorie


Ricominciamo ... dal linguaggio SQL Lezione 10

Gino Visciano | Skill Factory - 25/04/2016 00:21:34 | in Tutorials

Benvenuti alla decima lezione, in questa lezione imparerete ad applicare il Self Join.  Un Self Join non è altro che un Join applicato alla stessa tabella.

Per capire come funziona questo tipo di Join, immaginate di avere una tabella Dipendenti, in cui è presente anche l'id del responsabile di ogni dipendente. La particolarità di questa tabelle è che il responsabile di un dipendente è anche lui un dipendente, quindi è presente nella stessa tabella.

La caratteristica importante della tabella Dipendenti è che contine contemporaneamente, sia la chiave primaria, che la chiave esterna, come mostra l'immagine seguente:

Per distinguere le due tabelle con lo stesso nome dovete usare due alias di tabella differenti, come mostra l'esempio seguente:

SELECT col1,col2, ..., coln FROM tabella_a AS a JOIN tabella_a AS b ON ( ... );

Per vedere come si applica praticamente un Self Join, facciamo le seguenti considerazioni:

1) Rossi Alberto è l'Amministratore dell'azienda quindi non ha responsabili;

2) Verdi Carlo è il Direttore Generale dell'Azienda, il suo responsabile è Rossi Alberto;

3) Bianchi Silvia è il Direttore Commerciale dell'Azienda, il suo Responsabile è Verdi Carlo;

4) Neri Mara è il Responsabile delle Risorse Umane, il suo Responsabile è Verdi Carlo;

5) Rossi Luca è un Commerciale, il suo Responsabile è Bianchi Silvia;

6) Verdi Laura è un Commerciale, il suo Responsabile è Bianchi Silvia;

7) Bianchi Loredana è una Segretaria, il suo Responsabile è Neri Mara;

8) Rossi Valentina è un'Addetta all'Amministrazione, il suo Responsabile è Neri Mara;

9) Bianchi Paola  è un'Addetta all'Amministrazione, il suo Responsabile è Neri Mara;

10) Neri Marcella è un'Addetta alla Reception, il suo Responsabile è Neri Mara;

 

Per creare il Database Azienda, implementate lo Schema Fisico seguente:

 

Attraverso i comandi seguenti potete implementare il Database Azienda, in MySQL, se state usando un DBMS diverso potrebbero esserci delle differenze.

I comandi devono essere eseguiti nella sezione SQL del pannello di controllo phpMyAdmin.

 

STEP 1: Creazione del Database Azienda

1) Create il Database:

create database azienda;

2) Create la tabella Dipendenti:

use azienda; -- connettiti al db azienda
create table dipendenti (
    id int AUTO_INCREMENT PRIMARY KEY,
    matricola char(5) UNIQUE,
    cognome varchar(50) NOT NULL,
    nome varchar(50) NOT NULL,
    cod_fisc char(16) UNIQUE,
    luogo_di_nascita varchar(50),
    data_di_nascita date,
    id_ruolo int NOT NULL,
    id_responsabile int);


3) Create la tabella Ruoli:

use azienda; -- connettiti al db azienda
create table ruoli (
    id int AUTO_INCREMENT PRIMARY KEY,
    ruolo varchar(50) NOT NULL);

 

STEP 2: Inserire i ruoli nella Tabella Ruoli

use azienda; -- connettiti al db azienda

insert into ruoli (ruolo) values ('Amministratore');

insert into ruoli (ruolo) values ('Direttore Generale');

insert into ruoli (ruolo) values ('Direttore Commerciale');

insert into ruoli (ruolo) values ('Reaponsabile Risorse Umane');

insert into ruoli (ruolo) values ('Commerciale');

insert into ruoli (ruolo) values ('Segretaria');

insert into ruoli (ruolo) values ('Addetto Amministrazione');

insert into ruoli (ruolo) values ('Addetto Reception');

insert into ruoli (ruolo) values ('Addetto Delivery');

insert into ruoli (ruolo) values ('Responsabile Sicurezza');

Il risultato del lavoro fatto è il seguente:

select * from ruoli:

1 Amministratore
2 Direttore Generale
3 Direttore Commerciale
4 Reaponsabile Risorse Umane
5 Commerciale
6 Segretaria
7 Addetto Amministrazione
8 Addetto Reception
9 Addetto Delivery
10 Responsabile Sicurezza

 

STEP 3: Inserire i Dipendenti nella Tabella Dipendenti

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('RA001', 'Rossi', 'Alberto','Roma','1970/12/10',1,null);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ( 'VC002','Verdi', 'Carlo','Latina','1975/04/20', 2,1);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('BS003','Bianchi', 'Silvia','Rieti', '1980/02/05', 3,2);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('NM004', 'Neri', 'Mara', 'Napoli', '1978/05/10', 4,2);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('RL005','Rossi', 'Luca', 'Salerno','1972/09/15', 5, 3);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('VL006','Verdi', 'Laura', 'Roma', '1973/11/08', 5,3);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('BL007', 'Bianchi', 'Loredana', 'Latina', '1982/03/04', 6,4);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('RV008','Rossi', 'Valentina', 'Napoli', '1986/07/13', 7, 4);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('BP009', 'Bianchi', 'Paola',  'Benevento', '1975/06/25', 7,4);

insert into dipendenti (matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile)
                    values ('NM010', 'Neri', 'Marcella', 'Salerno', '1979/05/28', 8,4);

Il risultato del lavoro fatto è il seguente:

select id, matricola, cognome, nome, luogo_di_nascita, data_di_nascita, id_ruolo, id_responsabile from dipendenti;

id matricola cognome nome luogo_di_nascita data_di_nascita id_ruolo id_responsabile
1 RA001 Rossi Alberto Roma 1970-12-10 1 NULL
2 VC002 Verdi Carlo Latina 1975-04-20 2 1
3 BS003 Bianchi Silvia Rieti 1980-02-05 3 2
4 NM004 Neri Mara Napoli 1978-05-10 4 2
5 RL005 Rossi Luca Salerno 1972-09-15 5 3
6 VL006 Verdi Laura Roma 1973-11-08 5 3
7 BL007 Bianchi Loredana Latina 1982-03-04 6 4
8 RV008 Rossi Valentina Napoli 1986-07-13 7 4
9 BP009 Bianchi Paola Benevento 1975-06-25 7 4
10 NM010 Neri Marcella Salerno 1979-05-28 8 4

 

Creazione di una Query per visualizzare i Dipendenti, i Ruoli ed i Responsabili

Per creare la Query richiesta, serve un INNER JOIN tra la tabella Dipendenti e la tabella Ruoli, per visualizzare i ruoli e un SELF JOIN sulla tabella Dipendenti per visualizzare i Responsabili, il comando seguente vi permette di ottenere questo risultato:

select d1.id, d1.matricola, d1.cognome, d1.nome, d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome, d2.nome
            from dipendenti as d1 join dipendenti as d2 on (d1.id_responsabile=d2.id) join ruoli as r on (d1.id_ruolo=r.id);

 

id matricola cognome nome luogo_di_nascita data_di_nascita ruolo cognome nome
2 VC002 Verdi Carlo Latina 1975-04-20 Direttore Generale Rossi Alberto
3 BS003 Bianchi Silvia Rieti 1980-02-05 Direttore Commerciale Verdi Carlo
4 NM004 Neri Mara Napoli 1978-05-10 Responsabile Risorse Umane Verdi Carlo
5 RL005 Rossi Luca Salerno 1972-09-15 Commerciale Bianchi Silvia
6 VL006 Verdi Laura Roma 1973-11-08 Commerciale Bianchi Silvia
7 BL007 Bianchi Loredana Latina 1982-03-04 Segretaria Neri Mara
8 RV008 Rossi Valentina Napoli 1986-07-13 Addetto Amministrazione Neri Mara
9 BP009 Bianchi Paola Benevento 1975-06-25 Addetto Amministrazione Neri Mara
10 NM010 Neri Marcella Salerno 1979-05-28 Addetto Reception Neri Mara

L'Amministratore Rossi Alberto,corrispondente all'id 1, non viene visualizzato perché l'id_responsabile è uguale a null, quindi la condizione d1.id_responsabile=d2.id non è verificata, in un INNER JOIN oppure in un SELF JOIN vengono visualizzati solo i record che soddisfano la condizione chiave esterna uguale a chiave primaria.

Per visualizzare anche l'Amministratore dell'Azienda, dovete usare un LEFT JOIN, come mostra il comando seguente:

select d1.id, d1.matricola, d1.cognome, d1.nome, d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome, d2.nome
            from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r on (d1.id_ruolo=r.id);

id matricola cognome nome luogo_di_nascita data_di_nascita ruolo cognome nome
1 RA001 Rossi Alberto Roma 1970-12-10 Amministratore null null
2 VC002 Verdi Carlo Latina 1975-04-20 Direttore Generale Rossi Alberto
3 BS003 Bianchi Silvia Rieti 1980-02-05 Direttore Commerciale Verdi Carlo
4 NM004 Neri Mara Napoli 1978-05-10 Responsabile Risorse Umane Verdi Carlo
5 RL005 Rossi Luca Salerno 1972-09-15 Commerciale Bianchi Silvia
6 VL006 Verdi Laura Roma 1973-11-08 Commerciale Bianchi Silvia
7 BL007 Bianchi Loredana Latina 1982-03-04 Segretaria Neri Mara
8 RV008 Rossi Valentina Napoli 1986-07-13 Addetto Amministrazione Neri Mara
9 BP009 Bianchi Paola Benevento 1975-06-25 Addetto Amministrazione Neri Mara
10 NM010 Neri Marcella Salerno 1979-05-28 Addetto Reception Neri Mara


Utilizzando gli alias di colonna ed il concatenamento tra le colonne potete rendere il report ancora più professionale, come mostra il comando seguente:

select d1.id, d1.matricola, concat(d1.cognome, ' ', d1.nome) as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, concat(d2.cognome, ' ',  d2.nome) as "responsabile"
            from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left  join ruoli as r on (d1.id_ruolo=r.id);

id matricola dipendente luogo_di_nascita data_di_nascita ruolo responsabile
1 RA001 Rossi Alberto Roma 1970-12-10 Amministratore null
2 VC002 Verdi Carlo Latina 1975-04-20 Direttore Generale Rossi Alberto
3 BS003 Bianchi Silvia Rieti 1980-02-05 Direttore Commerciale Verdi Carlo
4 NM004 Neri Mara Napoli 1978-05-10 Responsabile Risorse Umane Verdi Carlo
5 RL005 Rossi Luca Salerno 1972-09-15 Commerciale Bianchi Silvia
6 VL006 Verdi Laura Roma 1973-11-08 Commerciale Bianchi Silvia
7 BL007 Bianchi Loredana Latina 1982-03-04 Segretaria Neri Mara
8 RV008 Rossi Valentina Napoli 1986-07-13 Addetto Amministrazione Neri Mara
9 BP009 Bianchi Paola Benevento 1975-06-25 Addetto Amministrazione Neri Mara
10 NM010 Neri Marcella Salerno 1979-05-28 Addetto Reception Neri Mara

Attenzione la funzione MySQL concat permette di concatenare in un'unica colonna il congnome, uno spazio ed il nome. Con altri DBMS gli operatori di concatnamento sono || (doppio pipe) oppure il segno +, come mostra l'esempio seguente:

select d1.id, d1.matricola, d1.cognome || ' ' ||  d1.nome as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r.ruolo, d2.cognome ||  ' ' ||  d2.nome  as "responsabile"
            from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id)  left join ruoli as r on (d1.id_ruolo=r.id);

Infine, per rendere il report ancora più professionale, con un ulteriore JOIN sulla tabella ruoli, potete anche aggiungere anche il ruolo del Responsabile, come mostra il comando seguente:

select d1.id, d1.matricola, concat(d1.cognome, ' ', d1.nome) as "dipendente", d1.luogo_di_nascita, d1.data_di_nascita, r1.ruolo,
            concat(d2.cognome, ' ',  d2.nome) as "responsabile", r2.ruolo as "ruolo responsabile"
            from dipendenti as d1 left join dipendenti as d2 on (d1.id_responsabile=d2.id) left join ruoli as r1 on (d1.id_ruolo=r1.id) 
           left  join ruoli as r2 on (d2.id_ruolo=r2.id) ;

 

id matricola dipendente luogo_di_nascita data_di_nascita ruolo responsabile ruolo responsabile
1 RA001 Rossi Alberto Roma 1970-12-10 Amministratore null null
2 VC002 Verdi Carlo Latina 1975-04-20 Direttore Generale Rossi Alberto Amministratore
3 BS003 Bianchi Silvia Rieti 1980-02-05 Direttore Commerciale Verdi Carlo Direttore Generale
4 NM004 Neri Mara Napoli 1978-05-10 Responsabile Risorse Umane Verdi Carlo Direttore Generale
5 RL005 Rossi Luca Salerno 1972-09-15 Commerciale Bianchi Silvia Direttore Commerciale
6 VL006 Verdi Laura Roma 1973-11-08 Commerciale Bianchi Silvia Direttore Commerciale
7 BL007 Bianchi Loredana Latina 1982-03-04 Segretaria Neri Mara Responsabile Risorse Umane
8 RV008 Rossi Valentina Napoli 1986-07-13 Addetto Amministrazione Neri Mara Responsabile Risorse Umane
9 BP009 Bianchi Paola Benevento 1975-06-25 Addetto Amministrazione Neri Mara Responsabile Risorse Umane
10 NM010 Neri Marcella Salerno 1979-05-28 Addetto Reception Neri Mara Responsabile Risorse Umane

Attenzione per visualizzare anche l'Amministratore è importante che anche l'ultimo JOIN sia di tipo LEFT .

 


<< Lezione precedente           Lezione successiva >>


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


Share Button

App Mania Lezione 9 - Gestione Sprite - II Parte - (Come far girare l'ago di una bussola)

Gino Visciano | Skill Factory - 23/04/2016 08:26:00 | in Tutorials

Benvenuti alla nona lezione, nella lezione precedente avete preparato le immagini che servono per far girare l'ago della bussola sia in senso orario, che in senso antiorario.

In questa lezione implementerete i blocchi che servono per attivare l'animazione per far girare l'ago.

Come avete già visto nella lezione precedente, per far girare l'ago ogni volta che premete sui pulsanti "Ruota+" e "Ruota-",  dovete sostituire nello Sprite Ago_Bussola l'immagine dell'ago corrente con l'immagine successiva, se avete premuto il pulsante "Ruota+" oppure l'immagine precedente se avete premuto il pulsante "Ruota-", come mostra la sequenza seguente:

 

I nomi delle immagini, sono composti da una parte fissa, la parola ago e da un numero progressivo da 01 .. 12, sfrutterete proprio quest'ultima caratteristica per caricare l'immagine che serve, basta creare un contatore che s'incrementa oppure si decrementa ad ogni operazione.

Con App Inventor per creare un contatore serve una variabile, per inizializzarla eseguite le operazioni seguenti:

1) selezionate l'Area Blocks;

2) aprite la categoria Variables;

3) cliccate sul blocco initialize global;

4) rinominatelo fotogramma;

5) aprite la categoria Math;

6) cliccate sul blocco numero;

7) associate il blocco numero a quello initialize global;

8) assegante al blocco numero il valore 1 per inizializzare la variabile fotogramma, come mostra l'immagine.

Userete la variabile fotogramma, come contatore per richiamare le immagini. Il contatore si dovrà incrementare ogni volta che si clicca sul pulsante "Ruota+" e decrementare quando si clicca sul pulsante "Ruota-", l'immagine seguente mostra come trasformare la variabile fotogramma in un contatore:

ogni volta che viene eseguito questo blocco la variabile fotogramma s'incrementa di 1.

Il blocco somma lo trovate nella categoria Math.

Il blocco get oppure il blocco set, per ottenere oppure assegnare un valore alla variabie fotogramma, lo trovate spostando il cursore del mouse sul blocco initialize global, come mostra l'immagine seguente:

Per caricare l'immagine nello Sprite Ago_Bussola, serve il blocco set Picture, lo trovate nella categoria Ago_Bussola, come mostra l'immagine seguente:

Per comporre il nome dell'immagine, dovete procedere come segue:

1) per i valori da 1 a 9 del contatore, dovete concatenare la parola "ago0" con il valore della variabile "fotogramma" e l'estensione ".png";

2) per i valori da 10 a 12 del contatore, dovete concatenare la parola "ago", senza 0 (zero), con il valore della variabile "fotogramma" e l'estensione ".png".

Per concatenare i due valori tra loro dovete utilizzare il blocco Join, della categoria Text. Nella stessa categoria trovate anche il blocco text string, che permette di aggiungere valori alfanumerici.

Le immagini seguenti mostrano i blocchi da utilizzare per comporre il nome dell'immagine corrente da caricare nello Sprite.

1) Blocchi da usare per i Fotogrammi da 1 a 9:

2) Blocchi da usare per i Fotogrammi da 10 a 12:

Utilizzando un blocco if potete controllare il valore raggiunto dal contatore e decidere quali blocchi usare, come mostra l'immagine seguente:

Il blocco if si comporta nel modo seguente: se fotogramma (il contatore) è minore di 10, componi il nome con la formula "ago0"+fotogramma+".png", altrimenti usa la formula "ago"+fotogramma+".png", perché i per i valori di fotogramma da 10 in poi non serve più lo 0 (zero).

Come avete visto nelle lezioni precedenti il blocco if lo trovate nella categoria Control.

A questo punto per creare l'animazione dell'ago che gira dovete creare le strutture di blocchi seguenti. 

1) Struttura che permette di creare l'animazione per far girare l'ago della bussola in senso orario:

Il blocco Click del pulsante But_ruota_piu lo trovate  nella sezione Blocks, cliccando sul nome del pulsante.

 

2) Struttura che permette di creare l'animazione per far girare l'ago della bussola in senso antiorario:

Il blocco Click del pulsante But_ruota_meno lo trovate  nella sezione Blocks, cliccando sul nome del pulsante.

Per inizializzare lo schermo la prima volta che lanciate l'applicazione, con il primo ago, dovete usare il blocco seguente:

Il blocco Initialize lo trovate  nella sezione Blocks, cliccando sul nome dello schermo Screen1.

L'immagine seguente mostra la parte logica completa dell'APP Bussola:

Per eseguire l'APP Bussola, avviate l'emulatore aiStarter:

 

e avviate l'APP selezionando Connect e cliccando sul comando Emulator.

Se avete l'emulatore sul cellulare, per avviare l'APP dovete procedere come segue:

1) lanciare l'emulatore sul cellulare

2) selezionare Connect sul computer e cliccare sul comando AI Companion

3) Inserire oppure leggere con il QR code il codice visualizzato sul computer. 

L'immagine seguente mostra l'APP in esecizione:


<< Lezione precedente           Lezione successiva >>


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

Share Button

App Mania Lezione 8 - Gestione Sprite - I Parte - (Come far girare l'ago di una bussola)

Gino Visciano | Skill Factory - 16/04/2016 15:43:01 | in Tutorials

Benvenuti all'ottava lezione, in questa lezione imparerete a lavorare con gli Sprite. Gli Sprite sono immagini particolari che permettono di creare animazioni.

In questa e nella prossima lezione svilupperete l'APP BUSSOLA che permette di far girare un Ago sia in senso orario, che in senso antiorario.

Creare un'animazione significa visualizzare una dopo l'altra una sequenza d'immagini, con l'obiettivo di dare all'osservatore la sensazione del movimento. Quindi ogni immagine sarà leggermete diversa dalla precedente, come avvine con i fotogrammi delle pellicole dei film, nell'esempio seguente potete osservare una sequenza di 12 immagini che danno la sensazione di un ago che gira:

utilizzerete questa sequenza d'immagini per far girare l'ago della vostra bussola.

 

Come si usano gli Sprite in APP INVENTOR

Gli Sprite, in APP INVENTOR, possono vivere solo se posizionati all'interno di un Canvas, un pannello sensibile agli eventi generati dagli Sprite, tipo clic, spostamenti e collisioni tra Sprite.

Sia gli Sprite che i Canvas li trovate nella sezione Drawing and Animation del pannello Palette, come mostra l'immagine seguente.

Per usare gli Sprite, basta trascinare un Canvas nello Schermo attivo e poi aggiungere gli Sprite, trascinandoli nel Canvas.

 

Differenza tra immagini jpg e png

Le immagini con estensione jpg (JPEG = Joint Photographic Experts Group) e png (PNG=Portable Network Graphics) sono immagini compresse utilizzate per il Web.  La sostanziale differenza che esiste tra questi due tipi d'immagini è quella che le immagini di tipo png hanno lo sfondo trasparente, quindi se sovrapposte ad un'altra immag Gine, quella in secondo piano appare come sfondo. 

Guardate l'esempio seguente:

Sovrapponendo l'ago della bussola alla bussola, l'immagine è ancora visibile perché lo sfondo dell'ago è trasparente, se aveste fatto la stessa cosa con un'immagine di tipo JPEG la bussola non sarebbe visibile, perché in questo caso lo sfondo dell'ago non sarebbe trasparente.

I programmi più conosciuti per gestire questi tipi di immagini sono: Phtoshop e GIMP, se non avete già un dei due programmi, vi suggerisco d'installare GIMP, è gratuito e semplice da usare.

GIMP lo potete scaricare dal sito : www.gimp.org/downloads.

 

 

Come creare una bussola con l'ago che gira usando APP INVENTOR

Per iniziare posizionatevi sull'immagine seguente, premete il tasto destro del mouse e copiate l'immagine. 

Avviate GIMP, incollate l'immagine e salvatela con il nome bussola.jpg. Attenzione in GIMP per salvare un immagine in formato jpg dovete procedere nel modo seguente:

1) Aprite il menu File

2) Selezionate Esporta come ...

3) Scegliete la cartella in cui salvare

4) Scrivete il nome dell'immagine, in questo caso bussola.jpg

Adesso dovete creare la sequenza d'immagini che servono per far girare l'ago della bussola, quindi posizionatevi sull'immagine seguente, premete il tasto destro del mouse e copiate l'immagine, incollatela in GIMP e salvatela con il nome ago01.png. L'estensione png è importante perché le immagini degli aghi devono avere lo sfondo trasparente.

 

 

Per creare una sequenza d'immagini che permettono di impostare un'animazione per far girare un ago di 360°, occorrono 12 aghi, ciascuno con  una inclinazione di 30° in  più, rispetto al precedente.

Partendo dall'immagine ago01.png, con GIMP è semplice creare le altre 11 immagini, basta utilizzare lo strumento ruota, vediamo come:

1) Aprite l'immagine ago01.png

2) selezionate lo strumento ruota dal pannello degli strumenti

 

3) Cliccate sull'immagine

4) Ruotate l'immagine di 30° in senso orario e confermate cliccando sul pulsante RUOTA, come mostra l'immagine seguente:

5) Salvate l'immagine corrente, selezionando File, Esporta come ... e assegnategli il nome ago02.png

6) Ripetete i punti dal 2 al 5 per creare la sequenza delle 12 immagini.

L'immagine seguente mostra i 12 aghi ed i nomi associati.

 

 

Come impostare lo schermo dell'APP BUSSOLA e caricare le immagini per creare le animazioni

Collegatevi ad APP INVENTOR (https://ai2.appinventor.mit.edu) e create un nuovo progetto di nome bussola. Se non sapete ancora creare un progetto con APP INVENTOR leggete la lezione 1.

Quando siete nell'Area di Designer, eseguite le seguenti operazioni:

1) Trascinate nello schermo attivo un Canvas e chiamatelo Piano, per rinominare un componente basta selezionarlo nella sezione Components e cliccare sul pulsante Rename, come mostra l'immagine seguente;

2) Impostate le proprità Height e Width del Canvas con il valore Fill parent;

3) Trascinate nel Canvas attivo lo Sprite da utilizzare come sfondo della bussula e chiamatelo Bussola;

4) Impostate le proprità Height e Width dello Sprite con il valore 220;

5) Trascinate nel Canvas attivo lo Sprite da utilizzare per gli aghi e chiamatelo Ago_Bussola;

6) Impostate le proprità Height e Width dello Sprite con il valore 170;

7) Trascinate in fondo allo schermo attivo, un Layout orizzontale;

8) Trascinate all'interno del Layout un Button e chiamatelo But_ruota_piu ed impostate la proprietà Text con il valore Ruota+;

9) Trascinate all'interno del Layout un Button e chiamatelo But_ruota_meno ed impostate la proprietà Text con il valore Ruota-;

10) Trascinate all'interno del Layout una Label  e chiamatela Lab_fotogramma ed impostate la proprietà Text con il valore Fotogramma;

11) Trascinate all'interno del Layout una Label  e chiamatela Lab_display ed impostate la proprietà Text con il valore 0;

L'immagine seguente mostra l'aspetto finale dello schermo dell APP BUSSOLA:

Infine dovete caricare tutte le immagini, utilizzando l'UPLOAD della sezione Media, a destra dello schermo attivo, sotto la sezione Components, come mostra l'immagine seguente:

Nella prossima lezione, implementerete i blocchi per far girare gli aghi della bussola sia in senso orario, che in senso antiorario.


<< Lezione precedente           Lezione successiva >>


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

Share Button

Ricominciamo ... dal linguaggio SQL Lezione 9

Gino Visciano | Skill Factory - 14/04/2016 11:54:51 | in Tutorials

Benvenuti alla nona lezione, in questa lezione vedrete a cosa serve l'OUTER JOIN. Il Join esterno permette di rispondere alla domanda seguente:

"In un'operazione di JOIN tra gli elementi della Tabella A e quelli della Tabella B, quali elementi delle due tabelle non sono associati tra loro?"

Per vedere praticamente come funziona questo tipo di JOIN, inserite due LIBRI senza associare un GENERE e due GENERI senza associarli ad un LIBRO, eseguendo i comandi seguenti:

INSERT INTO LIBRI (CODICE_ISBN,TITOLO) VALUES ('8854505102', 'SHINING');

INSERT INTO LIBRI (CODICE_ISBN,TITOLO) VALUES ('8884516102', 'LA PIETRA FILOSOFALE');

INSERT INTO GENERI (GENERE) VALUES ('FANTASY');

INSERT INTO GENERI (GENERE) VALUES ('TRILLER');

 

Ci sono tre tipi di OUTER JOIN:

Il LEFT JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella A non associati alla Tabella B.

Ad esempio per visualizzare tutti LIBRI con i GENERI e quelli a cui non è stato associato un GENERE, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL

 

Il LEFT JOIN può anche visualizzare solo gli elementi della Tabella A non associati alla Tabella B.

Ad esempio per visualizzare tutti LIBRI  a cui non è stato associato un GENERE, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;

 

Codice_ISBN Titolo Genere
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL

 

Il RIGHT JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella B non associati alla Tabella A.

Ad esempio per visualizzare tutti LIBRI con i GENERI ed i GENERI non associati ad un LIBRO, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
NULL NULL FANTASY
NULL NULL TRILLER

 

Il RIGHT JOIN può anche visualizzare solo gli elementi della Tabella B non associati alla Tabella A.

Ad esempio per visualizzare tutti i GENERI non associati ad un LIBRO, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;

Codice_ISBN Titolo Genere
NULL NULL FANTASY
NULL NULL TRILLER

 

Il FULL JOIN permette di visualizzare sia gli elementi della Tabella A associati alla Tabella B, sia gli elementi della Tabella A e della Tabella B non associati tra loro.

Ad esempio per visualizzare tutti LIBRI con i GENERI e quelli a cui non è stato associati ad un GENERE e viceversa, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.GENERE FROM LIBRI L FULL JOIN GENERE G ON (L.Id_genere=G.Id);

Codice_ISBN Titolo Genere
8845247430 IO ROBOT FANTASCIENZA
8804550201 LA PAURA DI MONTALBANO GIALLI
8806176943 ODISSEA ROMANZI
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL
NULL NULL FANTASY
NULL NULL TRILLER

 

Il FULL JOIN può anche visualizzare solo  gli elementi della Tabella A e della Tabella B non associati tra loro.

Ad esempio per visualizzare tutti LIBRI  a cui non è stato associato un GENERE e viceversa, potete usare il comando seguente:

SELECT L.Codice_ISBN, L.Titolo, G.GENERE FROM LIBRI L FULL JOIN GENERE G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL AND G.Genere IS NULL;

Codice_ISBN Titolo Genere
8854505102 SHINING NULL
8884516102 LA PIETRA FILOSOFALE NULL
NULL NULL FANTASY
NULL NULL TRILLER

 

Attenzione, se il DBMS non gestisce il JOIN di tipo FULL, come accade con MYSQL, le soluzioni equivalenti sono le seguenti:

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id)
UNION
SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id);

SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L LEFT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL
UNION
SELECT L.Codice_ISBN, L.Titolo, G.Genere FROM LIBRI L RIGHT JOIN GENERI G ON (L.Id_genere=G.Id) WHERE L.id_genere IS NULL;


<< Lezione precedente           Lezione successiva >>


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


Share Button

SKILLBOOK LEZIONE 3 - Il "Training Manager"

Gino Visciano | Skill Factory - 08/04/2016 22:30:02 | in Tutorials

Benvenuti alla terza lezione, nella lezione precedente avete visto come il Training Manager associa alle COMPETENZE le ATTIVITA' DIDATTICHE per erogare CONTENUTI e TEST.

In questa nuova lezione vedrete in che modo il Training Manager crea e gestisce le AULE DIDATTICHE.

Per creare un AULA DIDATTICA si deve selezionare l'AREA FORMAZIONE e cliccare sul menu Area didattica, come mostra l'immagine seguente.

Per creare una nuova Aula ci sono due modalità:

1) Crea Aula da Evento

Questa modalità si può usare solo se esiste già un evento usato per promuovere l'Attività Didattica, il vantaggio  è quello che gli studenti che hanno prenotato l'evento e che sono stati selezionati, vengo aggiunti automaticamente all'Aula.

Per creare l'Aula da un Evento è semplice, basta cliccare sul pulsante Crea Aula da Evento ed attivare il pulsante Abilita Aula corrispondente all'Evento a cui s'è interessati, come mostra l'immagine seguente.

2) Crea Nuova Aula

Se non è già presente un Evento, per creare un'Aula, basta cliccare sul pulsante, Crea Nuova Aula e compilare la scheda seguente:

In questo caso gli Studenti, i Docenti ed i Tutor devono essere aggiunti manualmente, cliccando sulle icone:

L'immagine seguente mostra come si aggiungono gli Studenti all'Aula utilizzando il pulsante +Aggiungi partecipanti, nel pannello Aggiungi Studenti.

Dopo che sono stati aggiunti gli Studenti, i Docenti ed i Tutor per accedere all'Aula, cliccare sul pulsante ACCEDI ALL'AULA, come mostra l'immagine seguente.

L'immagine seguente mostra come si presenta l'Aula e tutte le Funzionalità disponibili.

Descrizione delle principali  Funzionalità dell'Aula

La Funzionalità Accedi all'Erogazione attiva l'Area dove sono disponibili tutti i CONTENUTI ed i TEST. Lo Studente che accede a quest'area può seguire le Lezioni ed accedere alle Risorse associate alle COMPETENZE. Una volta completata l'attività di studio lo Studente può certificare le competenze acquisite eseguendo i TEST associati alle competenze scelte.
 

Il Calendario permette agli Studenti di conoscere la programmazione delle Attività didattiche pianificate con i Docenti ed i Tutor. Questa funzionalità è molto importante per pianificare attiività in Aula Virtuale oppure In Presenza, Laboratori pratici, Project Work e Stage.

 

Il Registro permette di segnare le presenze e le assenze degli Studenti. Nel Registro si possono anche indicare le attività dei Tutor e dei Docenti ed il programma svolto. Si possono creare tre tipi di Registri in base alla modalità di rilevamento delle presenze: una sola volta al giorno, due volte al giorno, quattro volte al giorno, mattina e pomeriggio. Molto utile è il foglio di Riepilogo che permette di visualizzare la sintesi delle presenze e delle assenze di tutti.
 

La Bacheca è un Blog associato all'Aula, dove tutti i componenti possono pubblicare POST di qualunque tipo. Nel Blog gli studenti possono condividere Informazioni, Publbicare Foto oppure Immagini. La Bacheca è utilissima perché aumenta la capacità d'interazione tra gli Studenti, i Docenti ed i Tutor, offrendo maggiori possibilità di apprendimento di collaborazione.


L'Area Condivisa permette di utilizzare uno spazio disco, dove tutti gli Studenti, i Docenti ed i Tutor possono pubblicare File e Documenti da condividere. l'Area è strutturata in modo che tutte le risorse hanno a disposizione una propria cartella, per evitare conflitti oppure sovrascritture. Quest'area è utilissima soprattutto per i Docenti ed i Tutor, perché possono scambiarsi con gli Studenti qualunque tipo d'informazione.


A tutte le Aule è possibile associare una Chat di gruppo che permette di scambiare messaggi tra tutti i componenti. La Chat di gruppo si differenzia dall'invio dei messaggi, perché permette di condividere i messaggi con tutti i componenti del gruppo, mentre l'invio dei messaggio trasmette il contenuto ad un singolo destinatario. 

 

L'Immagine seguente mostra come si presenta la CHAT DI GRUPPO.

 


<< Lezione precedente


Share Button
TOP