31 mayo 2006

ResultSetMetaData

En su día, cuando me lie con java y base de datos, descubrí la clase ResultSetMetaData. Con esta clase podemos desde código conocer qué datos hay dentro de un ResultSet, sin necesidad de saberlo a priori en el momento de programar.

Gracias a esta clase, podemos hacer código muy genérico para meter los datos de una consulta en un JTable.

Acabo de meter un pequeño tutorial para introducir al uso del ResultSetMetaData. De paso, en el código de ejemplo del tutorial, se hace una clase genérica que permite meter cualquier ResultSet en un JTable usando el ResultSetMetaData.

La única pega es que el nombre para la cabecera de la tabla es la etiqueta que se defina en la base de datos. Es posible que algunas bases de datos no permitan poner una etiqueta distinta del nombre del campo en la tabla. En estos casos es necesario hacer algún arreglo en la clase genérica para que admite qué textos se quiere mostrar al usuario como etiquetas de cabecera en la tabla.

Websites as graphs - an HTML DOM Visualizer Applet

Otro invento curiosísimo que me acabo de encontrar: Websites as graphs - an HTML DOM Visualizer Applet

Metes una página web y te saca una especie de árbol en el que están los tags de esas páginas. Aparte de probar alguna, puedes ver fotos de flirck con algunos ejemplos que son realmente curiosos.

No sé si tiene utilidad, pero al menos es entretenido. Se necesita tener instalado java.

Hay más versiones de lo mismo:
http://www.texone.org/tree/tree.php?id=applet
http://a.parsons.edu/%7Echristine/fall_03/organic_html/flash/main.html

del.icio.us

Aunque hace tiempo que lo conozco, hasta hace poco no le había prestado atención. En del.icio.us te puedes dar de alta y puedes añadir tus páginas favoritas. Tiene varias ventajas respecto a añadirlas directamente en el navegador:

- Las tienes accesibles desde cualquier ordenador. Además, ahora que ando precisamente sufriendo windows, no tengo riesgo de perderelos.
- Las organiza por etiquetas que tú pones, de forma que si yo busco por mi etiqueta "java", tendré todos los links que he añadido relativos a java.
- Permite ver cuánta gente que está dada de alta ha añadido esa misma página a sus favoritos. A mí, que tengo una página web o incluso este diario, me viene bien porque me dice si hay gente que ha añadido mi página o mi diario a sus favoritos. Basta con que yo la añada para ver si otros también la han añadido.
- Permite ver o compartir los links de otros usuarios, con lo que viendo usuarios con tus mismas aficiones, puedes ver sus links y descubrir páginas interesantes.

Otra cosa interesante es que hay un plug-in para firefox que te pone unos botoncitos en la barra de herramientas y permite añadir o ver directamente los favoritos sin necesidad de navegar a esta página.

Ahí teneis mis favoritos: http://del.icio.us/chuidiang

30 mayo 2006

Recuperar Windows

Tengo dos ordenadores, uno en el trabajo y otro en casa, en el que en un momento dado he tenido problemas de arranque o de otras cosas. En ambos casos decidí coger el CD de windows 2000 y darle a la opción de "recuperar sistema" o de "reinstalar". En ambos casos respeta de alguna forma lo que hay y reinstala windows.

El caso es que ahora tengo dos ordenadores que van bastante mal. En ninguno de ellos funciona el windows update, siempre acaba dando error. Los programas, aunque los reinstale, hace cosas raras. Por ejemplo, apache se queda colgado casi al final de la instalación. Firefox no puede meter favoritos en marcadores ni recuerda el tamaño de la última vez que se abrió. Y así infinidad de detalles.

El caso es que la opción esta de recuperar-reinstalar parece que es una chapuza. Al final es mejor, si se tiene opción, hacer backup de todo lo que se tiene de interés e instalar windows formateando el disco duro. Si no se formatea, windows respeta lo existente y tenemos problemas.

27 mayo 2006

Es increible lo que nos depara el futuro

Hace tiempo que vi este video, pero ahora lo he encontrado en YouTube.

Una pantalla táctil en la que se hacen verdaderas maravillas. A ver lo que falta para que lleguemos a tener eso en nuestras casas.

26 mayo 2006

Atender a varios clientes con hilos

Me puse con un tutorial para ver cómo atender varios clientes a la vez en java usando sockets e hilos. Como al final resulta que es una tontería, me decidí a hacer un ejemplo un poco más complejo de lo habitual, un chat en java.

Bueno, el chat no es ninguna maravilla, pero el la base para un chat un poco mejor. Necesita cosas como:
  • Que el cliente busque al servidor en algún sitio que no sea el "localhost". Supongo que tendría que pedirlo al usuario antes de conectarse.
  • Debería pedir también un mote (nick dicen los ingleses) para identificar quién dice qué.
  • Según va apareciendo texto, la barra de scroll no se desplaza automáticamente para ver el nuevo texto. Habría que arreglarlo.
  • En el servidor habría que sincronizar el acceso a los datos. Aunque he puesto un synchronized, no me he preocupado de verificar si hace falta en más sitios.
  • No he controlado el tema de las desconexiones. Si un cliente cierra el programa, no he probado qué pasa en el servidor, pero posiblemente salte alguna excepción.
Bueno, si tengo tiempo lo acabaré arreglando. De hecho me interesa especialmente el tema de conseguir que el scroll se desplace automáticamente para mostrar la última línea que se añade.

Herramientas a mogollón

Como comentaba hoy con unos compañeros de trabajo, es una pena que tengamos que dedicarnos a los proyectos del cliente en vez de a investigar todo lo que hay por internet.

Leyendo un diario he descubierto que existe subversion. Es como CVS, pero se supone que lo mejora y está empezando a oirse más de él. El servidor de subversion se integra además si se quiere con un servidor apache. También hay plug-ins para eclipse, el subclipse.

También acabo de descubrir bugzilla. Es una especie de cosa que a través del navegador y supongo que contra una base de datos permite que la gente meta incidencias (o bugs) y se lleva un registro de ellos. Se pueden corregir, etc, etc. Lo usan gente como los de mozilla o eclipse. Sin embargo, además de un uso web, le veo una buena aplicación en el trabajo. A veces los sitios donde se prueban los proyectos están dentro de la empresa y en red, pero alejados de lso puestos de trabajo. Es una forma de llevar las incidencias de una forma centralizada. Según se prueba el proyecto, se van escribiendo las incidencias.

Otra del mismo estilo de bugzilla es Eventum, de los mismos de MySQL.

Tengo intención de probar Subersion y ver qué tal se integra con eclipse. En cuanto a las otras dos, les echaré un ojo a ver cual es más sencilla para los "usuarios". Si las veo demasiado completas, habrá que ir a algo más sencillo como phpticket, que no sé si es lo mismo estrictamente hablando, pero seguro que sirve para lo mismo.

25 mayo 2006

Maven

Hace tiempo, a petición del jefe, hice unos experimentos con maven para ver qué tal iba. En un par de días de prueba no me hice idea de si sirve para algo, pero creo que voy a ponerlo en algún proyecto para hacer una prueba más seria.

Esta mañana lo instalé nuevamente en windows. En instalación de maven hice un resumen de lo que fuí haciendo, aunque realmente no merece la pena porque es muy sencillo. Al hacerlo por segunda vez, lo hice más rápido y con menos problemas.

La primera pega que se me presentó la otra vez era el proxy de la empresa. Maven accede a internet para bajarse módulos y fichero .jar según los vamos necesitando. Había que configurar maven para que supiera cómo acceder y facilitara el nombre de usuario (el mio) y password de acceso al proxy. Como ya me peleé con ello la otra vez, esta vez fué rápida la configuración. Puedes ver lo que hay que tocar en el resumen que hice.

El siguiente problema que se me presentó al compilar con maven un proyecto grande de unas 3000 clases java, es que me daba un OutOfMemory. Buscando por internet encontré que poniendo la variable de entorno MAVEN_OPTS=-Xmx512m (opción para la máquina virtual de java) se arreglaba el problema y así fué.

El problema que tengo ahora es que maven por defecto compila con la versión 1.3 de java, aunque tengo instalada la 1.5. He visto por ahí que en un fichero de propiedades con un nombre adecuado y colocado en un sitio estratégico, se puede decir a maven con qué versión de java debe compilar. Mañana lo probaré.

24 mayo 2006

Applet de ejemplo de un paint en java

Una cosilla que hace tiempo que tenía ganas de hacer, una especie de paint brush estilo windows en java. Por supuesto, está algo más cutre, pero por fín lo he hecho.

Applet de ejemplo de un paint en java

Me llama la atención lo fácilmente ampliables que se pueden hacer las cosas con la orientación a objetos. Sin preocuparme demasiado de ello, pero si de no repetir código, se llega a una cosa que con poco esfuerzo más se puede ampliar mucho más.

Eufemismos cacofónicos

En mi empresa sueltan una especie de curso-charla-jornada de "Hacia la madurez en la organización de desarrollo". También se hacen "Evaluaciones del desarrollo del desempeño" y gracias a esasa cosas gana premios a la "excelencia empresarial".

Pero aquí seguimos currando todos apretados los unos con los otros, con cortes frecuentes de luz, ordenadores obsoletos que heredamos de los jefes que se compran portátiles nuevos para poder ver el word.doc que les manda la secretaria. Eso sí, todo de forma "excelente".

Al último curso al que me obligaron a ir, casi todo fuera de horario laboral por supuesto, era un módulo de "Programa de Gestión avanzada". Ahí, entre otros pasatiempos, hicimos grupos para hacer avioncitos de papel. Luego salimos al pasillo para probar cada grupo sus prototipos y finalmente una competición con el mejor prototipo de cada grupo para ver cuál llegaba más lejos.

La última fue un cartón satinado y multicolorín con el que se pretendía que hicieramos una pajarita, a la que podiamos dedicar un tiempo de un cuarto de hora, y se repartio a todos los empleados. No servía para nada (era propaganda para otro curso de estos cacofónico) y nos la dieron justo unos días antes de comunicarnos nuestra mini-casi-negativa subida de sueldo.

En fin, da gusto ver como hoy día a la gente se le llena la boca con palabras...

Otro fondo de escritorio

Esta otro es otro fondo de escritorio que me gustó mucho. Se llama "Barriendo el caos" y lo saqué de 20minutos.

Mi fondo de escritorio

Aquí si fondo de escritorio favorito. Me lo baje de upseros.

linux y windows

23 mayo 2006

Visor de HTML en java

En mi página de apuntes de programación acabo de añadir un pequeño componente java que permite visualizar ficheros html. En el applet de ejemplo correspondiente he puesto una especie de mini-navegador sencillo.

Creo que lo próximo será un Canvas que haga de base para un paint estilo windows, que permita pintar lineas de colores arrastrando con el ratón...

22 mayo 2006

El test del disparate | Kriptópolis

Aquí hay una compartiva entre "delitos" de pirateo y "delitos" habituales El test del disparate | Kriptópolis.

Está claro que el que tiene "enchufe", tiene "enchufe" y le hacen las leyes a medida.

20 mayo 2006

Manual ejemplos sencillos de programación avanzada c/linux gratis online

Me hacen gracia los de e-magister, que anuncian mi página web como Manual ejemplos sencillos de programación avanzada c/linux gratis online, hay que suscribirse a ellos para que puedan acceder a través de ellos a mi antigua página.

No recuerdo que hayan establecido contacto conmigo para comentármelo, ver si me parece bien, etc. Simplemente lo han hecho. Bueno, es otra forma más de que traigan visitas al sitio. También me sirve para ver opiniones de la gente sobre la página, aunque en alguna de ellas da la impresión de que la gente cree que la página es de e-magister.

stu nicholls | CSS PLaY | experiments with cascading style sheets

Me he quedado alucinado con stu nicholls | CSS PLaY | experiments with cascading style sheets.

Antes pensaba que css era simplemente para cambiar los colorines y fuentes. Cuando me metí un poco más en serio, vi que era una potente herramienta para colocar las cosas en su sitio, hacer columnas, menús laterales, etc, etc. Además, se podía cambiar la posición fácilmente, por lo que dar distintos aspectos a la misma página es bastante fácil (es un decir, hay que currarselo).

Sin embargo, esta página que menciono me ha dejado alucinado. Convierte a css casi en un lenguaje de programación con un montón de posibilidades. Echadle simplemente un ojo por ejemplo al "gradient magnifier". Simplemente hay que pasar el ratón por la escala que hay encima de la foto.

También llama la atención el "css slide show". Basta con pasar el ratón por encima de "set 1", "set 2" o "set 3" y luego pinchar sobre una de las fotos que aparecen.

Va a haber que tomarse esto de css más en serio.

19 mayo 2006

Yahoo y Google

Desde hace mucho tiempo conozco la utilidad del buscador de google de ver qué páginas enlazan a una determinada. Por ejemplo, para ver qué páginas enlazan con la mia, tengo que poner en el buscador de google

link:http://www.chuidiang.com

Sin embargo, los resultados siempre me habían llamado la atención, incluso con mi antigua página de http://www.geocities.com/chuidiang, y es que no salían ni mucho menos todas las páginas que enlzaban con la mía. Además, el page rank de dichas páginas no tenía nada que ver, puesto que sí salían páginas con pagerank 0, mientras que no lo hacían otras con pagerank más elevado.

Acabo de leer en un blog que google elige los links que muestra y que no están todos los que están. Si queremos algo más detallado, menos escogido, tenemos la misma funcionalidad en yahoo, se hace exactamente igual y saca muchos más resultados.

Bueno, ya he encontrado una excusa para visitar yahoo de vez en cuando.

18 mayo 2006

google trends

Con google trends podemos ver unas estadísticas desde mediados del 2003 de las búsquedas en google.

Poniendo una palabra, nos saca un gráfico en el tiempo con el número de búsquedas en función del tiempo. También nos dice qué ciudades han buscado más esa palabra, qué paises y en qué idiomas.

Si ponemos varias palabras separadas por comas, nos saca al gráfico comparativo de ellas. Sólo por hacer la prueba, puse "asp, php, jsp" para ver qué busca más la gente. Este es el gráfico que obtuve (php arriba en naranja, asp en medio en rojo y jsp abajo, en azul). La parte de abajo son la aparición de estas palabras en las noticias.



En cuanto a paises, es curioso, porque donde más se buscan estas cosas son en países asiáticos (India y Corea los dos primeros). El primer no asiático sale en décima posición y es Colombia. Realmente inesperado. Hombre sabemos que chinos hay muchos y es posible que esto se busque más, aunque sólo sea por cantidad, en países asiáticos. Me sorprende algo más lo de Colombia...

sodaconstructor

Me acabo de encontrar en internet una cosa curiosísima, sodaconstructor. Es una especie de juego con el navegador en java 5 (necesitamos tener instalado java 5).

Construimos una especie de bicho a base de poner rectas y músculos. Decimos cómo queremos que se contraigan y estiren los músculos y vemos cómo se mueve el bicho.

Es todo a base de ratón y nada complicado de jugar, otro cantar es conseguir algo que se mueva con sentido.

Resulta muy curioso cargar los que tienen como ejemplo, hay bichos realmente llamativos, desde "gusanos" hasta uno que parece un camello de los del imperio contra-ataca, de la guerra de las galaxias.

QuantumDB Eclipse Plugin

QuantumDB Eclipse Plugin es un plugin para eclipse que nos permite conectarnos a una base de datos y manejarla. Podemos ver los datos, hacer updates, removes e inserts, etc, etc. Es una herramienta más que se integra con eclipse y nos permite depurar nuestros programas que trabajan contra base de datos, viendo sin salirse de la herramienta los resultados en la BD.

Se instala tan fácilmente como cualquier otro plugin de eclipse, basta con desempaquetar el zip correspondiente en el directorio de eclipse.

Luego, dentro del IDE; en "window", "open perspective", "other" nos aparece quantum. En esta nueva perspectiva podemos cargar drivers java de mysql, oracle o lo que queramos, luego añadir conexiones a una especie de lista de conexiones y desde ahí conectarnos o desconectarnos cuando lo consideremos oportuno.

Realmente cómodo para no tener que tener una aplicación separada y revisar la base de datos mientras desarrollamos.

Windows está tan mal hecho, que es una maravilla

Después de reinstalar windows, perdí mis correos, favoritos del navegador, etc, etc. Uso firefox y thunderbird, ni se me ocurre el internet explorer ni el outlook.

Sin embargo, a pesar de la amenaza de windows al instalarlo de que iba a borrar mis documentos, pues no borró nada.

Si antes tenía un usuario administrador en c:\documents and settings\administrador, al reinstalar windows y decir que mi pc se iba a llamar cacharro, me ha respetado el antiguo directorio del administrador y ha creado uno nuevo c:\documents and settings\administrador.cacharro.

Recuperar el correo, favoritos y demás fué tan fácil como copiar el directorio c:\documents and settings\administrador\datos de programa\mozilla\firefox a su nueva ubiciación en c:\documents and settings\administrador.cacharro\mozilla\firefox y lo mismo con Thunderbird.

Windows, después de una instalación del sistema operativo, a pesar de amenazar con borrar las cosas, deja tanta porquería dentro, que es posible recuperar todo.

De hecho, al instalar el office 2003 (que nunca lo había tenido ni pienso usarlo, son cosas de la empresa), el outlook recuperó algunos correos sueltos ... ¡¡ del año 2002 !!. Se ve que en aquella época usé alguna versión antigua de outlook y todavía quedan trazas de aquellos correos.

Dichoso Windows

En el trabajo, debido a varios cortes de luz seguidos, se me "fué" el ordenador. El windows no volvió a arrancar.

Tras varios intentos, decidimos volver a instalar windows. Metemos el CD, nos sale el menú, vamos contestando a las cosas y en un momento dado windows nos informa que: "se borrará la carpeta c:\winnt y todo su contenido y la carpeta Mis Documentos".

¿¿??

¿Qué tiene que ver la carpeta Mis Documentos con el sistema operativo?. Entiendo que borre c:\winnt, entendería que borrara Archivos de programa, total, todos sabemos que esos programas no volverán a funcionar sin reinstalarlos, pero ¿la carpeta Mis Documentos?. ¿Es necesario borrar mis fotos de la cámara digital, mis cartas en word y los últimos chistes interesantes que me llegan por correo?.

Y lo peor de todo, es que encima te engaña. Luego no borra esa carpeta. Si yo tenía un usuario administrador y su carpeta era c:\documents and settings\administrador, resulta que al reinstalar y poner al pc en nombre mi-pc (nombre ficticio) crea un c:\documents and settings\administrador.mi-pc y respeta la antigua.

17 mayo 2006

Perl en latín

Me he tropezado con esto escribe perl en latin, una especie de forma de escribir perl en latín. Como si no fuera ya bastante complejo programar, para encima liarse con el lenguaje.

Y aquí http://www.csse.monash.edu.au/~damian/papers/HTML/Perligata.html está la explicación de cómo, en la que nos tienen que enseñar declinaciones en latín para programar correctamente.

Para los nostáligos de motif

Hace tiempo ví en la API de java un layout que desconocía, el SpringLayout. Hoy me he puesto a ojearlo y ¡qué sorpresa!, es cagadito a los attachment de motif.

Se añaden los componente en un panel y luego hay que indicar cada borde de los componentes (izquierdo, derecho, superior e inferior) a cuántos pixels de distancia va del borde de otro componente. Los componentes para usar los bordes pueden ser cualquiera de los añadidos e incluso el mismo contenedor. Una llamada como esta:

layout.putConstraint(SpringLayout.WEST, label, 5, SpringLayout.WEST, contentPane);

hace que el borde izquierdo de la etiqueta esté a 5 pixels del borde izquierdo el panel contenedor (por supuesto, label y contenPane son variables tipo JLabel y JPanel o equivalentes).

En http://java.sun.com/docs/books/tutorial/uiswing/layout/spring.html tienes el tutorial completito de sun sobre cómo usar este layout.

16 mayo 2006

Socket udp en java

El otro día un compañero me preguntó por los sockets udp en java. Nunca había trabajado con ellos, pero sí tenía el concepto por los sockets udp de C en linux, Nos pusimos a ello.

Salió bastante rápido y no es complejo, así que me decidí ¿cómo no?, a hacer un pequeño tutorial. Aquí tienes el resultado:

Ejemplo de socket udp en java.

15 mayo 2006

Nuevos ejemplos en mis apuntes de programación

No sé si voy a seguir mucho más, pero en la parte de java acabo de abrir una nueva sección con clases listas para ser reutilizadas.

He metido ahí la librería gráfica que hace tiempo que tengo, así como un par de paneles que admiten imágenes de fondo y una clase para búsqueda de ficheros, que le hice para alguien del foro.

En estas dos páginas, la que tiene la lista de componentes reutilizables y la de applets de ejemplo, he hecho mis primeros pinitos con css, aunque no se note, poque el estilo es el de siempre. Y también he metido algo de cutre-php, sólo uso el include. A ver qué tal se porta eso.

13 mayo 2006

Solucionado lo de css

Después de pelearme unas cuantas horas tratatando de hacer con css una simple línea en la que hubiera tres palabras, una a la izquierda, otra en el centro y otra a la derecha, me decidí a escribir en un foro de css y me contestaron.

Esta claro que de momento no tengo ni puñetera idea y que debo pelearme un poco más con ello.

Con la solución que me han dado:

#cabecera1, #cabecera2, #cabecera3 {
border: 1px solid black;
width: 33%;
float:left;
}
#cabecera1 {text-align: left;}
#cabecera2 {text-align: center;}
#cabecera3 {text-align: right;}

queda todo mucho más elegante y además funciona.

Al menos he aprendido que los float: left se apilan hacia la izquierda, de forma que este código css en realidad lo que hace son tres columnas de igual ancho.

Seguiré con ello.

css

Con la página de apuntes de programación tengo un problemilla y es que cada página la hago "artesanalmente" con html. Cuando tengo que hacer algún cambio que afecte a todas las páginas, como cambiar un enlace o si quiero darless otro aspecto, es un verdadero rollo ir una por una haciendo la modificación en todas y subirlas al servidor.

Para el tema de la cabecera, el pie y los anuncios de google se me ocurre que puedo hacer un ficherito para cada uno de esos trozos. Luego, aprovechando php, hacer simplemente un "include" de esos ficheritos. De esta forma, cambiando el ficherito, se cambia en todas las páginas.

Para el aspecto, conocía la existencia de css e hice alguna pruebecilla en su día, así que decidí mirarlo un poco más en serio. Intenté hacer una página nueva con el mismo aspecto de las otras usando css. Bien, css es una nueva cosa que me ha dejado asombrado, es increible la cantidad de posibilidades que tiene que me resultaban desconocidas.

En css Zen Garden hay una página echa con html y css. En el menú de la derecha puedes cambiarle el aspecto a la página eligiendo otro css. Puedes probar y verás los cambios espectaculares sobre la misma página.

De momento el problema "gordo" que se me ha presentado, es que los navegadores no interpretan igual las cosas. Pretendo hacer una única linea de texto con tres palabras, una a la izquierda, otra en el centro y otra a la derecha. Defino tres estilos o como se llame así

#cabecera1 {
text-align: left;
border-style: solid;
width: 33%;
display: inline;
}
#cabecera2 {
width: 33%;
text-align: center;
border-style: solid;
display: inline;
}
#cabecera3 {
width: 33%;
border-style: solid;
text-align: right;
display: inline;
}

y luego, en la página con tres div, uno con cada estilo, pongo las tres palabras. Internet explorer hace lo que quiero, firefox no coge el ancho. Si quito lo de display inline, entonces firefox sí coge el ancho, pero no sale todo en la misma línea. Si consultas por ahí, todo el mundo dice que internet explorer es el malo porque interpreta css como le da la gana y que firefox es el bueno, porque sigue estrictamente el standard de css.

¿Cómo demonios se hace entonces eso?

12 mayo 2006

El que no corre vuela

Hace un tiempo recibí un correo de una persona de una empresa que me había visto en los foros de java. En el correo me comentaba que yo parecía tener conocimientos de SWING y que si quería trabajar con ellos, le enviara un correo. La empresa es bastante conocida (no es una empresilla cualquiera), pero no contesté al correo.

Pensé que este señor había pensado, al verme en los foros, que yo era un estudiante o un recién titulado. La verdad es que ya tengo mis añitos y llevo 12 trabajando en la misma empresa, bastante más grande y conocida que la del correo. Como no tenía ganas de andar indagando el tipo de trabajo que me ofrecía, sueldo, meterme otra vez en entrevistas, etc, al final, simplemente, no conteste.

Ahora, en el mensaje 11 de mi libro de visitas he recibido una oferta de hosting gratuito para mi página de apuntes de programación. También la he rechazado porque, aunque pago, estoy contento con mi actual hospedaje en hostito. Además, acabo de pasar toda la página ahí y no me apetece volver a moverla.

A ver si me siguen llegando ofertas de estas, seguro que al final alguna cuela...

10 mayo 2006

Más vueltas con rmi

Sigo dale que te pego con rmi.

Primero retoqué el tutorial de rmi para obtener un ejemplo con lo básico e imprescindible de rmi.

Acabo de añadir otro que lo complica un poco, pasando como parámetros en los métodos del objeto remoto clases Serializable y Remote. Esto, como se explica allí, es casi equivalente a pasar parémtros por valor o por referencia a un método normal.

Ahora tengo que retocar el tutorial que hice de SecurityManager, porque está mal enfocado y no cuadra con los otros dos tal cual. En él explicaré qué es y la necesidad de la carga dinámica de clases, así como todo lo del SecurityManager. Con un poco de suerte, para mañana está hecho ...

07 mayo 2006

Más sobre rmi

Bueno, esta vez hay varias cosas sobre rmi y el tutorial de rmi.

Por un lado, mande un correo a la persona que había copiado el tutorial en http://siul02.si.ehu.es/%7Ejimena/ISO/LAB_4/LAB_4.htm pidiéndole que pusiera un enlace al original. Me constestó amablemente y ya ha puesto el enlace.

En cuanto al tema de seguridad y los experimentos que he hecho, así como el tutorial de SecurityManager, veo que tuve unos problemas de concepto.

Es posible hacer, como indiqué allí, que un cliente envíe una clase maliciosa al servidor que haga algo que no debe y que el servidor puede protegerse contra estas acciones por medio del SecurityManager y el fichero java.policy. Sin embargo, veo que no es tan fácil. Si la clase enviada no está en el CLASSPATH del servidor, no se acepta con tanta facilidad como yo pretendía. Si está en el classpath del servidor, el problema no es tan grave, puesto que es una clase propia del servidor y se supone que no tiene código maloso.

Buscando por internet, veo que sí es posible enviar clases que no existen en el classpath del servidor y que este las cargue dinámicamente (carga dinámica de clases en rmi) y las use. Sólo en ese caso es donde está el problema de seguridad.

Esto sólo es posible con rmi (no con sockets) y rmi por defecto no carga este tipo de clases si no tiene un SecurityManager instalado. En mis pruebas, poniendo un RMISecurityManager y poniendo un fichero java.policy con todos los permisos para todo el mundo, no he conseguido que se carge dinámicamente una clase. Seguiré investigando y posiblemente tenga que cambiar/ampliar los tutoriales ....

05 mayo 2006

Open Source EJB Servers

Una lista de contenedores EJB gratuitos.

Open Source EJB Servers

Jose Daniel . es

Aquí la página de un amiguete. Tiene fotos de cuando se fue a esquiar a Costa Rica.

Seguridad en rmi

Gracias a una "charla" en el foro http://www.forosdelweb.com/showthread.php?t=390224, me puse a ver en qué momentos es mejor usar sockets y en qué momentos es mejor usar rmi. Aunque GreenEyed no está de acuerdo, estas son las conclusiones que encontré buscando por internet.

Luego, también por la misma charla, me puse a mirar también el por qué del SecurityManager y el fichero java.policy. Lo que encontré es algo que me llamó bastante la atención.

Aunque todavía no estoy seguro de ello y quiero hacer unos experimentos, el "problema" de seguridad con rmi que obliga al uso e SecurityManager y java.policy es el siguiente:

Cuando un objeto remoto recibe como parámetro un objeto Serializable, se hace una copia del objeto que tiene el cliente en el servidor.
Si un cliente malicioso hace un objeto con código malicioso y lo pasa como parámetro en un método remoto, se está haciendo copia de ese objeto con código malicioso en el servidor. Es posible que el servidor llame a un método inocente de este objeto (por ejemplo, un getNombre()) y en ese método se ejecute el código malicioso.

Esto se evita instalando en el servidor el SecurityManager y el java.policy. En el fichero java.policy, aunque en casi todos los ejemplos se deja con todos los permisos para todo el mundo, se pueden restringir los permisos para cada clase en concreto, en función de que venga o no firmada, se le puede dar permiso o no para abrir y conectarse a sockets, en determiados puertos, para acceso de lectura sólo a determinados directorios del disco, etc, etc.

En el tutorial de java de sun también aconseja el SecurityManager y java.policy en los objetos devueltos por un método remoto y en las excepciones lanzadas por el mismo. No entiendo porqué en el servidor, imagino que se refiere a hacerlo en el cliente, por si el servidor es algo malo y pretende recopilar información "oculta" del cliente que se le conecta.

Sigo en ello y quiero hacer experimentos.
  • Probar a arrancar el rmiregistry desde java.
  • Hacer un código malicioso en el cliente y ver que efectivamente puede hacer o no lo que le de la gana en función del java.policy.
Luego modificaré y añadiré esta información al tutorial de rmi.

04 mayo 2006

Otra vez el mismo tutorial copiado

Buscando por internet cosas sobre java.policy, acabo de ver otro tutorial, el de rmi (el mismo de la vez anterior), que me han copiado. Esta vez, al menos, lo han modificado y dado forma, aunque sigue reconociéndose mi "inconfundible" estilo.

El original mio es Ejemplo simple de rmi en java.

La copia está en http://siul02.si.ehu.es/~jimena/ISO/LAB_4/LAB_4.htm. Según lo iba leyendo, me iba sonando, el ejemplo, lo de sumar dos números, etc. Pero la frase final...

"Para que el código del cliente compile necesita ver en su classpath a InterfaceRemota.class. Para que además se ejecute sin problemas necesita además ver a ObjetoRemoto_Stubs.class, por lo que estas clases deben estar accesibles desde el servidor o bien tener copias locales de ellas."

es exactamente igual que el mio, así que me despejó toda posible duda.

La otra copia de este tutorial sigue estando en http://lawebdelprogramador.iespana.es/index3_archivos/menu/programas/rmi.htm, aunque aquí la copia es más descarada.

Sockets vs RMI

He estado investigando un poco sobre cuándo usar sockets y cuándo rmi.

Parece que por dificultad de programación son algo peor los sockets, ya que necesitan leer el mensaje e identificar cuál es para obrar en consecuencia. En rmi, como se basa en llamadas a métodos, no hay que hacer ninguna programación especial.

Sin embargo, rmi lleva un protocolo interno que utiliza bastante ancho de banda de nuestra conexión, mientras que con sockets se usa bastante menos, ya que sólo circulan los datos y lo que nosostros queramos meter.

La conclusión es que si nuestra red es lenta, hay pocos mensajes y son principalmente para transferir ficheros, es mejor sockets.

Si hay nuestra red es rápida y hay muchos mensajes en los que se transmiten pocos datos, es mejor rmi.

En Sockets & rmi de la ChuWiki he puesto algo de esto además de un enlace bastante interesante sobre el tema.

03 mayo 2006

Estoy perdido con php

Ando un poco perdido php. Me apetece aprenderlo y además de leer un poco, pienso que la mejor forma de aprender un lenguaje de programación es ponerse a hacer algo.

Sin embargo, veo que en php está casi todo hecho y descargable gratis: hay foros, chats, diarios, wikis, incidencias (los llaman tickets), enlaces, libros de visitas, etc, etc.

¿Qué demonios programo y que tenga un mínimo de utilidad, al menos para mi mismo?. Esta todo hecho y mejor de lo que podría hacerlo yo.

Bien por Hostito

Tengo mi página web de programación alojada en Hostito. El Viernes pasado instalé una wiki a la que llamo ChuWiki. Todo funcionó correctamente durante tres o cuatro días, pero...

Ayer por la tarde, de repente, dejó de funcionar, dando un "internal server error". Envié la incidencia a Hostito. Inmediatamente recibí el correo-robot de que mi incidencia había sido recibida y que sería atendida. 10 minutos más tarde (aunque ya no vi el correo), recibí un correo de una persona indicando que no sabía cual podía ser el error y preguntando sobre la instalación de la wiki.

Esta mañana le constesté. Por la tarde encendí el ordenador y vi un correo de hacía 40 minutos de que iban a recompilar el servidor y el php. Miré la ChuWiki y ya funcionaba.

Resumiendo, me solucionaron el problema en menos de 24 horas y la tardanza fué, casi seguro, por la diferencia de horario: ellos están en San Francisco y yo en España, así que mi correo de esta mañana llegó sobre sus 12 de la noche.

Es de agradecer la atención, sobre todo en estos tiempos en que las empresas grandes te ponen teleoperadores muy amables que toman nota de todo y no solucionan nada.

02 mayo 2006

Foro de Java y JSP

Habitualmente me solía meter en el foro de lawebdelprogramador y en el foro de programación, pero sobre todo este último, cada vez me gustan menos. Se ve que son foros antiguos y no permiten poner enlaces, caretos ni demás. El de programación, además, llevaba una temporada con muchos fallos, ponen un texto de confirmación al introducir un post que muchas veces ni siquiera se ve entero y parece que la moderación es nula. En concreto, en el de C/C++ del mismo sitio hay más "socorros" que dudas serias.

He descubierto hace un par de días un foro de java y jsp que me gusta bastante. Tiene la suficiente actividad como para resultar entretenido y parece que los moderadores están en ello. No veo mensajes del tipo "socorro, que alguien me haga los deberes, urgente", así que supongo que los borran.

Estaré por allí una temporada, aunque no abandonaré los otros dos del todo.

01 mayo 2006

Estadísticas de Abril con Adsense

Cuando me planteé meter anuncios de google adsense en mi página web, la primera pregunta era obvia. ¿Cuanto puedo sacar? ¿Merece la pena?

Google no aclara nada en su ayuda. Más o menos viene a decir "Como es gratis, lo mejor que puedes hacer para saber cuánto vas a ganar es darte de alta y comprobarlo".

Por ello, pongo aquí mis estadísticas del mes de Abril, por si a alguien puede servirle como idea de cuánto se puede ganar.

En el mes de Abril se han mostrado 61294 aununcios en mis páginas, se han hecho 607 clicks en ellos y me pagan 73.27$.

Esto quiere decir que se hace click en un anuncio en un 0.99% de los casos (cada 100 muestras de anuncio, un click). Pagan de media a unos 12 centavos por click.

Resumiendo para el cálculo rápido, por cada 1000 páginas vistas (muestra de anuncios) se gana unos 1.20$.

Esto puede variar teniendo en cuenta varias cosas:
  • Si consigues poner los anuncios mejor que yo, igual consigues más click por cada 1000 visitas, ganando más. Si los pones peor, te saldrá una estadística peor.
  • El coste por click depende mucho de la empresa que se anuncia. Este que pongo aquí, 12 centavos por click es para el tipo de empresas que se anuncian en una página de programación en C y java. Si tu página habla de alcachofas posiblemente te paguen menos por click y si habla de pisos, te pagarán más.
En cuanto al cuadro de búsqueda en google, ese apenas merece la pena. En este mes de Abril con ese número de visitas, se han hecho 572 consultas, se hecho click en alguno de los anuncios resultantes de la consulta en 9 ocasiones y me pagan por ello 50 centavos en total.

Cambio de jefe

En la empresa que trabajo, hace poco nos han cambiado de jefe de departamento. Como la cosa no estaba bien organizada y los proyectos, sobre todo uno, iba bastante mal, este nuevo jefe tiene intención de reorganizar la cosa de otra manera.

El Viernes me llamó para comunicarme la subida de sueldo de este año y de paso, contarme lo que tiene pensado para mí.

Me va a poner, junto con otro, como "expertos" de java del departamento. Se supone que nos va a dejar un poco aparte de los proyectos y nos va a dar las siguientes responsabilidades:
  • Formar en java a la gente nueva que entre.
  • Hacernos lo más expertos posible en java y herramientas asociadas, metiéndonos en internet, en foros, etc y estar los más al día posible. De esta forma se supone que podremos aconsejar a la gente de proyectos qué herramientas tienen disponibles y cuales usar.
  • Realizar librerías en java que puedan reutilizar la gente de los proyectos. Por ejemplo, algo similar a la librería gráfica que me hice para la página web.
  • De "apaga-fuegos". Cuando en algún proyecto surga algún problema técnico especialmente liado (sockets que no van, etc), nos tocará echar una mano.
De alguna forma, como a mí lo de los proyectos no es algo que me guste demasiado, más que nada por el tema de documentación y de trato con el cliente, para mi este puesto en principio me gusta más. Además, estas tareas ya casi son las que oficialmente desempeño, puesto que todo eso me gusta mucho y me dedico a ello.

A ver en qué queda todo...