Digitale Libero

Oltre il solito Blog!



EnglishFrenchGermanItalianJapanesePortugueseRussianSpanish

Programmare in Perl – Tipi di variabili

16 maggio, 2012 (21:39) | Autore: neutrino | Argomento: Informatica, Programmare in PERL, Programmazione



Nel corso base di programmazione si è parlato delle variabili, del loro utilizzo nella stesura di un software e dell’importanza della corretta in inizializzazione e dimensionamento. Il Perl, essendo un linguaggio interpretato, viene meno a questa importante caratteristica ma non è da ritenere un difetto in quanto è l’interprete stesso a dimensionare le variabili nel modo corretto, l’unica cosa che dobbiamo ricordarci è di evitare di assegnare alla stessa variabile tipi di dati diversi, per esempio una volta un intero e dopo un dato di tipo long, anche perchè ci incasineremo la vita da soli non sapendo più la variabile che cosa contiene di preciso.

Possiamo dire che in Perl esistono tre tipi di variabili:

  • Scalar $ (Scalari come stringhe di testo, interi, numeri reali, ecc…)
  • Array @ (Lista di elementi ordinata, vettore)
  • Hash % (Array accessibili per chiavi)

Vediamo alcuni esempi:

1
2
3
$totasini = 20;
$moltiplicatore = 1.456;
$nome = "Pippo";

Come si può notare una variabile di tipo scalar presenta il simbolo del $ come primo carattere del nome, per l’interprete Perl questo tipo di variabile è ad considerare una stringa, se assegnamo un valore numerico alla variabile creata verrà considerato una stringa o un numero a seconda del contesto in cui viene utilizzata la variabile nel programma. Questo non è affatto limitativo perchè da una grossa mano al programmatore che non deve ricorrere al casting fra tipi come avviene con altri linguaggi di programmazione, come il Java per esempio.

Vediamo ora gli array:

1
2
@animali = (1,2,3,4); #inizializzo l'array
$animali[3] = "gatto"; #assegnamo una stringa nella posizione 3

In questo esempio, prima definisco l’array e poi vado a inserire una stringa nella posizione 3 dell’elenco.
Per definire un array si deve porre il simbolo @ come primo carattere del nome scelto, mentre per assegnare un valore ad una posizione o recuperarlo si deve mettere il simbolo $ come se fosse una variabile scalare. Lavorare con gli array è molto semplice e soprattutto comodo.

Vediamo ora le hash che a differenza degli array permettono di dare un nome alle posizioni dell’elenco, di seguito un esempio:

1
2
3
%frutta = ("tipo", "peso", "costo");
$frutta{frutta} = "mela";
$frutta{peso} = "1kg";

Come abbiamo visto  nell’esempio un hash si definisce ponendo come primo carattere del nome il simbolo % e per inserire un valore si pone il $ come per le variabili scalari.

Ora proviamo un po’ a giocare con i tipi di dati e a fare qualche esempio da eseguire sul PC, aprite l’editor Perl Express che vi ho fatto installare all’inizio del corso e scrivete quanto di seguito:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
$animale = "cane";
$insetto = "ape";
$numbanane = 10;
$nummele = 4;
#-------------------------------------------------------------
print ("Che animale ? " . $animale . "\n");
print ("Che insetto ? " . $insetto . "\n");
print ("Quante banane ? " . $numbanane . "\n");
print ("Quante mele ? " . $nummele . "\n");
#-------------------------------------------------------------
print ("Somma frutta: " . ($numbanane + $nummele) . "\n");
print ("Il " . $animale . " rincorre un " . $insetto . "\n");
#-------------------------------------------------------------
($animale, $insetto) = ($insetto, $animale);
print ("Che animale ? " . $animale . "\n");
print ("Che insetto ? " . $insetto . "\n");

Passiamo ora a spiegare lo script:

  • La riga 1 è soltanto una direttiva che indica al sistema dove trovare l’interprete perl, è obbligatoria su sistemi Linux mentre in Windows se ne può fare a meno
  • Le righe 2,3,4, e 5 non fanno altro che instanziare delle variabili scalari e assegnare un valore o una stringa. Si può anche non assegnare alcun valore iniziale ma sostengo sempre che sia una buona prassi da seguire per non lasciare delle variabili con contenuti non meglio definiti che, se richiamate nel codice dimenticandosi di assegnare un valore, potrebbero causare dei problemi. E’ meglio instanziarle con dei valori numeri come lo 0 o un stringa vuota (“”) per evitare bug non facili poi da trovare.
  • Le righe 7,8,9 e 10 non fanno altro che stampare a monitor il contenuto delle variabili, comando print che vedremo meglio più avanti.
  • La riga 12 stampa la somma delle due variabili numeriche mentre la 13 stampa il concatenamento delle due variabili che contengono le stringhe.
  • La riga 15 fa una piccola magia che pochi linguaggi di programmazione, Perl è uno di questi, sono in grado di fare; scambiare il valore di due variabili senza passare attraverso un altra variabile.
  • Le righe 16 e 17 stampano il risultato di quest’ultima operazione.

Per quanto riguarda l’argomento relativo agli array e alle hash, lo riprenderò più avanti in modo più completo perchè è un argomento complesso.

Per ora è tutto, alla prossima.

EnglishFrenchGermanItalianJapanesePortugueseRussianSpanish

Windows 7 – Collegare un hard disk di rete

1 aprile, 2012 (23:18) | Autore: neutrino | Argomento: Guide Windows, Informatica



Qualche giorno fa mi sono imbattuto in un problema legato alla connessione di un hard disk di rete (NAS) con Windows 7, ero convinto che fosse estremamente facile, in fondo col PC fisso che ha Windows XP ho impiegato pochi secondi, e invece ho passato diversi minuti a lottare con il sistema operativo.

Partendo dal fatto che il NAS l’ho configurato passando dal browser internet (Google Chrome per intenderci) accedendo all’indirizzo IP assegnato al dispositivo, il problema era che ogni volta che tentavo di collegare l’unità e inserivo la password e l’utente creato sul server NAS, Windows 7 mi ripresentava continuamente la finestra di log-in ma i dati che inserivo erano corretti, infatti con XP non avevo alcun problema di accesso.

A questo punto ho deciso di effettuare delle ricerche in internet per capire dove potesse essere il problema ma inizialmente ho trovato risposte poco convincenti e in alcuni casi completamente fuorvianti per non dire che chi scriveva era uno zero totale in informatica. Purtroppo si incontrano sempre più forum con gente che crede di poter snocciolare perle di saggezza informatiche pensando di avere sempre a che fare con gente più ignorante di se stessi. Alla fine ho trovato delle indicazioni, un po’ qua e un po’ la, circa il problema e la possibile soluzione.

Prima di tutto occorre premettere che, non so di preciso per quale motivo, Windows 7 non vede di buon occhio gli hard disk NAS che hanno a bordo il server SAMBA (SMB) di Linux per la gestione della rete e tentando di connettersi all’unità di rete vi restituirà sempre la finestra di log-in con scritto che la password di rete è errata.

Premesso questo il modo per poter ovviare a questo problema è disattivare delle opzioni legate alla sicurezza relative al tipo di connessione effettuata con il NAS. Le operazioni che vi mostrerò valgono per tutte le versioni di Windows 7 tranne la Starter Edition e la HOME che non ha installato il gestore che andremo ad utilizzare. Per le versioni STARTER e HOME l’unico modo per poter  accedere al NAS è creare nel server SAMBA un utente guest senza password, in questo modo si riesce ad accedere al NAS ma in modo non protetto. Iniziamo col selezionare il Pannello di controllo dal menù Start, Sistema e Sicurezza, Strumenti di Amministrazione. Comparirà la schermata seguente:

A questo punto un doppio click sulla voce Criteri di sicurezza locali e si aprirà la seguente finestra:

Doppio click sulla voce Criteri Locali e dalla seguente finestra fare  click sulla voce Opzioni di sicurezza :

Nell’elenco di destra ricercare l’opzione Sicurezza di rete: Livello di autenticazione LAN manager e cliccarci sopra due volte (il valore di default che Windows 7 assegna all’opzione è: non definita), dal menù a tendina che compare nella nuova finestra selezionare la voce Invia risposte LM e NTLM, cliccare su applica e poi su Ok. Il problema ora è risolto.

Per chi volesse ulteriori informazioni in merito basta consultare la guida di supporto da sito Microsoft al seguente indirizzo: Supporto Microsoft 823659

E tutto, a presto!

EnglishFrenchGermanItalianJapanesePortugueseRussianSpanish

Programmare in Perl – Uno sguardo alla sintassi

22 marzo, 2012 (23:30) | Autore: neutrino | Argomento: Informatica, Programmare in PERL, Programmazione



Un programma scritto in Perl è composto da una o più righe, dette statement, che generalmente terminano con il simbolo del punto e virgola e, rispetto ad altri linguaggi di programmazione, non è necessario creare una funzione principale (chiamata sempre main) per poter eseguire un programma. E’ sufficiente scrivere le istruzioni del programma e farle eseguire dall’interprete. Esempio di istruzione in Perl:

1
print ("Ciao mondo!");

Nella stesura del codice è possibile inserire anche dei commenti, io consiglio sempre di commentare il codice per ricordarsi che cosa fa una funzione o a cosa serva una determinata variabile. Ogni commento deve essere preceduto dal simbolo # (Hash nel gergo dei programmatori), un commento si scrive così:

1
# Questo è un commento

Gli spazi tra un’ istruzione e i dati che gestisce sono irrilevanti, infatti possiamo anche scrivere:

1
2
print ("Pippo");
print      ("Pippo");

Le due righe produrranno lo stesso risultato, chiaramente se immettiamo più spazi all’interno delle parentesi il risultato sarà diverso perchè andiamo a immettere un dato diverso.

La maggior parte degli editor che si trovano in rete specifici per programmare in Perl gestiscono la tabulazione delle righe di codice in modo automatico, non è un obbligo e l’interprete non restituisce alcun errore se non si rispetta questa regola, se così la si vuole chiamare, ma il codice diventa più comprensibile e soprattutto si individuano meglio le parti di codice che fanno parte di una determinata funzione. Il mio consiglio è quindi di editare il codice come nell’esempio successivo:

1
2
3
4
5
6
7
8
9
10
sub InitContPos {
    my $r1;
    my $c1;
    #print ("Riempimento con 0 della matrice posizioni occupate \n");
    for ($r1 = 0; $r1 < 9; $r1 ++) {
        for ($c1 = 0; $c1 < 9; $c1 ++) {
        $contpos[$r1] [$c1] = 0;
        }
    }
}

Scrivendo nel modo precedente si riesce a capire meglio l’annidamento dei due cicli “for”, si nota subito che l’istruzione $contpos[$r1][$c1] = 0 è all’interno del secondo ciclo “for” e che le due variabili $r1 $c1 e i due cicli “for” sono all’interno della funzione sub InitContPos delimitata dalla parentesi graffa aperta a fine riga ( { ) e dall’ultima parentesi graffa chiusa ( } ). La stessa cosa vale per i due cicli “for” che usano lo stesso sistema di parentesi per identificare  le righe di codice eseguite all’interno del ciclo stesso.

Se confrontiamo il codice scritto sopra con lo stesso scritto nel modo seguente si capisce quanto sia importante, per la manutenzione del codice, usare le tabulazioni in modo corretto.

1
2
3
4
5
6
7
8
9
10
sub InitContPos {
my $r1;
my $c1;
#print ("Riempimento con 0 della matrice posizioni occupate \n");
for ($r1 = 0; $r1 < 9; $r1 ++) {
for ($c1 = 0; $c1 < 9; $c1 ++) {
$contpos[$r1] [$c1] = 0;
}
}
}

Immaginate di avere centinaia di righe di codice scritte come sopra, vi sfido a districarvi tra le parentesi graffe e tra i vari cicli for, while, if e funzioni sub che potrebbero esserci.

Per quanto riguarda la sintassi e come scrivere il codice ho concluso, a presto!

EnglishFrenchGermanItalianJapanesePortugueseRussianSpanish

Programmare in Perl – Introduzione

29 febbraio, 2012 (08:49) | Autore: neutrino | Argomento: Informatica, Programmare in PERL, Programmazione



Il linguaggio di programmazione Perl, acronimo di Pratical Extraction Report Language, è stato creato nel 1987 da Larry Wall con il contributo di altri programmatori ed è uno tra i linguaggi di scripting più diffusi ed utilizzati. Perl è un linguaggio di tipo interpretato, ovvero si ha bisogno di un interprete Perl per poter eseguire i programmi creati, con molti moduli a disposizione col quale ormai si può fare praticamente tutto, dalle interfacce grafiche (Perl è nato come linguaggio di scripting per Shell) alla gestione di database, alla comunicazione tra reti informatiche e uno dei tanti punti di forza di questo linguaggio è la semplicità di stesura del codice unito alla potenza dello stesso.

Perchè ho scelto Perl?

  • E’ facile da imparare ed è adatto per iniziare a programmare
  • E’ completo
  • La stesura del codice è rapida
  • E’ uno dei linguaggi interpretati più veloci in esecuzione
  • E’ portatile, funziona su qualsiasi sistema operativo esistente
  • E’ incluso già nei sistemi Linux, Unix e Mac. Per Windows si possono scaricare Active Perl o Strawberry  Perl

In questo corso spiegherò tutti gli aspetti base di Perl fino alla programmazione avanzata con le interfacce grafiche e gli oggetti, l’intenzione è di guidare il lettore nella creazione di un piccolo applicativo toccando con mano la programmazione Perl con esempi che siano legati fra loro e portino ad un risultato finale.

Io sono un utilizzatore sia di sistemi Windows che Linux, per la programmazione preferisco Linux, ma per rendere il corso accessibile a qualsiasi lettore editeremo i programmi su ambiente Windows, quindi dobbiamo andare ad installare Perl che non è fornito di base con il sistema di Microsoft. L’interprete Perl più conosciuto è Active Perl ed è scaricabile al seguente link: Active Perl .

Scegliere la versione X86 se si sta usando Windows a 32 bit o la versione X64 se invece si sta usando un sistema Windows a 64 Bit. Nel dubbio scegliere la X86 che è adatta a tutti e due i sistemi.

Scaricato e installato Active Perl non ci resta che trovare un editor abbastanza semplice da usare, non ce ne sono molti a disposizione, e che ci permetta di avere la sintassi colorata a seconda delle parole chiave o istruzioni usate. Chi non ha mai programmato si domanderà perchè sia necessario avere le istruzioni scritte in colori diversi, è vero può sembrare superfluo, ma in un programma complesso diventa indispensabile individuare al volo le variabili e altri tipi di istruzioni tra le migliaia di righe scritte.

Con Windows io uso Perl Express che è gratuito e mi sembra funzioni anche molto bene ed è possibile configurare le colorazioni diverse per identificare appunto le variabili, le parole chiave e altro. Questo piccolo editor è scaricabile al link: Perl Express.

Una volta installato Active Perl occorre installare e configurare Perl Express, basta un doppio click sull’icona del file di installazione e premere il tasto next, non c’è bisogno di cambiare il percorso di installazione o altro, accettare la licenza d’uso e premere next alle successive domande. A fine installazione troveremo sul nostro desktop l’icona con il fulmine su una sfera azzurra, quello è Perl Express. Clicchiamo due volte per lanciare l’editor e poi dal menù scegliamo la voce “View” e poi “Option” per andare a modificare le opzioni dell’editor, questa è un’operazione da fare prima di iniziare ad usare Perl Express perchè bisogna essere sicuri che il percorso per richiamare l’interprete  Perl si corretto, altrimenti i nostri script non funzioneranno mai.

La prima finestra di opzioni che vi si presenta è relativa alla selezione dell’interprete Perl e se avete installato la versione di Active Perl per i computer con S.O. a 32 bit, la cartella dove si troverà il file Perl.exe (l’eseguibile dell’interprete) sarà “C:/Perl/bin/perl.exe” e il relativo file html per i risultati dei programmi sarà “C:/Perl/html/index.htm”, invece se avete scelto la versione X64 i percorsi saranno  “C:/Perl64/bin/perl.exe” e “C:/Perl64/html/index.htm”. 

Nella finestra delle opzioni sono presenti altre TAB, oltre a quella relativa ai percorsi per l’interprete Perl, che servono per adattare l’editor alle nostre necessità, la linguetta Editor permette di gestire vari aspetti relativi alla stesura del codice, per esempio la gestione delle tabulazioni e il fatto di vedere i numeri di riga. La linguetta Color/Fonts serve per modificare l’aspetto del testo scegliendo il tipo di carattere e il colore relativo ad ogni elemento del codice, come le variabili, il commenti e quant’altro. La linguetta File Template permette di creare un modello di documento che comprenda già delle righe chiave, come use o la riga dell percorso dell’interprete, che vengono usate spesso in modo tale da non doverle riscrivere sempre (possiamo mettere anche un commento relativo all’autore). L’ultima linguetta è Code Template che è simile al File Template ma serve per il riempimento automatico relativo a certe funzioni, per esempio è possibile dire all’editor come trattare il blocco di istruzioni if.

OK detto questo, come ogni corso di programmazione che si rispetti, scriviamo il nostro primo programma in Perl che ovviamente cosa farà?

Scriverà Ciao Mondo!

Quindi creiamo un nuovo documento cliccando nel menù su File e poi New (oppure CRTL + N) e scriviamo:

1
print ("Ciao Mondo!");

Clicchiamo sul pulsante con la freccia verde, che equivale al Run, e vedremo comparire la finestra dello standard output con il messaggio Ciao Mondo!

Ecco abbiamo fatto il nostro primo programma in Perl, che non fa nulla di eccezionale ma lo abbiamo scritto ed eseguito!

Dal prossimo articolo cominceremo a fare qualcosa di concreto, a presto!

EnglishFrenchGermanItalianJapanesePortugueseRussianSpanish

Corso Base Programmazione – Gli oggetti (OOP)

31 gennaio, 2012 (22:29) | Autore: neutrino | Argomento: Informatica, Programmazione



All’inizio la programmazione era strutturata, poi verso la fine degli anni ’80 alcuni linguaggi di programmazione come il C divennero estesi e orientati agli oggetti (OOP, Object Oriented Programming) e questo ha portato significativi cambiamenti sia a livello di stesura del codice sia per flessibilità e ottimizzazione del software creato. Programmare ad oggetti significa proprio creare una sorta di oggetti virtuali, per esempio i pulsanti di windows che siamo abituati a usare nelle applicazioni sono oggetti, che comunicano tra loro scambiandosi informazioni. L’ambito in cui si può notare di più l’utilizzazione degli oggetti e quello della realizzazione di interfacce grafiche per i software che usiamo tutti i giorni.

La programmazione ad oggetti implica la suddivisione di un programma in classi dove devono venire dichiarate le strutture dei dati e le procedure interne alla classe stessa. Le classi hanno attributi e metodi, permettono la creazione di oggetti e mediante l’ereditarietà è possibile creare nuove classi con le caratteristiche di quella originaria ma con funzioni estese. Il vantaggio di questo approccio alla programmazione è relativo al fatto che il programmatore che utilizza un oggetto creato da altri non ne manipola il codice e non tocca mai i dati con mano ma li fa gestire alle funzioni che sono associate alla struttura dati di quell’oggetto. Gli oggetti in programmazione sono paragonabili a quelli della nostra vita quotidiana, prendiamo ad esempio un telefonino:

Proprietà: colore, larghezza, altezza, spessore, peso

Metodi: composizione numeri per chiamata, invio SMS, invio MMS, gestione rubrica telefonica

Ogni linguaggio di programmazione usa delle parole chiave per creare (instanziare) un oggetto partendo dalla classe creata, e di solito la parola riservata per questo tipo di operazione è  new.

Quindi una volta definita la classe telefonino con i suoi metodi e le sue proprietà sarà possibile utilizzarla creando nuovi oggetti derivati dalla classe stessa. Ad esempio:

nokia = new telefonino

samsung  = new telefonino

In questo modo avremo due oggetti derivati dalla classe telefonino ma con nome diverso e, soprattutto, trattati in modo diverso anche per quanto riguarda l’allocazione in memoria.

Come ho accennato precedentemente la OOP prevede che l’utilizzatore di un oggetto possa conoscere solo i parametri essenziali che servono allo scopo finale dell’oggetto ma non può accedere ai parametri interni che ne regolano il funzionamento, in questo caso l’oggetto può avere tre tipi diversi di proprietà:

  • proprietà pubbliche che sono accessibili a qualsiasi classe del programma
  • proprietà private che inaccessibili alle altre classi del programma
  • proprietà protette che sono accessibili solamente alle sottoclassi dell’oggetto

La OOP implica anche il concetto di ereditarietà che definisce la possibilità di una classe di diventare erede di un’altra potendo così aggiungere dei metodi che la precedente non ha, in pratica la classe figlia (erede) diventa una specializzazione di quella genitore.

Un’altro concetto relativo alla OOP è dato dal polimorfismo, argomento abbastanza ostico per chi vi s’imbatte per la prima volta ed ha la sensazione di avere a che fare con dei mostri che cambiano e mutano sotto il proprio naso.  Il polimorfismo è basato proprio sul concetto di ereditarietà e ci premette di ridefinire le proprietà, funzioni, metodi della classe in modo che il loro utilizzo nella classe derivata sia diverso da quello della classe base.

Ritornerò sulla OOP per spiegarla meglio e con esempi concreti quando affronteremo la programmazione utilizzando un vero e proprio linguaggio che andremo ad imparare, questo linguaggio sarà il PERL.

Alla prossima.