30 marzo 2006

Extensiones de los JTable

El JTable de java es el que es y ofrece lo que ofrece, sin embargo, a veces se queda un poco pequeño o queremos alguna funcionalidad que no implementa.

Por ejemplo, suele ser habitual querer ordenar por columnas haciendo click con el ratón en la cabecera de la columna, o bien filtrar de forma que sólo se vean las filas que cumplen ciertas condiciones, pero sin necesidad de borrarlas. A veces también nos gustaría que la primera columna fuera un árbol, de forma que al contraer y expandir nodos, desaparecieran y aparecieran las filas completas de la tabla, junto con el nodo. Es lo que se conoce como TreeTable

En los tutoriales de sun tenemos clases de ejemplo que hacen todas estas cosas. También hay gente que ha hecho y publicado clases para hacer estas cosas. Una solución muy socorrida es bajarse estas clases de ejemplo de sun o de otra gente y usarlas:
  • Para ordenar, tenemos el ejemplo de TableSorter de sun
  • Para filtrar, tenemos un TableFilter que no es de sun. Esta gente también tiene un TableSorter, además de otro montón de cosas.
  • Para el TreeTable, tenemos el JTreeTable de sun.
Como esta necesidad es bastante habitual, hay gente que ha hecho liberías que nos ofrecen todas estas funcionalidades.

Por un lado tenemos las glazedlists, que son gratuitas. Por otro, tenemos otra que es de pago. Y estas son simplemente con las que me he tropezado sin buscarlas. Seguro que una busqueda más en serio ofrece muchos más resultados.

29 marzo 2006

Hacer código java desde ficheros de configuración

Hace tiempo que en el trabajo y poco a poco vamos desarrollando una "cosa" que sirve para realizar las aplicaciones con interface de usuario y base de datos de forma más rápida.

La idea básica consiste en unos ficheros de texto que sirven de configuración meter las sentencias SQL necesarias y la información necesaria para que desde código java se construyan automáticamente formularios y tablas para crear, editar y ver los datos de una base de datos.

Tenemos algo bastante conseguido y útil, aunque con sus cosas, puesto que es código que se desarrolla sobre la marcha y en paralelo con otros proyectos reales, de los que tienen cliente que paga.

Urgando por internet, hemos encontrado cosas curiosas.

Por un lado, ibatis, una cosa de la gente de apache en la que meten las sentencias SQL en un fichero xml y con él y de forma sencilla son capaces de realizar los select, insert, update y delete desde código java. Es muy similar a lo que nos hemos hecho nosotros, pero mucho más serio, configurable y demás. Lo nuestro no deja de ser una librería de andar por casa.

Lo que aporta la nuestra es que además construye los formularios swing y las tablas JTable de forma automática. Animado, me puse a buscar por internet cosas sobre la construcción automática de interfaces de usuario a partir de ficheros de configuración.

Hemos encontrado XMLFace, que construye interfaces de usuario a partir de ficheros XML.

También hemos encontrado SwiXAT, que construye interfaces de usuario a partir de ficheros XML, pero va más allá, porque lo hace siguiendo el patrón modelo-vista-controlador. Lo del controlador lo hace con algo llamando BeanShell.

Esta última, la BeanShell ya es algo que me ha parecido la leche. Es una especie de shell de comandos... que admite sentencias java, que va ejecutando sobre la marcha, según las vamos escribiendo.

Si es que ya no saben qué inventar ... y qué poco tiempo tenemos para mirar todo esto.

28 marzo 2006

Trabajo basura

En http://www.trabajobasura.com/inicio hay una página interesante en la que la gente deja opiniones sobre la empresa en la que trabajan.

Está bien para consultar cuando se está buscando trabajo saber dónde te estás metiendo.

27 marzo 2006

John Conway's Game of Life

John Conway's Game of Life

Una curiosidad. El famoso juego de la vida, en un applet de java.

Ayuda en un JDialog

Cuando queremos que un JDialog procese un evento de teclado, por ejemplo, la F1 para ayuda, tenemos un pequeño problema.

Cuando el JDialog tiene el foco, en realidad lo tiene uno de sus componentes hijos (un JTextField, JButton o el que sea). Si añadimos al JDialog un addKeyListener(), no nos sirve de nada. La tecla F1 la captura el componente interno y no se transmite hasta el JDialog.

Para poder hacerlo, hay que hacer algo tan complejo como esto


Codigo:

((JComponent)dialogo.getContentPane()).registerKeyboardAction(
unKeyListener,
"AYUDA",
KeyStroke.getKeyStroke(KeyEvent.VK_F1 , 0, false),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );


donde "AYUDA" es cualquier texto y el WHEN_ANCESTOR_OF_FOCUSED_COMPONENT sirve para que se transmita desde el JTextField hasta el JDialog.

25 marzo 2006

Más cosas sobre www.chuidiang.com

Bueno, llevo ya cuatro o cinco días liado con el nuevo dominio.

Hostito, los del alojamiento web, de momento muy bien. Me pusieron el sitio en marcha en menos de 12 horas y han tardado tres días en cobrar. Teóricamente son 7.95 dolares al mes, pero como el dolar está algo más bajo que el euro, me han cobrado sólo 6.65 euros. Supongo que este pago será además variable cada mes, dependiendo del cambio entre ambas monedas.

Los servicios de Hostito bien. Todavía no sé los del servicio técnico, porque no he tenido ningún problema hasta ahora. Me ofrecen más cosas que las que creo que vaya a instalar nunca. (scripts php y de otros tipos para crear automáticamente foros, chats, gestores de fotos y noticias, etc, etc, etc, etc, etc).

En cuanto al traslado de páginas, un poco rollo. Con el cuento del "sitio web distribuido", es un poco pesadito juntarlo todo nuevamente, cambiando los hipervínculos absolutos por otros nuevos. También es cierto que de paso, me he puesto a uniformizar un poco el sitio de todas las páginas.

Después de dos días, acabo de meter en el nuevo dominio todo lo de C/C++ en linux. Falta java, los diseños orientados a objetos y las zarandajas varias, como el problema de lo paracaidistas.

24 marzo 2006

Curiosidades de google adsense

Los anuncios de google adsense en una página en teoría miran el contenido de la página y muestran anuncios de productos relacionados con la página.

Curiosamente este diario está dedicado a programación, sobre todo en java. En cierta entrada un día puse algo así como "se puede abortar la compilación". Bueno, pues los espabilados de google pusieron anuncios sobre ginecología ;-)

23 marzo 2006

http://www.chuidiang.com

Después de darle muchas vueltas, de pensar si sí o si no, de andar mirando hostings y de mirar opiniones de hostings por foros, me acabo de coger un dominio chuidiang.com y un hosting.

El hosting al final lo he cogido con www.hostito.com. De momento muy bien. Me di de alta ayer sobre las 7 de la tarde y esta mañana, a las 5 de la madrugada, ya tenía mi dominio y mi hosting funcionando.

Ahora sólo me queda todo el "curro" de llevar mi "sitio distribuido" a su nueva ubicación.

22 marzo 2006

Estadísticas web

Hace tiempo, investigando por internet, encontré todo el tema de estadísticas web. Son sitios en los que te das de alta, gratuitamente, y te dan un código html con javascript para que pongas en tú página.

A partir de ese momento tienes una serie de estadísticas sobre las visitas a tú página. Visitas diarias, que navegador usan los visitantes, sistema operativo, que página tenían previamente en el navegador (google o qué otra) con lo que sabes de dónde vienene a tú página, etc, etc.

Primero me dí de alta en webstats. Estaba contento con ella. Aunque las estadísticas son muy limitadas, es sencilla de usar y presenta la información de una forma muy clara.

Más adelante y por probar, me dí de alta en onestat. Este da bastante más información que el anterior, pero me gusta menos su presentación, así que seguía consultando básicamente el de webstat.

Sin embargo, en el momento de meter los anuncios de google adsense, empezé a interesarme por cuales de mis páginas eran más visitadas, para poner ahí los anuncios. En este sentido la información de onestat era mucho más completa, da una lista diaria de las 10 páginas más visitadas ese día. Así que me pasé una temporada consultando más onestat y dejé abandonado webstat.

Ayer encontré otro nuevo sitio de estadísticas, addfreestats. Este da unas estadísticas todavía mejores que las de onestat. Lo principal que me hace cambiarme a él es que dice qué link en qué página pinchan los visitantes cuando dejan tu sitio. Esto te permite saber exactamente en qué link pincha, incluidos los anuncions de google. Con estas estadísticas se puede saber qué anuncios son más efectivos. Si colocamos los anuncios de distintos colores y en distintas posiciones en las páginas, sabiendo qué formato es más efectivo, podemos replicarlo en las demás.

Otra cosa que me llamó la atención de estas estadísticas es que para visitante te indica claramente cómo ha sido su visita: te dice que página estaba viendo antes de entrar en la tuya, con lo que sabes si entró por google, por otro buscador o por una página que enlace con la tuya. Luego te da todas las páginas tuyas que el visitante ha ido viendo, en orden y con hora, con lo que sabes si simplemente ha entrado o salido, si ha visto varias páginas, qué páginas ha visto e incluso si se ha entretenido en leerlas. Finalmente, te dice qué link de tus páginas ha pinchado para salirse fuera de tu sitio, incluidos los anuncios de google (google adsense).

En fin, que poco a poco iré cambiando los contadores en todas las páginas por este.

21 marzo 2006

Mis problemas con ObjectOutputStream

Me he puesto a jugar a escribir y leer ficheros con ObjectOutputStream y me he tropezado con un par de cosas curiosas.

Normalmente, para escribir objetos en un fichero podemos abrir un ObjectOutputStream asi

ObjectOutputStream oos = new ObjectOuputStream (new FileOutputStream("fichero.dat"));

Luego, símplemente vamos escribiendo nuestros objetos

oos.writeObject(unObjecto);

La primera pega que me he encontrado, es que no podemos reutilizar unObjeto (una única instancia de nuestra clase/dato) para escribirlo varias veces. Si hacemos

oss.writeObject(unObjeto);
unObjeto.setAtributo(nuevoValor);
oos.writeObject(unObjeto);

cuando vayamos a leer, leemos el primer objeto dos veces y ni rastro del segundo. Da la impresión de que ObjectOutputStream se guarda los bytes que va serializando, de forma que si mandamos escribir el mismo objeto por segunda vez, se ahorra la serializacion. Sin embargo, no revisa si los datos internos han cambiado.

Para evitar esto, podemos hacer un new por cada objeto que queramos meter

oss.writeObject (unObjeto);
unObjeto=new MiObjeto();
unObjeto.setAtributo(nuevoValor);
oos.writeObject(unObjeto);

o bien podemos usar el métod writeUnshared() en vez de writeObject(). De todas formas, he visto algunos problemas con writeUnshared() si no actualizamos todos los atributos de unObjeto antes de escribirlo por segunda vez. Los atributos que no actualizamos y mantenemos su antiguo valor, luego se escriben con el valor de la primera vez que hayamos metido unDato en el stream.

La otra pega que me he encontrado es que al hacer new ObjectOutputStream(...), esta clase escribe unos bytes de cabecera en el stream. Como new ObjectInputStream(...) lee esa cabecera correctamente, para nosotros es como si no existiera y no hay ningún problema.

El problema se presenta si abrimos el fichero por segunda vez para añadir más datos

ObjectOutputStream oos = new ObjectOuputStream (new FileOutputStream("fichero.dat",true));

Esto volverá a escribir una cabecera justo al final de lo que ya tenemos en el fichero, entre los datos de antes y los que vayamos a insetar ahora.

Cuando leamos con ObjectInputStream, la primera cabecera se lee bien, luego vamos leyendo datos y al llegar a la segunda cabecera obtenemos un error StreamCorruptedException y no podemos leer más datos.

La solución que he encontrado a esto consiste en hacernos nuestro propio ObjectOutputStream, heredando del de java y redefiniendo el método writeStreamHeader() para que no haga nada.

Todo esto está un poco más detallado en http://www.geocities.com/chuidiang2/ficheros/ObjetosFichero.html

18 marzo 2006

Sitio web distribuido

Por culpa de geocities, creo que acabo de inventar un nuevo concepto, el de "sitio web distribuido".

Como resulta que alcanzo con cierta frecuencia el límite de transferencia que me dan, para no pagar, he cogido y he abierto varias cuentas con gente que da sitio gratuito para páginas web. Ahora me estoy dedicando a llevarme las páginas que más éxito tienen (excepto la principal) a esas otras cuentas.

Hace un tiempo moví todo lo de java a http://www.geocities.com/chuidiang2. Hace unos días moví lo de diseño orientado a objetos y metodologías a http://chuidiang.iespana.es. Como sigo excediendo el límite (unas 60 veces en lo que va de mes), acabo de mover también el tutorial de sockets, uno de las páginas que más visitas tiene.

Al final creo que en el sitio original sólo quedará la página de portada....

Empezando con ant

Con el cuento del google adsense que he puesto en mis páginas, me ha empezado a preocupar más el tema de exceso de tráfico en geocities. Eso me ha hecho mirar lo de los dominios y hostings para ver si pago o no por ello.

Pero claro, como efecto secundario para conseguir más de google adsense y rentabilizar el posible pago de dominio/hosting, me ha vuelto a picar el gusanillo de actualizar la página web.

El resultado es que, además de meter los anuncios y mover cosas de sitio, acabo de meter un pequeño tutorial para empezar con ant. , una herramienta que ayuda a las tareas habituales de compilación en java, generar docuemtación, etc. A ver si me dura un poco la inquietud y hago algunos tutoriales o ejemplos más.

16 marzo 2006

http://web.iespana.es

He puesto una paginilla en iespana sobre diseño orientado a objetos y metodologías de desarrollo. De momento contiene poca cosa y es básicamente lo que ya tenía repartido por ahí.

De iespana me gusta mucho su mecanismo para subir y bajar ficheros. Es un applet de java en el que veo en un lado mi disco duro y en el otro, mi sitio web en iespana. Me basta con ir navegando en ambos hasta seleccionar los ficheros que quiero subir o bajar y pulsar en una de las flechitas. El mecanismo es bastante rápido y cómodo. Sin embargo, la pega es que el applet se comunica con el servidor por medio de ftp y por ejemplo, en el trabajo, el proxy no me permite conexiones ftp.

Lo que no me acaba de convencer es que al visitar la página, se pone arriba un frame de propaganda. Eso es normal y de hecho el frame es relativamente discreto y no estorba demasiado. Lo que no es normal es que al salir de la página e irse a otro sitio, el frame permanece. La gente de geocities tiene este tema mejor resuelto (al menos, de forma más agradable para el que navega). Cuando te sales del sitio de geocities, el frame de propaganda desaparece.


Total, que en todos mis links me toca poner los atributos para que el frame desaparezca. Es algo como esto

<a target="_top" href="http://www.geocities.com/chuidiang">C en linux</a>

He activado la base de datos mysql que proporcionan y lo de php y parece que más o menos va. Sin embargo sólo te dan posibilidad de una base de datos. Bueno, tendré que ir pensando en pasar los enlaces de lycos a esta base de datos.

13 marzo 2006

JTreeTable

Un componente curioso que he encontrado en sun es el JTreeTable.

Básicamente es una tabla en la que la primera columna es un árbol. Pinchando en los elementos de la primera columna, se puede expandir y contraer el árbol, haciendo que aparezca y desaparezcan filas enteras de la tabla.

He hecho algunas pruebas con él y va bastante bien, aunque si ya un JTable y un JTree por separado tienen sus trucos y complejidades, todo junto hace que necesitemos armarnos de paciencia.

12 marzo 2006

Cuatro líneas de código para hacer un navegador

Tuve la necesidad de ver ficheros html desde java. La opción típica consiste en arrancar el navegador por medio de la clase Runtime de java, pero se me ocurrió la posibilidad de ver cómo se podía hacer con componentes java. Estaba seguro de que java venía preparado para ello y que podría conseguirlo directamente o con muy poco código.

Efectivamente, aunque no entiendo del todo cómo, aquí están las cuatro líneas de código necesarias para hacerse un navegador.

En primer lugar tenemos la clase HTMLEditorKit, que aunque no sé qué hace, por el nombre imagino que es la clase que tiene todo lo necesario para interpretar los ficheros HTML. La instanciamos.

HTMLEditorKit kit = new HTMLEditorKit( );

Luego, en un JEditorPane, que es el que admite estas cosas, le decimos que su tipo de texto va a a ser HTML y le pasamos el editor kit este

JEditorPane editor = new JEditorPane();
editor.setEditorKitForContentType("text/html", kit );

Con esto ya lo tenemos todo preparado, salvo un pequeño detalle. Si al editor no le decimos nada, es editable, se puede modificar la página web. No es eso lo que quiero, así que lo hago no editable.

editor.setEditable( false );

Finalmente, basta con decirle qué página queremos que muestre

editor.setPage ("file:/unapagina.html");

Ya está, con esto se ve la página html, con sus fotos, frames y demás en nuestro editor.

Lo único que los hiperenlaces todavía no funcionan al hacer click en ellos. Debemos hacer un poco de código más.

Lo primero es decirle al HTMLEditorKit que se suscriba a los eventos de ratón sobre la página html, que los traduzca y nos los pase. Eso se hace con una simple línea de código

kit.install( editor );

Y ahora, tenemos que suscrbirnos nosotros a los eventos de ratón sobre los hiperenlaces para cambiar nosotros la página. Es importante el install() anterior, porque si no el editor no avisará a sus HyperlinkListener. El código es este

editor.addHyperlinkListener( listener );

donde listener es una instancia de una clase como la siguiente

HyperlinkListener listener = new HyperlinkListener( )
{
public void hyperlinkUpdate( HyperlinkEvent e )
{
try
{
// Se comprueba si se ha hecho click
if( e.getEventType( ) == HyperlinkEvent.EventType.ACTIVATED )
{
// se obtiene la url a la que apunta el hiperlink
if( e.getURL( ) != null )
{
// Se pasa la página al editor
editor.setPage( e.getURL( ) );
}
}
}
catch( Exception e2 )
{
e2.printStackTrace( );
}
}
};

Aquí hay que tener un poco de cuidado. Al suscribirnos, se nos avisará cada vez que el ratón haga cualquier cosas sobre el hiperenlace, incluso aunque simplemente pase sobre él, sin hacer click. Por ello la necesidad del primer if, para ver si el hiperenlace se ha ACTIVED, es decir, si se ha hecho click sobre él. Luego, la URL sobre la que se ha hecho click se obtiene fácilmente del evento.

Ya están las cuatro líneas mágicas que necesitamos para tener un mini-navegador en java.

10 marzo 2006

Métricas de java con ant

Me he bajado javancss, un programa que permite sacar métricas de nuestro código java (complejidad ciclomática y demás).

Lo bueno de este programa es que se integra con ant, de forma que cuando compilemos o bien como tarea adicional de ant, podemos pasar las métricas a nuestro programa.

javancss permite abortar la compilación si alguna métrica se sale del rango permitido, que por supuesto, fijamos nosotros. Por ejemplo, es posible hacer que la compilación falle si la complejidad ciclomática de un método pasa de 10.

Instalarlo es fácil. Sólo hay que bajarse el zip correspondiente y desempaquetarlo encima de donde tengamos instalado ant. Sobreescribe uno de los ficheros de ayuda, de forma que en esa ayuda aparezca un link a la ayuda de javaccns.

Una vez hecho esto, simplemente con poner algo como esto en nuestro fichero build.xml

<target name="metricas">
<taskdef name="javancss" classname="net.jernigan.javancss2ant.JavaNCSS">
<javancss srcdir="." abortOnFail="false" ccnperfuncmax="10" includes="**/*.java">
</target>


tenemos esto preparado para que nos dé un informe por pantalla de aquellos métodos que sobrepasan la complejidad ciclomática de 10. Es una pena, porque versiones antiguas de javancss tenían posibilidad de sacar el informe a un fichero.

09 marzo 2006

Más problemas con geocities

Nuevamente empiezo a tener problemas de tráfico excedido con mi página web.

Como sigue sin darme la gana de pagar para mantener la página, me he llevado las páginas de metodologías de programación (metodologia y programacion extrema) a una nueva página en http://chuidiang.iespana.es

De paso he metido ahí enlaces a lo poco que tengo sobre patrones de diseño.

Actualmente estoy leyendo un libro sobre "Refactoring" de "Martin Fowler", así que he preparado un "en obras" para poner ahí un articulillo-resumen de lo que lea y me parezca interesante en ese libro.

Intercambio de enlaces

Por aquello de incrementar las visitas en mi página, me he apuntado a http://www.intercambioenlaces.com

Dándote de alta te dan, como no, unos códigos html para que pongas en tus páginas. Con ellos en tu página aparecerán enlaces a otras páginas. Cada vez que tu página visualize un enlace a otra página, en otra página que esté dada de alta en el mismo mecanismo, se mostrará un enlace a la tuya.

Otro tema es que la gente haga clicks. Hasta ahora, desde mi página se han hecho unos 57 clicks a otras páginas, mientras que yo sólo he recibido 3. Supongo que es normal, la gente está más interesada en las "chicas argentinas", "descargarse mp3" o "caratulas de películas" que en "C/C++ sobre linux".

Google AdSense

Después de darle vueltas a si sí o a si no, más por indecisión que por otra cosa, acabo de poner en algunas de mis páginas los anuncios de google adsense.

Me dí de alta y tardaron un día en confirmarme el alta y habilitarme la cuenta. Una vez dentro de la cuenta y de facilitar ciertos datos, obtuve un código html para poner en mis páginas. Lo he puesto en algunas de ellas y salen anuncios de publicidad relacionados con el contenido de la página.

Teóricamente google paga por cada 1000 visualizaciones de anuncios o cada vez que alguien hace click en ellos. Llevo dos días de alta viendo los anuncios en mi página, así que todavía es pronto. Veremos en qué queda todo esto.

No sé cuánto pagan, pero si consigo al mes alrededor de 10 euros, quizás compre el dominio y un hosting, así, al menos, la página se automantiene.

05 marzo 2006

Más problemas con el nero

Estuve intentando hacer un pase de diapositivas en DVD con el nero. Al meter unas 70 fotos se me quedó colagado y tuve que matarlo. Un montón de tiempo, el de seleccionar las fotos, a la basura.

Vuelvo a intentarlo, esta vez salvando el proyecto de nero cada poco. Nuevamente, sobre las 70 fotos se me queda colgado. Después de matar nero y volver a abrirlo con el proyecto salvado, puedo seguir metiendo más fotos y terminar el proyecto.

Pero cuando llega el momento de grabar en el DVD, el nero echa su tiempo en generar los menús y pase de diapositivas ... y se cae, desaparece sin más, sin grabar nada (menos mal, al menos no me ha fastidiado el disco). Tras dos o tres intentos con el mismo resultado, lo doy por imposible.

Se me ocurre cambiar mi windows 2000 por un xp, llevaba tiempo pensando hacerlo y tras la decepción de las diapositivas con nero, me decido, no vaya a ser que al cambiar de sistema operativo vaya mejor la cosa.

Sin embargo, microsoft es microsoft, windows es windows y funciona todo como ya sabemos. XP me ofrece actualizar el sistema conservando todo mis programas y datos de w2000. Le digo que sí, se pone a ello y al final falla.

Vaya por Dios, ya no arranca el ordenador ni en "instalando xp", ni en "windows 2000". No queda más remedio que echar mano del disco de w2000 y reparar el sistema. Luego, nuevamente a reinstalar varias cosas que al restaurar el sistema se han fastidiado.

En fin, que me he pasado un "provechoso" fin de semana entrenido con el nero y el windows.

03 marzo 2006

Los doclet de javadoc

Investigando con javadoc, nuevamente java me deja asombrado con su versatilidad y posibilidades.

Resulta que javadoc recoge la información de los ficheros java que le pasamos y le pasa dicha información a una clase java llamada Doclet. El J2SE lleva un Doclet por defecto y esta clase es la que genera la documentación html que conocemos de javadoc.

Sin embargo, es posible cambiar esta clase Doclet por defecto por otra nuestra hecha a medida. Es tan sencillo como hacerse dicha clase y llamar a javadoc de esta manera

$ javadoc -doclet <miclasedoclet> -docletpaht <pathdemiclasedoclet> <fichero.java>

En http://www.doclet.com hay un montón de clases Doclet (unas gratuitas y otras no) que modifican javadoc para generar la documentación de otra forma. Unos se comportan como el Doclet standard de java, pero generan los diagramas de clases y los insertan en la documentación, otros generan la documentación en pdf, en rtf, etc, etc.

Y, ¿por qué debe generar un Doclet documentación?. El Doclet recibe la información de los ficheros java, pero no tiene por qué generar documentación. Hay Doclets que generan los esqueletos para test de JUnit de las clases que le pasemos, otros nos formatean el código dejándolo bonito, otros lo revisan para ver si cumplimos las convenciones de código y otros, pasándoles un bean de java, son capaces de generar los EJBs necesarios para J2EE.

Finalmente, podemos hacernos nuestros propios Doclet. Un Doclet que simplemente saca un listado de clases por pantalla es tan tonto como esto (copiado de http://java.sun.com/j2se/1.3/docs/tooldocs/javadoc/overview.html):

import com.sun.javadoc.*;

public class ListClass {
public static boolean start(RootDoc root) {
ClassDoc[] classes = root.classes();
for (int i = 0; i < classes.length; ++i) {
System.out.println(classes[i]);
}
return true;
}
}

En fin, una nueva pequeña maravilla de java que nos abre un montón de posibilidades....

02 marzo 2006

Me han copiado un tutorial

En http://lawebdelprogramador.iespana.es/index3_archivos/menu/programas/rmi.htm he visto una copia de mi tutorial de rmi.

Me habría gustado que al principio pusieran un textos similar a "Este tutorial se ha extraido de ..." y un link a mi página, pero al menos el "copiador" no se ha molestado en quitar los links a otras de mis páginas ni el nombre "chuidiang", que aparece en varios sitios del tutorial.

Al menos me ha servido para ver cómo es la propaganda que mete iespana en las páginas web de sus usuarios. Dan php y mysql gratuito y llevo tiempo dándole vueltas a si abro o no ahí una página, llevándome la que tengo de enlaces de lycos, que funciona bastante mal (es desesperante subir ficheros a esa página).