Corso di Reti di Calcolatori Slides di completamento per i problemi più comuni riscontrati durante il corso Luigi Vetrano Rudimenti di HTML Basic Luigi Vetrano La struttura di base di un documento HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>Titolo del documento</TITLE> </HEAD> <BODY> <P>Testo di un paragrafo</P> </BODY> </HTML> Tag strutturali di base: HTML, HEAD e BODY 3 Un primo esempio <HTML> <HEAD> <TITLE>Il titolo del documento</TITLE> </HEAD> <BODY> <h1>Natale 2007</h1> <p> Il corpo del documento: contiene tutto cio` che il browser visualizzera` </p> </BODY> </HTML> 1. 2. 3. Scrivere questo in un file di testo Salvarlo come testo e con estensione html Visualizzarlo con il browser 4 Titoli e paragrafi • Titoli di diverso livello (fino a 6) <h1>Un titolo di primo livello</h1> <h2>Un titolo di secondo livello</h2> <h3>Un titolo di terzo livello</h3> <h4>Un titolo di quarto livello</h4> <h2>Un altro titolo di secondo livello</h2> • Paragrafi – <p>Questo è un primo paragrafo di testo</p> – <p>Questo è un secondo paragrafo di testo un po’ piu` lungo del primo</p> 5 Enfasi e grassetto Enfasi Questo e` molto <em>interessante</em>! Diverso da italico o grassetto che sono annotazioni stilistiche Questo e` molto <i>interessante</i>! Questo e` molto <b>interessante</b>! 6 Le immagini – <img src=“micio.jpg“/> – <img src="micio.gif" width="278" height="278" alt="il mio gatto preferito"/> – <img src="micio.gif" width="150" height="278" alt="il mio gatto preferito"/> – <img src="micio.gif" width="150" height="150" alt="il mio gatto preferito"/> • Come si catturano dal Web? 7 I collegamenti (link) • Per i collegamenti si usa il tag <a> con attributo href il cui valore è l’URL della pagina che vogliamo collegare. <a href="pagina.html">Pagina collegata</a> • Il testo tra <a> e </a> è il testo del collegamento che sarà visualizzato in blù e sottolineato dai browser. • Link assoluti e relativi: <a href="http://www.w3.org/">W3C</a> <a href="/index.html">Home</a> <a href="http://di.univaq.it/"><img src=“img/logo.gif"></a> 8 Liste numerate e non <ul> <li>il primo elemento della lista</li> <li>il secondo elemento</li> <li>il terzo elemento</li> </ul> <ol> <li>il primo elemento della lista</li> <li>il secondo elemento</li> <li>il terzo elemento</li> </ol> 9 Come andare a capo e introdurre spazi • Gli spazi e gli “a capo” nel file non servono – Per andare a capo si usa <br/> – Per introdurre spazi si usa il carattere speciale (spazio non "interrompibile"). • Esempi – Mario Rossi<br/> – Dipartimento di Informatica<br/> – Coppito 2<br/> – La bevanda più usata nel mondo e` la Coca Cola. 10 Tabelle <table border="1“> <tr><th>Anno</th><th>Vendite</th></tr> <tr><td>2000</td><td>18M</td></tr> <tr><td>2001</td><td>25M</td></tr> <tr><td>2002</td><td>36M</td></tr> </table> 11 Sistemi di numerazione Binario e Esadecimale Luigi Vetrano Sistema decimale • Sistema utilizzato dall’uomo per fare i calcoli: – un numero può assumere 10 valori compresi tra 0 e 9 – a seconda della posizione il numero assume un peso differente e viene moltiplicato per potenze di 10 crescenti, partendo dalla prima posizione a destra: • 1.a posiz. il numero viene moltiplicato per 1 (100) • 2.a posiz. il numero viene moltiplicato per 10 (101) • 3.a posiz. il numero viene moltiplicato per 100 (102) ecc. – esempio: 357 3x100 + 5x10 + 7x1 13 Sistema binario • Sistema impiegato dai computer e vari tipi di apparecchiature per fare i calcoli: – il bit può assumere 2 valori: 0 e 1 – a seconda della posizione il bit assume un peso differente e viene moltiplicato per potenze di 2 crescenti, partendo dalla prima posizione a destra: – 1a posiz. il numero viene moltiplicato per 1 (20) – 2a posiz. il numero viene moltiplicato per 2 (21) – 3a posiz. il numero viene moltiplicato per 4 (22) ecc. – esempio: 101 1x4 + 0x2 + 1x1 = 4+0+1 = 5 14 Pesi Binari 15 Calcolo di un valore 0x 8 VALORE : 4 0 9 32768 + 1024 + 8 + 1 = 33801 = 0x8409 16 Il byte • Rappresenta l’insieme di 8 bit – può contenere valori compresi tra 0 e 255 17 Sequenza di byte • Il byte più significativo è il primo a sinistra • Il byte meno significativo è l’ultimo a destra 18 Funzioni logiche di base: NOT • La funzione NOT inverte il valore del bit d’uscita rispetto a quello d’ingresso, ovvero ne fa il complemento 19 Funzioni logiche di base: AND • La condizione di avere 1 in uscita è vera soltanto quando tutti gli ingressi sono a 1 20 Funzioni logiche di base: OR • La condizione di avere 1 in uscita è vera quando un o più ingressi sono a 1 21 Il complemento • Fare il complemento a di un numero binario significa invertire il valore di tutti i bit 22 Rappresentazione esadecimale • Permette di rappresentare valori binari elevati senza dover scrivere lunghe sequenze binarie (0100 1101 1110 0111) • Si raggruppano sequenze di 4 bit e si scrive il valore in esse contenute (4 D E 7) • Una sequenza di 4 bit può assumere valori compresi tra 0 e 15 – per rappresentare il valore di una sequenza di 4 bit con una sola cifra dopo il numero 9 si usano le lettere: A, B, C, D, E, F • Il computer al suo interno lavora comunque solo con sequenze binarie 23 Rappresentazione esadecimale 24 The bitwise operators of C • Il linguaggio C non ha operatori per operazioni sui bit. – – – – AND operation is represented by the binary & operator. OR operation is represented by the binary | operator. XOR operation is represetned by the binary ^ operator. NOT operation is represented by the unary ~ operator. • The shift operations are performed by C’s << and >> binary operators. The << operator performs left shifts and the >> operator performs right shifts. 25 Le operazioni binarie and, or e xor Quando un’operazione sui bit viene applicata a numeri interi, l’operazione viene svolta sui bit corrispondenti. AND OR XOR x y 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 x 0 1 x&y x|y x^y Complemento ~x 1 0 26 Esempio : 46 & 13 • Per prima cosa convertire in binario entrambi i valori: 4610 = 00000000001011102 1310 = 00000000000011012 0000000000101110 & 0000000000001101 0000000000001100 = 1210 27 Bit Operations: Esempio x 0 0 1 0 0 1 0 1 37 y 1 1 1 1 0 1 1 0 246 x&y 0 0 1 0 0 1 0 0 x|y 1 1 1 1 0 1 1 1 247 x^y 1 1 0 1 0 0 1 1 211 ~x 1 1 0 1 1 0 1 0 218 36 28 Operatore OR ‘|’ • A volte si vede l’operatore | usato per combinare due schemi di bit. • esempio – Font.BOLD ha il valore 1, Font.ITALIC ha il valore 2. – La combinazione Font.BOLD | Font.ITALIC ha impostati a 1 sia il bit per il grassetto sia quello per il corsivo: 0000000000000001 | 0000000000000010 0000000000000011 = 310 • Font.BOLD Font.ITALIC Warning: Non confondete gli operatori per i bit & e | con gli operatori && e ||. Questi ultimi operano soltanto su valori di tipo boolean, e non sui bit di numeri. 29 Bit Operators vs Logical Operators • Logical operations: 37 && 246 → 1 37 || 246 → 1 ! 37 → 0 (T) (T) (F) • Bit operations: 37 & 246 → 36 37 | 246 → 247 ~ 37 → 218 30 Masking and Setting x b7 b6 b5 b4 b3 b2 b1 b0 28 0 0 0 0 0 x&28 0 0 0 b4 b3 b2 0 0 227 1 1 1 1 1 x|227 1 1 1 b4 b3 b2 1 1 1 0 1 0 1 0 31 operazioni di scorrimento • Oltre alle operazioni che operano su singoli bit, esistono anche tre operazioni di scorrimento che prendono lo schema di bit di un numero e lo spostano a sinistra o a destra di un certo numero di posizioni. • Esistono tre operazioni di scorrimento: scorrimento a sinistra (<<), scorrimento aritmetico a destra (>>) e scorrimento a destra bit a bit (>>>). • Lo scorrimento a sinistra sposta tutti i bit verso sinistra, inserendo zeri nei bit meno significativi. Lo spostamento a sinistra di n bit fornisce lo stesso risultato di una moltiplicazione per 2n. • Lo scorrimento aritmetico verso destra sposta tutti i bit a destra, propagando il bit di segno: quindi, il risultato è uguale a quello della divisione intera per 2n, sia per valori positivi che per valori negativi. • Infine, lo scorrimento a destra bit a bit sposta tutti i bit a destra, inserendo zeri nei bit più significativi (osservate la prossima slide). 32 Scorrimento Scorrimento a sx (<<) Scorrimento aritm. a dx (>>) Scorrimento bit-a-bit a dx (>>>) Nota: Il ‘C’ ha solo le prime due mentre Java le ha tutte e tre 33 Set e Check 1 << n • fornisce uno schema di bit in cui il bit n-esimo vale 1 (contando le posizioni a partire dalla posizione 0 del bit meno significativo). • Per impostare a 1 il bit n-esimo di un numero, eseguite l’operazione x = x | 1 << n • Per controllare se il bit n-esimo di un numero vale 1, eseguite la verifica if ((x & 1 << n) != 0) ... – Notate che le parentesi attorno all’operatore & sono necessarie, perché ha una precedenza minore degli operatori relazionali. 34 Shift Operations • Shift operators move bit patterns either left or right – 1 bit left: multiply by 2 – 1 bit right: divide by 2 x 0 0 1 0 0 1 0 1 37 x<<1 x<<2 x<<3 x>>1 x>>2 x>>3 35 Shift Operations • Shift operators move bit patterns either left or right – 1 bit left: multiply by 2 – 1 bit right: divide by 2 x 0 0 1 0 0 1 0 1 37 x<<1 0 1 0 0 1 0 1 0 74 x<<2 1 0 0 1 0 1 0 0 148 x<<3 0 0 1 0 1 0 0 0 40 x>>1 0 0 0 1 0 0 1 0 18 x>>2 0 0 0 0 1 0 0 1 9 x>>3 0 0 0 0 0 1 0 0 4 36 Bit manipulation in C /* ** Macro per la manipolazione dei bits in un ‘data type’. */ #define ToBOOL(x) (!(!(x))) #define BitSet(arg,posn) ((arg) | (1L << (posn))) #define BitClr(arg,posn) ((arg) & ~(1L << (posn))) #define BitFlp(arg,posn) ((arg) ^ (1L << (posn))) #define BitTst(arg,posn) ToBOOL((arg) & (1L << (posn))) Nota: Excerpt from ‘C-Snippets’ 37 Esempio di codice C che fa uso operatori short int s ; short unsigned u; s = −1; u = 100; u = u | 0x0100; s = s & 0xFFF0; s = s ^ u; u = u << 3; s = s >> 2; // assume that short int is 16−bit // s = 0xFFFF (2’s complement) // u = 0x0064 // u = 0x0164 // s = 0xFFF0 // s = 0xFE94 // u = 0x0B20 (logical shift) // s = 0xFFA5 (arithmetic shift) 38 Network byte order Il TCP/IP memorizza gli interi in notazione big endian (network byte order) indipendentemente dall’architettura degli hosts. Fortunatamente esistono nel TCP/IP delle librerie C dove ci sono funzioni che gestiscono il problema dell’endianness: – Esempio: • htonl() converte una double word (o long integer) dal formato host a quello network. • ntohl() esegue la trasformazione opposta. • Analogamente esistono: ntohs e htons per gli short 39 Come Determinare l’Endianness // // Si suppone che sizeof (short) = 2 // #include<stdio.h> int main() { unsigned short word = 0x1234; unsigned char p = (unsigned char ) word; if ( p == 0x12 ) printf ("0x%x -- Big Endian Machine\n",p); else printf ("0x%x -- Little Endian Machine\n",p); return 0; } 40 Lunghezza password Uppercase, Lower, Digits (62 chars) Uppercase, Lower, Digits, Punctuation (65 chars) Length = 5 19 minutes characters 1 day 8 days Length = 6 18 hours characters 65 days 2 years Length = 7 9 days characters 11 years 200 years Length = 8 241 days characters 692 years 19,000 years Length = 9 17 years characters 42,000 years 1.8 million years (STRONG) Lower Case (26 letters) 41