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 outputthrows 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 outputthrows 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();
}
}