Automatizzazione estrema :-)

Se hai letto fino a oggi questo blog probabilmente sai che mi occupo di consulenza SEO e web marketing.

Un aspetto di cui non parlo molto è il mio background di programmatore, che solo riflettendoci più a fondo mi sono accorto essere “una marcia in più” molto comoda per automatizzare operazioni ripetitive e di routine.

Quante volte ti sarà capitato di cercare in rete qualcosa per:

  • ripulire delle cartelle dai file temporanei ?
  • lavorare con “configurazioni” diversi di siti web  dinamici e applicazioni web a seconda che lavori in locale o nel server di produzione ?
  • dover fare backup al volo ?
  • dover sostituire in meno di 1 minuto su tutti i file di una cartella e relative sottocartelle stringhe diverse con altre ?

Se hai pazienza di leggere questo post chilometrico scoprirai uno strumentino gratuito e open source che la community di Apache.org mette a tua disposizione per automatizzare al massimo la tua produttività (se devi lavorare con file, cartelle, ftp, siti e applicazioni web insomma).

Automatizzazione con Apache Ant

Lo strumento di cui ti voglio parlare è Apache Ant e lo trovi qua: http://ant.apache.org/.

Ant richiede Java quindi devi avere una Java Virtual Machine (JVM) installata sul tuo PC.

Personalmente ti consiglio di scaricare il JDK dal sito ufficiale di Oracle/Sun per sfruttare Ant al 100%.

Questo perché alcuni task di Ant richiedono espressamente il JDK e non basta la semplice JVM: insomma il JDK occupa un pò più spazio ma la fatica è ripagata.

Configurare JDK e Ant

Dopo aver scaricato Ant, non c’è installazione: basta estrarre il file compresso in una cartella ad es. c:\ant .

Devi configurare JDK e Ant affinché funzionino nel tou PC.

Se usi un sistema Windows:

  1. vai Pannello di controllo > Sistema > Impostazioni avanzate
  2. clicca su “Variabili d’ambiente”

Configurazione di JDK

  1. nell’area dedicata alle Variabili di sistema clicca “Nuova”;
  2. si apre una finestrina che chiede nome variabile e valore variabile;
  3. inserisci JAVA_HOME nel nome variabile;
  4. in valore scrivi il percorso dove hai installato il JDK (ad es. C:\Program Files\Java\jdk1.6.0_03).
  5. conferma tutto cliccando ok.
  6. tra le variabili di sistema cerca la variabile dal nome Path e selezionala facendo doppio click
  7. alla fine del valore della variabile aggiungi ;%JAVA_HOME%\bin; (anche il punto e virgola iniziale, non è un errore!).

Configurazione di Ant

Per configurare Ant i passaggi sono fondamentalmente identici a quelli della configurazione di JDK.

La variabile da aggiungere è ANT_HOME e stavolta il valore inserito deve puntare alla cartella dove hai installato Ant.

In questo caso devi aggiungere alla fine del valore di Path ;%ANT_HOME%\bin;

Cosa è Ant e come funziona

Inizialmente Ant era un tool a riga di comando molto usato in ambienti opensource e commerciali per gestire la parte del ciclo di vita del software (compilazione, test unitari, build delle release da distribuire) ma il tool è così versatile che con un pò di fantasia come vedrai si presta bene per tante altre cose.

Tutto quello che devi fare per usare Ant è descrivere in un file di progetto (build.xml) quali sono gli obiettivi (target) che vuoi Ant esegua al posto tuo.

So già cosa pensi… ma dai a cancellare dei file temporanei ci metto un attimo. Figuriamoci incasinarsi la vita con una roba così complessa.

Si, ti rispondo io. Questo ragionamento è giusto se lo fai una tantum e basta.

Ma se per caso cancelli anche solo 1 volta al giorno i file temporanei dalle tue cartelle alla fine del mese avrai perso davvero tempo che potevi destinare a risorse più importanti. Allora perché non investire 5 minuti del tuo tempo in qualcosa che una volta scritto funziona perfettamente a vita tutte le volte che vuoi ?

Vediamo il contenuto del file build.xml con un semplice task per rimuovere file di backup e thumbnails create da Windows:

<project basedir=".">

 <target name="clean">
 <echo>Avvio la cancellazione dei file</echo>
 <delete>
 <fileset dir="." includes="**/*.bak" />
 <fileset dir="." includes="**/*.old" />
 <fileset dir="." includes="**/~*" />
 <fileset dir="." includes="**/Thumbs.db" />
 </delete>
 <echo>File cancellati.</echo>
 </target>

</project>

Il file build.xml contiene un progetto <project> e un obiettivo <target>. Il comando <delete> fa il resto.

Metti il file build.xml nella cartella root del tuo progetto e sei pronto al lancio.

Prima del lancio “tarocchiamo” Windows

Ant si esegue da riga di comando cioè da una finestra di DOS per cui le possibilità sono 2.

O ogni volta clicchi su Start poi digiti CMD + Invio, poi cambi cartella con i comandi DOS (CD \nomecartella).

Oppure fai in modo che, in qualsiasi cartella tu sia, Windows 7 mostri nel menu contestuale (quello che si apre con li pulsante destro) un’apposita voce per aprire la finestra di DOS.

Queste sono le chiavi da aggiungere al registro di Windows per ottenere il nostro risultato:

HKEY_CLASSES_ROOT\Directory\shell\opennew
@=”Dos Prompt in that Directory”

HKEY_CLASSES_ROOT\Directory\shell\opennew\command
@=”cmd.exe /k cd %1″

Ora che hai aperta la finestra di DOS sulla root del tuo progetto basta scrivere ant clean per veder eseguire in pochi secondi il nostro primo target.

Vedamo altri utilizzi di questo piccolo gioello di software opensource.

Target per una copia selettiva

Immaginiamo di lavorare in un sito web complesso e di voler pubblicare con l’avanzamento dei lavori solo le modifiche che riguardano alcune cartelle e/o pagine web.

Prima di tutto scegliamo una cartella dove copiare solo i file che abbiamo modificato.

Subito sotto <project> aggiungiamo una proprietà (ad es. qui ho scelto una sottocartella del progetto dal nome ‘release’):

 <property name="releaseFolder" value="release" />

e scriviamo il target

<target name="release" depends="clean">
 <delete dir="${releaseFolder}/" />
 <mkdir dir="${releaseFolder}/" />
 <copy todir="${releaseFolder}/">
  <fileset dir="./" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/ajax/">
  <fileset dir="ajax" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/beans/">
  <fileset dir="beans" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/config/">
  <fileset dir="config" includes="**/*.xml" />
 </copy>
 <copy todir="${releaseFolder}/controllers/">
  <fileset dir="controllers" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/images/">
  <fileset dir="images" includes="**/*.png" />
  <fileset dir="images" includes="**/*.jpg" />
 </copy>
 <copy todir="${releaseFolder}/js/">
  <fileset dir="js" includes="**/*.js" />
 </copy>
 <copy todir="${releaseFolder}/logic">
  <fileset dir="logic" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/models/">
  <fileset dir="models" includes="**/*.php" />
 </copy>
 <copy todir="${releaseFolder}/templates">
  <fileset dir="templates" includes="**/*.tpl" />
 </copy>
 <copy todir="${releaseFolder}/views">
  <fileset dir="views" includes="**/*.php" />
 </copy>
</target>

Come vedi ogni volta cancello (<delete>) e ricreo (<mkdir>) ex novo la cartella di release per essere sicuro che non ci siano residui di file con versioni precedenti, poi indico ad Ant quali tipi di file copiare <fileset> attraverso il comando <copy>.

Anche in questo caso basterà scrivere ant relase e vedere lavorare Ant al posto nostro.

Copia di backup al volo

Anche in questo caso aggiungiamo una proprietà specifica al progetto per indicare il nome del file che andremo a creare.

<property name="projectName" value="webapp001" />

Questo invece è il task di backup che prende il contenuto della cartella releaseFolder e lo comprime in un file .tar.gz pronto all’archiviazione!

<target name="backup">
 <echo>Avvio il backup</echo>
 <delete file="${releaseFolder}/${projectName}.tar.gz" />
  <tar compression="gzip" longfile="gnu" destfile="${releaseFolder}/${projectName}.tar.gz">
  <tarfileset dir="${releaseFolder}" prefix="prefix">
   <include name="**"/>
   <include name="wp-content/themes/gadget-story/header.php" />
   <include name="wp-content/themes/gadget-story/footer.php" />
   <exclude name=".cache/**" />
   <exclude name="templates_c/**.**" />
   <exclude name="wp-admin/" />
   <exclude name="wp-includes/" />
   <exclude name="wp-content/backup-0743b/" />
   <exclude name="wp-content/plugins/" />
   <exclude name="wp-content/themes/gadget-story/**.**" />
  </tarfileset>
 </tar>
 <echo>Il backup è pronto!</echo>
</target>

Cambio nomi alle immagini e spostamento di cartella

Immagina di dover rinominare in maniera selettiva solo alcune immagini di una cartella.

In questo caso rimuovo dal nome del file “Immagine ” solo per le immagini di tipo jpg che contengono questo testo.

<target name="rename">
 <property name="folder" value="immagini" />
  <move todir="./${folder}/small">
  <fileset dir="./${folder}/small">
   <include name="**/*.jpg" />
  </fileset>
  <filtermapper>
   <replacestring from="Immagine " to="" />
  </filtermapper>
 </move>
</target>

Cambio di configurazione

Il penultimo esempio della versatilità di Ant è sul cambio di configurazioni al volo.

La situazione tipo è questa: lavori su un server e un PC locali con settaggi di percorsi, database e password diversi rispetto a quelli effettivi del server di produzione.

Quante volte ti sarà successo di uploadare sul server remoto la configurazione locale e aver mandato in bomba l’applicazione web ?

Ant ti può aiutare anche in questo caso.

Ecco ad esempio di sostituzioni testuali di path in molti file:

<target name="customize" depends="release">
 <echo>Adattamento percorsi</echo>
 <replace dir="${releaseFolder}/" token="c:/siti/miosito.com/" value="/home/sito.com/public_html/">
  <include name="**/*.xml" />
  <include name="**/*.php" />
 </replace>
 <echo>Adattamento configurazione database</echo>
 <replace file="${releaseFolder}/wp-config.php" token="development" value="production" />
 <replace file="./${releaseFolder}/bootstrap.php" token="development" value="production" />
 <echo>Aggiustamento path chiamate AJAX</echo>
 <replace file="${releaseFolder}/templates/settoreMerceologicoAdd.tpl" token="http://localhost/sito.com" value="http://www.sito.com" />
 <replace file="${releaseFolder}/templates/ricercaBestCase.tpl" token="http://localhost/sito.com" value="http://www.sito.com" />
 <replace file="${releaseFolder}/templates/menu.tpl" token="http://localhost/site.com" value="http://www.sito.com" />
 <replace file="${releaseFolder}/templates/ricercaBestCase.tpl" token="http://localhost/sito.com" value="http://www.sito.com" />
</target>

Perché dovresti usare Ant ?

Per almeno 3 motivi:

  1. Perché essendo scritto in Java è portabile tra più piattaforme Windows, Mac, Linux.
    Una volta scritto il file di progetto build.xml questo funzionerà in qualsiasi sistema lavori.
  2. Puoi scrivere task molto generici e riciclarli per ogni tuo progetto, spesso senza nessuno sforzo (basta un copia e incolla del file di progetto).
    Ant permette la manipolazione del testo, dei file, ha task specifici per i comandi FTP.
  3. Impari una cosa nuova “smanettando” a livello più basso rispetto alla solita attività di SEO o web marketing.

Dubbi o domande ?

Come al solito, scrivi qua sotto.

<echo>Cancellazione file in corso</echo>

3 consigli dall’OpenSource per i blogger che usano WordPress

“Regala l’informazione, vendi il sistema”

Non è soltanto una frase ricorrente nel marketing (che anche i blogger come te potrebbero usare a loro vantaggio). Trasferita nel mondo del software questa stessa frase potrebbe suonare così: “Regala il codice, e vendi il tuo software”.

E lo sanno bene tutte quelle aziende di software che, anche per questioni di time to market, preferiscono integrare software Open Source eterogenei piuttosto che svilupparli da zero.

D’altra parte se un software già esiste e funziona, ed è disponibile con una licenza che consente di usare, integrare, alterare i software per i propri scopi, perché non usarlo per i propri scopi ?

Il ragionamento dei software integrator non fa una piega. Ma come tutte le cose, scegliere la strada dell’Open Source ha vantaggi e svantaggi.

Vantaggi del software Open Source

  • abbattere i costi di licenza di software proprietari in fase di startup;
  • abbattere i costi di sviluppo creando una comunità di sviluppatori che lavora al tuo progetto e lo fa crescere assieme a te;
  • abbattere i tempi di sviluppo integrando software testato e già esistente per determinate funzionalità;

Svantaggi del software Open Source

  • senza una comunità forte il progetto si arena facilmente;
  • senza una comunità forte il progetto va alla deriva facilmente ;
  • senza una comunità forte il progetto non si espande;
  • senza una comunità forte il progetto non si evolve;

Sei un blogger o un webmaster?

Allora probabilmente usarai o avrai usato WordPress. Ecco i 3 consigli che ti ho promesso nel titolo di questo articolo:

  1. usa WordPress come piattaforma CMS non solo per i tuoi blog ma anche per altri siti tuoi o dei tuoi clienti;
  2. fai backup frequenti, meglio se giornalieri e con uno script in automatico che lavora al posto tuo;
  3. aggiorna le versioni di WordPress via via che escono. Perché le release vengono correggono bug e vulnerabilità a volte critiche. Non restare indietro a lungo altrimenti i rischi di hacking del sito sono elevati.

Come è andata gt conference

Mi sarebbe piaciuto molto  prendere parte come promesso alla Gt Conference, invece all’ultimo momento non ho potuto partecipare.

Tuttavia posso dire senza ombra di dubbio che non ho sentito per niente la mancanza dell’evento, in quanto grazie allo streaming online fornito da SOS Tariffe sono riuscito ad ascoltare buona parte della giornata, a parte alcuni piccoli momenti di rallentamento o indisponibilità del servizio per altro fisiologici e comprensibilissimi (visto che la linea ADSL qui è servita in modalità ibrida e sperimentale, ovvero arriva via radio).

Avendo il pallino della SEO ho ascoltato con estrema attenzione gli interventi di Michael Gawel, Michele De Capitani, Cesarino Morellato e Nicola Briani; tutti relatori che, insieme a Daniele Bogiatto, avevo già avuto modo di conoscere al convegno gt 2008.

… Per dirla tutta avevo rivisto di recente qualcuno anche ai convegni SEO Web Marketing Experience organizzati da Madri (al secolo Enrico Madrigrano)…

Ritornando ai relatori della gt conference dicevo di Daniele Bogiatto: bel confronto quello tra medioevo e rinascimento dei media digitali. Interessante anche il suo punto di vista sulla necessità innegabile di socializzare.

Last but not least  mi è piaciuto molto l’intervento di Alessandro Sportelli perchè, nonostante ci siamo incrociati diverse volte online e offline, era la prima volta che ascoltavo una sua esposizione, per altro piacevolissima. Troppo forte il video per promuovere la mozzarella.

Dell’intervento di Nicola Briani non aggiungo niente perchè fin dal gt study day di Pescia dell’anno scorso il suo modo di esporre mi era piaciuto tantissimo e Nicola anche questa volta non mi ha deluso (mi son perso solo la parte  finale c’era dove qualche “problemino di trasmissione”).