jueves, diciembre 28, 2006

Fin de año

El 2006 esta goteando sus últimos minutos.
Para mí será siempre un año difícil de calificar, no es como el 2005 al cual odie con toda mi alma, no conocí a nadie que no diga: ¡por fin se fue este año de mierda! cuando los petardos sonaban anunciando que la tierra había dado una vuelta más.
Este fue un año difícil, toque fondo, es más creo haber bajado hasta el fondo y luego seguir arañando la tierra para poder bajar aún más, y después de eso la roca, hasta que mis uñas se hicieron astillas.
Pero por otro lado, lo que no me mata, rápido es reciclado en una fortaleza, y aquel hueco se transformo en una trinchera más para resistir. Mi mente fue girando a la velocidad de la tierra unos 360 grados. Nuevos sueños surgieron borrando los viejos, nuevas esperanzas me dieron un leit motive, y mi destino comenzó a reescribirse.
Este año vivirá siempre en mi memoria como aquel en el que mi vida cambio de rumbo, como aquel en el que encontré la fortaleza para doblar en una esquina de la vida, como aquel en el que las cosas pudieron ser pero no fueron.
Feliz año nuevo a todos! Y nos encontramos en cualquier esquina de la vida.

sábado, diciembre 23, 2006

volviendo de cba

Buenooo…. Ya me fui a Córdoba… ya volví… el casamiento de Ariel, ya fue… el final que tenia que rendir también, huuff una menos, y de nuevo estamos por los pagos riojanos.
Así que… a comenzar a escribir de nuevo, hay muchas cosas que tengo que actualizar y que me pidieron los amigos.
Manos a la obra…mm pero mañana

lunes, noviembre 27, 2006

Zamba de Vargas

Por vivir a dos cuadras del lugar donde se llevo a cabo la ultima de las grandes batallas de la guerra intestina argentina entre unitarios y federales, pozo de vargas, quizás por eso hoy me sentí con la obligación, previo debate familiar, de averiguar un poco mas sobre dicha batalla y su zamba. Me preguntaba por que la zamba tiene un marcado tono de propaganda unitaria cuando los que la compusieron originalmente eran los músicos de Felipe Varela, caudillo de origen catamarqueño pero de acento riojano, federal hasta el tuetano, por que hasta ahora parecería que la zamba alentó a los hermanos Taboada a ganar el combate. Y una ves más, comprobé que a la historia la escriben los que ganan, o por lo menos a las historias más difundidas y oficializadas. La zamba original dista bastante de la más popular de sus versiones, a la cual todos llamamos “Zamba de Vargas”. Aquí les dejo la versión original.

 Los “nacionales” vienen
¡Pozo de Vargas!
tienen cañones y tienen
las uñas largas.
¡A la carga muchachos,
tengamos fama!
¡Lanzas contra fusiles!
Pobre Varela,
qué bien pelean sus tropas
en la humareda.
¡Otra cosa sería
armas iguales!

Si les interesa la historia

lunes, noviembre 20, 2006

Tablas en java I –Jtables, Modelos,TableModel, JScrollPane

Las tablas en java son otros de los componentes difíciles de crear para los usuarios inexpertos. Quizás por sus grandes capacidades y posibilidades de utilización, es que no se crean con un simple arrastrar y soltar con nuestro ide favorito, o por lo menos no como nosotros queremos.
Importando javax.swing.JTable ya estaremos en condiciones de empezar a crear tablas. Pero a los fines de explicar la forma más sencillas de crearlas, no comenzaremos por ahí. Ya que, a mi entender, lo mas fácil es crear un modelo de tabla que luego utilizaremos. Luego crearemos la tabla, y finalmente crearemos el JScrollPane que la contendrá, para hacer la tabla escrolable.

Creando un Modelo de Tabla –TableModel

El modelo de tabla será aquel que determine la forma que nuestra tabla tendrá, y su comportamiento ante los eventos.
Generalmente utilizamos un tabla para listar algo, o cargar datos de forma rapida, por ejemplo personas. En este ejemplo utilizare una clase Personas que tiene tres atributos: Apellido, Nombre (Strings) y número de documento (int).
Lo primero que hay que hacer es crear una clase que implemente la interfaz TableModel. En dicha clase se instanciaran tres variables; dos del tipo LinkedList y una del tipo Persona.

public class MyModelo implements TableModel{
private LinkedList datos = new LinkedList();
private LinkedList listeners = new LinkedList();

Peronas persona =new Peronas();

….
}

La clase LinkedList es una especie de lista que permite incluir y manejar elementos a través de operaciones. Pudiendo ser de cualquier tipo, incluso null. Esta clase nos brinda métodos uniformados para insertar, borrar, obtener y poner elementos en la lista.
La implementación de la interfaz TableModel nos obliga a la utilización de algunos métodos que mostrare a continuación:

1)
public int getColumnCount() {
return 3;
}

Este metodo determina la cantidad de columnas que la tabla tendera. Por ejemplo si queremos que la tabla tenga 3 debemos retornar el numero 3

2)
public int getRowCount() {
return datos.size();
}

Retorna la cantidad de filas, se basa en la lista de elementos declarada con anterioridad.

3) Hora viene uno de los métodos mas importantes el que servirá para obtener los datos de la lista.

public Object getValueAt(int rowIndex, int columnIndex) {
Personas aux;
//castemos el dato de la lista a una variable del tipo Personas
aux = (Personas)(datos.get(rowIndex));
// Se obtendra la persona seleccionada según el numero de fila
switch (columnIndex)
{
case 0:
return aux.getDni();
case 1:
return aux.getApellido();
case 2:
return aux.getNombre();
default:
return null;
}
}

4) asi como tenemos el metodo get existe el metodo set

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Personas aux;
aux = (Personas)(datos.get(rowIndex));
switch(columnIndex)
{
case 0:
aux.setDni((Integer)aValue);
break;
case 1:
aux.setApellido((String)aValue);
break;
case 2:
aux.serNombre((String)aValue);
break;
default:
break;
}

TableModelEvent evento = new TableModelEvent (this, rowIndex, rowIndex,
columnIndex);
avisaSuscriptores (evento);
}

aValue es un objeto que se pasa como parametro y que contendrá, en nuestro caso, a la persona, pero para convertirla primero debemos castearlo.
Un TableModelEvent se utilizar para notificar a los suscriptores (todos aquellos que necesitan conocer las actividades que se realizan sobre el modelo, por ejemplo la tabla) que el tablemodel a cambiado.

5)
public Class getColumnClass(int columnIndex) {
// Devuelve la clase que hay en cada columna.
switch (columnIndex){
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return String.class;
default:
return Object.class;
}
}

Nos permitirá obtener las clases de cada columna para utilizarla después.

6)
public String getColumnName(int columnIndex) {
switch (columnIndex)
{
case 0:
return "DNI";
case 1:
return "Apellido";
case 2:
return “Nombre”;
default:
return null;
}
}
Este metodo permite definir el nombre de los campos que saldran en el encabezado de la tabla.

7)
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}

Determina si la celda es editable, nosotros podemos jugar con condicionales para determinar que columnas serán editables y cuales no. En este caso todas las celdas son editables.

8)
public void addTableModelListener(TableModelListener l) {
// Añade el suscriptor a la lista de suscriptores
listeners.add (l);
}

9)
public void removeTableModelListener(TableModelListener l) {
// borra un suscriptor
listeners.remove(l);
}

Una ves que terminamos con todos lo métodos que se nos exige implementar, podemos empezar a crear nuestros propios métodos para el manejo de los datos de las celdas.
Lo primero que aremos será crear el método que avise a los suscriptores que el modelo a cambiado y por lo tanto la tabla deberá cambiar.

private void avisaSuscriptores (TableModelEvent evento){
int i;
for (i=0; i
((TableModelListener)listeners.get(i)).tableChanged(evento);
}

Después comenzaremos a crear los metodos para insertar, borrar y acualizar las personas de la tabla

Insertar

public void insertarPersona (Personas nuevaPersona){
// Añade la persona al modelo
datos.add (nuevaPersona);
// Avisa a los suscriptores creando un TableModelEvent...
TableModelEvent evento;
evento = new TableModelEvent (this, this.getRowCount()-1,
this.getRowCount()-1, TableModelEvent.ALL_COLUMNS,
TableModelEvent.INSERT);
// ... y avisando a los suscriptores
avisaSuscriptores (evento);
}

Con el metodo LinkedList.add() agregamos un elemento a la lista de elemntos que contiene los datos de las personas. Después de ello debemos crear un TableModelEvent que permita notificar de la inserción del dato a la lista.

La estructura del constructor del TableModelEvent que utilizamos es:

TableModelEvent(TableModel modeloDeTabla, int filaInicio, int filaFin, int columna, int tipoEvento)

En este caso en particular, estamos incertando en la ultima fila por que la fila de inicio y de fin es la misma , los cambios se realizarán en todas las columnas, y el evento es un INSERT.

Borrar

public void borrarPerona (int fila){
datos.remove(fila);
TableModelEvent evento = new TableModelEvent (this, fila, fila,
TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE);

avisaSuscriptores (evento);
}

Similar a al anterior pero para borrar.

Actualizar

public void updateTurno(Turnos turno_completo, int fila){
datos.remove(fila);
datos.add(fila,turno_completo);
TableModelEvent e =new TableModelEvent(this,fila,fila,TableModelEvent.ALL_COLUMNS,TableModelEvent.UPDATE);
this.avisaSuscriptores(e);
}

A la hora de realizar el update, prefiero primero remover de la lista el elemento (persona) que se encuentra en el lugar indicado por el parametro fila, para despues realizar la acutalizacion.

Construyendo la tabla

Una vez creado el modelo de tabla que vamos a utilizar, solo resta crear la tabla.
Después de ver distintos códigos de cómo se crearon tablas y scrollpane, y luego se le asignaban restricciones, layouts y metodos etc, etc, encontré navegando la forma mas sencilla de crearla:
En el frame que vamos a utilizar, podemos arrastrar y soltar algún JScrollPane así lo ubicamos y le damos el tamaño que deseamos. Luego vamos al codigo y escrivimos:

MyModelo modelo =new MyModelo();
JTable tabla =new JTable(modelo);
JScrollPane jScrollPane1 =new JScrollPane(tabla);//este es el scroll creado por el ide y
//le modificamos el constructor pasandole como parametro la tabla

Sencillito no? y así, como por arte de magia tendremos una tabla. Eso si después si queremos, podemos agregar código para darle a nuestra tabla un comportamiento mas profesional.

Trabajando con los datos de la tabla

Si queremos cargar un dato de la tabla a una variable para que la podamos manejar directamente de la memoria podemos hacer uso del los eventos del Mouse o de algún botón. Se puede realizar código que cargue todos los datos o seleccionar uno… en fin las posibilidades son muchas.

En el caso de insertar la persona hacemos:

Personas p = new Personas(25425456,”Lopez”,”Juan”);
modelo.insertarPersona(p);

..y la persona se agregara al final de la tabla.
De forma similar trabajamos con el resto de los métodos del modelo.
Mas adelante, escribiré como definir el tamaño de las columnas, y las posibilidades de agregarle componentes a las celdas, imágenes, colores, etc.
Espero haber sido de ayuda, saludos y hasta la proxima.

viernes, noviembre 17, 2006

Dra Valeria Diaz Molina


-… Diaz Molina… ¿esta Diaz Molina?
- Si aca estoy! – dijo con las voz entrecortada con la nata de la ansiedad y el miedo.

- Pase sigue ud!

El pasillo colmado de estudiantes se dio vuelta para ver marchar a la próxima victima. Minutos antes, una estudiante, de ropas sencillas, salía del aula con una sonrisa poco dibujada,pero plena de estoicismo, sonrisa que paso a paso se lavaba con el dulzor de las lagrimas que pretendía esconder al alejarse.
Aquella tarde mi hermana no caminaría hacia el patíbulo, caminaría hacia la gloria.
Sus tacos cortaban el silencio, los que aguardábamos afuera, nos robábamos todo el aire al contener la respiración. Ella avanzaba, y sus alas se desplegaban, finas plumas nacían desde su espalda, la brisa de frente la elevaba hasta perderla en su jaula de cristal.
En capilla, no había bolillas a repasar, no se cruzaban por la mente artículos, ni libros, ni buques, ni aviones, solo corrían imágenes de años de esfuerzos, de los que siempre estuvieron, de los que ya no están, de las esperanzas, de los fracasos, de las alegrías, de las tristezas, una película con miles de cuadros por segundos, con rostros y momentos llenos de sentimientos.
-
… Adelante Diaz Molina…- Dijo ese que no entiende de esfuerzos ajenos – Hábleme de…
Y su luz empezó a brillar, sus manos dibujaban figuras, no había flancos, no había dudas… aquella seria su tarde.

miércoles, noviembre 15, 2006

Fechas under Java - Calendar, getInstance(), get(), set(), add(), compareTo()

La clase a utilizar será Calendar de java.util. Esta clase nos brinda información sobre todo lo que tenga que ver con el tiempo, es muy completa, las zonas horarias que utilizamos, y cualquier cosa que se nos pueda ocurrir.
Como es un clase abstracta, no puede ser instanciada, es decir que no tendrá un constructor típico “new Calendar()”, en ves de ello utilizaremos el método getInstance()

Calendar fecha= Calendar.getInstance();

En fecha quedaran almacenados los datos del sistema (hora, fecha) del momento en que fue creada, si pretendemos ver que tipos de datos maneja, podemos hacer uso del método toString()

System.out.println(fecha.toString());

Obteniendo y poniendo Fechas

Para asignar valore y obtenerlos utilizaremos los métodos get() y set(). Pero primero lo primero, las constantes que nos permiten setear son enteros por lo que deberemos guardarlos o poner enteros. Las agregaría acá pero con solo poner un “.” En su IDE favorito se desplegaran todas las que se imaginan y un poquito mas.

Comenzaremos por obtener los datos

//calendar.get(int campo);
Int hora = fecha.get(Calendar.HOUR);

Siempre deberemos utilizar el nombre de la clase un punto y la constante deseada. Las constantes más communes a utlilizar son HOUR, HOUR_OF_DAY, MINUTE, SECOND, DAY_OF_MONTH, MONTH, YEAR, DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH. Estas ultimas nos sirven para cuando queremos trabajar con los días de la semana como lunes, martes… etc. Nos devolverá un número que mas tarde podremos convertirlo en un String.

Poner los datos deseados
podemos poner un solo dato...
Int hora = 13;

//calendar.set(int campo,valor);
fecha.set(Calendar.HOUR_OF_DAY, hora);

o todos los que deseamos a la ves...
fecha.set(int años, int mes,int dia);
fecha.set(int año,
int mes,int dia,int hora_del_dia, int minutos)
fecha.set(
int año,int mes,int dia,int hora_del_dia, int minutos, int segundos);

Si vamos a trabajar con horas, debemos hacer la distinción ente HOUR y HOUR_OF_DAY, la primera nos mostrará la hora de 0-11 y la segunda de 0-23. Si vamos a trabajar con meses deberemos restarle uno, así por ejemplo noviembre será el mes 10.

Sumar a una Fecha

para sumarle a una variable de tipo Calendar podemos utilizar el método add(), aunque si se desea se puede utilizar el método roll().

//Calendar.add(int campo, int aumento)
hora.add(Calendar.HOUR_OF_DAY,2);

Así se incrementaran dos horas, a la hora de la instancia. Trabajo similar se puede realizar con cualquiera de las constantes.
El método roll() tiene dos formas:
El primero de ellos tiene un comportamiento similar al del metodo add() pero la diferencia yace en que se incrementara sin cambiar los campos superiores. Por ejemplo se incrementaran los minutos pero cuando se produzca un incremento en la hora, esta no cambiara a difrencia de add(). Y la llamada al metodo puede ser de dos formas:

//1) fecha.roll(int campo, int incremento);

El segundo es como un contador
//2) fecha.roll(int campo, boolean arriba);
Dependiendo del valor boolean se incrementara en uno hacia arriba o decrementara hacia abajo.

Compardando dos calendarios
El metodo a utilizar es compareTo(Calendar otro)

//Calendar.compareTo(Calendar otro_calendario)
Calendar hora1= Calendar.getInstance();
Calendar hora2=Calendar.getInstance();
hora2.add(Calendar.MINUTE,1);
int d =hora1.compareTo(hora2);

Nos devolverá -1 si hora1 es menor que hora2, 0 si son iguales, y 1 si el primero es mayor que el segundo.

Sacando diferencias entre calendarios

Yo en este caso utilice formulas matemáticas para sacar diferencias entre los calendarios, también se puede sacar las diferencias entre milisegundos, pero esas diferencias igualmente se deben convertir, es por ello que preferí crear mis propios métodos. Por ejemplo para sacar la diferencia en minutos entre una hora y otra en el mismo dia…

Int diferencia = (hora1.get(Calendar.HOUR_OF_DAY)*60+ hora1.get(Calendar.MINUTE)) -(hora2.get(Calendar.HOUR_OF_DAY)*60+ hora2.get(Calendar.MINUTE))

Y jugando con valores negativos y positivos.
Tan simple como lo visto es trabajar con calendarios. Espero haber ayudado.

Tecnicamente hablando...

Recorriendo Internet, under Java, me costo mucho recoger información en castellano, es por ello que empezare a escribir sobre las cosas que me costaron mas encontrar, este será mi aporte a
al conocimiento y a la evangelización de la iglesia de “Sun Java”.

lunes, noviembre 06, 2006

Regresando

Intente no escribir algo como volviendo a empezar, o renaciendo, o alguna palabra así que marque el retorno de mi vida blogosfera, pero es imposible. Deje de de escribir hace mucho tiempo, mi ultimo post quedo cubierto de telarañas digitales, en marzo de un año de cambios.
Muchos cambios transcurrieron en mi vida, retorne a mi ciudad natal, esa de las tierras de arcilla, de las tonadas con canto, de las “erres” eternas, de lapachos y de pausas al caminar. Aquí mi madre, mi hermana y los recuerdos me encontraron llegar palmado de bolsos e incognitas, a una terminal de ómnibus, de paredes amarillas.
Es difícil escribir de nuevo, es difícil pensar con los dedos cuando las palabras ganaron la batalla en mis pensamientos. Con la edad, hay algunas buenas costumbres que cesan, que descansan y callan, ese es el caso de mi escritura. Unos meses atrás, pensaba que ya no podría escribir de nuevo, que mis musas avían sido apuñaladas en algún oscuro callejón. Pero aquí están de nuevo, como samurais, gargüeando su propia sangre, pero con el espíritu de su Katana intacto. Dispuestas a caminar renglones, a soñar en nuevos párrafos, a morir en ellos, y revivir en nuevos escritos, a cincharse el cinturón por la tristeza y despanzarce en la risa.
Los desafíos son grandes, queda mucho por concretar, sueños reencarnados y propios esperan.

lunes, marzo 27, 2006

A mi amiga, a mi amante, a mi mujer

Quienes somos? La voz de mis miedos susurra, quienes fuimos? Dos montañas con profundos abismos a nuestro alrededor, dos ríos corriendo paralelos en la misma pradera, dos historias cercanas. Fuimos amantes con heridas en el alma, con miradas desconfiadas, con caricias negadas. Fuimos el dolor mas grande, el abandono, la desidia, el desamor, fuimos mentiras, disimulos, viviendo un amor agúlico, sin hambre, incapaz y convaleciente. Dicen por ahí que las relaciones no se pierden, simplemente se transforman, simplemente pasan a ser otra cosa: conocidos, amantes, enemigos, maridos. Que seremos nosotros? Cual será nuestro destino? Solo el tiempo y nuestros sentimientos lo dirán. Pero nos debemos la oportunidad, nos debemos la libertad, nos debemos esas noches de pasión y entrega que alguna vez nos caracterizo, nos debemos la experiencia compartida, nos debemos amor, ese que siempre estuvo, y que escondió su cara entre el dolor y la negación.
La vida es un libro, con paginas finitas, que se escriben de puño y letra una a una, pero yo me negué a escribir nuevas, siempre volvía a aquel preámbulo que una ves escribimos juntos en un semáforo de cuatro tiempos, allí donde nuestros labios comenzaban una historia, digna de ser contada y vivida, una historia de luchas y olvidos, de amor y traiciones, una historia humana y divina.
En la garita de la confesión nos desnudamos, allí dejamos nuestros pecados, en una tarde de sinceridad, nos dijimos cosas que retumbaran una vida, nos gritamos de montaña a montañas las verdades que nos liberaron, aquellas que esperaron toda una vida. Amor mío, si alguna ves llegamos a la sima del cielo, lo aremos como ángeles redimidos en el dolor y la grandeza del perdón. En el amor eterno, ese libre de la carne, ese que nos trajo de vuelta de mas allá del inframundo de los amantes perdidos.
Es por ello que en esta carta te digo adiós, ve y sigue tu destino, ve y construye alegrías, encuentra tu alma en alguna nube escondida, encuentra la redención y la paz, aquella libre de tormentos, y solo cuando lo hagas, cuando tus manos estén fuertes para el amor, libera tus alas, despliégalas al viento, y vuela, tan libre como puedas, hacia aquel paraíso del amor eterno, donde nos volveremos a juntar, para abrazarnos de por vida, bajo la sombra de las cosas por vivir.

Adiós, bienvenida.

lunes, marzo 06, 2006

He dejado de escribir ya hace mucho tiempo, mi mente silencio mis manos. En una esquina de un cuarto oscuro, me encerré a llorar las penas de mi corazón, bambaleante e introspectivo, con los brazos sosteniendo mis piernas replegadas, me entregue a las sodomías de un corazón atormentado, desilusionado y abatido. ya que todo lo planeado y soñado, fue solo la ilusión del amanecer en una caja, mis peores miedos comieron sobre porcelana, festejando su victoria. Confieso que el proceso marcho desde la locura, el odio, el amor, el orgullo, la ironía, la comparecencia, hasta descansar en los regazos de la paz. He hecho las paces con mi corazón y mi mente, mi espíritu descansa, mis ojos recuperaron su brillo, de esperanza y amanecer. La conocí en primavera y finalmente no cambiaria por nada del mundo aquella estación, ni aquel año. Pues aquella ilusión, me llevo a encaminarme en mis sueños, a proteger mis ideales, a luchar por aquellas cosas que en la vida trascienden, a charlas de veredas con maestros sin títulos, a hacer las paces con mis tormentos, y vencer mis demonios. Después de un tiempo infinito, después del tormento, después del dolor de la pérdida, estoy listo para girar la ruleta del destino una ves mas y apostar todas mi fichas a una nueva esperanza, después de lo aprendido, abatirme será imposible, ni en bayonetas de amor escondido, encontrara la desilusión su esperanza. Hoy las piernas vuelven a estirarse, el rostro a afeitarse, la frente recupera el orgullo, las ropas se embeben en colores floridos, hoy el andar deja huella, y mi ejercito de ángeles alados vuelven a ganar respeto.
Si puedes perderlo todo, despues trabajar duramente para recuperarlo, y luego ser capaz de volver a aportarlo toda a un solo giro del destino, entonces, el cielo será tuyo, ya que la suerte esta en favor de los valientes.
Hoy me encuentro ante un Ariel que marcha sin prisa pero con firmeza a conseguir su objetivo, por sus seres amados, por los que quedaron en el camino... pero principalmente, por aquel que se lo merece, por Él mismo.