IGWiki Main Page

Indice Argomenti
   

Ricerca pagine

SourceForge Logo

IGSuiteL'uso dei moduli Perl in IGSuite (Documento scaduto)
  Modifica PaginaStorico paginaProprietàGet PdfCalcTranslatorVisualizza il documento in formato stampabile.Posso Aiutarti

Spaghetti Hack

I moduli Perl sono come gli ingredienti di un buon piatto. E' possibile combinarli per cucinare portate di ogni tipo, oppure combinarli per creare ulteriori ingredienti, come il sugo di un buon piatto di spaghetti. E come per la preparazione degli spaghetti, possiamo comprare un sugo già pronto, o prepararlo da noi utilizzando tutti gli ingredienti che lo compongono.

Fare gli spaghetti con un sugo pronto o con uno preparato da noi ha rispettivi pregi e difetti: nel primo caso utilizzando il sugo già pronto ci possiamo dedicare ad altri aspetti del piatto, concentrando i nostri sforzi sull'obiettivo primario che rimane "servire un piatto di spaghetti". Inoltre possiamo affidare la cottura degli spaghetti anche ad altri cuochi che conoscendo il sugo ne faranno lo stesso uso che ne faremmo noi.

Quando invece decidiamo di non usare un sugo già pronto, subentrano maggiori difficoltà per le quali però occorre prendere in considerazione i seguenti aspetti:

  • Il sugo che useremo se pur comprato (e quindi utilizzato da tantissime persone) sarà buono ?
  • Ammettendo che il sugo sia buono, perché non provarne una variante visto che TMTOWTDI ?
  • I sughi pronti hanno ingredienti all'interno che non possiamo togliere. Magari proprio quegli ingredienti che in genere non riusciamo a digerire e che rendono il sugo pesante.


Tutto questo, porta inevitabilmente a dedurre che entrambi i metodi sono validi, ma che si adattano meglio in relazione alla problematica che dobbiamo affrontare. E allora quando l'uno e quando l'altro?

Sicuramente sceglieremo di cucinare il nostro sugo quando:

  • vogliamo ottenere un prodotto su misura che meglio si adatti al tipo di pasta;
  • vogliamo che sia digeribile e quindi leggero anche al costo di una preparazione più lunga;
  • vogliamo essere pronti a situazioni in cui il sugo pronto non è disponibile


Quest'ultima considerazione ci deve far riflettere su un aspetto. Se mai impariamo a cucinare il sugo, il giorno che troveremo il supermercato chiuso, potremmo trovarci veramente in mezzo ai guai!

C'è poi una terza possibilità, e cioè quella di utilizzare un sugo pronto, ma di aggiungere qualche spezia per insaporirlo a nostro gusto.

In IG sono state adottate tutte le soluzioni sopra esposte, abbiamo utilizzato moduli di CPAN lasciandoli inalterati, abbiamo preso moduli da CPAN e li abbiamo leggermente modificati affinchè fossero adatti ai nostri scopi, ed infine abbiamo scritto alcuni moduli from scratch, prestando particolare importanza per ognuna delle soluzioni adottate ai seguenti obiettivi:

  • Prestazioni
  • Portabilità
  • Facilità di installazione

Purtroppo non tutti i moduli Perl in CPAN offrono tali caratteristiche. Ci sono moduli pesantissimi che inglobano centinaia di metodi e per i quali la maggior parte delle volte ci si trova ad usare il 5% delle features. Ci sono moduli che non funzionano su tutte le piattaforme supportate da Perl, ed infine ci sono moduli scritti in C che per essere installati, necessitano di una compilazione che inevitabilmente intacca la facilità di installazione da parte dell'utente.

Come fare quindi per garantire Prestazioni, Portabilità e facilità di installazione pur utilizzando i moduli. Semplicemente facendo delle scelte caso per caso. Adottando l'una o l'altra soluzione a seconda della problematica da affrontare.

E' chiaro che nel tempo tali scelte possono variare. Potrebbero uscire moduli che risolvono meglio una problematica, ad esempio meglio di come la si era risolta in precedenza con una delle tre soluzioni. Per questo motivo, si è scelto in molti casi di wrappare metodi forniti da moduli esterni, attraverso metodi forniti da IG.pm il Core module del Framework di IGSuite. A titolo d'esempio le chiamate a CGI.pm per leggere i parametri dai form sono Wrappate dal metodo IG::ReadParam (non lasciarsi ingannare dal nome) oppure le chiamate ai moduli per interfacciarsi agli RDBM sono wrappate dal metodo IG::DbQuery. In questo modo se nel tempo viene sviluppato un nuovo modulo più veloce ad esempio di CGI.pm basterà modificare IG.pm lasciando invariate tutte le applicazioni che ne fanno uso.

Ovviamente quella esposta non è una regola generale ed è stata applicata in genere (CGI ne è l'eccezione) solo per i moduli non Core del Perl ma soprattutto per moduli a carattere ed uso generale. Sono invece i moduli Core del Perl che offrono tutte le caratteristiche sopra esposte e che vengono usati in IGSuite senza limiti.

Per concludere, ci sono moduli non core scritti in Pure Perl, che si è preferito distribuire unbundle con il pacchetto di IGSuite. Oltre a semplificare la vita dell'utente che vuole installare IGSuite, si ha la certezza che la versione del modulo che sta utilizzando IGSuite in quel momento è in linea con il resto del progetto.

Per quest'ultima tipologia di moduli, non volendo comunque alterare le librerie dell'utente, si è creato un namespace apposito IG:: (nell'omonima directory) che contiene tutti i moduli non Core scritti in Pure Perl.

Moduli utilizzati in IG

Modulo

Provenienza

Modalità d'Uso

Uso

CGI::Simple

Non Core

Wrappato in IG.pm

Accesso ai parametri dei form e ai Cookies

Carp

Core

Wrappato in IG.pm

Gestione warning e die messages

Config

Core

Utilizzo diretto

Utilizzato nell'installazione e nello script di autoaggiornamento del sistema

DBI/DBD/Pg

Non Core

Wrappato in IG.pm

Accesso al RDBM

Digest::MD5

Core

Utilizzo diretto

IGWebMail

Fnctl

Core

Wrappato in IG.pm

Utilizzato per flock

HTML::Entities

Core

Wrappato in IG.pm

Encode HTML Entities

IG

Non Core

IG Core Module

Definisce il framework di IG

IG::MimeBase64

Non Core

Utilizzo diretto

IGWiki IGWebMail

IG::MimeWords

Non Core

Utilizzo diretto

IGWiki IGWebMail

IG::AlgorithmDiff

Non Core

Utilizzo diretto

IGWiki

IG::Hylafax

IG Module

Utilizzo diretto

IGFax

IG::FileMMagic

Non Core

Utilizzo diretto

IGFileManager IGWebMail

IG::Mydes.pm

IG Module

Utilizzo diretto

IGWiki

IG::MailPop3Client

Non Core

Utilizzo diretto

IGWebMail

IG::QuotedPrint

Non Core

Utilizzo diretto

IGWebMail

IG::MailSendmail

Non Core

Utilizzo diretto

IGWebMail

IG::Thumbnails

IG Module

Utilizzo diretto

IGFax IGFileManager IGArchive

IG::URI

Non Core

Utilizzo diretto

IGWiki

IG::WikiFormat

IG Module

Utilizzo diretto

IGWiki

Lwp::Simple

Non Core

Utilizzo diretto

isogestd

IG::SpreadsheetWriteExcel

Non Core

Wrappato in IG.pm

Export di dati in file Excel

Text::Wrap

Core

Utilizzo diretto

IGWiki

Time::Local

Core

Utilizzo diretto

checkmsg


Nome: IG Perl modules policy - Revisione: 2 - Autore: LucaS (26.04.2005) - Modificata da: LucaS (17.09.2005) - Categoria: Documentazione - Scadenza: 31.12.2009 - Permessi di visualizzazione: Tutti indistintamente - Permessi di modifica: Condiviso con tutti gli utenti - Approvata da: LucaS - Copyright © LucaS All right reserved