29 abril 2006

Meter Adsense en MediaWiki

Después de instalar el ChuWiki, me apetecía meterle el contador de estadísticas y los anuncios de google adsense.

Mirando por internet, vi que el fichero que hay que tocar está en el directorio skins, y si no hemos cambiado el skin por defecto, es el fichero MonoBook.php el que hay que tocar

Ahí hay mezclado php con código html. Es cuestión de tener cuidado y no pegar el código de adsense o del contador entre medias del código php. Hay que buscar la parte de html.

En concreto, para añadir el código donde lo he hecho, busqué donde pone


<h1 class="firstHeading"><?php $this->text('title') ?></h1>

que es el título principal del artículo que se está viendo y puse mi código adsense justo detras. Así sale entre el título y el artículo, donde más fastidia.

Para el contador, busqué el </body> del final, y lo añadí justo antes.

Si no te gustan esas posiciones, es cuestión de ir probando hasta que des con el sitio adecuado.

28 abril 2006

ChuWiki

Como estoy emocionado con esto del MediaWiki, la WikiPedia y veo que hay más sitios que tienen este tipo de cosas, acabo de abrir una ChuWiki, para poner muchos tutoriales de muchos lenguajes de programación, a ver si entre todos conseguimos rellanarla y conseguir algo aceptable.

Ya sabes, estás invitado a vistarla y parcipar en ella, aportando tus conocimientos. Yo, de momento, he puesto una "declaración de intenciones" y un "Hola mundo" en C para linux y en Java.

Por cierto, el "cpanel" que es el panel que ofrece hostito para manejar tu página web, una maravilla. Para instalar el MediaWiki, símplemente subí el zip, que era un mediawiki.tar.gz. Desde el mismo cpanel pude descomprimirlo, así me evité tener que desempaquetarlo en mi pc y luego subir un porrón de ficheros.

El Hola Mundo en varios lenguajes

En http://www.holamundo.es/ está el "Hola Mundo" en varios lenguajes de programación.

Son particularmente crípticos BrainFuck, Unlambda y sobre todo WhiteSpace, en el que el código se escribe a base de espacios y tabuladores. ¡¡Debe ser horrible tener que depurar un programa!!

27 abril 2006

La WikiPedia

Después de andar jugando con mi instalación de mediaWiki, volví a instalar la tikiWiki en mi página de programación. Definitivamente, me gusta más la primera.

Había oido hablar de la WikiPedia, una enciclopedia "libre" en el que todo el mundo puede escribir artículos, corregir los ya existentes, añadir cosas, etc. He visto que el formato que usa es claramente el de mediaWiki.

Animado porque con mis pruebas ya sabía editar, busqué en la wikiPedia un artículo que contuviera alguna palabra mal escrita y creo que fue en el del Doctor Muerte (un personaje de comic), encontré "caln" en vez de "clan". Lo edité, lo corregí y ¡milagro!, funcionó. No hace falta registrarse, no queda archivado el cambio hasta que alguien lo supervise. Directamente tocas y se cambia.

Todo esto me ha dejado realmente asombrado. La wikiPedia es una enciclopedia muy conocida, con montones de visitas diarias. Según he visto en la misma página, tienen cientos de modificaciones y añadidos a la hora. Aunque sí hay supervisión, hay una serie de tios revisando constantemente los cambios que se hacen para evitar lo que llaman "vandalismo" y deshacerlos, los cambios que tú hagas con inmediatos.

No deja de asombrarme que eso funcione, entre tantos miles de visitantes, quizá el 99% es gente responsable y bienintencionada que colabora con ánimo de ayudar. Sin embargo, en este mundo en que hay tantos que hacen virus realmente destructivos, en el que la publicidad mueve millones, etc, es realmente curioso que haya poca gente que en la wikiPedia no se dedique simplemente a estropear las cosas con mala intención, a poner publicidad de sus productos, etc.

De hecho, sí hay gente que lo hace. Si miramos los comentario de lo que ellos llaman café, donde la gente y los responsables de la wikiPedia comentan cosas, y si miramos los historiales de modificaciones de los artículos, vemos que sí se añade publicidad y que de vez en cuando alguien estropea completamente un artículo. En el historial, en concreto, puede verse el artículo justo antes de que lo estropeen, el estropeado y justo después, cuando alguien lo arregla.

Sin embargo, funciona. Impresionante.

Ya metidos más en programación, existe también wikiLibros, en el que la gente libremente y sin registrarse puede ir escribiendo algunos apartados, capítulos o párrafos o lo que sea de libros en línea gratuitos. Por ejemplo, hay un libro-tutorial de java a medio hacer. En él me animé a escribir uno de los capítulos que me pareció simple, y nuevamente sin necesidad de registrarse se hizo el cambio inmediatamente.

Esta página de wikiLibros es interesante para encontrar tutoriales, que podemos mejorar en un momento dado si nos interesa.

26 abril 2006

Poner una wiki en tu página web

He estado probando a instalar una wiki en la página web.

Tanto en mi página de internet como en el servidor del trabajo intenté instalar la phpWiki de sourceforge, pero no la conseguí hacer funcionar, así que desistí. Posiblemente soy un poco torpe.

Luego, desde hostito, instalé la tikiwiki, jugué un poco con ella y la desinstalé, no por nada especial, simplemente porque de momento no me interesabe tenerla. En el trabajo intenté instalarla también, pero no pude acceder a su página, buscando tikiwiki en google.

En el trabajo me bajé mediawiki, y esta sí que funcionó a la perfección. Desempaquete el zip en el sitio adecuado y entré desde el navegador. Me llevó a una página de configuración sencilla y todo correcto.

Lo que más me ha llamado la atención es la forma de crear nuevos artículos en un chisme de estos. No hay botón de "crear" por ningún lado. Lo que hay que hacer es editar cualquiera de los artículos existentes y poner un enlace al nuevo artículo que queremos crear. Le damos a previsualizar el artículo que hemos editado (no hace falta salvarlo) y pinchamos en el link que acabamos de crear. Nos sale algo parecido a "este artículo no existe" y la cajita del editor para emperzar e escribirlo. Curioso.

Tutorial de java

Últimamente ando metiendo una especie tutorial de java en mi página de java, pero no sé en qué quedará la cosa.

Soy consciente de que un tutorial serio de java, en el que se empiece desde cero hasta lo más avanzado, explicándolo todo, es mucho trabajo. Demasiado para que esté seguro de poder empezarlo y acabarlo en un tiempo razonable.

Así que estoy intentando orientarlo como siempre, un conjunto de tutoriales pequeños que tienen sentido sueltos. Además, tampoco me pongo a explicar cosas como qué tipos de datos primitivos admite java, los bucles, etc, etc. Estas cosas vienen en miles de tutoriales y libros mucho mejores que lo que yo pueda hacer. En cada tutorial pretendo hacer hincapié en algún aspecto de java que veo en los foros que la gente en general no tiene claro. También en aquellos aspectos en los que yo metí la pata en su momento, me costó más entender o simplemente me llamaron la atención.

Ya tengo tres nuevos de esos tutoriales, que empiezan y terminan con uno ya hecho, es decir, cinco en total. Puedes verlos en mi página de java.

También, no sé como, mi intención era que fuese un tutorial "interactivo", por llamarlo de alguna forma, de forma que la gente que vaya leyendo, pueda decirme cosas que no estén claras, posibles amplicaciones de cada tutorial e incluso orientarme sobre qué tema tratar después. Una vez dados los primeros pasos con java, hay muchos posibles caminos por los que seguir. Podemos pasarnos al tema de ventanas e interfaces gráficos de usuario, a bases de datos, a comunicaciones en red, hilos, etc, etc, etc. Cuando tenga algunos tutoriales más, los separaré en una página aparte de la principal y pondré mi dirección y demás invitando a la gente a hacer sugerencias.

21 abril 2006

Eclipse y refactoring

Hace poco leí el libro de "refactoring" de Martin Fowler. Aunque ya conocía el tema, me pareció buen libro y bastante interesante. Los primeros capítulos hablan de qué es el refactoring, por qué es bueno hacerlo, cuando hay que hacerlo, etc, etc. Son los capítulos interesantes.

El resto del libro es como un libro de recetas. Cada arreglo que queremos poder hacer en el código, por ejemplo, partir un método largo en varios pequeños, está contemplado y te cuenta en un par de páginas cual es la mejor forma de realizarlo.

Esto me animó a escribir un mini-tutorial contando qué es el refactoring y qué ventajas tiene y, sobre todo, me animó a probarlo con eclipse.

Eclipse tiene muchas opciones de refactoring. En el código del trabajo encontre dos clases similares con un método común muy grande, así que decidí hacer una clase padre, llevarme ese método a la clase padre y luego partirlo en cachos.

Una vez creada la clase padre y puesto los extends en los hijos, seleccione en uno de ellos el nombre del método largo. Di al botón derecho del ratón para sacar el menú, "refactoring", "pull-up". Eclipse detectó que había otro hijo con un método del mismo nombre y me preguntó si quería borrar ese método de ahí. Conteste que sí y ¡voila!, eclipse hizo todo el trabajo. Desapareció el método de las clases hijas y apareció en la clase padre.

Luego empecé a partir el método en partes más pequeñas. Seleccioné un trozo de código de ese método que tenía sentido como método separado, botón derecho del ratón, "refactor", "extract method" y listo, eclipse lo hace sólo. Pregunta el nombre del método, pone automáticamente los parámetros necesarios, reemplaza el código por la llamada y todo funciona correctamente.

En cuatro click de ratón tenía el método grande partido en cuatro métodos pequeños.

Pude comprobar que uno de los parámetros del método grande no se usaba, así que a rehacer código de nuevo. Seleccioné el nombre del método, botón derecho de ratón, "refactor", "change method signature" y me sale una ventana con todas las cosas del método (tipo devuelto, nombre y parámetros). Selecciono el parámetro inútil, le doy borrar y ya está. Eclipse se encarga de corregir el código y de corregir en todas las llamadas a ese método para quitar el parámetro sobrante.

En fin, una pequeña maravilla de la herramienta que permite arreglar el código en dos patadas y con seguridad.

20 abril 2006

El libro del posicionamiento de los buscadores

Me han pasado un pequeño pdf

el_libro_del_posicionamiento_en_buscadores.pdf (application/pdf Objeto)

en el que se habla sobre cómo los buscadore, especialmente google y altavista, revisan las páginas para decidir en qué posición colocarlas.

Es bastante interesante y sencillo de leer (podemos saltarnos un pequeño apartado que tiene fórmulas para decir cómo se calcula el pagerank de google). Ahora comprendo, por ejemplo, como al buscar "maskformatter" en google, páginas en español, mi página aparece la primera, a pesar de tener un pagerank de cero.

El truco parece ser básicamente en construir páginas sencillas html, con contenido, a ser posible sin tablas (o las mínimias imprescindibles), repetir mucho la palabra, sobre todo al principio del texto y a ser posible ponerla en negrita o con fuente más grande que las demás (por ejemplo, en los subtítulos de la página).

Yo, que no soy amigo de flash ni de java script y soy demasiado vago para hacer tablas o meterme en php, ya entiendo por qué mis páginas salen bastante arriba en determinadas búsquedas.

google adsense y hacienda

Al meter los anuncios de google en mi página de programación, decidí mirar por internet cómo se declaran estos ingresos en hacienda.

Tras urgar por internet, se me ha caido el alma al suelo. Por algo tan tonto como poner anuncios en una página, hay que hacer de todo.

Antes de que sigas leyendo, ten en cuenta que no soy ningún especialista en el tema. Simplemente he investigado por internet y pongo aquí mis conclusiones. Si este tema te afecta, comprueba con alguien que realmente sepa todo esto.

En primer lugar, si cobramos por poner anuncios en nuestra página web, nuestra página web se convierte en una página personal con actividad económica y está sujeta a la LSSI (Ley de Servicios Sociedad de la Información) y debe cumplir lo que se estipula allí.

Básicamente consiste en identificarse en algún sitio de la página (con nombre, apellidos, dirección, nif y dirección de correo) además de cumplir alguna otra cosa, como poner los anuncios perfectamente distiguibles del contenido de la página.

Es curioso, pero la página ya se convierte en un negocio, así que no se pueden copiar contenidos de otras páginas que estén bajo licencia del estilo "sólo usos personales, NO usos comerciales".

Por otra parte, en el tema de hacienda, el resumen es el siguiente:
  • Hay que darse de alta obligatoriamente en el IAE (Impuesto de Actividades Económicas). Es simplemente un papeleo que hay que hacer en hacienda. Si nuestros ingresos no superan una cantidad determinada, deberemos hacer nuestra declaración de actividades económicas cada tres mese, pero no pagaremos nada.
  • Si nuestros ingresos anuales superan una cantidad de alrededor de 6000 euros, hay que darse de alta ademá en el RETA (Régimen espacial de trabajadores autónomos). Si superamos esa cantidad y nos damos de alta, ya sí tenemos que pagar una cantidad todos los meses de cotización a la seguridad social. Ojo, si estás de alta en el RETA y además eres trabajador por cuenta ajena, creo que no tienes derecho al paro, ya que sigues realizando un trabajo, como autónomo, aunque no te dé un duro.
  • Si se factura IVA, también hay que darse de alta en lo del IVA. Por ahí se comenta que al ser google una empresa americana, no se le factura IVA y no hace falta, pero no he visto ningún sitio que lo ponga en serio.
Tienes todo esto un poco más explicado por un asesor fiscal en este foro.

Luego hay otro tema curioso. Si nuestra página web tiene un registro de usuarios con su base de datos correspondiente .... nos liamos con la ley de protección de datos y demás y todo es más liado aún.

Parece demasiado para una vulgar página personal (o incluso un blog) en los que simplemente pones anuncios y ganas 5000 pelas al mes.

Un caso claro más en los que la realidad y la técnica van diez pasos por delante de la ley...

19 abril 2006

Desuscribirse sobre la marcha

Hace poco me he encontrado con un pequeño problema, que es el siguiente.

Tengo una clase que hereda de JTable. Esta clase en cierta ocasión debe mostrar un JDialog. Para que toda vaya bien, necesito que el padre de ese JDialog sea la ventana en la que está mi JTable. Como estoy dentro de la clase JTable, no tengo garantía ninguna de que mi clase JTable esté todavía dentro de ninguna ventana, así que no hay un sitio claro donde crear este JDialog hijo.

La solución que se me había ocurrido consiste en hacer un HierarchyListener y suscribirlo a mi clase JTable. De esta forma, cuando metan el JTable dentro de algún componente, compruebo si ya tengo ventana (con SwingUtilities.getWindowAncestor(miJTable)). Si ya tengo ventana, creo el JDialog pasándole el padre.

Como el JDialog sólo quiero crearlo una vez, lo que hago inmediatamente después de crearlo es desuscribir el HierarchyListener. Ahí me saltó el problema.

En las primeras pruebas que hice, todo correcto. Sin embargo, al meter mi clase JTable en una aplicación con interfaces de usuario más complejas, me saltaba una excepción en el momento de meter el JTable dentro de un JPanel. Además, la excepción no era en mi código, sino en las clases internas de java. La primera línea de código mia implicada en la excepción era simplemente meter el JTable en un JPanel, con todo correcto.

El problema es que java está avisando a los HierarchyListener de mi JTable. Primero mira cuantos hay, se lo guarda en una variable y luego se mete en un bucle para ir avisándolos. Como en ese mismo aviso yo me desuscribía, su lista de HierarchyListener decrecía en un elemento. El bucle, al llegar al último índice, daba una excepción al tratar de recuperar el último elemento de la lista que ahora es de un elemento menos (el número de elementos de la lista estaba previamente guardado en una variable).

La solución que he puesto es desuscribirme con un SwingUtilities.invokeLater(). De esta forma la desuscripción se realiza más adelante, cuando se pueda, y el bucle de aviso a los suscriptores termina de forma normal.

Resumiendo, un listener de cualquier cosa no puede desuscribirse alegremente de un sitio en el mismo método de aviso. En mi caso, no puedo desuscribir mi HierarchyListener en el método hierarchyChanged(). Según como esté implmentado el recorrer la lista de suscriptores/listeners para avisarles, esto puede provocar una excepción.

Acentos y Firefox

Desde que me bajé la última versión de FireFox (la 1.5.0.2) empecé a tener problemas en ciertas páginas con los acentos. En vez de la letra acentuada, me salía un rombo con un interrogante. Además era en unas páginas sí y en otras no, e incluso dentro de la misma página, en unos sitios sí y en otros no.

Investigando, descubrí que los que salían mal eran los que en código html estaban puestos directamente como letra con acento. Los que salían bien eran los que seguían las convenciones de html, es decir "& <vocal> acute ;"

Al final, con windows 2000, conseguí tocar en un sitio y ya sale todo bien. El sitio es

"inicio", "configuración", "panel de control", "configuración regional", "avanzada" y marcando el check de "20284 ibm ebcdic - latin america/spain" que no lo tenía marcado. Por supuesto, para que los cambios tuvieran efecto en windows, tuve que reiniciar el ordenador. Ahora, aparentemente, todo va bien, en FireFox salen bien todos los acentos, independientemente de cómo estén en el código html.

Actualización de librería gráfica

Después de un montón de tiempo, acabo de actualizar mi pequeña librería gráfica en java.

Como cambios importantes, he modificado el Canvas de dibujo con un JLayeredPane. Esto me permite tener dos (o más) capas de dibujo. Una para un dibujo de fondo y otra para dibujar encima cosas como cursores que se mueven con el ratón. Con este cambio he conseguido un repintado mucho más efectivo al mover el cursor con el ratón.

También he añadido la posibilidad de hacer gráficos polares. Aunque ya se puede usar, está un poco a medias y tengo todavía que darle un repaso a este tema. Es posible que cambie bastantes cosas para una próxima versión.

Al Lienzo ahora se el puede cambiar fácilmente el color de fondo y se le puede poner un pequeño marco para dejar un márgen alrededor sin dibujo.

Hay unos cuantos objetos gráficos más, pero destaca el GraficoSimbolos, que permite dibujar imágenes en el gráfico, dando su posición y una etiqueta.

A ver para cuándo la próxima actualización...

18 abril 2006

El arte de programar

Cuando empecé con el sinclair zx81 a programar en mi casa, mi principal objetivo era aprender el lenguaje de programación, el basic, que me ofrecía dicho ordenador.

Mientras seguía programando por afición, simplemente hacía código. Quería un programa que hiciera algo, normalmente un juego, lo programaba lo más rápido que podía y lo depuraba hasta que funcionaba. La elegancia del código, su reusabilidad o cualquier otra consideración de este tipo era algo que ni siquiera sabía que existía. Usaba los "goto" y las variables globales sin ningún tipo de remoridimiento<, sin saber que eso era "pecado".

Al empezar a trabajar como programador, el objetivo inicial era el mismo. El jefe me mandaba algún programa para hacer, esta vez no era un juego, y lo hacía lo más rápido posible hasta que funcionaba. Por aquello de cumplir con cierto formalismo, usaba menos las variables globales, no usaba el goto y procuraba comentar algo el código. Era cosas que había oido que eran buenas, aunque no sabía muy bien por qué.

Con el paso de los años, trabajando de programador, empezaba a hervirme la sangre al ver que tenía que repetir el mismo código o muy parecido una y otra vez. Al ver que mis compañeros repetían código que yo ya había hecho y que no les servía porque no estaba suficientemente aislado. Al ver que los compañeros tenían código que yo necesitaba pero no podía utilizar por los mismos motivos.

Todo esto me llevó a plantearme hacer el código de forma distinta. Cada vez que veía que algún trozo de código se repetía una y otra vez, trataba de buscar la forma de que ese código fuera único, de hacerlo una única vez para que sirviera en cualqueir sitio. En este tiempo fue cuando llegué a darme cuenta de lo que realmente era y da las infinitas posibilidades que ofrecía la programación orientada a objetos. Una cosa era hacer clases y heredar de vez en cuando como hacía antes y otra la nueva forma de hacer código que estaba descubriendo.

Al descubrir todo esto, emepecé a investigar por internet las formas de hacer ese código reutilizable, de cómo usar la orientación a objetos. Tropecé entonces con todo el tema de patrones de diseño.

Me llamó muchísimo la atención que después de varios años programando en el trabajo, estaba llegando muy despacio, sin saberlo, a una versión primitiva de los patrones de diseño. Muchas de las soluciones que iba encontrando con mucho esfuerzo, a base de ensayo y error, eran los patrones de diseño. Me estaba costando varios años llegar a una versión primitiva de los patrones de diseño, a reinventar la rueda.

Actualmente, creo que programo con un poco más de conocimiento de causa. Cuando quiero hacer algo, no tengo que inventar cómo, conozco bastantes patrones y los aplico cuando lo creo necesario. Sin embargo, sigue sin gustarme totalmente el código que hago.

Asi que de alguna manera, cuando necesito tocar código ya hecho y que no me gusta, trato de arreglarlo. Es curioso, pero veo en internet que eso también está inventado. Lo llaman refactorización y es algo a lo que también llegas, si no lo lees antes, después de varios años de hacer código.

Después de quince años programando en el trabajo ocho horas diarias (es un decir, algún que otro día estoy vaguete y hago otras cosas), todavía descubro cosas, veo que no sé programar lo suficientemente bien. No quiero decir que mis programas no funcionen, eso ya está superado hace tiempo, simplemente quiero decir que cuando más adelante necesito ese código para otra cosa, nunca está cien por cien disponible, siempre hay que tocarlo algo. También veo, en internet, que los grandes gurús de la programación comentan que tienen el mismo problema, aunque programan cien veces mejor que yo. No hacen bien el código a la primera y por eso cada vez desisten más de hacer el diseño óptimo a la primera y necesitan cosas como la refactorización. El código, por mucho que se piense y bien que se haga, siempre necesita ser retocado para reutilzarlo. Con esto quiero decir que un programador, por muy experimentado que sea, siempre encuentra formas de mejorar y nunca hace el código óptimo a la primera.

Sin embargo, existe una diferencia abismal en la rapidez y calidad del código generado por un programador exerto con varios años de experiencia y que se preocupa por todas estas cosas con respecto al programador novato. Un programador experto con su propia librería de componentes reutilizables puede hacer un proyecto en un tiempo muy inferior al de un programador novato que reutilice el proyecto anterior. Además, el código reutilizado por el experto da muchos menos problemas y está muy depurado.

Todo esto me lleva a sentir pena por las empresas actuales de software. Puede que haya excepciones, pero actualmente la programación es una cosa que las empresas no aprecian. Suponene que bastan unos meses de práctica para saber programar perfectamente. Se han quedado en que un buen programador es el que hace un programa que funciona en un tiempo razonable, es decir, lo acaba un par de meses después de que se acabe el plazo de entrega. ¡Sólo dos meses de retraso! ¡Qué maravilla!.

Es normal que las empresas de software contraten a un universitario o fp recién salido, que puede ser más o menos hábil en programar y le pongan a hacer un programa. Por supuesto, nadie le cuenta que existen los patrones de diseño ni la refactorización ni le dicen, por supuesto, que dentro de un año tiene que hacer otro programa muy similar, pero distinto y tenddrá que retocar su código si no lo hace bien ahora. Esta persona, cuando lleva un tiempo, la echan o se va porque está subcontratada o le dan algún cargo de responsabilidad y le hacen jefe de algo. El caso es que deja de programar en esa empresa. Es normal que ninguna persona se tire varios años programando (yo soy una excepción, porque soy especialmente asocial y no me "ascenderán" ni a tiros).

El resultado es que el software de muchas empresas puede más o menos funcionar correctamente, pero no es todo lo reutilizable, ampliable y modificable que debiera. Un nuevo desarrollo de software por parte de esa empresa, requiere casi recodificar todo desde cero o copiar, pegar y modificar el proyecto anterior, gastando mucho tiempo en depuración. Además, es normal que esta tarea de copia, pega y modifica la haga un nuevo contratado que sustituye al que hizo el código original. En fin, que el código de muchas empresas siempre está hecho por gente "novata" y retocado por gente "novata".

Si hubiera programadores experimentados, que realmente les gusta hacer el código reutilizable y bien hecho y se les diera tiempo para ello y otro montón de cosas "imposibles", los proyectos de las empresas, una vez saltado el bache de empezar, saldrían mucho más rápido y con mucha más calidad. Se utilizaría tal cual mucho código hecho y depurado en proyectos anteriores, sin necesidad si quiera de recompilarlo. La empresa, en unos años, tendría sus propias librerías específicas para el tipo de proyectos que hace.

En fin, una pena.

11 abril 2006

Comentarios en el código

Ya había odio algo, pero me ha llamado la atención leerlo.

En http://www.stickyminds.com/testandevaluation.asp?Function=edetail&ObjectType=ART&ObjectId=9041&tth=DYN&tt=siteemail&iDyn=3 dice que muchas veces sobra el comentario de nuestro código o, como mínimo, que si el código está bien hecho, debería sobrar.

La idea es que un código bien hecho debe ser autoexplicativo. Si el código es lo suficientemente autoexplicativo, el comentario es redundante y, por tanto, es algo que sobra. Además, necesita mantenimiento y que en algún momento puede decir lo contrario que el código. Por ejemplo, si modificamos el código y nos olvidamos de cambiar el comentario.

La idea, por ejemplo, es que si tenemos lo siguiente

// muestra una tabla con todos los usuarios
visualizaTabla()

deberíamos cambiar el nombre del método por este otro

// Comentario inútil: muestra una tabla con todos los usuarios
muestraTablaDeTodosLosUsuarios();

Así el comentario puesto es totalmente inútil y no es necesario.

Según se comenta en el artículo, es buena idea rehacer el código, haciendo que los nombres de los métodos se parezcan lo más posible a los comentarios que hemos puesto previamente, para de esta forma evitar poner comentarios y que el código se pueda leer fácilmente y entenderse mejor.

En el artículo sólo excusa poner comentarios cuando todo esto falla. Pone cuatro ejemplos concretos en los que sí se pueden poner comentarios:
  • Un comentario al principio de cada clase para explicar para qué sirve esa clase en el sistema
  • Explicar limitaciones del código o cosas que se presuponen al hacerlo. En general, cosas que en el código no están reflejadas.
  • Advertencias sobre el código, del estilo de que el código necesita mejorarse en tal punto o que no es lo suficientemente robusto, etc, etc.
  • Cuando se usen algoritmos conocidos, indicar dónde puede encontrarse dicho algoritmo, vaya, lo que se conoce como bibliografía. En qué libro o página de internet está explicado dicho algoritmo.
La verdad es que es curioso y va en contra de lo que todos conocemos como buenas costumbres de programación, pero no deja de tener su punto de razón. En algunas ocasiones me he visto poniendo por costumbre comentarios que básicamente son el nombre del método pero separando las palabras.

10 abril 2006

MAGIX Video DeLuxe 2006

He estado probando el programa MAGIX Video DeLuxe 2006.

Es un programita que sirve para grabar en DVD una sesión de diapositivas para ver en la tele, hacer tus propias películas de video, etc, etc.

Después de mis problemas con el nero, este programa me ha parecido una maravilla. En poco tiempo y sin leer manuales he conseguido hacer la sesión de diapositivas que quería. Le he ido añadiendo las fotos que he querido, sin que se me quedara colgado como el otro. Y los más importante, al final incluso ha grabado el DVD, yo creo que incluso más rápido que el Nero (si es que este último hubiera sido capaz de grabar algo).

Permite además hacer películas (que no he probado) y se puede grabar en varios formatos además de DVD: Video CD, Super Video CD, etc.

La interface me resulta un poco compliada, quizás por que no he leido el manual y tiene muchísimas opciones. De todas formas en un momento no sé qué toque, que se me cambio la forma de la presentación de ver sólo la pista de fotos a ver quince pistas distintas, vacías todas salvo la de fotos y la de sonido. Fui incapaz de quitarlas y dejarlo como lo tenía antes.

Eso sí, el programita vale 49 € comprándolo por internet.

08 abril 2006

WordPress

Por aquello de jugar un poco, he instaldo WordPress para ver qué pinta tiene. WordPress es un conjunto de páginas php que una vez instaladas en nuestro servidor, junto con mysql, permiten tener un blog. En ese blog, además de escribir, se pueden dar de alta usuarios y demás.

El programita no me acaba de convencer. Tiene una pega gorda. Cuando te das de alta de usuario, se inventa la clave automáticamente. En el caso del administrador al principio, te la da para que la guardes. En el caso de otros usuarios que se dan de alta ellos solos, se la envía por correo. Ahí está la pega gorda. En la instalación que yo he hecho, no me ha preguntado nada sobre el servidor de correo. Quizás haya que configurarlo en algún sitio que no he visto. El caso es que me ha creado el usuario de prueba y ha dado un fallo al enviarme la clave por correo. Resultado: Tengo un usuario con una clave que inventada que no sé.

Una cosa buena que tiene comparando con phpMyAdmin, es que al configurarlo no hay que andar como en el último, que hay que crear un directorio a mano, luego hay que copiar un fichero en un sitio, etc. En WordPress la parte de configuración ha sido inmediata.

Seguiré investigando un poco con él ya es es bastante conocido, pero de momento no sé si me convece.

06 abril 2006

Albums de fotos

Tenía desde hace mucho tiempo una pequeña página web con las fotos de mis hijas. Esta página está destinada a mis padres, mis suegros, familia y demás.

Al comprar el dominio y el hosting con hostito, vi la posibilidad de hacer un subdominio protegido de www.chuidiang.com. En este dominio podría poner esa página de fotos, de forma que sólo tiene acceso la familia.

Una vez hecho, decidí mirar los programas preinstalados que me da hostito para poner fotos. En concreto, ofrece tres: "4Images gallery", "Coppermine Photo Gallery" y "Gallery", ordenados del que menos espacio en disco ocupa al que más.

Instalé los dos primeros, pero no me convencieron. No es que los programas estuvieran mal, es simplemente que me parecieron demasiado complejos de usar para gente que no está acostumbrada a la informática: permite registrarse como usuario, poner comentarios, los links para ver las siguientes fotos están un poco escondidos (bastante abajo en la página y no visibles hasta que se da al scroll), etc.

Puesto que webshots permite poner álbums y verlos como pase de diapositivas, hice ahí mis experimentos. Permite hacer albums privados que sólo pueden ver las pesonas a las que invvitas. Sólo tiene una pega, la cuenta gratuita tiene limitado el número de fotos que se puede subir a algo así como 240 fotos.

Luego probé flickr, pero también tiene otra pega. Si invitas a alguien a ver las fotos (lo normal que haría con mi familia), no tiene más remedio que entrar con un usuario y password. Esto obliga a mi familia a darse de alta. Ya empezamos con procesos que dan pereza). Además, el proceso he visto que no es sencillo, porque se empeñan en asociar la cuenta con una de yahoo y al final no hay manera de evitar registrarse en dos sitios.

Finalmente tengo las fotos en yahoo photos. Es ilimitado y no hay necesidad de darse de alta para ver las fotos. Las fotos públicas están en http://es.pg.photos.yahoo.com/ph/javier_abellan/my_photos

05 abril 2006

Estadísticas Urchin de Google

No recuerdo cuánto tiempo hace, pero descubrí que google tenía unas estadísticas para páginas web, estilo las que comentaba en otro post.

Puesto que las cosass que hacen google de momento me inspira confianza y en general son buenas, decidí intentar darme de alta. Sorpresa, no se puede uno dar de alta si no tiene invitación. Me apunte a la lista de espera para que me enviaran la invitación cuando tuvieran a bien.

Esta mañana la recibí, así que me abrí la cuenta, me lie a pegar códigos de javascript en mis páginas y a ver las estadísticas.

Por un lado, tiene tres perfiles de estadísticas y podemos alternar entre ellos. Podemos ver las estadísticas como webmasters, en el que se nos da principalmente información sobre los navegadores, resoluciones, flash y demás de los visitantes. Es decir, la información necesaria para optimizar nuestra página para que se vea bien en los navegadores de la mayoría de los visitantes.

Podemos también ver las estadísticas como responsables de "marketing". Ahí vemos principalmente de dónde provienen las visitas, si tenemos anuncios de enlace a nuestra página lo efectivos que son, posición en los buscadores, de qué paises vienen las visitas, etc, etc.

Finalmente, podemos verlas como "jefes". Ahí simplemente vemos un vistazo general y cuanto dinero ha generado nuestra página en sus ventas.

Me ha llamado especialmente la atención que las estadísticas están muy pensadas para páginas de negocios, en las que se realizan ventas. Es posible decir la secuencia de páginas que debe seguir un cliente para comprar algo. Por ejemplo, empieza en la página del catálogo del productos para ir añadiéndolos al carrito de la compra, pasa a la página del carrito para ver lo que ha comprado y el total a pagar, luego a la página en que se le pide el número de tarjeta, etc, etc, hasta que le da al botón de "comprar y pagar". Bien, las estadísticas son capaces de alguna forma de decir cuánto obtenemos en la compra y de seguir toda la secuencia de páginas, de forma que si un posible comprador se echa atrás a mitad de camino, sabremos en qué página exactamente decidió dejarlo.

Como curiosidad, hay también un gráfico del mundo en el que se señala exactamente y de forma automática (con ciudad y todo) los visitantes.

En fin, he puesto el dichoso script en todas las páginas y a ver en un par de días que estadísticas salen y si me sirven para algo.

04 abril 2006

phpMyAdmin

Sólo por jugar me he instalado phpMyAdmin, un montón de páginas php que sirven para administrar una base de datos MySQL.

El tema ha ido bien y es bastante sencillo. Basta descargarse el zip correspondiente y desempaquetarlo en algún sitio de tu web. Con eso ya está casi todo.

Sólo queda configurarlo. Desde el navegador, al arrancar el index.php, se obtiene un error porque no está configurado y un link al script de configuración. Pinchando en ese script sale una pantalla con muchos botones. Sólo hay que pinchar en el de añadir un nuevo servidor de base de datos.

Se introducen los datos correspondientes y ahí es donde empecé a tener las pegas (si es que se pueden llamar pegas). Entre todos los botones hay escondido un botón de "salvar" lo que se acaba de hacer. Como está escondido entre otro montón de botones, pasa desapercibido. Tuve que meter la configuración varias veces, porque no veía el botón de "salvar", por lo que no era consciente de que hubiera que salvar nada. Al lado del "salvar" hay un "cargar" que también pasa desapercibido, para cargar otros ficheros de configuración.

Luego viene la siguiente pega. El fichero de configuración se guarda en un subdirectorio config que creo que hay que crear previamente a mano. Una vez salvado, te sale un texto diciendo más o menos:

"copia el fichero de configuracion del directorio config al directorio principal y borra luego el subdirectorio config con su contenido".

Bien, parece sencillo, pero no es nada claro. ¿Cual es el directorio principal?. Si mi sitio web empieza en un subdirectorio llamado web. Dentro de él cree un subdirectorio phpMyAdmin. Ahi desempaquete phpMyAdmin, que me creo a su vez un nuevo subdirectorio... Vaya, que tengo la siguiente estructura de directorios

web/phpMyAdmin/phpMyAdmin-2.8.0.2

¿Cual es el directorio principal?. Bueno, se me ocurren dos. Por un lado web (directorio principal de mi página) por otro phpMyAdmin-2.8.0.2 (directorio principal de phpMyAdmin). Pues ni el uno ni el otro, el fichero de configuración hay que ponerlo justo debajo de web, en paralelo con phpMyAdmin-2.8.0.2.

Así que venga a copiar y mover el dichoso fichero de sitio sin ningún resultado hasta que se me ocurrió ponerlo ahí.

Por lo demás todo estupendo y maravilloso.