22 dicembre 2010

Drupal + jQuery: galleria fotografica stile ‘filmstrip’

Per il sito Voilà le Bijou, che espone le creazioni di bigiotteria di Donella Menichini, ho sviluppato su Drupal 6 un semplice tema espositivo basato sui colori del logo (creato da Mauro Luccarini di Cervelli Riuniti), che focalizza tutta l’attenzione sui bijou.


Avendo deciso con Donella di suddividere i bijou in collezioni (dai nomi che richiamano il mondo dell’opera e del teatro), ho deciso di creare per ciascuna collezione un’apposita pagina con la relativa galleria fotografica, fatta in modo tale da avere esposto un singolo bijou per volta, ma con un colpo d’occhio su tutta la collezione.

In pratica, volevo avere un’immagine grande del bijou selezionato in primo piano, e sotto una filmstrip di thumbnails.


Senza andare a scovare moduli dedicati per gallerie fotografiche, ho creato questa semplice visualizzazione basandomi principalmente su Views e Imagecache.

1. Moduli necessari

  1. Views 2 (per creare le pagine contenenti la galleria)
  2. Views Custom Field (per generare del markup ad hoc)
  3. Imagecache (per creare le immagini da visualizzare)
2. Organizzazione preliminare
Il modo più razionale di organizzare il contenuto in collezioni è sfruttare la Tassonomia, creando un vocabolario “Collezioni” e aggiungendovi tutte le collezioni presenti come termini.

Ciascun nodo rappresenta un bijou, ed appartiene soltanto ad una collezione. Può avere una o più immagini allegate, ma soltanto la prima è necessaria per l’esposizione, ed è quella che prenderemo in considerazione (le altre sono visibili solo sulla pagina dedicata al bijou).

Occorre implementare due preset di Imagecache, uno per le thumbnails, e uno per l’immagine grande.
Il primo preset si chiama collezioni_thumb, e ha un’azione Scale And Crop a 80x80, poiché voglio thumbnails quadrate, create a partire dalla foto del bijou.

Il secondo preset si chiama chiama collezioni_full, e ha un’azione Scale a 400x100%, poiché voglio immagini di larghezza 400px (le foto sono tutte in formato 3:2).

3. Costruire la pagina in Views
Poiché le collezioni sono termini di un vocabolario di tassonomia, la pagina che creerò in Views andrà a costituire la visualizzazione predefinita delle pagine taxonomy/term.

Per costruirla, si può partire dalla vista che viene creata con l’installazione di Views, e che fa uso degli argomenti per poter generalizzare le pagine per ogni termine di tassonomia.


L’Argomento necessario da passare alla vista è l’ID del Termine di tassonomia (TID).

Nelle Impostazioni di pagina quindi, Path deve essere settato a taxonomy/term/% dove il ‘%’ è il segnaposto per il TID che viene passato dall’URL (ciò è indipendente dagli URL creati con Pathauto, e funziona lo stesso).

Impostazioni di base: il titolo della pagina è bene che sia settato a %1, che in questo caso indica il valore del TID (e quindi è il nome del termine, cioè della collezione, nel nostro caso).

Lo Stile riga deve essere Campi, perché abbiamo solo bisogno di alcuni dati da passare a jQuery per creare la galleria e gli effetti, e lo Stile va bene che sia una HTML list (nelle opzioni dello stile, i campi devono essere raggruppati per Taxonomy: Termine, e va bene un elenco non ordinato – questo si può settare solo dopo aver inserito il campo corrispondente, vedi oltre).

Filtri: basta che il nodo sia pubblicato (in questo caso, le collezioni sono appannaggio solo dei bijou, e non c’è pericolo che ci vada a finire una pagina o altri tipi di contenuto – altrimenti sarebbe stato opportuno filtrare per tipo di contenuto).

Criteri di ordinamento: per titolo del nodo (visto che le collezioni hanno bijou numerati progressivamente).

Veniamo quindi ai Campi necessari, uno per uno nel loro ordine:
  • Taxonomy: Termine. Ci serve solo per poter raggruppare i campi nelle opzioni dello stile. Escluso dalla visualizzazione, perché verrà già visualizzato come campo di raggruppamento.
  • Contenuto: Foto. Sono le foto piccole di ciascun bijou; deve avere le seguenti proprietà:
    • Collega questo campo al suo nodo (ci serve perché se jQuery fosse disattivato, l’utente comunque potrebbe navigare alla pagina del bijou)
    • Raggruppa valori multipli, show 1 value from 0 (poiché deve essere visualizzata solo la prima immagine del nodo)
    • Etichetta: nessuno
    • Format: collezioni_thumb image (l’immagine piccola, larghezza 80px, che costituisce la thumbnail su cui cliccare per vedere l’immagine grande)
  • Contenuto: Foto. Un altro inserimento dello stesso campo di cui sopra, perché abbiamo bisogno di inserire nella vista due volte la stessa immagine: la prima come thumbnail, la seconda (questa) come foto grande. Ecco le proprietà necessarie:
    • Escludi dalla visualizzazione (perché useremo Customfield e jQuery per visualizzare l’immagine dove, quando e come ci pare!)
    • Raggruppa valori multipli, show 1 value from 0 
    • Etichetta: nessuno
    • Format: collezioni_full file path (l’indirizzo dell’immagine grande, larghezza 400px, che useremo come parametro per jQuery)
  • Nodo: Titolo. Il nome de bijou che ci servirà per un’ulteriore formattazione della galleria. Escluso dalla visualizzazione, per passarlo a jQuery.
  • Customfield: markup. Di per sé il campo consente di inserire del markup a piacere nella vista. Noi lo usiamo per passare dei dati a jQuery, tramite un tag span creato ad hoc. Questo campo deve essere per forza l’ultimo dell’elenco, per poter avere a disposizione tutti i dati estratti dal database grazie alle query fatte coi campi che lo precedono. Ecco come lo formattiamo:
    • Rewrite the output of this field. Questa proprietà mette a disposizione i dati dei campi precedenti: inseriamo il titolo del nodo e il path dell’immagine grande in uno span:
      • Testo: <span class="img-link" title="[title]|[field_bijou_foto_fid_1]"></span>
      • Li mettiamo nell’attributo title di uno span vuoto in modo che l’apparenza della pagina non cambi, ma siano comunque accessibili da jQuery. Tra i due mettiamo un “|” per separare i campi. Tornerà utile più tardi.
Strettamente parlando, il campo customfield (e quindi il modulo Views Custom Field) non sono necessari, poiché l'opzione "Rewrite the output of this field" è disponibile con ogni campo, e quindi potevamo sfruttare quella dell'ultimo tra i campi precedenti. Però in questo modo l'output è più pulito e si separa contenuto da funzionalità aggiuntiva, consentendo una migliore intelligibilità del tutto. Poi fate voi...

Se andiamo a vedere la pagina creata con questa vista, osserveremo soltanto una lista di thumbnails che inviano al relativo nodo.

4. Creazione della galleria con jQuery
4.1 Markup: analisi
Adesso passiamo al codice HTML/CSS: nella cartella del tema, si clona il file page.tpl.php e lo si rinomina in page-taxonomy-term.tpl.php per poter customizzare il codice delle pagine che utilizzeranno la vista appena creata.

L’architettura della lista di thumbnails creata da Views è una lista non ordinata, di cui ciascun elemento è fatto così (questo è il primo):

<li class="views-row views-row-1 views-row-odd views-row-first">  
 <div class="views-field-field-bijou-foto-fid">
  <div class="field-content"><a href="/articoli/callas-01"><img src="http://voilalebijou.com/sites/default/files/imagecache/collezioni_thumb/foto/callas-01/callas1.jpg" alt="" title="Girocollo Callas 01"  class="imagecache imagecache-collezioni_thumb imagecache-default imagecache-collezioni_thumb_default" width="80" height="80" /></a></div>
 </div>

 <div class="views-field-markup">
  <span class="field-content"><span class="img-link" title="Callas 01|sites/default/files/imagecache/collezioni_full/foto/callas-01/callas1.jpg"></span></span>
 </div>
</li>

Cioè, gli <li> sono tutti di classe .views-row e contengono due campi (<div>):
  1. div.views-field-field-bijou-foto-fid, che ha la thumbnail con il link al nodo
  2. div.views-field-markup, che contiene lo <span> con le informazioni sul titolo del bijou e il path della sua immagine grande, che abbiamo creato prima.
Il markup del customfield ha poco senso, mi rendo conto. Purtroppo di base Views non consente una customizzazione dell’output dei vari campi, il cui contenuto è sempre inserito in uno span.field-content, anche quando questo potrebbe creare problemi di validazione (ad esempio se uno volesse inserirvi uno heading o altri elementi block level…). La soluzione più veloce è usare il modulo Semantic Views, che ci consente di scegliere e customizzare i tag che costituiscono i campi visualizzati. Ma qui non è proprio necessario.

Per avere una film strip orizzontale (e non un elenco-lista verticale) ci serve del CSS per gli <li>, nel template della pagina (page-taxonomy-term.tpl.php):

.views-row{
 display: inline-table;
 width: 100px;
}

La proprietà inline-table ci consente di avere ogni thumbnail accanto all’altra in fila, mentre la larghezza ci dà maggiore spaziatura orizzontale.

4.2 Visualizzazione dell’immagine ingrandita con jQuery
Il piano è questo:
  1. inserire un <div> tra il titolo della pagina <h3> e la lista <ul>, dove visualizzare l’immagine grande con il suo titolo, collegati al bijou rappresentato
  2. caricare subito l’ingrandimento della prima thumbnail
  3. collegare il click su ogni thumbnail con l’aggiornamento dell’immagine, sostituendo quella corrente con quella relativa alla thumbnail cliccata.
Finalmente si passa a jQuery, e si procede in questo modo: prima di tutto si devono salvare i dati che ci servono, che sono:
  1. il link al nodo di destinazione
  2. il path dell’immagine grande da caricare
  3. il titolo del nodo da visualizzare insieme all’immagine grande.
Si parte con il primo elemento della lista, perché vogliamo che il suo ingrandimento sia visualizzato al caricamento della pagina. Basta accedere al suo attributo href:

var item = $('.views-row-first a:first').attr('href');

Gli altri due parametri li avevamo inseriti nel title dello <span> creato con il customfield, ma siccome è una sola stringa con due attributi, prima di poterli utilizzare vanno separati. Ecco come si fa:

var rel = $('.views-row-first').find('.img-link').attr('title');
var split = rel.split("|");
var title = split[0];
var imglink = split[1];

Il metodo Javascript split, data una stringa, restituisce un array con i risultati della suddivisione. Il carattere “|” ci è servito come indicatore del punto di suddivisione.

A questo punto basta inserire il contenitore dove caricare l’immagine, che chiamiamo “zoom”:

$('h3').after('<div id="zoom"><a href="' + item + '"><img class="zoom" src="/' + imglink + '" alt="" /></a><a class="desc" href="' + item + '">' + title + '</a></div>');
Il div#zoom lo formattiamo con questo CSS:

#zoom{
 width: 400px; /* la larghezza esatta dell’immagine grande data da Imagecache */
 height: 270px;
 margin: 5px auto;
 position: relative;
}

Al suo interno abbiamo aggiunto due tag <a>: il primo contiene l’immagine, il secondo (.desc) il suo titolo, che formatteremo con un’etichetta, così:

.desc{
 background: url(<?php print $base_path.$directory; ?>/images/fold.png) top left no-repeat; color: #d00000;
 font: 1em Monika, 'Monika italic', "trebuchet ms", sans-serif;
 text-align: center;
 text-decoration: none;
 position: absolute;
 bottom: 50px; right: -3em;
 padding: 1em;
}

Il php nella proprietà background serve per stampare il percorso fino alla cartella del tema, dove c’è l’immagine di sfondo con la “piega” dell’etichetta.

La font “Monika” è un carattere calligrafico molto in sintonia con l’argomento: “Monika italic” è la font che ho creato con Font Squirrel per importarla con il metodo @font-face, mentre il primo “Monika” è il nome standard della font (così se qualcuno ce l’ha già installata sul proprio computer, utilizziamo quella, che di solito viene renderizzata meglio).

Il posizionamento assoluto è relativamente al contenitore div#zoom, che abbiamo dichiarato appositamente come position: relative.

Adesso la pagina visualizza appena caricata l’ingrandimento della prima thumbnail, con un’etichetta col titolo. Ambedue linkano al nodo visualizzato.

Per estendere la funzione d’ingrandimento anche alle altre thumbnail, basta replicare il codice al click di ogni thumb, con qualche piccola modifica:

$('.views-row a').click(function(){
 var itemlink = $(this).attr('href');
 var rel = $(this).parents('.views-row').find('.img-link').attr('title');
 var split = rel.split("|");
 var imglink = split[1];
 var title = split[0];
 $('.zoom').fadeOut(250);
 $('#zoom').html('<a href="' + itemlink + '"><img class="zoom" src="/' + imglink + '" alt="" /></a><a class="desc" href="' + itemlink + '">' + title + '</a>');
 $('.zoom').hide().fadeIn(500);
 return false;
});

Come transizione tra due fotografie, abbiamo inserito un fade out/fade in (in pratica: si nasconde l’immagine facendola dissolvere nel nulla; mentre è nascosta cambiamo l’immagine visualizzata e poi la facciamo ricomparire bella nuova); per il resto lo script è identico nel suo funzionamento.

Return false; serve per impedire al browser di seguire il link alla pagina del nodo: le thumbnail servono solo per ingrandire l’immagine.

Ora la pagina ha tutto ciò che le serve per il funzionamento di base.


4.3 Effetti per la film strip
Aggiungiamo adesso qualche semplice effetto di hover e selezione per le thumbnail. Ecco cosa implementerò:
  1. Le thumbnail, da un’opacità dell’80%, diventeranno completamente opache al passaggio del mouse
  2. Contemporaneamente, si creerà sfumando un bordo rosso
  3. La thumbnail dell’immagine correntemente visualizzata avrà queste due caratteristiche fisse su di sé.
Innanzitutto, un po’ di CSS per l’aspetto di default delle thumbs:

.views-row a img{
 opacity: .8;
 -moz-opacity: .8;
 filter: alpha(opacity=80);
 padding: 1px;
}
.views-row a{
 outline: none;
}

Qualche dichiarazione cross-browser per l’opacità e un padding per creare il “bordo”, che per far prima sarà solo un cambio di background-color. Ho tolto l’outline dai link delle thumb perché è antiestetico quando un link non fa lasciare la pagina.

Passiamo al comportamento delle thumb quando il puntatore ci passa sopra. Ecco il codice jQuery, basta anteporlo a quello che abbiamo scritto prima per la visualizzazione dell’immagine ingrandita:

$('.views-row a').hover(
 function(){
  $(this).children('img').animate({
   opacity: 1,
   backgroundColor: "#d00000"
  }, 300);
 },
 function(){
  $(this).children('img').animate({
   opacity: .8,
   backgroundColor: "#000"
  }, 300);
 }
);

L’unica cosa da notare qui è che per far funzionare l’animazione del background-color (che grazie al padding di cui sopra ci dà l’illusione di creare un bordo attorno all’immagine) è necessario inserire il plugin jquery.color, ad esempio inserendo nel file .info del tema Drupal la seguente dichiarazione (in questo modo però verrà caricato in ogni pagina – cosa che nel mio progetto è sicuramente desiderabile):

scripts[] = scripts/jquery.color.min.js

(ovviamente dopo aver messo il file dichiarato nella sottocartella indicata della directory del tema, che nel mio caso è “scripts”).

La versione del plugin che ho indicato è ottimale perché funziona anche con Safari (altre non vanno).
Adesso, per cambiare le proprietà della thumbnail relativa all’immagine corrente, creiamo una classe CSS che appiopperemo di volta in volta alla thumb cliccata:

.current img{
 opacity: 1 !important;
 -moz-opacity: 1 !important;
 filter: alpha(opacity=100) !important;
 background-color: #d00000 !important;
}

Le dichiarazioni !important ci servono per passar sopra ai settaggi imposti da altre operazioni dello script jQuery.

Per attaccarla/staccarla dalle thumb man mano che vengono cliccate usiamo i metodi jQuery addClass/removeClass. Per prima cosa si attribuisce alla prima thumbnail, quella dell’immagine che è visualizzata di default:

$('.views-row-first a').addClass('current');
var item = $('.views-row-first a').attr('href');
/* [...] */

e poi nell’evento click di ciascun thumb:

.click(function(){
 $('.views-row').find('.current').removeClass('current');
 $(this).addClass('current');
 var itemlink = $(this).attr('href');
/* [...] */

Con questo abbiamo finito!

5 Script completo
Ecco quindi lo script completo che abbiamo costruito passo passo:

$(document).ready(function(){

$('.views-row-first a').addClass('current');
var item = $('.views-row-first a').attr('href');
var rel = $('.views-row:first').find('.img-link').attr('title');
var split = rel.split("|");
var imglink = split[1];
var title = split[0];
$('h3').after('<div id="zoom"><a href="' + item + '"><img class="zoom" src="/' + imglink + '" alt="" /></a><a class="desc" href="' + item + '">' + title + '</a></div>');

$('.views-row a').hover(
 function(){
  $(this).children('img').animate({
   opacity: 1,
   backgroundColor: "#d00000"
  }, 300);
 },
 function(){
  $(this).children('img').animate({
   opacity: .8,
   backgroundColor: "#000"
  }, 300);
 }
).click(function(){
 $('.views-row').find('.current').removeClass('current');
 $(this).addClass('current');
 var itemlink = $(this).attr('href');
 var rel = $(this).parents('.views-row').find('.img-link').attr('title');
 var split = rel.split("|");
 var imglink = split[1];
 var title = split[0];
 $('.zoom').fadeOut(250);
 $('#zoom').html('<a href="' + itemlink + '"><img class="zoom" src="/' + imglink + '" alt="" /></a><a class="desc" href="' + itemlink + '">' + title + '</a>');
 $('.zoom').hide().fadeIn(500);
 return false;
});

});
Ed ecco anche il CSS:
.views-row{
 display: inline-table;
 width: 100px;
}
.views-row a{
 outline: none;
}
.views-row a img{
 opacity: .8;
 -moz-opacity: .8;
 filter: alpha(opacity=80);
 padding: 1px;
}

#zoom{
 width: 400px;
 height: 270px;
 margin: 5px auto;
 position: relative;
}
.desc{
 background: url(<?php print $base_path.$directory; ?>/images/fold.png) top left no-repeat; color: #d00000;
 font: 1em Monika, 'Monika italic', "trebuchet ms", sans-serif;
 text-align: center;
 text-decoration: none;
 position: absolute;
 bottom: 50px; right: -3em;
 padding: 1em;
}

.current img{
 opacity: 1 !important;
 -moz-opacity: 1 !important;
 filter: alpha(opacity=100) !important;
 background-color: #d00000 !important;
}

17 dicembre 2010

beloved snow


Oggi ho passato il mio non-pomeriggio intrappolato in auto cercando di andare da A a B.

12 ottobre 2010

a Holga trip of sorts (II)









26 luglio 2010

Pistoia Festival 2010

Collaborando con gli amici Mauro Luccarini e Chiara Belliti di Cervelli Riuniti, abbiamo creato il blog ufficiale del Pistoia Festival 2010, www.pistoiafestival.it.

Su design di Mauro (che ha creato anche il logo del Festival e tutta l'immagine coordinata), io mi sono occupato dello sviluppo web, mettendo su un bel blog Wordpress.

L'idea è quella di avere ogni giorno un post che descriva il programma del giorno stesso, così da fornire una base d'informazioni attendibile e sempre aggiornata. La redazione (formata da Chiara, Alessio Innocenti e Donella Menichini) si occupa anche di creare approfondimenti sui vari personaggi del Festival (come ad esempio su alcuni dei protagonisti del Pistoia Blues) e sono state realizzate varie interviste, sia a personaggi noti che a gente comune.

Io invece, rivesto anche il ruolo di fotografo ufficiale, seguendo eventi e documentando interviste e curiosità. Tutto questo per dare uno spaccato più completo e vivo della manifestazione, che dovrebbe coinvolgere la vita estiva di ogni pistoiese.

Eppoi, vale la pena ricordare che è stato possibile realizzare questo blog soltanto grazie ai nostri sponsor locali, che hanno creduto in un'iniziativa per cui le istituzioni non avevano fondi:


16 giugno 2010

Case study: CSDO.it

Ieri ho finalmente lanciato la nuova veste grafica e strutturale della homepage del Centro Studi Discipline Orientali di Vinci (FI), una Scuola di arti marziali e discipline taoiste.

L'idea iniziale era quella di mantenere bene o male i colori della versione precedente, perché identificativi della Scuola. In realtà, il testo nero su sfondo arancio dell'originale aveva secondo me dei problemi di leggibilità. La sfida è stata quindi trasformare l'effetto finale del sito mantenendone i parametri generali, e credo proprio di esserci riuscito.

Innanzitutto ho studiato a fondo il tema di colori da utilizzare per tutta la progettazione del sito, sfruttando kuler (una web app della Adobe molto utile per sviluppare degli "accordi cromatici", per dirla con la terminologia di Johannes Itten), dove ho creato un accordo a 5 colori, mantenendo l'arancio originale (solo un po' più brillante).

Ecco i colori scelti:



FF8830 A6B06D 589482 8C2423 C72B10

Osservandoli tutti insieme, si nota come il blu-verde centrale sia il più "profondo" di tutti, seguito dal rosso scuro e dal verde, e infine dall'arancio e dal rosso che sono i più brillanti e che svettano sopra tutti gli altri.

Avendo deciso per un layout a tre colonne, alla luce della considerazione di cui sopra ho deciso di usare l'arancio per lo sfondo della colonna principale, per farla svettare sulle altre, e il rosso scuro per quelle sui lati. Su sfondo arancio ho usato testo nero, sulle colonne laterali testo bianco: questo gioco di contrasti dà la giusta importanza anche alle colonne laterali, che sono ben leggibili ed evidenti, ma lascia la supremazia a quella centrale dov'è il contenuto principale.

Il blu-verde, per sua natura, si presta benissimo come colore di sfondo generico della pagina.

Per i link invece, si può usare i rossi per il testo principale e l'arancio ed il verde per le colonne laterali.

Per aumentare la leggibilità del testo, è stato sufficiente applicare un minimo di buonsenso tipografico: il carattere Times New Roman non è veramente confortevole sul web, e l'ho cambiato con un Georgia, che è una delle typeface più eleganti e versatili per i testi online.

Per le dimensioni, ecco la dichiarazione della proprietà CSS font:

#main{
  font: .875em Georgia, Palatino, serif;
}

Su una grandezza di default di 100% (corrispondente generalmente a 16px), impostare una dimensione pari a 0.875em corrisponde ad avere un carattere su schermo di dimensioni pari a 14px.
Per approfondire, questo vecchio articolo su A List Apart può essere utile.
L'ultimo accorgimento per migliorare radicalmente la leggibilità dei testi del sito (che spesso sono molto nutriti e approfonditi) è stata fondamentale la suddivisione in paragrafi. A mio avviso questo accorgimento è obbligatorio sul web, dove non stiamo pubblicando testi ma bensì ipertesti, e dove il lettore molto difficilmente legge tutta una pagina da cima a fondo (come invece farebbe con un libro da lui acquistato).

Per questo tipo di lettura gli appigli visivi sono fondamentali, e suddividere un testo con delle righe bianche di stacco è molto riposante per l'occhio. Oltre a questo, anche usare il grassetto sui termini e le espressioni più caratteristiche semplifica molto l'orientamento del lettore.

Per le barre laterali invece, ho scelto caratteri senza grazie: nella fattispecie, il Geneva:
#right{
  font: .75em geneva, helvetica, verdana, sans-serif;
}
con una grandezza equivalente di 12px. Il Georgia l'ho tenuto per i titoli e per qualche altro elemento particolare.

Infine, per gli heading principali (h1 e h2) ho utilizzato il Trajan, un carattere stupendo che ho introdotto come standard nei design per il Centro Studi. Disegnato da Carol Twombly per la Adobe nel 1989, esso trae origine dai segni alfabetici della Colonna Traiana a Roma, ed ha un'eleganza ed una chiarezza veramente fuori del comune; è disponibile solo in versione maiuscola (normal e bold) e si presta particolarmente bene per dei titoli che si stagliano in cima alle pagine.

28 maggio 2010

TaoTeChing.it

Sulla scia del "successo" della versione online delle 101 Storie Zen (vedi post precedente) ho costruito, sotto la guida del Maestro di filosofia taoista Marco Montagnani, una nuova versione italiana del Tao Te Ching.

Stavolta l'intenzione era quella di dare libero accesso ad una risorsa completa ed affidabile sull'opera in questione, per chiunque si interessi di questa splendida Filosofia.

Pertanto abbiamo affiancato ad una traduzione senza diritti d'autore (a cura di Luciano Parinetto, 1995) la versione cinese originale (con testo scritto dall'alto in basso, da destra a sinistra) e anche una traslitterazione Pinyin con originale a fronte.

Tutti questi contributi testuali sono stati controllati e sono pertanto attendibili senza problemi.

Stavolta, visto che ci sono tre versioni per ogni capitolo (italiana, originale e traslitterata) ho implementato un sistema di navigazione da tastiera per rendere più snella la consultazione.

Il lettore ha tutto a disposizione sotto le dita della mano destra: con il tasto 'o' si accede all'originale cinese, con 'i' alla versione italiana, con il 'p' alla traslitterazione pinyin; mentre con 'k' e 'l' si va indietro o avanti nei capitoli, e con 'j' si torna all'indice generale. Io lo trovo molto comodo, poi ciascuno giudicherà per sè.

Ovviamente c'è anche una navigazione più tradizionale con link a scomparsa, ma celata dietro un simbolo, perché la mia intenzione era quella di lasciar respirare il testo il più possibile, lasciarlo brillare della sua forza imperitura che da millenni rimane inalterata.

Questo libro è davvero un capolavoro di concisione, forza e ritmo. Basta dare un'occhiata alla versione traslitterata per rendersi conto delle armonie e dei ritmi su cui il testo si basa, con suoni per noi desueti ma non per questo meno capaci di penetrare in profondità. E quando questi ritmi si spezzano, si aprono sezioni libere di grande forza.

È sempre difficile (quando non impossibile) rendere accessibile lo spirito originale di un'opera allorché viene tradotta in altri idiomi. Quest'operazione è pressoché impossibile per il Tao Te Ching, dato il suo carattere oscuro ed ellittico, ma si spera che questa versione così completa possa comunque trasmettere qualcosa di concreto all'avventuroso lettore.

www.taoteching.it


14 marzo 2010

101 storie zen

Le "101 storie zen" è sempre stato uno dei miei libri preferiti: la semplicità e la scarna eloquenza di quelle storielle mi hanno sempre colpito, fin dalla prima volta che il libretto capitò tra le mie mani un giorno d'estate di vari anni fa, al ritorno in treno da Firenze.
Da allora è stato compagno di viaggio fedele, sia in senso figurato (perché quelle storielle possono essere lette su tanti livelli diversi) sia letterale, perché credo che sia il libro che più facilmente scivola nella mia tasca da viaggiatore, al momento della partenza.

Più che un libro, è una raccolta di aneddoti a tema Zen (una setta di Buddhismo giapponese, derivante dal Buddhismo Chan cinese) ma che svela molto del modo di pensare orientale di tutti i giorni. Questo perché l'ambiente in cui sono maturate queste storie era intriso di queste filosofie fin nei minimi dettagli della vita quotidiana. È filosofia applicata alla vita quotidiana, come sempre dovrebbe essere per non scadere nello sterile esercizio intellettuale. Lo si vede anche nello humour di certi episodi, o nella paradossalità di certe situazioni o di certe azioni. Di sicuro, è un libro che mi diverte molto.

Insomma, ho una specie di debito di gratitudine verso questo libretto, che adesso ho ripagato facendone una versione web.

Il mini-progetto è nato sviluppando il menu per La Buca (vedi il post precedente) dove avevo inventato, daccordo con Hermann, il fantomatico "piatto Zen": una noce sgusciata al centro di un piattone da pizza, con allegata una storiella delle 101 stampata su un singolo A5, a mo' di biglietto della fortuna cinese. Preparando la stampa di queste storielle mi sono accorto che non ce n'è una versione italiana online (a differenza di quella inglese, www.101zenstories.com) e siccome mi avrebbe fatto particolarmente comodo per questo lavoro, ne ho proprio sentito la mancanza.

Come per tutti i libri, una versione online non potrà mai soppiantare quella cartacea, lo sfogliare le pagine, l'aprire a caso, l'averlo in tasca, tutto spiegazzato, i segni dell'uso, ecc. Però può servire per avvicinarsi a queste scintillanti gemme di saggezza imperitura, che ormai sono patrimonio dell'umanità intera.

Quindi, ecco qua.
www.101storiezen.com


06 marzo 2010

un Menu per La Buca

Martedì scorso ho portato finalmente il menu finito al buon Hermann del pub La Buca (di Pescia, PT), che abbiamo sviluppato nell'ultimo paio di settimane.

È un menu pieghevole in tre parti, formato A3, plastificato in modo da renderlo immortale anche con i clienti più maneschi.

Il lavoro è venuto proprio bene e mi sono divertito un sacco a farlo, perché ho avuto praticamente carta bianca e ho potuto concentrarmi su un design moderno e vivace, in linea con una clientela giovane e dinamica.

 
Le foto di cui sopra sono della bozza di stampa... alcuni errori di margine sono stati corretti!

Ho sviluppato il tutto con InDesign, creando le immagini in Photoshop (ed esportandole con la trasparenza). Ecco uno screenshot della finestra di lavoro in InDesign:

Molte delle icone le ho disegnate in Illustrator. I segni a "pennarello" che sembrano fatti a mano libera... sono proprio così, con una tavoletta grafica Wacom. Il ritratto di Hermann è opera mia, con fotografia + tradizionale matita, poi inchiostrato in Illustrator e colorato in Photoshop.

Tutto questo rientra poi in un progetto un po' più ampio che ha coinvolto anche il design di un Blogger per il pub, e precedentemente di un volantino: il tutto nello stesso stile grafico, che contrasta in modo grazioso con l'aspetto tradizionale del pub, ma che si allinea bene con il personaggio che lo gestisce e con buona parte degli avventori.

11 febbraio 2010

Amarcord di una serata