Monthly Archives: February 2010

Date in italiano in PHP

Usi date() o strftime() ma queste continuano a visualizzare il nome dei mesi e dei giorni in inglese mentre tu le vuoi vedere in italiano? Hai letto che devi usare setlocale(LC_ALL, “it_IT.utf8″); ma anche facendolo non cambia niente?

Ecco cosa devi fare:

  • devi usare solo la strftime() e non la date(), visto che quest’ultima non è sensibile al locale del sistema
  • devi verificare che il tuo sistema abbia il supporto per il locale italiano (altrimenti il nome dei mesi da dove se lo prende? Il PHP non ha mica tutti i mesi in tutte le lingue “dentro sé stesso”). Verificalo con il comando locale -a. Ti verrà visualizzata la lista di tutti i locali supportati sul tuo sistema
  • se il locale che ti serve non è presente nella lista, lo devi installare. Il comando è locale-gen e il parametro è il locale che ti interessa (es: locale-gen it, installerà tutti i locale italiani conosciuti, compreso quello standard e quello svizzero)
  • prendi la stringa ESATTA che identifica il locale che ti interessa e la usi come argomento della funzione PHP setlocale() prima di usare la strftime. Esempio: setlocale(LC_TIME, “it_IT.utf8″)

Mio screencast su Thinkcode.tv

È online da qualche giorno il mio primo screencast pubblicato per thinkcode.tv. L’argomento è jQuery e nella lezioncina di un’oretta cerco di affrontare la maggior parte dei temi che possono interessare chi si avvicina per la prima volta a questa libreria. Sul sito è disponibile una preview di 5 minuti (presa circa ad un terzo della lunghezza totale del video).

Voglio ringraziare thinkcode per l’opportunità offertami e spero davvero di poter collaborare ancora con loro :)

jQuery sta rapidamente diventando la libreria JavaScript più usata al mondo, per lo sviluppo di applicazioni web interattive e dinamiche. In questo screencast di poco più di un’ora, Claudio Cicali ci guida nell’apprendimento dei concetti di base, mostrando il come e il perché dell’uso della libreria, a partire dalla sua storia, per finire a parlare delle best practice, passando per la manipolazione del DOM, la gestione degli eventi e Ajax. Si tratta di uno screencast indispensabile per lo sviluppatore moderno.

Nuova struttura, nuova grafica

by freeparking

Era da un po’ che ci pensavo su: il mio “blog” aveva qualcosa di strano, di stonato.

Finalmente qualche giorno fa ho capito qual era l’inghippo: il mio non è prevalentemente un blog! È una collezione di articoli inframmezzata ogni tanto da qualche post di carattere personale (un blog, appunto). Molti dei miei articoli hanno un carattere tale per cui possono rimanere attuali per molto tempo e non ha senso presentarli soltanto nel “flusso” dei post di un blog. Così nel week end mi sono rimboccato le maniche e ho deciso di rifare tutto da capo. Insomma, avevo bisogno di ripensare il mio “blog” più come un sito vero e proprio che come una lista di fatti e opinioni.

La struttura volevo che in home page presentasse in ordine cronologico:

  • l’ultima cosa scritta, completamente espansa
  • cinque post con un estratto e i metadati
  • cinque titoli senza metadati

Una sorta di fading, insomma.

La sidebar avrebbe dovuto contenere gli ultimi tre articoli (escludendo quelli già presenti sulla parte centrale) e magari qualche foto da Flickr. Poco o null’altro (bando alle ciance).

Per il resto (archivi, ricerche), ho ovviamente lasciato fare a WordPress. Ho pensato anche che dovrò usare meglio le categorie (che adesso, più di prima, mi aiutano a strutturare il sito) e più proficuamente i tag.

Per quanto riguarda la grafica volevo qualcosa di leggero, professionale e moderno (lo so, manca solo “giovane e dinamico”). Ho approfittato dell’occasione per imparare come si fanno i temi di WP e ho fatto questo tema “from scratch”, senza neanche usare Sandbox (che, a dirla tutta, non è che sia questo granché…). Di Sandbox ho però riutilizzato un paio di funzioni. Il tema, basato su una griglia YUI, si chiama Punto5 (terminate le rifiniture lo rilascerò, ovviamente).

Scrivere un tema per WP, da un punto di vista tecnico, è piuttosto banale… l’incoerenza e le nefandezza delle API di WordPress sono un po’ addolcite dalla documentazione sul codeplex, molto pragmatica (e come altro dovrebbe essere?), piena di ottimi esempi e casi d’uso “risolti”. L’unica accortezza è fidarsi poco o niente di quello che si trova a spasso sul web che non venga direttamente da codeplex o da qualche conosciuto “guru”.

La grafica dunque avrebbe dovuto privilegiare la lettura e i motori di ricerca;  sono stato attento alla spaziatura tra gli oggetti (generalmente di .5em, da qui il nome del tema), in modo da dare un ritmo bilanciato a tutto l’insieme. Ho deciso di non avere una barra laterale con widget, ma piuttosto avere un “cassettino” a scomparsa in alto fatto in modo che questo potesse venire aperto solo se interessati (lo stato aperto/chiuso del cassetto è salvato in un cookie ma devo ancora capire se lasciarlo aperto o chiuso di default). Mi sono un po’ ispirato ad Arthemia.

Niente fronzoli, dunque, che tanto l’utente medio di questo genere di sito è il motore di ricerca o il feed RSS.

Gli archivi e la lista categorie? I miei URL sono discendibili, per cui i motori di ricerca sanno come passare da /2010/07 a /2010/ e non glielo devo certo suggerire. Gli umani non credo che siano minimanente interessati ad una navigazione del genere. Probabilmente dovrò cercare il posto da qualche parte per inserire l’elenco categorie più usate, giusto per far capire a colpo d’occhio di “cosa si parla qui”.

La tagcloud invece è morta, se mai fosse servita a qualcosa.


Ubuntu: installare OpenOffice 3.2 manualmente

È appena uscito OpenOffice 3.2. Qui trovate la lista di tutte le novità.

Gli aggiornamenti che mi interessano maggiormente sono:

  • migliorato il supporto al formato ODF (che incidentalmente sarà anche ben supportato da MS Office 2010, il che garantirà finalmente un elevato grado di compatibilità tra le due suite).
  • migliorato il supporto ai formati proprietari MS, diminuendo così il numero di problemi di “interfaccia” con MS Office 2007
  • aggiunti i commenti su Impress (in questo modo posso facilmente lasciarmi dei post it quando faccio delle slide in bozza)
  • Rispetto alla 3.0 è diminuito di un buon 46% il tempo necessario a far partire Writer o Calc (e rispetto alla 3.1? Non si sa)

Detto questo, se volete provarla subito (come io ho fatto), su un sistema Ubuntu dove magari avete già installato la 3.1 (come me), dovete fare così:

  • andate a prendervi i deb di OpenOffice: li trovate qui
  • mentre li scaricate in una directory di comodo, disinstallate l’attuale OOo con un bel sudo apt-get remove openoffice*
  • una volta scaricati i deb, scompatatteli ed entrate nella sottodirectory DEBS. Da qui eseguite sudo dpkg -i *.deb
  • entrate nella sottodirectory desktop-integration e anche qui andate di sudo dpkg -i *.deb

Dovreste essere a posto (almeno per me così è stato).

Sicuramente queste istruzioni sono meglio di niente, peccato però che OpenOffice non metta a disposizione un repository per apt… in questo modo appena uscirà la 3.2.1, saremo di nuovo punto e a capo (ma a questo punto credo che aspetterò la nuova Ubuntu che forse avrà a bordo OOo 3.2).


SVN customized bash prompt (and Git!)

I recently had to split an SVN repository of mine into a TRUNK and a TAGged branch. Nothing fancy: a tag to identify the REV1.x and the TRUNK to keep developing.

From time to time I have to svn switch, jumping from the tagged branch to the trunk (testing, merging, usual staff…). And you know what? I’m keeping committing on the tagged branch! And that is bad (more on this with an appropriate future post. I promise).

How beautiful could be having a bash prompt that will costantly display the branch I’m in and the svn repository revision of the current directory?

So, here we are:

append this code to your ~/.bashrc, logout/login and enter a svn managed directory (beware: I’ve tested it only on my Ubuntu box… the key here is to use the PROMPT_COMMAND env variabile, passing it the function that does the “sniffing”. The PROMPT_COMMAND command will be executed every time, just before displaying the shell prompt).

PROMPT_COMMAND=prompt_command

prompt_command() {

  if [[ -d ".svn" ]] ; then
    local info rev url ver
    info=$(LC_MESSAGES=C svn info 2>/dev/null)
    rev=$(echo "${info}" | awk '/^Revision: [0-9]+/{print $2}')
    url=$(echo "${info}" | awk '/^URL: .*/{print $2}')

    echo ${url} | grep -q "/trunk\b"
    if [[ $? -eq 0 ]] ; then
      ver=trunk
    else
      echo ${url} | grep -q "/tags\b"
      if [[ $? -eq 0 ]] ; then
        ver=tag-$(echo ${url} | grep -o "/tags.*" | awk -F/ '{print $3}')
      fi
    fi

    echo -e "\e[00;33m[svn:r${rev}@${ver}]\e[00m"
  fi

}

The svn information will be displayed in yellow (is the 33 in the final echo line). Change it at your liking.

UPDATE: Giovanni Bajo gives the hints for the "-q" switch and the LC_MESSAGES trick to avoid locale inconsistences.

Giovanni has gone a step forward, giving us the code for a git enhanced prompt too.

Here it is:

  local gitout
  gitout=$(git branch -v --abbrev --no-color 2>/dev/null)
  if [[ $? -eq 0 ]]; then
    local full branch sha1
    full=$(echo "${gitout}" | grep '^*')
    branch=$(echo "${full}" | awk '/^* \w+ \w+/{print $2}')
    sha1=$(echo "${full}" | awk '/^* \w+ \w+/{print $3}')
    echo -e "\e[00;33m[git:${sha1}@${branch}]\e[00m"
  fi

Thanks to Uqbar on Freenode IRC for the awk hints!

example:

claudioc@enebish:~/Sites$
claudioc@enebish:~/Sites$ cd scrive2/
[svn:r452@trunk]
claudioc@enebish:~/Sites/scrive2$ svn switch $myrepos/tags/R2.4
[svn:r431@tag-R2.4]
claudioc@enebish:~/Sites/scrive2$

I contenuti di questo sito sono distribuiti con una licenza Creative Commons 2.5 eccetto dove diversamente specificato.

Tema WordPress Punto5 sviluppato da Claudio Cicali; icone del set famfamfam silk e komodomedia.

© 2005-2010
Claudio Cicali