Personal Website

My Web: MindEchoes.com

Friday, July 31, 2009

Usando Base de Datos en Java MUY SIMPLE!

Bueno, acabo de terminar de programar una primera versión bien basica de una libreria para tratar de abstraer algunas funcionalidades que se suelen presentar cuando programamos algun programa que requiera uso de Base de Datos, despues seguire mejorando el código para que sea lo mas automatico posible todas las operaciones que se pueden realizar.

La Libreria en si, puede ser descargada del siguiente link: QuickDB
(source code: http://code.google.com/p/library-inkubator/)

Para utilizar esta libreria con un proyecto Maven, abrimos una consola dentro de la carpeta donde se encuentra el ".jar" de QuickDB y ejecutamos el siguiente comando:

mvn install:install-file -Dfile=QuickDB-1.0-SNAPSHOT.jar -DgroupId=cat.inkubator -DartifactId=QuickDB -Dversion=1.0-SNAPSHOT -Dpackaging=jar

Y de esta forma ya tenemos la libreria en nuestro repositorio local de Maven y podemos usarla simplemente incluyendo la dependencia en el POM de nuestro proyecto de la siguiente forma:

<dependency>
<groupId>cat.inkubator</groupId>
<artifactId>QuickDB</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

Si por el contrario queremos agregar la libreria en un proyecto de Netbeans clasico, creamos nuestro proyecto y agregamos la libreria como muestra la imagen:


Ahora que ya tenemos agregada la libreria a nuestro proyecto de una forma u otra, solo debemos tener en cuenta un par de cosas:
  • Crear nuestra Base de Datos en MySQL
  • Crear nuestras entidades que se mapearan a las tablas de la base de datos
  • Y usar AdminBase para interactuar con estas entidades y la base
Para el ejemplo cree un Catalogo llamado "testQuickDB" como se puede ver en la imagen con una tabla llamada "person":
Y la tabla "person" tiene las siguientes caracteristicas:

Una vez que tenemos nuestra Base de Datos creada de esta forma para el ejemplo, debemos crear en nuestro Proyecto Java una clase que pueda ser mapeada con nuestra Tabla, de esta forma creamos la Clase "Person" la cual debe implementar la interfaz que se encuentra en la libreria QuickDB llamada "ModelInterface" para que AdminBase sepa interactuar con esta clase.
El siguiente código muestra como quedaria esta clase Person al implementar la interfaz (los getters y setters no se tuvieron en cuenta para simplificar el código):


import java.sql.ResultSet;
import cat.inkubator.model.ModelInterface;

public class Person implements ModelInterface{

private int id;
private String name;
private String phone;
private int alive;

private String modelName = "person";
private String sql;

public Person(){}

public Person(String name, String phone, int alive){
this.name = name;
this.phone = phone;
this.alive = alive;
}

public String modelName(){
return this.modelName;
}

public String getSql(){
return sql;
}

public void setSql(String sql){
this.sql = sql;
}

public Object[] arrayRepresentation(){
Object[] obj1 = { "name", this.name};
Object[] obj2 = { "phone", this.phone };
Object[] obj3 = { "alive", new Integer(this.alive) };

Object[] result = { obj1, obj2, obj3 };

return result;
}

public void fromResultSet(ResultSet rs){
try{
this.id = rs.getInt("id");
this.name = rs.getString("name");
this.phone = rs.getString("phone");
this.alive = rs.getInt("alive");
}catch(Exception e){
e.printStackTrace();
}
}

}

Ahi ya tenemos nuestra Clase que se mapeara directo con la Tabla en nuestra Base de Datos, ahora para usar las operaciones de guardar los datos de los objetos que podamos crear, obtener algun objeto de la Base de Datos o lo que fuere creamos simplemente nuestra clase principal donde contendremos el Main:


import cat.inkubator.db.AdminBase;

public class App
{
public static void main( String[] args )
{
Person person = new Person("Diego", "453456721", 1);
AdminBase admin = new AdminBase("localhost", "3306",
"testQuickDB", "root", "");

//si es posible guardar los datos de la persona
//la funcion retornara TRUE y se imprimira el mensaje "Saved!"
if( admin.save(person) ){
System.out.println("Saved!");
}

//Crea una entidad persona vacia y le setea la sentencia sql
//esa entidad realizara una busqueda en la base de datos usando
//admin.obtain que retornara un ResultSet y Person lo parseara
//para restaurar los datos del objeto como en la base de datos
Person person2 = new Person();
person2.setSql("SELECT * FROM person WHERE name = 'Diego'");
person2.fromResultSet(admin.obtain(person2));
}
}

Esta son solo algunas de las operaciones que se pueden realizar, las operaciones mas comunes son soportadas y para modificaciones o eliminaciones solo debemos pasar la parte del WHERE de la sentencia sql y la libreria se encarga del resto.

Luego seguire añadiendo funcionalidades y explicando mas en profundidad el uso.
El ejemplo presentado puede descargarse del siguiente link (Versión realizada con Maven).
O tambien puede descargarse el ejemplo como proyecto Netbeans clasico.

Wednesday, July 22, 2009

Activar Ctrl+Alt+Backspace en Ubuntu 9.04

Para aquellos que extrañen reiniciar el servidor X presionando la combinacion de teclas: "Ctrl+Alt+Backspace", aca les dejo la forma en que pueden activarlo (por lo menos para mi era bastante comodo tenerlo).

Primero debemos instalar la siguiente aplicación:

$ sudo aptitude install dontzap -y

Ahora para poder habilitar el reinicio del servidor X con la combinación de teclas mencionada, debemos ingresar:

$ sudo dontzap -d

O para pasar a deshabilitar esta combinación de teclas ejecutamos:

$ sudo dontzap -e

[Visto en: Ubuntu Life]

Monday, July 20, 2009

Syriox - Graficador 1.2

Ya esta lista la version 1.2 del Graficador para el proyecto Syriox.
Esta versión tendria muchas optimizaciones para que el programa funcione mas rapido, y agregaria muchas nuevas caracteristicas como:

  • Refresco automatico del grafico al seleccionar algun algoritmo.
  • Zoom o Valores maximos y minimos del Eje Y configurables en cualquier momento.
  • Posibilidad de configurar la Escala o cantidad de muestras que se desean ver a la vez en el grafico.
  • Posibilidad de configurar la frecuencia a la que se refrescara el grafico (antes de comenzar la lectura desde puerto)
  • Posee un boton que nos permite detener el grafico con los valores que se encuentran dibujados en ese momento para poder verlos bien.
  • Y la posibilidad de Graficar los 3 ejes del Acelerometro ( X - Y - Z )




Source Code: http://code.google.com/p/syriox/

Tengo Mi Cuenta De Google Wave

Bueno, despues de tanto esperar me dieron una cuenta para tener acceso a la Sandbox de Google Wave!!


Al parecer no todas las cosas que mostraron en la presentación estarian habilitadas y (todavia no busque) pero no se donde estan los robots para agregar, eso estaria bueno que estuvieran centralizados en algun lado, o listados en algun lado... porque los tenes que agregar como si fuera un contacto, pero en las primeras horas que lo estuve usando, no tuve ganas de ponerme a buscarlos, una persona por una Wave me paso 2........ pero por lo menos el Robot para traducciones pareceria no estar funcionando.......

Ya veremos que Robot puedo hacer :D

Monday, July 13, 2009

Comenzando con Maven

Este la verdad es un post que debia hace ratooo...

Para los que conocen Maven ya sabran que es una herramienta que nos permite simplificar muchisimooooo muchas tareas de configuración y administración de un proyecto (principalmente para Java, pero puede ser utilizado en otros lenguajes), y para lo que no lo conocen... es momento de hacerlo!

Que es Maven??
A primera vista parece que Maven puede ser muchas cosas, pero en pocas palabras Maven es un intento de aplicar las pautas de un proyecto de construcción de infraestructura con el fin de promover la comprensión y la productividad al proporcionar un camino claro en la utilización de las mejores prácticas. Maven es esencialmente una herramienta para el manejo y comprensión de un proyecto y, como tal, proporciona una manera de ayudar con la gestión de:
  • Builds
  • Documentation
  • Reporting
  • Dependencies
  • SCMs
  • Releases
  • Distribution
Los beneficios que se obtienen al utilizar Maven son faciles de apreciar al quitarnos esta herramienta la complejidad de configuración en los proyectos y brindarnos estructuras de proyectos bien definidas y standards con lo que podemos decir:
"Al comprender un proyecto Maven, comprendemos cualquier proyecto Maven"
Esto que puede sonar trivial, en realidad no lo es, cuantas veces ha pasado de descargar un proyecto realizado con un editor como Eclipse, y que la estructura que maneja ese proyecto sea incompatible con la de otro editor como Netbeans, o dejando los editores de lado, simplemente bajar un proyecto y obtener complicaciones innecesarias al buscar los archivos de configuración de la aplicación, etc. Estas cosas y muchas otras mas, son las que Maven soluciona con su modelo de proyecto.

En sintesis, para que puedo usar Maven:
  • Maven puede ser usado como una herramienta de Build (asi como Ant, tambien de Apache), con la diferencia de que Maven nos presenta un ciclo de build bien definido y basado en la experiencia de la utilización de estos ciclos en otros proyectos, por lo que nos evitamos tener que definir este proceso para compilar nuestra aplicación nosotros mismos o dejarle esa tarea a un IDE, y sabemos que siempre se va a ejecutar basada en un mismo principio.
  • Maven puede ser utilizado como un gestor de dependencias de nuestro Proyecto (Explicado en un proximo post). En Maven utilizar una libreria externa en nuestro proyecto es tan facil como agregar 3 lineas en un XML y esa libreria se encuentra disponible en todos nuestros proyectos sin tener que andar copiandola en cada carpeta de cada proyecto (en algunos casos de no poseer esas librerias Maven se encarga de descargarlas de internet para nosotros).
  • Maven nos brinda mayor comprensión de nuestros Proyectos. Maven tiene como uno de sus principios: "Convención sobre Configuración", esto hace referencia a que para la gran mayoria de los proyectos las propiedades de estos y las cosas que solemos configurarles tienden a ser las mismas, entonces por que no dejar esas configuraciones por defecto y hacerle perder menos tiempo al desarrollador, dejandole la posibilidad de que solo invierta tiempo en configuración para casos atipicos.
  • Maven nos permite referirnos a nuestros proyectos de forma Descriptiva, simplemente nos dedicamos a decir de que se trata, que cosas utiliza, etc. Y Maven "automagicamente" sabe como operar con estas caracteristicas y permite ir auto-documentando nuestro proyecto (Las caracteristicas muy interesantes que posee Maven sobre documentacion tambien se veran en un proximo post)
Maven puede ser utilizado para estas cosas y muchas mas... Maven si lo analizamos a fondo en cuanto a sus funcionalidades, veremos que es la aplicación en conjunto de muchos de los proyectos de Apache, donde para algun proyecto se necesitaba utilizar 5, 10, o la cantidad que fuera de herramientas de Apache (como Ant, Ivy, etc) ahora podemos simplemente utilizar Maven y tendremos todas esas funcionalidades.

Para descargar Maven se puede hacer del siguiente link.
En Linux puede ser instalado directamente desde el Gestor de Paquetes (Recomendado).
Para instalarlo es necesario tener instalado Java.

Para la instalación manual es necesario realizar los siguientes pasos.

Monday, July 6, 2009

Instalar GRUB luego de Windows (con Linux existente)

Bueno, para las pobres victimas que sufran como yo, teniendo que instalar GRUB luego de instalar Windows, manteniendo el Linux que ya estaba en la maquina, aca dejo la explicación de los pasos que hice:

La maquina en donde hice esto era una maquina que tenia una sola partición con Ubuntu 9.04, y desgraciadamente para mi jeje, estaba la necesidad de crear una partición donde se pudiera meter un Windows XP tambien para juegos.
Para redimensionar el disco, inicie con un LiveCD de Ubuntu, y utilice la Herramienta GParted (Se puede encontrar en Sistema-Administracion-Editor de Particiones), con esta herramienta podemos redimensionar una partición para asignarle mas o menos espacio, o dividir el espacio entre otras particiones que podemos generar en esa misma aplicación, como fue para este caso para poder instalar el Windows.

Imagen a modo de ejemplo (no tomar como referencia)

Ahora que ya tenemos nuestra partición creada para Windows, booteamos la maquina con el cd de Instalacion de Windows y procedemos a instalar Windows en la partición elegida como lo hariamos comunmente.

ADVERTENCIA: Si por algun motivo, al terminar de copiarse los archivos en la partición cuando estamos instalando Windows y nos pide de reiniciar la maquina, y esta no encuentra una unidad para iniciar y no puede continuar instalando Windows, lo que tenemos que hacer es volver a iniciar con el LiveCD de Ubuntu, abrir nuevamente GParted, y presionar el click-derecho sobre la partición donde instalamos Windows, elegir "Gestionar Flags" y marcar el Check Box de "Boot" y reiniciar la maquina.

Proseguimos con la Instalación de Windows de forma normal hasta terminar.

Una vez instalado Windows, vamos a necesitar instalar GRUB para que al inicio de la maquina nos deje elegir que Sistema Operativo iniciar, por el momento solo nos estaria iniciando Windows, por mas que ya teniamos un Linux instalado (Gracias F*#$ing Microsoft!)

Iniciamos la maquina nuevamente con el LiveCD de Ubuntu (ese es el que use yo, pero podria ser otro). Una vez iniciada la sesion con LiveCD vamos a necesitar montar la unidad donde estaba nuestro Linux ya instalado:

sudo mount /dev/sda1 /mnt

En mi caso, mi Linux estaba en sda1.
si no sabemos podemos fijarnos de dos maneras, abriendo GParted y viendo en que unidad esta nuestro Linux, o escribiendo en una consola:

sudo fdisk -l

Una vez que tenemos montada esa unidad, proseguimos con la instalacion del GRUB de la siguiente forma:

sudo grub-install --root-directory=/mnt /dev/sda1

Ahora que tenemos el grub instalado, abrimos una vez mas GParted, y en nuestra unidad donde tenemos el Linux (en mi caso "sda1"), presionamos el boton derecho del mouse, y seleccionamos "Gestionar Flags" y elegimos la Opción de "Boot" ahora para nuestro Linux.

Ahora ya tenemos el GRUB instalado y nuestra unidad de booteo configurada, pero si reiniciaramos la maquina veriamos que el Windows no aparece en la lista del GRUB, por eso realizamos lo siguiente, abrimos el archivo "menu.lst" de GRUB para modificarlo:

sudo gedit /mnt/boot/grub/menu.lst

y al final del archivo agregamos lo siguiente:

# This is a divider, added to separate the menu items below from the Debian
# ones.
title Other operating systems:
root

# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/sda2
title Windows Vista/Longhorn (loader)
root (hd0,1)
chainloader +1

Las lineas que contienen "#" al inicio son comentarios, donde se setea "Other Operating Systems" es simplemente un separador que se agrega al menu, lo que nos interesa a nosotros es la parte siguiente donde se setea para el arranque de Windows, en mi caso el Windows se encontraba en la partición identificada como "sda2" y la configuración para esta maquina es como se ve arriba (hd0, 1).
Lo que se deberia cambiar es el numero en (hd0, X), para que X identifique a nuestra unidad con Windows.

Una vez configurado ese archivo con las caracteristica de nuestra maquina, ya estamos listos para reiniciar la computadora y utilizar el GRUB.

TIP: Para el caso donde al instalar Windows XP (por lo menos, no se en los otros), haya detectado un Sistema Operativo existente, pero como es muy piola arma una opción de inicio entre Windows XP, y otro Windows XP fantasma que no funciona, lo que tenemos que hacer al iniciar en Windows, es ir a "Panel de Control - Sistema"
Una vez ahi, vamos a la solapa de: "Opciones Avanzadas" y presionamos el boton "Configuración" en la sección de: "Inicio y Recuperación".

Ahi nos abre otra ventana, donde presionamos el boton "Editar" y borramos la ultima linea que aparece en el archivo, que es una linea repetida de inicio de Windows. Cerramos el bloc de notas guardando los cambios, y en la ventana donde estabamos, le sacamos el Check a la opcion: "Mostrar la lista de sistemas operativos durante:"

Ahora ya tendriamos nuestro Linux y Windows bien instalados, y con el GRUB funcionando correctamente para los 2 sistemas.

Saludos!