Guida di installazione di WkHtmlToPdf su Ubuntu Trusty 64bit (14.04 LTS)

In questi giorni mi sono imbattuto in un problema con il tool WkHtmlToPdf, che veniva utilizzato dal noto ERP Odoo (anche conosciuto come OpenErp) per generare stampe di report e, più in generale, di documenti HTML in formato PDF. Andiamo quindi a vedere come installare correttamente WkHtmlToPdf su Ubuntu Trusty 64bit (14.04 LTS) ed in particolare come installare correttamente le librerie QT (patchate), che consento a WkHtmlToPdf correttamente. La guida che leggerete è stata adattata da questa originale presente su GIST, di cui io ho effettuato un fork che potete trovare qui.

Prima di tutto è fondamentale avere sulla macchina un completo accesso root. Per quanto riguarda Ubuntu quindi, apriamo il terminale (a meno che non siate già collegati sulla vostra macchina server), e digitiamo:

sudo su -

Inseriamo la password dell’utente root e diamo “Invio”. Quindi creamo una cartella di appoggio, e spostiamoci al suo interno:

cd && mkdir wkhtmltopdf-inst && cd wkhtmltopdf-inst

Andiamo quindi ad installare, a meno che non l’abbiamo già fatto, git:

apt-get install git-core

Installazione a cui segue l’installazione delle dipendenze di wkhtmltopdf:

apt-get install openssl build-essential xorg libssl-dev libxrender-dev

Quindi cloniamo il repository di wkhtmltopdf:

git clone git://github.com/antialize/wkhtmltopdf.git wkhtmltopdf

Installiamo quindi le dipendenze di qt per la versione 4.8.4:

apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxrandr-dev libxrender-dev

Ed anche questa volta, cloniamo il repository ed effettuiamo il checkout della versione 4.8.4 di qt (eseguite i comandi “uno alla volta”):

git clone https://qt.gitorious.org/qt/antializes-qt.git wkhtmltopdf-qt
cd wkhtmltopdf-qt
git checkout 4.8.4
QTDIR=. ./bin/syncqt

Iniziamo ora con la configurazione preliminare alla compilazione delle librerie qt:

./configure -nomake "tools examples demos docs translations" -opensource -prefix ../wkqt

Quindi ora avviamo la compilazione delle librerie qt. Attenzione, questo processo può durare anche qualche ora su hardware non molto performanti, quindi armatevi di pazienza, sigarette, e tutto quello che può aiutarvi nel ammazzare l’attesa:

make -j3 && make install

Ora siamo pronti, finalmente, per compilare wkhtmltopdf con l’ausilio delle librerie qt appena compilate. Questo processo sarà molto più veloce del precedente:

cd ../wkhtmltopdf && ../wkqt/bin/qmake

Terminiamo il processo di compilazione con:

make && make install

L’installazione è terminata qui. Ora dovreste avere la versione di wkhtmltopdf funzionante e compatible con Odoo (OpenERP). Qualora riscontraste problemi, commentate!

Breve manuale di convivenza tra CSS e Internet Explorer

Che Internet Explorer sia uno dei browser più buggati della storia del world wide web è una cosa nota, meno nota è il suo totale menefreghismo per gli standard W3C. Questo ultimo aspetto, fondamentale nella programmazione web, è causa di malanni psicofisici di ogni programmatore che almeno una volta nella vita ha dovuto lottare con tutte le sue forze per rendere compatibile con Internet Explorer con le proprie direttive.

La mia esperienza con la programmazione web, ed in particolar modo con l’aspetto grafico di un sito o di un applicazione web, mi ha portato spesso a dover trovare soluzioni, spesso folli, per la convivenza di regole css standard con il motore di Internet Explorer, ho così voluto condivedere questi trucchetti, veri e propri hack in alcuni casi, in un brebe manuale di convivenza tra CSS e Internet Explorer. Read more

Il mio amico Hashtag: Guida all’uso

Questo articolo non vuole essere una vera e propria guida all’uso degli hashtag, vuole piuttosto spiegare meglio la loro funzione “sociale”, e da essa come sfruttarne al meglio le potenzialità.

Premetto che non sono un’esperto di social media, nemmeno ho studiato sociologia o cose simili, ho solo passato un’infinità di ore su internet, e da solo ne ho appreso il buon utilizzo.

Partiamo col dire che l’hashtag ha una funzione ben specifica: “taggare” qualcosa (post, foto, video…) rendendo più agevole ad una persona, magari che noi non conosciamo e che non ci conosce, capire subito di cosa stiamo parlando.
Su Twitter questo concetto è estremo. Twitter stesso si basa quasi completamente su questo: la possibilità di cercare tutto quello che nel mondo, da una semplice notizia ad una foto o un video, è correlato con l’argomento di nostro interesse ed interaggire direttamente con chi ha diffuso qualcosa al riguardo, di commentarlo, e di diffonderlo a quante più persone possibile, retwittando.
Questo concetto, su Facebook, è meno forte, i contenuti “hashtaggati” sono limitati dalla privacy, difficili da seguire, e sopratutto sono commentabili “privatamente” perdendo completamente il concetto di “topic”. Possiamo tranquillamente dire che gli hashtag di Facebook sono una bruttissima copia di quelli di Twitter, o comunque implementati su social come Instagram, Pinterest o anche Google+.

Dopo questa breve divagazione, capirete quindi, che il corretto utilizzo degli hashtag diventa fondamentale se si vuole diffondere bene, per esempio, un messaggio o una notizia importante. Guardiamo quindi qualche linea guida su come usare bene e con criterio gli hashtag:

  1. Immediatezza: usate una parola che faccia subito capire di cosa state parlando. Se state parlando di calcio, non taggate la vostra squadra del cuore, taggate #calcio!
  2. Internazionalizzazione: se state parlando di un argomento di rilevanza mondiale (“faccina che ride sotto i baffi”), sarebbe buona norma, se state twittando, twittare in inglese, o al massimo fare due tweet distinti per lingua (Maradona è meglio di Pelè #calcio Maradona is better than Pelè #football)
  3. Poche Parole: è inutile, e secondo me fastidiosissimo, leggere interi periodi con un maledetto cancelletto davanti! Se rileggete bene quello che ho scritto, capirete che nessuno mai nel mondo si sognerebbe di cercare qualcosa del tipo “#oggisolevadoalmareemidiverto“!
  4. Have Fun: un hashtag può essere divertente, può portare “migliari e migliari” di persone a ridere su qualcosa, o sdrammatizzare, o comunicare che #mainagioia.
  5. Barra Spaziatrice: hashtag multipli? Usa uno spazio, il mondo te ne sarà grato. Per sempre. (#gli #hashtag #vanno #separati #da #uno #spazio! #se#scrivi#cosi#non#si#capisce#niente. #sallo.)

Favicon su WordPress compatibili con Browser, iOS, Android e Windows Metro

Questa che vi scrivo oggi è una semplicissima guida su come impostare una Favicon su WordPress, compatibile con tutti i browser per pc, segnalibri dei sistemi iOS Apple, Google Android e per la nuova interfaccia di casa Microsoft, Windows Metro.

Cos’è una favicon immagino lo sappiamo tutti, ma con l’avvento di smartphone e tablet iniziano a diventare sempre più importanti e utili. Infatti non tutti sanno che è possibile, programmaticamente, tramite codice, definire favicon specifiche per ogni dispositivo. Per approfondire l’argomento, vi consiglio l’ottimo articolo presente su Wikipedia, in inglese.

Impostare programmaticamente le favicon, per ogni dispositivo, può diventare un lavoro lungo e anche un po’ pesante. Ci viene in aiuto però un, relativamente nuovo, plugin per WordPress: Favicon by RealFaviconGenerator.
Vediamo quindi come fare ad usare questo semplice plugin.

Per prima cosa, ovviamente, il plugin va installato. Andiamo quindi nel backend di wordpress, alla voce “Plugin”, e clicchiamo quindi su “Aggiungi Nuovo”.

Guida Favicon by RealFaviconGenerator: Passo 1

Una volta installato, attiviamolo. Spostiamoci quindi nella sezione “Aspetto”, quindi “Favicon”. A questo punto ci troveremo davanti una schermata simile alla prossima, che vi permetterà di scegliere il file da usare per generare la favicon, direttamente dal Media Manager di wordpress (dal quale potrete anche caricarne una dal vostro hard disk). Non c’è un vero requisito all’icona da usare come base, tuttavia il plugin stesso vi consiglia misure di almeno 260×260, io personalmente consiglio, ove possibile, di utilizzarne una da almeno 512×512. Read more

Download ricorsivo via FTP da riga di comando

Capita spesso di dover effettuare il download dell’intera alberatura di una directory da un server (o da un hosting web) via ftp. L’operazione può diventare molto articolata, sopratutto se non si ha la possibilità di effettuare alcuna operazione di archiviazione (tar, zip…). La situazione poi peggiora se non si ha a disposizione un client ftp grafico. Ma vediamo come fare.

Il sistema a mio parere più semplice è utilizzare Wget.

Solitamente questo gestore di download è già installato in molte distribuzioni linux, eventualmente potete installarlo rapidamente (senza troppi problemi) tramite il vostro gestore di pacchetti. Per i più pigri però vi basterà digitare nella vostra shell:
su Ubuntu

apt-get install wget

su Fedora\Centos\RHEL

yum install wget

Adesso, magicamente, possiamo effettuare il download, di tutta una directory e della sua alberatura via FTP

wget -r --level=0 ftp://username:password@host/directory/da/scaricare/

Le opzioni -r e --level=x ci permettono, rispettivamente, di abilitare il download ricorsivo e di specificare la “profondità” a cui wget deve “scavare”.
Spiego meglio: se sotto la cartella da scaricare ci sono altri 4 livelli di alberatura (/dir1/dir2/dir3/dir4), possiamo specificare se andare a scaricare tutta l’alberatura (--level=0) o fermarci al secondo livello (--level=2).
Inutile spendere parole sulla parte username, password e “/directory/da/scaricare/“.

Eventualmente possiamo lanciare il comando in background, e in maniera che resti sempre in esecuzione fino alla sua fine, anche se viene terminata la sessione ssh corrente o viene effettuato il logout dall’utenza correte, effettuando anche il log dell’operazione. Il comando quindi si arrichisce del nohup:

nohup wget -r --level=0 ftp://username:password@host/directory/da/scaricare/ > ./file.log 2>&1 &

L’aggiunta di > ./file.log 2>&1 permette di reindirizzare lo standard output, STDOUT, verso un file a nostra scelta, e lo standard error, STDERR, verso lo standard output (che a sua volta è reindirizzato su un file). Ovviamente possiamo reindirizzare lo STDERR verso un file diverso, o verso “il nulla” (2>/dev/null).
La e commerciale alla fine del comando lancia il comando direttamente in background