CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things

64
Linux, Android e Internet of Things ITIS G.Galilei - San Secondo (PR)

Transcript of CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things

Linux, Android e

Internet of Things

ITIS G.Galilei - San Secondo (PR)

WHAT’S THIS?Corso di 20 ore frontali rivolto principalmente a docenti del settore ICT. Questo corso vuole essere una base di partenza per lo studio e l’utilizzo di nuove tecnologie che stanno sviluppandosi oggi giorno. L’idea è sviluppare le lezioni come un CodeDojo, ma rivolto a persone già con competenze informatiche.

Cosa vuole essere un “CodingGym”

HOW CAN I USE IT?● Base per ricerca ed integrazione successiva● Base per future lezioni● Lezione condivisa● Rinforzo di basi tecnologiche

FORSE NON SAPEVI CHE...

CoderDojo è un movimento rivolto soprattutto ai bambini. CoderDojo è una palestra, un luogo di apprendimento per scoprire i segreti della programmazione, ma non solo. “Coding”, ossia programmare con i linguaggi che strutturano la base di ogni sistema informatico;” “dojo” proviene invece dalla tradizione giapponese e vuol dire “luogo della via” ossia non una semplice palestra bensì un luogo in cui apprendere una mentalità, un modo di rapportarsi con computer e strumenti tecnologici che sempre di più influenzano la vita quotidiana di ognuno.

Chi sonoI am Mirko Mancin

Contatti:

[email protected]

mancio90 @loweherz90 loweherz

WEB: http://mancio.myds.me

dove trovare le slide● https://www.slideshare.net/mancio90/

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license.

Sono un Ph.D. Student presso il laboratorio WASNLab dell’Universtià di Parma e dal 2013 sono consulente ICT con alcuni progetti in attivo con diverse aziende del territorio.

1LINUX

Let’s start with the first set of slides

Linux

“Linux è una famiglia di sistemi operativi di tipo Unix-like, rilasciati sotto varie possibili distribuzioni, aventi la caratteristica comune di utilizzare come nucleo il kernel Linux.

L'ultima versione stabile del kernel Linux è la 3.18.3 ed è stata resa disponibile al pubblico il 15 gennaio 2015.

Grazie alla portabilità del kernel Linux sono stati sviluppati sistemi operativi Linux per un'ampia gamma di dispositivi:

▪ personal computer

▪ cellulari

▪ tablet computer e console

▪ mainframe

▪ supercomputer

ed esistono sistemi Linux installabili anche come server, router e sistemi embedded.”

WIKIPEDIA

Linux - l’architettura di Unix

Linux - caratteristiche

Unix è stato creato per grandi sistemi multiutente.

Multiutente e sicuro: Utenti normali non possono modificare i file degli altri (di default). In particolare, utenti normali non possono modificare impostazioni di sistema,né cancellare programmi,etc.

root: utente amministratore con tutti i privilegi

Caratteristiche principali:

● Multitasking

● Supporto per processori multipli

● Estremamente flessibile

● Interfaccia grafica (X Window)

● Supporto della rete

● Portabilità

● Scalabilità

Linux - il progetto GNU

GNU = GNU Non è Unix (un acronimo ricorsivo!) Progetto per implementare un sistema operativo come Unix, completamente libero

Iniziato da Richard Stallman nel 1984, un ricercatore del MIT, in un periodo in cui i sorgenti di Unix non erano più liberi Componenti iniziali: compilatore C (gcc), make (GNU make), Emacs, libreria C (glibc), coreutils (ls, cp ...)

Comunque, nel 1991, il progetto GNU non aveva ancora un kernel e veniva eseguito su macchine Unix proprietarie.

Kernel libero, tipo Unix creato nel 1991 da Linus Torvalds. L'intero sistema usa i tool della GNU: libreria C, gcc, binutils, fileutils, make, emacs... Così l'intero sistema si chiama “GNU/Linux”

Condiviso dall'inizio come software libero (licenza GPL), ha attirato sempre più contributi e utenti. Dal 1991, sta crescendo più velocemente di qualsiasi altro sistema operativo.

Linux - Distribuzioni GNU/LINUX

Le comunità linux si occupano di rilasciare versioni compatibili con il kernel, librerie C, compilatori

e diversi programmi utili... veramente un grosso lavoro!!!

I programmi sono disponibili in pacchetti che possono essere facilmente installati, rimossi o

aggiornati. La dipendenza dalle varie versioni è gestita automaticamente.

● Distribuzioni Commerciali: includono l'assistenza. I sorgenti sono liberi, ma i binari di solito

no.

● Distribuzioni Community: sia i sorgenti che i binari sono liberi. Nessuna assistenza di solito.

Non confondete la versione della distribuzione con la versione del kernel di Linux!

Linux - Distribuzioni commerciali

Red Hat: http://www.redhat.com/ La più popolare. Affidabile, sicura, facile da usare e da installare, supportata da tutti i venditori di hardware e software.

Suse (Novell): http://www.suse.com/ La principale alternativa. Facile da installare e da usare, stabile. supportata da tutti i venditori di hardware e software.

Mandriva (ex Mandrake): http://mandriva.com/ Facile da usare e da installare, più aggiornata ma meno stabile Più orientata ad utenti individuali. Poco supporto da parte del venditore.

Linux - Distribuzioni community

Fedora Core: https://getfedora.org/ Stabile, sicura, facile da usare e da installare. Frequenti aggiornamenti.

Ubuntu Linux: http://www.ubuntu-it.org/ Distribuzione in crescita. Basata su Debian ma rilascia una nuova versione ogni 6 mesi. Facile da usare. Ottima per chi inizia.

Debian: http://debian.org/ Molto stabile e sicura, ma più difficile da configurare e installare. Buona per gli sviluppatori, ma non ancora per gli utenti. Le nuove versioni non sono abbastanza frequenti (ogni 2 o 3 anni).

Linux - Distribuzioni ...

Linux è un progetto libero e aperto ai contributi esterni (fondamentali).

Esistono centinaia di distribuzioni (”distro”): sono sistemi operativi pronti all'uso, basati sul kernel Linux, che comprendono utility e suite di applicazioni.

Linux - Distribuzioni ...

Linux è un progetto libero e aperto ai (fondamentali) contributi esterni.

Esistono centinaia di distribuzioni (”distro”): sono sistemi operativi pronti all'uso,

basati sul kernel Linux, che comprendono utility e suite di applicazioni.

Linux - Distribuzioni Embedded

In informatica con Embedded Linux ci si riferisce a quell'insieme di distribuzioni linux concepite per essere utilizzate su sistemi embedded. Le caratteristiche principali di tali sistemi impongono dei vincoli molto severi al sistema operativo in termini di memoria flash occupata, memoria centrale necessaria, tempi di avvio brevi.

WIKIPEDIA

Alcune distribuzioni:

● Debian Embedded● OpenWRT● Angstrom● Zeroshell● Yocto

● Ubuntu Core Snappy (ad-hoc per IoT) (link)

Linux - Mettiamoci le mani sopra!!

Linux - Tutto è un file

● I file sono regolari ed i nomi dei file sono CASE SENSITIVE

● Le directory sono semplicemente file che elencano un insieme di file ● Link simbolici = File che si riferiscono al nome di un altro file ● Device e periferiche = Leggi e scrivi da dispositivi come fossero file

regolari ● Pipe “|” = Usati per mettere in sequenza programmi

es: cat *.log | grep error● Socket = Comunicazione tra processi

Linux - La shell

● E’ un programma che permette agli utenti di comunicare con il sistema attraverso una serie di comandi e di avviare altri programmi da linea di comando (CLI, Command Line Interface).

● Nei sistemi embedded Linux (e non solo) l'interfaccia grafica non è quasi mai disponibile.

● E' però sempre disponibile la shell, a cui possiamo accedere via tastiera e monitor, via seriale (in windows COM1, ecc... , in linux /dev/ttySx) o via rete (es. Ethernet).

● In Linux: bash (Bourne again shell).

Linux - ESEMPIO

Linux - accedere al filesystem

Filesystem: come sono memorizzati i dati in un dispositivo (hard-disk, dvd, ecc...).

Esistono diversi tipi di file system (NTFS, ext4, ecc...) ma tutti organizzano il contenuto dei dischi con una struttura ad albero con radice / (root) ,nodi (directory) e foglie (file).

Linux - accedere al filesystem

Il prompt: username@my-laptop:~$

▪ Dove sono? pwd

▪ Cosa contiene la cartella corrente? ls

Linux - accedere al filesystem

● Cambiare directory: cd, ○ Es: cd dir, cd .., cd /

(.. e . = file speciali che rappresentano la directory padre e la directory corrente, rispettivamente)

● Creare una directory vuota: mkdir ● Creare un file vuoto: touch ● Cancellare un file: rm ● Cancellare una directory: rm -r● Copiare un file o directory: cp [-r] ● Spostare (e rinominare): mv● Creare un collegamento: ln -s

In Linux un collegamento così creato viene chiamato soft, ovvero simbolico. Funziona sia per i file che per le directory. I collegamenti sono trasparenti ai comandi.

● Cambiare i permessi, il gruppo o il proprietario di un file: ○ chmod XYZ <filename>

○ chown <owner> <file>

○ chgrp <group> <file>

ATTENZIONE: I file e le directory che iniziano con . sono invisibili all'utente (per visualizzarli ls -a)

Linux - in generale...

nome -opzioni argomenti

esempio: ls -l temp.txt

convenzione nella sintassi dei comandi:● se un’opzione/argomento può essere omesso, si mette tra quadre:

[opzione]

● se due opzioni/argomenti sono mutamente esclusivi, vengono separati da |: arg1 | arg2

● quando un argomento può essere ripetuto n volte, si aggiungono tre puntini dopo tale argomento: arg...

PER ALTRI COMANDI VEDERE LA SEGUENTE GUIDA:http://sisinflab.poliba.it/giannini/SO/Comandi_shell_bash.pdf

Linux - SUDO

Sudo (Superuser Do) e' uno strumento che consente all'amministratore di sistema di attribuire adutenti o gruppi specifici la facolta' di eseguire determinati comandi con i privilegi di superuser(root) o un utente diverso pur non essendo a conoscenza della relativa password.

Su alcuni sistemi (come ad esempio Slackware) solamente l'utente root puo' riavviare/spegnere la macchina edin questo caso potremo utilizzare sudo per permettere ad un utente 'generico' di far ciò.

Oppure in Ubuntu per esempio, non si puo' accedere direttamente al sistema con l'utente root ma e' necessariologgarsi con un utente non privilegiato ed utilizzare il comando sudo per eseguire manzioni amministrative.

L'applicazione e' in grado di registrare sia i comandi che gli argomenti digitati dagli utenti.

Questa applicazione è disponibile per tutte le distribuzioni e non sara' quindi un problemainstallarlo. Con ubuntu/debian basterà digitare (come utente root):

apt-get install sudo

Per configurarlo è necessario editare il file 'sudoers' tramite un apposito editor(esempio ‘nano’).

Linux - ESERCIZIO

1.a. Creare un fileb. Creare una directoryc. Creare all'interno della directory un collegameno al file creatod. Verificare il collegamento con ls <...>e. Creare un file nascostof. Verificare con ls <...>g. Cancellare tutto.

Linux - ESERCIZIO

2. a. All'interno della vostra home directory create due directory

denominate “uno” e “due”.b. Copiate il file /etc/profile nella directory uno, conservandone il

nome. c. Copiate il file /etc/profile nella directory due cambiandone il nome in

copia-profile. d. Spostate il file profile nella directory due ed il file copia-profile nella

directory uno. e. Cancellate i due file con uno stesso comando. f. Cancellate le due directory vuote. g. Verificate il funzionamento di touch per la modifica dell'orario di

ultimo accesso e per la creazione di un file vuoto

Linux - installazione dei pacchetti

Il metodo più diffuso per installare un programma è utilizzando uno dei gestori di pacchetti offerti dalla distribuzione che si sta utilizzando.

● Ubuntu/Debian

○ Modalità grafica: Software Center / Synaptic

○ Modalità testuale: Aptitude / apt-get

● Fedora

○ Modalità grafica: PackageKit

○ Modalità testuale: yum

● OpenWRT

○ Modalità testuale: opkg

Tuttavia, benché gli archivi dei pacchetti sono molto vasti, è possibile che un programma che si desideri installare non sia disponibile negli archivi di Ubuntu. Quando questo si verifica è possibile scaricare dal web il pacchetto e installarlo successivamente.

Linux - installazione dei pacchetti .deb

Questi file sono i pacchetti Debian. I pacchetti associati con Ubuntu hanno come estensione .deb,

data la stretta relazione di Ubuntu con la distribuzione Debian. Per installare un file .deb sono

necessari i privilegi di amministratore.

1. Per installare un file .deb, fare doppio-clic su di esso e poi selezionare Installa pacchetto.

2. In alternativa è possibile installare un file .deb da un terminale digitando:

sudo dpkg -i pacchetto_file.deb

3. Per rimuovere un pacchetto .deb deselezionarlo all'interno del gestore di pacchetti oppure da

un terminale digitare:

sudo dpkg -r nome_pacchetto

Linux - installazione dei pacchetti .rpm

Un altro tipo di pacchetto è il Red Hat Package Manager la cui estensione è .rpm. Un

.rpm può essere convertito in un .deb per Ubuntu utilizzando il programma alien.

1. Installare il programma alien

(per Ubuntu/Debian: sudo apt-get install alien)

2. In un terminale eseguire, con privilegi di amministratore, il seguente comando:

sudo alien file_del_pacchetto.rpm

Linux - installare un tarball o uno zip

I file con estensione .tar.gz o .tar.bz2 sono pacchetti conosciuti come tarball, molto in uso in Linux

e Unix.

Se non esiste un pacchetto per Ubuntu in nessuno dei repository di Ubuntu, è possibile installare

e disinstallare un tarball dalla riga di comando seguendo le istruzioni fornite con ciascun

pacchetto.

I tarball solitamente contengono il codice sorgente del programma e devono quindi essere

compilati per poterli utilizzare. Per fare questo è necessario del software aggiuntivo.

Per estrarre questi archivi ci sono i seguenti comandi:

● ZIP > unzip archive_name.zip

● TAR.GZ > tar -zxvf archive_name.tar.gz

● TAR.BZ2 > tar -jxvf archive_name.tar.bz2

Linux - esercizio

Installare un pacchetto a piacere da command line e/o da packet manager

● Editor di testo (gedit, kate)● Tool di sviluppo (java, python)● IDE (Arduino, Eclipse)● Codec e player video (vlc)● Gestore di immagini (gimp)● Programmi di file sharing (amule, jdownloader)

Provare:▪ ARDUINO IDE - http://arduino.cc/en/Main/Software▪ VLC - http://mirrors.kernel.org/ubuntu/pool/universe/v/vlc/vlc_2.0.8-

0ubuntu0.12.04.1_i386.deb

2Concetti di reti

Lo stack ISO/OSI,i protocolli di retee verso le nuvole...

Lo stack protocollare

I protocolli su internet

I protocolli su internet - esempi

Indirizzo IP

● Cos’è un indirizzo IP?L'identificazione dei dispositivi di rete su Internet e all'interno delle reti domestiche è affidata al protocollo IP.

● IP Pubblico e IP Privato

Un IP pubblico o esterno è un codice identificativo univoco che l'ISP (Internet provider service, fornitore dei servizi Internet) assegna ad ogni utente appartenente alla sua rete. È utilizzato per identificare la rete casalinga (composta da uno o più dispositivi di rete) in Internet e permette, ad esempio, di mettere in comunicazione due computer (client e server o due nodi paritari all'interno di una rete peer-to-peer) non appartenenti alla stessa LAN.

Gli indirizzi IP sono utilizzati anche per identificare i dispositivi di rete appartenenti ad una stessa Local Area Network. In questo caso si parlerà, però, di IP privato. L'assegnazione degli indirizzi è deputata al router e può avvenire in maniera automatica (attraverso il protocollo DHCP) oppure manuale, ad opera del gestore della rete locale. Questo permette di identificare univocamente ogni dispositivo di rete all'interno di una rete locale, ma non al suo esterno: i blocchi di indirizzi IP privati sono comuni a tutti i router del mercato e uno stesso indirizzo può essere utilizzato per identificare dispositivi di rete diversi, purché si trovino collegati a network differenti.

● Dove trovo l’indirizzo IP del mio PC/Device?$ifconfig

● Dove trovo il mio indirizzo pubblico?

http://www.mio-ip.it/

Porte

Le porte sono lo strumento utilizzato per realizzare la multiplazione delle connessioni a livello di

trasporto, ovvero per permettere ad un calcolatore di effettuare più connessioni contemporanee verso

altri calcolatori, facendo in modo che i dati contenuti nei pacchetti in arrivo vengano indirizzati al

processo che li sta aspettando.

LISTA PORTE STANDARD

Port Service Protocol Descrizione

20 ftp-data TCP/UDP File Transfer Protocol (TCP) – Default Data

21 ftp-data TCP/UDP File Transfer Protocol (TCP) – Control

22 ssh TCP Secure Shell (SSH) – Remote Login Protocol

23 telnet TCP Telnet

25 smtp TCP Simple Mail Transfer Protocol (SMTP)

53 domain TCP/UDP Domain Name Service (DNS)

80 http TCP Hypertext Transfer Protocol (HTTP)

110 pop3 TCP Post Office Protocol Version 3 (POP3)

111 nfs TCP NFS

443 ssl TCP Hypertext Transfer Protocol over TLS/SSL

Le porte superiori a 1024 sono disponibili per applicazioni personalizzate non

riconosciute dallo IANA.

Utilizzo del protocollo SSH

L'SSH un protocollo che permette di collegarsi ad una macchina in maniera sicura ed averne un controllo totale.

Per collegarsi in SSH è necessario utilizzare software appositi, a seconda del sistema operativo che viene utilizzato sul proprio computer locale.

Per connettersi in SSH sulla macchina, è necessario disporre di due informazioni:

● Ip della macchina (o il nome della macchina),

● L’username e la password della macchina.

Esempio di collegamento con OpenSSH:

$ ssh root@bmw

The authenticity of host 'bmw (213.186.32.1)' can't be established.

RSA key fingerprint is a9:bb:55:35:86:4d:ca:81:7f:9e:2b:2c:79:10:96:3c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'bmw,213.186.32.1' (RSA) to the list of known hosts.

Password:

$

Quando ci si collega, il vostro client SSH riceve una RSA key fingerprint che è la chiave digitale del server su cui si effettua la connessione. Questa chiave sarà verificata ad ogni nuova connessione. Se viene modificata sarete informati, ma questo significa anche che è cambiato qualcosa nella macchina: la macchina è stata reinstallata, il server ssh è stato reinstallato, vi state collegando da un'altra macchina. Alla prima connessione dovete accettare la memorizzazione della chiave digitale sul vostro posto di lavoro nel client SSH.

Su Windows

● Putty (gratuito). Per saperne di più, potete consultare la guida sull'Utilizzo di Putty.

● Securecrt (a pagamento).

Su Macintosh

● NiftyTelnet 1.1 SSH.

● DataComet.

Il terminale viene fornito con Mac OSX ed è sempre installato sul disco. Potete trovare alcune informazioni a questo link.

Su Linux

● OpenSSH (gratuito).

● La shell di Linux.

Utilizzo del protocollo SSH

...sulle nuvole... Cloud Computing

In informatica con il termine inglese cloud computing (in italiano nuvola informatica) si indica un insieme di tecnologie che permettono, tipicamente sotto forma di un servizio offerto da un provider al cliente, di memorizzare/archiviare e/o elaborare dati (tramite CPU o software) grazie all'utilizzo di risorse hardware/software distribuite e virtualizzate in Rete in un'architettura tipica client-server. (Wikipedia)

?

● SaaS (Software as a Service) - Consiste nell'utilizzo di programmi installati su un

server remoto, cioè fuori dal computer fisico o dalla LAN locale, spesso attraverso un

server web. Questo acronimo condivide in parte la filosofia di un termine oggi in

disuso, ASP (Application service provider).

● DaaS (Data as a Service) - Con questo servizio vengono messi a disposizione via web

solamente i dati ai quali gli utenti possono accedere tramite qualsiasi applicazione

come se fossero residenti su un disco locale.

● HaaS (Hardware as a Service) - Con questo servizio l'utente invia dati a un computer

che vengono elaborati da computer messi a disposizione e restituiti all'utente

iniziale.

● PaaS (Platform as a Service) - Invece che uno o più programmi singoli, viene

eseguita in remoto una piattaforma software che può essere costituita da diversi

servizi, programmi, librerie, etc.

● IaaS (Infrastructure as a Service) - Utilizzo di risorse hardware o virtuali in remoto.

La caratteristica dello IaaS è che le risorse vengono istanziate su richiesta o domanda

al momento in cui una piattaforma ne ha bisogno.

...sulle nuvole... Cloud Computing

Linux - ESEMPIO

Amazon Web Servicehttp://aws.amazon.com/

Azure Microsofthttps://manage.windowsazure.com/

3Internet of Things

Tutti ne parlano…ma cos’è questo Internet delle cose?

Internet of Things

• Evoluzione di Internet per la connessione in rete di piccoli dispositivi intelligenti

• Fattori evolutivi di IoT

• tecnologie diverse tra loro devono essere in grado di comunicare in modo trasparente

• enorme quantità di informazione a disposizione (social network, sensori, attuatori, ecc.)

• necessità di maggiore connettività

• Uso di IP

Internet of Things

Internet of Things - Visione

Integrated, Shared & Seamless Connectivity

(WiFi, ZigBee/802.15.4, 3G/LTE)

Security

for

Auth

orization f

or

multip

le a

ccesses

Smart Objects

(Data producers and Data Consumers)

Data Collection & Processing

(Business Intelligence, Data Mining, Data Aggregation, etc ...)

Services

(Mobility, Energy Efficiency, Monitoring, Security, etc ..)

Internet of Things

Internet of Things - protocolli applicativi

● CoAP: Constrained Application ProtocolE’ utilizzato per sensori e device con risorse limitate in termini di risorse e potenza collegati in rete.

● XMPP (Extensible Messaging and Presence Protocol)E’ un insieme di protocolli aperti di messaggistica istantanea e presenza basato su XML. Nasce per applicativi di Instant Messaging,ma può esserte utilizzato anche in IoT.

● MQ Telemetry Transport

E’ adatto all’IOT perchè è stato progettato per minimizzare il comsumo di energia e la dimensione dei pacchetti scambiati.

Internet of Things - formati dati: JSON

E’ un formato dati testuale basato su struttura chiave-valore. Si è diffuso dal 2005 ed è diventato una valida alternativa all’XML perchè è semplice, leggibile e sintetico.

NoiseParking Slot

Internet of Things - formati dati: JSON

http://www.json.org/

Internet of Things - formati dati: JSON

Tipi di dato supportati:● Numeri: interi e decimali● Boolean: true, false● Stringhe: delimitate dalle virgolette (“)● Array: di dati primitivi e oggetti complessi

E’ language-indipendent, ogni linguaggio ha metodi per:

● Serializzare: trasformare oggetti, strutture dati e variabili in una stringa JSON

● Deserializzare: trasformare una stringa JSON in oggetti o strutture dati del linguaggio che stiamo utilizzando (PHP, Java, Javascript).

● Smart Parking - rete di sensori intelligenti per monitoraggio dei parcheggi

Internet of Things

● Smart Toys - giocattoli intelligenti per interazione in parchi di divertimento o

ambienti casalinghi

Internet of Things

Internet of Things

● Smart Plants - Sensori per il monitoraggio di piante e giardini

Internet of Things

● Smart Home Building - rete eterogenea di dispositivi per l’automazione

avanzata di dispositivi

Internet of Things

● Smart City - una città sostenibile rivolta ai cittadini come insieme di molteplici

infrastrutture e servizi intelligenti (citizen in the loop)

Internet of Things - Smart Object

Voilà Demo

Arduino NodeDHT22 (Temperature + Humidity)Arduino NodeSound Sensor

Arduino NodeLight Sensor

IoT Hub

Service DiscoveryJoin

Service Advertisement

Data

Fetcher Service DiscoveryData Fetching

Smart Display Update

Thanks!ANY QUESTIONS?

You can find me at:

[email protected]

CREDITS

Special thanks to all the people who made and released these awesome resources for free:

▪ Busy Icons by Olly Holovchenko

▪ Presentation template by SlidesCarnival

▪ Photographs by Unsplash

▪ Source slide

▪ http://wasnlab.tlc.unipr.it

This template is free to use under Creative Commons

Attribution license. If you use the graphic assets (photos,

icons and typographies) provided with this presentation you

must keep the Credits slide.