-+  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






 


« Luglio 2006 | Home | Settembre 2006 »

Commenti sospesi

Come forse avrete notato, i commenti al blog sono stati drasticamente (ma temporaneamente) disabilitati. Mi scuso per il disagio: stiamo cercando di ripristinare rapidamente il servizio.

Inviato da larsen alle 10:58 | Commenti (0)

Link! (29/8/2006)

Dopo la pausa estiva, ecco di nuovo il post con i link della settimana.

  • Plaggnet YAPC::EU Costruito su Plagger (e su cosa, se no ? :)), ecco l'aggregatore dei blog intorno a YAPC::Europe 2006, che si sta tenendo in questi giorni a Birmingham.
  • YAPC::Europe 2006 - Wiki Anche se non si è sul posto, in una certa misura, è possibile rimanere aggiornati su quello che sta succedendo.
  • KinoSearch Non è recentissimo (la prima versione è di Aprile), ma KinoSearch sembra un progetto interessante per arricchire con funzionalità di ricerca le proprie applicazioni.

Se vuoi contribuire alla raccolta settimanale di link per Perl.it manda una mail a larsen@perl.it, indicando i link che ti piacerebbe segnalare, con una breve descrizione per ciascuno.

Inviato da larsen alle 00:33 | Commenti (2)

Basta con programmi in stile Perl 3

Ecco un ottimo articolo di Curtis "Ovid" Poe da OnLamp.com.
Da tenere sotto il cuscino e mostrare agli amici che (probabilmente) scrivono in PHP... ;-)

http://www.oreillynet.com/onlamp/blog/2006/08/please_stop_using_perl_3.html

Anche in base alla mia personale esperienza, trovo che Perl abbia aiutato l'azienda in cui lavoro rendendo produttivo lo sviluppo, che in altri ambienti, magari più di "moda" - penso a JSP - sarebbe stato molto più costoso. E poi, senza CPAN!?

Per quanto riguarda la manutenibilità, abbiamo una base di più di 500,000 righe di codice a oggetti, in stile Perl > V3...

Inviato da Cosimo alle 15:30 | Commenti (3)

Un DBI più dolce con DBIx::Simple

Questo articolo fa in parte seguito a quello su SQL::Abstract che ho scritto poco tempo fa. Questa volta vorrei mostrare le caratteristiche di un piccolo modulo che lavora bene in simbiosi con quello sopra menzionato, ma che può anche essere utilizzato in maniera produttiva senza di esso: DBIx::Simple. Questo package fornice un'interfaccia più carina a DBI, e permette di utilizzare SQL::Abstract per costruire le query (ma non obbliga al suo uso).

DBI funziona perfettamente, ma a volte diventa noioso scrive il codice che lo utilizza: la maggior parte delle volte è necessario districarsi tra prepare_cached, execute e fetchall_arrayref (o qualcuno degli altri metodi dal nome lungo, a cui spesso bisogna anche passare dei parametri necessari). DBIx::Simple rende tutto questo... più semplice. Ad esempio, se si configura la necessità di ottenere alcune righe in un hashref si può semplicemente scrivere:

use DBIx::Simple;

my $db = DBIx::Simple->new(
    'dbi:mysql:database=mio;host=miohost', 'miouser', 'miapass'
);

my $res = $db->query(
    'select id, username, indirizzo from utenti where ruolo = ?',
    'cliente'
);

my $rows = $res->hashes;

Questo modo di operare non è molto dissimile da quello di DBI, ma risulta in codice più pulito. Per inizializzare l'oggetto DBIx::Simple si può passare una DSN al costruttore (come in questo caso), oppure un oggetto DBI se già se ne dispone - cosa peraltro piuttosto comune in una situazione in cui si sta migrando un'applicazione a DBIx::Simple, e dunque vi sono parti di codice che ancora utilizzano DBI.
$db->query è un metodo unificato che permette di eseguire qualsiasi tipo di query, restituendo un oggetto che ne è il risultato, e che è più o meno equivalente allo statement handler ($sth di solito) di DBI. Tuttavia nel caso di DBIx::Simple il risultato è più facile da manipolare, e fornisce alcuni metodi extra. Ecco qualche esempio di utilizzo:

my $row = $res->hash;        # reference all'hash di una singola riga
my $row = $res->array;       # reference all'array di una singola riga
my $rows = $res->hashes;     # reference all'array di tutte le righe
                             # (che sono hash)
my $rows = $res->arrays;     # reference all'array di tutte le righe
                             # (che sono array)

Qualunque di questi metodi può anche essere invocato in contesto di lista, cosicché restituisca un hash o un array al posto della reference ad esso. Ad esempio:

my %row = $res->hash;        # hash (contesto di lista)

Supponiamo ora di aver bisogno di ottenere tutte le righe (come nel nostro esempio) come hash, ma che tali righe siano contenute in un hash le cui chiavi siano il contenuto di una delle colonne. È sufficiente scrivere come di seguito:

my $rows = $res->map_hashes('username');
print join '-', $rows->{'username'};

Benché sia senz'altro possibile utilizzare la funzione map per ottenere gli stessi risultati, la presenza di un metodo pronto all'uso aiuta a tenere il proprio codice chiaro. Ci sono altri metodi per mappature simili a queste, si consulti la documentazione del modulo per maggiori informazioni.

Come ho scritto prima, DBIx::Simple si integra bene con SQL::Abstract. La query del nostro esempio potrebbe dunque diventare:

my $res = $db->select(
    'utenti',
    [qw/ id username indirizzo /],
    { ruolo => 'cliente' }
);

Un oggetto SQL::Abstract verrà automaticamente creato la prima volta che viene invocato un metodo che ne fa uso (naturalmente è necessario aver installato il modulo). È anche possibile fornire un oggetto proprio, scelta peraltro raccomandata poiché in questo modo è possibile sfruttare SQL::Abstract::Limit:

use DBIx::Simple;
use SQL::Abstract::Limit;

my $db = DBIx::Simple->new(
    'dbi:mysql:database=mio;host=miohost', 'miouser', 'miapass'
);

$db->abstract = SQL::Abstract::Limit->new(
    limit_dialect => $db->dbh
);

Esiste anche un metodo $res->text che è piuttosto utile per il debugging, poiché visualizza i risultati di una query in vari formati.

In definitiva, DBIx::Simple non fornisce funzionalità addizionali a DBI, ma è come zucchero sparso sopra esso (lo si sarebbe dovuto chiamare più appropriatamente DBI::Sweet). Il suo utilizzo rende il codice più leggibile, e più rapido da scrivere.

Inviato da arthas alle 15:42 | Commenti (0)

Link! (8/8/2006)

horizontal.flourish.png

  • Hiveminder Hiveminder è un tool per la gestione di TODO list, con tag, gestione gruppi, e così via. La cosa molto interessante è il fatto che si tratti di un progetto sviluppato da Audrey Tang per Best Practical, usando il framework Jifty. Da provare! (gli account sono free)
  • Planet Catalyst Come al solito basato su Plagger, Planet Catalyst è un aggregatore di blog che parlano di Catalyst
  • Perl.pt I monger portoghesi annunciano la nascita della loro associazione nazionale dedicata al Perl. In bocca al lupo!
  • Tu bussi, lui esegue "Uno sviluppatore IBM ha realizzato una utility in Perl per i laptop Lenovo dotati di accelerometro: basta bussare sul laptop ed è possibile impartire comandi. Per il momento solo su Linux" (_segnalato da ludan_)
  • The Commentator Non c'entra direttamente con il Perl, ma mi pareva divertente segnalarlo. E potrebbe diventare un progetto per Acme::... qualcosa :)

Se vuoi contribuire alla raccolta settimanale di link per Perl.it manda una mail a larsen@perl.it, indicando i link che ti piacerebbe segnalare, con una breve descrizione per ciascuno.

Inviato da larsen alle 13:58 | Commenti (1)

Link! (1/8/2006)

  • New CPAN option for sudo Ora si può configurare CPAN affinchè esegua il make install con sudo, anziché dover lanciare la shell come root. Comodo
  • Perl 6 is coming! Un articolo di Randal Schwartz su Pugs, l'implementazione di Perl 6 scritta in Haskell
  • v6-alpha 0.011 released - help wanted clkao, autore di svk, descrive in che modo si può cominciare a collaborare al progetto Pugs. Forse non è semplice come lo fa sembrare, ma tentare può essere divertente
  • White Camel Awards Nel corso di OSCON sono stati i premi della community Perl. I premi sono andati a Jay Hannah, per il suo contributo negli anni alla gestione di pm.org; a Josh McAdams, per aver creato Perlcast; e a Randal Schwartz, per "molte ragioni"
  • CVM - The CAPI Voice Mail System E' un demone scritto in c++ che sfrutta le librerie CAPI 2.0 (www.capi.org) per comunicare con Terminal Adapter ISDN; mette a disposizione una API in Perl con la quale poter dialogare direttamente con il TA e creare dei piccoli script per monitorare le chiamate fino a segreterie telefoniche interattive (__segnalato da jontk__)

Se vuoi contribuire alla raccolta settimanale di link per Perl.it manda una mail a larsen@perl.it, indicando i link che ti piacerebbe segnalare, con una breve descrizione per ciascuno.

Inviato da larsen alle 00:21 | 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