16 aprile 2010

Importare dati da Excel a Mysql
(compreso Wordpress)

scritto daMauro Accornero

Normalmente un Cms è la soluzione più richiesta ed utilizzata nei progetti web, questo perchè permette una gestione facilitata dei contenuti anche per i non addetti ai lavori.

Questo tipo di soluzione ha però un rovescio della medaglia, per consentire l’aggiunta, la modifica e l’eliminazione dei contenuti questi sono gestiti singolarmente causando così evidenti rallentamenti nel caso sia necessario aggiungere una quantità considerevole e diversa di contenuti.

Per quanto sembri un problema da poco, rappresenta uno scoglio per ogni messa online, creato il sito e preparata la struttura normalmente ci si scontra con la triste realtà che scrivere testi richiede tempo, posticipando così il termine del progetto.

Come triste conseguenza ci si trova in ritardo rispetto alle scadenze ma con tutti i contenuti ancora da inserire ed un’ovvia lotteria per decidere chi dovrà farsi carico del lavoro di data entry.

In casi come questo l’unica soluzione intelligente che mi sento di suggerire è quella di suddividere il lavoro per renderlo più veloce e concludere quanto prima.

Preparare il file Excel

Un passo indispensabile per cercare di raggiungere il risultato è quella di richiede che i contenuti siano in qualche modo formattati, in modo che possano essere facilmente convertiti ed inseriti in modo massiccio.

Ad esempio, avere i contenuti del sito in un file excel già suddiviso in colonne è un grande vantaggio rispetto ad un file word.

Esportare in CSV

In questo modo è infatti possibile esportare il file in formato .csv che risulta più facile da importare nel database e di conseguenza nel sito che dobbiamo popolare di contenuti.

Prima di procedere…

E’ opportuno fare una prova prima di intervenire su un sito online, create un backup dei files e del database, installate in locale modificando i parametri necessari e testate, anche in caso di test positivo salvate per precauzione una copia del database e dei files.

Nel caso sia una giornata sbagliata e per qualche motivo l’import non andasse a buon fine potete sempre ripristinare database e files e rimettere in piedi il sito in poco temo grazie ad una copia di backup.

Importazione del CSV con phpmyadmin

Per procedere in questo modo esistono diversi modi, un approccio molto diretto ci viene fornito direttamente da phpmyadmin che permette di importare direttamente un file csv all’interno di una specifica tabella.

Importazione del CSV con script PHP

Considerato che phpmyadmin è comunque un’applicazione scritta in php potremmo pensare di creare da zero uno script per l’importazione dei dati piuttosto che utilizzare uno script preconfezionato come ad esempio php-csv-parser che permette di inputare un file csv e di ottenere un array con i dati come output.

Importazione del CSV su Wordpress

Nel caso in cui le vostre necessità siano più specifiche ed orientate all’import su un sito basato su wordpress consiglio csv importer, un semplice plugin che facilita l’inserimento di articoli dal csv al database.

Le opzioni offerte facilitano l’importazione rintracciando automaticamente le categorie esistenti e creandone di nuove nel caso non esistano, oltre a questo è possibile limitare la ricerca ad una specifica categoria padre.Stesso discorso per l’autore, nel caso il dato sia omesso verrà utilizzato l’utente con il quale siete loggati.

Unici dati indispensabili per l’import sono a scelta il titolo, il contenuto o il contenuto estratto (excerpt per intenderci :) ).

L’unico passaggio fondamentale per un’importazione di successo dventa quindi la formattazione del csv che deve separare i vari articoli su più linee e i vari dati tra apici doppi separati da virgola.

Nel caso abbiate qualche dubbio riguardo a come formattare il vostro file csv vi consiglio di visionare il file sample.csv all’interno della cartella del plugin.

Tag: ,

6 aprile 2010

Migliorare i tempi di Rendering ottimizzando i selettori css

scritto daMauro Accornero

css_rendering_performance

Ottimizzare un sito web per migliorane i tempi di caricamento è una pratica ormai comune, ma questo rappresenta solo una parte del lavoro necessario per ridurre i tempi di attesa per l’utente.

Bisogna infatti ricordare, che le risorse che compongo una pagina web, oltre ad essere richieste al server e poi ricevute sulla macchina dell’utente devono in seguito essere renderizzate nel browser.

Di questo compito si occupa il motore di rendering del browser che andrà ad applicare i fogli di stile alla pagina caricata. Questa operazione di fatto utilizza le risorse macchina dell’utente e può essere rallentata dalla scarsa disponibilità di ram  al momento del rendering, oltre a ciò i tempi variano a seconda della complessità del sito e del software utilizzato.

Diventa quindi utile capire come ottimizzare i tempi di rendering della pagina attraverso una più attenta compilazione dei fogli di stile.

Come vengono letti i selettori css

Il motore di rendering legge i selettori css da destra verso sinistra, partendo dal primo selettore cerca un riscontro nella pagina HTML se non rintraccia l’elemento specifico passa al selettore successivo fino a che non rintraccia l’elemento su cui applicare la regola.

Prendiamo per esempio

#menu li a{...}

Il motore di rendering cercherà prima di tutto il selettore a (il primo selettore viene definito “chiave” o “key”), dopo cercherà il genitore li fino a che non trova riscontro nell’elemento menu.

Sulla base di quanto detto possiamo definire delle metodologie per ottimizzare i tempi di rendering dei fogli di stile

Eliminare le regole non necessarie

Se esistono regole che non vengono applicate ad alcun elemento è meglio eliminarle, anche se la regola non viene applicata il motore effettua comunque una ricerca dell’elemento gravando sui tempi di rendering. Oltre a questo non bisognerebbe mai tenere codice superfluo nei files,  questo aumenta inutilmente il peso del file e rende più complesso il mantenimento e la compilazione.

Non utilizzare il selettore universale *

Il selettore universale * seleziona tutti gli elementi presenti sulla pagina, è normalmente utilizzato per le regole di formattazione.

*{margin:0;padding:0;}

Considerato che non tutti gli elementi html hanno un valore di default per margine e padding  e che difficilmente si utilizzano tutti gli elementi HTML in una singola pagina, sarebbe utile specificare in altro modo questa regola evitando una così vasta ricerca al motore di rendering.

h1,h2,h3,h4,h5,h6,p,
form,fieldset,label,input,textarea,select,button,
ul,ol,dl,dd,li{margin:0;padding:0;}

Questa regola  formatta margine e padding per intestazioni, paragrafi, form, elementi del form e liste con maggiore specificità e minore dispendio di risorse.

Limitare la discendenza

Specificare una discendenza prolissa per una regola può essere utile in alcuni contesti per gestire la gerarchia delle regole, ma nella norma è possibile evitarlo.

Prendiamo per esempio

body #content #menu li a{...}

Essendo #menu un id, quindi un elemento univoco sulla pagina è possibile semplificare la regola in questo modo

#menu li a{...}

Ottimizzando così i tempi di ricerca dell’elemento da parte del motore di rendering

Evitare espressioni ricorsive

Quando si utilizzano classi e id si specificano implicitamente un gruppo di tag o un tag specifico rendendo così superflua una definizione del selettore tag

ad esempio

div#menu{...}
li.selected{...}

sono chiaramente ricorsivi e possono essere ottimizzati come segue

#menu{...}
.selected{...}

Limitare l’utilizzo di :hover all’elemento <a>

E’ noto come l’utilizzo della pseudoclasse :hover su elementi diversi da <a> non sia supportato da Internet Explorer in assenza di un doctype strict e causa notevoli rallentamenti anche in presenza di questo specifico doctype.

Una  valida alternativa  è rappresentata dalla trasformazione dell’elemento <a> in elemento di blocco per una più semplice gestione da css.

a{display:block;width:100px;height:100px;padding:5px;background:#000;}
a:hover{background:#c00;}

Specificare…sempre!

Ottimizzare il rendering del css è più una metodologia che non una serie di soluzioni standard, i selettori hanno specificità diversa e questo riduce o aumenta i tempi di rcerca del motore di rendering della pagina.

Per esempio gli ID sono elementi univoci e in quanto tali hanno tempi di ricerca più ridotti di tutti gli altri selettori.

Le classi rappresentano gruppi di elementi, sono meno performanti degli ID ma più dei selettori tag.

I tag sono selettori meno specifici perchè si riferiscono a tutti i tag di quel tipo presenti sulla pagina.

I selettori fratello (+) o figlio (-) sono meno vantaggiosi di una classe o un id ma più vantaggiosi di un selettore tag perchè riducono la ricerca del motore a due elementi (il selettore e l’eventuale padre o fratello).

Sulla base di quanto detto potremmo pensare di rivedere per esempio la nostra regola di formattazione vista in precedenza da così:

h1,h2,h3,h4,h5,h6,p,
form,fieldset,label,input,textarea,select,button,
ul,ol,dl,dd,li{margin:0;padding:0;}

a così

.format{margin:0;padding:0;}

Modificando così la regola la ricerca viene limitata ad un gruppo più ristretto di elementi e la lunghezza della regola nel css viene ridotta.

Non a caso rintracciamo soluzioni analoghe in script molto utilizzati come ad esempio jquery ui che utilizza una classe .ui-helper-reset per la formattazione degli elementi.

2 aprile 2010

Come migliorare le performance del proprio sito con SmartOptimizer

scritto daMauro Accornero

web_performance

Sui tempi di caricamento delle pagine web si è discusso molto, l’argomento è senza dubbio importante sia per favorire la navigazione degli utenti sia per facilitare l’indicizazzione del sito.

In un mondo ideale tutti i siti dovrebbero pesare meno di 100kb complessivi, ottimizzare markup, css,  javascript e immagini, ridurre al minimo le richieste al server e molto altro ancora. Nel mondo reale i contesti sono variegati e talvolta non è possibile ottimizzare tutto l’ottimizzabile oppure anche le migliori procedure non danno i frutti sperati.

E’ quindi necessario muovere il proprio sguardo oltre le tecnologia lato client e cercare ulteriori soluzioni  nel lato server. Un normale ostacolo a questo pensiero è rappresentato dal fatto che non sempre abbiamo pieno accesso al server e ciò rende difficile settare il proprio spazio web in modo congruo.

Una semplice soluzione a questo problema è rappresentata da SmartOptimizer, progetto di Ali FarHadi, il miglioramento delle performance è reso possibile dall’impostazione personalizzata della compressione gzip sul server, il salvataggio della cache dei files e  la compressione e la concatenazione di script.

Per l’utilizzo è necessario possedere un server Apache con il modulo mod_rewrite abilitato (è il modulo di Apache che permette la definizione di regole da un file .htaccess) e php versione 4.3.0 o superiori.

Nel dettaglio la soluzione consiste in una cartella contenente alcuni files php e un file .htaccess. Gli scripts php si occupano della compressione di css e javascript, del salvataggio della cache e delle opzioni custom da impostare sul server, il tutto viene elaborato e rimandato al file .htaccess che permette l’impostazione di nuove regole nello spazio web.

L’utilizzo è molto semplice, una volta scaricata la cartella e il file .htaccess basta caricarli nel proprio spazio web e verificarne il funzionamento. Volendo è possibile utilizzare il file config.php per settare le diverse opzioni di ottimizzazione in base al contesto trattato.

Per eventuali dubbi su utilizzo ed installazione consiglio la pagina di documentazione e download sul sito di Ali FarHadi.

Un ulteriore consiglio per i test sull’ottimizzazione delle vostre pagine web è quello di utilizzare page speed sul vostro browser per meglio analizzare come vengono risolte le richieste al server e su quali contesti lavorare per miglirare i tempi di caricamento e rendering.

30 giugno 2009

Tre addon per firefox che miglioreranno il vostro lavoro

scritto daMauro Accornero

Facendo una stima dei programmi più usati durante il lavoro, mi sono reso conto che il passaggio tra browser, editor e programmi di grafica è la principale perdita di tempo e che può essere facilmente ridotta con tre semplici addon per firefox.

Firebug

E’ l’addon più gettonato di sempre, velocizza il lavoro e la verifica permettendo di analizzare nel dettaglio la pagina html, il dom e javascript. Uno strumento utile per html e css, permette infatti di analizzare un elemento della pagina e vedere quali regole sono attribuite e quali eredita. Per chi invece utilizza javascript mette a disposizione una comoda console che riporta errori e anomalie. Oltre a questo Firebug permette la modifica da browser dei css oltre ad una comoda rappresentazione del box model per valutare i parametri di ogni elemento. Uno strumento indispensabile quando si lavora con ajax anche se diventa eccessivo per la normale navigazione web.

link al sito del progetto

Web developer toolbar

Un ottimo addon dai molteplici utilizzi, consente di visualizzare separatamente javascript, css e html. Permette la modifica da browser di css e html con rendering immediato, analizza il peso della pagina fornendo un report sulle dimensioni dei files, compila automaticamente i campi di un form, valida pagine online e offline tramite il validatore w3c, permette l’anteprima a diverse risoluzioni e fornisce un righello per misurare in pixel ogni parte della pagina. Oltre a questo semplifica le normali operazioni da browser come disabilitare immagini o css e cancellare i cookie.

linka mozilla add-ons

Fireshot

E’ un addon per firefox che salva in formato png l’immagine del sito, ma non solo, permette l’aggiunta di note e commenti direttamente da browser salvando il tutto come immagine. L’opzione “capture entire page” permette di salvare un’immagine della pagina per intero e le opzioni di condivisione permettono di velocizzare la stampa, l’invio tramite mail o l’upload.

Link a mozilla add-ons

Tre ottimi strumenti per velocizzare il lavoro, se ancora non li usate non vi resta che provarli.

Tag: , ,

7 giugno 2009

44 esempi di layout a larghezza fissa da non perdere

scritto daMauro Accornero

Uno dei primi passi nella realizzazione di un buon sito web è la progettazione del layout. Normalmente questa è influenzata dalla quantità di contenuti di un sito, dal design della pagina e dall’usabilità dei vari elementi presenti.

Una volta definiti questi aspetti si può partire definendo una griglia per il nostro layout. Questo permettà di mantenere ordine e conformità grafica nelle varie pagine.

Per realizzare una griglia è necessario definire almeno tre dimensioni:

-Larghezza della pagina

-Numero di colonne

-Spaziatura tra i vari elementi

Larghezza della pagina

Per questa dimensione è consigliabile utilizzare una misura uguale o inferiore ai 960px che rappresenta l’area visibile dall’utente ad una risoluzione di 1024×768px con i diversi browser. La misura in realtà è di 968px ma viene arrotondata per comodità. Essendo la risoluzione minima più usata dagli utenti di 1024×768px garantisce un ottima compatibilità con i monitor degli utenti.

Numero di colonne

Il numero di colonne deve essere definito in base alla quantità e alla varietà di contenuti del sito. E’ utile ricordare che un minor numero di colonne lascerà più spazio per immagini e grafiche mentre un numero eccessivo renderà il contenuto difficilmente leggibile. Bisogna sempre valutare a priori quale soluzione sia opportuna per un determinato contesto.

Spaziatura tra gli elementi

In qualunque contesto grafico è utile lasciare un minimo di spazio tra i contenuti per migliorare la leggibilità e soprattutto definire aree differenti con diversi elementi. Facendo attenzione che lo spazio sia proporzionale ai contenuti e non faccia prevalere il “vuoto” che porterebbe solo disturbo e confusione nella pagina. E’ utile ricordare che una volta definita una spaziatura è opportuno mantenerla su tutto il sito per garantire una migliore leggibilità all’utente.

Viste queste premesse ho creato 44 esempi di layout a larghezza fissa da 960px con differente numero di colonne e differenti spaziature. Gli esempi sono visibili su questa pagina.

Tag: , , ,