Acabo de comprarme un monitor TFT de 19" y marca "ni-su".
Lo cogí en el beep de debajo de casa, en una oferta baratita (el más barato que he encontrado de 19"). La marca es hannsg y el monitor es HC194DP.
En principio estoy contento. No soy jugador empedernido del Quake ni un fan de ver películas divx. Soy más bien programador de ver pantallas de texto todo el rato, así que el monitor se comporta bastante bien. No sé que tal irán los refrescos con juegos de acción y películas de la guerra de las galaxias.
Tiene un par de altavoces, que no son gran cosa ni de gran calidad. El ajuste de volumen es algo incómodo y no puedo bajarlo lo suficiente. El nivel más bajo es demasiadao alto para trabajar a altas horas de la madrugada con mujer y niños durmiendo en habitaciones cercanas. Aunque bien pensado, puedo jugar con el volumen de windows, ese altavocito que sale abajo a la derecha.
También es el primer monitor TFT que tengo, así que no tengo nada con qué comparar. Antes en casa tenía uno de tubo de 14" o 15", así que 19" ahora me parecen una maravilla. En el trabajo tengo también uno de tubo de 17" (creo). Ya sabes, trabajo en una empresa de tecnología punta.
16 septiembre 2006
15 septiembre 2006
Joel on software
Ya lo mencioné en un post anterior, pero llevo varios días leyendo artículos de él y casi todos son geniales.
En Joel on software hay pequeños artículos en español (hay muchos más en inglés) sobre metodologías y formas de organizar y trabajar en los proyectos de software.
En ellos se cuentan verdades como puños, se pone a parir a las metodologías serias, a los consultores, a la política de la mayoría de las empresas y a muchas de las cosas que se dan por supuestas. Básicamente defiende que para hacer buen software lo que necesitas son buenos programadores y un mínimo de organización/planificación.
Las metodologías tradicionales no son más que un montón de reglas que tratan de hacer que los programadores mediocres llegen a un nivel mínimo, pero que atan y hacen sentirse incómodos a los buenos programadores.
Aunque en tu proyecto no haya algunas buenas costumbres, puedes implantarlas tú mismo, aunque no seas jefe, símplmente dedicando un poco de tiempo cada día para irlo haciendo sólo para tí en tu pc. Poco a poco, cuando la gente vaya viendo la utilidad de ello, se irán metiendo, aunque no hay un "jefe" que diga que hay que hacerlo así.
Esto es una de las cosas que he comprobado personalmente. En muchas ocasiones he hecho cosas para mí o como favor personal a un compañero, que me resultaban útiles a mí o a mi compañero, y he visto cómo se han "divulgado" incluso entre los "jefes" y lo han convertido en algo "importante" e "imprescindible". Recuerdo en concreto una interface gráfica para un equipo, que empecé a hacer por mi cuenta, como favor a un compañero. Cuando mi jefe me vio haciéndola, me prohibió seguir con ella, había otras cosas más importantes que hacer a las que dedicar mi tiempo. De todas formas, seguí haciéndola y cuando estuvo terminada, acabó en una feria en Paris para mostrar el equipo a los visitantes. Es más vistoso enseñar en una pantalla el equipo funcionando que enseñar el equipo apagado sobre una vitrina.
Volviendo a Joel on software, en la página hay montones de artículos divertidos del estilo comentado y prácticamente ninguno de ellos tiene desperdicio.
En Joel on software hay pequeños artículos en español (hay muchos más en inglés) sobre metodologías y formas de organizar y trabajar en los proyectos de software.
En ellos se cuentan verdades como puños, se pone a parir a las metodologías serias, a los consultores, a la política de la mayoría de las empresas y a muchas de las cosas que se dan por supuestas. Básicamente defiende que para hacer buen software lo que necesitas son buenos programadores y un mínimo de organización/planificación.
Las metodologías tradicionales no son más que un montón de reglas que tratan de hacer que los programadores mediocres llegen a un nivel mínimo, pero que atan y hacen sentirse incómodos a los buenos programadores.
Aunque en tu proyecto no haya algunas buenas costumbres, puedes implantarlas tú mismo, aunque no seas jefe, símplmente dedicando un poco de tiempo cada día para irlo haciendo sólo para tí en tu pc. Poco a poco, cuando la gente vaya viendo la utilidad de ello, se irán metiendo, aunque no hay un "jefe" que diga que hay que hacerlo así.
Esto es una de las cosas que he comprobado personalmente. En muchas ocasiones he hecho cosas para mí o como favor personal a un compañero, que me resultaban útiles a mí o a mi compañero, y he visto cómo se han "divulgado" incluso entre los "jefes" y lo han convertido en algo "importante" e "imprescindible". Recuerdo en concreto una interface gráfica para un equipo, que empecé a hacer por mi cuenta, como favor a un compañero. Cuando mi jefe me vio haciéndola, me prohibió seguir con ella, había otras cosas más importantes que hacer a las que dedicar mi tiempo. De todas formas, seguí haciéndola y cuando estuvo terminada, acabó en una feria en Paris para mostrar el equipo a los visitantes. Es más vistoso enseñar en una pantalla el equipo funcionando que enseñar el equipo apagado sobre una vitrina.
Volviendo a Joel on software, en la página hay montones de artículos divertidos del estilo comentado y prácticamente ninguno de ellos tiene desperdicio.
Primeros días con Bugzilla
Como comenté en un post anterior, acabo de instalar Bugzilla en el trabajo, en mi propio PC y para uso general.
La herramienta en sí está muy bien. Es cómoda de usar, no requiere demasiado aprendizaje y funciona muy bien. Echo de menos alguna cosilla, como la posibilidad de poner más campos para exportar en el formato CSV (en concreto la descripción larga del bug). También el poder restringir permisos a los usuarios, como el de abrir o cerrar incidencias, etc. En principio cualquier usuario que puede modificar incidencias puede modificar CUALQUIER campo de la incidencia. Sería quizás interesante que sólo pudieran cerrar incidencias o cambirar prioridades los responsables de las pruebas. De todas formas, nada grave, siempre y cuando se establezcan unas normas generales y la gente del proyecto sea más o menos responsable. Y lo son, teniendo en cuenta que todo lo que hagan queda registrado con su usuario.
De todas formas, quizá todo estos temas de permisos sean posibles y simplemente todavía no he encontrado dónde. Hay cosas, por ejemplo, como que cualquiera puede dar de alta un bug, pero queda en estado "sin confirmar", hasta que un usuario con permiso de confirmación lo confirme.
Me ha llamado la atención la buena acogida que ha tenido entre la gente del trabajo. Se lo he enseñado primero a los más "allegados", pero rápidamente se ha corrido la voz e incluso se han registrado como usuarios algunos "jefes". Por supuesto, ellos le han encontrado otras utilidades a la herramienta. La más pérfida es ver si trabajamos o no y vamos resolviendo bugs. Encima, como todo queda registrado con quién hace qué, pueden incluso saber quién resuelve más y quién menos.
La otra utilidad que le han visto los jefes es el de enseñársela a los clientes. Siempre han pedido que tengamos una herramienta de gestión de bugs interna. Siempre hemos dicho que la teníamos, pero ahora es la primera vez que podemos enseñar algo parecido. Creo que incluso lo quieren enseñar en las auditorías. También para preparar informes rápidamente que entregar a los clientes sobre el estado de nuestras incidencias internas.
La herramienta en sí está muy bien. Es cómoda de usar, no requiere demasiado aprendizaje y funciona muy bien. Echo de menos alguna cosilla, como la posibilidad de poner más campos para exportar en el formato CSV (en concreto la descripción larga del bug). También el poder restringir permisos a los usuarios, como el de abrir o cerrar incidencias, etc. En principio cualquier usuario que puede modificar incidencias puede modificar CUALQUIER campo de la incidencia. Sería quizás interesante que sólo pudieran cerrar incidencias o cambirar prioridades los responsables de las pruebas. De todas formas, nada grave, siempre y cuando se establezcan unas normas generales y la gente del proyecto sea más o menos responsable. Y lo son, teniendo en cuenta que todo lo que hagan queda registrado con su usuario.
De todas formas, quizá todo estos temas de permisos sean posibles y simplemente todavía no he encontrado dónde. Hay cosas, por ejemplo, como que cualquiera puede dar de alta un bug, pero queda en estado "sin confirmar", hasta que un usuario con permiso de confirmación lo confirme.
Me ha llamado la atención la buena acogida que ha tenido entre la gente del trabajo. Se lo he enseñado primero a los más "allegados", pero rápidamente se ha corrido la voz e incluso se han registrado como usuarios algunos "jefes". Por supuesto, ellos le han encontrado otras utilidades a la herramienta. La más pérfida es ver si trabajamos o no y vamos resolviendo bugs. Encima, como todo queda registrado con quién hace qué, pueden incluso saber quién resuelve más y quién menos.
La otra utilidad que le han visto los jefes es el de enseñársela a los clientes. Siempre han pedido que tengamos una herramienta de gestión de bugs interna. Siempre hemos dicho que la teníamos, pero ahora es la primera vez que podemos enseñar algo parecido. Creo que incluso lo quieren enseñar en las auditorías. También para preparar informes rápidamente que entregar a los clientes sobre el estado de nuestras incidencias internas.
12 septiembre 2006
Otros lenguajes que compilan a bytecodes
En lenguajes que compilan a bytecode hay una noticia que me ha llamado la atención. Por lo visto hay más lenguajes de programación, aparte de java, que compilan y generan bytecodes de java, de forma que se pueden ejecutar en una máquina virtual java. No deja de ser una opción interesante quizás para ciertas tareas, que resulten más fáciles de desarrollar en uno de estos lenguajes que en java.
¿Se podrán mezclar los bytecodes de un lenguaje con los de otro?. Creo que sería una prueba interesante de hacer.
¿Se podrán mezclar los bytecodes de un lenguaje con los de otro?. Creo que sería una prueba interesante de hacer.
05 septiembre 2006
Agregar meneame y del.icio.us a blog en blogger
Pues nada, en Agregar meneame y del.icio.us a blog en blogger tienes cómo hacerlo.
03 septiembre 2006
Meneando noticias
Me he dedicado un poco a navegar por internet, intentando enterarme de algunas cosas sobre los blogs, feeds y demás que no acabo de entender bien como van. Aquí van algunas pequeñas explicaciones de lo que creo que he entendido, que seguramente será inexacto y equívoco, y algunos enlaces.
Resulta que los diarios (blogs), wikis, páginas de periódicos y muchas otras páginas tienen una cosa que llaman "feed". Esa cosa es una especie de página en un formato simple con las últimas noticias que se publican en ese blog, wiki y tal. El que hace el blog no tiene que preocuparse de ello, se hace automáticamente.
Este, por ejemplo, es el feed de este blog. Si lo estás viendo con firefox, pincha en "ver", "estilo de página", "sin estilo" para verlo más mejor. El de este blog es un fichero "atom.xml" (el que ofrece blogger). También hay otros con "rss", que es más o menos lo mismo, un fichero resumen, pero de otra manera.
Existen por otro lado montones de herramientas capaces de anotar estos feeds, de forma que un internauta pueda ver rápidamente los últimos añadidos a sus blogs favoritos. Por ejemplo, el mismo navegador firefox, se puede añadir como "favorito vivo" un "rss" de estos, de forma que en tus favoritos aparecerán automáticamente las, por ejemplo, 20 últimas publicaciones en ese blog. En http://www.coseju.com/rss.php?PHPSESSID=cf6fdcce689002c950e1d7ace36f6cbf tienes cómo hacerlo.
En el rss de este diario, tienes arriba a la derecha un "suscribe now". Ahí aparecen un montón de herramientas capaces de suscribirte a este diario. Debes elegir la que tengas. Por ejemplo, puedes, si tienes cuenta de gmail, ponerlo en tu página de búsqueda de google personalizada.
Hay sitios, como feedburner, que ofrecen a los que publican blogs la posibilidad de poner un icono
en su sitio indicando que tienen "feed" y de alguna manera ellos lo ofrecen. La gente, pinchando el icono puede "suscribirse" a estas noticias con alguna de las herramientas comentadas antes, como el navegador firefox. La persona que publica el blog puede enterarse, a través de feedburner, cuantos navegantes hay suscritos a su "feed". En fin, algo complejo que todavía no acabo de entender bien y tengo que ver mejor como funciona esto.
Finalmente, supongo que con un fin parecido pero de otra manera, me he tropezado con meneame, un sitio en el que la gente manda noticias que se encuentra en los blogs y demás. Los visitantes de meneame pueden ver las noticias que han enviado los demás y darles un voto ("menearla") si les gusta. Meneame muestra primero las noticias más votadas, de forma que de alguna manera tienes una página de noticias "favoritas" de la gente. Vaya, otra cosa a investigar.
Supongo que la idea final de todo esto es que tú no tengas que revisar todos los blogs favoritos, sino tener las últimas noticias de todos ellos en un único sitio, el navegador firefox, la página de búsqueda de google u otras páginas (como netvibes), de forma que simplemente entrando ahí, ves las últimas publicaciones de todos tus sitios favoritos.
La verdad es que todas estas cosas avanzan muy rápido y me desbordan, sobre todo si tu actividad principal es otra, java en mi caso.
Resulta que los diarios (blogs), wikis, páginas de periódicos y muchas otras páginas tienen una cosa que llaman "feed". Esa cosa es una especie de página en un formato simple con las últimas noticias que se publican en ese blog, wiki y tal. El que hace el blog no tiene que preocuparse de ello, se hace automáticamente.
Este, por ejemplo, es el feed de este blog. Si lo estás viendo con firefox, pincha en "ver", "estilo de página", "sin estilo" para verlo más mejor. El de este blog es un fichero "atom.xml" (el que ofrece blogger). También hay otros con "rss", que es más o menos lo mismo, un fichero resumen, pero de otra manera.
Existen por otro lado montones de herramientas capaces de anotar estos feeds, de forma que un internauta pueda ver rápidamente los últimos añadidos a sus blogs favoritos. Por ejemplo, el mismo navegador firefox, se puede añadir como "favorito vivo" un "rss" de estos, de forma que en tus favoritos aparecerán automáticamente las, por ejemplo, 20 últimas publicaciones en ese blog. En http://www.coseju.com/rss.php?PHPSESSID=cf6fdcce689002c950e1d7ace36f6cbf tienes cómo hacerlo.
En el rss de este diario, tienes arriba a la derecha un "suscribe now". Ahí aparecen un montón de herramientas capaces de suscribirte a este diario. Debes elegir la que tengas. Por ejemplo, puedes, si tienes cuenta de gmail, ponerlo en tu página de búsqueda de google personalizada.
Hay sitios, como feedburner, que ofrecen a los que publican blogs la posibilidad de poner un icono
Finalmente, supongo que con un fin parecido pero de otra manera, me he tropezado con meneame, un sitio en el que la gente manda noticias que se encuentra en los blogs y demás. Los visitantes de meneame pueden ver las noticias que han enviado los demás y darles un voto ("menearla") si les gusta. Meneame muestra primero las noticias más votadas, de forma que de alguna manera tienes una página de noticias "favoritas" de la gente. Vaya, otra cosa a investigar.
Supongo que la idea final de todo esto es que tú no tengas que revisar todos los blogs favoritos, sino tener las últimas noticias de todos ellos en un único sitio, el navegador firefox, la página de búsqueda de google u otras páginas (como netvibes), de forma que simplemente entrando ahí, ves las últimas publicaciones de todos tus sitios favoritos.
La verdad es que todas estas cosas avanzan muy rápido y me desbordan, sobre todo si tu actividad principal es otra, java en mi caso.
01 septiembre 2006
Mylar
Un compañero de trabajo, aprovechando que he puesto bugzilla, a hecho unas pruebas con Mylar.
Mylar es un plug-in para eclipse que permite gestionar nuestras tareas, poniendo tiempos de inicio, de fin, avisos, etc, etc. Vaya, un planificador de tareas integrado en eclipse.
Una vez creada una tarea, cuando trabajamos en ella, hay dos cosas interesantes que hace Mylar. Por un lado lleva el tiempo que estamos trabajando en esta tarea. Por otra, y lo que es realmente interesante, es que podemos "filtrar" las clases que vemos en nuestro arbol de clases de forma que sólo se ven las que estamos usando. Esto es muy interesante en proyectos grandes. Cuando dentro del proyecto grande, de miles de clases, trabajamos en un tema concreto, sólo veremos un grupo reducido de clases, las que nos han ido haciendo falta. Se facilita un montón el tema de navegar entre clases.
Mylar se integra además con bugzilla, trac y jira. Cuando creamos una nueva tarea, podemos poner la url de un bug que esté registrado por ejemplo, en bugzilla. Al hacerlo, el nombre de la tarea se pondrá automáticamente como el nombre del bug y además, permite abrir en una pestaña de eclipse un navegador en el que veremos el bug de bugzilla y podremos modificarlo.
La parte de bugzilla es curiosa, pero no sé si merece la pena abrir una tarea por cada bug, sobre todo en proyectos grandes en los que hay miles y miles de bugs. Quizás sea interesante si la empresa (o uno personalmente) lleva una estadística del tiempo que tarda en resolver cada bug. Al crear una tarea por bug, Mylar lleva el tiempo que trabajas en esa tarea, así que cuando terminas de arreglar el bug, tienes el tiempo que has tardado en resolverlo.
De todas formas, sólo por el filtro de clases en proyectos grandes, Mylar merece la pena.
Mylar es un plug-in para eclipse que permite gestionar nuestras tareas, poniendo tiempos de inicio, de fin, avisos, etc, etc. Vaya, un planificador de tareas integrado en eclipse.
Una vez creada una tarea, cuando trabajamos en ella, hay dos cosas interesantes que hace Mylar. Por un lado lleva el tiempo que estamos trabajando en esta tarea. Por otra, y lo que es realmente interesante, es que podemos "filtrar" las clases que vemos en nuestro arbol de clases de forma que sólo se ven las que estamos usando. Esto es muy interesante en proyectos grandes. Cuando dentro del proyecto grande, de miles de clases, trabajamos en un tema concreto, sólo veremos un grupo reducido de clases, las que nos han ido haciendo falta. Se facilita un montón el tema de navegar entre clases.
Mylar se integra además con bugzilla, trac y jira. Cuando creamos una nueva tarea, podemos poner la url de un bug que esté registrado por ejemplo, en bugzilla. Al hacerlo, el nombre de la tarea se pondrá automáticamente como el nombre del bug y además, permite abrir en una pestaña de eclipse un navegador en el que veremos el bug de bugzilla y podremos modificarlo.
La parte de bugzilla es curiosa, pero no sé si merece la pena abrir una tarea por cada bug, sobre todo en proyectos grandes en los que hay miles y miles de bugs. Quizás sea interesante si la empresa (o uno personalmente) lleva una estadística del tiempo que tarda en resolver cada bug. Al crear una tarea por bug, Mylar lleva el tiempo que trabajas en esa tarea, así que cuando terminas de arreglar el bug, tienes el tiempo que has tardado en resolverlo.
De todas formas, sólo por el filtro de clases en proyectos grandes, Mylar merece la pena.
31 agosto 2006
Bugzilla en los correos y windows
Al final he conseguido que bugzilla envie correos. Ha sido todo una historia.
El primer problema es que el servidor de smtp (el que envía los correos) es el de la empresa, por lo que para enviar correos necesito identificarme con mi usuario y password.
En bugzilla no encontré ningún sitio que permitiera configurar el usuario y password para el servidor smtp. Sí permitía poner el nombre/ip del servidor pero no usuario/password, al menos, yo no lo he encontrado.
Al final me decidí a, en vez de usar directamente smtp, configurar bugzilla para que use la utilidad sendmail de unix (se hace directamente desde el navegador). Como estoy en windows, tuve que buscar un sendmail para windows. ¡Sorpresa!. Hay un sendmail para windows con instalador para bugzilla. Si no queremos tocar los ficheros de bugzilla, hay que instalar sendmail en C:\usr\lib. Lo instalé, lo configuré y seguía sin funcionar.
Afortunadamente, sendmail tiene una salida de log para debug (hay que descomentar una línea en el fichero de configuración de sendmail.ini para que ese log salga). En ese log de debug veo toda la mensajería entre sendmail y mi servidor de smtp. En ese log veo que el servidor de smtp rechaza los envios de correo porque el campo "from" no coincide con mi dirección de correo real. En realidad esto se podría hacer, pueden ser distintas, pero el servidor de smtp de mi empresa no nos deja "inventarnos" otra personalidad para el "from".
El campo "from" de bugzilla pone "bugzilla-admin-daemon" o "bugzilla-admin" según de dónde se envíe el correo. Así que tanto buscando en los ficheros de bugzilla como desde el navegador en la página de configuración de correo, cambio todos estos "bugzilla-admin*" por mi dirección real de correo. ¡Voila!, ¡ya funciona!. La única pega es que voy a ser yo el que envíe todos los correos de bugzilla a todo el mundo.
Bueno, ahora a ver si convenzo a la gente para que lo use ....
El primer problema es que el servidor de smtp (el que envía los correos) es el de la empresa, por lo que para enviar correos necesito identificarme con mi usuario y password.
En bugzilla no encontré ningún sitio que permitiera configurar el usuario y password para el servidor smtp. Sí permitía poner el nombre/ip del servidor pero no usuario/password, al menos, yo no lo he encontrado.
Al final me decidí a, en vez de usar directamente smtp, configurar bugzilla para que use la utilidad sendmail de unix (se hace directamente desde el navegador). Como estoy en windows, tuve que buscar un sendmail para windows. ¡Sorpresa!. Hay un sendmail para windows con instalador para bugzilla. Si no queremos tocar los ficheros de bugzilla, hay que instalar sendmail en C:\usr\lib. Lo instalé, lo configuré y seguía sin funcionar.
Afortunadamente, sendmail tiene una salida de log para debug (hay que descomentar una línea en el fichero de configuración de sendmail.ini para que ese log salga). En ese log de debug veo toda la mensajería entre sendmail y mi servidor de smtp. En ese log veo que el servidor de smtp rechaza los envios de correo porque el campo "from" no coincide con mi dirección de correo real. En realidad esto se podría hacer, pueden ser distintas, pero el servidor de smtp de mi empresa no nos deja "inventarnos" otra personalidad para el "from".
El campo "from" de bugzilla pone "bugzilla-admin-daemon" o "bugzilla-admin" según de dónde se envíe el correo. Así que tanto buscando en los ficheros de bugzilla como desde el navegador en la página de configuración de correo, cambio todos estos "bugzilla-admin*" por mi dirección real de correo. ¡Voila!, ¡ya funciona!. La única pega es que voy a ser yo el que envíe todos los correos de bugzilla a todo el mundo.
Bueno, ahora a ver si convenzo a la gente para que lo use ....
30 agosto 2006
Bugzilla
Bugzilla es un conjunto de scripts cgi que con apache y una base de datos nos permite llevar desde el navegador una base de datos de errores/fallos/incidencias/"bugs" de nuestro proyecto.
En otras palabras, una vez instalado y configurado, cuando pruebo el programa en el que estoy trabajando y encuentro un fallo, abro el navegador, me conecto a la página donde tengo instalado bugzilla y escribo la incidencia.
Esto es útil para equipos de trabajo. Cada uno de los integrantes se da de alta en donde hemos instaldo nuestro bugzilla y da su correo electrónico. Cada vez que alguno encuentra un fallo en el programa, lo pone en bugzilla y da la dirección de correo del que se supone responsable del fallo. Bugzilla envía un correo con la incidencia a la persona indicada. Esta, cuando la mira, corrige o decide que no es de él, lo anota en bugzilla y correo al canto a la/s personas indicadas.
De esta forma, queda una base de datos con todos los fallos, la historia de esos fallos, si se han corregido o no, etc. La gente del navegador mozilla usa bugzilla y puedes verlo en marcha en https://bugzilla.mozilla.org/.
Bueno, me he decidido a probarlo en el trabajo, así cuando los "jefes" prueben los programas, en vez de anotar los fallos en un papel guarro (no de marca "guarro", sino "papel cutre arrancado de libreta de espiral que se me ha caido al suelo y he pisado por el camino"), podrán escribirlos sobre la marcha con el navegador, nos enteraremos automáticamente con un correo y cuando los arreglemos, les llegará el correo correspondiente.
He instalado bugzilla en windows, y todavía estoy peleandome un poco con ello. En el trabajo tenemos proxy y un servidor smtp que requiere contraseña. Además, estoy dentro de una red local. El caso es que lo he puesto todo, pero todavía no consigo que bugzilla envíe los correos. Si es que todo esto está pensado para funcionar en unix...
La instalación no es una instalación tonta, pero siguiendo las instrucciones y teniendo un poco de idea de qué va el tema, resulta más o menos asequible. Eso sí, hay que instalar perl para windows, una serie de módulos para perl que necesita bugzilla, el servidor apache y mysql si no están ya instalados, tocar la configuración de apache, etc, etc. Bueno, que me he tirado un par de horas consultando internet y demás para tenerlo más o menos en marcha.
Igual que bugzilla, hay otros.
Finalmente, está Mylar, que tampoco he probado. Es un plug-in para eclipse que permite organizarte tareas. En cada tarea eclipse sólo muestra aquellos ficheros que son intersantes para la tarea, de forma que en un proyecto grande de miles de ficheros no se ven todos a la vez, sino sólo por tareas de pocos en pocos cada vez. Es decir, si para la tarea1 necesito fichero1.java, fichero2.java y fichero3.java, cuando seleccione la tarea1, eclipse sólo me mostrará esos ficheros y ocultará los demás. Lo que más me ha llamado la atención es que dice que es capaz de coger tareas de bugzilla, jira o trac. ¿Quiere esto decir que cojo un error/bug de bugzilla y lo puedo poner como tarea de mylar en eclipse?
Bueno, el caso es que estoy con todo esto. Seguiré investigando...
En otras palabras, una vez instalado y configurado, cuando pruebo el programa en el que estoy trabajando y encuentro un fallo, abro el navegador, me conecto a la página donde tengo instalado bugzilla y escribo la incidencia.
Esto es útil para equipos de trabajo. Cada uno de los integrantes se da de alta en donde hemos instaldo nuestro bugzilla y da su correo electrónico. Cada vez que alguno encuentra un fallo en el programa, lo pone en bugzilla y da la dirección de correo del que se supone responsable del fallo. Bugzilla envía un correo con la incidencia a la persona indicada. Esta, cuando la mira, corrige o decide que no es de él, lo anota en bugzilla y correo al canto a la/s personas indicadas.
De esta forma, queda una base de datos con todos los fallos, la historia de esos fallos, si se han corregido o no, etc. La gente del navegador mozilla usa bugzilla y puedes verlo en marcha en https://bugzilla.mozilla.org/.
Bueno, me he decidido a probarlo en el trabajo, así cuando los "jefes" prueben los programas, en vez de anotar los fallos en un papel guarro (no de marca "guarro", sino "papel cutre arrancado de libreta de espiral que se me ha caido al suelo y he pisado por el camino"), podrán escribirlos sobre la marcha con el navegador, nos enteraremos automáticamente con un correo y cuando los arreglemos, les llegará el correo correspondiente.
He instalado bugzilla en windows, y todavía estoy peleandome un poco con ello. En el trabajo tenemos proxy y un servidor smtp que requiere contraseña. Además, estoy dentro de una red local. El caso es que lo he puesto todo, pero todavía no consigo que bugzilla envíe los correos. Si es que todo esto está pensado para funcionar en unix...
La instalación no es una instalación tonta, pero siguiendo las instrucciones y teniendo un poco de idea de qué va el tema, resulta más o menos asequible. Eso sí, hay que instalar perl para windows, una serie de módulos para perl que necesita bugzilla, el servidor apache y mysql si no están ya instalados, tocar la configuración de apache, etc, etc. Bueno, que me he tirado un par de horas consultando internet y demás para tenerlo más o menos en marcha.
Igual que bugzilla, hay otros.
- JIRA, que es de pago.
- Trac, que es gratis, pero me da la impresión de que está todavía un poco en pañales. Ellos mismos dicen que no ha sido probado suficientemente con MySQL y andan todavía por la versión 0.x
Finalmente, está Mylar, que tampoco he probado. Es un plug-in para eclipse que permite organizarte tareas. En cada tarea eclipse sólo muestra aquellos ficheros que son intersantes para la tarea, de forma que en un proyecto grande de miles de ficheros no se ven todos a la vez, sino sólo por tareas de pocos en pocos cada vez. Es decir, si para la tarea1 necesito fichero1.java, fichero2.java y fichero3.java, cuando seleccione la tarea1, eclipse sólo me mostrará esos ficheros y ocultará los demás. Lo que más me ha llamado la atención es que dice que es capaz de coger tareas de bugzilla, jira o trac. ¿Quiere esto decir que cojo un error/bug de bugzilla y lo puedo poner como tarea de mylar en eclipse?
Bueno, el caso es que estoy con todo esto. Seguiré investigando...
29 agosto 2006
Joel on Software
En Joel on Software hay un montón de artículos es español sobre temas de software. Son sobre cosas que se hacen bien o mal en las empresas, a la hora de hacer software, qué tener en cuenta para diseñar buenas interfaces de usuario, etc.
He leido varios de ellos y la verdad es que no tienen desperdicio. Dicen muchas verdades como puños y ponen en claro todas esas cosas que los desarrolladores sabemos que debemos hacer pero que no solemos hacer por pereza o por no saber hacer bien.
He leido varios de ellos y la verdad es que no tienen desperdicio. Dicen muchas verdades como puños y ponen en claro todas esas cosas que los desarrolladores sabemos que debemos hacer pero que no solemos hacer por pereza o por no saber hacer bien.
28 agosto 2006
Día Aciago
De vuelta al trabajo, después del mes de vacaciones. Un asquito.
Bueno, ahí van cuatro tonterías que he encontrado/me han encontrado y que en algún momento habrá que mirar:
Bueno, ahí van cuatro tonterías que he encontrado/me han encontrado y que en algún momento habrá que mirar:
- Java y Matlab: http://www.held-mueller.de/JMatLink/
- Los de google tiene para dejar tus propios proyectos de software relativos a google: http://code.google.com/
- Una pequeña herramienta de google para hacer modelado en 3d, gratuita por supuesto: http://sketchup.google.com/
- Para llevar tu propio calendario de citas/eventos/tareas en web, cortesía de google: http://www.google.com/googlecalendar/overview.html
15 agosto 2006
Acabo de encontrarme
Acabo de encontrarme en otra página. Resulta que en granainfo, en la parte de programación, está básicamente copiado este blog, manteniendo enlaces a la fuente original. No veo enlaces o artículos de otro sitio...
Bueno, me alegra comprobar que lo que escribo le parece lo suficiemente bien a alguien como para reproducirlo. Además, manteniendo un enlace al original, es más mejor.
Bueno, me alegra comprobar que lo que escribo le parece lo suficiemente bien a alguien como para reproducirlo. Además, manteniendo un enlace al original, es más mejor.
28 julio 2006
Mozilla SeaMonkey
Jugando con internet acabo de descubrir mozilla seamonkey. Miré a ver que era y ponía que es una especie de navegador, correo y editor de html todo junto.
Lo he instalado y me ha decepcionado un poco. Es casi exactamente lo que antes era netscape, que venía con navegador, composer, etc. No quiero decir que el programa esté mal, sino simplemente que es lo mismo que el antiguo netscape, pero con otro nombre.
Seguiré con el firefox y el thunderbird, que me gustaron bastante más nada más instalarlos.
En cuanto a editor de html, tradicionalmente he utilizado el netscape composer. Sin embargo, hace poco, que empecé a meter algun java script ajeno, me empezó a hacer cosas raras. Y desde luego, no he conseguido que se trague una página php sin descuajeringarla, a pesar del que el 90% de la página es html. Por eso me he acabado cambiando a dreamweaber y de momento estoy contento con él. No uso todo lo que tiene, puesto que mis páginas son muy sencillitas, sólo html y algo mínimo de php en alguna ocasión, y algún javascript ajeno que inserto (contadores de estadísticas, google adsense, etc), unas pruebas con css, pero me hace bien lo que quiero que haga. Sobre todo no me descuajeringa una página cuando su extensión es php.
Lo he instalado y me ha decepcionado un poco. Es casi exactamente lo que antes era netscape, que venía con navegador, composer, etc. No quiero decir que el programa esté mal, sino simplemente que es lo mismo que el antiguo netscape, pero con otro nombre.
Seguiré con el firefox y el thunderbird, que me gustaron bastante más nada más instalarlos.
En cuanto a editor de html, tradicionalmente he utilizado el netscape composer. Sin embargo, hace poco, que empecé a meter algun java script ajeno, me empezó a hacer cosas raras. Y desde luego, no he conseguido que se trague una página php sin descuajeringarla, a pesar del que el 90% de la página es html. Por eso me he acabado cambiando a dreamweaber y de momento estoy contento con él. No uso todo lo que tiene, puesto que mis páginas son muy sencillitas, sólo html y algo mínimo de php en alguna ocasión, y algún javascript ajeno que inserto (contadores de estadísticas, google adsense, etc), unas pruebas con css, pero me hace bien lo que quiero que haga. Sobre todo no me descuajeringa una página cuando su extensión es php.
Crear .exe de java
Aunque la forma normal de hacer un programa java es generar un fichero jar, su ejecución puede ser compleja para un usuario que no conozca java. Por ello, entregar una aplicación java a un usuario normalito de ordenador suele requerir entregar también un .bat de arranque, que revise si existe máquina virtual, que ponga cosas como el classpath, etc, etc.
Hay utilidades que permiten pasar nuestro .jar a un fichero .exe normal de windows, de forma que a un usuario no programador le resulte más fácil el arranque.
Algunas de estas utilidades, como JSmooth, simplemente crean un pequeño exe que arranca la aplicación, pero necesitan que la máquina virtual esté instalada.
gcj sí crea un verdadero ejecutable, pero gcj está pensado para el entorno de gnu, por lo que para ejecutarlo en windows es necesario instalar previamente el cygwin. gcj venga mejor posiblemente para usuarios de linux/unix.
java2exe (ahora JexePack) también permite generar .exe, pero es una aplicación de pago.
Algunos IDE, como JBuilder, también permiten generar el exe.
De todas formas, no he probado ninguno de ellos. De momento no tengo ninguna necesidad especial de generar .exe. Además, pienso que se pierde un poco la filosofía de java, que es que el "ejecutable" se pueda ejecutar en cualquier sistema operativo. Tampoco suelo hacer aplicaciones para usuarios no programadores.
Hay utilidades que permiten pasar nuestro .jar a un fichero .exe normal de windows, de forma que a un usuario no programador le resulte más fácil el arranque.
Algunas de estas utilidades, como JSmooth, simplemente crean un pequeño exe que arranca la aplicación, pero necesitan que la máquina virtual esté instalada.
gcj sí crea un verdadero ejecutable, pero gcj está pensado para el entorno de gnu, por lo que para ejecutarlo en windows es necesario instalar previamente el cygwin. gcj venga mejor posiblemente para usuarios de linux/unix.
java2exe (ahora JexePack) también permite generar .exe, pero es una aplicación de pago.
Algunos IDE, como JBuilder, también permiten generar el exe.
De todas formas, no he probado ninguno de ellos. De momento no tengo ninguna necesidad especial de generar .exe. Además, pienso que se pierde un poco la filosofía de java, que es que el "ejecutable" se pueda ejecutar en cualquier sistema operativo. Tampoco suelo hacer aplicaciones para usuarios no programadores.
27 julio 2006
Cambiar el icono de la taza de café en java
La forma normal de cambiar el icono de la taza de café en java en una aplicación consiste en llamar al método setIconImage() del JFrame principal de la aplicación. Luego, el resto de JDialog de la aplicación deben ser hijos, nietos o biznietos de este JFrame, heredando así su icono. Puedes ver más detalles de este cambio de icono.
Sin embargo, ayer un compañero de trabajo encontró una forma más bruta de hacerlo, de forma que queda cambiado para todas las aplicaciones java de nuestro ordenador (salvo que ellas lo cambien de forma expresa dentro).
Este método de fuerza bruta consiste en buscar dentro de nuestra instalación de java los ficheros rt.jar y awt.dll, que contienen dentro dicho icono de la taza de café y cambiarlo por otro. En Cambiar el icono de la taza de café están los detalles.
Sin embargo, ayer un compañero de trabajo encontró una forma más bruta de hacerlo, de forma que queda cambiado para todas las aplicaciones java de nuestro ordenador (salvo que ellas lo cambien de forma expresa dentro).
Este método de fuerza bruta consiste en buscar dentro de nuestra instalación de java los ficheros rt.jar y awt.dll, que contienen dentro dicho icono de la taza de café y cambiarlo por otro. En Cambiar el icono de la taza de café están los detalles.
25 julio 2006
Dos programas opuestos
Aquí un par de programitas para java que pueden ser más o menos útiles y que sirven para lo contrario.
El primero es un "descompilador" de java. El DJ Java Decompiler es un programita que dándole los ficheros .class es capaz de sacarnos los fuentes .java. Tiene interface gráfica y es gratis.
El otro programa, en realidad son varios, son los ofuscadores de código java. Precisamente para evitar que nuestros programas java puedan ser "descompilados", existen estos ofuscadores. Básicamente lo que hacen es cambiar los nombres de clases, métodos y variables por nombres crípticos. El programa .class puedes descompilarse igualmente, pero no es lo mismo intuir que el método setNombre(String nombre) de la clase Persona mete el nombre de la persona en la clase Persona, que intuir qué demonios hace afaewser(String afew) de la clase Xdañsiñwe. Supuestamente, además de ofuscar y ya puestos a tocar el jar, la mayoría de ellos llevan a cabo labores de optimización, tratando de reducir el jar lo máximo posible, eliminando código innecesario, variables no usadas, métodos no usados, etc. De hecho, la ofuscación de código es más bien un "efecto secundario" de este proceso. Para reducir el tamaño del jar, no hay nada como llamar a las clases, métodos y variables con nombres lo más cortos posibles. No he probado ninguno, pero por lo que he leido es lo que intuyo que hacen...
ProGuard es un ofuscador gratuito y en la misma página tienes un listado de otros ofuscadores de código.
El primero es un "descompilador" de java. El DJ Java Decompiler es un programita que dándole los ficheros .class es capaz de sacarnos los fuentes .java. Tiene interface gráfica y es gratis.
El otro programa, en realidad son varios, son los ofuscadores de código java. Precisamente para evitar que nuestros programas java puedan ser "descompilados", existen estos ofuscadores. Básicamente lo que hacen es cambiar los nombres de clases, métodos y variables por nombres crípticos. El programa .class puedes descompilarse igualmente, pero no es lo mismo intuir que el método setNombre(String nombre) de la clase Persona mete el nombre de la persona en la clase Persona, que intuir qué demonios hace afaewser(String afew) de la clase Xdañsiñwe. Supuestamente, además de ofuscar y ya puestos a tocar el jar, la mayoría de ellos llevan a cabo labores de optimización, tratando de reducir el jar lo máximo posible, eliminando código innecesario, variables no usadas, métodos no usados, etc. De hecho, la ofuscación de código es más bien un "efecto secundario" de este proceso. Para reducir el tamaño del jar, no hay nada como llamar a las clases, métodos y variables con nombres lo más cortos posibles. No he probado ninguno, pero por lo que he leido es lo que intuyo que hacen...
ProGuard es un ofuscador gratuito y en la misma página tienes un listado de otros ofuscadores de código.
21 julio 2006
Método toString() de Element de org.w3c.dom
Me he tropezado con un pequeño problemilla que cuento aquí por si a alguien más le pasa lo mismo.
Resulta que trabajando con la versión 1.4 de java, cuando tengo un Document correspondiente a un fichero xml guardado en memoria, haciendo toString() del Element raiz del Document, me devuelve un String con el contenido del fichero xml.
Sin embargo, ¡sorpresa!, en la versión 1.5 de java este método toString() ya no devuelve el String el formato xml, sino que devuelve una cosa rara, cortita, que no vale.
En Bug ID: 6181019 REGRESSION: org.w3c.dom.Element.toString() no longer returns the xml document: "toString" está comentado este problema con más detalle.
Resulta que trabajando con la versión 1.4 de java, cuando tengo un Document correspondiente a un fichero xml guardado en memoria, haciendo toString() del Element raiz del Document, me devuelve un String con el contenido del fichero xml.
Sin embargo, ¡sorpresa!, en la versión 1.5 de java este método toString() ya no devuelve el String el formato xml, sino que devuelve una cosa rara, cortita, que no vale.
En Bug ID: 6181019 REGRESSION: org.w3c.dom.Element.toString() no longer returns the xml document: "toString" está comentado este problema con más detalle.
Contar líneas de código
Hay una cosa que descubrí hace ya bastante tiempo, pero que me llamó mucho la atención por su simplicidad, y es el cómo se pueden contar las líneas de código de un programa de una forma simple.
En su momento, cuando me ví en la necesidad de contar las líneas de código que habíamos hecho en el trabajo, y de esto hace mucho y no había las herramientas que hay ahora o, al menos, no se encontraban de forma gratuita en la red, me puse a pensar en ello y buscar por internet.
Lo de contar líneas tal cual (contar retornos de carro) me parecía poco fiable. Si alguien deja muchas líneas en blanco, no hace muchas líneas de código, pero se cuentan como tales. Los comentarios también contarían como líneas de código. Si alguien abre las llaves "{" en una nueva línea
public void funcion ()
{
...
hace más líneas de código que uno que lo pone todo seguido
public void funcion () {
...
Investigando por internet, encontré la forma muy aproximada y sencilla de hacerlo. ¡¡Basta con contar los punto y coma ";" del código!!
Como cada línea de código acaba en punto y coma (En C, C++, java y otros muchos lenguajes) esto nos da una aproximación muy buena y simple del número de líneas de código.
Además, si alguien es vago como yo y no quiere demasiada precisión en la medida, basta con encadenar unos comandos de unix/linux para contar algo parecido al número de puntos y coma
$ cat `find . -name *.java` | egrep ";" | wc -l
La primera parte saca un listado por pantalla (cat) de todos los ficheros .java que encuentre del directorio actual hacia abajo.
La segunda parte, filtra (egrep) para que en el listado sólo salgan las líneas que contienen al menos un punto y coma.
La tercera parte, cuenta (wc) las líneas del listado anterior.
El resultado es el número total de líneas de los ficheros .java que contienen al menos un punto y coma, es decir, una aproximación más o menos buena del número de líneas de código.
De todas formas, alguien que sepa un poco más de linux seguro que encuentra la forma de contar el número de ; de una forma también sencilla ...
En su momento, cuando me ví en la necesidad de contar las líneas de código que habíamos hecho en el trabajo, y de esto hace mucho y no había las herramientas que hay ahora o, al menos, no se encontraban de forma gratuita en la red, me puse a pensar en ello y buscar por internet.
Lo de contar líneas tal cual (contar retornos de carro) me parecía poco fiable. Si alguien deja muchas líneas en blanco, no hace muchas líneas de código, pero se cuentan como tales. Los comentarios también contarían como líneas de código. Si alguien abre las llaves "{" en una nueva línea
public void funcion ()
{
...
hace más líneas de código que uno que lo pone todo seguido
public void funcion () {
...
Investigando por internet, encontré la forma muy aproximada y sencilla de hacerlo. ¡¡Basta con contar los punto y coma ";" del código!!
Como cada línea de código acaba en punto y coma (En C, C++, java y otros muchos lenguajes) esto nos da una aproximación muy buena y simple del número de líneas de código.
Además, si alguien es vago como yo y no quiere demasiada precisión en la medida, basta con encadenar unos comandos de unix/linux para contar algo parecido al número de puntos y coma
$ cat `find . -name *.java` | egrep ";" | wc -l
La primera parte saca un listado por pantalla (cat) de todos los ficheros .java que encuentre del directorio actual hacia abajo.
La segunda parte, filtra (egrep) para que en el listado sólo salgan las líneas que contienen al menos un punto y coma.
La tercera parte, cuenta (wc) las líneas del listado anterior.
El resultado es el número total de líneas de los ficheros .java que contienen al menos un punto y coma, es decir, una aproximación más o menos buena del número de líneas de código.
De todas formas, alguien que sepa un poco más de linux seguro que encuentra la forma de contar el número de ; de una forma también sencilla ...
Tutorial C y C++ , Programación de sockets con C y linux
Veo en Tutorial C y C++ , Programación de sockets con C y linux que han puesto uno de mis tutoriales en un marco y justo encima han puesto una cabecera de ellos.
El marco es directamente mi página, no es una copia, y en la cabecera ponen la página original. En fin, me parece todo bien y correcto, pero me ha llamado mucho la atención el verlo ...
El marco es directamente mi página, no es una copia, y en la cabecera ponen la página original. En fin, me parece todo bien y correcto, pero me ha llamado mucho la atención el verlo ...
17 julio 2006
El PageRank de google está cabra
Acabo de ver que después de cuatro meses de mis apuntes de programación. por fin tiene un PageRank. Le dieron uno de cero al poco de crear la página/dominio. Ahora tiene uno de 4, que es más o menos lo que tenía mi antigua página www.geocities.com/chuidiang.
Sin embargo, veo que el page rank actual está un poco tonto.
Mi diario de correr y bicicleta tiene un pagerank de 3. Si miro, según google, las páginas que enlazan a él, no hay ninguna. Tampoco tiene apenas visitas. Sin embargo, este diario de programación tiene sólo un pagerank de 2. Hay varias páginas que enlazan a él (según google) aparte de la mía y además tiene unas cuantas visitas diarias.
¿Cómo es posible esto?.
También hay otro mito que no sé si es real. Supuestamente con un pagerank más elevado tus páginas salen más arriba en los buscadores. Sin embargo, desde que mis apuntes de programación han pasado de pagerank 0 a pakerank 4 (el viernes o el sábado pasado), no he notado ningún cambio en el número de visitas.
Sin embargo, de vez en cuando sí noto cambios bruscos que duran temporadas largas de vez en cuando. Por ejemplo, el número de visitas se ha reducido casi a la mitad, de forma progresiva, desde mediados de Junio sin razón aparente (ver gráfico).
Sin embargo, veo que el page rank actual está un poco tonto.
Mi diario de correr y bicicleta tiene un pagerank de 3. Si miro, según google, las páginas que enlazan a él, no hay ninguna. Tampoco tiene apenas visitas. Sin embargo, este diario de programación tiene sólo un pagerank de 2. Hay varias páginas que enlazan a él (según google) aparte de la mía y además tiene unas cuantas visitas diarias.
¿Cómo es posible esto?.
También hay otro mito que no sé si es real. Supuestamente con un pagerank más elevado tus páginas salen más arriba en los buscadores. Sin embargo, desde que mis apuntes de programación han pasado de pagerank 0 a pakerank 4 (el viernes o el sábado pasado), no he notado ningún cambio en el número de visitas.
Sin embargo, de vez en cuando sí noto cambios bruscos que duran temporadas largas de vez en cuando. Por ejemplo, el número de visitas se ha reducido casi a la mitad, de forma progresiva, desde mediados de Junio sin razón aparente (ver gráfico).
13 julio 2006
Ficheros KK
En todo proyecto informático que se precie hay uno o más ficheros "kk", que no sirven para nada, que nadie usa, pero que si se te ocurre borrar el proyecto deja de funcionar.
También suele haber varias versiones de ejecutable, cuyos ficheros se llaman así ejecutable_bueno.exe, ejecutable_nuevo.exe, ejecutable_hoy.exe, ejecutable_ultimo.exe. Está claro que esta nomenclatura de nombres es la más adecuada para saber cual es el que hay que arrancar, en función de que se quiera el bueno, el nuevo, el de hoy o el último.
También suele haber varias versiones antiguas, etiquetads ejecutable_antiguo.exe, ejecutable.exe.bak, ejecutable.exe.old, ejecutable_viejo.exe. De esta forma también es fácil saber qué se debe recuperar, según se quiera el old, el viejo, el bak o el antiguo.
Rizando el rizo, a veces también hay líneas de código que nunca se llaman, ni poniendo un breakpoint con el debugger en ellas, ni System.out, ni printf, ni de ninguna manera, pero ¡Ay de tí como se te ocurra borrarlas!. El ejecutable dejará de funcionar.
También suele haber varias versiones de ejecutable, cuyos ficheros se llaman así ejecutable_bueno.exe, ejecutable_nuevo.exe, ejecutable_hoy.exe, ejecutable_ultimo.exe. Está claro que esta nomenclatura de nombres es la más adecuada para saber cual es el que hay que arrancar, en función de que se quiera el bueno, el nuevo, el de hoy o el último.
También suele haber varias versiones antiguas, etiquetads ejecutable_antiguo.exe, ejecutable.exe.bak, ejecutable.exe.old, ejecutable_viejo.exe. De esta forma también es fácil saber qué se debe recuperar, según se quiera el old, el viejo, el bak o el antiguo.
Rizando el rizo, a veces también hay líneas de código que nunca se llaman, ni poniendo un breakpoint con el debugger en ellas, ni System.out, ni printf, ni de ninguna manera, pero ¡Ay de tí como se te ocurra borrarlas!. El ejecutable dejará de funcionar.
07 julio 2006
Más sobre el patrón Decorador
Acabo de terminar mi primer cacho de programa usando el patrón Decorador como comenté en el post anterior.
Una primera ventaja que le veo, en mi caso concreto, es que puedo hacer todo el código sin necesidad de la base de datos y probarlo. Mi modelo de datos va en memoria implementando una interface, mis clases de ventanas y demás sólo ven la interface. Mis clases de mis librerías reutilizables sólo ven la interface, así que puedo usarlas tal cual sin tocar nada en ellas, sin necesidad de hererdar ni de configurarlas de ninguna manera.
Luego, hago el decorador del modelo que se encarga de la base de datos. Dentro de él meto el modelo de datos e implemento todos los métodos simplemente para que se redirijan al modelo interno. Con esto todo sigue funcionando igual que antes, sin base de datos.
Ahora sólo me queda, poco a poco, ir modificando los métodos del decorador para que hagan su trabajo en la base de datos.
Otra ventaja adicional que le veo es que todo lo de base de datos (las sql, la conexion, etc, etc) queda encapsulado en una única clase.
La verdad es que la experiencia me ha gustado bastante y pienso repetir en adelante.
Una primera ventaja que le veo, en mi caso concreto, es que puedo hacer todo el código sin necesidad de la base de datos y probarlo. Mi modelo de datos va en memoria implementando una interface, mis clases de ventanas y demás sólo ven la interface. Mis clases de mis librerías reutilizables sólo ven la interface, así que puedo usarlas tal cual sin tocar nada en ellas, sin necesidad de hererdar ni de configurarlas de ninguna manera.
Luego, hago el decorador del modelo que se encarga de la base de datos. Dentro de él meto el modelo de datos e implemento todos los métodos simplemente para que se redirijan al modelo interno. Con esto todo sigue funcionando igual que antes, sin base de datos.
Ahora sólo me queda, poco a poco, ir modificando los métodos del decorador para que hagan su trabajo en la base de datos.
Otra ventaja adicional que le veo es que todo lo de base de datos (las sql, la conexion, etc, etc) queda encapsulado en una única clase.
La verdad es que la experiencia me ha gustado bastante y pienso repetir en adelante.
05 julio 2006
Posibilidad para el patrón Decorador
Estoy experimentando con el patrón Decorador y de momento parece que tiene buena pinta.
Me explico. Es bastante habitual que tenga que hacer alguna aplicación con unas ventanas para mostrar datos recogidos de una base de datos. Desde dichas ventanas debe además poder modificarse los datos en base de datos. Los típicos añadir, borrar y editar.
Mi forma habitual de hacer esto era con el patrón Observador. Hago una clase que llamo modelo de datos en la que guardo los datos de la base de datos después de haberlos leido. A esta clase le pongo un mecanismo de suscripción, de forma que otras clases puedan enterarse cuando se modifican los datos.
Hago otra clase que se encarga de leer la base de datos y rellenar el modelo de datos. Tiene además los métodos para añadir, modificar y borrar elementos de base de datos.
Las ventanas son clases que están suscritas al modelo de datos, de forma que cuando el modelo de datos se rellena de datos, automáticamente las ventanas los muestran. Algo similar al DefaultTableModel de java y el JTable.
Los botones de las ventanas que permiten modificar los datos los suelo hacer que actuen directamente con la clase que se encarga de la base de datos. Si unos de estos botones debe añadir, borrar o modificar algo, lo hace contra la clase de base de datos. Esta se encarga de hacer la modificación en base de datos y si tiene exito, refleja el cambio en el modelo. Este a su vez por medio del patrón observador avisa a la ventana para que refleje el cambio.
Todo este es el mecanismo que uso habitualmente, pero no me acaba de convencer porque acaba todo entremezclado. Los botones, que son interface de usuario, deben ver a la clase de base de datos y esta a su vez ve al modelo de datos. Tengo botones ya hechos que hacen las tareas habituales de añadir, borrar y modificar elementos de una lista, pero siempre tengo que heredar de ellos o instanciarlos pasándoles la clase de base de datos y "capando" su comportamiento de actuar sobre le modelo directamente.
Ahora estoy intentando aplicar el patrón Decorador. Consiste básicamente en hacer que la clase de modelo de datos y la clase de base de datos cumplan la misma interface y puedan intercambiarse. Ambas tienen métodos añade(), borra() y modifica(). La clase de base de datos además admite que se le pase el modelo de datos.
El método añadir(), por ejemplo, en la clase de base de datos, inserta en base de datos y si la inserción tiene éxito, llama al añadir() del modelo de datos.
Tanto el modelo de datos como la clase de base de datos implementan un patrón observador, para notificar cambios en los datos. La de modelo de datos es normal. La clase de base de datos se suscribe al modelo de datos y notifica cuando notifique este. De esta forma, cuando la clase de base de datos añade() un dato, lo mete en base de datos y luego en el modelo. El modelo avisa a la clase de base de datos y esta a sus suscriptores, que serán las ventanas.
Al hacer que ambas clases implementen la misma interface, a las ventanas puedo pasarles indistintamente una u otra. Las ventanas y los botones actuarían directamente sobre la interface, con lo que no saben si lo están haciendo contra base de datos o contra el modelo de datos. Las ventanas se refrescarán también correctamente independientemente de qué modelo se les pase.
Esto tiene otra ventaja adicional, y es en el borrado. Habitualmente los modelos de java como TableModel, avisan del borrado después de haber borrado. Con mi antiguo mecanismo de suscripción, no podía obtener el elemento borrado para borraren la base de datos, únicamente sabía qué fila se había borrado, pero no podía obtener el elemento borrado, ni su clave en la base de datos. Con este nuevo mecanismo de patrón Decorador, me avisan cuando se quiere borrar, con lo que puedo borrar de base de datos, luego del modelo y luego se refresca la vista.
En fin, lo poco que voy probando va teniendo buena pinta y muchas ventajas respecto a mi antiguo mecanismo. En algún momento haré un pequeño tutorial para mi página en la que se haga una tabla con añadir, borrar y modificar de una base de datos usando este patrón.
Me explico. Es bastante habitual que tenga que hacer alguna aplicación con unas ventanas para mostrar datos recogidos de una base de datos. Desde dichas ventanas debe además poder modificarse los datos en base de datos. Los típicos añadir, borrar y editar.
Mi forma habitual de hacer esto era con el patrón Observador. Hago una clase que llamo modelo de datos en la que guardo los datos de la base de datos después de haberlos leido. A esta clase le pongo un mecanismo de suscripción, de forma que otras clases puedan enterarse cuando se modifican los datos.
Hago otra clase que se encarga de leer la base de datos y rellenar el modelo de datos. Tiene además los métodos para añadir, modificar y borrar elementos de base de datos.
Las ventanas son clases que están suscritas al modelo de datos, de forma que cuando el modelo de datos se rellena de datos, automáticamente las ventanas los muestran. Algo similar al DefaultTableModel de java y el JTable.
Los botones de las ventanas que permiten modificar los datos los suelo hacer que actuen directamente con la clase que se encarga de la base de datos. Si unos de estos botones debe añadir, borrar o modificar algo, lo hace contra la clase de base de datos. Esta se encarga de hacer la modificación en base de datos y si tiene exito, refleja el cambio en el modelo. Este a su vez por medio del patrón observador avisa a la ventana para que refleje el cambio.
Todo este es el mecanismo que uso habitualmente, pero no me acaba de convencer porque acaba todo entremezclado. Los botones, que son interface de usuario, deben ver a la clase de base de datos y esta a su vez ve al modelo de datos. Tengo botones ya hechos que hacen las tareas habituales de añadir, borrar y modificar elementos de una lista, pero siempre tengo que heredar de ellos o instanciarlos pasándoles la clase de base de datos y "capando" su comportamiento de actuar sobre le modelo directamente.
Ahora estoy intentando aplicar el patrón Decorador. Consiste básicamente en hacer que la clase de modelo de datos y la clase de base de datos cumplan la misma interface y puedan intercambiarse. Ambas tienen métodos añade(), borra() y modifica(). La clase de base de datos además admite que se le pase el modelo de datos.
El método añadir(), por ejemplo, en la clase de base de datos, inserta en base de datos y si la inserción tiene éxito, llama al añadir() del modelo de datos.
Tanto el modelo de datos como la clase de base de datos implementan un patrón observador, para notificar cambios en los datos. La de modelo de datos es normal. La clase de base de datos se suscribe al modelo de datos y notifica cuando notifique este. De esta forma, cuando la clase de base de datos añade() un dato, lo mete en base de datos y luego en el modelo. El modelo avisa a la clase de base de datos y esta a sus suscriptores, que serán las ventanas.
Al hacer que ambas clases implementen la misma interface, a las ventanas puedo pasarles indistintamente una u otra. Las ventanas y los botones actuarían directamente sobre la interface, con lo que no saben si lo están haciendo contra base de datos o contra el modelo de datos. Las ventanas se refrescarán también correctamente independientemente de qué modelo se les pase.
Esto tiene otra ventaja adicional, y es en el borrado. Habitualmente los modelos de java como TableModel, avisan del borrado después de haber borrado. Con mi antiguo mecanismo de suscripción, no podía obtener el elemento borrado para borraren la base de datos, únicamente sabía qué fila se había borrado, pero no podía obtener el elemento borrado, ni su clave en la base de datos. Con este nuevo mecanismo de patrón Decorador, me avisan cuando se quiere borrar, con lo que puedo borrar de base de datos, luego del modelo y luego se refresca la vista.
En fin, lo poco que voy probando va teniendo buena pinta y muchas ventajas respecto a mi antiguo mecanismo. En algún momento haré un pequeño tutorial para mi página en la que se haga una tabla con añadir, borrar y modificar de una base de datos usando este patrón.
29 junio 2006
Echo de menos programar mal
Últimamente ando un poco deprimido con esto de la programación. Llevo muchos años programando y mi forma de programar ha ido evolucionando mucho, se supone que para mejor.
Al principio hacía mi código rápido. Mis clases eran gigantes y muy poco reutilizables. Apenas usaba herencias, prácticamente nunca el polimorfismo y nunca había oido hablar de patrones de diseño. Mi objetivo era hacer el código rápido y que funcionara.
Luego aprendí a usar el polimorfismo, leí sobre patrones, las clases deben ser pequeñas, el código debe ser reutilizable, hay que comentar, etc, etc.
Ahora programa tratando de seguir todas estas cosas. Cualquier programa que hago se llena de clases separaditas, algunas de ellas siempre acabo reusándolas en otro sitio. Me llevo clases de estas a "librerías" que clases para usar en otrs proyectos. Mi código tira mucho de esas "librerías" que me he ido haciendo con el tiempo. Uso los patrones, el polimorfismo. Supuestamente, todo lo más mejor que soy capaz de hacerlo.
Sin embargo, hecho de menos los viejos tiempos. Antes programar era divertido. Ahora se convierte casi en una tortura. Cuando hago algo o modifico algo hecho, tengo que emepezar a revisar las clases de las librerías, soy incapaz de hacer algo una clase grande o un método largo, así que hago muchas clases y métodos. Cuando una cosa parece que puede ser reutilizable más adelante, la hago un poco mejor para llevármela a la librería, etc, etc.
Para un mismo programa, ahora hago muchísmimas menos líneas de código, pero echo bastate tiempo en pensarlas, rebuscar por la librerías, por las clases ya hechas, pasando de una interface a la clase que la implementa que simplemente acaba llamando a un método de otra clase que a su vez...
Echo de menos los tiempos en que programar era liarse a echar lineas de código sin más, aunque no fuera la forma más eficiente.
Al principio hacía mi código rápido. Mis clases eran gigantes y muy poco reutilizables. Apenas usaba herencias, prácticamente nunca el polimorfismo y nunca había oido hablar de patrones de diseño. Mi objetivo era hacer el código rápido y que funcionara.
Luego aprendí a usar el polimorfismo, leí sobre patrones, las clases deben ser pequeñas, el código debe ser reutilizable, hay que comentar, etc, etc.
Ahora programa tratando de seguir todas estas cosas. Cualquier programa que hago se llena de clases separaditas, algunas de ellas siempre acabo reusándolas en otro sitio. Me llevo clases de estas a "librerías" que clases para usar en otrs proyectos. Mi código tira mucho de esas "librerías" que me he ido haciendo con el tiempo. Uso los patrones, el polimorfismo. Supuestamente, todo lo más mejor que soy capaz de hacerlo.
Sin embargo, hecho de menos los viejos tiempos. Antes programar era divertido. Ahora se convierte casi en una tortura. Cuando hago algo o modifico algo hecho, tengo que emepezar a revisar las clases de las librerías, soy incapaz de hacer algo una clase grande o un método largo, así que hago muchas clases y métodos. Cuando una cosa parece que puede ser reutilizable más adelante, la hago un poco mejor para llevármela a la librería, etc, etc.
Para un mismo programa, ahora hago muchísmimas menos líneas de código, pero echo bastate tiempo en pensarlas, rebuscar por la librerías, por las clases ya hechas, pasando de una interface a la clase que la implementa que simplemente acaba llamando a un método de otra clase que a su vez...
Echo de menos los tiempos en que programar era liarse a echar lineas de código sin más, aunque no fuera la forma más eficiente.
28 junio 2006
maven
En el trabajo ya he metido un par de proyectos con maven.
Con el tiempo hemos desarrollado varias librerías en java. Una de comunicaciones (sockets y rmi), otra con algoritmos matemáticos, otra con componentes de interface de usuario, para ventanitas con acceso a base de datos, etc, etc.
He creado proyectos maven para los fuentes de cada una de estas librerías. En un servidor he montado un repositorio de jar accesible para todo el mundo a través de ftp. Con maven, he compilado estas librerías y metido los jar en el respositorio común.
En dos proyectos que están ahora en marcha, los he modificado para que funcionen con maven. He puesto las dependencias correspondientes a log4j y demás librerías standard, además de las dependencias de nuestras librerías propias. Todo ha funcionado correctamente. Al compilar por primera vez estos proyectos con maven, se ha ido a internet y a mi repositorio de jars a buscar las librerías indicadas, se las ha descargado y todo bien.
Me quedan sin embargo dos pequeñas pegas que solucionaré jugando un poco.
Por un lado, si modifico un jar dentro del repositorio de jars, no sé si los proyectos que lo utilizan se enteran y se bajan la nueva versión (a la que no he numerado como nueva versión). Creo que poniendo lo que maven llama versión SNAPSHOT, sí lo haría. De todas formas, la primera prueba que he hecho con esto no me acaba de convencer.
Por otro lado, todo el tema de integración con los IDE. Maven tiene estos comandos
mvn idea:idea
mvn eclipse:eclipse
que generan los proyectos para Idea y para eclipse. Para el primero funciona todo perfecto. Sin embargo, para eclipse parace que el tema funciona peor. No me gusta cómo se monta el proyecto en eclipse, sobre todo si es un proyecto maven con subproyectos debajo.
Hay además un plugin de eclipse para poder utilizar maven desde el ide. Lo he instalado una vez y me ha ido bien, pero ya no puedo tocar en dependencias el proyecto como a mi me gustaría. Un compañero mio ha instalado el mismo plugin y no ha podido volver a abrir eclipse. Le da un error en el inicio, antes de abrir nada y de ahí no sale, ni desinstalando el plugin a mano (borrándolo del directorio plugins).
En fin, con eclipse parece que ese plugin no es buena cosa, aunque seguiré en ello.
Con el tiempo hemos desarrollado varias librerías en java. Una de comunicaciones (sockets y rmi), otra con algoritmos matemáticos, otra con componentes de interface de usuario, para ventanitas con acceso a base de datos, etc, etc.
He creado proyectos maven para los fuentes de cada una de estas librerías. En un servidor he montado un repositorio de jar accesible para todo el mundo a través de ftp. Con maven, he compilado estas librerías y metido los jar en el respositorio común.
En dos proyectos que están ahora en marcha, los he modificado para que funcionen con maven. He puesto las dependencias correspondientes a log4j y demás librerías standard, además de las dependencias de nuestras librerías propias. Todo ha funcionado correctamente. Al compilar por primera vez estos proyectos con maven, se ha ido a internet y a mi repositorio de jars a buscar las librerías indicadas, se las ha descargado y todo bien.
Me quedan sin embargo dos pequeñas pegas que solucionaré jugando un poco.
Por un lado, si modifico un jar dentro del repositorio de jars, no sé si los proyectos que lo utilizan se enteran y se bajan la nueva versión (a la que no he numerado como nueva versión). Creo que poniendo lo que maven llama versión SNAPSHOT, sí lo haría. De todas formas, la primera prueba que he hecho con esto no me acaba de convencer.
Por otro lado, todo el tema de integración con los IDE. Maven tiene estos comandos
mvn idea:idea
mvn eclipse:eclipse
que generan los proyectos para Idea y para eclipse. Para el primero funciona todo perfecto. Sin embargo, para eclipse parace que el tema funciona peor. No me gusta cómo se monta el proyecto en eclipse, sobre todo si es un proyecto maven con subproyectos debajo.
Hay además un plugin de eclipse para poder utilizar maven desde el ide. Lo he instalado una vez y me ha ido bien, pero ya no puedo tocar en dependencias el proyecto como a mi me gustaría. Un compañero mio ha instalado el mismo plugin y no ha podido volver a abrir eclipse. Le da un error en el inicio, antes de abrir nada y de ahí no sale, ni desinstalando el plugin a mano (borrándolo del directorio plugins).
En fin, con eclipse parece que ese plugin no es buena cosa, aunque seguiré en ello.
14 junio 2006
Foro de Java y C++ de Chuidiang
Tengo el foro Foro de Java y C++ de Chuidiang abandonado.
En el trabajo, resulta que tenemos un corta fuegos que no permite acceso a través de un montón de puertos y además el proxy nos prohibe el acceso a determinadas páginas. ¡Sorpresa!. Desde este Lunes está prohibido el acceso al foro (supongo que la prohibición es a foroswebgratis).
En casa, por problemas técnicos que no vienen al caso, estoy sin internet.
Resultado: No puedo ni siquiera ver qué hay en mi propio foro y tampoco puedo actualizar mi página web.
Espero que los problemas técnicos caseros se resulevan pronto....
En el trabajo, resulta que tenemos un corta fuegos que no permite acceso a través de un montón de puertos y además el proxy nos prohibe el acceso a determinadas páginas. ¡Sorpresa!. Desde este Lunes está prohibido el acceso al foro (supongo que la prohibición es a foroswebgratis).
En casa, por problemas técnicos que no vienen al caso, estoy sin internet.
Resultado: No puedo ni siquiera ver qué hay en mi propio foro y tampoco puedo actualizar mi página web.
Espero que los problemas técnicos caseros se resulevan pronto....
Problemas de refresco con internet explorer
Uno de los motivos de mi cabreo con css eran los problemas de refresco que se me plantean en mi página de apuntes de programación cuando se mira con internet explorer.
Si visualizamos la página y ponemos una ventana encima o jugamos con el scroll de una forma "brusca", desaparecen algunas letras o incluso se quedan a medio dibujar.
Jugando ayer, ya tengo una pista del problema. Las líneas que desaparecen es justo encima de los anuncios de google o del buscador de google. Parece entonces que hay algo en los javascript de google que no le gusta al internet explorer. Todavía no he conseguido arreglarlo, pero teniendo la pista ya parece más fácil o, al menos, "ñapeable".
Sin embargo es curioso porque sólo pasa en aquellas páginas que he "modernizado" hace poco con css, dándoles el aspecto de libreta con papel rayado. En las antiguas páginas no pasa. Habrá que seguir investigando un poco.
Si visualizamos la página y ponemos una ventana encima o jugamos con el scroll de una forma "brusca", desaparecen algunas letras o incluso se quedan a medio dibujar.
Jugando ayer, ya tengo una pista del problema. Las líneas que desaparecen es justo encima de los anuncios de google o del buscador de google. Parece entonces que hay algo en los javascript de google que no le gusta al internet explorer. Todavía no he conseguido arreglarlo, pero teniendo la pista ya parece más fácil o, al menos, "ñapeable".
Sin embargo es curioso porque sólo pasa en aquellas páginas que he "modernizado" hace poco con css, dándoles el aspecto de libreta con papel rayado. En las antiguas páginas no pasa. Habrá que seguir investigando un poco.
13 junio 2006
Cascading Style Sheets, Level 2
Dados mis problemas con css, buscando, encotré esto Cascading Style Sheets, Level 2 que supongo que es donde tenía que haber ido desde el principio. Tiene buena pinta salvo que está en un idioma extraño.
Curiosamente, es de la página que me aconsejaba JJR en un comentario de un post anterior.
Curiosamente, es de la página que me aconsejaba JJR en un comentario de un post anterior.
12 junio 2006
Free Java Books
Aunque estén en perfecto inglés, en Free Java Books hay un montón de libros gratis para bajarse sobre java. Están incluidos los de "thinking in java" y "thinking in patterns whith java".
10 junio 2006
Más css
Bueno, acabo de conseguir que se peguen los dos div. El truco es este:
<div>cosas<div>
<div>mas cosas<div>
Si lo hacemos así, sí salen pegados, pero si se nos ocurre hacer esto
<div>cosas</div>
<div><p>mas cosas</p></div>
entonces se separan. Si en vez de <p> es un <h1;> también se separan.
Aparentemente p o h1 tienen un márgen. El div se queda pegadito a la etiqueta p o h1, pero el margen de esa etiqueta cae fuera del div y es lo que hace que se separe del div anterior.
Los contenidos de cada "fila" de pixels serían esto...
div
margen superior de p o h1
otro div y contenido de p o h1
...
Bueno, creo que voy entendiendo cómo va el asunto. A ver si encuentro algún tutorial en castellano que explique cómo son las cosas (la filosofía de css) en vez de limitarse a poner etiquetas explicadas una detrás de otra.
<div>cosas<div>
<div>mas cosas<div>
Si lo hacemos así, sí salen pegados, pero si se nos ocurre hacer esto
<div>cosas</div>
<div><p>mas cosas</p></div>
entonces se separan. Si en vez de <p> es un <h1;> también se separan.
Aparentemente p o h1 tienen un márgen. El div se queda pegadito a la etiqueta p o h1, pero el margen de esa etiqueta cae fuera del div y es lo que hace que se separe del div anterior.
Los contenidos de cada "fila" de pixels serían esto...
div
margen superior de p o h1
otro div y contenido de p o h1
...
Bueno, creo que voy entendiendo cómo va el asunto. A ver si encuentro algún tutorial en castellano que explique cómo son las cosas (la filosofía de css) en vez de limitarse a poner etiquetas explicadas una detrás de otra.
css, internet explorer y firefox una mierda
Bueno, estoy un poco cabreado, así que ahí voy a soltarlo todo.
No tengo ni idea de css, estoy empezando, pero desde luego lo que veo no me gusta nada.
En primer lugar, internet explorer y firefox no se comportan igual ante el mismo código, cada uno hace lo que le da la gana (se supone que firefox hace lo correcto), pero de todas formas hay que andar peleándose para ver si sale igual, o al menos decente, en ambos exploradores y andar "ñapeando" para que así sea.
Luego, con firefox veo cosas que no me cuadran. Intento conseguir que dos div salgan pegados. No hay manera. En algunas de mis páginas sí salen pegados, en otras no y aparentenmente hay lo mismo (ambas incluyen el mismo fichero css y los div están colocados exactamente igual). Seguro que la diferencia es algo que hay dentro del div, pero no logro acertar con qué es. Sin embargo, en el que no lo cosigo, si al div de abajo le pongo un borde solid de 1px entonces misteriosamente se mueve y se pega. Si le pongo 0px vuelve a salir separado. ¿Será que el borde por defecto es de varios pixels? ¿Y si no quiero borde en absoluto? ¿Por qué en otras páginas me sale bien sin necesidad de poner el borde?.
La última mierda: Mi página inicial, por ejemplo, sale bien en internet explorer y firefox, pero me da problemas de refresco en internet explorer. Si se abre una ventana encima y se cierra o se juega con el scroll, desaparecen letras o quedan incluso a medio pintar.
No dudo que con esfuerzo y aprendiendo trucos se puede conseguir que salga bien en todos lados pero ... ¿qué interés tiene para mí echar horas y horas en eso para resolver problemas de los navegadores?.
Voy a seguir un poco más, pero al final creo que pasaré de css y seguiré haciendo mis páginas cutre-simples html y ya. Al final, para poner tutoriales no necesito grandes presentaciones.
No tengo ni idea de css, estoy empezando, pero desde luego lo que veo no me gusta nada.
En primer lugar, internet explorer y firefox no se comportan igual ante el mismo código, cada uno hace lo que le da la gana (se supone que firefox hace lo correcto), pero de todas formas hay que andar peleándose para ver si sale igual, o al menos decente, en ambos exploradores y andar "ñapeando" para que así sea.
Luego, con firefox veo cosas que no me cuadran. Intento conseguir que dos div salgan pegados. No hay manera. En algunas de mis páginas sí salen pegados, en otras no y aparentenmente hay lo mismo (ambas incluyen el mismo fichero css y los div están colocados exactamente igual). Seguro que la diferencia es algo que hay dentro del div, pero no logro acertar con qué es. Sin embargo, en el que no lo cosigo, si al div de abajo le pongo un borde solid de 1px entonces misteriosamente se mueve y se pega. Si le pongo 0px vuelve a salir separado. ¿Será que el borde por defecto es de varios pixels? ¿Y si no quiero borde en absoluto? ¿Por qué en otras páginas me sale bien sin necesidad de poner el borde?.
La última mierda: Mi página inicial, por ejemplo, sale bien en internet explorer y firefox, pero me da problemas de refresco en internet explorer. Si se abre una ventana encima y se cierra o se juega con el scroll, desaparecen letras o quedan incluso a medio pintar.
No dudo que con esfuerzo y aprendiendo trucos se puede conseguir que salga bien en todos lados pero ... ¿qué interés tiene para mí echar horas y horas en eso para resolver problemas de los navegadores?.
Voy a seguir un poco más, pero al final creo que pasaré de css y seguiré haciendo mis páginas cutre-simples html y ya. Al final, para poner tutoriales no necesito grandes presentaciones.
05 junio 2006
PMD y eclipse
PMD es un programa para revisar métricas de nuestro código. Puedes bajártelo como aplicación independiente en http://pmd.sourceforge.net/ y tiene plugings para un montón de IDEs, incluido Maven.
Me bajé la versión 3.1.5 y la instalé con eclipse 3.1.2, pero todo son problemas. Según le das la primera vez para que analize las métricas va bien y saca más métricas no adecuadas de las que me gustaría.
Sin embargo, según voy trabajando y le doy a que repase las métricas, incluso de un sólo fichero, se me queda colgado, tarda un montón y me deja el eclipse más pallá que pacá.
Al final, voy a desinstalar el plugin este y probaré con maven a ver qué tal va...
Me bajé la versión 3.1.5 y la instalé con eclipse 3.1.2, pero todo son problemas. Según le das la primera vez para que analize las métricas va bien y saca más métricas no adecuadas de las que me gustaría.
Sin embargo, según voy trabajando y le doy a que repase las métricas, incluso de un sólo fichero, se me queda colgado, tarda un montón y me deja el eclipse más pallá que pacá.
Al final, voy a desinstalar el plugin este y probaré con maven a ver qué tal va...
03 junio 2006
Guestbook
Cuando cogí el dominio y después de jugar un poco con las herramientas que me daban, instale un libro de visitasGuestbook, el Viper GuestBook.
Aunque la última versión parece que viene protegida para que no se pueda meter basura alegremente (mensajes de esos que sólo tienen links) y que suelen meter "robots", yo tengo anterior que no tiene esa protección.
De momento lo he solucionado añadiendo un nuevo campo en el que pido una suma y restrinjo las posibles entradas del campo sólo al resultado correcto de esa suma. Aunque es un poco chapuza, de momento parece que funciona y no tengo más problemas.
Tendré que escribir a los de hostito a ver si piensan actualizarlo, o bien descargarme la versión más moderna e instalármela yo por mi cuenta.
Aunque la última versión parece que viene protegida para que no se pueda meter basura alegremente (mensajes de esos que sólo tienen links) y que suelen meter "robots", yo tengo anterior que no tiene esa protección.
De momento lo he solucionado añadiendo un nuevo campo en el que pido una suma y restrinjo las posibles entradas del campo sólo al resultado correcto de esa suma. Aunque es un poco chapuza, de momento parece que funciona y no tengo más problemas.
Tendré que escribir a los de hostito a ver si piensan actualizarlo, o bien descargarme la versión más moderna e instalármela yo por mi cuenta.
Más sobre apache y php
Como últimamente ando metiendo algo de php y jugando con css para mi página web, me he decido a instalar también en casa apache y php. De esta forma podré ver el resultado de mis páginas antes de subirlas al servidor.
Me bajé la última de Apache (2.2.2) y la de PHP (5.1.4) y me puse a ello. Igual que en el trabajo, tuve el problema de "cannot load php5apache2.dll into server". Como en el trabajo, después de un día de pelearme con ello, conseguí arreglarlo reemplazando la librería php5apache2.dll por otra, voy a ello directamente al grano.... ¡No funciona!. En casa esa solución no me vale.
Vuelta a indagar por internet y al final seguí un sabio consejo que encontré por ahí. Instalar versiones más antiguas. Instalé dos versiones que tenía en el ordenador de otra vez que intenté todo esto: apache 2.0.53 y php 5.0.3. Funcionó todo perfecto y a la primera.
A veces no es bueno irse rápidamente a la última versión de algo.
Me bajé la última de Apache (2.2.2) y la de PHP (5.1.4) y me puse a ello. Igual que en el trabajo, tuve el problema de "cannot load php5apache2.dll into server". Como en el trabajo, después de un día de pelearme con ello, conseguí arreglarlo reemplazando la librería php5apache2.dll por otra, voy a ello directamente al grano.... ¡No funciona!. En casa esa solución no me vale.
Vuelta a indagar por internet y al final seguí un sabio consejo que encontré por ahí. Instalar versiones más antiguas. Instalé dos versiones que tenía en el ordenador de otra vez que intenté todo esto: apache 2.0.53 y php 5.0.3. Funcionó todo perfecto y a la primera.
A veces no es bueno irse rápidamente a la última versión de algo.
01 junio 2006
Javolution
Un compañero de trabajo ha encontrado esto Javolution. Una especie de añadido a java con clases muy rápidas para tiempo real.
Bueno, es otra cosa más que hay que probar un día de estos.
Bueno, es otra cosa más que hay que probar un día de estos.
elmundo.es - Lo que Google sabe de mí
Un compañero de trabajo me ha mandado esta noticia elmundo.es - Lo que Google sabe de mí.
Realmente da qué pensar.
Realmente da qué pensar.
php5 y apache2 en windows
Después de la gracia de tener que reinstalar windows, me decidí a volver a poner apache/php/mysql en windows. Ya puestos, me bajé las últimas versiones de todo.
Al instalar apache 2.2 con php 5.1.4 he tenido un problema: no había forma de que funcionara. Por más que revisé que todo estaba correcto, al arrancar el servidor apache siempre obtenía el error
Cannot load c:/php/php5apache2.dll into server
Buscando por internet, al final encontré que es un pequeño problema de compatibilidad entre apache 2.2 y php 5.1.4. Hay versiones de apache ya compiladas que no pueden cargar este modulo. Encontré esa información aquí http://www.webestilo.com/foros/mensaje.phtml?foro=3&msg=43520&pag=
La solución que propnen ahí es bajarse una nueva php5apache2.dll de aquí http://www.apachelounge.com/download/ y reemplazarla por la original.
Lo he probado y efectivamente funciona.
Bueno, ahora me queda la parte de mysql ...
Al instalar apache 2.2 con php 5.1.4 he tenido un problema: no había forma de que funcionara. Por más que revisé que todo estaba correcto, al arrancar el servidor apache siempre obtenía el error
Cannot load c:/php/php5apache2.dll into server
Buscando por internet, al final encontré que es un pequeño problema de compatibilidad entre apache 2.2 y php 5.1.4. Hay versiones de apache ya compiladas que no pueden cargar este modulo. Encontré esa información aquí http://www.webestilo.com/foros/mensaje.phtml?foro=3&msg=43520&pag=
La solución que propnen ahí es bajarse una nueva php5apache2.dll de aquí http://www.apachelounge.com/download/ y reemplazarla por la original.
Lo he probado y efectivamente funciona.
Bueno, ahora me queda la parte de mysql ...
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.
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
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
- 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.
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:
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.
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.
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é.
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.
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...
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.
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...
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.
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.
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.
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.
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...
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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?
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...
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 ...
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 ....
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
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.
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.
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.
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.
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.
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.
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.
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:
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.
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:
A ver en qué queda todo...
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.
A ver en qué queda todo...
Suscribirse a:
Entradas (Atom)
