26 abril 2005

Turbo C en linux

Leyendo en un foro de www.lawebdelprogramador.com , un tal vassagus mencionó una página en la que hay una librería para linux que permite compilar con gcc los programas hechos con turbo c en windows. Es decir, nos da el conio.h, el graphics.h y demás ficheros de cabecera y librerías correspondientes propias de turbo c.

La página en cuestión es http://www.sandroid.org/TurboC/

No lo he probado, pero puede ser una solución a mucha gente que en los foros anda preguntando que dónde consigue conio.h y graphics.h

23 abril 2005

validar entradas en un JTextField

Haciendo el editor numérico en java según comenté en http://chuidiang.blogspot.com/2005/04/patrn-estrategia.html, me encontré con el problema de que opcionalmente quería que el editor no perdiera el foco mientras no fuera correcto su valor. Investigando por internet encontré una página en la que pone varias formas de verificar la entrada de datos.

Básicamente son estas:
  • Añadir un KeyListener, de forma que cada vez que se pulse una tecla en el JTextField, nosotros digamos si vale o no. De esta forma se consigue, por ejemplo, si estamos pidiendo un número, descartar todas las letras.
  • Algo similar se consigue añadiendo un Document. En el Document se nos avisará de cada cosa que se quiera insertar en el editor y diremos si se puede o no insertar.
  • Añadir un FocusListener. Con esto en el JTextField se podrá meter cualquier cosa, pero cuando el JTextField pierda el foco, se nos avisará y podremos validar la entrada.
  • De la misma forma se puede hacer añadiendo un InputVerifier. Al InputVerifier se le preguntará si se puede o no perder el foco. Basta con que devolvamos no si la entrada no es correcta.
  • Aunque creo que la página no lo menciona, también es posible usar un JFormattedTextField, que tiene montones de opciones para añadir máscaras, qué caracteres son válidos y Formatters, que verifican si la entrada es válida o no.
El link de esta página es http://www.programacion.net/java/articulo/tt1120/.

20 abril 2005

InputVerifier de java

Estoy haciendo un editor, heredando de JFormattedTextField y basado en el patrón estrategia. Quería que mientras la entrada no fuera correcta, el editor no dejara perder el foco, que el cursor no se pudiera sacar del editor.

Investigando por la API he encontrado el tema del InputVerifier. Todos los JComponent de java colaboran entre ellos a la hora de pasarse el foco de uno a otro. Cuando el foco va a pasar del JComponent A al JComponent B, B le pregunta a A si puede perder el foco. Si A contesta que sí, el foco pasa sin problemas de A a B. Si A contesta que no, el foco se queda en A.

Cuando se le pregunta a A, internamente A le pregunta a una clase que tiene guardada dentro, (una clase hija de InputVerifier) si puede o no perder el foco, llamando al método verify() de dicha clase.

Nosotros podemos hacernos una clase hija de InputVerifier (por ejemplo, ComprobadorEntrada) de forma que en el método verify() leemos lo que ha escrito el usuario en el JTextField, vemos si es correcto y devolvemos true si es correcto o false en caso contrario.

Luego tenemos que meter nuestro ComprobadorEntrada en el JTextField, usando su método setInputVerifier(). El resultado es que si el usuario escribe algo en el JTextField e intenta sacar el foco de ahí (pulsando un botón, yendo al siguiente campo a rellenar o cualquier otra cosa), antes de que el JTextField pierda el foco, se llamará a nuestro método ComprobadorEntrada.verify(). Si devolvemos false, el foco no saldrá de nuestro JTextField.

17 abril 2005

¡¡Por fin!!

He leido en "El Pais" del 17 de Abril que el gobierno, POR FIN, se va a meter con las operadoras telefónicas, obligándolas a dar un buen servicio y sobre todo, haciéndo que dejen darse a la gente de baja. Dice "El Pais" que el nuevo reglamente YA está aprobado.

Después de mucho tiempo sufriendo a esta gente, que te dan de alta sin pedirlo, que se estropea el servicio que te dan, no te lo arreglan, te siguen cobrando y además debes protestarlo a través de un teléfono de pago en el que te dejan escuchando musiquita. Y el peor de los temas, darse de baja, en el que te piden hasta la foto de la primera comunión para no hacer nada y seguir cobrándote. Al final acabas metido en la lista de morosos. Nuestro "agil" gobierno, por fin ha decido meter baza en el asunto.

A ver qué caso le hacen las operadoras y qué mano dura aplica si no se le hace caso...

Yo estoy en ello. Tengo internet por teléfono con wanadoo. Como me quiero pasar a ADSL y no me apetece con ellos, lo primero que he hecho es darme de baja. He mandado el dichoso fax a finales de febrero y estoy a la espera a ver si me han hecho caso (a ver si me llega otro recibo al banco, que de momento es la única foma de enterarse si te han dado de baja.)

16 abril 2005

Dominios vg

En http://www.dominios.es.vg/index.shtm dan dominios .es.vg gratis. Si te registras, te dan el dominio y lo redirigen a la página web que tú digas.

Yo, para probar, he metido mi página en http://www.chuidiang.es.vg

En general, estas cosas no me gustan mucho. Por un lado meten propaganda, con lo que entre la de estos y la de geocities, tengo más propaganda que página.

Por otro lado, los contadores como nedstat y onestat suelen tener problemas, y no registran bien las visitas.

Además, en cierta ocasión me di de alta, gratis en www.chuidiang.tk. Después de un tiempo, me mandaron un correo diciendo que tenía que pagar y si no el dominio quedaría otra vez disponible. El dominio está otra vez disponible.

14 abril 2005

Patrón estrategia

Aprovechando que con el libro de "Head First Design Patterns" me he vuelto a emocionar con el tema de patrones, he puesto en mi página web un pequeño tutorial sobre el patrón estrategia.

Me llamó la atención al leerlo en el libro, porque antes entendía dicho patrón, pero el libro me hizo ver que tiene muchas más posiblidades que las que a mí se me habrían ocurrido.

De hecho, en el trabajo vamos a hacer un editor numérico (un JTextField que devuelve números) y pensabamos hacerlo aplicando este patrón... sin saber que era este patrón.

12 abril 2005

Jalopy

Jalopy es un formateador de código para java, que lo deja bonito, bien indentado y demás.

Existe como plug-in para netbeans y para eclipse, con lo que se puede integrar en la herramienta de desarrollo, pero también puede ejecutarse por separado.

Es uno de los mejores que he visto. Permite incluso añadir a todo el código automáticamente los comentarios, tanto de métodos, como de atributos, como el comentario de clase, añadiendo los @param tan engorrosos. Por supuesto, el comentario en sí debemos ponerlo nosotros.

Otra cosa buena que tiene es que no respeta las líneas en blanco que nosotros dejemos, dando un aspecto más uniforme al código. Tiene montones de opciones de configuración y ordena los atributos, métodos, constructores y demás, haciendo que aparezcan primero dentro de la clase los que nosostros queramos (por ejemplo, los métodos públicos primero, luego los atributos públicos, etc, etc).

11 abril 2005

Conexión a MySQL desde java

Una vez instalado MySQL http://chuidiang.blogspot.com/2005/03/intalacin-de-mysql-apache-y-php.html , para poder conectarme desde java, tuve que bajarme el driver correspondiente. En la misma ayuda de MySQL pone de dónde bajárselo. Yo lo bajé de aquí: http://dev.mysql.com/downloads/connector/j/3.1.html y desempaqueto el zip.

De todo lo que hay en el zip, lo importante es el fichero mysql-connector-java-3.1.7-bin.jar. Este jar hay que ponerlo en el classpath de compilación y de ejecución. En mi caso, como uso netbeans, simplemente monto el jar en el árbol de clases/paquetes.

Para la prueba, me he creado una base de datos, una tabla y un registro con los siguientes comandos de SQL:

mysql> create database prueba;
mysql> use prueba;
mysql> create table persona (id smallint auto_increment, nombre varchar(60), nacimiento date, primary key(id));
mysql> insert persona values (NULL, 'Pedro', '1995-09-12');

El siguiente programita java me permite conectarme y consultar el registro recién creado:

package chuidiang.ejemplos.base_datos;

import java.sql.*;

/**
* @author Chuidiang
*/
public class PruebaMySQL
{

/** Creates a new instance of PruebaMySQL */
public PruebaMySQL() {
try
{
// Este driver está en el jar que hemos bajado de mysql.
DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

Connection conexion = DriverManager.getConnection (
"jdbc:mysql://localhost/prueba","root", "la_password");

Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery ("select * from persona");

while (rs.next())
{
System.out.println (rs.getString (2));
}
}
catch (Exception e)
{
e.printStackTrace();
}
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new PruebaMySQL();
}
}

El resultado es el esperado.

Libro de patrones

En el trabajo me han dejado "Head First Design Patterns" de "Eric Freeman" y "Elisabeth Freeman", editorial O'Reilly, en perfecto inglés.

Es un libro gordo, de 638 páginas. Aparte de unos capítulos de introducción y de otras cosas al final (como patrones de patrones o patrones en el mundo real), únicamente cuenta 10 patrones, uno por capítulo.

En cada capítulo se extiende un montón, contando el patrón poco a poco y con mucho detalle, con ejemplos sencillos y bastante completos. En ese sentido, es un buen libro, dejando muy claros los patrones que explica y se pueden sacar muchas ideas de cómo usar el patrón. De hecho, yo entendía bien el patrón estrategia, pero después de leer el capítulo dedicado a él, sin aprender nada nuevo, he comprendido que se puede aplicar en muchos más casos de lo que se me habría ocurrido nunca.

Sin embargo, el libro está hecho como para tontos, lo que quiere decir que cada hoja tiene muy poco texto y muchos dibujos o que una idea simple, se explica en varias hojas, simulando la conversación entre un programador novato, que va dando sus ideas, y un gurú, que le va guiando para llegar al patrón en cuestión; haciendo entrevistas al patrón; con crucigramas con las palabras importantes del capítulo; etc, etc.

No tengo ni idea de lo que cuesta el libro, pero con más de seiscientas páginas de un tema técnico no puede ser barato. El patrón está bien explicado, pero de forma demasiado "para tontos". Estas dos cosas juntas me hacen pensar que es un buen libro para leer ... si te lo dejan, pero demasiado caro para lo que tiene.

04 abril 2005

phpBB

Rebuscando por ahí he encontrado phpBB.

Parece que es un paquete en php que se instala y da un foro en un servidor web.

Tengo que probarlo en el servidor que me he montado en el trabajo, a ver qué tal va. Supongo que puede ser útil para dejar constancia de ideas, comentarios y demás sin necesidad de hacer reuniones, que siempre se pierde algo el tiempo.

01 abril 2005

Entornos de desarrollo

Un problema para mi de los entornos de desarrollo (visual c++, JBuilder, etc) es el concepto de proyecto que tienen.

Para ellos, un proyecto es lo que todos pensamos que es un proyecto, es decir, los directorios, ficheros, librerías y demás que son necesarios para un programa. El problema es que casi todos los entornos de desarrollo no te dejan libertad para elegir, sobre todo, los directorios.

Cuando creas un proyecto nuevo, no hay problema. Creas el proyecto, el entorno de desarrollo crea los directorios que considera oportunos y tú sumisamente pones los ficheros donde el entorno de desarrollo te dice.

Pero, ¿Qué pasa cuando ya tienes fuentes hechos por otros medios y quieres crear un proyecto con esos fuentes?. Ya la hemos liado. Ni en Visual C++ ni en JBuilder se puede hacer de forma fácil. No digo que no se pueda hacer, pero no es trivial y requiere pelearse con (o conocer muy bien) el IDE.

Otro problema es que la forma de incluir librerías externas en tu proyecto suele ser buscando una opción escondida de menú que abre una ventana con catorce pestañas y en una de ellas, entre un montón de parámetros incomprensibles hay que poner la librería. Si no sabes donde está, es imposible encontrarlo.

Cuando elegí un entorno de desarrollo para java, probé el Forte for java, el netbeans (version 3.x) y el Jbuilder. Al final me decidí por Netbeans, simplemente porque su concepto de proyecto es muy simple.

En Netbeans, sólo hay que dar el nombre del proyecto. Luego tú, a mano, "montas" en el proyecto los directorios y librerias que quieras, que pueden estar donde tú quieras, con el nombre que quieras y ser todos los que quieras. La forma de montarlo es bien sencilla, con e botón derecho del ratón sale el menú de "montar" y puedes montar un directorio o una librería (un fichero .jar). De esta forma, un proyecto nuevo o empezar un proyecto con fuentes ya existentes es totalmente intuitivo. Sin conocer el IDE, se encuentra com hacerlo y se hace sin problemas en unos pocos minutos.

Más adelante, probé Eclipse y Netbeans 4.0. Me sigo quedando con la versión Netbeans 3.6. Eclipse también tiene un concepto de proyecto algo complejo y Netbeans 4.0 ya lo ha complicado.