Apr 30

Pequeño éxito … ¡Y más trabajo!

Como comenté hace unos días, terminé mi pequeña aplicación en python que permite recoger de la gente los tiempos que han dedicado a cada uno de los proyectos y luego genera automáticamente un Excel para entregar al encargado de guardar todo esto oportunamente.

Pues bien, esa aplicación tonta ahorra a mi jefa un trabajo de un par de días de andar preguntando a cada uno a qué se ha dedicado y generar el excel a mano, así que le ha encantado. Tanto, que ha empezado a comentárselo a los demás jefes con el mismo problema y también les ha encantado. ¡¡ Todos quieren !!.

Y claro, cada uno quiere mejoras, añadidos y cosas variadas. Lo que era una aplicación cutre, que básicamente es un script capaz de admitir los datos de la gente desde el navegador y generar un excel, tiene pinta de que se va a convertir con el tiempo en una señora aplicación.

Los jefes que tienen gente, quieren usarla, así que en principio les vale tal cual. La única pega es que cada uno luego querrá el excel de su gente en concreto y no un excel general con todos. Eso me hará meter una nueva columna en la tabla "gente", para indicar quién es su jefe. Y me obligará en la parte de obtener resultados a poner un pequeño combobox que diga "elige al jefe cuya gente quieres convertir en excel".

Por otra parte, están los jefes responsables de los proyectos, con poca gente a su cargo, pero si con un proyecto con muchas contraseñas y muchos dineros. Para ellos el excel es lo de menos, pero lo que si están pidiendo es que quieren una forma de ver cuánta gente carga a su proyecto e incluso un histórico, para saber en cada una de las contraseñas del proyecto, cuánto llevan gastado. Tendré que poner una nueva consulta en la que seleccionando un proyecto salga un listado de toda la gente que se ha dedicado a él.

En fin, tiene pinta de que va a ir creciendo. Lo que generaba un excel con unas veintitantas personas dedicadas a unos siete u otro proyectos, van a ser ahora cerca de sesenta personas dedicadas a una veintena de proyectos. Lo que era una consulta simple, se va a convertir en un par de consultas con cláusula where pedida desde la web.

Y hablando de pequeños éxitos por tareas hechas de motu propio. Hace ya un par de años se me ocurrió que una wiki podía ser buena idea y la instalé. Dentro del departamento se va usando, como siempre, unos pocos más que otros muchos. Pero el caso es que se ha ido corriendo la voz por la empresa. El otro día tuve que mostrarle la wiki a uno de los jefazos (cosa que ha sido bastante comentada entre mis compañeros con su parte de coña ;-) ). Parece que quieren poner una a nivel de la empresa.

Todo esto me recuerda mucho al artículo que leí de Joel Spolsky "Logrando resultados cuande se es un peón". Cuando ves una necesidad que tus jefes no resuelven, una buena opción es perder un poco de tiempo en resolverla tú y si se hace bien, se acaba aceptando por todos. También me da un poco de pena comprobar que muchos de los problemas se resuelven o algunas cosas salen adelante porque algún "currito" tiene la iniciativa de resolver el problema o tirar del carro, sin que nadie se lo pida y sin que ningún jefe, teóricamente responsable del tema, tome cartas en el asunto y organice o apoye la iniciativa desde el principio (y, por supuesto, ponga los medios).

Apr 29

Equivalentes entre celebridades y lenguajes de programación

Pues eso, equivalentes entre celebridades y lenguajes de programación.

Apr 25

sitemap para SMF

Hace tiempo comenté en un post que el foro SMF es un desastre para que lo indexe google y, de hecho, no aparecía en google ninguno de los temas de mi foro de java. Intenté instalar el plugin seo4smf para tratar de arreglarlo, pero no conseguí que me funcionara. Al final, como comenté en aquel post, me hice un pequeño programa java que generara un fichero sitemap.xml para colgarlo en el foro.

Esa opción no era buena del todo. Conseguí que google indexara los temas del foro, pero tenía que actualizar el sitemap periódicamente a mano. Así que decidí hacerme un pequeño script sitemap.php que hiciera de sitemap para google de forma automática.

Este script, al llamarlo, consulta en la base de datos el campo id_topic de la tabla smf_topics. Es la única información que necesita para generar el fichero XML de sitemap. El script dice que devuelve un "Content-Type : application/xml" para que cuando google lo consulte piense que es un fichero XML, luego envía los tags XML correspondientes al sitemap.

Adjunto el código php por si a alguien le interesa

<?php
header(’Content-Type: application/xml’);
include (’Settings.php’);

print (’<?xml version="1.0" encoding="UTF-8"?>’);
print (’<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">’);

$link = mysql_connect ($db_server, $db_user, $db_passwd) or die ("<center>No se puede conectar con la base de datos\n</center>\n");
$query=’select id_topic from smf_topics’;
$result=mysql_db_query ($db_name, $query, $link);

while ($row = mysql_fetch_array ($result))
{
   print (’<url>’);
   print (’<loc>’);
   print (’http://foro.chuidiang.com/index.php?topic=’.$row[0]);
   print (’</loc>’);
   print (’</url>’);
}
mysql_free_result($result);
print (’</urlset>’);
?>

El include "Settings.php" únicamente incluye un fichero de configuración del foro, en el que están las variables con el nombre de la base de datos $db_name, el usuario $db_user y la password $db_passwd. Ojo, no le busqueis pegas, que las tiene. Yo no tengo ni idea de PHP.

 

Apr 23

Python: Una de cal y una de arena

Sé que "una de cal y una de arena" significa una cosa buena y una cosa mala. El problema es que nunca he sabido si la cal es la mala, la arena la buena o a la viceinversa.

Hace tiempo comenté que iba a hacer una pequeña aplicación web en python para pedirle a la gente que metiera cada mes el tiempo que dedica a cada uno de los proyectos, de forma que luego sacara en excel una tabla con dichos tiempos. Pues bien, ya está hecha (un poco de aquella manera) y funcionando. Así que tras esta mínima experiencia con python, ahí van un par de impresiones, una buena y otra mala, una de cal y otra de arena.

La cosa mala: Me da la impresión, al igual que casi todos los lenguajes de script en los que defines las cosas sobre la marcha, que python es un lenguaje muy difícil de mantener. Al no definirse claramente los tipos, cuando en una función o método recibes parámetros, no tienes ni idea de lo que recibes, salvo que lo pongas muy bien comentado. De hecho, en eclipse con el plugin pydev para programar en python, el autocompletar que te muestra los nombres de atributos y métodos de las clases, eclipse sólo te puede mostrar aquellos atributos y clases que hayas usado previamente en el código.

En java, por ejemplo, hay que declararlo todo, por lo que en cualquier momento sabes cada variable de qué tipo es y qué cosas tiene o a las que puedes llamar. No dependes (salvo para entenderlo mejor) de que el programador se haya acordado de comentar adecuadamente el código.

La cosa buena: Precisamente esta falta de tipado y el poder meter una manzana donde se espera un higo me da la impresión que hace de python un lenguaje muy flexible, y pongo un ejemplo. Puesto que mi aplicación es web, en casi todos los métodos/funciones que he hecho recibo de parámetro un Request Object, que el mismo servidor web se encarga de pasarme y con el que tengo acceso a los parámetros de la petición http, con el que puedo escribir los tag html que se verán en el navegador, etc. Pues bien, para mis pruebas sin servidor web desde eclipse, me hice una clase MiClase con un método write() similar al de Request Object, lo instancié y llamé a mis métodos a pelo pasándoles una instancia de MiClase. El código "tragó" con eso perfectamente, y la salida html salía por donde decía MiClase, es decir, por pantalla normal.

En otros lenguajes como java habría sido necesario heredar del objeto en cuestión y sobreescribir los métodos necesarios, quizás incluso declarar un constructor obligatorio con los parámetros raros que tuviera la clase padre. En java es aconsejable el uso de interfaces precisamente por este motivo, para poder cambiar una cosa por otra sin "cargar" con la clase original heredando de ella. En python no hacen falta interfaces. Basta con que la clase sustituta tenga los métodos que se usen de la clase original.

Todo esto me hace preguntarme si lo del desarrollo rápido de lenguajes como python se refiere a que no es necesario declarar los tipos (desde luego, eso ahorra tiempo, pero me parece un tiempo mínimo respecto a todo el proceso o el tiempo que puedes perder en depuración mientras decides si una variable es de un tipo u otro), o bien se debe a esta flexibilidad del lenguaje, que permite mezclar churras con merinas y todo funciona como debe.

Apr 21

Más spam en la Chuwiki

Llevo unos días recibiendo spam en la Chuwiki. Varias veces al día crean una página de nombre "Titulo incorrecto" con un montón de enlaces de spam y desde IPs distintas.

Llevo varios días borrando esa página. Al ver que el tema seguía, me decidí a bloquear las IPs de donde proviene ese spam, pero parece que no se les acaban. Seguramente están usando un proxy de IP dinámica, de esos que sirven para ocultar la IP real.

Mirando en la documentación de MediaWiki veo que existen cosas como Captchas estilo ConfirmEdit, pero no parece que sea de fácil instalación y sobre todo porque en los primeros párrafos empiezan a contar rollos de versiones que, por supuesto, yo no tengo.

Así que al final, encontré cómo hacer para que un usuario no registrado no pueda crear páginas, que básicamente consiste en editar el fichero LocalSettings.php y añadirle una línea como

$wgGroupPermissions[’*'][’create’] = false;

con lo que no permite a usuarios anónimos (debe ser el *) crear (por lo de create) páginas nuevas.

Es una pequeña limitación, pero supongo que a alguien que quiera crear una página y se vaya a poner a escribir algo en serio en ella, no le costará mucho más esfuerzo registrarse y darse de alta.

Apr 18

En software …

En software podemos hacer las cosas bien o como siempre.

Apr 15

Asquito de Windows Vista

Antes, con windows xp, tenía ciertos problemas con los puertos USB. De alguna forma, cuando conectas un determinado dispositivo a un puerto USB, digamos un pendrive, windows se acuerda, de forma que cuando otro día vuelves a conectar el mismo pendrive, intenta asignarle la misma letra. Sin embargo, quizás también intenta algo parecido con el puerto USB en sí. De esta forma, si conectas ahora al primer USB un disco duro, se le asigna a ese disco duro la misma letra que se había asignado al pendrive. Si ahora enchufas el pendrive en otro puerto USB, windows se lía y lo asigna a la misma letra. Los dos dispositivos, a la vez, con la misma letra.

Al menos antes, con windows xp, tenías la opción de irte al administrador de discos y cambiar la letra, de forma que volvías a ver ambos dispositivos.

Sin embargo, windows vista es peor en todo esto. Estas son algunas de las cosas que me han pasado con Windows Vista:

  • Conectar un disco duro externo y montarse, pero no verse la letra de unidad. Los programas que lo usan si lo ven y pueden usarlo, pero desde el explorador de archivos no se ve siquiera la letra de la unidad.
  • Desconectar un pendrive de forma correcta y todo va bien…. excepto la que la letra de la unidad no desaparece del explorador de archivos, de ninguna manera.
  • Cuando hay problemas de este estilo, el administrador de discos no me hace ni puñetero caso a lo de cambiar la letra de unidad.

Sí, sí, ya se que linux es mejor, pero sólo si sabes pelearte con cosas como ntfs-3g, y ponerlo para que "salte" según enchufas un pendrive/disco externo, y sabes donde tocar y sabes los ficheros de configuración correspondientes y sabes todo lo que tienes que saber y algo más.

Apr 14

Porque no soy de agobiarme…

No me agobio porque no soy de los que se agobia, pero debería agobiarme con la situación que hay.

Me acaban de poner a llevar un grupo de gente de software que colabora en muchos proyectos y me encuentro con:

  • Un montón de jefes de proyectos que quieren todo ya, para ayer.
  • Un montón de código recién hecho, sin probar y que no es lo suficientemente bueno como para aprovecharlo en otros proyectos sin unas grandes dosis de refactorización.
  • Un montón de jefes de proyectos que quieren todo ya, para ayer.
  • Otro montón de código hecho de hace tiempo, probado, pero que tiene muchos parches poco elegantes por encima y que se hace duro de usar para alguien que no lo conoce.
  • Un montón de jefes de proyectos que quieren todo ya, para ayer.
  • Un montón de gente nueva con los conocimientos justos de java y escasos de los sistemas que hacen.
  • Un montón de jefes de proyectos que quieren todo ya, para ayer
  • Otro montón de gente nueva en la software factory, de los que no sé siquiera si saben java (algunos me consta que sí lo saben), pero desde luego, no conocen nuestros sistemas NADA.
  • y finalmente, un montón de jefes de proyecto que quieren todo ya, para ayer.

Pues eso, que no me agobio porque no soy de agobiarme y como leí en cierto sitio, "si todo es importante, es que nada lo es".

Apr 11

Castigado por google

Hace unos días comenté que me habían crackeado el header.php de wordpress, metiendo un montón de enlaces ocultos de spam. Este tipo de cosas es una práctica castigada por google y, efectivamente, pocos días después, fuí castigado por google. En el gráfico de visitas se puede apreciar un descenso brusco de visitas, que se mantiene, pocos días depués de que me crakearan el blog.

Estadisticas blog chuidiang

Por cierto, el bajón de la segunda semana que se ve en el gráfico corresponde con semana santa. Se ve que los estudiantes no están muy por la labor de java….

Apr 10

Visita a la software factory

Hoy me ha tocado visita (la primera que hago) a la software factory. Madrugón para coger el tren (la software factory está en otra ciudad) y luego, toda la mañana, una charla en la que nos contaron como es su proceso de desarrollo de software según el CMMI-3.

Una frase que me llamó la atención. Tienen un departamento que se encarga de revisar en los proyectos que "se hace lo que han dicho que van a hacer". Cuando empieza un proyecto hacen un plan de desarrollo, en el que deciden qué métricas van a pasar, qué procesos van a seguir, que pruebas, etc, etc, etc. No importa cuales decidan (dentro de un orden), pero las que digan que van a hacer, deben hacerlas.

Y otra cosa que me ha resultado realmente interesante. Tiene, por supuesto, su departamento de calidad, encargado de ver que en el plan de desarrollo del proyecto se deciden unos procesos adecuados a la envergadura del proyecto. Pero, lo más interesante de todo, es que también tienen un grupo de gente, todos ellos técnicos con experiencia y gurús a los que consultar las cosas, totalmente independiente de los proyectos y que son los realmente encargados de verificar que en en el proyecto se siguen todas las pautas decididas al principio y de que el software está bien hecho. Esto, bien pensado, es totalmente lógico. Si a un proyecto se le exige una base de datos bien diseñada, coherencia en los modelos de datos, que la interface de usuario sea uniforme, que se van a usar determinados componentes comunes, etc, los más cualificados para verificar que eso se cumple es gente experta en esos temas. Incluso son los que aconsejan a los proyectos sobre cómo realizar las cosas para cumplir con todo y tener menos trabajo.

Creo que tenemos bastante que aprender de ellos.

En cuanto a la tarde, una visita a la gente que está desarrollando en los proyectos que controlo un poco, para resolver dudas, explicar un poco más lo que tienen que hacer, etc. Como siempre, hemos encargado el trabajo sin hacer una documentación previa medianamente decente.