»
S
I
D
E
B
A
R
«
Swing es una fea bestia incomprendida. JTable parte 1
Nov 10th, 2009 by Ed_Zero

Downloading tutorial.

Ok, estas usando java, quieres hacer una aplicación de escritorio y tu aplicación lleva tablas y botones y cositas por aqui y por allá y no sabes por donde empezar. Es entonces cuando te das cuenta

Swing es una bestia.

Swing es feo.

Swing es incomprendido.

Ok, Ahora vamos a ver un poco sobre tablas y como manejarlas para que hagan lo que tu quieres y no lo que ellas quieran.

La tabla es un componente muy complejo pero muy util en interfaces les permite desplegar muchos datos de un solo golpe, sin embargo no son tan sencillas como uno desearia.

Las tablas empiezan siempre por algo sencillo como:

image

package net.edzero.tableDemo;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class MainClass {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTable table = new JTable(3, 3);

        JScrollPane tableScroll = new JScrollPane(table);

        frame.getContentPane().setLayout(new BorderLayout());
        frame.getContentPane().add(tableScroll, BorderLayout.CENTER);

        frame.setVisible(true);
    }
}

Ok paso 1. una de dos o extendemos la tabla o le hacemos un metodo para crear una tabla de otra manera la cosa se va a poner fea despues por que vamos a tener mucho codigo.

creamos la clase CustomTable y cambiamos la linea:

JTable table = new JTable(3,3);

por

JTable table = new CustomTable();

y ahora tenemos un lugar donde hacer nuestro codigo “real”

package net.edzero.tableDemo;

import javax.swing.JTable;

public class CustomTable extends JTable {
    private static final long serialVersionUID = 1L;

    public CustomTable() {
    }
}

muchas veces en swing se usa esta forma para personalizar componentes, en vez de meter el codigo de personalización en un método se prefiere heredar un componente y ahi poner el codigo de personalización ya que esto da como resultado un componente reusable y nos permite estructurar mejor el código.

Ok ahora a lo que nos truje. Parte 1.

EL MODELO DE DATOS

Las tablas usan modelos de datos para mostrar los datos en pantalla, estos datos se almacenan en un modelo, hay un par de reglas a seguir en este negocio.

  1. El modelo de datos a usar se debe de colocar una vez y despues solo modificarlo para asegurarnos de que se mantenga integro en todo momento.
  2. El modelo de datos especifica los datos que se encuentran en cada celda de la tabla por lo que hay que alimentarlo correctamente.

Ahora tenemos un problema:

La tabla usa 2 modelos uno para las columnas y otro para los datos.

Las clases son: TableColumnModel y TableModel (bueno son interfaces) las clases concretas son: DefaultTableColumnModel y DefaultTableModel.

Tenemos que poner ambas en la tabla, una que diga que columnas queremos y otra que nos diga que valores queremos en la tabla.

Normalmente queremos las mismas columnas solo distintas filas por lo que vale la pena separar esta funcionalidad en un metodito que lo haga todo por nosotros.

La clase de la tabla debe quedar asi:

package net.edzero.tableDemo;

import javax.swing.JTable;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class CustomTable extends JTable {
    private static final long serialVersionUID = 1L;
    private DefaultTableModel model;

    public CustomTable() {
        TableColumn columnaNombre = new TableColumn();
        TableColumn columnaEdad = new TableColumn();
        TableColumn columnaCredito = new TableColumn();

        columnaNombre.setHeaderValue("Nombre");
        columnaEdad.setHeaderValue("Edad");
        columnaCredito.setHeaderValue("Crédito");
        columnaNombre.setModelIndex(0);
        columnaEdad.setModelIndex(1);
        columnaCredito.setModelIndex(2);
        DefaultTableColumnModel columnas = new DefaultTableColumnModel();
        columnas.addColumn(columnaNombre);
        columnas.addColumn(columnaEdad);
        columnas.addColumn(columnaCredito);

        model = new DefaultTableModel();
        model.addColumn(columnaNombre);
        model.addColumn(columnaEdad);
        model.addColumn(columnaCredito);
        this.setModel(model);
        this.setColumnModel(columnas);
        // A partir de aqui es codigo para probar. lo vamos a quitar luego
        addRow("Eduardo", 27, 9999);
        addRow("Dora", 27, 8230);
        addRow("Juan", 27, 7212);
        addRow("Fernando", 27, 4224);
    }

    private void addRow(String nombre, Integer edad, Integer credito) {
        model.addRow(new Object[] { nombre, edad, credito });
    }
}

Sé que se ve mas fea. pero vamos un poco a las tripas de esta bestia (incomprendida)

Se ve complicada por que swing complico todo. primero vamos al metodo addRow del final que es el mas chiquito.

  • Add Row usa el model por default de swing que ponemos en el constructor e invoca addRow en el con un parametro feo que es vilmente un arreglo de lo que debe de poner en cada celda de esa fila. primero el nombre y despues la edad y al final el credito.

Ahora si al constructor.

  • Primero declaramos 3 columnas, ahi no debe haber mucha ciencia.
  • Despues a las columnas les ponemos un headerValue que es lo que va a mostrar en el encabezado
  • Despues el model index que es de donde vamos a sacar el dato a mostrar en esa columna, si no ponemos esto entonces nos va a mostrar SIEMPRE lo que este en la posicion 0,X
  • Despues creamos el tableColumnModel y agregamos esas columnas al modelo.
  • Despues creamos el tableModel y le agregamos las columnas tambien (esto es por que swing apesta, o al menos la implementación DEFAULT apesta)
  • despues asignamos ambos a nuestra tabla.
  • Finalmente unos datos de prueba que vamos a quitar cuando acabemos.

Es importante que ahora que pusimos el modelo NO LO CAMBIEMOS es decir no podemos volver a llamar setModel o setColumnModel por que esto destruiria lo poco que llevamos de la tabla.

Siguientes pasos:

Pues el codigo de las columnas puede ir a dar a una enumeración o cosas asi, aqui podemos ser creativos.

Download complete…

Como comprar en la tienda virtual de sony/nintendo
Oct 1st, 2009 by Ed_Zero

Downloading tutorial.

Sony te odio.

Ok despues de la emotiva introducción para todos aquellos que no vivan en estados unidos y hallan escuchado sobre la PSNetwork Store habrán notado que muchas cosas faltan. Por ejemplo en méxico: el epilogo de prince of persia, el modo versus de Resident Evil, Los capitulos adicionales de Valkyria Chronicles etc.

Por que? por que se supone que esos juegos (y todos lo que no encuentren add-ons) no estan legalmente liberados en el pais.

Pero digamos que quieren comprar algo, o bien redimir un código (como los de rockband track pack)

Como le hago?

  • Bueno primero que nada necesitan crear una cuenta en su playstation 3.
  • A esa cuenta le crean una cuenta nueva de la playstation network.
  • Esa cuenta la crean con una dirección de estados unidos, busquen una en google maps, si no recuerden que el zip code de beverly hills es 90210 y que eso está en california :p
  • Obviamente van a necesitar una cuenta nueva de correo electronico
  • No necesitan una tarjeta de credito (aun)
  • ya que completen el registro ya la armaron.

Ahora bien, con esta cuenta pueden redimir sus codigos del rockband track pack. pero como compran cosas?

Bueno lo siguiente requiere de contactos. No pueden comprar credito con tarjeta, entonces como le hacen? pues aplican la del amigo gringo (o mojado o que vive por alla) y le piden que pase a un gamestop y que les compre unas tarjetitas prepagadas los codigos los redimen en su cuenta de EEUU y ya estan.

Lo chido de todo esto es que el contenido que descarguen va a estar disponible en todas las cuentas locales del playstation.

—————

Ahora en el wii… compren creditos en mexico, cambienle la region a su consola y listo.

PERO lo que he notado es que casi nada falta en la tienda virtual de nintendo. a lo mas uno que otro juego en japones pero probablemente no lo quieran para empezar.

Download complete.

Gadget review: Iphone 3gs
Sep 14th, 2009 by Ed_Zero

Downloading review…

Bueno si vieron mi anterior post veran que tenia un serio problema de dispositivos… muchas cosas y medio complicado de controlar todo al mismo tiempo. En fin le di una oportunidad al nuevo Iphone 3gs y pues no esta tan mal.

Ok, que trae de distinto al 3g? bueno dicen (por que no tengo un 3g para compararlo) que es mas rapido, pero eso si contra un ipod touch de segunda generacion si es mucho mas rapido, carga aplicaciones mejor y es mucho mas estable (se traba menos) ademas de que creo que trae mas memoria lo que hace que no tengas que reiniciarlo para correr algun juego pesado como su predecesor.

Otra mejora es la brujula, que ahora en la aplicacion de mapas no solo te dice donde estas sino tambien hacia donde estas viendo. solo tiene un ligero problema: recibe demasiada interferencia de dispositivos cercanos especialmente dentro del auto. no se si son las bocinas, el motor, el estereo o que diablos pero siempre que me subo al auto no marca nada la brujula y eso si esta gacho. La interferencia no se presenta en todos lados del auto solo en algunos pero aun asi como que andar cachando donde no tienes interferencia es molesto. Definitivamente no es un buen sustituto de gps aun (mucho menos en méxico que no hay mapas con rutas).

Esteticamente es igualito al 3g, y en general es un aparato bastante bonito, la verdad hasta puedes hacer que combine con tu ropa (como la mayoria de las cosas de apple, pero eso será en otro post) asi que si te faltan accesorios en tu atuendo te vas a ver bastante bien con uno de estos (lol XD) no, en serio el aparato la neta está chido.

Fuera de eso es un turbo telefono. La verdad hace muchas cosas, es un buen lector de correo, tiene un web browser muy superior a un telefono estandar, puede servir para el twitter, blogs, facebook y otras mugres mas, hace un buen intento para hacerla de consola portatil de videojuegos, etc.

En si hace muchas cosas. PEEEEROOO~~~ si tiene sus cositas que le faltan, por ejemplo.

Web browser sin “adobe flash player”

Falta de soporte para escribir en su disco duro (asi que no puedes meter archivos ni usarlo como pastilla usb

Sincronizar tu correo, notas y cosas es mucho mas engorroso que con una pda estandar (admitamoslo itunes medio apesta en ese sentido)

La camara no tiene flash ni lucecita (hoy en dia los celulares traen algo aunque sea para fotos oscuras

El soporte bluetooth es una mala broma, no puedes mandar ni recibir archivos por bluetooth solo sirve para conectar audifonos y manos libres.

Y bueno las restricciones que pueda imponer apple en su dispositivo y en itunes (mas de esto en otro post, lo prometo)

No es un mal dispositivo, no me malinterpreten, en realidad es bastante bueno y las cosas que le faltan normalmente hay una aplicación que les ayudará a darle la vuelta.

Por ejemplo: lo de la pastilla usb se soluciona con una app que guarde documentos y para transferirlos al telefono usas ftp (aparentemente eso si esta permitido), para el bluetooth hay una aplicacion que te permite mandar y recibir fotos de otros iphones por bluetooth (lo triste es la parte de entre solo iphones)

Ahora el review de las cosas tipicas.

Es buen celular? SI, funciona y funciona muy bien, encontrar contactos es fácil, ver las llamadas tambien, marcar tambien y el visual voice mail es la pura onda.

Que tal el teclado? Te acostumbras demasiado rápido en serio. uno lo ve como muy complicado pero en serio que es la onda. (y el soporte para escribir en japones en serio que no tiene comparación con otro celular)

Lo unico no tan chido es el reconocimiento de voz por que se pone fino muchas veces y no te reconoce bien. sobre todo por que puedes controlar casi todo lo que hace el telefono. imaginense le puedes decir: “reproduce el album _____” y lo hace! o bien: “quien es este artista?” y te contesta! obviamente eso hace que se haga bolas entre tantas mugres que hace, digo algo malo tenia que tener, no?

En fin, supongo que si quieren mas detalles siempre pueden ver el sitio de www.apple.com.mx y verlo por ustedes mismos.

Ah bueno un punto malo: El precio. esta carito el aparato y la renta pues si esta gacha sobre todo por que si necesitan un plan con internet ilimitado o de otra manera van a sufrir altos cargos por uso de red (esta cosa checa internet a cada rato), aunque creanme que el precio no es tan elevado ya que en EEUU si esta mas barato el aparato pero el precio implica que vas a tener un plan a 2 años con at&t de a 70 dolares al mes (mas impuestos) como 80 usd al final. asi que no está  TAAAAAAN mal.

Download Complete.

Gadgets…
Sep 13th, 2009 by Ed_Zero

Downloading content…

Ok, a mi siempre me han gustado los gadgets, no puedo negar que es interesante ver todas las cosas que salen, reproductores de mp3, celulares, camaras, pda’s etc…

Y bueno he aqui mi versión del iphone:

BEHOLD:

041

Digo, que mas perfecto puede ser? un ipdo nano de 2gb para musica, una palm lifedrive para organizar mis contactos y agenda y un celular nokia 5610 con bluetooth para integrar todo junto.

Entonces como es un dia tipico.

pues escucho musica en el ipod, si le voy a hablar a uno de mis contactos saco la palm lo busco ahi y le doy marcar para que lo mande a mi cel y este haga la llamada.

Lo perfecto de este esquema es que tengo baterias independientes para todo.

veo videos en la palm y si se acaba la bateria puedo escuchar musica y si se acaba la bateria pues uso el telefono.

Cargadores? No problem!

simplemente los pegas todos con cinta canela a un multicontacto y ya solo cargas con un cargador. y si el multicontacto tiene supresor de picos mejor aun.

Conectividad? No problem at all!

haces lo mismo con los conectores usb, los conectas todos a un hub y ya.

Integracion? BAH!

con suerte podras mantener todos los dispositivos sincronizados con outlook o windows o lo que sea que uses.

 

A quien engaño… se ve engorroso a mas no poder… pero bueno no es tan malo siempre puedes presumir que tienes un buen de gadgets al final del dia.

Download complete…

Whack a kitty
Aug 13th, 2009 by Ed_Zero

Downloading image.

 Whack_a_kitty

Normalmente no ponia estas cosas pero la neta vi esta imagen y se me hizo imposible no ponerla en algun lugar.

me he quedado sin palabras al verla.

Supongo que pierdes si se salen todos los gatos.

Yo quiero algo así :3

Download complete.

Remote office. A la hora de la comida.
Aug 3rd, 2009 by Ed_Zero

Imagen014

Algo bueno de hacer remote office es la hora de la comida… como podran ver de hambre no me muero.

El menu del día: Pure de papa preparado en casita por mi hermosisisima esposa. Spageti (o como se escriba) inventado por mi talentosisima e inteligente esposa y la pechuga de pollo cocinada por mi (sin adjetivos por que la verdad no tuvo mucha ciencia)

De beber puede ser coca o chela, pero como es hora de oficina pues no puedo chelear. :p

Atras notaran la oficina, se alcanza a ver un mouse y mi diadema para conversar por skype por si algo se ofrece, una maquina para programar, compilar y escritorios remotos, la otra para conversaciones y ver el detalle de las user stories.

Lastima que no siempre se puede trabajar asi. :p

The road you cannot walk back.
Jul 17th, 2009 by Ed_Zero

Downloading rant…

Hablando de frases “cachy” o pegajosas… “Una vez que andas un camino no será posible regresar”

Bueno, dejemos las metaforas y tanto misterio por que hasta yo me estoy hartando de mi mismo XD.

La cuestion es la siguiente, en un post previo platiqué sobre las metodologías ágiles, (en un futuro pondré un Q&A al respecto), bueno resulta pues que si hay algo muy malo, maligno, nocivo y enfermizo sobre las metodologías y prácticas ágiles que es lo que está “in” en la industria.

Que a pesar de que son buenas, están demostradas que son eficientes, que los desarrolladores viven más a gusto, y que todo mundo hace lo que le gusta hacer.

Casi nadie las usa.

Si. Como explicaba también previamente; CMMI, RUP, etc tienen una precencia enorme, y pues son estandares aceptados que han costado mucho a toda la comunidad (desarrolladores, project managers, etc) por lo que no pueden dejar de usarlas.

Ahora, ¿Estas empresas que tienen CMMI podrían migrar a SCRUM o implementar ágil?

Puede ser que si, pero no de golpe. Yo diria que cualquiera puede usar SCRUM y ser ágil, pero no a todos les va a gustar.

Y aqui está la reveladora verdad:

Yo ya trabajé con SCRUM ¿puedo regresar a CMMI?

La teoria dice que si.

Pero la triste realidad es que tomaste la pildora roja… Haz visto algo nuevo. Ya sabes que debes probarlo todo, que la calidad esta ante todo, que debes integrar continuamente, que debes de diseñar sobre la marcha, que eres desarrollador, analista, tester, manager y todo al mismo tiempo, que tus skills se incrementan dia a dia y mañana puedes hacer algo distinto, que el equipo es lo más importante, que los PM’s son solo facilitadores y no jefes omnipresentes, que tienes que entregar un producto funcionando cada sprint, etc, etc, etc.

Y ahora le tienes que dar la espalda a eso por que las metodologías clásicas no estaran de acuerdo contigo.

Pelearas internamente, y desearás meter un servidor de integración continua. cuando te pidan algo harás tests primero. Te preguntarán si eres tester o programador. Serás cuestionado. Y probablemente serás reprendido por lo mismo.

 Al final del día todo depende de ti

En fin. Despues de todo esto, ¿vale la pena aprender sobre esto?

Yo digo que si. Pero cada quien debe de decidir por si mismo. si quieren verlo así es como en el siguiente video.

A que buena pelicula… Lo unico malo de esa pelicula son sus secuelas XD XD XD.

Download complete.

[Project] DM Screen #
Jul 13th, 2009 by Ed_Zero

Download project…

svn update…

Ok. Les prometí que la próxima vez que escribiera sobre DnD (Dungeons and dragons) iba a ser menos sombrio. Esta vez les presento un proyecto que empecé hace un buen rato. el DM Screen Sharp :p

Por cierto visiten la liga para la página del proyecto aqui y en code.google.com

Ok, primero que nada. ES GRATIS! Y ES BUENO ASI QUE DESCARGENLO.

Terminada la aclaración ahora si les explico para que es y por que lo hice.

Ok, DM Screen # (Dungeon Master Screen Sharp) es un proyectito que hice en C# para “facilitarme” el trabajo de manejar el combate en el juego, llevar cuanto HP (hit points) tiene cada personaje y enemigo. Lo quise llevar más allá intentando hacer un mapa de la batalla y además como nosotros no tenemos miniaturas ni mapas ni nada le agregé una vista para los jugadores, la idea principal es que esa otra vista la proyecto a una tele (de preferencia HD para que se vea chido) otro monitor o un proyector, esa vista solo tiene el mapa y la lista de personajes que se encuentran en batalla los que no sean jugadores solo tienen su barrita de vida, los personajes de los jugadores tienen el detalle del HP.

Bueno, le he hecho unas cuantas pruebas, hasta hace 2 semanas tuve el “real test run” donde tuve 4 jugadores y muchos oponentes.

Que creen?

Se alentó y salieron los bugs. bugs rarisimos, algunos los puedo replicar otros no. así que. creo que voy a empezar a hacer TDD, pero en C# como siempre las cosas se pueden poner necias.

Bueno, otra cosa que noté que falta, y ustedes lo notarán tambien si lo usan es que no se puede salvar la partida ni nada.

Asi que en lo que vamos a trabajar ahora es en poder salvar el estado de la partida actual.

Saben que seria super chido?

Que guarde tambien el mapa para que puedan borrar la imagen si quieren pero la cosa esta se los mantenga. aunque creo que eso está un poco más hardcore.

Por cierto. Tambien es open source. asi que si quieren ver el codigo fuente está disponible en la página de google code, si a alguien le gusta eso de programar y quiere ayudar a la causa pues será bienvenido, si no quieren un rol tan activo pero quieren contribuir pues creo que hace falta documentación de como usarse o bien si se saben tecnicas ocultas para usar c# efectivamente pues rolenlas.

at revision18.

Download complete

[DnD] Lo complicado de ser DM.
Jul 12th, 2009 by Ed_Zero

Downloading rant…

Para algunos de mis lectores (que formalidad) no es sorpresa pero soy un fan de los juegos de rol, no solo electrónicos (videojuegos) sino también de los de mesa mi favorito en está ultima categoria es Calabozos y Dragones (Dungeons and dragons)

No se por que, ni como, ni precisamente en que momento sucedió que me volví Dungeon Master o sea el encargado de llevar el juego. Para los que no sepan bien que onda o como funciona el juego, simplemente se trata de lo siguiente:

Es un juego de varios jugadores (2 en adelante) Todos menos un jugador tienen un personaje (heroe) que va a luchar contra el mal, estos jugadores son encargados de dictar las acciones que sus personajes van a tomar, desde simplemente ir a algun lugar hasta interactuar con otros personajes. Dije que todos menos un jugador tenian esta propiedad, y eso es por que el que sobra tiene una labor mas ardua: es el resto del mundo. Si tan raro como suene, es el que dice que pasa alrededor de los heroes y que tipo de villanos van a existir, en si… es el malo.

Obviamente hay reglas y cosas alrededor, pequeñas figuritas para representar a los personajes de los jugadores, un tablero con un mapa representando los lugares a los que pueden ir, mapas mas detallados y grandes para representar las batallas de los heroes contra los villanos, figuritas para los villanos, libros y libros, hojas de papel, dados y mucha imaginación y creatividad.

Ahora como les dije, hace mucho tiempo me dediqué a la tarea de ser DM (dungeon master) y dictar el juego y creanme o no es una tarea super complicada, demanda no solo tiempo sino mucha atención y dedicación.

Primero que nada no es fácil por que no es el tipico juego donde se pueda “ganar” como DM tu pones a los malos y sabes que es lo que los buenos van a hacer, pones trampas, acertijos y cosas para “evitar” que los heroes logren su misión.

PEEEERO

No debes evitar que la hagan.

En DnD, el DM nunca gana como tal, los jugadores y sus heroes usualmente ganan las peleas, usualmente rescatan a los prisioneros y son los buenos y se sienten superman cuando sus personajes suben y suben de nivel volviendose mas poderosos y teniendo mucho mas conocimiento del mundo, se envuelven en un mundo fantasioso del cual poco a poco se van volviendo parte.

Un mundo que se crea colaborativamente, pero es responsabilidad del DM mantener integro.

Lo dificil es eso justamente. Un DM esta en todo, eres el tendero, el cantinero, el villano, el asistenete del templo, la pequeña aldea vecina, el ejercito oponente, eres todo menos los personajes. Lo cual es un desafio bastante grande, que se va volviendo todavia peor conforme pasa el tiempo, ya que en lo personal veo como a mi se me empiezan a olvidar cosas, sobre todo detalles que a primera vista insignificantes, PERO para los jugadores son importantes.

El fin último es que todos se entretengan y pasen un buen rato, el desafio es mantener el mundo interesante, entretenido e integro.

*sigh*¨Tal vez el problema es quererle dar el gusto a todos, labor en la cual desafortunadamente es muy fácil fallar…

Bueno prometo que mi siguiente post acerca de Dungeons and dragons no será tan sombrio.

Download complete.

Fear the failwhale.
Jul 11th, 2009 by Ed_Zero

Downloading news…

Saben que le pasa a twitter cuando se satura?

ESTO:

twitterFailWhale

Conozcan a la FAIL WHALE.

El ente magico y musical que anuncia que el colapso de twitter es inminente o está ocurriendo. Lo curioso es que cuando esto ocurre deberia ser un momento trágico, es como si tu correo no respondiera, si se cayera la red, o que se acabe la chela pero los cuates de twitter hicieron de un momento tan tragico… esto, una ballena intentando ser levantada por unos cuantos pajaritos observando como se lo va a cargar la tostada.

Twitter no solo ha creado una nueva forma de comunicar cosas por la red, sino también una nueva forma de presentar fallas inminentes por medio de una ballena :p.

En fin, la fail whale no solo les inidica que twitter se está colapsando sino tambien que algo está pasando en el mundo real. Por ejemplo: la muerte de michael jackson, que de tanta gente que se puso a twitear hicieron que azotara el pobre.

Asi que ya saben, si ven a la ballena feliz chequen las noticias, puede ser que algo malo haya pasado.

Download Complete…

»  Substance: WordPress   »  Style: Ahren Ahimsa
© (c) EdZero.net