lunes, 25 de enero de 2010

Cuanto sabe Google de ti?

Alguna vez te has preguntado que hace google con todas las cosas que buscas???... si nadie se va a enterar que buscaste fotos de Megan Fox y le diste click a ese link vago xD ... Pues la verdad es que Google retiene muchisima información de que es lo que haces en la web (resultados de busquedas, direcciones en mapas, sitios visitados, etc etc), ya sea que tengas o no una cuenta google... Pero si tienes una cuenta google y mientras ingenuamente revisas tu gmail, se te ocurre realizar una busqueda y mas aún si estas en tu pc donde siempres estas logoneado con el tipico check de "Remember me" puedes notar que al hacer la tipica busqueda en Google... estas "logoneado"




Y así el monstruo de los servicios en línea tiene todo tu historial de actividades... y si aún no lo crees pues ellos mismos te ofrecen una herramienta para ver tu historial web...
http://www.google.com/history/?hl=en




Y aqui el historial de cosas que he buscado entre ayer y hoy... como se puede ver al lado izquierdo están desde la búsqueda de imagenes, blogs, las noticias (que si leo en google news), en fin... todo el track de mi vida online... Preocupado x tu privacidad??? xD les dejo un excelente add-on para el firefox (GoogleSharing) que no le permite a google hacernos track ya que nos hace de proxy y nos genera una identidad anónima mientras navegamos con el firefox!!! Si algún PRO se le puede encontrar al asunto es el típico: "Alguna vez encontré en google pero no recuerdo el link..." lo cual en lo personal me ha sucedido muchísimas veces y lo he encontrado en mi historial web de búsquedas xD

Así que tú decides en si compartes o no tus preferencias en la web.





Saludos,
gish@c

sábado, 16 de enero de 2010

Edición en JTable con Db4o

Una de las ventajas de una base de datos orientada a objetos como Db4o, es la simplicidad al momento de trabajar con modelos de objetos un poco mas complejos. Este post es para mostrar como usando la flexibilidad de Java junto con Db4o (v7.4) se puede hacer un mantenimiento en un grid, al final el resultado se verá más o menos asi:



Como base tome las clases Car y Pilot que vienen en el tutorial de Db4o, y como se puede ver tiene un combo de seleccion de pilotos ya que es lo minimo que se requiere cuando se tiene un modelo de objetos así.
Lo importante aqui es sacarle el provecho al sistema de referencias de la base de datos, ya que al estar editando los objetos en el grid solo basta con hacer un update a la referencia que es esta editando para que se guarden los cambios, Las clases del proyecto se pueden ver en el gráfico a la izquierda.

El proyecto está con Netbeans 6.5, y en el pkg com.sample.objects estan los objetos mas importantes, los del pkg com.sample son los que agrega por default el nb para proyectos java desktop.
Las clases DBManager, CarDB, y PilotDB son las que se encargan de las consultas y actualizaciones a la base de datos; las clases importantes en las que entraremos en mas detalle son las Model ya que son las clases que se encargan de todo detras del JTable y es donde pondremos lo necesario para persistir cualquier modificación que hagamos directo en la tabla.
Lo principal es comenzar con el modelo que vamos a proveer al JTable para que sepa con lo que está lidiando, asi que extendemos de AbstractTableModel, y se sobrecargan los métodos requeridos, la sobrecarga clave para el ejemplo es del método setValueAt ya que para éste caso luego de establecer el valor a la propiedad actualizamos el objeto que fue editado:



public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
super.setValueAt(aValue, rowIndex, columnIndex);
Car car = getDatasource().get(rowIndex); //Aqui obtenemos la instancia del objeto que está siendo editado
switch (columnIndex) {
case 0:
car.setModel(aValue.toString());
break;
case 1:
car.setColor(aValue.toString());
break;
case 2:
car.setPilot((Pilot) aValue);
break;
DBManager.getInstance().getCarDB().storeCar(car);
}


Básicamente, fuera del código en Java para hacer edición en grid es el único llamado a realizar para persistir las modificaciones. Para que esto sea posible las clases model tienen una lista que utlizan como datasource

public class CarTableModel extends AbstractTableModel {
private List datasource;
.
.


public class PilotComboBoxModel extends AbstractListModel implements ComboBoxModel {
private Pilot current;
private List datasource;
.
.
.


En la clase EditPane se encuentra
la carga de las listas con lo que se obtiene de la base, los objetos se mantienen en el sistema de referencias de Db4o:

//Se carga la lista de pilotos en el combo para el grid
PilotComboBoxModel cmbModel = new PilotComboBoxModel(DBManager.getInstance().getPilotDB().getPilots());
cmbPilots = new JComboBox(cmbModel);
SetTableModel(cmbPilots);

private void SetTableModel(JComboBox cmbPilots) {
//Se carga la lista de carros a mostrar en la tabla
carTableModel = new CarTableModel(DBManager.getInstance().getCarDB().getCars());
//Al jtable carTable le seteamos el model y el editor para la columna de pilotos
carTable.setModel(carTableModel);
carTable.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(cmbPilots));
}


El código del ejemplo se lo pueden descargar aquí y Db4o por aca.

Para usar el ejemplo luego de ejecutar por primera vez el proyecto hay que comentar el llamado a la linea que llena la base de datos en la clase EditInTableDb4oApp.

public static void main(String[] args) {

DBManager.PopulateDatabase();// Comentar despues de primera ejecucion
launch(EditInTableDb4oApp.class, args);
}


En un siguiente post le agrego un par de cosas al ejemplo para cumplir con el CRUD, bueno... el Read es una busqueda que no es para el ejemplo asi que en realidad sera un CUD :P

Saludos,
gish@c