venerdì 11 giugno 2010

Apache Derby: configurare Eclipse per iniziare un progetto

In questo post verrà spiegato come configurare Eclipse per poter eseguire il codice d'esempio:

  1. Creare un nuovo "Java project"

  2. Creare una directory "lib" (immagine) ed una directory "data" nel progetto


  3. Scaricare l'ultima versione della libreria (db-derby-10.6.1.0-lib.tar.gz) da qua http://db.apache.org/derby/derby_downloads.html#Latest+Official+Release

  4. Estrarre il file derby.jar nella directory lib create in precedenza


  5. Da Eclipse fare un refresh sulla directory lib ed aggiungere il file derby.jar al build path (tasto destro su derby.jar -> Build Path -> Add to Build Path)



Post correlati:
Apache Derby: il DBMS portabile (Introduzione)
Codice d'esempio
Query SQL: tutorial passo-passo

Apache Derby: il DBMS portabile (Introduzione)

Apache Derby (http://db.apache.org/derby) è un RDBMS (sistema di gestione di database relazionale) scritto completamente in Java e rilasciato sotto "Apache License, Version 2.0", quindi open source e completamente gratuito.
L'attuale versione (10.6.1.0) supporta quasi tutte le caratteristiche "obbligatorie" richeste da SQL-99/SQL-2003 ed alcune di quelle opzionali (http://wiki.apache.org/db-derby/SQLvsDerbyFeatures).

Rispetto al più blasonato MySQL, al più performante PostgreSQL ed ai più costosi Oracle e SQLServer, Derby ha una caratteristica veramente interessante per lo sviluppo di programmi monoutente: è portabile, cioè non è necessario installare un "server" perché Derby può leggere e scrivere direttamente dal filesystem. In questo modo è possibile sviluppare software da mettere, ad esempio, in una chiavetta e utilizzarlo su qualunque pc in cui sia installata una jre. Il prezzo da pagare per questa comodità è la "mono-connessione": non è possibile infatti utilizzare più connessioni contemporanee sullo stesso database. Nel caso sia necessario avere più connessioni è possibile installare Derby Network Server rinunciando però alla portabilità (o quantomeno ad una portabilità semplice); personalmente però, in un ambiente client/server, preferisco PostgreSQL perché più completo e performante.

I prossimi post spiegheranno passo-passo come utilizzare Derby con Eclipse.
Apache Derby: configurare Eclipse per iniziare un progetto
Codice d'esempio
Query SQL: tutorial passo-passo

domenica 23 maggio 2010

Ubuntu & HP dv6: le cuffie non disabilitano le casse

L'installazione di Ubuntu Lucid su un HP dv6 2000sl è stata quasi perfetta, ha riconosciuto tutto l'hardware:
  • scheda video
  • scheda audio *
  • webcam
  • schede di rete (ethernet e wiress)
  • tasti hp per il volume, la scheda wireless
L'unico malfunzionamento si è verificato con le cuffie: quando inserisco le cuffie non si spengono le casse e sento l'audio sia in cuffia che nelle casse.

Tra le centinaia di soluzione presenti nei vari forum, la più semplice che ha funzionato è stata una piccola variante di quella proposta per l'hp dv6 1100.EO in questo thread:
  • con i privilegi di amministratore modificare il file /etc/modprobe.d/alsa-base (ad esempio da terminale: sudo gedit /etc/modprobe.d/alsa-base)
  • Alla fine del file aggiungere le seguenti righe:
    alias snd-card-0 snd-hda-intel
    alias sound-slot-0 snd-hda-intel
    options snd-hda-intel model=hp-dv5
    options snd-hda-intel enable_msi=1
  • Salvare e riavviare il computer (probabilemente basta riavviare qualche servizio...)
Ora quando inserisco le cuffie, le casse si disattivano e viceversa.

martedì 11 maggio 2010

Java 2 html: syntax highlighting

Con Java2Html è possibile creare dei file html a partire da sorgenti Java, con lo stesso "syntax highlighting" di Eclipse o del framework Kawa. L'utilizzo è veramente semplice:
  1. Scaricare il file zip dalla sezione download
  2. Estrarre lo zip
  3. Da shell (o dal prompt dei comandi per i winari) entrare nella directory appena estratta e digitare java -jar java2html.jar
  4. Si aprirà una finestra dalla quale sarà possibile selezionare un file o incollare direttamente del codice
  5. Nel riquadro sottostante comparirà l'html già formattato e pronto per l'uso (tuttavia per incollarlo su questo blog ho dovuto rimuovere tutti i < br / > al termine di ogni riga altrimenti veniva visualizzata una riga vuota ogni riga di codice, ma è un problema di blogspot non di java2html)
  6. Più codice libero e ben documentato verrà pubblicato, più il mondo sarà più ricco!

mercoledì 5 maggio 2010

Decompressione di uno zip in Java

Algoritmo per la decompressione di uno zip in Java

/**
 * Decomprime uno ZipInputStream in una directory destinazione
 * @param input ZipInputStream da estrarre
 * @param output directory destinazione
 * @throws IOException
 */
public static void decompress(ZipInputStream input, File output) throws IOException
{
  ZipEntry zipEntry;
  while((zipEntry = input.getNextEntry()) != null)
  {
    boolean directory = zipEntry.isDirectory();
    if(directory)
    {
      File dir = new File(output, zipEntry.getName());
      if(!dir.exists())
        dir.mkdir();
      else if(dir.isDirectory())
        throw new IOException("Output directory \"" + dir.getAbsolutePath() + "\" is a file");
    }else
    {
      File decompressFile = new File(output, zipEntry.getName());
      if(decompressFile.exists())
        throw new IOException("Output file \"" + decompressFile.getAbsolutePath() + "\" already exists");
      FileOutputStream fos = new FileOutputStream(decompressFile);
      try{
        byte[] readBuffer = new byte[4096];
        int bytesIn = 0;
        while ((bytesIn = input.read(readBuffer)) != -1) {
          fos.write(readBuffer, 0, bytesIn);
        }
      }
      finally{
        fos.close();
      }
    }
  }
}

Invocazione tipica del metodo,
input: file da estrarre, output: directory destinazione


/**
 * Decomprime un file zip in una directory
 * @param input file zip da estrarre
 * @param output directory destinazione
 * @throws IOException
 */
public static void decompress(File input, File output) throws IOException
{
  ZipInputStream zis = new ZipInputStream(new FileInputStream(input));
  try{
    decompress(zis, output);
  }finally
  {
    zis.close();
  }
}

sabato 1 maggio 2010

Zip di una directory in java

Metodo ricorsivo per creare uno zip di una directory o di un file in Java

/**
* Aggiunge un File (file o directory) ad uno ZipOutputStream
* a partire da un certo path interno allo ZipOutputStream
* @param f File da aggiungere all'archivio
* @param path Path interno all'archivio in cui mettere il file
* @param zos ZipOutputStream che rappresenta l'archivio
* @throws IOException
*/
public static void compress(File f, String path, ZipOutputStream zos) throws IOException
{
boolean isDirectory = f.isDirectory();
//le directory terminano con "/", altrmineti sono file
final String nextPath = path + f.getName() + (isDirectory ? "/" : "");
ZipEntry zipEntry = new ZipEntry(nextPath);
zos.putNextEntry(zipEntry);
if(isDirectory)
{
File[] child = f.listFiles();
//ricorsione per ogni figlio
for(int i = 0; i < child.length; i++)
{
compress(child[i], nextPath, zos);
}
}else if(f.isFile())
{
FileInputStream fis = new FileInputStream(f);
byte[] readBuffer = new byte[4096];
int bytesIn = 0;
// inserisce il file nell'ultima zipEntry aggiunta allo ZipOutputStream
while ((bytesIn = fis.read(readBuffer)) != -1) {
zos.write(readBuffer, 0, bytesIn);
}
fis.close();
}
}

Invocazione del metodo:


/**
* Crea un archivio con il File (file o directory) specificato come
* paramentro, il path di partenza è vuoto
* @param input
* @param output
* @throws IOException
*/
public static void compress(File input, File output) throws IOException
{
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(output));
try{
compress(input,"", zos);
}finally
{
zos.close();
}
}