468x60

mercoledì 15 dicembre 2010

Clonazione disco su Linux con Clonezilla

Clonezilla è un ottimo software open source per la clonazione di sistemi Linux. E' avviabile da cd e può clonare il disco su un altro disco, oppure creare un file di immagine e salvarlo su un altro disco intero o esterno USB, oppure salvare l'immagine su server remoti SSH, Samba, NFS.

giovedì 9 dicembre 2010

Modificare la password di root in Ubuntu

Per modificare la password di root su Ubuntu bisogna eseguire questo comando:
sudo passwd

Impostare il Titolo del sito con sh404SEF in Joomla

Per impostare il titolo del sito in Joomla, se abbiamo installato sh404SEF, bisogna seguire questa procedura:

  1. Accedere come amministratore al pannello di controllo
  2. Andare su Componenti-> sh404SEF
  3. Se si è in "Standard Display", cliccare sul link "Click here to switch to extended display."
  4. Click sul pulsante "Meta tags"
  5. Click sul link in alto "Home Page Meta"
  6. Scrivere Titolo, Descrizione, Keywords, ecc...
  7. Click su Salva
A questo punto il titolo del sito sarà mostrato :)

martedì 7 dicembre 2010

Traduzioni SectionEx in Joomla

SectionEx è un ottimo componente per Joomla col quale è possibile mostrare gli articoli raggruppandoli per sezione e categoria. Purtroppo l'installazione di questo componente non include le traduzioni, che bisogna copiare a mano.

I files delle traduzioni sono:

  • com_sectionex\languages\site\it-IT.com_sectionex.ini (frontend)
  • com_sectionex\languages\admin\it-IT.com_sectionex.ini (amministrazione)
E vanno copiati su:
  • TUO-SITO\administrator\language\it-IT\ (frontend)
  • TUO-SITO\language\it-IT\ (amministrazione)

venerdì 3 dicembre 2010

Installare SSH Server su Ubuntu

Per installare un server SSH su Ubuntu possiamo installare OpenSSH, col seguente comando dalla shell:
sudo apt-get install openssh-server
Per installare il client:
sudo apt-get install openssh-client

sabato 20 novembre 2010

Modificare il footer in Joomla

Per modificare il footer in Joomla bisogna editare il file path_joomla/language/it-IT/it-IT.mod_footer.ini

mercoledì 10 novembre 2010

Ottenere la connessione JDBC da un EntityManager

Vediamo come ottenere la connessione JDBC da un EntityManager

- Con Toplink
Connection jdbcConnection = ((oracle.toplink.essentials.ejb.cmp3.EntityManager) entityManager).getServerSession().getDefaultConnectionPool().acquireConnection().getConnection();

- Con EclipseLink
java.sql.Connection jdbcConnection = entityManager.unwrap(java.sql.Connection.class);

lunedì 8 novembre 2010

Deploy su singolo JAR con Netbeans

Ecco un ottimo tutorial su come effettuare il deploy su un unico file JAR di un'applicazione con Netbeans http://java.sun.com/developer/technicalArticles/java_warehouse/single_jar/

venerdì 29 ottobre 2010

findJAR.com - utilissimo motore di ricerca per Classi e JAR

findJAR.com è un utilissimo motore di ricerca per cercare i file JAR a partire dal nome della classe o viceversa.

lunedì 25 ottobre 2010

Ripristinare connessione al db dopo caduta di servizio

Utilizzando Toplink come persistence provider, mi chiedevo come fosse possibile ripristinare la connessione al database dopo una caduta di servizio.

Trovato la soluzione!

Il problema era dovuto al fatto che Toplink non ha un controllo automatico delle connessioni inattive. E' possibile risolvere il problema in due modi:
1) implementando l'interfaccia ExceptionHandler per catturare il fallimento della connessione e riconnettersi
2) passando da Toplink ad EclipseLink


Siccome Toplink è ormai rimpiazzato da EclipseLink, come si può leggere sul sito della Oracle http://www.oracle.com/technology/products/ias/toplink/jpa/index.html, ho deciso di adottare la strategia (2)

venerdì 22 ottobre 2010

Scrivere codice in Blogger

Spesso mi capita di dover scrivere del codice sui post del mio blog su Blogger. Per farlo basta racchiudere il codice tra i tag <code> e </code>.
Un modo per assicurarsi di scrivere sempre il codice in modo corretto, senza avere problemi di conversione automatica con Blogger, è quello di utilizzare http://www.simplebits.com. Una volta avuto il codice generato possiamo copiarlo e incollarlo nell'editor del nostro post e verrà visualizzato invece che convertito! :)

Jasper Report - caricare un'immagine da JAR

Con Jasper Report è possibile caricare un'immagine da un file JAR, con il seguente codice:

<imageexpression class="java.lang.String"></imageexpression>

giovedì 14 ottobre 2010

IntegradedWeblogic connection problem "com.mysql.jdbc.Driver" not found

Utilizzando JDeveloper mi sono imbattuto nel problema di non riuscire ad avviare una web app attraverso l'application server integrato, a causa del connector-j di MySQL mancante.

Per risolvere il problema ho copiato il connector-j di MySQL sulla cartella C:\Documents and Settings\Administrator\Application Data\JDeveloper\system11.1.1.3.37.56.60\DefaultDomain\lib

Upgrade di PHP su Linux

E' possibile effettuare l'upgrade di PHP ad una versione recente utilizzando il repo atomic.

wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh
yum update php

iReport - report designer plugin per Netbeans

iReport è un fantastico report designer, di cui è disponibile anche un comodo plugin per Netbeans...

Da provare!

Background tasks con Netbeans - senza eventi

Ecco come creare un background task con Netbeans - senza eventi:


public Task myMethod() {


Task mT = new myTask(DesktopApplication.getApplication());
ApplicationContext appC = Application.getInstance().getContext();
TaskMonitor tM = appC.getTaskMonitor();
TaskService tS = appC.getTaskService();
tS.execute(mT);
tM.setForegroundTask(mT);


return mT;
}

Catturare l'eccezione OptimisticLockException

Ecco come catturare l'eccezione OptimisticLockException

Throwable th = rex.getCause();
if(th instanceof javax.persistence.OptimisticLockException) {
   System.out.println("Attenzione: il record risulta essere stato modificato dall'ultima lettura!);
}

JPA retrieve autogenerated keys

Assumendo di aver mappato @Id nella tua Entity con @GeneratedValue(strategy=IDENTITY) e creato la tua tabella con AUTO_INCREMENT sul campo chiave, l'id sarà assegnato al tuo object al commit.

Potrai accedere all'id dal tuo object dopo il commit. Se ne hai bisogno prima del commit, puoi chiamare flush() per assegnare l'id.

Installare uno stack LAMP su RedHat

Aggiorna i Packages
yum update

Installa Apache
yum install httpd httpd-devel

Avvia Apache
/etc/init.d/httpd start

Installa MySQL Database Server
yum install mysql mysql-server mysql-devel

Avvia MySQL
/etc/init.d/mysqld start

Cambia MySQL Root Password
mysql
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('newpassword') WHERE user='root';
mysql> FLUSH PRIVILEGES;
Check your password
mysql -u root -p
Enter Password:

Installa PHP5
yum install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml

Riavvia Apache
/etc/init.d/httpd restart

Verifica che PHP funzioni
Create a file named /var/www/html/phptest.php
vi filename ('phptest.php)
// phptest.php

Guarda il risultato aprendo il file con il browser: (http://miosito/phptest.php)

Saperlo.it - guide di ogni genere

Guide di ogni genere su http://www.saperlo.it/guide/computer-e-internet/

Buona lettura!

martedì 12 ottobre 2010

Errore di Spooler SubSystem App su Windows XP

Vediamo come risolvere questo problema abbastanza comune su Windows XP.


Errore:
Si è verificato un problema che ha richiesto la chiusura di Spooler SubSystem App

Soluzione:
  1. Arrestare il servizio "Spooler di Stampa":
    Start-> Pannello di controllo-> Strumenti di amministrazione-> Servizi
    Cercare il servizio "Spooler di Stampa" , cliccarci sopra con il tasto destro e cliccare su arresta
  2. Cancellare tutti i files nella cartella: "C:\WINDOWS\system32\spool\PRINTERS"
  3. Tornare sul servizio "Spooler di Stampa" e cliccando con il tasto destro scegliere Avvia
  4. Aprire la cartella "Stampanti e fax" per controllare che non appaia più l'errore
  5. Eseguire una prova di stampa da ognuna delle stampanti installate e cancellare quella che genera di nuovo l'errore, ripetendo la procedura dal punto 1
  6. In alcuni casi è necessario riavviare il sistema

martedì 28 settembre 2010

Rendere trasparente un'immagine GIF con Paint Shop Pro 8

Per rendere trasparente un'immagine GIF con Jasc Paint Shop Pro 8 bisogna:

  1. Diminuire il numero di colori a non più di 256, perchè il formato GIF non supporta più di 256 colori. Per farlo andare sul menu Image-> Decrease Color Dept-> 256 Colors
  2. Impostare il colore trasparente. Per farlo andare sul menu Image-> Palette-> Set Palette Transparency

venerdì 24 settembre 2010

Javascript unpacker and beautifier - un utile tool

Javascript unpacker and beautifier, un utile tool online per formattare i JavaScript

http://jsbeautifier.org/

Linkr, link da articolo ad articolo in Joomla

Joomla manca di strumenti nativi per rendere agevole all’utente la creazione di link interni tra articoli dello stesso sito. Una soluzione funzionante anche nell’editor standard è Linkr. Completata l’installazione, quando si crea un contenuto si vedrà un pulsante aggiuntivo sulla barra in fondo all’editor: il pulsante apre una finestra da cui si selezionano in cascata sezione, categoria e articolo. A questo punto con un clic su “Get Link” il link all’articolo desiderato sarà inserito nella posizione del cursore. Testo e attributi del link sono ovviamente impostabili. Oltre che ad articoli si possono inserire link a file, a voci di menu e a contatti. I link interni funzioneranno sia che si utilizzino le URL standard che le URL SEF (native o generate da componenti di terze parti come Sh404SEF).

Linkr offre inoltre due interessanti funzioni aggiuntive:
  • La possibilità di aggiungere automaticamente link per l’inserimento in siti di social bookmarks: si possono scegliere link testuali o grafici (icona, badge, pulsante) e l’html è personalizzabile, il che rende possibile aggiungere anche siti di social bookmarks italiani.
  • La possibilità di aggiungere collegamenti ad articoli correlati, vale a dire articoli con valori comuni nel campo meta-keywords, modificabile durante la creazione dell’articolo (Informazioni Metadata / Parole chiave).

Personalizzare gli articoli in Joomla: Parametri globali

In Joomla è possibile personalizzare dei parametri per la visualizzazione degli articoli, ad esempio io ho avuto la necessità di nascondere il nome dell'autore degli articoli.

Per farlo bisogna andare su:
Contenuti -> Gestione Articoli e cliccare sull'icona Preferenze in alto a destra

Si aprirà un wizard dal quale è possibile modificare la configurazione globale, che vale per tutti gli articoli, tranne che per quelli che non seguono le impostazioni globali.

Se ad esempio si vuole nascondere l'autore dell'articolo, basta impostare su "Nascondi" la combobox della variabile "Nome Autore". Tuttavia questa impostazione non è sufficiente per gli articoli sulla Home, perchè non seguono le regole generali, infatti bisogna impostare a "Nascondi" anche il valore della combobox su:
Menu Principale-> Parametri Componente-> Nome Autore.

mercoledì 15 settembre 2010

Update tabella da altra tabella in MySQL

Per eseguire in MySQL l'update di una tabella con i dati di un'altra tabella, basta seguire questa sintassi
UPDATE updatefrom p, updateto pp
SET pp.last_name = p.last_name
WHERE pp.visid = p.id

giovedì 9 settembre 2010

Espressioni condizionali con JasperReport

Utilizzando JasperReport ho avuto la necessità di usare delle espressioni condizionali, in modo da visualizzare una informazione piuttosto che un'altra.

Nel seguente codice vengono visualizzati i valori dei campi field1, field2 e field3 se non nulli, altrimenti vengono visualizzate stringhe vuote:
($F{field1} == null ? "" : $F{field1} ) +" "+ ($F{field2} == null ? "" : $F{field2} ) +" "+ ($F{field3} == null ? "" : $F{field3} )

mercoledì 8 settembre 2010

Netbeans "java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 "

Questo problema l'ho riscontrato varie volte con Netbeans, ed è possibile risolverlo nel seguente modo:

la JList legata alla JTable deve essere impostata come observable.

Resettare un campo auto-increment in MySQL

Per resettare un campo auto-increment in MySQL basta eseguire questo comando:
ALTER TABLE nome_tabella AUTO_INCREMENT=0

martedì 7 settembre 2010

Modificare larghezza drop-down list di un JCombobox

Lavorando con applicazioni Java Swing ho avuto necessità di modificare la dimensione orizzontale della drop-down list di un JCombobox. E' possibile farlo con il seguente codice:

//Popup state to prevent feedback
boolean stateCmb = false;

//Extend JComboBox's length and reset it
public void popupMenuWillBecomeVisible(PopupMenuEvent e)
{
JComboBox cmb = (JComboBox)e.getSource();

//Extend JComboBox
cmb.setSize(NEW_LENGTH, cmb.getHeight());
//If it pops up now JPopupMenu will still be short
//Fire popupMenuCanceled...

if(!stateCmb)
cmb.firePopupMenuCanceled();

//Reset JComboBox and state
stateCmb = false;
cmb.setSize(OLD_LENGTH, cmb.getHeight());
}


//Show extended JPopupMenu
public void popupMenuCanceled(PopupMenuEvent e)
{
JComboBox cmb = (JComboBox)e.getSource();
stateCmb = true;

//JPopupMenu is long now, so repop
cmb.showPopup();
}

public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
stateCmb = false;
}

venerdì 27 agosto 2010

Installare VMware Player su Ubuntu

Ecco come installare VMWare Player su Ubuntu:
  1. scaricare il file di installazione .bundle di VMWare Player dal sito
  2. sudo apt-get update
  3. sudo apt-get install build-essential linux-headers-`uname -r`
  4. chmod +x VMware-Player*.bundle
  5. sudo bash ./VMware-Player*.bundle


Buon utilizzo!

Installare TeamViewer su Ubuntu

Ecco come installare TeamViewer su Ubuntu:
  1. scaricare il file di installazione .deb di TeamViewer dal sito
  2. sudo apt-get update
  3. doppio click sul file .deb scaricato, oppure
  4. sudo dpkg -i nomefile_teamviewer_linux_*.deb

Buon utilizzo!

Ottimo tutorial sull'installazione di VMWare ESXi

Ecco un ottimo tutorial sull'installazione di VMWare ESXi, visionabile a questo link

mercoledì 18 agosto 2010

Multitenancy

Multi-tenancy (multi-locazione) si riferisce a un principio di architettura del software in cui una singola istanza del software gira su un server, che serve più clienti (tenants, cioè inquilini). Il multi-tenancy è l'opposto di una architettura multi-istanza, dove separate istanze del software (o sistemi hardware) sono istituiti per diversi clienti. Con una architettura multi-tenant, un'applicazione software è progettata per partizionare virtualmente i dati e la configurazione così che ogni cliente lavora con un'istanza personalizzata delle applicazioni virtuali.

mercoledì 4 agosto 2010

Rimozione veloce (senza cestino) di cartelle in Windows

Per rimuovere velocemente (e senza spostare nel cestino) cartelle contenenti migliaia di files e sottocartelle, è possibile eseguire il seguente comando DOS dalla shell di Windows:

RMDIR [drive:]path /S /Q

/S Rimuove tutte le sottocartelle ed i files nella cartella specificata oltre alla stessa cartell
a. Usato per rimuovere un intero albero di directory.

/Q Quiet mode, non chiede conferma per rimuovere un albero di directory con /S.

Attenzione: l'eliminazione dei files sarà irreversibile, non saranno spostati nel cestino!

sabato 24 luglio 2010

iPad e connessione WiFi

Ho ricevuto in regalo un iPad, splendido gioiellino tecnologico made in Apple. Per poterlo utilizzare con il Wifi ho dovuto però modificare la configurazione del mio router wifi, cambiando la protezione da WPA2 a WPA. Adesso il collegamento Wifi funziona benissimo!

lunedì 21 giugno 2010

Icone quantità su carrello Virtuemart

Su Virtuemart, un'estensione per il CMS Joomla! concepito per gestire funzionalità di e-commerce, dovrebbero esserci "+" e " - " per aumentare le quantità di un prodotto da mettere in carrello. Per risolvere questo problema bisogna editare il file quantity_box_general.tpl, che si trova in /components/com_virtuemart/themes/default/templates/product_details/includes, e sostituirlo con questo codice:

<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct
Access to '.basename(__FILE__).' is not allowed.' );

/** This template is used for the quantity box arrangement of products, within
the add-to-cart form */



extract( $quantity_options );



$html = '';

if(!$child && $display_type != 'hide') {

$html = '<label for="quantity'.$prod_id.'" class="quantity_box">'.$VM_LANG->_('PHPSHOP_CART_QUANTITY').':&nbsp;</label>';

}

switch($display_type) {

case "radio" : //Radio Box

$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]"
value="'.$quantity.'" />';

$html .= '<input type="radio" class="quantitycheckbox" id="selItem'.$prod_id.'"
name="selItem" value="0" ';

if ($quantity > 0 ) {

$html .= 'checked="checked" ';

}

$html .= 'onclick="alterQuantity(this.form)" />';

break;

case "hide" : // Hide box - but set quantity to 1!

$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]"
value="1" />';

break;

case "check" :

$html .= '<input type="hidden" id="quantity'.$prod_id.'" name="quantity[]"
value="'.$quantity.'" style="vertical-align: middle;"/>

<input type="checkbox" class="quantitycheckbox" id ="selItem'.$id.'" name="check[]"
';

if ($quantity > 0 ) {

$html .= 'checked="checked"';

}

$html .= ' value="1" onclick="javascript: if(this.checked==true)
document.getElementById(\'quantity'.$prod_id.'\').value = 1; else {document.getElementById(\'quantity'.$prod_id.'\').value=0;}
"/> ';

break;

case "drop" :

$code = '<select class="inputboxquantity" id="quantity'.$prod_id.'" name="quantity[]">';

for($i=$quantity_start;$i<$quantity_end+1;$i += $quantity_step) {

$code .= ' <option value="'.$i.'"';

if ($i == $quantity) {

$code .= ' selected="selected"';

}

$code .= '>'.$i."</option>\n";

}

$code .= "</select>\n";

$html .= $code;

break;

case "none" :

default:

$html .= '<input type="text" class="inputboxquantity" size="4" id="quantity'.$prod_id.'"
name="quantity[]" value="'.$quantity.'" />

<input type="button" class="quantity_box_button quantity_box_button_up" onclick="var
qty_el = document.getElementById(\'quantity'.$prod_id.'\'); var qty =
qty_el.value; if( !isNaN( qty )) qty_el.value++;return false;" value="+" />

<input type="button" class="quantity_box_button quantity_box_button_down"
onclick="var qty_el = document.getElementById(\'quantity'.$prod_id.'\'); var qty
= qty_el.value; if( !isNaN( qty ) && qty > 0 ) qty_el.value--;return false;"
value="-" />

';

break;

}

echo $html;

?>

Generatore di Sitemaps online

Xml-sitemaps.com è un generatore di Sitemaps online, utilissimo per generare online la tua Google Sitemap.

Una sitemap è una pagina Web che elenca gerarchicamente tutte le pagine di un sito Web. Nata per facilitare la navigazione dell’utente all’interno del sito, ha poi avuto una notevole importanza nell’attività di scansione della Rete da parte dei crawler dei motori di ricerca. Così come la semplice sitemap anche la Sitemap XML è una lista di link. Introdotta da Google con il servizio Google Sitemaps, e poi utilizzata anche da Yahoo! e MSN, permette ai webmaster di menzionare all’interno di un file XML, e non solo, tutti gli URL delle pagine di un determinato sito Web che si desidera sottoporre al motore di ricerca. In questo modo anche i siti dinamici possono fornire URL corretti permettendo una indicizzazione più intelligente. Il protocollo è regolamentato dalla Attribution-ShareAlike Creative Commons License che ne ha reso possibile l’uso anche ad altri motori di ricerca.

venerdì 18 giugno 2010

Visualizzare l'Imponibile in Virtuemart

Vediamo come impostare Virtuemart, il notissimo sistema di commercio elettronico per il CMS Joomla, in modo da permettere la visualizzazione dell'imponibile e dell'iva separati.


Dopo parecchie ricerche ho scoperto che non è necessario modificare il codice per visualizzare Subtotale, poi Totale Iva, ed infine il Totale.

Sono necessari tre passi:

- Nella Configurazione globale ho selezionato Modalità d'imposta "in base all'indirizzo del commerciante"

- In Clienti (-default- shopper) ho deselezionato "Mostra Prezzi IVA inclusa"

- Nei Prodotti ho selezionato 2 come "Aliquota IVA" (la tassa che ho impostato per l'indirizzo del commerciante).

Adesso vengono visualizzati Subtotale, poi Totale Iva, ed infine il Totale!

venerdì 4 giugno 2010

Calcolare la Massima lunghezza di un campo con MySQL

Per calcolare la lunghezza massima di un campo con MySQL basta eseguire questa query
SELECT MAX(LENGTH(campo)) FROM tabella

giovedì 13 maggio 2010

Sostituire il provider Toplink Essentials con EclipseLink

Sul sito di Oracle leggiamo "As of Oracle TopLink 11g, TopLink Essentials has been replaced with EclipseLink JPA. EclipseLink JPA implements JPA 1.0 and is responsible for delivering the persistence framework."
http://www.oracle.com/technology/products/ias/toplink/jpa/index.html

Per sostituire il persistence provider Toplink Essentials con EclipseLink, basta seguire questa semplice procedura:
  1. Sostituire le librerie
  2. aggiornare il file persistence.xml effettuando le seguenti sostituzioni
<provider>oracle.toplink.essentials.PersistenceProvider</provider>

con

<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

e poi

<property name="toplink.jdbc.user" value=""/>
<property name="toplink.jdbc.password" value=""/>

<property name="toplink.jdbc.url" value=""/>

<property name="toplink.jdbc.driver" value=""/>


con

<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>

<property name="javax.persistence.jdbc.url" value=""/>

<property name="javax.persistence.jdbc.driver" value=""/>

mercoledì 5 maggio 2010

Jasper Report - formattare date MySQL

Per formattare con Jasper Report le date lette da un database MySQL bisogna utilizzare un trick... le date sono lette come timestamp, quindi è necessaria una conversione, possibile con il seguente codice:
(new SimpleDateFormat("dd/MM/yyyy")).format($F{Date_field})

giovedì 29 aprile 2010

Google Insights e Google Trends - due ottimi strumenti per statistiche sulle ricerche

Google Trends e Insights mostrano, per una determinata parola, il volume delle ricerche effettuate nel tempo in relazione al numero di ricerche totali.

Vediamo le caratteristiche del nuovo Google Insights
  • Si può selezionare l’intervallo di tempo desiderato
  • Si possono confrontare i risultati delle ricerche di diverse parole chiave
  • Termini di ricerca più cercati, correlati alle parole inserite
  • La ricerca per parola chiave può essere filtrata geograficamente
  • La ricerca per area geografica fornisce la possibilità di capire quali sono i termini più ricercati per una determinata regione o città in un certo periodo
  • Possibilità di selezionare una categoria merceologica, in modo da comprendere cosa è più cercato per quella categoria in relazione a un range di tempo e una località

Davvero due utilissimi strumenti di analisi per il web marketing!

venerdì 9 aprile 2010

Aggiornare la default JDK in Netbeans

Per aggiornare la JDK di default utilizzata da Netbeans bisogna editare il file netbeans.conf presente nella directory {netbeans install dir}/etc ed aggiornare il percorso di installazione della JDK presente nella riga dove si trova netbeans_jdkhome.

Se ad esempio la JDK utilizzata è la 1.6.0_19 ed il sistema operativo è WindowsXP, bisogna scrivere:
netbeans_jdkhome="C:\Program Files\Java\jdk1.6.0_19"

giovedì 25 marzo 2010

Netbeans "ArrayIndexOutOfBoundsException: 0 >= 0" in JTable binding

Vediamo come risolvere un problema che in Netbeans mi ha fatto impazzire abbastanza...

L'eccezione ArrayIndexOutOfBoundsException è lanciata perchè il ColumnModel del detailTable non è inizializzato immediatamente (quando viene eseguito il binding della tabella). Questo è un problema della libreria Beans Binding.

1. Seleziona la detailTable.
2. Seleziona la proprietà elements nella sezione Binding della finestra Properties.
3. Invoca il binding customizer (premendo il bottone '...').
4. Vai sul tab Advanced.
5. Premi il pulsante '...' vicino a Unreadable Source Value.
6. Seleziona 'Custom code' dalla combo-box in alto.
7. Digita java.util.Collections.emptyList() nel campo Property Code.
8. Premi OK per chiudere il property customizer per Unreadable Source Value.
9. Premi OK per chiudere il binding customizer.

Notare che il codice originale generato da NetBeans contiene già tutto questo. Lo hai rimosso rimuovendo il binding della tabella

mercoledì 24 marzo 2010

Come ottenere l'ID dell'ultimo record inserito con JDBC

Ecco il semplice codice Java necessario per ottenere l'ID dell'ultimo record inserito con JDBC:

stmt.executeUpdate(query,Statement.RETURN_GENERATED_KEYS);
keys = stmt.getGeneratedKeys();
if (keys.next())
{
id = keys.getString(1);
}

martedì 23 marzo 2010

Simbolo Euro (€) in HTML

Sviluppando siti web, in particolare di e-commerce, ho avuto l'esigenza di visualizzare il simbolo della valuta euro (€). Ci sono molti metodi per inserire il simbolo dell'euro in una pagina Web seguendo le specifiche dell'HTML 4. I tre metodi più compatibili sono:
  • Inserendo l'entità &euro;
  • Inserendo la numerazione decimale Unicode &#8364;
  • Inserendo la numerazione Unicode esadecimale &#x20AC;
Tutti e tre i metodi sono compatibili con i browser a partire dalla versione 4.

Java Database Desktop Application - interpret proxy exceptions

Sviluppando con Netbeans applicazioni Java Database Desktop capita di vedere eccezioni legate all'internet proxy. Questo problema è causato dallo Swing Application Framework.

Per risolverlo:
  1. aggiungere nella prima riga del metodo main() il codice ProxySelector.getDefault();
  2. aggiungere nel metodo startup() il codice System.setProperty("java.net.useSystemProxies", "false");

lunedì 22 marzo 2010

CKEditor - ottimo WYSIWYG editor

CKEditor è un ottimo WYSIWYG html editor open source.
L'ho utilizzato nelle mie applicazioni web, integrandolo con estrema facilità... proprio da provare!

sabato 20 marzo 2010

JPA e Netbeans - rendere indipendente l'applicazione dal database

Se usate Netbeans e create le annotazioni JPA leggendo da un database già esistente, e volete rendere il programma indipendente dal tipo e dal nome di database...

modificate questo codice:
@Table(name = "tablename", catalog = "dbname", schema = "")

in:
@Table(name = "tablename")

sabato 13 marzo 2010

Dimdim - un fantastico strumento per web conferencing. Provalo gratis!

Dimdim è un software open source web-based per effettuare gratuitamente meeting e collaborazioni in tempo reale.

Può essere utilizzato gratuitamente fino ad un massimo di 20 utenti contemporanei. Sono disponibili anche la versione Pro (supporta fino a 50 partecipanti) e la versione Webinar (fino a 1000 partecipanti).

Sfruttando le funzioni di affiliazione di Dimdim puoi anche guadagnare presentandolo ai tuoi amici. Davvero un bel progetto! Da provare...

Buona conferenza!

giovedì 11 marzo 2010

mtwMigrator - Migrazione da Joomla 1.0 a 1.5

mtwMigrator è un ottimo tool per migrare i contenuti di un sito Joomla 1.0 sul nuovo 1.5. Facilissimo da utilizzare ma fondamentale per effettuare una migrazione, magari nel caso in cui si volesse aggiornare il sistema senza perdere tempo e dati... Da provare

martedì 9 marzo 2010

Ottimo video tutorial su Joomla

Ecco un link a degli ottimi video tutorial sul notissimo Joomla CMS:

venerdì 26 febbraio 2010

Javascript per messaggio di conferma

Codice Javascript per visualizzare un popup con un messaggio di conferma del tipo OK/Annulla:
<script type="text/javascript">

var answer = confirm ("Scegli OK o Annulla...")
if (answer)
alert ("Hai scelto OK.")
else
alert ("Hai scelto Annulla.")

</script>
Buon utilizzo!

martedì 23 febbraio 2010

Focus in JTabbedPane

Il codice Java necessario per settare il focus su un tab di un JTabbedPane è semplicemente il seguente:
tabbedPane.setSelectedComponent(panel);
dove panel è un JPanel che identifica il tab su cui settare il focus.

venerdì 19 febbraio 2010

Javascript per Form Validation

Vediamo un esempio di codice Javascript per effettuare la validazione del contenuto di un form.

<html>
<head>
<script type="text/javascript">
function validate_required(field,alerttxt)
{
with (field)
{
if (value==null||value=="")
{
alert(alerttxt);return false;
}
else
{
return true;
}
}
}

function validate_form(thisform)
{
with (thisform)
{
if (validate_required(email,"Email must be filled out!")==false)
{email.focus();return false;}
}
}
</script>
</head>

<body>

<form action="submit.htm" onSubmit="return validate_form(this)" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>

</body>
</html>
Buon utilizzo!

giovedì 28 gennaio 2010

Refresh task asincrono in Netbeans Java Desktop Applications

Vediamo come creare un Task Asincrono per aggiornare una tabella di un'applicazione Java Desktop Database Application, senza avere problemi di binding, mediante Netbeans.

Utilizzare il codice seguente ed assegnare l'Action al pulsante "Refresh":

@Action
public Task refresh() {
return new RefreshTask(MyApp.getApplication());
}

private class RefreshTask extends Task {

RefreshTask(org.jdesktop.application.Application app) {
super(app);
}

@SuppressWarnings("unchecked")
@Override
protected Void doInBackground() {
setProgress(0, 0, 4);
setMessage("Rolling back the current changes...");
setProgress(1, 0, 4);
entityManager.getTransaction().rollback();
setProgress(2, 0, 4);

setMessage("Starting a new transaction...");
entityManager.getTransaction().begin();
setProgress(3, 0, 4);

setMessage("Fetching new data...");
java.util.Collection data = query.getResultList();
for (Object entity : data) {
entityManager.refresh(entity);
}
setProgress(4, 0, 4);

*masterTable.setVisible(false);

list.clear();
list.addAll(data);

return null;
}

@Override
protected void finished() {
setMessage("Done.");
setSaveNeeded(false);

masterTable.setVisible(true);
masterTable.revalidate();
masterTable.repaint();
}
}

mercoledì 27 gennaio 2010

EntityManager e Database Remoto

Sviluppando un'applicazione Java Swing con Netbeans 6.8 e Toplink per la persistenza, la quale si connetteva ad un database MySQL remoto, mi sono accorto che alla chiusura dell'applicazione non venivano chiuse le connessioni al database e che rimanevano attive (risultando come "Sleep", se monitoravo le connessioni attive con MySQL Administrator). Se invece facevo lavorare l'applicazione su un database locale, le connessioni al database venivano tutte chiuse.

Ho provato a modificare il codice Java, facendo eseguire entityManager.flush() e entityManager.close() alla chiusura dell'applicazione, ma le connessioni rimanevano sempre attive...

Ho scoperto che questo problema era dovuto ad un bug di MySQL, infatti non c'è alcun problema nelle versioni da MySQL 5.1.41-community in poi.

Nelle versioni precedenti di MySQL (5.1.39) ho risolto questo problema modificando il file di configurazione my.ini, aggiungendo questo:

wait_timeout = 15

venerdì 22 gennaio 2010

Avast Protezione Web

Avast Antivirus è un ottimo antivirus gratuito per uso personale. Vediamo come è possibile configurare la sua Protezione Web, che alcune volte potrebbe bloccare siti web attendibili:

  1. Localizzare l'icona della protezione residente di Avast nella traybar e fare doppio click
  2. Assicurarsi di visualizzare le opzioni avanzate cliccando eventualmente su Dettagli...>>
  3. Individuare nell'elenco dei Provider installati la voce Protezione Web, cliccare
    sull'icona, quindi cliccare sul pulsante Personalizza...
  4. Nella pagina delle opzioni selezionare il tab Di base e inserire nella casella Indirizzi
    ignorati
    i valori degli indirizzi separati da virgola
  5. Premere infine Ok per confermare

giovedì 21 gennaio 2010

URL-encoding in Javascript

Sviluppando applicazioni web può tornare utile la funzione escape() di Javascript per l'URL-encoding.
escape("It's me!") // result: It%27s%20me%21
Buon lavoro!

mercoledì 20 gennaio 2010

Disabilitare chiusura Applicazione con Netbeans

Per disabilitare la chiusura di un'Applicazione Java Desktop sviluppata con Netbeans bisogna aggiungere un ExitListener, creandolo all'interno del metodo startup() creato da Netbeans. Vediamo come:
@Override
protected void startup() {

//Exit Listener
addExitListener(new ExitListener() {

public boolean canExit(EventObject event) {
System.out.println("canExit event occur");
getApplication().getMainFrame().setVisible(false);
return false;
}

public void willExit(EventObject event) {
System.out.println("willExit event occur");
}
});

show(new MyApp(this));
}

lunedì 18 gennaio 2010

Lista server eMule 2010

Ecco la lista dei server sicuri aggiornata al 2010.

Se volete aggiungere i server tramite URL inserite i seguenti indirizzi nel campo Aggiorna server.met da URL:
  • http://gruk.org/server.met
  • http://peerates.net/servers.php
  • http://upd.emule-security.net/server.met

JPA query

Esempio di utilizzo di query JPA:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
"JPATutorialPU" );
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
try {
Query query = em.createQuery("SELECT i FROM Item i WHERE i.name LIKE :keyword");
query.setParameter("keyword","%"keyword"%");
Item item = (Item)query.getResultList();
String myitem = item.getItem();
} catch (Exception e) {
System.out.println( e.getMessage() );
em.getTransaction().rollback();
} finally {
em.close();
}

Java Properties - salvataggio alla chiusura finestra

Sviluppando applicazioni Java è spesso utile poter salvare su file le impostazioni di configurazione delle applicazioni sviluppate. Per farlo è possibile avvalersi della classe java.util.Properties, con la quale possiamo leggere e scrivere sui file .properties in modo molto semplice.

Nel seguente esempio vediamo come scrivere su un file .properties alla chiusura di una finestra. A tale scopo abbiamo aggiunto un WindowListener:
JFrame frame = main.getFrame();
frame.addWindowListener(new WindowAdapter() {

@Override
public void windowClosing(WindowEvent e) {

Properties properties = new Properties();
try {
properties.setProperty("nome_chiave", "valore");

properties.store(new FileOutputStream("config.properties"),null);
} catch (IOException ex) {
System.err.println(ex);
}

super.windowClosing(e);
}
});

venerdì 15 gennaio 2010

MySQL Workbench - ottimo tool per DB Modeling

MySQL Workbench è uno strumento visuale di database design e modeling per database MySQL; esso integra il disegno, la modellazione, la creazione e l'aggiornamento di database in un unico ambiente di lavoro. È l'evoluzione di DBDesigner 4, sviluppato da FabForce.

Inoltre dalla versione 5.2.6 di MySQL Workbench è stata introdotta la funzionalità di gestione delle istanze server.

Davvero un ottimo tool open source per il database modeling... da provare!

giovedì 14 gennaio 2010

Massimizzare JFrame con Netbeans

Lavorando con il GUI editor di Netbeans si nota l'estrema semplicità e potenza di questo strumento, tuttavia se si desidera avviare l'applicazione con il frame massimizzato bisogna customizzare il codice, nel seguente modo:
FrameView main = new FrameView(this);
final JFrame frame = main.getFrame();
frame.addWindowListener(new WindowAdapter() {

@Override
public void windowOpened(WindowEvent e) {
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(800, 600));
show(main);
Buon lavoro!

martedì 12 gennaio 2010

UML in Netbeans

Attraverso un plugin open source è possibile avere il supporto all'UML in Netbeans. Vediamo come fare per installarlo:
  1. Installare NetBeans IDE 6.8
  2. Aprire il Menu Tools \ Plugins
  3. Aprere il tab Settings
  4. Cliccare Add
  5. Digitare il nome del provider (UML)
  6. In URL copiare ed incollare il seguente indirizzo: http://ea.ddns.com.br:8090/netbeans6.8/UML/catalog.xml
  7. Cliccare OK
  8. Assicurarsi che il plugin UML sia disponibile nella lista Available Plugins
  9. Adesso selezionare il plugin ed installarlo
  10. Il plugin deve essere attivato per poter essere utilizzato
  11. Per attivare il plugin andare nel Menu Tools \ Plugins \ Installed
  12. Attivare User Installed Plugins

sabato 2 gennaio 2010

VMWare Server batch backup script

Ecco uno script batch per effettuare il backup di macchine virtuali VMware Server su Host Windows. La procedura si occupa di eseguire lo spegnimento di una macchina virtuale, copiarla e riavviarla; tutti i passaggi vengono memorizzati all’interno di un file di log. Ammesso che la macchina virtuale possa sopportare un temporaneo downtime, il metodo più sicuro per eseguirne con successo il backup è quello di spegnerla completamente per poi copiarne il disco virtuale (vmdk). Infatti, nel momento in cui le VM sono in esecuzione, VMware memorizza moltissime informazioni all’interno di una memoria virtuale che verrà completamente trasferita sul disco soltanto in fase di spegnimento.

N.B.: la macchina virtuale della quale effettuerete il backup deve eseguire il software VMware Tools.
@echo off
rem --- Variables ---------------------------------
set VMWAREINSTALLPATH=C:\Programmi\VMware\VMware Server
set VMPATH=D:\VirtualMachines\Windows XP Professional
set VMVMX=Windows XP Professional.vmx
set BACKUPDESTINATION=c:\Virtual Machines
set LOGFILE=c:\Virtual Machines\log.txt
rem ---------------------------------------------------

setlocal
set PATH=%PATH%;%VMWAREINSTALLPATH%
set VAR="%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" getstate

echo Starting Backup Procedure on %date% at %time%... > "%LOGFILE%"

:checkvmstatus
echo Checking %VMVMX% VM status... >> "%LOGFILE%"
FOR /F "tokens=3 delims= " %%R IN ('"%VAR%"') DO SET RESULT=%%R
echo %VMVMX% VM status is "%RESULT%"... >> "%LOGFILE%"
if "%RESULT%" EQU "on" goto poweroffvm
if "%RESULT%" EQU "off" goto copyandrestartvm
goto quit

:poweroffvm
echo Stopping %VMVMX% VM... >> "%LOGFILE%"
"%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" stop >> "%LOGFILE%"
rem echo Waiting 60 seconds... >> "%LOGFILE%"
rem sleep -m 60000
goto checkvmstatus

:copyandrestartvm
echo Starting %VMVMX% VM Backup... >> "%LOGFILE%"
xcopy "%VMPATH%"\*.* "%BACKUPDESTINATION%"\*.* /E /C /I /F /H /Y >> "%LOGFILE%"
echo %VMVMX% VM Backup finished... restarting %VMVMX% VM... >> "%LOGFILE%"
"%VMWAREINSTALLPATH%\perl.exe" "%VMWAREINSTALLPATH%\vmware-cmd" "%VMPATH%\%VMVMX%" start >> "%LOGFILE%"
FOR /F "tokens=3 delims= " %%R IN ('"%VAR%"') DO SET RESULT=%%R
echo %VMVMX% VM status is now "%RESULT%"... >> "%LOGFILE%"
goto quit

:quit
echo Quitting Backup Procedure on %date% at %time% ... >> "%LOGFILE%"
exit
Le variabili da impostare sono:

  • set VMWAREINSTALLPATH=C:\Programmi\VMware\VMware Server – la cartella di installazione di VMware Server
  • set VMPATH=D:\VirtualMachines\Windows XP Professional – la cartella in cui si trovano i files della macchina virtuale da copiare
  • set VMVMX=Windows XP Professional.vmx – il nome del file di configurazione (vmx) della macchina virtuale
  • set BACKUPDESTINATION=c:\Virtual Machines – la cartella in cui verranno copiati i dati ovvero la destinazione del backup, può essere anche un percorso di rete UNC
  • set LOGFILE=c:\Virtual Machines\log.txt – il file di log in cui verrà memorizzato lo stato della procedura di backup, può essere anche un percorso di rete UNC

Buon lavoro!

KNIME - Konstanz Information Miner

KNIME è un'ottima piattaforma open source per l'integrazione, il pre-processamento, l'analisi e l'esplorazione dei dati.

Ho utilizzato con successo quest'ottimo tool per alcuni task di data mining. Mi ha molto colpito per la sua semplicità d'utilizzo e la sua capacità di lavorare anche con grandi moli di dati. Davvero da provare...
468x60

Cerca su Google

Cerca nel Blog con Google