martedì 24 gennaio 2012

variabili globali su mac

Per aggiungere una variabile globale in un sistema mac:

  1. aggiungere un file di testo alla cartella: /etc/paths.d/
  2. nominare in maniera coerente (se si vuole installare un tomcat nominarlo tomcat).
  3. all'interno del file il path alla cartella che si vuole usare come variabile globale (nel caso di tomcat fino alla cartella /bin).

mercoledì 28 settembre 2011

jquery (can't?) stop effect

Oggi mi sono scontrato con un limite di jQuery: non c'è modo di "stoppare" un effetto quando questo viene lanciato.

$("div").effect("pulsate", { times:4 }, 2000);
Ho eseguito ogni tipo di ricerca su google e ho scoperto che:

  • In molti hanno avuto il mio stesso problema, ma nessuno ha trovato la soluzione.
  • Esiste una funzione queue in jQuery, ma non ho capito a cosa serve e come si usa.
  • Esiste una funzione animate, con la quale si possono fare dei giochini interessanti e con la quale ho risolto il mio problema.
Anzitutto ho fatto una funzione che riproduce l'effetto pulsate di cui sopra:

function animateIt() {

    $("div").animate({ opacity: 'toggle' }, 2000, 'linear', animateIt);
 }
 e l'ho messa come callback di animate. 
Il risultato in questo caso è che si fa il toggle animato della proprietà opacity, quindi in 2 secondi il div lampeggia e sparisce e poi richiama a funzione e in due secondi lampeggia e riappare.
Il nocciolo della questione è ora stoppare questo effetto:

$("div").stop();
Basta eseguire questa semplice istruzione per fermare l'animazione. Questo introduce un piccolo bug. Quando si ferma l'animazione l'opacità del div è la stessa al momento dello stop, perciò se si stoppa in un momento in cui il div è invisibile il div rimane invisibile ( e potrebbe essere utile in alcuni casi), se si vuole semplicemente togliere l'effetto di mostra/nascondi basta rimuovere l'attributo style che viene aggiunto dall'animazione
$("div").removeAttr("style");

venerdì 2 settembre 2011

ie on mac osx

http://winebottler.kronenberg.org/


Seguite questo link se anche voi sventurati sviluppatori di web application, lavorate con mac e dovete testare le vostre opere su ie.
A questo indirizzo trovate il dmg WinBottler, che vi fornisce sia wine che WinBottler appunto.
Basta scaricare, aprire e draggare entrambi wine e WinBottler nella vostra cartella applications, dopo di che installate tutto quello che vi serve.
Ahime io ho dovuto installare ie7...

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!

mercoledì 16 febbraio 2011

ah la programmazione

  1. If debugging is the process of removing software bugs, then programming must be the process of putting them in. -  Edsger Dijkstra
  2. The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.  – Tom Cargill
  3. “There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.”-  C.A.R. Hoare
  4. Measuring programming progress by lines of code is like measuring aircraft building progress by weight. – Bill Gates
  5. “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.” – Martin Golding
  6. “The trouble with programmers is that you can never tell what a programmer is doing until it’s too late.” – Seymour Cray
  7. Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. – Rick Cook
  8. “Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris.” – Larry Wall
  9. “Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday’s code.” – Christopher Thompson
  10. Walking on water and developing software from a specification are easy if both are frozen. – Edward V Berard
Morale l'universo vincerà contro i poveri programmatori!