Categories
lifehack pensieri webdev

Il problema del refactoring

Dare una stima dei costi per il refactoring di un progetto, senza prima averlo analizzato sarebbe come cercare di curare una malattia senza investire tempo e denaro in analisi mediche.

Fullo, mail a cliente anonimo

Sempre più spesso in Ideato ci arrivano richieste per riprogettare, rifattorizzare ed ottimizzare software già in produzione. Ovviamente chi chiede informazioni sui costi si ferma ad un misero «ma quanto mi costa?» senza però ascoltare le due/tre cose che sappiamo sull’argomento (mica ci abbiamo scritto un libro sul refactoring per hobby, no?).

Uno degli ultimi casi che mi è capitato riguarda la riprogettazione (a tutti i livelli, dall’UX alla sistemistica) di un portale da fare in partnership con altre aziende con cui stiamo lavorando già da tempo. Solo la fase di preventivazione di massima è costata a tutti parecchio tempo perchè, come al solito, non c’erano idee chiare da parte del cliente che è stato accompagnato mano nella mano in tutta l’attività.

Il quale, però, è ovviamente caduto dal pero vedendo che nel preventivo di analisi mancava la stima dei costi per il refactoring.

Ecco quindi spiegata la metafora che introduce questo post.

Categories
php recensioni webdev

eZ Publish 4: Enterprise Web Sites Step-by-Step

ez publish 4 enterprise website step by step A breve sarà finalmente disponibile sul sito di PacktPub il libro che abbiamo scritto, Francesco ed io, su eZ Publish ed intitolato: eZ Publish 4: Enterprise Web Sites Step-by-Step.

Devo dire che sono particolarmente fiero del lavoro fatto perchè, premi a parte, è stato il mio primo vero libro tecnico scritto. Una specie di sogno nel cassetto che avevo da un po’ di tempo.

Il libro è una guida che punto per punto spiega come installare, configurare e creare un sito usando gli strumenti di base messi a disposizione dal CMF e con un minimo di personalizzazione. Niente di fantascientifico, ma molto pragmatico per chi vuole, da subito, avere un prodotto utilizzabile.

Categories
php webdev

Ottimizzare PHP, Google e tante castronerie.

John Allspaw: flickr php4 to php5 migration Ogni tanto pare che anche in Google sparino immense bufale, una delle ultime è un presunto articolo su come ottimizzare i propri script in PHP che sembra uscito fuori da uno script kiddie appena avvicinato al linguaggio.

La cosa interessante è che la comunità di PHP non è rimasta con le mani in mano ed ha risposto, sul gruppo di discussione interno di Google, con una serie di smentite ed approfondimenti molto interessanti e sicuramente da leggere.

Tra le varie scuse annesse all’articolo una, a mio parere raccapricciante, alludeva al fatto che gli esempi erano stati scritti per vecchie versioni del linguaggio. La migliore risposta a tale affermazione è stata:

You talk about “older versions such as 4 and even 3“.
Who is running versions of PHP that are that old on the open internet?
If you’re running on PHP3 or PHP4 on a public-facing website, your
very first priority is to upgrade to PHP5 for security reasons, not to
optimize your pages.

Seguita dalla citazione di un post di Bergmann dove si fa vedere come, effettivamente, la migrazione da php 4 a php 5 abbia portato reali benefici a Flickr (e non parliamo del blog di tizio o caio). Infatti con la semplice migrazione dell’interprete, a parità di codice, l’utilizzo medio di CPU ha avuto un calo di circa il 50% (il grafico in alto).

Ad oggi l’articolo non è stato ancora corretto, il che mi farà leggere tutti gli articoli su code.google.com con un approcio un po’ più critico…

ciuaz

Categories
php webdev

Ottimizzare symfony su DreamHost

twitornot: symfony on dreamhost optimization Qualche giorno fa, come esperimento personale, ho aggiornato (grazie all’aiuto di Federico per il layout), TwitOrNot. Di per sè l’applicazione è abbastanza banale, ma l’esercizio è stato fatto per testare alcune idee che da qualche tempo mi giravano per il cervello.

Innanzitutto, TwitOrNot migra dalla versione 1.1 alla 1.2.x di symfony, nel suo piccolo implementa l’autenticazione oAuth di Twitter non salvando in locale le password ma gestendo tutto tramite le API di quest’ultimo. Altra miglioria è stata la sostituzione, indolore visto l’esiguo numero di tabelle, di Propel con Doctrine, usando per quest’ultimo gli script di migrazione per gestire future implementazioni.

La cosa su cui però mi sono divertito di più è stata l’ottimizzazione dell’applicazione per l’utilizzo su un hosting come DreamHost utilizzando ySlow come calibro del mio lavoro.

Utilizzando lo script di analisi di Yahoo!, l’applicazione, nuda e cruda, presentava un bel D (a volte E) come risultato. Successivamente portato, tramite tweak del file di default .htaccess di symfony ad un onestissimo B (a volte C).

Vediamo in dettaglio i passaggi fatti.

Categories
php tecnologia webdev

Twit Or Not, ovvero scrivere applicazioni durante un barcamp

Sabato scorso ho partecipato all’AgileCamp organizzato dai ragazzi di Sketchin. L’evento è stato molto piacevole e mi ha permesso, oltre che a sentire talk molto interessanti, di rivedere un po’ di quei contatti con cui si dice sempre “un giorno faremo qualcosa insieme“.

Con Massimiliano c’è già qualcosa in ballo (e che presto vedrete online) ma li per li è venuta l’idea di non sprecare l’occasione “agile” per fare un po’ di pair programming e tirar fuori un’applicazioncina stupida in meno di un’oretta a cui pensavo da qualche settimana.

Ovvero Twit Or Not.

Categories
ajax webdev

jQuery 1.3, un mostro di performance

jquery_insertion_benchmarkIeri è stata rilasciata la versione 1.3 di jQuery, a mio parere una delle migliori librerie javascript sul mercato, che vede affiancate alle molte novità un notevolissimo incremento di performance.

JQuery 1.3 introduce un nuovo sub-framework per il CSS selector engine, totalmente indipendente dalla libreria e co-sviluppato con gli autori di Dojo, chiamato Sizzle. Il subframework in questione riduce del 49% i tempi di elaborazione del codice rispetto al precedente motore utilizzato in jQuery 1.2.x.

Di riflesso, tramite Sizzle, gli sviluppatori hanno potuto aggiungere (finalmente) la possibilità di associare eventi ad oggetti creati in realtime, il tutto senza preoccuparsi di dover rieseguire il bind di eventi agli stessi in caso di aggiornamento del DOM.

Ultima chicca è che questa versione di jQuery non introduce più fix per garantire compatibilità cross-browser all’interno del codice ma delega la funziona ad un oggetto dedicato chiamato jQuery.support. Questo permetterà, in futuro, di introdurre un minor numero di possibili bachi e di poter controllare più facilmente l’inserimento di nuovi controlli per i browser senza intaccare il codice dei singoli metodi del framework.

Trovate maggiori informazioni e qualche benchmark su jQuery 1.3 sulla documentazione di release ufficiale del progetto.

ciuaz

Categories
tecnologia webdev

Prototipazione rapida con Pencil

pencil Dopo un po’ di tempo passato usando, l’ormai vetusto, Dia e qualche altro tool online per lo sviluppo di wireframe a bassissimo livello per piccoli progetti personali ho riscoperto Pencil.

Tool che, con la versione 1.0, ha finalmente raggiunto un discreto stadio di maturità e, soprattutto, stabilità.

Pencil non è altro che un plugin per Firefox che permette di realizzare wireframe minimali. Le forme attualmente disponibili sono pochissime ed altrettanto poche sono le funzionalità per crearne di nuove, ma nella sua semplicità ed immediatezza risulta un ottimo tool per buttare giù qualche idea quando passa per la testa. Inoltre questo plugin permette di creare piccoli progetti “multipagina”, dove ogni pagina è un clone modificato della precedente, esportabili come una serie di PNG. Decisamente comodo per creare piccoli siti.

ciuaz

Categories
php webdev

Twitter su Symfony 1.1

Ho appena rilasciato la prima versione del plugin per Symfony 1.1 che permette di utilizzare tutte le api di Twitter, comprese le nuove relative al motore di ricerca.

Il plugin, chiamato con tanta fantasia idTwitterClientPlugin, permette quindi di modificare il proprio status, scaricare nei formati disponibili le varie timeline messe a disposizione da Twitter (pubblico, proprio, followers, messaggi privati, etc) e di usare i nuovi operatori di ricerca di Summize.

ciuaz

Categories
php webdev

Magicincludeshell.txt e WordPress 2.2.x

Ne avevano parlato qualche giorno fa su wordpress-it e su weblogstoolscollection, ma fino a quando non si prova in prima persona tutti sono restii ad aggiornare un blog, soprattutto se ha una template che usa plugin non più sviluppati o con codice che non sfrutta a pieno le API del sistema.

Beh, qualche giorno fa un blog da me gestito è stato “infettato” da uno script malevolo chiamato Magicincludeshell.txt che si installa come plugin nascosto nelle installazioni di WordPress precedenti alla 2.5 e che impedisce la pubblicazione di nuovi post.

Altra cosa “scomoda” che fa questo plugin è convertire tutte le pagine in post (non le cancella però).

Per scoprire se il proprio blog è infetto basta provare a postare, se comparirà una pagina bianca allora avrete la certezza di dover mettere mano al vostro db per ripristinare il sistema.

Categories
tecnologia webdev

GoogleBot, DreamHost e WordPress

Le pagine analizzate ogni giorno da GoogleBot

Questo trittico di pezzi da novanta per dire che GoogleBot sta diventando sempre più aggressivo, il 90% delle template di WordPress permette di fare browsing, indicizzazione e navigazione anche di pagine di archivio con contenuti duplicati (archivi, categorie, tag, ricerche, etc) e DreamHost non apprezza particolarmente di avere degli shared hosting messi al tappeto dalla combinazione dei primi due.

Pertanto oggi mi sono visto recapitare un’email dove mi si avvertiva che solo mio account (dove risiedono oltre a questo blog, un altro paio di siti che superano le 4000 pageview/giornaliere) occupava circa il 10% della CPU del server, a causa dei continui ed incessanti accessi dei bot di Google, MSN e Yahoo! su tutte le pagine, e che pertanto gli ip di tali bot venivano bloccati tramite .htaccess.

Per risolvere il problema ho quindi aggiornato i file robots.txt di tutti i domini (qui potete scaricare il mio ottimizzato per WordPress) aggiungendo alcune direttive per indicizzare solo le pagine, senza passare da tutti gli archivi.

Inoltre sto pensando di aggiornare il template in modo che in base al tipo di contenuto servito aggiunga un adeguato <meta name="robots" content="" />

E voi che fate? Lasciate i bot aggressivi navigare in tutto il sito? Perchè?

Intanto vi lascio un link ad un articolo di askApache su come ottimizzare il file robots.txt per WordPress.

cuiaz