La mia Checklist prima di andare online

Prima di andare “definitiviamente” online con un sito, indipendentemente dallo strumento usato (sia questo WordPress o codice “from scratch”),  è mia abitudine fare una serie di operazioni che in genere mi aiutano ad evitare problemi.

Con il tempo ho preparato questa Checklist in cui potrete trovare attività che vanno da quelle di competenze più  “seo” a quelle che sono operazioni puramente sistemistiche.

Come qualsiasi altra Checklist non va applicata “bovinamente”, ma adattata in base ella proprie competente ed agli accordi presi con il cliente.

  1. Preparazione profilo Google Analytics e condivisione accesso con email cliente
  2. Configurazione script tracciamento sul sito e configurazione custom_var (Google Analytics for WordPress)
  3. Preparazione sitemap (Google XML Sitemaps)
  4. Registrazione Google WebMaster Tools e segnalazione sitemap
  5. Registrazione Bing WebMaster Tools e segnalazione sitemap
  6. Verifica file Robots.txt con escusione aree riserate (iRobots.txt)
  7. Configurazione servizio di monitoraggio con segnalazione mail in caso di down (es Monastic)
  8. Configurazione backup file e database (WordPress Backup / WordPress database backup)
  9. Controllo funzionamento Form contatti
  10. Preparazione .htaccess per compressione gzip, configurazione cache ecc… (vedi High Performance Web Sites)

Qui sotto il download con il pdf della Checklist

Checklist: cosa fare prima della pubblicazione di un sito

Se pensate ci siano altre cose da aggiungere fatemelo sapere…

WordPress: Usare “bene” i Custom Post Types

Il 17 Giugno è stata rilasciata ufficialmente questa nuova release di WordPress e se ancora non conoscete quali sono le novità introdotte fareste bene a documentarvi velocemente.

Per quanto mi riguarda in questi mesi ho avuto modo di usare sul campo molte di queste nuove caratteristiche ed in particolare i “tipi” mi hanno risolto parecchi problemi.

Partendo dalla presentazione che avevo fatto in occasione del WordCamp ed approfondendo ulteriormente l’argomento ho raccolto una serie di cosine utili che è bene che metta da parte per quando ne avrò nuovamente bisogno.

Partiamo da un breve elenco di plugin per chi non vuole sporcarsi le mani con il codice:

  • Custom Post Type UI: Tramite un comoda interfaccia vi consente di creare rapidamente nuovi tipi, nuove tassonomie e sopratutto di gestirne l’associazione.
  • Post Type Switcher: Aggiunge una voce al box “pubblica” nella pagina di edit che ci permette di selezionare e/o cambiare il tipo. Utilissimo se vogliamo riorganizzare contenuti già pubblicati
  • Simple Custom Post Type Archives: Questo plugin sopperisce ad una “mancanza” del core di WordPress che non rendeva di facile gestione il listing dei singoli tipi. Una volta attivato sarà possibile avere un archivio diverso in base al tipo. (es. http://nomeblog.com/nometipo/ ). Inoltre aggiunge alla gerarchia delle pagine “type.php” per personalizzarne la presentazione
  • Featured Post Type: Widget molto comodo per visualizzare nella sidebar gli ultimi post filtrandoli per tipo.
  • Custom Field Template: Se creiamo tipo diversi probabilmente avremo bisongno anche “custom filed” diversi. Questo plugin ci permette di creare box personalizzati con campi varibili in base al tipo

A seguire invece qualche snippets preso dal codex:

  • In questo modo è possibile associare le tassonomi “base” di wordpress (categorie e tag) al nostro nuovo tipo
    register_post_type(‘nome_tipo’, array(
    ‘taxonomies’ => array(‘category’, ‘post_tag’),
    ));
  • Per aggiungere un metabox personalizzato ed associarlo ad un particolare tipo (se volessimo associarlo ad un tipo buildin ci basterebbe usare ‘post’ o ‘page’ al posto di ‘nome_tipo’)
    add_meta_box( ‘html_id’, ‘Titolo del box’, ‘callback_function’,
    ‘nome_tipo’, ‘{normal|side}’ );  
  • Per capire il tipo di post del post corrente
    $tipo = get_post_type()
  • Per capire il tipo di post del post corrente
    $tipo = get_post_type()
  • Per avere un elenco di tutti i tipi (restituisce un array)
    $post_types= get_post_types()
  • Per sapere se un tipo esiste (restituisce un boolean)
    post_type_exists( $nome_tipo );

Per il momento mi fermo ed anche se le cose da dire sui tipi e le tassonomie sarebbero ancora tante spero che quanto detto posso esservi utile.

Cariamento dinamico di risorse con JavaScript

Mi segno qui i link di due librerie JavaScript che permettono il caricamento a runtime di risorse tramite ajax.

Il loro utilizzo, in alcune situazioni, dovrebbe migliorare i tempi di risposta ed esecuzione delle pagine web sfuttando la velocità del caricamento parallelo offerta orma dalla maggiorparte dei browser.

Si tratta di  Labjs e Sexy.js che a dirla in breve permettono di effettuare caricameni asincroni e sequenziali con una sintassi molto molto pulita.

Qui qualche esempio che spero rendano il concetto…

12 Plugin per sviluppatori

Per chi sviluppa template e plugin per wordpress a volte mancano gli strumenti per capire dove sono i problemi o dove poter lavorare per miglioare le perfomace.

Io per risolvere questi dilemmi, con il tempo, ho trovato alcuni plugin che a seconda delle necesità mi hanno dato un mano.

Giusto per fare un esempio vi dico che ne potete trovare uno in grado di visualizzare le query eseguite dal front-end (solo se loggati come admin)  evidenziando query eccessivamente lente, oppure altri che danno un quadro delle informazioni della piattafoma.

Continue reading “12 Plugin per sviluppatori”

Localizzazione dei file javascript

Per la validazione di alcuni form ho avuto la necessità di localizzare le stringhe di errore gestite all’interno di un file Javascript.
Volevo un sistema che non fosse eccessivamente invasivo, simile al gettext che uso con php ma che fosse indipendante da codice serverside e che mi permettesse di caricare e cambiare il file con le riserse localizzate anche a runtime.

Quello che ne è uscito mi piace molto e penso che sia anche sufficentemente scalabile pur avendo come limite il fatto di lavorare su array di stringhe un oggetto json piuttosto che su file compilati.

In pratica dopo aver dichiarato l’oggetto in cui “cercare” le traduzioni, ho preparato una funzione che verifica la presenza della stringa localizzata e nel caso non venga trovata mi restituisse quella “non localizzata”.

var Localization = {};
function _e( s ){
if(Localization && (v=Localization[s]) ) return v;
return s;
}

Usando questa funzione all’interno dei miei file js sono in grado di separare (ed eventualmente rimandare) le problematiche relatavie alla localizzazione rimanendo concentrato sul codice.
Nell’esempio qui sotto viene visualizzato un alert con un bel “ciao” sino a quando non viene caricata una risorsa in lingua

alert( _e(“ciao”) );

Per caricare il file con le risorse localizzate includo lo script a runtime con “getScript” (magari dopo aver letto un cookies…)

function LoadLocale( locale ){
/* es. LoadLoacale(“en_EN”); */
var Localization_path = “languages/”;
Localization = {};
try {
jQuery.getScript( Localization_path + locale + “.js”);
} catch(e) {}
}

Questa la struttura del file di risorse (en_EN.js) che nel momento in cui viene richiamata ridefinisce completamente l’oggetto “Localization”

// en_EN – javascript localization file
var Localization = {
“errore” : “error”,
“ciao” : “hello”,
“nome” : “name”,
“sito web” : “website”
}

Uno dei vantaggi di questo sistema è che andrò a localizzare solo ciò che mi serve con un approccio non intrusivo.
In atre parole se la stringa o il file non vengono trovati viene restituita la stringa non localizzata.
Ancora una nota per chi volesse usarlo: dentro LoadLocale c’è una chiamata a jQuery che quindi va considerato tra i requisiti necessari.

Per migliore le performance, indipendentamente dalla dimensione del file della localizzazione, sarebbe consigliabile minimizzare i file javascript con strumenti tipo questo.

Questi alcuni link da cui ho preso ispirazione.

10 Searchbox stilosi + howto

Uno degli elementi tipici di un blog è il box per la ricerca e qualche giorno fa mi sono messo in mente di cambiare quello presente su questa pagine.

Ho quindi iniziato a guardarmi un giro cercando di trovare qualcosa che mi piacesse e dallo screening effettuato sono venute fuori diverse cose interessanti.

Quello che non ho trovato sono state le popolarissime “inspiration list” ed ho quindi deciso di presentarvene 10 che, secondo il mio gusto, ritengo siano decisamente “stilose“.

Sohtanaka: Web development & design

sohtanaka

Michael Tyson: Life, tech, Cocoa development, Mac

michaeltyson

Continue reading “10 Searchbox stilosi + howto”

Evitare SQL Injection con WordPress

Il problema SQL Injection è stato ampliamente discusso e tempo fa segnalavo anche un interessante PDF sull’argomento.

sql-injection

Anche lo sviluppo di plugin per WordPress può essere soggetto a questo tipo di attacchi ed è quindi bene prendere tutte le precauzione del caso ogni volta in cui si lavora direttamente con il database

Da poco ho scoperto che WordPress implementa nativamente un sistema per formattare le query SQL e la documentazione relativa alla classe WPDB ha un capitoletto dedicato alla descrizione del suo funzionamento: Protect Queries Against SQL Injection Attacks

Vediamo come funziona:

$ID = get_the_ID();

$post_type = “attachment”;

$sql_attachment = “select post_name , guid , post_mime_type
from maurizio_posts where post_type = %s and post_parent = %d”;

$wpdb->query($wpdb->prepare($sql_attachment, $post_type, $ID));

Nell’esempio viene prapareata un’estrazione di tutti gli “attachment” associati ad un determinato post ma nella query non vengono usati direttamente i valori ma dei segnaposti che verranno poi sostituiti dalla funzione “prepare“.
Il segnaposto “%s” dichiara un valore stringa mentre “%d” dichiara la nostra variabile con un valore numerico.

In questo caso i vantaggi dell’utilizzo di questa tecnica non sono molti in quanto possiamo dire che i valori passati alla query siano relativamente sicuri, ma facciamo adesso un esempio in cui diamo all’utente la possibilità di indicare il nome dell’attachment da cercare.

$search = $_GET[“search_string”];

$sql_attachment = “select post_name , guid , post_mime_type
from maurizio_posts where post_type = ‘attachment’
and post_name like (%s) “;

$wpdb->query($wpdb->prepare($sql_attachment, ‘%’.$search.’%’));

Nell’esempio la stringa di ricerca viene passata tramite un form di input e non possiamo essere certi di cosa abbia digitato l’utente e se non usassimo la funzione “prepare” potremmo essere soggetti ad un tentativo di SQL Injection.

Questa “tecnica” fa ovviamente parte anche delle linue guida per lo sviluppo di wordpress che, nel caso non conosciate, vi consiglio di andare a leggere.

Image Credits: The Tech Herald

Ruby on Rails 2.2: un eBook gratuto in italiano

Lo scorso 21 Novembre è stata rilasciata la versione 2.2 di questo “rivoluzionarioframework.

Le novità sono tante ed avere a disposizione un libro che descriva tali cambienti può risultare molto utile.
Quando poi il libro è disponibile gratuitamente ed anche tradotto in italiano diventa un’occasione da non lasciarsi scappare.

rubyonrails-in-italiano

L’autore di questa testo è Carlos Brando mentra la traduzione è opera di Carlo Pecchia a cui vanno tutti i miei ringraziamenti.

Qui sotto mi sono permesso di riportare parte dell’introduzione:

Ruby on Rails 2.2 è ricco di nuove funzionalità, miglioramenti e correzioni di bug. In questo libro troverete una breve
descrizione accompagnata (nella maggior parte dei casi) da esempi per ciascuno dei cambiamenti più significativi
introdotti nella nuova versione di Rails.

La realizzazione del presente libro è stata una notevole impresa, ed è nostra speranza che possa aiutarvi a
comprendere ogni nuova funzionalità introdotta in Rails.

Con la nuova versione Rails è divenuto poliglotta. Con il nuovo sistema di internazionalizzazione (i18n) potrete creare
con facilità applicazioni per i vari utenti sparsi sul globo.

Sforzi notevoli sono stati fatti per rendere Rails thread-safe ed il più possibile pronto per l’imminente rilascio della
versione 1.9 di Ruby. C’è stato anche un grande lavoro per renderlo maggiormente compatibile con JRuby. Benché la
modalità thread-safe non è ancora disponibile per tutti gli ambienti, dal momento che funziona solo nelle virtual
machine con supporto nativo per i thread (es: JRuby), è da considerare come un notevole punto di vantaggio per il
framework.

(via edit)

La gestione degli archivi

La gestione degli archivi di un blog è una di quelle cose spesso trascurata e demandata ad un semplice elenco nella sidebar.
Ammetto che per molto tempo è stata sottovalutata anche dal sottoscritto, ma quando alcune persone mi hanno fatto notare quanto fosse difficile recuperare le informazioni già “archiviate” ho incominciato a pensare come poterli organizzare in modo che la loro consultazione fosse più agevole.

WordPress mette a disposizione una funzione chiamata “wp_get_archives” che permette di creare liste organizzare secondo diversi criteri ma, dopo aver fatto qualche prova, mi sono reso conto di non riuscire ad ottenere nulla che mi piacesse.

Quello che avevo in testa era un elenco di tutti i posts raggruppato per mese e sono così passato ad utilizzare “get_posts“.

Continue reading “La gestione degli archivi”

3 libri per un web developer

Mi è stato chiesto di consigliare qualche libro in italiano ad un “web developer 2.0” alle prime armi.
Senza entrare nello specifico di un linguaggio lato server, voglio provare a fare un breve elenco di quelli che per il sottoscritto sono stati fondamentatali.

3-libri-per-un-web-developer

  • Cascading style sheets. La guida completa” di Eric A. Meyer.
    Partiamo dai CSS. Lo studio dei foglio di stile è secondo me la prima cosa da fare. Conoscere e capire come funzionano margin, padding e allineamento è fondamentale per progettare siti senza strutture rindondate.
    Per ulteriori appofondimenti consiglio anche Lo zen e l’arte del Web con il CSS
  • Javascript” di Flanagan David.
    Da affiancare alla conoscenza dei fogli di stile c’è sicuramente Javascript che è necessario per avere la padronanza dello sviluppo lato browser. Imparare “bene” questo linguaggio è una cosa che richiede molti anni di esperienza ma i rudimenti devono essere chiari a qualsiasi sviluppatore.
    ( nb. Questo libro è ormai un po’ vecchiotto ma in verità non ne conosco altri altrettanto validi. E’ uscita la 5° edizione in inglese.. )
  • XML, il linguaggio che rivoluzionerà il Web” di Elliotte Rusty Harold.
    Conclude la serie XML a cui arrivo direttamente senza passare da HTML in quanto lo voglio considerare già nel bagaglio di conoscenza di chi vuole definirsi “web developer
    Anche questo libro è molto vecchio e sembra che non sia più neanche in commercio. In alternativa suggerisco “Introduzione a XML” che, anche se non ho letto, mi sembra abbastanza valido.

In appendice metto ancora questo: Learning jQuery.
E’ in inglese ma penso che sia ottimo punto di partenza per studiare JQuery che rappresenza sicuramente uno dei migliori framework javascript in circolazione.

Altri suggerimenti?

Appunti per i Posteri

In questi giorni ho fatto un po’ di pulizia su questo blog, infatti l’aggiornamento alla nuova versione mi ha dato lo stimolo per tolgliere qualche plugins ed aggiungerne altri.

Questi i risultati del mio lavoro:

Twitter Tools: scritto da alexking è un plugin per visualizzare i propri tweet dentro wordpress. Tramite un bel pannello di amministrazione permette di scegliere il numero di cinquettii da visualizzare ma cosa forse più interessante permette di mandare un tweet per ogni post pubblicato e/o di creare un post per ogni tweet scritto.

Thumbnail for Excerpts: aggiunge un’immagine di anteprima  (selezionata cercando la prima immagine presente nel post) affianco al contenuto del “riassunto“.
In questo caso ho dovuto  fare una piccola modifica al codice del template in modo che in home page, dopo il primo post, venisse usato “the_excerpt” al posto di “the_content“.
Peccato che per questo plugin non esista un pannello di amministrazione e le opzioni configurabili siano modificabili solo aprendo il file PHP.

Simple Pie Plugin: Questo è il plugin ufficiale del simple pie team e permette la lettura di fonti RSS esterne e la loro visualizzazione all’interno di wordpress.
In questo caso ho dovuto ricorrere ad un plugin esterno in quanto la funzione integrata non gestiva correttamente il feed di google reader (forse perchè Atom?).
Per utilizzare Simple Pie è necessario installare anche il core mentre per personalizzare la visualizzazione si deve utilizzare dei file di “templates” caricati dentro una directory del plugin.

Admin Drop Down Menu: Come dice il nome “trasforma” il menu dell’amministrazione in un “menu a tendina“. Dopo averlo disattivato in quanto non compatibile con la nuova versione ed essermi detto “bello il nuovo menu” ho deciso dopo pochi giorni di aggiornarlo e di riattivarlo. Io lo trovo di una comodita assoluta.

wordpress-admin-drop-menu

Adesso qualche appunto relativo alle funzioni core:

Per una migliore della paginazione può venire utile sapere il numero di pagina dove ci troviamo.
La variabile da usare è “$paged” (ovviamente preceduta da un bel “global $paged;”)

Se si vuole creare un elenco con i post di una determinata categoria non è necessario ricorre a plugin esterni.
Con poche righe di codice possiamo fare tutto in casa usando i paramentri messi a disposizione da get_posts che dalla versione 2.6 accetta anche i parametri gestiti da “query_posts“.

Questo l’esempio per visualizzare gli ultimi 10 articoli della categoria “featured”:

<?php
$postslist = get_posts(‘numberposts=12&orderby=date&category_name=featured’);
foreach ($postslist as $post) :
setup_postdata($post);
?>
<li><a href=”” rel=”bookmark” title=”Permanent Link to < ?php the_title(); ?>”>< ?php the_title(); ?>< /a>< /li>
<?php endforeach; ?>

Per il momento mi fermo qui, ma vi invito a farmi sapere cosa nel pensate del mio nuovo footer in cui ho usato parte dei plugin di cui parlavo qui sopra.

Footer

WordPress Holidays Xmas edition

Con il solito ritardo arrivo ad “annuciare” la nuova versione di wordpress holidays (Xmas edition).

wordpress-holidays-xmas-edition

Si tratta di un plugin per wordpress che visualizza un box con una frase di auguri, un immagine contestuale al periodo e l’invito ad iscriversi ai pripri feed.

Nella nuova versione, oltre ad avere aggiunto le immagini “natalizie” sono state inserite delle stringhe di testo personalizzabili al posto dell’unica grossa immagine.
Al momento sono presenti “frasi” di default per la versione in italiano, inglese e spagnola.

Tra le altre cose abbiamo cercato di rendere personalizzabile anche il posizionamento che al momento conta 3 possibili varianti:

  1. in fondo ad ogno post (con la possibilità di escludere la homepage)
  2. usando uno shorcode inserito dentro il testo di pagine o articoli
    [wp_holidays]
  3. inserendo il codice php direttamente dentro il template
    if (function_exists(‘wp_holiday’)) { wp_holiday(); }

Il plugin è disponibile direttamente nell’extend e quindi, per chi ha già fatto l’upgrade alla 2.7, direttamente installabile dall’amministrazione di wordpress.

Riuscire a gestire il plugin usando il repository ufficiale non è stato semplicissimo sopratutto per la gestione delle versioni che permette l’aggiornamento automatico.
Adesso sembra funzionare tutto e per quanto mi riguarda è un piccolo motivo di orgoglio.

Se avete voglia di provare ad usarlo sarei felice di ricevere un vostro feedback e sono ovviamente graditi anche suggerimenti per nuove implementazioni e segnalazioni di bug.

Un grazie a Julius per le immagini ed a Gioxx per il supporto ed il debug.