<body>

Sitios web relacionados: PingBlog | Fotos

sábado, septiembre 22, 2007

Echando código: ¿Como saber de que tipo es un archivo, desde JAVA?

Nock Nock Neo
Con JNI nos podemos ir a bajo nivel con el sistema operativo. Una rubia en la foto :)


En un articulo anterior les habia comentado como trabajar con JNI y Java. En esta ocasión escogí un problema un poco más complicado, ya que el anterior parecía más un "Hola Mundo" que otra cosa (si, pasos de bebé).

Así que como la necesidad es la madre de todas las invenciones, me decidí a probar un ejemplo que tenia ganas de poner en práctica desde hace tiempo. En este caso se trata de como obtener el tipo de un archivo utilizando la herramienta file en UNIX, pero primero veamos si Java puede hacer lo mismo.

En Java podemos utilizar Swing para obtener el tipo del archivo. Leí que clase JFileChooser de Swing te da información similar, pero es basado en la extensión del archivo:

   1:import javax.swing.JFileChooser;
2:import java.io.File;
3:
4:public class FileType {
5: public static void main(String [] args) throws Exception {
6: JFileChooser view = new JFileChooser();
7: String descr = view.getTypeDescription(new File(args[0]));
8: System.out.println("File type is: " + descr);
9: }
10:}
Corriendo el programita:
[josevnz@localhost ~]$ javac FileType.java -d .
[josevnz@localhost ~]$ java FileType DS156_Complete.pdf
File type is: Generic File
[josevnz@localhost ~]$

Poco satisfactorio, por no decir otra cosa. Sin embargo todo el mundo sabe como obtener el tipo de un archivo desde unix, utilizando 'file':
[josevnz@localhost ~]$ file DS156_Complete.pdf
DS156_Complete.pdf: PDF document, version 1.3
[josevnz@localhost ~]$
File es una de mis herramientas favoritas. File consulta una base de datos en la cual están registrados los formatos y utilizando reglas heuristicas determina el verdadero tipo del archivo. Ahora, supongamos que quiero tener la misma funcionalidad desde uno de mis programas en Java, ¿como hacer?

Lo primero es averiguar como los verdaderos expertos lo hacen. Hay que utilizar JNI ya que quiero tomar ventaja de que el código de file va a utilizar la base de datos que viene con cada sistema operativo UNIX y no me importa sacrificar portabilidad.

Así que después buscar cuidadosamente en Google, finalmente encontré la página oficial del comando 'file'.

Sin embargo ya alguién se topó con el problema y decidió hacer una interfaz en Java la cual hace todo el trabajo: Java shared mime info.

Así que esas son las opciones. Les dejo la de Java, aunque otros lenguajes ya tienen sus respectivas implementaciones.

Blogalaxia.com:file, java, linux, open source, venezuela, libmagic, jmimeinfo
Technorati.com:file, java, linux, open source, venezuela, libmagic, jmimeinfo

Etiquetas: , , , , , ,

lunes, septiembre 17, 2007

Manejo de claves privadas: ¿Porqué tantas?

Levanten la mano quienes no tienen al menos 20 cuentas creadas en diferentes sitios de Internet (bancos, correo electrónico, buscadores, ocio, y pare usted de contar).

Yo realmente estoy frustrado por ese problema. Una de las soluciones básicas para mi fue utilizar Firefox, el cual recuerda mis claves y las protege con un robusto sistema de seguridad (mejor que el de Microsoft Explorer, ¡Sorpresa! :)).

Sin embargo tiene un problema, y es que no es fácil guardar esas claves para recuperarlas después; Yo aprendí esa dolorosa lección después de formatear mi Laptop, sólo para descubrir después que habia olvidado guardar esos directorios.

He estado buscando en Internet una solución que corra en varias plataformas (MacOSX, Linux, Windows) y mi problema es que pareciera que no existe una solución con una comunidad solida que lo soporte (hablo tanto de productos cerrados como Open Source). Por ahora he visto:
¿Alguno de ustedes tiene una recomendación al respecto? Por ahora me estoy bandeando con:

gpg --encrypt --symmetric myarchivo
Actualización: Al final de cuentas me voy a quedar con gpg. Sin embargo, voy a hacer mis respaldos con un pequeño script en Perl:

 1 #!/usr/bin/perl
2
3
use strict;
4 use carp;
5
6 my $backupDir = "$ENV{HOME}/Desktop";
7 my $backupFile = "$backupDir/backup_firefox_profile.tar.bz2";
8
9 if ( ! -d $backupDir ) {
10 mkdir $backupDir;
11 }
12
13 # All paths must be relative to $HOME
14
my %osBasePaths = (
15 linux => ".mozilla/firefox",
16 darwin => 'Library/Application Support/Firefox/Profiles'
17 );
18
19 my $dir = $osBasePaths{$^O};
20 if ($dir eq "") {
21 die "[ERROR]: Path not supported for this OS, $^O";
22 }
23 createTar($backupFile, $dir);
24
25 sub createTar {
26 my $tarFile = $_[0];
27 my $tarDir = $_[1];
28 open(TAR, "tar -cjf '$tarFile' -C $ENV{HOME} '$tarDir' |") || die "";
29 while() {
30 printf "%s", $_;
31 }
32 close(TAR);
33 }
34
35 __END__
36 =head1 NAME
37
38 backup_mozilla - Backup Mozilla contents
39
40 =head1 DESCRIPTION
41
42 Just run it and the script will create a compressed tar file.
Edit the script to change the default paths.
43
44 =head1 AUTHOR
45
46 josevnz@kodegeek.com
47
48 =cut



Blogalaxia.com:password managment, manejo de claves privadas, gpg
Technorati.com:password managment, manejo de claves privadas, gpg

Etiquetas: , ,

lunes, septiembre 03, 2007

Sitio de Fedora 7 en Venezuela



Bajate Fedora Linux


De nuevo y gracias a esos buscadores que tengo corriendo todo el tiempo, me conseguí con un grupo de usuarios de Fedora 7 en Venezuela.

El sitio luce interesante, falta ver que tanto les dura la mecha (como otros miles de sitios que comienzan hablando de Open Source en Venezuela y después se vuelven paja).

Les deseamos exito por acá, interesante iniciativa.

Blogalaxia.com:linux, fedora core, redhat, venezuela, open source
Technorati.com:linux, fedora core, redhat, venezuela, open source

Etiquetas: , , , ,