TiNoleggio & Partners

Non allarmatevi, non mi riferisco ad una manifestazione con cantante lirico e ospiti internazionali, nè ad una società di revisione conti, ma all’ultimo progetto che sto seguendo.

Parlo di www.tinoleggio.it, portale di ricerca comparata per il noleggio di mezzi di trasporto, dall’automobile alla barca, creazione di una giovane start-up milanese che nel suo arsenale web annovera anche www.tiprovo.it e altri diversi progetti interessanti ancora in cantiere. TiNoleggio permette di trovare le tariffe (teoricamente) più basse sul mercato grazie alle numerose partnership intrecciate con società di noleggio o altri aggregatori di prezzi. Queste partnership commerciali devono naturalmente essere tradotte in software: e qui arriviamo al perchè sono stato chiamato 15 giorni fa a dare il mio contributo al progetto (se ve lo state chiedendo: sì, è squillato il telefono rosso che tengo nascosto dietro il quadro di Rembrandt)

Ci sono due problemi da risolvere. Il primo è che le modalità di accesso ai dati forniti dai partner, tramite le quali effettuare le ricerche, sono abbastanza variegate: database, API, siti web sui quali lanciare spider. Il secondo è che, all’aumentare dei partner, aumenta anche il tempo computazionale di ricerca, ed è fondamentale evitare di raggiungere il famigerato TAU (Traguardo di Assopimento Utente).

Uniformare i partner

La soluzione al primo problema è semplice: incapsuliamo i partner e i loro meccanismi di ricerca all’interno di una serie di classi polimorfe. Abbiamo quindi diverse classi Partner, contenenti definizioni e dettagli relativi ai partner, e PartnerSearchEngine, che incorporano la logica di ricerca sui dati del partner. In questo modo viene definita una linea guida per creare un futuro partner, in modo totalmente indolore, in quanto il motore di ricerca di TiNoleggio non dovrà essere riadattato per gestire la nuova integrazione: saprà già quali metodi chiamare per ottenere ciò che gli serve.

Parallelizzare le ricerche

Anche qui non parliamo di rocket science: se 3 processi ci mettono 3, 5 e 7 secondi ad eseguirsi, e vogliamo che il tempo di esecuzione totale sia sotto i 15 secondi, dovremo eseguirli in parallelo. Il tempo di esecuzione totale sarà quello di esecuzione del processo più lento (in linea teorica; bisogna tenere in considerazione l’overhead e il maggior consumo di risorse hardware).
In PHP, abbiamo due modi per eseguire processi paralleli: l’utilizzo delle fork e la chiamata di script lanciati in background (su Unix, in questo caso) Dato che le fork sono assolutamente sconsigliate in ambiente Apache, si ricade forzatamente sulla seconda opzione. Ci sono diverse funzioni che permettono di eseguire script in background: io ho utilizzato proc_open, flessibile e potente.

Oltre alla parallelizzazione dei processi di ricerca dei partner, è stato implementato un ulteriore livello di parallelizzazione: quello delle richieste HTTP, nel caso in cui la ricerca preveda l’utilizzo di chiamate ad API del partner o spidering del loro sito. Tutto ciò è stato ottenuto utilizzando la libreria cURL (modulo PHP da installare a parte), della quale ho incapsulato le funzinoalità in un paio di classi, per facilitarne l’utilizzo.

Come sempre, consigli e commenti sono sempre ben accetti!

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , ,

La potenza degli iteratori in PHP

Il titolo è forse un po’ troppo ad effetto, però se siete arrivati a leggere fin qui è proprio perchè incuriositi dalla roboanza. Ora siete imprigionati in questo post e userete iteratori vita natural durante.

Ma cosa sono gli iteratori? Sono l’implementazione di un design pattern – l’Iterator, appunto – che ha come scopo quello di risolvere un problema: manipolare collezioni di dati in maniera semplice, utilizzando un’interfaccia uniforme e comune a tutti gli iteratori.

Vi capitasse di fare un giro sulla documentazione della Standard PHP Library vi si potrebbe aprire un mondo; per chi ha fretta, invece, ecco una serie di slide con un po’ di applicazioni pratiche. Codice più uniforme, meno ripetizioni, meno errori.

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , , ,

Certificazione, mission accomplished

Non siete stati abbastanza veloci nel rispondere al post precedente, così ho fatto (stranamente) di testa mia e, dopo ben mezz’ora di studio e inenarrabili lotte per trovare parcheggio vicino alla sede d’esame,  da stamane sono un (orgoglioso?) possessore di una Zend PHP 5 Certification, uno dei 60 in Italia (280 in UK, 400 in Germania).

Ah, fosse stato così anche all’università!

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , ,

PHP Zend Certification, prenderla o no?

Sono sempre stato scettico sulla certificazione PHP proposta dalla Zend: a volte basta davvero una chiacchierata, o un occhio ai lavori svolti, per testare l’effettiva competenza di una persona. Inoltre, il certificato certifica (appunto) quanto uno sviluppatore sa di PHP e delle problematiche che ruotano intorno a lui, ma non prende in considerazione logiche di programmazione e best practices.

Sto però iniziando ad avere qualche dubbio.

Poco tempo fa ho trovato un’offerta di lavoro della Nintendo in cui si specificava che la certificazione sarebbe stata titolo gradito; senza contare che in qualità di web developer ho sviluppato i miei progetti più grossi perchè girassero su intranet, e che quindi non ho un portfolio da portare in dote ad un eventuale colloquio di lavoro.

Oggi ho provato il test di certificazione online, acquistabile sul sito Zend: passato senza troppi patemi, ma l’impressione è che chi non ha una vasta esperienza con PHP possa avere difficoltà. E che quindi la certificazione possa essere una discriminante tra chi usa PHP come linguaggio tutto fare e chi lo usa per applicazioni complesse.

Insomma, che dite: mi iscrivo ad una sessione di esame?

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , ,

Nuovo layout!

Un paio di anni scarsi fa, questo blog emetteva i suoi primi vagiti, ripetendo a mo’ di mantra la parola “contenuti”, a sottolineare quello che voleva essere il motivo portante di questa mia nuova presenza in rete.

Oggi, dopo 38 post (con questo 39, ben più di quello che confidavo avrei mai scritto) e una media di 8 visitatori (sembro il TG1 a sciorinare i dati dello share, ma ci tenevo a salutarli tutti, questi naviganti, a partire dalla mamma), festeggio con un po’ d’anticipo il compleanno del blog scoprendo la sua nuova veste grafica.

Si potrebbe anche rispondere, la sua “prima” veste grafica.

E’ un tema di Wordpress, quindi niente rocket science; ma non è mancata – nè mancherà – la personalizzazione del tema originale, della quale soprattutto spicca l’immagine di testata: le bellissime lampade fotografate durante il Gion Matsuri di Kyoto, nel 2008.

Fine capitolo layout. Inizio capitolo lingue straniere. Alcune pagine del blog, quelle che riguardano specificatamente me, sono scritte in lingua inglese, per motivi di maggiore visibilità professionale. Tra i Todo nella mia lista c’è l’opzione di rendere il sito multilanguage: vedremo. I post comunque penso proprio rimarranno in italiano.

Naturalmente, consigli e critiche sono sempre ben accetti. Avanti coi pomodori, dunque!

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: ,

evenIfHidden, un plugin per jQuery

Ho pubblicato oggi un plugin per jQuery. Si chiama evenIfHidden. E’ un plugin semplice che risolve un problema altrettanto semplice, ma del quale non ho trovato soluzioni pronte: quello di ricavare informazioni sul layout di un elemento del DOM (come width o height) quando l’elemento è nascosto.

Trovate la pagina ufficiale del plugin sul sito di jQuery, mentre trovate la pagina di test qui sul blog (guardatela perché è caruccia assai!).

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , ,

Intervista sul coworking

Giovedì ho avuto il piacere di raccontare a Radio24 le mia esperienze riguardo al coworking, ed in particolare al periodo passato nel Cowo.
Potete ascoltare qui la registrazione dell’intervista, in cui parlo nei 30 secondi finali ;)

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , ,

Strumenti per controllare la performance di MySQL

Nessun compendio, solo un paio di appunti a riguardo:

Mytop: permette di vedere i processi MySQL attualmente in esecuzione, ed eventualmente abbattere quelli pendenti o che stanno occupando troppe risorse di sistema. Esiste anche un package per Ubuntu.

log_slow_query: permette di tener traccia in un file di tutte le query che impiegano più di n secondi <nsec> ad eseguirsi. Per abilitarlo, oltre al metodo descritto nel link, possiamo modificare il nostro file my.cnf ed aggiungere, nella sezione [mysqld]:

long_query_time = <nsec>

log-slow-queries = /path/to/mysql_slow_query.log

Bisogna poi creare il file /path/to/mysql_slow_query.log e rendere l’utente mysql proprietario con un chown (questo su Linux, naturalmente)

Altro?

http://jeremy.zawodny.com/mysql/mytop/

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , ,

Netbeans, IDE per PHP

Si dice che l’IDE sia estensione stessa dello sviluppatore: se ne trova uno che abbia le funzionalità che ci servono e si impara ad usarlo in maniera veloce e produttiva.

Nella notte dei tempi usavo Homesite di Adobe, buono per creare pagine HTML tempestate di codice PHP (e viceversa) ma davvero poco per lo sviluppo serio (infatti l’hanno dismesso). Poi c’è stato Eclipse PDT, completo ma davvero troppo pesante e dal crash facile su Ubuntu. Mi sono quindi buttato su cose più leggere: Kate e GEdit (con le modifiche trendy & cool per farlo assomigliare a TextMate).

Infine, eccoci qua: Netbeans. Non l’avevo mai considerato perché non pensavo avesse un’estensione per PHP, e invece non solo ce l’ha ma, con sorpresa, gestisce tutto quello che mi può servire: debugging, unit testing (con PHPUnit), integrazione con Symfony. E quelle funzionalità base, come l’auto completamento del codice e la navigazione dei sorgenti, sviluppate in maniera intuitiva e che non richiedono troppi smanettamenti nella configurazione.

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , , , , , , , ,

Software per creare wireframes

Non sono un designer, ma lavorando per il web e avendo interesse per la User Experience capita di dover disegnare grafi, layout e interfacce. La soluzione matita + carta è sempre la più pratica, ma quando è necessario condividere i propri schizzi – e renderli modificabili – è più funzionale utilizzare un software ad hoc.

Esistono diversi software per wireframing, nell’ambito del web design. Parlando con Alberto, mi ha detto che nella loro società usano produttivamente Omnigraffle per Mac. Per Windows c’è Microsoft Visio. Andando più sul professionale c’è Axure, mentre una soluzione multipiattaforma è InDesign di Adobe.

Per le mie esigenze però alla fine ho trovato Mockups di Balsamiq: sketchy, simpatico e semplice da usare. Il software è a pagamento, ma c’è una bella demo web e una  installabile, per Adobe Air, perfettamente funzionante anche su Linux.

Per Alessia: dai che non è difficile questo!

  • Digg
  • del.icio.us
  • Facebook
  • StumbleUpon
  • Technorati
  • Twitter

Tags: , , , , ,