Rieccomi, il lavoro mi ha assorbito ma sto cercando di iniziare a ritagliarmi degli spazi di tempo per divenire più attivo nel posting!
Allora, come prima cosa, come vi avevo accennato nel precedente post, vi sono delle novità!
La prima di tutte e che, nell'arco di sei mesi o poco più abbandonerò completamente PHP per svariati motivi, di cui ne elenco alcuni, per me i più importanti:
- flessibilità del linguaggio;
- poca espandibilità;
- nessun framework ufficiale;
- consumo di risorse.
Iniziamo dalla flessibilità del linguaggio: con php 5 sono state introdotte tante novità che man mano si sono evolute fino alla release 5.3 dove saranno presenti anche i namespace. Se pur si tratta di un grande sforza, anche se necessario, tutto l'insieme si regge in piedi per forza! Zeev e compagnia hanno sempre dichiarato di voler tenere php procedurale e che le funzionalità OOP sono soltanto un aggiunta e la dimostrazione ne è un implementazione che non sta a passo con i tempi. La capacità di evolversi è stato sempre un elemento fondamentale che purtroppo manca a chi sta dietro php e questo porta non solo ad implementazione monca della OOP ma anche ad una cattiva gestione in generale.
Riguardo alla poca espandibilità c'è da dire che se pure ci sta tantissima roba, a livello di estensioni di php, queste in realtà sono utili solo nel caso in cui una persona abbia un server virtuale o dedicato perché altrimenti diventano assolutamente inutili. Linguaggi ed ambienti più evoluti permettono allo sviluppatore di realizzarsi da solo, se ne è capace, i componenti necessari (.NET, Java ed altri) ma purtroppo in php, l'estensione, va scritta in C e c'è poco che fare. Un'estensione, ma per l'appunto estensione, di php chiama FFI, Foreign Function Interface, permetteva di bindare funzioni di librerie a funzioni di php ma è stata abbandonata ( http://pecl.php.net/package/ffi ). A questo si aggiunge che dato che le estensioni sono in C e sono caricate dall'interprete sono legate in maniera inscindibile all'interprete stesso ... se domani esce un fix per una libreria questa deve essere ricompilata per le versioni dell'interprete o per meglio dire delle API altrimenti non potrà essere caricata e non funzionerà, cosa ovvia ma bloccante nel caso di bug ... se le estensioni fosserò state scritte, ad esempio, in php stesso si sarebbe potuto prendere il file dell'estensione e correggere e ridistribuire cosi che chi ne faceva uso poteva benissimo metterlo sul proprio spazio web ed utilizzarlo.
Per i framework il discorso è più complesso, infatti da poco Zend ha sviluppato un suo framework che supporta anche pattern di programmazione come l'MVC però effettivamente un framework distribuito con PHP non c'è e nemmeno esisterà. Sicuramente ci sono tanti framework in giro che si possono prendere e scaricare ma ognuno di loro ha i suoi problemi, le sue mancanze, le sue particolarità ed ha i suoi capricci. Un framework ufficiale invece permetterebbe non solo di far convergere le normali operazioni su di lui ma eviterebbe anche tanto lavoro perché quando un framework ha la necessità di trasformare in oggetti tutti i vari tipi base ed i tipi evoluti farli poggiare su questi diventa complicato implementare tutto il necessario diventa un gran casino (il framework alla base del mio CMS, parzialmente, non ho avuto tempo di farlo ad hoc, fa questo tipo di lavoro permettendomi di dare un maggior controllo ed avere qualcosa di simile alla tipizzazione che in certi ambiti è fondamentale)!
Per terminare il consumo di risorse: php è un maialino non un elefantino! Di seguito posto un elenco di benchmark:
- PHP vs C# ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
- PHP vs Java ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
- PHP vs LUA ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
- PHP vs Python ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
- PHP vs Perl ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
- PHP vs Ruby ( http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=php&l... )
L'unico che va sotto è ruby, ma non mi stupisco, dato che buona parte delle problematiche son presenti anche lì. A questo aggiungo che i test effettuati verso C# sono stati effettuati con Mono e non con il .NET di microsoft che ovviamente è più performante. Per finire aggiungo sempre che Mono, dalla versione 2.2, ha rilasciato un compilatre JIT più perfomante e funzioni di condivisione del codice degli assembly che riducono notevolmente il consumo di memoria in base al tipo di operazioni effettuate.
Ovviamente un linguaggio non si sceglie solo per le performance o per il consumo di risorse ma anche per altri fattori, php può essere velocizzato tramite l'uso di strumenti come APC, memcache e simili.
Personalmente ho scelto C# come linguaggio, che uso già da tempo per sviluppare applicativi su windows e linux, fornendoli di una doppia interfaccia grafica (su Windows usando le System.Window.Forms mentre su Linux usando GTK#) ove richiesto, che oltre ad essere tremendamente più veloce.
Ci tengo a precisare che php non è assolutamente da buttare e, anzi, per chi è agli inizi è un ottima scelta, C# cosi come Java non lo consiglierei mai a nessuno che sta avvicinandosi alla programmazione web. D'altro canto php mostra tutte le sue debolezze, che non sono poche, quando si tratta di lavorare con strutture più complesse e situazioni particolari. Li poi diventa una scelta personale l'uso di php rispetto ad altri ambienti, scelta che io per molto tempo ho adottato e che alla fine me ne ha fatto pentire, almeno per le situazioni con cui ho avuto a che fare io.
Detto tutto questo, passiamo avanti! La seconda cosa è che da tempo stavo pensando di mettere su una specie di calderone delle idee: un posto dove mettere le mie idee, con documentazione, specifiche e quant'altro, per far si che se a qualcuno interessava qualcosa si ci poteva lavorare su. Il motivo dietro tutto ciò è la mia perenne mancanza di tempo ... purtroppo per campare devo lavorare.
Tra le idee più belle vi è sicuramente Tofu, il mio webserver che avrebbe risolto, almeno per me che lo avrei usato, i problemi relativi a permessi/utenti per virtual host/directory (grazie al suo modello di connessione ... se cercate tra i post ne troverete uno ma non è l'ultima versione che sinceramente non so nemmeno dov'è finita). Sempre tra le idee vi è il sistema di filtraggio dei pacchetti che permetterebbe di implementare funzionalità che altrimenti sarebberò mal funzionamenti o complessi da implementare in altro modo (ad esempio il captive portal coinvolge il filtraggio di tutti i pacchetti più il filtraggio dei pacchetti di tipo http per restituire la pagina dove effettuare il login e la navigazione o ancora filtri per i contenuti e per la posta ove non basta cambiare la porta di destinazione per saltarli a pié pari [e si ... nel caso dei proxy trasparenti dato che si basa il tutto sul principio che si naviga sulla porte standard cambiando quelle non si viene più filtrati] e cosi via tante altre cose)
Il calderone delle idee vorrei realizzarlo utilizzando un wiki, ma devo vedere cosa usare.
Per finire, toglierò drupal e metterò Joomla, non per la moda del momento ma perché, almeno per le situazioni ove mi sono trovato, Joomla si è rivelato vincente. In realtà avrei voluto mettere il mio CMS online solo che non c'ho tempo per scrivermi i moduli e soprattutto volendo abbandonare php mi ritroverei a lavorare su un prodotto non ha futuro.
Il blog lo sposterò su un sotto dominio in modo da mettere su wordpress e filtrare, senza diventare scemo, i trackback e i commenti di spam dato che su drupal non sono mai riuscito a mettere su i filtri.
Attualmente sto cercando di prepararmi un template carino, ho qualche idea, solo che devo vedere pure il nome del dominio dato che se pur terrò phpsoft.it non sarà più quello principale! Magari prenderò o un .name, anche se sicuramente sarà occupato quello che mi serve, o alternativamente prenderò un .info, però non so ancora che cosa!
Ok, ho scritto un sacco di roba e sicuramente ho fatto pure non pochi errori di italiano considerando che scrivo da più di 30 minuti ed ho finito di mangiare da poco!
UPDATE
L'applicativo per il filtraggio lo avevo già iniziato e mi ero concentrato sull'interfacciamento con la libreria che comunica con netfilter (il firewall di linux) per fare il filtraggio dei pacchetti. E' possibile scaricare i miei test dall'svn a quest'indirizzo:
http://svn.phpsoft.it:8112/repositories/Tests/nfq-test-1/trunk/
E' inutile che andate cercando per vedere se trovate altra roba perché ho reso accessibile solo quello :)
Inoltre pensavo se è il caso di attivare Mono sul dedicato e mettere su il sito, invece che utilizzando Joomla, sfruttando Mojo Portal o un CMS fatto comunque un .NET (non vi preoccupate DNN non lo metto di certo!)