How to change Charset on the fly, via javascript

If you need to ADD OR CHANGE the metatag for charset, on the fly in your web page, you can use the function below, by passing the charset you want as parameter:



For example: setCharset('UTF-8'); or setCharset('ISO-8859-1');

java.sql.Date.valueOf() : comparing Sun vs BEA jRockit JVM

I've noticed two different behaviour of the static method java.sql.Date.valueOf() using Sun JVM instead of BEA jRockit JVM. I share with you this experience.

If you have the following string:

String myStringDate = "2010-01-010";

and apply the above method to get a java.sql.Date from it, as follows:

java.sql.Date date = java.sql.Date.valueOf(myStringDate);

on both Sun and BEA jRockit JVM, the method works fine and return a date.

BUT, if the string date is formatted like this

String myStringDate = "2010-1-10"; //note the month without zero.

 and apply the above method to get a java.sql.Date from it, as follows:

 java.sql.Date date = java.sql.Date.valueOf(myStringDate);

on Sun JVM (i've tried with 1.6 version) , you get the following exception

Exception in thread "main" java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Unknown Source)

while, using jRockit still works fine. So, pay attention in get date from string using this method, if you don't know on  which JVM your code will be run.

Hope this can be helpful.

Delete monxga32.exe from your PC (removal process)

Today, Avira Antivir notified me a potential malware. Then i made some research and found something strange on my PC.

1. The CPU running permanently over 50%-80%.
2. A "notepad.exe" process active but there weren't related and visible windows.
3. msconfig shows a unusual process at Startup: monxga32.exe. The path of this program was C:\Documents and Settings\user-account-name\Start Menu\Programs\Startup\ but searching this file with Explorer does not produce any results! Seems like this file does not exists, since it's not even hidden.

SOLUTION:

1. Start Windows in Safe Mode.
2. Search the file monxga32.exe. The given results are two:
   - C:\Documents and Settings\user-account-name\Start Menu\Programs\Startup\monxga32.exe
   - C:\WINDOWS\Prefetch\monxga32-"SOME CHARS".pf
Delete both of them.
3. Open regedit and click on Edit > Find. Digit monxga32.exe and delete all occurrences. Then search again to be sure each entry has been deleted. Close regedit.
4. Open msconfig, click on tab Start and uncheck the entry monxga32.exe and close msconfig.
5. It will ask you to restart your PC, then restart Windows normally.
6. To be sure everything has done well, re-open msconfig, on tab Start. No process monxga32.exe should appear in the list.

Hope this can be helpful.

For italian people - per gli italiani (e per chi si scoccia a leggere in inglese) una versione più divertente (e verbosa ) di questo mini-help per distruggere monxga32.exe :
http://toshidex.netsons.org/2010/04/22/win-io-ti-odio-part-iv-delete-monxga32-exe/
Thanks to lightuono ;)

Prepariamoci a sviluppare con Android

Android è uno stack software per dispositivi mobili che include un sistema operativo, middleware e applicazioni chiave. L'SDK di Android fornisce gli strumenti e le API necessarie per iniziare a sviluppare applicazioni per la piattaforma Android utilizzando il linguaggio di programmazione Java.
Per avere un'idea dell'architettura di Android possiamo dare uno sguardo al seguente diagramma:


Il sito di riferimento per gli sviluppatori è http://developer.android.com/index.html

In questo mini-tutorial, prepareremo l'ambiente per la crezione del nostro "Hello World" con Android.

1. Scarichiamo la SDK seguendo le istruzioni riportate qui: http://developer.android.com/sdk/index.htm
2. Scarichiamo ed installiamo Eclipse (consiglio la versione Galileo): http://www.eclipse.org/downloads/
3. Installiamo il plugin dall'url: https://dl-ssl.google.com/android/eclipse/
4. Riavviamo Eclipse
5. Per configurare la piattaforma in Eclipse, nella toolbar di Eclipse dovrebbe apparire un'iconcina come questa oppure cliccate su Window > Android SDK and AVD Manager (dove AVD sta per Android Virtual Device, ovvero l'emulatore per il test delle nostre applicazioni)
6. Nel pannello di sinistra della finestra aperta al passo 5, selezionate la voce "Available packages" e cliccate sul checkbox dell'url mostrato sulla destra, per visualizzare i componenti disponibili per l'installazione.
7. Selezionate almeno una piattaforma da installare, e fare clic su Installa selezionati. Se non siete sicuri che la piattaforma da installare, utilizzare l'ultima versione. Ad esempio:

Il download potrebbe durare diversi minuti
8. Per creare un AVD, in Eclipse, scegliete Finestra> Android SDK e AVD Manager e selezionate la voce "dispositivi virtuali" nel pannello di sinistra, quindi cliccare su "Nuovo".
9. Digitate il nome dell' AVD, ad esempio "AVDTest"
10. Selezionate la versione la versione del SDK di Android che desiderate eseguire su l'emulatore e confermate la creazione con "Crea AVD".


Ora siamo pronti per creare la nostra prima applicazione su piattaforma Android.

Session Timeout in JBOSS

Ci sono due modi per definire la durata massima di una sessione (il suo timeout) per un'applicazione deployata su JBoss.

PER TUTTE LE APPLICAZIONI:
Il session timeout può essere definito per tutte le applicazioni dell'AS nel file web.xml che si trova nella directory {serverdir}\default\deploy\jbossweb-tomcat55.sar\conf, modificando il tag (il valore è espresso in minuti).

Ad esempio:
<session-config>
<session-timeout<30</session-timeout>
</session-config>

PER UNA SINGOLA APPLICAZIONE:
Potrebbe essere necessario definire un session timeout diverso da quello settato a livello di AS, per una singola applicazione. Nel file web.xml all'interno dell'archivio da deployare, faremo l'"override" del session-timeout definito su JBoss.

Ad esempio:
<session-config>
<session-timeout>10</session-timeout>
</session-config>

Le web application per cui non è definito il tag session-timeout nel proprio file web.xml, assumeranno il comportamento standard, pertanto il loro session timeout, sarà di 30 minuti.

Hardware o design?

Driiin driin, scendo giù, il mio spacciatore di hardware Apple (k) mi consegna a domicilio il gioiellino (in tutti i sensi): il topo magico! Mouse wireless/touch pad/che altro? Delux!
Scarico il "Wireless Mouse Software", installo, riavvio, apro System Preferences ed eccolo:

Poi, dò un'occhiata alla mia scrivania e ditemi voi se questa non è classe! Grazie Aerandir!

Java Performance: occhio alla concatenazione delle stringhe.

E' utile prestare l'attenzione alle performance del nostro codice, dato che la concatenazione delle stringhe è una delle operazioni più comuni e frequenti.
Oggi ho letto quest'articolo molto interessante
StringBuilder vs StringBuffer vs String.concat - done right e ne riassumo il contenuto qui di seguito.
Il dilemma è :
operatore "+", StringBuffer o StringBuilder?

Innanzitutto è importante sottolineare che gli oggetti String in Java sono immutabili, ovvero una volta creati non possono essere più modificati. Pertanto "modificare" una stringa significa creare un nuovo oggetto e rendere il nuovo oggetto la referenza alla variabile che stiamo modificando. Quindi, quando si concatenano stringhe, non si fa altro che creare un nuovo oggetto con il contenuto delle stringhe concatenate.

Una volta detto questo le deduzioni sono semplici. Se si utilizza:
  • l'operatore "+" ( o String.concat() ): viene creata una nuova stringa, il valore della vecchia viene copiato nel nuovo oggetto e viene accodata l'altra stringa. Più lunga è la stringa, più lento è il processo (che coinvolge anche il Garbage Collector per la rimozione degli non più utilizzati). Evitate di utilizzare "+" in un loop! Va benissimo per System.out.println("x:"+x+" y:"+y);

  • la classe StringBuffer: è una sequenza di caratteri "thread-safe" (synchronized) e modificabile. In qualsiasi punto ed in ogni momento, il contenuto può essere può essere modificato utilizzando gli appositi metodi ( append, insert ... ).

  • la classe StringBuilder (a partire da Java 1.5): il funzionamento è pressocchè uguale ma è più veloce di StringBuffer, poichè non è synchronized.
IN CONCLUSIONE: And the winner is.... StringBuilder!!!
Se dobbiamo costruire delle stringhe molto lunghe, o all'interno di loop o ancora modificarne frequentemente il contenuto, è senz'altro indispensabile utilizzare StringBuilder. Per semplici concatenazioni di piccole stringhe, utilizziamo il "+" che riduce notevolmente la quantità di codice da scrivere.