-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 


« Settembre 2004 | Home | Novembre 2004 »

Ottimizzazione di script Perl

Sul sito DeveloperWorks di IBM c'è un nuovo articolo su Perl, che sembra interessante, e riguarda l'ottimizzazione di script. Il sommario dell'articolo promette bene:

"Perl is an incredibly flexible language, but its ease of use can lead to some sloppy and lazy programming habits. We're all guilty of them, but there are some quick steps you can take to improve the performance of your Perl applications. In this article, I'll look at the key areas of optimization, which solutions work and which don't, and how to continue to build and extend your applications with optimization and speed in mind."

Inviato da bronto alle 11:26 | Commenti (1)

ICJ, impressioni

Qualcuno si chiede, su it.comp.lang.perl, a proposito dell'Italian Code Jam:

"Allora... mi sono perso un evento storico?"

La risposta, mi duole dirlo, è "Sì". In effetti, a pensarci, il fatto che la risposta sia "Sì" non mi dispiace affatto. Avevo qualche timore: c'erano grandi aspettative, e so che la probabilità di essere delusi è proporzionale all'entità dell'aspettativa.

L'ICJ, almeno per quello che mi riguarda, è stato molto soddisfacente: relatori di fama internazionale, talk interessanti, quasi nessun intoppo tecnico/logistico, speaker e audience contenti (credo, spero).

Non pago, dedicherò il resto di questo post a rigirare il coltello nella piaga. Uomo avvisato...

Tra CodeJam, cene dei relatori, una cosa e l'altra, sono stato via tre giorni, un po' a Bologna e un po' Ferrara. Sono successe tali e tante cose che non possono nemmeno provare a narrarle tutte. Posso limitarmi a comunicare le mie impressioni, le cose che più mi hanno colpito, con la triste certezza che dimenticherò qualcosa. Ma esistono i commenti, e confido nel fatto che i miei pard mi soccorreranno, laddove gli occhi, la memoria o l'acume verranno meno.

Il CodeJam

Ahimè, non ho seguito tutto. Non sono in grado di fare un riassunto di ciò di cui i relatori hanno parlato. D'altro canto, il programma è online, e tutti gli atti lo saranno presto. In compenso sono preparatissimo sugli aspetti collaterali: la grande affluenza dei partecipanti, la disponibilità dei relatori, la mostruosa quantità di fotografie scattate durante l'evento che ora si perderanno nei vicoli della rete, l'espressione di entusiasmo dipinta sulla maggior parte delle facce che ho visto, gli applausi e, perchè no, le risate. Per dire: il talk di Allison Randal e il relativo question time (cui partecipa anche Larry Wall) si concludono. Rimangono ora soltanto le licenze Activestate da estrarre, e poi saluti e ringraziamenti. Dakkar sale sul palco per pilotare il suo software di estrazione. Mauro Tortonesi (con parole che non riferirò qui) fa notare che, per così dire, si potrebbe mettere sul palco qualcuno che catalizzi più attenzione. Dal pubblico viene rapidamente pescata una ragazza la quale, appena insediatasi come dea bendata, si auto-estrae come vincitrice di una delle licenze. Come diceva quel tale, mai fidarsi dei numeri pseudocasuali. Nessun broglio, comunque.

Larry Wall

Sento il bisogno di dedicare un intero paragrafo a Larry Wall. Qualcuno nella mailing list degli organizzatori ha detto che uno dei suoi sogni è stato realizzato, e ora si ritiene un uomo felice. Più o meno vale lo stesso anche per me, con la differenza che ora sono come una scolaretta felice. Larry Wall è molto simpatico, molto disponibile e molto intelligente. Il suo talk era divertente (applausi e risate a scena aperta), bizzarro e profondo al tempo stesso; ha fornito una visione della filosofia e della storia del Perl (compresa la storia futura) che ho trovato entusiasmante e d'ispirazione. L'unico rammarico, forse, è stata la velocità con cui ha dovuto trattare l'ultima parte su Perl 6: forse avrebbe potuto passarla in toto al talk di Allison, che aveva un taglio principalmente tecnico. Rimane il fatto che è stato estremamente interessante ascoltare dal vivo il punto di vista della persona che ha pensato e realizzato uno strumento tanto fortunato e potente.

L'inglese

Le mie difficoltà con l'inglese non si limitano al parlarlo, ma si estendono al capirlo. Ad esempio, Allison Randal mi chiede connettività wireless: tuttora non so come ho fatto a capire cosa volesse, e che parole abbia usato per chiedermelo. E ancora. Larry Wall e famiglia si erano insediati in una sala un po' più isolata. Larry coadiuvato da Geneva dava gli ultimi ritocchi al talk (qualcuno, maliziosamente, proponeva la tesi che lo stesse preparando sul momento). Gloria ricamava. Passo a vedere se han bisogno di qualcosa, mi chiedono un paio di caffè, e mi imbarco nel compito, superiore alle mie capacità, di spiegar loro che in Italia il caffè è corto e forte, e che non potrò portar loro un mezzo litro di acqua sporca, come mi pare si ami bere il caffè in America. Larry mi trae d'impaccio: "Italian coffee is small, isn't it?". "Yes". "Ok". Volo al bar, sgridandomi da solo: "Keep it simple, stupid!".

Intoppi

Come dicevo, è andato tutto bene, a parte qualche intoppo tecnico all'inizio (il buon giorno si vede dal mattino). Durante il talk di Randal Schwartz (il primo della giornata) l'immagine delle slide comincia a friggere, si distorce e scompare. Qui si vede la robustezza e la professionalità dell'apparato organizzativo (e di Randal, come relatore): vengono provati 4 (quattro!) proiettori, il tutto mentre merlyn continua a parlare. Mauro insinua il dubbio che sia in realtà il Powerbook ad avere problemi (e dopo 4 proiettori, nonostante la mia "fede" informatica, l'ipotesi pare convincente anche a me). Si riesce comunque a mettere le cose a posto, e Randal completa il suo talk (era il cavo video, alla fine). Successivamente, durante il talk di Dave Cross, salta il contatore dell'elettricità nell'aula conferenze. Un po' di corse tra aule e centralina ed è pollice verso l'alto, ancora una volta. Bravi.

Chi è arrivato fin qui e si aspettava una cronaca stringata a puntuale probabilmente non sarà soddisfatto. Mi scuso: non era mia intenzione. Non era mia intenzione soddisfarlo, intendo dire.

Prima di chiudere, ricordo l'ultimo episodio. ICJ sta per finire. Incrocio Fabio in giro per l'aula: oltre a tutto il resto, si era anche accollato il compito di scattare una serie di ritratti in bianco e nero agli speaker. Ci consultiamo rapidamente e stabiliamo che di tempo per gli intoppi ormai ce n'è poco: il CodeJam è andato bene. Murphy, che era di sicuro ad aspettarci dietro ad un angolo, ha trovato altro da fare. Decidiamo di rimandare strette di mano e i vari e reciproci convenevoli al dopo cena ("dopo il caffè e l'ammazzacaffè"), quando sarà veramente tutto finito.

Le strette di mano ci sono state, ma le ripeto idealmente. Grazie a tutti, e grazie di tutto. Ci si rivede al prossimo CodeJam :-)

Inviato da larsen alle 13:47 | Commenti (2)

Objective C... in Perl

Sull'ultimo numero di TPJ ho letto, e trovato piuttosto interessante, un articolo su ObjectivePerl. Questo modulo permette di utilizzare la sintassi di Objective C (o almeno qualcosa che le somigli) nella definizione e nell'utilizzo degli oggetti in Perl. Di fatto altro non è un wrapper che converte la sintassi ObjectivePerl in quella standard Perl.

In effetti, ed ora penso verrò fucilato, ho sempre trovato un po' bizzarra la sintassi dell'OOP in Perl, soprattutto per quanto concerne le variabili d'istanza e la definizione delle classi stesse. Per quanto io non sappia praticamente nulla di Objective C (e, da quanto ho visto, è un peccato) , ho cercato di utilizzare questo modulo. Mi è anche uscito fuori un po' di codice.

#!/usr/local/bin/perl

use strict;
use ObjectivePerl;

@implementation Strega
{
    @private: $anni;
    @protected: $grido;
}

+ new {
    return ~[$super new];
}

- anni {
    return $anni;
}

- grida {
    return $grido;
}

- setGrido: $sGrido {
    $grido = $sGrido;
}

+ info {
    return "Sono una strega!";
}

@end

La classe viene definita con @implementation, e subito sotto ad essa si possono indicare le variabili d'istanza, che possono essere private o protette: questa è una simpatica novità rispetto alla sintassi standard di Perl, che non permette delle vere e proprie variabili d'istanza, ma obbligata all'utilizzo di qualcosa tipo $self->{'grido'}.

Un'altra novità è rapprentata dalla possibilità di definire sia metodi statici che metodi d'istanza: i primi si definiscono utilizzano +, i secondi servendosi di -.

Ho anche scritto una classe Amelia, figlia della Strega appena definita:

@implementation Amelia : Strega
{
    @protected: $pianto;
}

- piangi {
    return $pianto;
}

- setPianto: $sPianto {
    $pianto = $sPianto;
}

+ info {
    return "Voglio derubare Zio Paperone!";
}

@end

Anche per quanto riguarda l'ereditarietà la sintassi è dunque piuttosto chiara e lineare, in perfetto stile Objective C. Ecco invece il codice che utilizza le classi sopra definite:

# Crea una strega
my $st = ~[Strega new];
~[$st setGrido: "He he he"];
print ~[$st  grida]."\n";
# Crea Amelia
my $am = ~[Amelia new];
~[$am setPianto: "Sniff!"];
print ~[$am  piangi]."\n";

Al di là della diversa sintassi, c'è una variazioni fondamentale rispetto a Perl standard: vengono utilizzati i messaggi anziché le chiamate ai metodi. Ciò crea alcune differenze: un oggetto può rispondere oppure no ad un messaggio, e chiaramente se viene inviato un messaggio non esistente non accade nulla. Cioè, utilizzando la sintassi Objective Perl, non viene sollevato alcun errore se si chiama un metodo inesistente.

Secondo l'autore di ObjectivePerl, l'overhead del modulo è molto basso, ed il suo utilizzo non mina dunque le performance dei propri programmi. In futuro verranno aggiunte altre cose, quali i protocols, ed il livello di visibilità (pubblico, privato, protetto) anche per i moduli.

Personalmente, trovo un tantino scomodo che quanto segue non funzioni:

@implementation Sasso
{
    @protected: $minerale;
}

+ new {
    my $self = ~[$super new];
    $minerale = "Basalto";
    return $self;
}

L'assegnazione di $minerale dà errore, poiché le variabili d'istanza non risultano accessibili dal costruttore, nemmeno dopo aver inizializzato la classe genitore.

Penso che ci studierò ancora un po' sopra, vediamo cosa ne esce. Leggendo la draft di questo articolo, Larsen mi ha fatto inoltre notare che sarebbe interessante mostrare nel dettaglio come i costrutti linguistici dell'Objective C assenti in Perl vengono resi grazie a questo modulo. Visto che io di Objective C non so molto (leggi: non so nulla), magari qualcuno vuole fornire il suo contributo... ;-)

Inviato da arthas alle 23:55 | Commenti (4)

Libri, che passione!

Vi segnalo che sul sito http://books.perl.org/ trovate una (probabilmente la più) nutrita "biblioteca" di libri sul Perl. Tramite il sito è possibile recensire e dare il proprio voto ai libri, ed ovviamente vedere recensioni e voti degli altri.

Il sito sembra molto ben fatto ed aggiornato: ha anche un'interessante sezione "prossime uscite".

cheers,
Aldo

Inviato da dada alle 16:04 | Commenti (0)

Perl è un linguaggio dinamico?


Segnalo un interessante white paper sul sito ActiveState che tratta in maniera abbastanza leggera, di quelli che chiama Linguaggi Dinamici, in sostanza i vecchi linguaggi di scripting, vantaggi rispetto ai linguaggi "enterprise" come Java, C#, C++, ...
Non l'ho ancora letto a fondo, mi sembra interessante. A voi.

http://www.activestate.com/Company/NewsRoom/whitepapers_ADL.plex

Inviato da Cosimo alle 20:44 | Commenti (0)

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google