lunedì 8 agosto 2011

Enable Leverage browser caching

Stavo cercando di migliorare le prestazioni di un sito fatto con joomla quando mi sono imbattuto in questo utile attrezzo:
google page speed
In firefox è un plugin di firebug. Praticamente questo plugin analizza le prestazioni del sito e suggerisce cosa migliorare per far si che il tuo sito sia più veloce e quindi più "simpatico" alle serp di google ( e anche agli smartphone.. ).
L'errore più ostico da risolvere è stato appunto quello relativo alla cache. Non è bastato infatti attivare la cache sul pannello di controllo di joomla, ma ho anche dovuto modificare il file .htaccess, aggiungendo le seguenti righe di codice
<IfModule mod_headers.c> Header unset ETag Header unset Last-Modified </IfModule> FileETag None <FilesMatch "\.(ico|gz|JPG|jpg|jpeg|png|gif|js|css|swf)$"> Header unset Cache-control Header set Expires "access plus 1 month" </FilesMatch>
Questa modifica rimuove gli header per 'last modified' e 'etag' e l'header expiration per altri tipi di file.


Qui la pagina che mi ha suggerito questa soluzione.



sabato 6 agosto 2011

ipse dixit Steve Jobs

   “Design non è solo come sembra o cosa trasmette. Design è come funziona.”

“Il nostro tempo è limitato, per cui non lo dobbiamo sprecare vivendo la vita di qualcun altro. Non facciamoci intrappolare dai dogmi, che vuol dire vivere seguendo i risultati del pensiero di altre persone. Non lasciamo che il rumore delle opinioni altrui offuschi la nostra voce interiore. E, cosa più importante di tutte, dobbiamo avere il coraggio di seguire il nostro cuore e la nostra intuizione. In qualche modo, essi sanno che cosa vogliamo realmente diventare. Tutto il resto è secondario.”
“Un sacco di aziende hanno deciso di ridimensionarsi, e forse è stata la scelta giusta per loro. Noi abbiamo scelto un percorso differente. Quello a cui crediamo è che se mettiamo di fronte ai consumatori degli ottimi prodotti, loro continueranno ad aprire i loro portafogli.”
“Non puoi limitarti a chiedere ai tuoi clienti cosa desiderano e dopo provare a darglielo. Nel mentre che lo realizzate, vorranno già qualcosa di nuovo.”

martedì 2 agosto 2011

come iniziare un'applicazione zk con maven

Breve guida step by step alla configurazione di un'applicazione basata su zk, maven, hibernate e spring.

Si da per scontato che maven e java siano già installati sulla macchina con la quale si desidera realizzare questo progetto.

Passo 1: Configurazione di base

creare una cartella per il progetto con linux/mac il comando è

mkdir project.name

entrare in questa cartella


cd project.name


da qui lanciare il seguente comando maven


mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app


Questo comando crea la struttura di cartelle del progetto e il file pom.xml

Il file pom.xml dovrebbe essere qualcosa del genere:


<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org/url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>


Per introdurre zk nel progetto basta modificare il file pom.xml aggiungendo le seguenti dipendenze:


<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.zkoss.zk</groupId>
<artifactId>zkplus</artifactId>
<version>5.0.7</version>
</dependency>
<dependency>
<groupId>org.zkoss.zk</groupId>
<artifactId>zhtml</artifactId>
<version>5.0.7</version>
</dependency>
<dependency>
<groupId>org.zkoss.common</groupId>
<artifactId>zweb</artifactId>
<version>5.0.7</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.zkoss.common</groupId>
<artifactId>zcommon</artifactId>
<version>5.0.7</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.zkoss.zk</groupId>
<artifactId>zul</artifactId>
<version>5.0.7</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.zkoss.zk</groupId>
<artifactId>zk</artifactId>
<version>5.0.7</version>
<type>pom</type>
</dependency>


Ora nella cartella src/main/webapp aggiungete due file: zk.xml e web.xml

zk.xml:


<?xml version="1.0" encoding="UTF-8"?>

<zk>
<device-config>
<device-type>ajax</device-type>
<timeout-uri>/timeout.zul</timeout-uri><!-- An empty URL can cause the browser to reload the same URL -->
</device-config>
</zk>


web.xml:


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>web-app name</display-name>

<servlet>
<description><![CDATA[ The servlet loads the DSP pages. ]]></description>
<servlet-name>dspLoader</servlet-name>
<servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dspLoader</servlet-name>
<url-pattern>*.dsp</url-pattern>
</servlet-mapping>
<!-- ZK -->
<listener>
<description>Used to cleanup when a session is destroyed</description>
<display-name>ZK Session Cleaner</display-name>
<listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
</listener>
<servlet>
<description>ZK loader for ZUML pages</description>
<servlet-name>zkLoader</servlet-name>
<servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
<init-param>
<param-name>update-uri</param-name><param-value>/zkau1</param-value></init-param>
<init-param>
<param-name>monitor-class</param-name><param-value>org.zkoss.zk.ui.util.Statistic</param-value></init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zul</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>zkLoader</servlet-name>
<url-pattern>*.zhtml</url-pattern>
</servlet-mapping>
<servlet>
<description>The asynchronous update engine for ZK</description>
<servlet-name>auEngine</servlet-name>
<servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>auEngine</servlet-name>
<url-pattern>/zkau1/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>

<welcome-file-list>
<welcome-file>index.zul</welcome-file>
<welcome-file>index.zhtml</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.dsp</welcome-file>
</welcome-file-list>

<resource-ref>
<res-ref-name>jdbc/potix</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>


Sempre in webapp aggiungete un file index.zul, (.zul è l'estensione per le pagine di zk).
Enjoy!