martes, 15 de diciembre de 2009

Ejecutar comandos Linux y MS-Dos desde Java













Poder controlar nuestro sistema desde el código de programación puede resultar muy útil en muchos casos. Así como el hecho de conseguir información, por ejemplo, de la configuración de nuestra red para usarlo en nuestras aplicaciones. Ése es el caso que nos ocupa ahora: queremos obtener nuestra dirección IP y configuración de red desde Java. Además, aprovechando la portabilidad de este lenguaje, haremos que la aplicación funcione tanto en Linux, como en Windows.

 

El código


import java.io.*;

public class EjecutarComando {

        public static void main(String args[]) {

                String s = null;

                try {

                        // Determinar en qué SO estamos
                        String so = System.getProperty("os.name");

                        String comando;

                        // Comando para Linux
                        if (so.equals("Linux"))
                                comando = "ifconfig";

                        // Comando para Windows
                        else
                                comando = "cmd /c ipconfig";

                        // Ejcutamos el comando
                        Process p = Runtime.getRuntime().exec(comando);

                        BufferedReader stdInput = new BufferedReader(new InputStreamReader(
                                        p.getInputStream()));

                        BufferedReader stdError = new BufferedReader(new InputStreamReader(
                                        p.getErrorStream()));

                        // Leemos la salida del comando
                        System.out.println("Ésta es la salida standard del comando:\n");
                        while ((s = stdInput.readLine()) != null) {
                                System.out.println(s);
                        }

                        // Leemos los errores si los hubiera
                        System.out
                                        .println("Ésta es la salida standard de error del comando (si la hay):\n");
                        while ((s = stdError.readLine()) != null) {
                                System.out.println(s);
                        }

                        System.exit(0);
                } catch (IOException e) {
                        System.out.println("Excepción: ");
                        e.printStackTrace();
                        System.exit(-1);
                }
        }
}




sábado, 7 de noviembre de 2009

Liberar espacio en Ubuntu

95705_hdd.jpg


Se va a explicar cómo ganar espacio en disco duro cuando usamos Ubuntu. Veremos como con dos sencillos pasos tendremos más desahogado nuestro disco duro. Yo los seguí y liberé 300 Mb, aunque puede variar mucho según los casos. Sin más dilación, aquí se exponen:




1. Limpiar la caché de descarga.


Para ello limpiaremos el directorio /var/cache/apt/archives. Todos los programas y actualizaciones que hemos descargado con apt-get están ahí. Lo haremos mediante:




sudo aptitude clean




2. Disminuir el espacio reservado al usuario root.


En ext3, el usuario root tiene permanentemente reservado espacio en disco duro. Ésto evita que algún proceso malicioso pudiera comer todo el espacio libre.


Para saber cómo se llama la partición:




sudo fdisk -l




Para saber cuantos bloques de memoria hay reservados:




sudo tune2fs -l <partition>




Ejemplo:




sudo tune2fs -l /dev/sda5


Para saber el tamaño de bloque:




tune2fs -l <partition> | grep Block


Ejemplo:




tune2fs -l /dev/sda5 | grep Block


En mi caso la salida fue:




Block size: 4096


Así que ya solo nos falta asignar el nuevo número de bloques mediante:




sudo tune2fs -r 0 <partition>


Elegí reservar 100Mb, así que escribí esto:




sudo tune2fs -r 26000 /dev/sda5


¿Por qué 26000?


Queremos reservar 100Mb, que son 104857600 bytes. Así que:


(1 bloque / 4096 bytes) x 104857600 bytes = 25600 bloques ≈ 26000 bloques




domingo, 25 de octubre de 2009

Enviar un correo usando Gmail desde Java



correo2.jpg


Preparando el entorno.


Para ello deberemos descargar la librería JavaMail desde http://java.sun.com/products/javamail/. Luego la incluiremos en nuestro proyecto. Si usamos Eclipse, lo haremos así: botón derecho sobre el proyecto, Properties, Java Build Path, Add Externals JARs.




El código


Aquí se muestra el código. Simplemente tendremos que cambiar las propiedades miCorreo y miContraseña por la dirección y contraseña de nuestra cuenta Gmail. En el método main, pondremos la dirección a la que lo queremos mandar, el asunto y el cuerpo respectivamente.




import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class EnviadorMail {
final String miCorreo = "micorreo@gmail.com";
final String miContraseña = "*****";
final String servidorSMTP = "smtp.gmail.com";
final String puertoEnvio = "465";
String mailReceptor = null;
String asunto = null;
String cuerpo = null;

public EnviadorMail(String mailReceptor, String asunto,
String cuerpo) {
this.mailReceptor = mailReceptor;
this.asunto = asunto;
this.cuerpo = cuerpo;

Properties props = new Properties();
props.put("mail.smtp.user", miCorreo);
props.put("mail.smtp.host", servidorSMTP);
props.put("mail.smtp.port", puertoEnvio);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", puertoEnvio);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");

SecurityManager security = System.getSecurityManager();

try {
Authenticator auth = new autentificadorSMTP();
Session session = Session.getInstance(props, auth);
// session.setDebug(true);

MimeMessage msg = new MimeMessage(session);
msg.setText(cuerpo);
msg.setSubject(asunto);
msg.setFrom(new InternetAddress(miCorreo));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
mailReceptor));
Transport.send(msg);
} catch (Exception mex) {
mex.printStackTrace();
}

}

private class autentificadorSMTP extends javax.mail.Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(miCorreo, miContraseña);
}
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EnviadorMail EnviadorMail = new EnviadorMail("dire@dire",
"Este es el asunto de mi correo", "Este es el cuerpo de mi correo");
}

}




Fuentes:


http://puretechie.blogspot.com/2008/09/sending-email-using-gmail-using-java.html




jueves, 1 de octubre de 2009

Convertir un vídeo flv para verlo en Nokia 5800 (Linux)




Si eres de los que se bajan vídeos de youtube (flv) y quieres verlos en un Nokia 5800, este post te ayudará. Veremos que se puede hacer de una forma sencillísima. Luego crearemos un script para que el proceso sea más cómodo.




Convirtiendo el vídeo


Lo que queremos hacer es convertir un video flash en mpeg4, con una resolución de 640x360. Para ello debemos instalar ffmpeg:



sudo aptitude install ffmpeg



Ahora ya podemos hacer la llamada que realizará la conversión:



ffmpeg -pass 1 -passlogfile movieLog.txt -i miVideo.flv -b 750000 -vcodec mpeg4 -s 640x360 -acodec libfaac -ac 2 -ab 96000 miVideo.mp4


Obviamente debemos cambiar miVideo por el nombre de nuestro vídeo.




Crear el script


Para ahorrarnos tener que escribir ese comando tan largo cada vez, podemos hacer un script y pasarle como argumentos el nombre del vídeo de entrada y el nombre del vídeo de salida. Para ello creamos un archivo que se llame convertidor.sh, que contenga lo siguiente:



ffmpeg -pass 1 -passlogfile movieLog.txt -i "$1" -b 750000 -vcodec mpeg4 -s 640x360 -acodec libfaac -ac 2 -ab 96000

"$2"


Para ejecutarlo escribiremos en consola algo así:



sh convertidor.sh video.flv video.mp4


Ahora bien, si el nombre del vídeo tiene varias palabras, deberemos meterlo entre comillas simples. De esta forma tomará como argumento el nombre entero y no sólo la primera palabra. Ejemplo:



sh convertidor.sh 'Video de mi casa.flv' 'Video de mi casa.mp4'


Tras un periodo de tiempo no muy largo, tendremos un archivo mp4 que será perfectamente reproducible en nuestro móvil.




miércoles, 23 de septiembre de 2009

Calcular la diferencia en días entre dos fechas en Java





Queremos saber los días que han pasado entre dos fechas. Ejemplo: 10-09-2009 y 3-9-2009, su diferencia serían 7 días. Para ello, lo calcularíamos con el siguiente código:


java.util.Date fechaAnterior, fechaPosterior;
diferencia= ( fechaAnterior.getTime() - fechaPosterior.getTime() )/ MILLSECS_PER_DAY;



Ejemplo


Vamos a calcular los días que han pasado desde una fecha dada hasta el día de hoy.


final long MILLSECS_PER_DAY = 24 * 60 * 60 * 1000; //Milisegundos al día 
java.util.Date hoy = new Date(); //Fecha de hoy 
     
int año = 2009; int mes = 10; int dia = 22; //Fecha anterior 
Calendar calendar = new GregorianCalendar(año, mes-1, dia); 
java.sql.Date fecha = new java.sql.Date(calendar.getTimeInMillis());

long diferencia = ( hoy.getTime() - fecha.getTime() )/MILLSECS_PER_DAY; 
System.out.println(diferencia); 

Nota: Fijémosnos que al inicializar el Calendar hemos restado uno al mes. Ésto se debe a que este parámetro empieza en cero, correspondiendo el cero a Enero, el uno a Febrero, ...

Actualización: Ante los diversos comentarios al respecto, he creado un post en el que se explica cómo calcular la diferencia en días utilizando la librería Joda Time, podéis encontrarlo aquí: http://felinfo.blogspot.com.es/2015/10/calcular-la-diferencia-en-dias-entre.html




martes, 15 de septiembre de 2009

Acelerar Firefox en Linux: Swiftfox

swiftfox.jpg




El mejor navegador web bajo Linux


Después de una larga búsqueda, he encontrado un navegador rápido y funcional bajo Linux. Se trata de Swiftfox. Es una versión de Firefox optimizada para distintos procesadores. La agilidad para navegar es muy superior a la del navegador de Mozilla, contando con todas características y funciones de éste.




Instalando Swiftfox


1.Descargamos el paquete correspondiente de http://getswiftfox.com/installer.htm, y lo guardamos en nuestro directorio personal


2.Abrimos un terminal


3.Ejecutamos el instalador tecleando lo siguiente:




sh install-swiftfox.sh


4.Iniciamos Swiftfox seleccionádolo desde el menú.




Instalar el plugin Flash


1.Abrir un terminal


2.Ejecutar lo siguiente (si no existe dicho directorio):




mkdir ~/.mozilla/plugins


3.Descargar Flash (.tar.gz) desde http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash


4.Descomprimir y mover libflashplayer.so en el directorio ~/.mozilla/plugins


5.Reiniciar Swiftfox.




domingo, 13 de septiembre de 2009

¿La instalación de mi Ubuntu es de 32 o 64 bits?

ubuntu-1.jpg


Puede que nos estemos haciendo esta pregunta. El número de bits indica la longitud de las instrucciones del procesador, por tanto si es de 32, deberemos instalar la versión de Ubuntu de 32 bits, y su correspondiente para el caso de 64.


Si queremos saber cual es el que tenemos instalado, nada más fácil que irnos a consola y escribir:




uname -a


Y el resultado puede ser parecido a esto:




Linux miEquipo 2.6.28-14-generic #48-Ubuntu SMP Wed Jul 29 22:16:50 UTC 2009 i686 GNU/Linux


Vemos que la colección de instruciones es la i686, por tanto es de 32 bits. En general tendríamos lo siguiente:


i686 → 32 bits


x86_64 → 64 bits




miércoles, 9 de septiembre de 2009

Crontab: ejecución de tareas automáticas en segundo plano

linux[1].jpg


¿Crontab?


Crontab es un programa que manipula el demonio (daemon) CRON, haciendo fácil a los usuarios la programación de tareas y la ejecución de comandos en periodos predeterminados de tiempo. Crontad puede ser considerado como un archivo el cual contiene comandos que se ejecutarán por el sistema como si el usuario fuera el dueño del archivo crontab.




Comandos


crontab -l Lista las tareas actuales de cron


crontab -e Edita el archivo crontab actual y añade/borra/edita las tareas crontab


crontab -r Borra el archivo crontab


crontab -v Muestra la última vez que fue editado el archivo crontab




El archivo crontab - componentes de crontab


Cada trabajo cron tiene 6 secciones. Cada sección está separada por un espacio. Las secciones 1-5 indican con qué frecuencia se quiere ejecutar la tarea (que es la sección 6). Nota: Si el sistema está apagado, crontab no se va a ejecutar. Cuando el sistema se arranque, crontab volverá a funcionar, pero sin realizar las tareas que no se realizaron mientras estaba apagado.


Aquí están mejor explicadas las posiciones 1-5:


1 Minuto 0-59


2 Hora 0-23 (0 = Medianoche)


3 Día 1-31


4 Mes 1-12


5 Semana 0-6 (0 = Domingo)


Un asterisco (*) significa en cada instancia (ejemplo: cada hora, cada semana, etc.) del particular periodo en el que va a ser usado.


La sexta posición indica la tarea que se va a ejecutar en el tiempo dado. Por ejemplo, si quieres borrar todos los archivos del directorio "temp" cada mañana a las 4:45, el comando sería así:




45 4 * * * rm /home/{username}/temp/*




Ejemplo práctico


Queremos imprimir en un archivo de texto la fecha actual cada minuto. Nos vamos a un terminal y tecleamos:




crontab -e


y añadirmos al final la línea:




* * * * * date >>archivo.txt


Y guardamos (si usamos el editor nano, lo haremos mediante Control+O). Ahora el archivo archivo.txt contentrá algo parecido a esto:




Tue Sep 8 17:12:01 CEST 2009
Tue Sep 8 17:13:01 CEST 2009
Tue Sep 8 17:14:01 CEST 2009
Tue Sep 8 17:15:01 CEST 2009
...




Fuentes


http://www.linuxweblog.com/crotab-tutorial


http://all4wp.blogspot.com/2008/03/cron-for-dummies.html




jueves, 3 de septiembre de 2009

Diferencia entre un archivo WAR y un EAR

icono java




WAR


Es un archivo JAR (con la extensión WAR) usado para distribuir una colección de archivos JSP, servlets, clases Java, archivos XML y contenido web estático (HTML). En conjunto constituyen una aplicación Web.




EAR


Es un formato para empaquetar en un sólo archivo varios módulos. Permite desplegar varios de esos módulos en una servidor de aplicaciones. Contiene archivos XML llamados descriptores de depliegue que describen cómo realizar dicha operación.




Conclusión


Un archivo EAR contiene un archivo WAR y un directorio llamado META-INF en el cual se encuentran los descriptores de despliegue.


EAR = WAR + META-INF




viernes, 14 de agosto de 2009

Generar una contraseña en Linux



Generar un password desde la terminal


A veces necesitamos crear contraseñas seguras, es decir, alfanuméricas, que no sean una palabra común, etc. En linux, se puede hacer fácilmente sin software adicional. Veamos algunos ejemplos:




Contraseña alfanumérica de longitud 8 (mayúsculas y minúsculas):




tr -dc '0-9a-zA-Z' </dev/urandom |head -c 8;echo




Contraseña alfanumérica de longitud 6 (sólo minúsculas):




tr -dc '0-9a-z' </dev/urandom |head -c 6;echo


El "echo" sirve para introducir un salto de línea y que el promt de la terminal no aparezca en la misma línea.


contraseñas2.png




Fuentes:


http://altctrlbackspace.blogspot.com/2009/03/how-to-generate-password-on-linux.html




martes, 11 de agosto de 2009

Usar wget para descargar páginas web

CocoaWget_i.png


El comando wget muy útil para descargar sitios web recursivamente. Con el propósito de archivarlos, normalmente lo que se hace es algo así:




wget -rkp -l3 -np -nH --cut-dirs=1 http://web.psung.name/emacstips/




Explicación


Ésto empezará en la URL especificada y descargará páginas recursivamente hasta 3 niveles de enlaces desde la página original, pero sólo páginas que están en el directorio de la URL que especificaste (emacstips/) o uno de sus subdirectorios.


Wget va a reescribir los enlaces en las páginas que descargó para hacer que la copia descargada sea una copia local usable, y descargará todos los prerequisitos de la página (ej: imágenes, estilos, etc ...).


Las dos últimas opciones -nH --cut-dirs=1 controlan donde colocar la salida. Si esas opciones son omitidas, wget podría, por ejemplo, descargar http://web.psung.name/emacstips/index.html y colocarlo bajo un subdirectorio web.psung.name/emacstips del actual directorio. Si quitamos sólo el -nH ("no host directory") wget podría escribir el mismo archivo al subdirectorio emacstips. Y con ambas opciones wget podría escribir ese mismo archivo al directorio actual. En general, si quieres reducir el número de directorios extraños creados, cambia cut-dirs con el número de directorios de tu URL.




Fuentes


http://psung.blogspot.com/2008/06/using-wget-or-curl-to-download-web.html




miércoles, 5 de agosto de 2009

Brillo de Pantalla por Defecto en Ubuntu

Ya sabemos que cada nueva versión de Ubuntu reconoce más dispositivos o mejora el uso de éstos. A mí por ejemplo, en la 9.04 ya me funcionan las teclas de aumento y disminución de brillo de pantalla de mi portátil. Lo que no sabía es cómo poner el brillo por defecto, para no tener que modificarlo cada vez que arrancara el SO. Es muy sencillo y se hace mediante el menú de Gnome. Ahora se detalla:




Paso 1. Pinchamos en el menú Sistema, Preferencias, Gestión de Energía.


Paso 2. En "poner el brillo del monitor a" le damos el valor que queramos.


BrilloUbuntuB.png




martes, 28 de julio de 2009

Generar un PDF en Java usando iText JAR






 El propósito de este post es generar un pdf sencillo mediante Java.

Descargar la librería.

Nos vamos a la página http://www.lowagie.com/iText/download.html y descargamos iText core. La importamos en nuestro proyecto yendo al menú Project / Properties / Java Build Path / Libraries / Add External JARs ... y seleccionamos dicho paquete

El código.

Se trata de una aplicación muy sencilla que escribirá en el pdf un párrafo con un saludo y otro con la fecha actual.
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

public class GeneratePDF {

    public static void main(String[] args) {
        try {
            OutputStream file = new FileOutputStream(new File("C:\\Test.pdf"));

            Document document = new Document();
            PdfWriter.getInstance(document, file);
            document.open();
            document.add(new Paragraph("Hola a todos!"));
            document.add(new Paragraph(new Date().toString()));

            document.close();
            file.close();

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

Fuentes.


http://viralpatel.net/blogs/2009/05/20-useful-java-code-snippets-for-java-developers.html




Monitorizar red Symio / Alcatel X060 con Conky

Introducción.


Vamos a ver cómo monitorizar el tráfico de la red Symio usando el modem Alcatel X060 mediante Conky. Podremos ver los Mb de bajada y subida desde que iniciamos la sesión, así como la tasa de subida y de bajada.



Empezamos.


Como vimos en el post Personalizar Conky, yo parto del tema CONKY-colors, descargable desde http://gnome-look.org. A partir de ahí, podemos modificarlo editando .conkyrc colocándonos en nuestro directorio personal y tecleando:


   gedit ./conkyrc

Debemos saber cómo se llama el interfaz a monitorizar. Si hace poco que instalamos el modem, al hacer ifconfig veremos que tenemos una nueva, llamada ppp0. Ésa es la que nos interesa.

Ya que hemos abierto .conkyrc en gedit, buscamos el párrafo donde pone RED. Lo que he hecho ha sido copiar el código de uno de los otros interfaces y añadirlo debajo cambiando su nombre por el de ppp0. Después de modificar, el apartado red quedará así (lo que yo he añadido está en negrita):


   RED ${hr 2}
   ${if_existing /proc/net/route wlan0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed wlan0} kb/s ${alignr}${upspeedgraph wlan0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed wlan0} kb/s ${alignr}${downspeedgraph wlan0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}Z${font} Señal: ${wireless_link_qual wlan0}% ${alignr}${wireless_link_bar 8,60 wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr wlan0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${else}${if_existing /proc/net/route eth0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed eth0} kb/s ${alignr}${upspeedgraph eth0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed eth0} kb/s ${alignr}${downspeedgraph eth0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr eth0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${endif}${else}${if_existing /proc/net/route eth1}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed eth1} kb/s ${alignr}${upspeedgraph eth1 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed eth1} kb/s ${alignr}${downspeedgraph eth1 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr eth1}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
   ${endif}${else}${if_existing /proc/net/route ppp0}
   ${voffset -6}${font PizzaDude Bullets:size=14}O${font} Up: ${upspeed ppp0} kb/s ${alignr}${upspeedgraph ppp0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}U${font} Down: ${downspeed ppp0} kb/s ${alignr}${downspeedgraph ppp0 8,60 3465A4 729FCF}
   ${voffset 4}${font PizzaDude Bullets:size=14}N${font} Upload: ${alignr}${totalup ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}T${font} Download: ${alignr}${totaldown ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}a${font} Ip Local: ${alignr}${addr ppp0}
   ${voffset 4}${font PizzaDude Bullets:size=14}b${font} Ip Pública: ${alignr}${execi 1 ~/.scripts/ip.sh}
     ${endif}${else}
   ${font PizzaDude Bullets:size=14}4${font} Red No disponible
   ${endif}

Ya solo tenemos que reiniciar Conky: Primero lo paramos tecleando "killall conky". Y lo arrancamos mediante la combinación Alt+F2 y escribiendo Conky.






 

 

 

 

Agradecimientos


A Borja por su excelente post "Simyo + Alcatel X060 + Ubuntu 9.04" y a Javi por su aportación imprescindible. Gracias a ellos he configurado mi módem en Ubuntu.




viernes, 24 de julio de 2009

Copia de Archivos en Java

http://ubuntuarte.com/wordpress/wp-content/uploads/2008/06/java-orangebox.png




La librería java.nio


Esta librería apareció con java 1.4 y básicamente lo que hace es definir buffers, los cuales contienen datos. En este post se verá cómo haciendo uso de su clase FileChannel, podemos conseguir una copia de archivos de alto rendimiento.




El código




public static void copyFile(File sourceFile, File destFile) throws IOException {

if(!destFile.exists()) {

destFile.createNewFile();

}



FileChannel source = null;

FileChannel destination = null;

try {

source = new FileInputStream(sourceFile).getChannel();

destination = new FileOutputStream(destFile).getChannel();

destination.transferFrom(source, 0, source.size());

}

finally {

if(source != null) {

source.close();

}

if(destination != null) {

destination.close();

}

}

}





Y desde nuestro main podemos llamar a este método así:




public static void main(String[] args) throws IOException {

File archivoEntrada = new File("C:/archivoEntrada.txt");

File archivoSalida = new File("C:/archivoSalida.txt");

copyFile(archivoEntrada, archivoSalida);

}





Explicación


La línea que realiza la transperencia es " destination.transferFrom(source, 0, source.size()); ". El algoritmo utilizado está muy optimizado y su rendimiento será mucho mayor que si la operación la hiciéramos usando bloques de memoria de tamaño arbitrario. Además puede ser opimizado según la plataforma, el contexto y tipo de canal, ó puede usar un método nativo en las llamadas.


Se pueden hacer pruebas usando archivos de entre 50 y 100 megas por ejemplo, y se verá que el tiempo utilizado es muy similar al usado por el sistema operativo.




Fuentes


NIO: High Performance File Copying de http://www.javalobby.org




jueves, 16 de julio de 2009

Añadir texto a un archivo en Java



Vamos a ver un ejemplo de lo más simple en el manejo de archivos. Consistirá simplemente en añadir un texto a un archivo. Si el archivo no existe se creará.



Ejemplificando


Queremos añadir el texto "Hola" al archivo prueba.txt que está en la unidad C. El código sería el siguiente:


BufferedWriter out = null;   
try {   
    out = new BufferedWriter(new FileWriter("C:/prueba.txt", true));   
    out.write("Hola");   
} catch (IOException e) {   
    // error processing code   
} finally {   
    if (out != null) {   
        out.close();   
    }   
} 



Fuentes


http://viralpatel.net/blogs/2009/05/20-useful-java-code-snippets-for-java-developers.html




martes, 14 de julio de 2009

Usar Breakpoints Condicionales en Eclipse

Los beakpoints (puntos de ruptura) condicionales son una buena forma de reducir el tiempo y una de esas características que puede que tu no conocieras. En este artículo se va a explicar como usarlos en el ide Eclipse.



Parte práctica


¿Has intentado depurar un problema que ocurre en alguna posición de una lista de 100 objetos?. Pensemos que tenemos este código:


for (int i = 0; i<100; i++)
                {
                        System.out.println(i);
                }

Y queremos depurar la posición 90. Tenemos que crear un breakpoint, luego pinchamos con botón derecho sobre el símbolo azul del breakpoint y elegimos "Breakpoint Properties". En la ventana Propiedades, marcamos "Enable Condition" y escribimos la condición o condiciones en el cuadro de texto.



De esa forma, llegará hasta la posición 89 y se parará. De modo que habremos llegado a la posición que queríamos depurar.





 

 

 

 

 

 

 


 


 


Fuentes


http://www.java-hair.com/2008/06/30/using-conditional-breakpoints/




sábado, 11 de julio de 2009

Técnicas CSS. Parte 1

Éste es el primero de una serie de post dedicados a CSS, es decir hojas de estilos.



Técnica 1. Pequeña indicación.


Consiste en que al pasar el ratón sobre la palabra coloreada muestra un mensaje:




<style type="text/css">
a:hover {
  background:#ffffff;
  text-decoration:none;} /*BG color is a must for IE6*/
a.tooltip span {
  display:none;
  padding:2px 3px;
  margin-left:8px;
  width:130px;
}
a.tooltip:hover span{
 display:inline;
 position:absolute;
 background:#ffffff;
 border:1px solid #cccccc;
 color:#6c6c6c;
 }
 </style>
 
 
 Mi <a class="tooltip" href="#">consejo<span>No fume</span></a>.



Técnica 2. Elegir el color del texto seleccionado


El siguiente código nos va a permitir indicar el color de selección del texto mediante un valor hexadecimal.

::selection {
  background: #ffb7b7; /* Safari */
}

::-moz-selection {
  background: #ffb7b7; /* Firefox */
}





 










Fuentes:


http://www.catswhocode.com/blog/10-astonishing-css-hacks-and-techniques




Compartir Carpetas en VMWare





 Cuando estamos usando un sistema operativo de forma virtual, puede hacernos falta acceder a archivos y carpetas de un disco duro real. En este post vamos a mostrar cómo hacerlo usando Windows XP como SO huesped.
 

1. Seleccionar la carpeta a compartir.

  • En VMWARE accedemos al menú VM y pinchamos en Settings. Luego en pesataña Options seleccionamos Shared Folders.
  • Pulsamos Add para añadir un directorio, al que le ponemos nombre. Y ya nos aparecerá en el recuado Folders como añadida.

2. Agregar como nuevo sitio de red.

  • Ya en Windows nos vamos a Menú Inicio/Mis sitios de red. Pinchamos en Agregar nuevo sitio de red y pinchamos siguiente hasta que nos aparezca el botón Examinar.
  • Luego pinchamos en Examinar y nos movemos a / Toda la red / VMware Shared Folders y ahí buscamos la carpeta.
  • Pulsamos Siguiente hasta el final y ya tendremos nuestra carpeta compartida.
  • Ahora siempre que queramos, podremos acceder a las carpetas compartidas en la dirección \\.host\Shared Folders




jueves, 9 de julio de 2009

Archivos hbm en Hibernate



 

 

 

 

 

¿Qué son?


Los hbm son archivos de mapeo de hibernate. Son de tipo xml y representan a una clase y tabla determinada. Haremos un ejemplo para ilustrar esta explicación.


Vamos a lo práctico


Pensemos que queremos implementar una relación muchos a muchos con las siguientes tablas:
  • Autobus (id, marca, antiguedad)
  • Conductor (id, nombre, edad)
Lo primero es indicar en hibernate.cfg, donde está los archivos de mapeo:
/src/hibernate.cfg.xml

<hibernate-configuration>
<session-factory>

...

<mapping resource="es/felipe/compañia/Conductor.hbm.xml" />
<mapping resource="es/felipe/compañia/Autobus.hbm.xml" />

</session-factory>

</hibernate-configuration>

Posteriormente creamos Conductor.hbm.xml. Mirando el código nos tendremos que dar cuenta de:
  • Las Tablas: Se creará una tabla AUTOBUS_CONDUCTOR que relacionará la tabla AUTOBUS y la tabla CONDUCTOR.
  • Los Objetos: Se relacionarán así: una colección de objetos de tipo Set en la clase Conductor, contendrá objetos Autobus. (Nota: Se ha usado un Set, pero podría haber sido cualquier otra coleccion de objetos).

/src/es/felipe/compañiaAutobus/conductor.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Conductor">
<id name="id" column="CONDUCTOR_ID">
<generator class="native"></generator>
</id>
<property name="nombre" />
<property name="edad" />
<set name="autobuses" table="AUTOBUS_CONDUCTOR">
<key column="CONDUCTOR_ID" />
<many-to-many column="AUTOBUS_ID"
class="Autobus" />
</set>
</class>
</hibernate-mapping> 

Y ahora el código de autobus.hbm.xml, que representa sólo la tabla Autobus:

/src/es/felipe/compañiaAutobus/autobus.hbm.xm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="es.felipe.compañia">
<class name="Autobus" table="AUTOBUS">
<id name="id" column="AUTOBUS_ID">
<generator class="native" />
</id>
<property name="antiguedad" />
<property name="marca" />
</class>
</hibernate-mapping> 

Luego vienen las clases respectivas. Veamos que en la clase Conductor existe la propiedad del tipo Set, que será una colección de objetos Autobus.
/src/es/felipe/compañiaAutobus/conductor.java

public class Conductor {private Long id;
private String nombre;
private int edad;
private Set autobuses = new HashSet();
public Conductor(){}
public Long getId() {}
public void setId(Long id) {}
public String getNombre() {}
public void setNombre(String nombre) {}
public int getEdad() {}
public void setEdad(int edad) {}
public Set getAutobuses() {}
public void setAutobuses(Set autobuses) {}
}
/src/es/felipe/compañiaAutobus/autobus.java

public class Autobus {
private Long id;
private int antiguedad;
private String marca;
public Autobus() {}
public Long getId() {}
private void setId(Long id) {}
public int getAntiguedad() {}
public void setAntiguedad(int antiguedad) {}
public String getMarca() {}
public void setMarca(String marca) {}
}
Espero que haya servido de ayuda y haya aclarado los conceptos, sobretodos a aquellos que empiezan con Hibernate.




Imprimir con PL/SQL: dbms_output.put_line




 

 

 

 

 

 

 

Introducción


Hoy vamos a ver la manera de imprimir por pantalla en PL/SQL. Lo haremos mediante put_line del paquete dbms_output. Éste es un método muy utilizado, sobretodo para realizar operaciones de depuración. Estudiaremos dos ejemplos muy sencillos.



El código


Concatenar una cadena de caracteres y un número, y mostrarlo:

Los string van entre comillas simples y se concatenan mediante ||. La función to_char convierte un número en cadena de caracteres.

 
  
   SQL> 
   SQL> set serveroutput on 
   SQL> declare 
   2 myNumber number := 1; 
   3 begin 
   4 myNumber := 1 + 1; 
   5 dbms_output.put_line( '1 + 1 = ' || to_char( myNumber ) || '!' ); 
   6 exception 
   7 when others then 
   8 dbms_output.put_line( 'We encountered an exception!' ); 
   9 end; 
   10 / 
   1 + 1 = 2! 
     
   PL/SQL procedure successfully completed. 
     
   SQL> 
   SQL> 
    
           

Mostrar valor de una variable:

Se muestra los distintos valores de una variable en las distintas iteracciones del bucle. Como hemos dicho antes, puede ser útil a la hora de depurar nuestros procedimientos:

 
  
   SQL> 
   SQL> --Basic loop 
   SQL> 
   SQL> 
   SQL> SET SERVEROUTPUT ON 
   SQL> DECLARE 
   2 x NUMBER := 1; 
   3 BEGIN 
   4 LOOP 
   5 DBMS_OUTPUT.PUT_LINE('This loop has executed'||TO_CHAR(x)||' time(s)'); 
   6 x := x +1; 
   7 EXIT WHEN x > 5; 
   8 END LOOP; 
   9 END; 
   10 
   11 
   12 / 
   This loop has executed1 time(s) 
   This loop has executed2 time(s) 
   This loop has executed3 time(s) 
   This loop has executed4 time(s) 
   This loop has executed5 time(s) 
     
     
   PL/SQL procedure successfully completed. 
    
           



Fuentes


http://www.java2s.com/Code/Oracle/PL-SQL/DBMS_OUTPUT.htm




miércoles, 8 de julio de 2009

Personalizar Conky



Qué es Conky


Para el que no lo conozca, Conky es una aplicación que se coloca en el escritorio y nos da diversa información: uso de cpu, memoria RAM, tasa de bajada y subida de la red, etc... Resulta muy aconsejable puesto que además de visualizar dichos datos, requiere pocos recursos.

En este post se verá cómo personalizarlo, añadiendo funcionalidad y cambiando su aspecto. Partiremos del tema conky-colors, que se puede descargar desde aquí o buscándo CONKY-colors en la página http://gnome-look.org. Se le pueden instalar unos scripts como Conky Weather ó Conky SSL Mail, pero eso será en otro momento. Lo que se va a explicar en concreto es cómo modificar el color de Conky, mostrar la temperatura de la CPU y visualizar los procesos que más recursos consumen.



Manos a la obra


El archivo .conkysrc situado en la carpeta personal podemos modificar cualquier parámetro. Así que tecleamos en consola:

 
gedit /home/usuario/.conkyrc

De ese modo podremos podremos modificarlo mediante gedit, aunque podemos usar cualquier editor de textos.


Modificación del color de Conky.


Buscamos mediante Control+F la variable default_color y la modificamos. Hay que tener en cuenta que es un valor hexadecimal. Yo he querido que Conky me aparezca en azul, así que le he puesto el valor 2b3acd, quedaría así:

 
default_color 2b3acd


Añadir la temperatura de la CPU.


La variable acpitemp nos dice dicha temperatura. Para que nos aparezca con el icono y la fuente de letra adecuados, añadimos ésta línea:


   ${font StyleBats:size=16}A${font} CPU Tº: ${acpitemp}º C

Realmente lo que da el valor es sólamente ${acpitemp}. El listado completo de las variables que podemos usar está aquí.


Mostrar los procesos que más recursos consumen.


Cuando el ordenador se nos ralentiza mucho, es bueno saber qué programas son los causantes. Por ello podemos mostrar los tres que más cpu consumen y los tres que más memoria usan. Conseguiremos eso añadiendo las siguientes líneas:


PROGRAMAS ${hr 2}

Highest CPU $alignr CPU% MEM%

${hr 1}

${top name 1}$alignr${top cpu 1}${top mem 1}

${top name 2}$alignr${top cpu 2}${top mem 2}

${top name 3}$alignr${top cpu 3}${top mem 3}

Highest MEM $alignr CPU% MEM%

${hr 1}

${top_mem name 1}$alignr${top_mem cpu 1}${top_mem mem 1}

${top_mem name 2}$alignr${top_mem cpu 2}${top_mem mem 2}

${top_mem name 3}$alignr${top_mem cpu 3}${top_mem mem 3}


Espero que haya sido de utilidad y un primer paso para que cada uno lo modifique según sus gustos y necesidades.




lunes, 29 de junio de 2009

Separar Número y Letra del NIF en Java

Vamos a ver un ejemplo sencillo de cómo separar el número y la letra del NIF que aparece en los carnets de identidad.


Puede ocurrirnos que nos lo den como un String y necesitemos guardarlo en variables distintas o imprimir sólo el DNI. Nosotros simplemente mostraremos el número en una línea y la letra en otra.


Se nos pueden presentar dos casos:






Caso A. Número y letra separados por un guión. Ejemplo: 11111111-A.



Éste se resuelve de forma más sencilla. Usamos StringToquenizer poniendo como carácter separador el guión:




String strDatos="11111111-A";
StringTokenizer tokens=new StringTokenizer(strDatos, "-");
while(tokens.hasMoreTokens()){
System.out.println(tokens.nextToken());
}



nif1.png






Caso B. Número y letra van seguidos. Ejemplo: 11111111A.



Aquí no tenemos caracter separador, así que tenemos que convertir el String en un vector de Char. Recorreremos ese vector comprobando si la posición actual es una letra. Para ello usaremos el método isLetter de la clase Character:




String strDatos="111111A";
char[] ca = strDatos.toCharArray();
for(int i=0; i<strDatos.length();i++)
{
if(Character.isLetter(ca[i])) //Si es letra
System.out.println("\n"+ca[i]); //Salto de línea e imprimimos el carácter
else //Si no es letra
System.out.print(ca[i]); //Imprimimos el carácter
}



nif1.png




Llamar a una Función PL/SQL desde Java

java.jpg




Qué es una función


En PL/SQL existen procedimientos y funciones. La diferencia está en que la función debe devolver un valor al bloque PL/SQL que lo llamó. Sin embargo un procedimiento puede devolver múltiples parámetros al bloque.


Llamada a la función


Veamos cómo llamar a una función desde java. Tenemos una función que nos devuelve el número de productos del tipo que le pasamos como parámetro. Ésta es la cabecera:


FUNCTION NUMPRODUCTOS (TIPO IN VARCHAR2) RETURN NUMBER AS INTEGER;


Tiene un parámetro de entrada de tipo VARCHAR2, que correspondería a un String en Java. El parámetro de salida es un entero.


Primero creamos un objeto Connection que será la conexión con la base de datos. Obviamente tendremos que poner como parámetros la cadena de conexión, el usuario y la contraseña.




Connection conexion = DriverManager.getConnection(conexion, usuario, contraseña)


Luego vendría la llamada a la función:




CallableStatement sentencia=conexion.prepareCall("{?=call numproductos(?)}");//Declarar la sentencia.
sentencia.registerOutParameter(1, Types.VARCHAR); //Registrar el parámetro de entrada
sentencia.setString(2,cliente1); //Registrar el parámetro de salida
sentencia.executeQuery(); //Realizar la llamada
numero=sentencia.getInt(1); //Recoger el parámetro de salida
System.out.println(numero);




lunes, 22 de junio de 2009

Usar el último Kernel instalado en Ubuntu

Cuando descargamos un kernel nue o se nos pregunta si actualizar el grub (menu.lst). Si respondimos que no y ahora queremos ejecutar ese núcleo, haremos lo siguiente:


Para saber que versión es la que ejecutamos actualmente :






uname -r



Para conocer la última versión instalada : abrimos Synaptic y buscamos linux-image-generic:


kernel1.png


Si la ersión es la misma que estamos usando, no habrá que hacera nada. Pero si no es así­, editamos menu.lst:






sudo gedit /boot/grub/menu.lst



Copiamos la entrada del kernel, que tendrá la siguiente forma:






title Ubuntu 9.04, kernel xxxxxxx-generic
uuid yyyy
kernel /boot/ mlinuz-xxxxxxx-generic root=UUID=yyyy ro quiet splash
initrd /boot/initrd.img-xxxxxxx-generic
quiet



Pegamos debajo y modificamos para que apunte a la nue a ersión. En mi caso cambiaría las xxxxxxx por 2.6.28-11. Las yyyy corresponden al id de la partición, que no habría que modificar.


Importante: no borrar la entrada anterior hasta comprobar que la nueva funciona. Más vale ser cautos a la hora de trabajar con el grub.


Reiniciamos Ubuntu y nos aparecerá una nueva entrada que usará el nuevo núcleo.




Primer Ejemplo con JQuery

logo_jquery_215x53.gif





¿JQuery?


JQuery es una biblioteca para Javascript que nos ahorrará mucho código. Nos permitirá asociar acciones a un tipo concreto de elemento (enlaces, tablas, listas, ...), inteactuar con AJAX, etc (más información aquí).





Un ejemplo


Veremos como al pulsar sobre un enlace cualquiera, se oculte o se muestre una capa de nuestra página.


Para este ejemplo necesitamos los siguiente:



  • Un servidor web (yo uso Apache instalado mediante XAMPP).

  • La librería jquery (es un archivo.js). Enlace.

  • El StarterKit, para hacer ejemplos rápidamente. Enlace.


En el directorio del servidor (en mi caso C:\xampp\htdocs) tendremos guardar el archivo jquery.js que hemos descargado. También los archivos del Starterkit.


Nos fijamos en que StarterKit.html contiene los includes de los .js:




<script src="jquery.js" type="text/javascript"></script>

<script src="custom.js" type="text/javascript"></script>


El archivo custom.js es el que usaremos para realizar nuestras funciones. En éste ejemplo veremos como ocultar un texto con el efecto de barrido. Para ello custom.js será así:




$(document).ready(function(){ //Línea 1

$("a").toggle(function(){ //Línea 2

$(".stuff").hide('slow'); //Línea 3

},function(){ //Línea 4

$(".stuff").show('fast'); //Línea 5

});

});



Explicación:


Línea 1: Cuando el documento está preparado registra un evento.


Línea 2: Al pulsar sobre cualquier enlace (por eso la variable a) realiza la línea 3.


Línea 3: La capa "stuff" se esconde lentamente.


Línea 4: Al pulsar de nuevo sobre un enlace.


Línea 5: La capa "stuff" se mestra rápidamente.


Para problarlo pondremos en nuestro navegador http://localhost/starterkit.html y pulsamos en un enlace cualquiera.





Fuentes


http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery




lunes, 15 de junio de 2009

Alojamiento Gratuito PHP + MySQL: 000webhost.com

Preguntado en foros acerca de algún servicio de hosting gratuito, me he encontrado con http://www.000webhost.com. Quería subir un proyecto PHP y MySQL y así lo he hecho de una forma sencilla y rápida. Otra cosa muy importante es que no agrega publicidad alguna. A continuación se detallan algunas características de la versión gratuita y de pago:


webhost1.png





Registro


Lo primero que haremos será registrarnos, pulsando "Order Now" en la columna "Free Hosting". Entre otras cosas indicaremos el dominio (si ya tenemos uno podemos usarlo).


Mi proyecto lo despliego localmente mediante XAMPP. A continuación describo lo que hice para subirlo a este servicio.


Nos iremos a panel de control y nos encontraremos algo así:


webhost2.png





Subiendo los archivos


Para subir los archivos del proyecto (PHP, HTML, CSS, imágenes, ...) pulsamos en "File Manager". Con eso accederemos a una interfaz web que mediante FTP nos permitirá subir dichos archivos (Nota: podemos usar el programa cliente FTP que prefiramos para este propósito). Los pondremos en la carpeta "public html" pulsando Upload e indicando la ruta en la que se encuentran.


webhost3.png





La BBDD


Lo siguiente es la base de datos. Accederemos a phpMyAdmin y crearemos una base de datos con el nombre que prefiramos. Posteriormente podremos crear la tablas. En mi caso, solo he hecho un import e indico un archivo .sql que contiene mi BD.


Posteriomente, cambiamos los parámetros de conexión a la BD para que apunten a la nueva y no a la BD local. Me estoy refiriendo a los parámetros de las funciones mysql_connect y mysql_select_db.


Importante: Éste entorno distingue entre mayúsculas y minúsculas, por tanto si una tabla se llama "producto" y hacemos un "mysql_query("SELECT MAX(id) FROM Producto", $conexion)", ésto no funcionará.





Un ejemplo


Y eso es todo. Pueden ver mi proyecto aquí:


http://felinfo.host56.com/proyecto/




lunes, 8 de junio de 2009

Instalar VMWare Tools con OpenSuse como Huesped



¿VMware Tools?


Las VMware Tools nos permiten mejorar el uso y rendimiento del sistema virtualizado. Por ejemplo aspectos relacionados con los periféricos y los gráficos en el S.O. huesped. A continuación vamos a explicar cómo instalarlas.



Instalación


Paso 1. Arrancar Opensuse en nuestro VMware.

Paso 2. Abrir un terminal y ponernos como administradores escribiento:


su --

Paso 3. Instalar las utilidades requeridas en OpenSuse:


yast2 --install gcc gcc-c++ kernel-source make

Ésto instalará el compilador de C y C++, los paquetes del kernel y la utilidad make.

Paso 4. En el menú "VM" de VMware, pinchamos en "Install VMWare Tools". Ésto montará una unidad CDROM en el sistema huesped openSUSE con una instalación de los VMWare Tools. Encontraremos un archivo RPM y otro Tar/gzip.
















Paso 5. Pinchamos con botón derecho sobre el archivo RPM y seleccionamos "Open with Package Installer", introducimos la clave de administrador y completamos la instalación.

Paso 6. Cuando se haya instalado, ejecutamos un script de la siguiente forma:


/usr/bin/vmware-config-tools.pl

Contestamos a unas preguntas para completar la configuración.

Paso 7. Reiniciamos el SO huesped.

Y ya podemos disfrutar de OpenSuse virtualizado!




miércoles, 3 de junio de 2009

Instalar Varias Versiones de IE en un PC




Cómo visualizar webs en versiones de IE antiguas


Existe una aplicación que nos permite instalar varias versiones Internet Explorer en un mismo PC. Ésto es realmente útil a la hora de comprobar si una página se visualiza correctamente en cualquier explorador. De modo que es una herramienta muy recomendada para desarrolladores y diseñadores web.

Os estoy hablando de Multiple IE. Se puede obtener aquí:

Descargar




Instalación


Se hace de forma muy sencilla.

multipleIE1.png

multipleIE2.png

Al final tendremos en nuestro escritorio los accesos directos a cada una de las versiones de IE.




jueves, 28 de mayo de 2009

Fecha Actual en Español con Java











Podemos obtener la fecha actual en java mediante tres sencillos pasos:


Paso 1. Crear un formateador que será un objeto SimpleDateFormat. Como parámetros le pasaremos el formato de la fecha y el idioma (objeto Locale):


   SimpleDateFormat formateador = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));

A continuación se indica cómo formatear los días, meses y años:


Año


"yy" -> "03″

"yyyy" -> "2003″


Mes


"M" -> "7″

"M" -> "12″

"MM" -> "07″

"MMM" -> "Jul"

"MMMM" -> "Deciembre"


Día del mes


"d" -> "3″

"dd" -> "03″


Paso 2. Crear un objeto Date:


   Date fechaDate = new Date();


Paso 3. Formatear la fecha usando el formateador y pasándole como argumento el objeto Date:


   String fecha=formateador.format(fechaDate);

El ejemplo completo quedaría así:


   import java.text.SimpleDateFormat;
   import java.util.Date;
   import java.util.Locale;

   public class Principal {
   public static void main(String[] args) {
   SimpleDateFormat formateador = new SimpleDateFormat(
   "dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));
   Date fechaDate = new Date();
   String fecha = formateador.format(fechaDate);
   System.out.println(fecha);
   }
   } 




Resultado


Lo que obtendremos será de este tipo:


12 de Junio de 2009




martes, 26 de mayo de 2009

Montar una Unidad automáticamente al Iniciar Ubuntu

Si teneis vuestros documentos en una partición distinta a la de linux, ésto os puede servir. Se trata de ahorrarnos el paso de montar dicha unidad cada vez que iniciemos Ubuntu.




Manos a la obra


Miramos cómo se llama la partición a montar:




sudo fdisk -l


En mi caso sería /dev/sda2:


montarUnidad.png


Creamos una carpeta en /media/ con el nombre windows (o el que queramos).


Editamos el archivo /etc/fstab






sudo gedit /etc/fstab


Y añadimos la siguiente entrada, siendo /dev/sdaX la unidad a montar:




/dev/sdaX /media/windows ntfs auto,umask=0 0 0


En mi caso sería:




/dev/sda2 /media/windows ntfs auto,umask=0 0 0


Ahora cada vez que arranquemos nuestro Ubuntu nos aparecerá la unidad montada.


Icono unidad Ubuntu




jueves, 21 de mayo de 2009

Filtrado de Lista Desplegable en JavaScript

Cuando tenemos una lista desplegable con muchas entradas se hace lenta la selección. Vamos dar una solución que sea más usable, para ello vamos a filtrar dichas entradas. Se van a mostrar dos ejemplos, uno en el que se filtra por la subcadena inicial y otro en el que se filtra por cualquier subcadena.




Filtrado por la subcadena inicial


Partiendo de los siguientes controles y su respectivo código:


lista desplegable






<html>
<head>
<script language="JavaScript">
var i;
function addOpt(oCntrl, sTxt, sVal, sCnd){
if (sTxt.substr(0, sCnd.length).toUpperCase() == sCnd.toUpperCase()){
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[i++]=selOpcion);
}
}
function cambia(oCntrl){
var txtVal = document.frm.txt.value;
while(oCntrl.length > 0) oCntrl.options[0]=null;
i = 0;
oCntrl.clear;
addOpt(oCntrl, "Ciudad de Mexico", "0", txtVal);
addOpt(oCntrl, "Ciudad de Panama", "0", txtVal);
addOpt(oCntrl, "Ciudad de Guatemala", "0", txtVal);
addOpt(oCntrl, "Caracas", "0", txtVal);
addOpt(oCntrl, "Cancun", "0", txtVal);
addOpt(oCntrl, "Maracay", "0", txtVal);
addOpt(oCntrl, "Maracaibo", "0", txtVal);
addOpt(oCntrl, "Zaragoza", "0", txtVal);
}
</script>
</head>
<body onload="cambia(document.frm.ciudad)">
<form name="frm">
<table border="0">
<tr>
<td>
Ciudad:
</td>
<td>
<input type="text" name="txt" onkeyup="cambia(document.frm.ciudad)">
</td>
<td>
<select name="ciudad">
</select>
</td>
</tr>
</table>
</form>
</body>
</html>



Obtendremos un filtrado por la subcadena inicial:


lista desplegable filtrada 1






Filtrado por cualquier subcadena


Pero si queremos que nos filtre por cualquier subcadena, tendremos que modificar la función addOpt, quedando de la siguiente forma:




function addOpt(oCntrl, sTxt, sVal, sCnd){
if (sTxt.substr(sTxt.indexOf(sCnd), sCnd.length).toUpperCase() == sCnd.toUpperCase()){
var selOpcion=new Option(sTxt, sVal);
eval(oCntrl.options[i++]=selOpcion);
}
}



Lo que hace ese código es buscar desde que aparece la cadena introducida hasta el final. El resultado sería éste:


lista desplegable filtrada 2




Creación Automática de Tablas en Hibernate


Icono de hibernate


hbm2ddl.auto


En el archivo hibernate.cfg.xml existe la propiedad hbm2ddl.auto que resulta muy útil. Nos va a permitir crear las tablas en la BBDD a partir de los .hbm (archivos de mapeo de hibernate).


Se colocará antes de la declaración de los mapeos:





...
<property name="hbm2ddl.auto">create</property>




<mapping resource="es/felipe/compañia/Conductor.hbm.xml" />
<mapping resource="es/felipe/compañia/Autobus.hbm.xml" />
...




Los valores que puede tomar son los siguientes:



  • create - Crea las tablas.

  • update - Actualiza las tablas si ha habido modificaciones.

  • create-drop - Borra las tablas existentes y las crea de nuevo.


Si sólo vamos a añadir datos sin modificar las tablas, lo ideal es ponerla a update.


Éstas operaciones se realizarán sobre el esquema que indiquemos en la propiedad connection.url.





<hibernate-configuration>

<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/hibernate4</property>
<property name="connection.username">root</property>
<property name="connection.password">123123</property>
...




Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO