Spesso mi capita di dover testare delle librerie o il funzionamento particolare di alcune funzioni in determinate circostanze. Solitamente creo il mio file PHP e lo faccio eseguire dal mio webserver e poi controllo il risultato. Pratica comune, direi, ma da quando ho iniziato ad utilizzare Python mi trovo spesso a rimpiangere la sua comoda command line.Stamattina, visto che avevo qualche minuto di tempo, mi sono messo con il mio iBook alla mano ed ho creato un semplice script che emula una shell per PHP.Lo script è molto semplice e sfrutta la funzione eval per valutare l'espressione immessa dall'utente. Purtroppo soffre di alcuni problemi (lascio a qualcun altro il compito di risolverli) dovuti al motore di PHP o a piccole inesattezze che possono essere corrette facilmente. La shell accetta in input un'espressione valida PHP, la esegue e restituisce in output il valore restituito dall'espressione. In caso vegano scritti costrutti sintattici particolari, quali classi, cicli, istruzioni condizionali, la shell si occupa di immagazzinare in memoria l'intero blocco di istruzioni e di eseguirlo. La shell indenta automaticamente il codice se trova una parentesi graffa alla fine della riga, quindi è necessario seguire delle semplici regole sintattiche per far funzionare correttamente la shell. Siete liberi di modificare e correggere il codice. (more...)

Continua a leggere Una shell in PHP

Categoria: PHP e Open Source

Da qualche tempo mi sto occupando dello sviluppo di un semplice ODBMS in PHP da utilizzare per la persistenza degli oggetti in un Application Server. Mai come in questa situazione mi sono accorto di quanto sia fondamentale l'utilizzo di strumenti che facilitino il rilevamento di errori concettuali all'interno del codice. In PHP abbiamo a disposizione qualche funzione nativa per gestire il debugging di semplici script o siti internet, come l'error_reporiting, funzioni di logging, l'introspezione e qualche strumento di back-tracking delle chiamate. Purtroppo questi strumenti non bastano in applicazione più complesse ma fortunatamente possiamo sfruttare i debugger per facilitarci la vita. Un debugger è un programma (spesso una versione modificata di un compilatore/interprete oppure una libreria esterna scritta in codice nativo) che ci permette di eseguire il nostro codice passo passo, decidendo quando interrompere l'esecuzione per visualizzare lo stato corrente della nostra applicazione. Grazie a funzionalità di introspezione possiamo conoscere il contenuto dello scope corrente ed il valore di oggetti anche molto complessi. Spesso i linguaggi di programmazione forniscono un debugger nella loro distribuzione standard. PHP, a causa di alcune scelte progettuali, non fornisce questo strumento. Qualche volenteroso ha comunque deciso di rilasciare strumenti di debug per PHP. Personalmente utilizzo il debugger integrato in Zend Studio, ma possiamo trovare valide alternative nel panorama opensource. APD è un'estensione PECL che permette l'utilizzo di nuove funzioni in PHP per l'analisi ed i profiling dei nostri programmi. DBG è invece un debugger nativo molto utilizzato da IDE commerciali ed opensource grazie alla sua versatilità e completezza. Fino a qualche tempo fa utilizzavo l'estensione Xdebug, che è anch'essa ricca di funzionalità interessanti. Tutti questi strumenti necessitano di essere installati sul server sul quale il nostro programma è in esecuzione. Una valida ed interessante alternativa agli strumenti che vi ho elencato è Gubed, che spicca soprattutto per la particolare struttura che il programmatore ha deciso di seguire. Gubed infatti modifica il vostro codice PHP inserendo chiamate a funzione che vengono sfruttate per interrompere l'esecuzione e recuperare informazioni sul programma. Semplice ed efficace.

Continua a leggere PHP Debugging

Categoria: PHP e Open Source

Tags: , ,

In questi giorni mi sto occupando di sviluppare l'interfaccia grafica della nuova versione di SEPY, un editor scritto in Python utilizzato per gestire codice AS.All'inizio ho optato per utilizzare nuovamente i widget nativi, dato che la libreria wxPython che utilizziamo per interfacciarci con il GUI Engine del sistema operativo risulta molto comoda in questi casi. Dopo qualche tempo però, ho voluto provare ad implementare manualmente alcuni widget, in modo da fornire loro un aspetto personalizzato ed accattivante.Mi ero preparato a dover affrontare ore di lavoro per risolvere problemi di ogni genere, ed invece ho scoperto che l'obiettivo che mi ero prefissato non era affatto difficile da raggiungere. wxPython fornisce l'oggetto wxDC che può essere utilizzato in diverse situazioni al fine di disegnare immagini, testo e forme geometriche più o meno complesse su una finestra. Combinado questo oggetto con il sistema di eventi della libreria, sviluppare i miei widget è stato quasi un gioco da ragazzi.Ho provato anche a far girare il programma su Linux e Mac OSX: ottimi risultati, omogeneità del layout e nessun errore!All'interno della libreria wxPython è possibile trovare moltissimi esempi di widget personalizzati: wxOGL, libreria di cui recentemente è stato fatto il porting completo in Python, ne è un ottimo esempio. Anche il programma pySketch, incluso nei demo di wxPython, utilizza l'oggetto wxDC e le sue estensioni per visualizzare i disegni fatti dall'utente.L'unica nota dolente è che purtroppo le cose si complicano nel momento in cui si ritiene necessario apportare delle ottimizzazioni al processo di rendering dei widget. Però questa è un'altra storia ...

Continua a leggere Widget personalizzati con wxPython

Categoria: PHP e Open Source

Unicode è un sistema che permette di associare a molti caratteri e simboli un numero univoco indipendente dalla lingua, dalla piattaforma e dall'applicativo. Con il passare degli anni si è affermato come standard e molti linguaggi hanno iniziato ad includerene il supporto nativamente. Si pensi per esempio a Python o a Java che includono un ottimo set di librerie per la gestione unicode.Purtroppo PHP non sembra voler seguire la moda, e continua a gestire le stringhe come se fossero tutte sequenze di caratteri ascii, lasciando all'utente il dovere di implementare sistemi per la gestione di lingue che richiedono charset multibyte. A dir la verità tra le estensioni di PHP troviamo qualche libreria utile per la gestione di queste situazioni (si pensi alla libreria mbstring o al supporto per le librerie iconv), ma spesso gli hoster non ne abilitano il supporto.In molti si sono mossi al fine di convincere il team di sviluppo di PHP ad includere il supporto nativo per unicode, ma a quanto pare l'operazione sembra essere più complicata del previsto e comunque gli sviluppatori sono frenati dai problemi che portò a suo tempo l'implementazione del supporto nativo per unicode in Perl.Fortunatamente qualcosa sembra muoversi all'orizzonte: probabilmente PHP 6 si baserà su Parrot, un'efficiente virtual machine multipiattaforma creata per supportare i moderni linguaggi di scripting. La VM in questione supporta nativamente unicode, quindi molti dei nostri problemi potrebbero risolversi tra qualche anno ...Speriamo che tutto avanzi come previsto, e nel frattempo continuiamo ad occuparci dell'implementazione dei nostri sistemi hand-made per la gestione dello unicode.

Continua a leggere Supporto nativo per Unicode

Categoria: PHP e Open Source