àˆ stata rilasciata oggi la prima beta di Python 2.5Le novità  introdotte sono molte (come già  accennato in un post precedente), quindi consiglio a tutti di installare la beta e cominciare a testare questa nuova versione per riportare eventuali bug.

Continua a leggere Python 2.5 beta 1

Categoria: PHP e Open Source

Tags:

La maggior parte dei database su cui si è normalmente abituati ad operare è implementata in un linguaggio nativo ed espone le funzionalità  al linguaggio che utilizziamo attraverso delle API che si interfacciano al server o alla libreria di accesso ai dati.In Python c'è qualcuno che ha ben pensato di addentrarsi nello sviluppo di un database engine utilizzando il linguaggio stesso, per ottimizzarne la portabilità  e studiarne le potenzialità . I risultati sono discreti (anche se poco performanti) e molto interessanti da studiare. Due si distinguono tra gli altri: gadfly e buzhug e possono essere ottime soluzioni in quelle situazioni in cui le performance non sono un requisito fondamentale rispetto alla semplicità  di utilizzo e la rapidità  di sviluppo.

Continua a leggere Database in Python per Python

Categoria: PHP e Open Source

Prosegue il mio lavoro sullo sviluppo di applicazioni web in Python. Come ormai sarà  chiaro a molti non sono più molto attratto da PHP (speriamo che la versione 6 risvegli in me quel qualcosa che pare essersene andato) mentre Python si sta rivelando ogni giorno di più ottimo anche per questa situazione. Sviluppando un proprio framework e successivamente una serie di applicazioni risulta spesso utile disporre di una serie di strumenti che permettano un testing del sistema ed uno sviluppo più rapito. Paste è un insieme di tool adatti a questo scopo, molto utile per tutti quelli che vogliono demandare ad un'altra libreria gran parde delle routine comuni nello sviluppo web. Ci sto giocando in questi giorni e mi pare molto utile, soprattutto nell'ottica dello sviluppo WSGI, per il quale sono state implementate una serie di librerie di testing, di middleware ed un semplice server.

Continua a leggere Utilita’ per lo sviluppo web in Python

Categoria: PHP e Open Source

Finalmente, dopo un po' di ricerca sulla rete, ho trovato due soluzioni interessanti per il debugging di script PHP attraverso interfaccia grafica. Inizialmente l'unico strumento che utilizzavo era il debugger di Komodo, che si appoggia alla libreria Xdebug. Komodo però è un editor che ha ancora qualche problema di stabilità , e quindi ho trovato la necessità  di passare a qualcosa di alternativo.Ho trovato due soluzioni che mi paiono da valutare: la prima si chiama wxDebug ed è un client grafico per Xdebug sviluppato in Python (usando le librerie wxPython); la seconda si chiama wincachegrid e pare molto più ricca di funzionalità  rispetto all'altra.

Continua a leggere Debugging grafico per PHP

Categoria: PHP e Open Source

Tags: , ,

In questi giorni, lavorando con la libreria ElementTree, mi sono accorto che manca del supporto per le entità  XML esterne. Quelle interne funzionano senza problemi, ma le altre danno qualche problema poiché le risorse non vengono espanse in fase di parsing. Non so se a qualcuno possa interessare, ma ho scritto qualche riga di workaround per far gestire correttamente le entità  esterne anche ad ElementTree senza applicare una patch ai sorgenti. Il codice seguente si applica alla classe iterparse, ma può facilmente essere modificato per applicarsi al parser XML standard estendendo la classe appropriata: from xml.parse import expat from elementtree import ElementTree class ExternalEntitiesIterparse(ElementTree.iterparse):    """ Custom iterparser that handles also external entities.    """    def __init__(self, source, events=None):       super(ElementTree.iterparse, self).__init__(source, events)       parser = self._parser._parser       parser.UseForeignDTD(False)       parser.SetParamEntityParsing( expat.XML_PARAM_ENTITY_PARSING_ALWAYS)       parser.ExternalEntityRefHandler = self._extRef    def _extRef(self, context, base, systemId, publicId):       """ Handle an external entity       """       entitiesParser = self._parser._parser.ExternalEntityParserCreate( context )       if base is None and False:          path = systemId       else:          path = os.path.join( base, systemId )          entitiesPath = os.path.abspath( path )          entitiesParser.Parse( file(entitiesPath).read() )       return 1 Ora ExternalEntitiesIterparse può essere utilizzato come iterparse senza doversi preoccupare delle entità  estene, che verranno correttamente espanse.

Continua a leggere Entita’ esterne in ElementTree

Categoria: PHP e Open Source

Volevo segnalare l'apertura del primo gruppo di discussione italiano legato a Turbogears, il framework per lo sviluppo web in Python cui ho già  accennato su questo blog.Il mantainer, Mariano Viola, pare intenzionato a creare un grossa comunità  da far interagire con quella ufficiale, nella speranza che Turbogears comincia ad avere un buon supporto anche qui in italia.Si vorrebbe anche iniziare a tradurre la documentazione dopo l'uscita della versione 1.0, cercando di integrarla prima nel wiki principale di Turbogears e successivamente nella pagina della documentazione ufficiale.

Continua a leggere Gruppo di discussione su TurboGears

Categoria: PHP e Open Source

Da oggi posso definitivamente dire addio agli script sviluppati in CGI; posso dire basta ai caricamenti lenti e a tutta quella serie di cose che hanno reso CGI un sistema obsoleto dopo qualche anno dalla sua nascita. Il tutto è cominciato dopo che ho deciso di fare il porting di un'applicazione web da PHP a Python: nell'indecisione su quale sistema utilizzare tra mod_python, cgi o soluzioni personalizzate, ho optato per il secondo, con discreti risultati se non fosse per le performance veramente pessime. Per puro caso mi sono ritrovato a dover installare l'ambiente di sviluppo e di testing anche sul mio iBook, e, durante l'installazione del necessario, mi sono imbattuto in una semplicissima guida per l'installazione di FastCGI su Apache (la guida spiega anche come aggiungere il supporto a Rails). Non avevo mai provato FastCGI, ma devo dire che la soluzione è veramente ottima! I tempi di caricamento vengono ridotti di moltissimo dato che il protocollo utilizzato da FastCGI permette di avviare l'applicazione una sola volta comunicando successivamente con questa attraverso un socket. Mi ha veramente soddisfatto ... qualcuno vuole spezzare qualche lancia a favore di un altro sistema ?

Continua a leggere Addio, buon vecchio CGI

Categoria: PHP e Open Source

Forse sono l'ultimo a saperlo, ma spulciando il codice di Mediawiki mi sono accorto che utilizza memcached per il caching di alcune operazioni molto dispendiose. Per chi non ne fosse a conoscenza, memcached è un sistema client-server molto interessante per il caching dei dati. La libreria originale è scritta in C, ma si possono trovare wrapper per PHP, Python e molti altri linguaggi in giro per la rete. Diversamente da altri sistemi di cache, che salvano i dati elaborati in memoria o su disco sul computer locale, memcached propone una struttura diversa e molto efficace: l'architettura si compone di un server che alloca una porzione fissa di memoria contigua da utilizzare come deposito per i dati in cache. A questo server si connettono dei client da computer remoti (solitamente contenuti all'interno della stessa rete locale) che attraverso semplici comandi salvano e recuperano stringhe binarie di dati più o meno ampie. Queste stringhe vengono salvate in memoria e restituite quando richieste, a meno che non siano scadute. Questo sistema che potrebbe creare qualche dubbio, in realtà  è ottimo perchè: permette di condividere la cache tra host remoti differenti risparmiando spazio e memoria; permette di mettere il sistema di cache su un altro computer, ottimizzando la distribuzione della ram e del carico di lavoro; oltretutto risulta più efficente di molti sistemi di caching dei dati integrati con i database (vedasi la cache di MySQL) dato che questi eliminano la cache ogni volta viene effettuato un update, mentre memcached permette di mantenere comunque i dati. Un ottimo sistema veramente.

Continua a leggere Mediawiki e memcached

Categoria: PHP e Open Source

Python 2.5

13 Apr

Avevo perso la notizia causa alcuni impegni, ma da ormai una settimana è stata rilasciata la versione alpha di Python 2.5. Le aggiunte stanno portanto Python verso l'attesa versione 3, che porterà  notevoli innovazioni a questo linguaggio che si appresta a diventare punto fondamentale per lo sviluppo in ambiente opensource e non solo. Sono state introdotte molte novità  sintattiche, oltre ad aggiornamenti e modifiche ai moduli inclusi nella libreria standard. Espressioni condizionali Prima d'ora in Python non erano presenti delle espressioni condizionali inline, quelle che in PHP o altri linguaggi vengono specificate utilizzando gli operatori ? e : $a = ($b == true) ? $b : NULL Ora, dopo le forti pressioni della comunità , Guido Van Rossum ha deciso di aggiungere questa feature anche in Python anche se ha optato per una sintassi leggeremente differente e più pythonica: a = ('vero' if b else 'falso') Come possiamo notare i valore da restituire nel caso l'espressione risulti vera va posizionato all'inizio dell'espressione, e successivamente va aggiunto il controllo di verità  e, dopo l'else, il valore da specificare nel caso in cui la condizione non risulti vera. (more...)

Continua a leggere Python 2.5

Categoria: PHP e Open Source

Tags:

Leggendo alcuni post della discussione precedente ho saputo dell'esistenza di TurboGears, un sistema molto simile a Ruby on Rails, scritto in Python, che espone una serie di funzionalità  utili per lo sviluppo web appoggiandosi su altri strumenti opensource ben testati e documentati.Dopo essermi scaricato il video che spiega come sviluppare un semplice wiki in circa venti minuti e dopo essermi letto la documentazione allegata ai sorgenti, mi sono inbattuto nel template engine Kid.Kid è un template engine basato su XML con funzionalità  molto simili a TAL (il template linguage utilizzato da Zope ed implementato anche per altre tecnologie, vedasi PHPTAL) che utilizza la sintassi di python all'interno delle proprie espressioni. Avevo provato PHPTAL tempo fa e non ne ero rimasto entusiasto per via della sintassi che alcune volte risultava eccessivamente prolissa. Con Kid invece possiamo scrivere template compatte ed altamente leggibili senza incorrere in problemi di interpretazione. Per esempio la specifica degli attributi utilizzando dei dizionari permette operazioni interessantissime che risulterebbero veramente complicate usando TAL. Purtroppo non ho ancora avuto modo di utilizzarlo seriamente, ma mi pare interessante. Altre news in seguito.

Continua a leggere Kid template engine

Categoria: PHP e Open Source

Tags: , ,