|
 | Porting: Da Linux a Windows con Perl |
|
      |
|
Dobbiamo innanzi tutto rilevare che ci aspettavamo di dover lavorare molto di più per effettuare un porting, che in realtà ci ha richiesto poche ore di lavoro. Non per niente infatti tale lavoro è stato rimandato per mesi. Grazie quindi al Perl, e a tutti i suoi sviluppatori che hanno lavorato per renderlo un linguaggio libero dalle piattaforme.
Alla data in cui scriviamo in realtà abbiamo da poco finito il porting e sicuramente usciranno nuovi bug dovuti alla incompatibilità su windows di soluzioni adottate in passato.
- shebang - E' noto che lo shebang occorre in linux per far capire alla shell in che modo deve avviare lo script. Su Win la situazione cambia, infatti è l'estenzione a fare questo lavoro, e lo shebang serve per passare all'interprete soltanto i flag, tutto questo fa eccezione in un caso, e cioè quando lo script è chiamato da Apache. Infatti in questo caso Apache usa lo shebang per eseguire l'interprete perl. Ora non potevo rinominare i miei quasi 50 script per aggiungere l'estenzione '.pl' (avrebbe comportato troppo lavoro) cosi' abbiamo dovuto architettare un sistema che durante l'installazione recuperasse lo shebang e lo andasse a sostituire in ogni script di IG.
- $0 sotto cgi non da nomi più lunghi di 8 char - Una delle prime operazioni che svolge IG.pm è quella di recuperare la directory dei cgi (per includerla in @INC e permettere di poter leggere i vari file di configurazione) e il nome dello script che si sta eseguendo (per poter eseguire una cosa tipo require "$conf_dir/$lang/$cgi_name.lang" . Fino ad oggi tutto questo veniva fatto ricavando la directory e il nome da $0. Il problema è che Apache valorizza $0 con nomi non più lunghi di 8 caratteri quindi la directory "Programmi" diventa del tipo "progr~01". Questo non fa funzionare il require sopra citato. Si è risolto ricavando la directory dei cgi da $ENV{SCRIT_FILENAME}.
- fork emulato - In due features di IG viene usata questa funzione per forkare i processi, ma tristemente abbiamo constatato che su Windows il fork viene emulato, vale a dire che non genera un altro processo. Tale emulazione nel nostro caso non funziona e rende inutilizzabili due features:
- Webmail - All'interno del webmail il forking occorreva quando l'utente controllava l'arrivo di nuovo messaggi, infatti mentre il processo padre "scaricava" il messaggi dal server; il processo figlio si occupava di visualizzare un popup dove con un refresh dell'html (onevent) visualizzava una progress bar che informava dello stato di avanzamento. Per ora abbiamo dovuto su windows eliminare tale effetto grafico, che porta l'utente a dover aspettare durante il download dei messaggi senza capire cosa sta avvenendo.
- Filemanager - Nel web filemanager di IG c'è una bellissima features che trasforma directory che contengono immagini in web gallery sfruttando ImageMagick e creando dei thumbnails. Il fork appunto divideva l'operazione di visualizzazione della directory, e quella di creazione/sincronizzazione dei thumbnails. In questo caso per ora abbiamo dovuto su windows disabilitare tale features. Non vengono quindi generati i thumbnails ma i file di immagini vengono mostrati con delle icone.
- flock - Tra le funzioni messe a disposizione dal FrameWork di IG c'è FileLock che si avvaleva di 'flock' per il locking dei file. Sulla documentazione è riportao che flock lavora senza problemi con win2000 ma nel nostro caso non è stato così. Per ora FileLock non opera nessun locking esclusivo sui file quando ci si trova su sistemi windows. C'è in programma di sostituire flock con un sistema di semafori generati dalla creazione di file temporanei.
- ambiente non nativo per le altre applicazioni - E' chiaro che IGSuite per funzionare si avvale di Apache, Mysql, e Perl. Ora mentre per un utente Linux installare ed utilizzare tali applicazioni non comporta grosse difficoltà per un utente windows con le sue abitudini click&install è tutt'altro che semplice. Inoltre abbiamo notato che le prestazioni di tali applicativi sono notevolmente peggiorate su windows, chiaramente perchè non native per tale sistema.
- install.pl - Uno dei punti forti di IGSuite è sempre stata la facilità di installazione. Uno dei motivi per i quali è facile da installare è la mancanza di installazione di moduli Perl non core. Infatti capita spesso quando si devono installare applicazioni molto elaborate che vi sia una lista dei require enorme strapiena di moduli. In IGSuite invece l'unico modulo necessario non core è quello per interfacciarsi al Database. Detto questo install.pl svolge quindi solo un lavoro di creazione delle strutture delle directory e delle tabelle del database e infine la copia dei file. Abbiamo dovuto utilizzare strumenti portabili su entrambe le piattaforme (linux e win) per effettuare tali operazioni sui file e directory. Il risultato, è che lo script 'install.pl' è lo stesso sia per la versione windows che per quella linux.
- tar/zip - Il colmo è che nonostante l'assoluta eguaglianza tra la versione windows e quella Linux, abbiamo dovuto creare due pacchetti che in realtà si differenzieranno solo per il tipo di compressione. Questo ovviamente per non confodere i poveri utenti windows che si troverebbero un bruttissimo e intimidatorio file tar.gz (seppur supportato benissimo da winzip).
Il porting ci ha costretto a rivedere molte cose, e se non altro a riguardare il codice e la sua struttura, facendoci porre attenzione su aspetti che fin'ora avevamo ignorato proprio perchè li vedevamo da un'altra angolazione.
Inoltre abbiamo rivisto tutte le chiamate ad applicazioni di sistema che IGSuite effettuava sostituendole con altre soluzioni. Ad esempio l'invio di messaggi di posta elettronica che prima effettuavo con un pipe su sendmail ora è stato sostituito da un client SMTP che ne aumenta notevolmente la portatilità su ogni sistema.
Dal porting si è iniziato a ragionare in modo diverso, ora mentre sviluppiamo pensiamo..."e se poi decido di portarlo su Mac?" e di conseguenza rielaboriamo soluzioni nel modo più portatile possibile.
Questo è stato il vantaggio del porting, una implicita maturazione del modo di sviluppare che da oggi vuole essere il più possibile Platform indipendent.
Luca Dante Ortolani
P.s. Vuole condividere con noi e tutti gli altri utenti la sua esperienza positiva con IGSuite? Ci piacerebbe sapere come utilizza la nostra suite per la sua attività!.
---
Luca Dante Ortolani
IGSuite Staff
http://www.igsuite.org 
|
|
|
| Name: Da Linux a Windows con Perl -
Revision: 1 -
Created by: Ortolani Luca (24.01.2005) -
Last Editor: Ortolani Luca (27.02.2006) -
Category: Documentazione sviluppo -
Due Date: 31.12.2009 -
View privileges: All the world -
Edit privileges: Shared by all users - Approved by: Ortolani Luca - Copyright © Ortolani Luca All right reserved
|
|