Ott 6

Torna online Il Reporter, aggiornato nella grafica, nel layout, nell’interfaccia di navigazione nella tecnologia ma sempre fedele al suo taglio di giornalismo di vita.

Set 4

Abbiamo scaricato e testato il nuovo browser di Google: Chrome. Il motore di rendering html è WebKit, già noto per essere leggero e performante. Il motore JavaScript è V8, realizzato ad hoc da Google.

Abbiamo comparato le performance dei vari browser utilizzando la piattaforma di test di V8, di seguito i risultati (i punteggi maggiori sono i migliori).

  • Google Chrome beta : 1.497
  • Operasoft Opera : 218
  • Mozilla Firefox : 155
  • Apple Safari : 139
  • Microsoft IE 7 : 31
  • Microsoft IE 6 : 25

E’ necessario commentare oltre?

Lug 28

Sono piacevolmente stupito. World News ha scelto una mia foto fatta l’anno scorso a Istanbul per un suo articolo: “Take your pick in Turkey“. E hanno correttamente citato l’autore (così vuole la licenza con cui ho caricato la foto su Flickr).

WN è una rete di oltre 20.000 testate online: ecco la ricaduta a livello di indicizzazione su Google.

La foto originale è nel mio set dedicato alla vacanza in Turchia nel 2006.

DSCN0062

Lug 27

Wordpress non è una piattaforma famosa per essere particolarmente efficiente e performante. Di release in release il team degli sviluppatori si proccupano di fare tuning, sia a livello di codice che nell’interfacciamento a MySQL.

Nonostante questi sforzi, si può spremere qualcosa in più in termini di performance pure a Wordpress. Le strategie sono due:

  1. effettuare una copia statica delle pagine;
  2. cachare ed ottimizzare direttamente il codice php.

La premessa è che si possa avere il controllo del proprio web server: XCache non è un modulo standard di PHP, quindi bisogna installarlo. Vediamo come fare su Ubuntu/Debian.

  1. Loggatevi come root
  2. apt-get update
  3. apt-get install php5-xcache

A questo punto il modulo è installato e troverete il suo file di configurazione in /etc/php5/conf.d Aprite xcache.ini e settate i seguenti attributi

  • xcache.admin.user = “$vostro_user_name”
  • xcache.admin.pass = “$vostra_password_in_md5″
  • xcache.optimizer = On

Il grosso è fatto. Ma vogliamo avere sotto controlo il fuzionamento di XCache. Create un virtual host, per esempio xcache.vostrodominio.it con document root in /usr/share/xcache/admin/

Riavviate Apache e andate a controllare xcache.vostrodominio.it e loggatevi con nume utente e password specificati in xcache.ini (in questo caso la password va inserita ovviamente in chiaro). Dovrebbe essere tutto a posto.

Adesso occupiamoci di Wordpress. Scaricate il plugin XCache for Wordpress nell directory wp-content e scopattatelo. Aprite object-cache.php in un editor di testo e modificate le seguenti riche di codice:

//XCache Admin Username
$_SERVER["PHP_AUTH_USER"] = “$vostro_user_name”;
//XCache Admin Password
$_SERVER["PHP_AUTH_PW"] = “$vostra_password_in_chiaro”;

Fatto questo, riavviate Apache ed avete finito: questo plugin non ha bisogno di essere attivato.

Utilizzando Wordpress 2.6 ho percepito un miglioramento delle performace di 2,5 volte. Senza XCache la homepage di un blog in sviluppo che ho ustato per test veniva servita a 3,5 pagine al secondo; con XCache si è passati a 9 pagine al secondo.

Il resto dei tempi dovrebbero essere per la maggior parte accesso al database.

Set 15

Negli ultimi mesi sono stato molto concentrato sulla realizzazione della nuova interfaccia di gestione del nostro CMS t.nes. Spero di poter fare una panoramica al più presto.

L’ultima fatica é stata realizzare un widget per la composizione di questionari. I requisiti, beno o male i soliti: facile e veloce da utilizzare. Ogni risposta può essere vera o falsa.

Tutto il front-end di amministrazione é stato scritto basandomi sulle ottime YUI ed estendendone le funzionalità . Il widget per la composizione dei questionari ha seguito la stessa linea di sviluppo con una particolare attenzione all’editing in-line.

Il risultato é stato soddisfacente, riuscendo ad ottenere un widget che lavora in modo totalmente asincrono per le sue funzionalità  (creazione, modifica, cancellazione) sia sulle domande che sulle risposte. Mancano ancora un paio di dettagli da implementare:

  • segnalazione dello stato di caricamente durante le chiamate XMLHttpRequest,
  • drag & drop per poter riordinare domande e risposte,
  • debugging.

Di seguito un breve screencast che mostra il funzionamento del nuovo widget.

Set 12

Piccolo bilancio via Analytics di questi primi nove mesi di blogging… a singhiozzi. La cosa che mi ha fatto sicuramente più piacere é che i miei lettori preferiscono Firefox.

browsers_stats.png

Sommando i browser basati su Gecko (Firefox, Mozilla e Camino), si ottiene un favoloso 71,31%.

Internet Exploder (com’é affettuosamente soprannominato qui in ufficio) si piazza al secondo posto con il 22,96%.

Poi i browser di derivazione KHTML (Safari e Konqueror) al 3,9% e fanalino di coda Opera al 1,65%.

Purtroppo i sistemi Windows sono ancora troppi… ma non si può avere tutto.

Giu 15

Google Logo A volte mi viene la curiosità  irrefrenabile di capire e studiare da dove arrivano certi successi. Conoscevo la storia di Google per sommi capi, l’ho visto nascere sul web e sbaragliare la concorrenza, sto assistendo ad un successo a 360 gradi della più famosa azienda del Web.

Ma nel 1998 Sergey Brin e Lawrence Page erano due studenti dell’Università  di Stanford, dipartimento di Computer Science.

Quell’anno pubblicarono una relazione sul loro progetto di motore di ricerca. Nel paper c’é un’attenta analisi del perché era necessario un nuovo approccio ai motori di ricerca su web, perché era necessario trovare nuovi paradigmi, le aspettative degli utenti, le esigenze e le soluzioni tecnologiche. Una lettura interessante: “The Anatomy of a Large-Scale Hypertextual Web Search Engine“.

Poco dopo Page e Brin fondarono Google Inc. ed é storia.

Cosa poco nota é che PageRank (l’algoritmo di assegnazione di importanza delle pagine alla base della tecnologia di Google) essendo stato sviluppato all’interno di una università  é un brevetto di Stanford, che Google Inc utilizzerà  in licenza fino al 2011, anno in cui entrà  in possesso della tecnologia inventata dai due fondatori.

Non sono note le cifre delle royalties pagate da Google a Stanford, ma é risaputo che il campus californiano ha budget quasi illimitati per la ricerca.

Mar 16

www.alpinelogistics.net In questi giorni il lavoro é alle stelle: veramente tantissimo da fare.

Ma sono decisamente soddisfatto, anche perché abbiamo pubblicato un sito a cui tengo molto: Alpine Logistics.

Julia e Manuel sono i due fondatori di questa piccola azienda poco convenzionale. L’idea di business é interessante: costruire un’agenzia di viaggi attorno alla loro passione, la montagna. Il loro mercato preferenziale é l’estero, portare appassionati di alpinismo come loro in Italia a scoprire le meraviglie delle Alpi piemontesi e valdostane.

Quando Matteo ed io abbiamo incontrato per la prima volta Julia e Manuel, abbiamo intravisto la possibilità  di farne un progetto particolare: la passione per la montagna, il tipo di contenuti e il loro impatto ci hanno portato a pensare al blog come strumento preferenziale.

Per le foto Flickr era lo spazio più adeguato per condividere le foto, testimonianze delle loro esperienze e altro punto di accesso per conoscere Julia e Manuel nel loro ambiente naturale.

A legare tutto, i contenuti all’interno del sito/blog e le foto caricate su Flickr un lavorone sulla tassonomia. Attraverso i tag:

  • integriamo da Flickr le foto contestuali ad un articolo o ad una pagina,
  • relazioniamo post e pagine tra loro,
  • colleghiamo le foto delle gallery agli articoli.

L’integrazione con Google Maps completa il quadro dei luoghi in cui Julia e Manuel organizzano le loro escursioni.

Chiaramente lo strumento che abbiamo scelto é Wordpress, supportato da una buona dose di plugin e personalizzazioni: FAlbum, Ultimate Tag Warrior, Google Sitemaps, Inline Google Maps, Image Manager, etc.

Infine, un lavorone di SEO nel cercare la massima urlabilty raffinando al meglio le strutture di permalink e lavorando al meglio sugli slug di Wordpress.

Julia e Manuel hanno avuto fiducia nell’idea: grazie.

Gen 24

Può essere interessante integrare Wordpress con le social web application per arricchire i contenuti del proprio blog o per sperimentare formule di marketing integrato.

L’obiettivo di questo esperimento é utilizzare Flickr in modo da avere una gallery contestuale ai contenuti del post. La denotazione contestuale la ricaviamo attraverso il tagging.

Abbiamo bisogno di installare e attivare due plugin di Wordpress:

Vi rimando alla documentazione dei rispettivi plugin per le procedure d’installazione e configurazione.

Una volta che siete certi che Ultimate Tag Warrior funziona ed avete taggato qualche post, si procede in questo modo. E’ necessario modificare il file ultimate-tag-warrior.php che trovate nella cartella /plugins/UltimateTagWarrior aggiungendo in coda la seguente funzione.


function UTW_GetTagsForCurrentPost() {
global $utw, $post;
$myTags = $utw->GetTagsForPost($post->ID);
$r = array ();
$i = 0;
foreach ($myTags as $myTag) {
$r[$i] = $myTag->tag;
$i++;
}
return $r;
}

UTW_GetTagsForCurrentPost() ha il semplicissimo compito di estrarre l’array di tags che abbiamo assegnato ad un post.

Fatto questo modifichiamo i nostri template. L’idea é che nel loop di Wordpress, vicino a post e tag, vengano estratte le immagini contestuali tratte da Flickr attraverso il plugin flickrRSS. Ecco l’esempio di codice.


<?php
if(count(UTW_GetTagsForCurrentPost()) > 0) {
$myTags = implode(",", UTW_GetTagsForCurrentPost());
get_flickrrss(6, "user", $myTags, "square", "", "", "IL_VOSTRO_ID_FLICKR");
get_flickrrss(6, "public", $myTags, "square", "", "", "");
}
?>

Il funzionamento anche in questo caso é semplice:

  • innanzi tutto verifico che il post abbia effettivamente dei tags,
  • poi concateno i tag delimitandoli con le virgole (come richiesto da flickrRSS,)
  • infine richiamo flickrRSS per stampare le immagini.

Vi rimando al sito di flickrRSS per la documentazione e le possibilità  della funzione.

Gen 24

Per poter accedere alla API di YouTube é necessario ottenere un Developer ID e la documentazione é abbastanza completa, anche se mi aspettavo qualche metodo in più. Le metodologie di accesso sono due: REST e XML-RPC.

Obiettivo del post é fare una panoramica di come implementare una classe Java che, dati DEV_ID e una lista di VIDEO_ID, acceda alle API di YouTube, ne scarichi i dettagli, provveda a costruire una cache su filesystem. Non entrerò in dettagli che uno sviluppatore Java conosce sicuramente meglio di me.

Metologie di caching:

  • la più semplice in Java é serializzare l’oggetto ottenuto dall’XML su filesystem;
  • per palati più raffinati, si possono utilizzare ottime librerie open source come

REST Interface

Interfaccia estremamente semplice si basa su una chiamata http che come risultato restituisce un file xml. Un esempio.

http://www.youtube.com/api2_rest?
method=youtube.videos.get_details&dev_id=YOUR_DEV_ID
&video_id=YOUR_VIDEO_ID

dove:

  • method é il parametro in cui si indica il metodo delle API YouTube a cui si vuole accedere;
  • dev_id il proprio id di sviluppo;
  • video_id é l’id univoco del filmato su YouTube.

La nostra classe:

  1. scorre la lista di VIDEO_ID;
  2. verifica se esiste già  una cache per quel video (o verificando su filesystem se esiste l’oggetto serializzato o interroganto EHCache/OScache);
  3. se non esiste una cache:
    • farà  la chiamata http alle API di YouTube
    • riceverà  l’xml di dettaglio del video per quel determinato VIDEO_ID
    • elaborerà  l’xml trasformandolo in un oggetto strutturato nel modo che ci viene più comodo e utile
    • creerà  la cache per quell’oggetto
  4. se esiste l’oggetto cachato, la classe si preoccuperà  soltanto di recuperarlo;
  5. viene restituita una lista di oggetti contenenti i dettagli dei nostri video.

Per effettuare una chiamata http é necessaria una libreria che implementi un client http, va benissimo l’HttpClient del progetto Jakarta Commons. La chiamata può essere fatta in GET o in POST: in questo senso la documentazione di YouTube non dice nulla (l’esempio sopra simula una GET) ma penso che l’API accetti entrambi i metodi (preferibile il POST).

Il codice (plausibilmente un metodo privato della classe) dovrà  essere strutturato più o meno così:

HttpClient client = new HttpClient();
PostMethod method = new PostMethod(”http://www.youtube.com/api2_rest”);
method.addParameter(”method”, “youtube.videos.get_details”);
method.addParameter(”dev_id”, YOUR_DEV_ID);
method.addParameter(”video_id”, YOUR_VIDEO_ID);
try {
// eseguo la chiamata
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println(”Method failed: ” + method.getStatusLine());
}
// leggo la risposta
byte[] responseBody = method.getResponseBody();
// utilizzo la response.
// Attenzione: assicurarsi che l’encoding sia corretto ne non siano dati binari
String myXML = new String(responseBody));
} catch (HttpException e) {
… // gestione dell’eccezione
} catch (IOException e) {
… // gestione dell’eccezione
} finally {
// chiudo la connessione.
method.releaseConnection();
}

Le possibilità  di ottimizzazione sono svariate, come per esempio creare un unico client e sfruttare un’unica connessione per evitare overhead inutili: a voi la scelta. La response che si otterrà  sarà  simile a questa.

Per elaborare l’xml e trasformarlo in un più comodo oggetto, possiamo utilizzare uno dei moltissimi parser a disposizione della piattaforma Java. La scelta in questo caso é più orientata su considerazioni di gusto (riguardo l’API del parser), di leggerezza del parser e della sua velocità  di elaboarzione.

Per un utilizzo leggero e snello consiglio di utilizzare un pull-parser anche senza feature di validazione (che in questo caso servono a poco e non avremmo comunque il DTD su cui lavorare). Un elenco veloce di alcuni:

Alla prossima puntata farò una panoramica su come può funzionare l’approccio via interfaccia XML-RPC.

« Previous Entries