lunes, 28 de abril de 2008

“Software” insostenible

En la literatura sobre desarrollo de "software" se escribe a menudo sobre un concepto con reminiscencias biológicas: el ciclo de vida del software.

A grandes rasgos, el desarrollo del software sigue unas etapas: se planifica (etapas previas de tomas de requisitos y análisis), se desarrolla (programación e implantación), se mantiene (arreglo de posibles fallos durante el uso del mismo, labores administrativas programadas, ...), evoluciona (se agregan nuevas características si surge la necesidad) y, a veces, muere (se deja de utilizar el producto).

Lo habitual es que la etapa de mantenimiento sea la más larga, pero no debería ser la más costosa económicamente. Sin embargo, existes numerosos sistemas en lo que esto no es así.
¿Han trabajado alguna vez con el típico programa con muchos fallos pero que, sin embargo, se utiliza desde hace mucho tiempo y no hay planes para sustituirlo? ¿Les suena la situación cuando todo el conocimiento de "las tripas" de una aplicación se deposita en muy pocas personas (incluso en una sóla)? ¿Utilizan algún programa que sólo funciona en algunos entornos muy específicos con unas versiones muy concretas del sistema operativo y otras aplicaciones? ¿Se gasta su empresa un dineral en personal subcontratado para que este programa siga malfuncionando?

Todos estos son los síntomas del "software insostenible" (la nomenclatura es propia). Programas y aplicaciones que no han sido bien gestionados y se han escapado de las manos de los que los diseñaron, los programaron, los mantienen y de los que pagan todo esto, el cliente final.

Al final nos encontramos con un dinosaurio software, lento, grande y arcaico. Los usuarios lo odian porque nunca acaba de ir bien, los responsables de área lo odian porque se lleva muchos recursos presupuestarios, los desarrolladores lo odian porque es asqueroso trabajar con el código enmarañado y mil veces parcheado, ...

Lo peor en estos casos es que la solución más obvia, que es rehacer la chapuza, o al menos, dedicarle un buen tiempo para poner orden y concierto, sale muy caro (además, no hay garantía de que la nueva versión sea buena). Pero también sigue siendo muy caro el mantener la aplicación. Un buen dilema económico.

Algunas causas:

  • Mala planificación o diseño previo.
    Frecuentemente las tomas de requisitos son muy vagas o imprecisas. Esto conlleva hacer cambios importantes cuando el programa ya está en producción, con los riesgos que esto conlleva: prisas, código rápido y sucio, desintegración entre las distintas partes del programa, ...

  • Uso de una herramientas/lenguajes inadecuados y/o obsoletos.
    Algunas herramientas (lenguajes de programación, entornos de desarrollo, etc) son muy permisivas con las malas prácticas al desarrollar software. Dejan una libertad de actuación al desarrollador que puede ser perjudicial al no forzar una buena organización del trabajo y del código.

  • Mala organización del personal.
    Personal novato al que se le pone a trabajar sin una adecuada formación y supervisión en clientes finales, alta rotación del personal, jefes de proyecto/analistas sin vocación técnica que no revisan el código que se produce, ...

  • Clientes mal acostumbrados.
    Muchos clientes quieren las cosas para ya, y no siempre es posible hacer algo rápido y bien. Si una mejora requiere un estudio y análisis, así se le debe comunicar al cliente, y no ponerse a picar código como locos.


Podría seguir enumerando más errores, pero no merece la pena. ¿Existe alguna solución para este desaguisado?

Probablemente para los sistemas existentes sea difícil encontrarla, pero hay que aprender de los fallos:

  • Sres. contratantes: no fuerce a los profesionales que contrate. Si le dan unas estimaciones, respételas, no son gratuitas.
    Desconfíe de empresas de desarrollo o consultoras con mucha rotación de personal. Infórmese antes de cómo se trabaja en ellas. Los "obreros del software" somos también muy importantes, no sólo los encorbatados que van a presentar y vender el producto.

  • Sres. contratados: no sucumban a la tentación de dar plazos cortos, ni de presentar presupuestos muy bajos. Sean realistas.
    Cuiden y formen bien a sus "picateclas", pero supervisen su trabajo: no para sancionar, sino para mejorar. Hagan una buena ingeniería y planificación, no se "aten" en exceso a una tecnología.

miércoles, 23 de abril de 2008

“Marketing”, prisas al publicar y malas traducciones

Barrapunto es un sitio web muy conocido donde se discute y debate sobre noticias relacionadas con la tecnología y campos afines.

Esta mañana leía un titular (¿iPods de 500.000 gigas?) y en el texto se decía: "desarrollan un interruptor microscópico que modifica el tamaño de las moléculas", enlazando a la noticia original en inglés.

Como titulado en Químicas que soy, me sorprendió mucho esto de modificar el tamaño de las moléculas, así que leí el artículo original un poco por encima, encontrándome con el texto "they had developed a molecule-sized switch", que viene a ser algo como "han desarrollado un interruptor de tamaño molecular". Eso es otra cosa muy distinta.

Conclusiones:

  • El periodismo tecnológico a veces es un poco cutre y no se contrastan las noticias. Hace mucho tiempo que se está investigando con la posibilidad de utilizar las moléculas (orgánicas, como las proteínas) como soporte de información. No estoy al día de los avances en este campo, pero dudo que lo que han logrado estos investigadores sea tan definitivo como parece (por favor, corríjanme si no estoy en lo cierto).

  • Cuando se publica algo que no ha escrito uno mismo, al menos hay que leerse las fuentes. No pasa nada si se traduce algo mal, todos nos equivocamos, pero cuando el escrito pasa por varias manos el error no debería propagarse.

  • Finalmente: ¡qué bien lo han hecho los de Apple!. Realmente son unos genios del marketing. Dudo que esta noticia hubiese tenido la más mínima relevancia si no se hubiese mencionado en el artículo el cachivache de Apple.
    Da igual que este reproductor portátil tenga las limitaciones que tiene: es un "objeto de deseo" y su sóla mención en un texto parece que hace más atrayente su lectura.

lunes, 21 de abril de 2008

Cada uno a su bola

Escribíamos hace unas semanas sobre lo difícil que es para un diseñador de páginas web conseguir que el mismo diseño se vea igual de bien en todos los navegadores. Hoy ahondamos un poco más en la cuestión.

Para formatear y dar estilo a las páginas web actualmente se utiliza una tecnología llamada CSS (Cascading Style Sheets u Hojas de Estilo en Cascada).
La CSS permite que los elementos de una página web se vean de una forma u otra sin necesidad de tocar el contenido. Esto es una práctica muy aconsejable, puesto que conseguimos separar e independizar por un lado el texto o contenido de la página y por otro la presentación.

Hasta hace unos años, las páginas web se maquetaban y se les daba estilo con etiquetas HTML dentro del texto que no aportaban contenido, si no formato. Afortunadamente, casi nadie trabaja así actualmente.

El problema es que cada navegador interpreta un poco a su aire estas reglas CSS, con lo que surge el problema que comentábamos en la entrada anterior: los diseñadores tienen que saberse un montón de "trucos" para conseguir que la misma CSS sirva para todos los navegadores.

Existe una organización llamada "Web Standards Project" que promueve el uso de estándares y tecnologías compatibles en las páginas web. Se les conoce sobre todo porque han preparado una serie de pruebas para ver si un navegador es compatible e implementa correctamente las especificaciones de los distintos estándares (CSS, HTML, etc).
Esta prueba se llama "Acid Test" y tiene varias versiones, la que se supone que deberían pasar los navegadores actuales es la versión 2 (la versión 1 de la prueba la pasan los 5 navegadores más utilizados (Firerox, Explorer 6 y 7, Opera y Safari).

Vean la prueba Acid 2 en estos cinco navegadores. Lo que el navegador debería mostrar es una carita como ésta:

Test Acid2

Y así la muestran ...

Internet Explorer 6
acid2-ie6.png

Internet Explorer 7:
acid2-ie7.png

Mozilla Firefox:
acid2-ff.png

Opera:
acid2-opera.png

Safari:
acid2-safari.png

La prueba Acid tiene detractores, pero para el propósito de esta entrada nos vale: es sorprendente comprobar cómo los distintos navegadores interpretan las mismas reglas. También es sorprendente cómo los navegadores menos usados (Opera y Safari) son los que mejor implementan las tecnologías web.

Resumen: la próxima vez que Ud. visite una página web en la que se vea algo extraño o descolocado, verifique (si tiene tiempo y ganas, claro) cómo se ve la página con otro navegador, especialmente si usa alguna versión de Internet Explorer.

jueves, 17 de abril de 2008

Ordenadores parlanchines

Leíamos el otro día una noticia en la que nos contaban que un científico había conseguido sintetizar el sonido de cierto fonema pronunciado por un neandertal.
Realmente es muy sencillo sintetizar los sonidos del habla con un ordenador (especialmente las vocales). El parámetro clave en la síntesis de los sonidos vocales son los formantes (el artículo de la Wikipedia lo explica muy bien).



Lo interesante de la investigación de este antropólogo (Robert McCarth) es que sabemos las frecuencias de los formantes de los humanos actuales porque conocemos la anatomía de nuestro tracto vocal, pero no las de un neandertal, y esto ha sido lo que este investigador ha "calculado".Créditos: el programa que se aprecia en la captura de vídeo es un programa de ejemplo que proporcionan los autores de Snack, una "librería" para desarrollar programas de tratamiento de sonido.

viernes, 11 de abril de 2008

El maldito botón “Limpiar formulario”

Me contaban el otro día una anécdota nada divertida. Cierta persona tenía que rellenar un formulario con un montón de campos para una administración pública, había que especificar hasta 80 centros de trabajo, más los datos comunes, etc. En total, unos 100 campos.

Al pie del formulario había dos botones: "Validar y enviar" y "Limpiar". La persona que me contó este caso, no muy ducha en cuestiones informáticas, interpretó que "Limpiar" se refería a una especie de corrector ortográfico o algo así, así que lo pulsó.

Mágicamente, el formulario se borró por completo, tirando a la basura más de una hora de trabajo de esta persona. Para echarse a llorar.

Y yo añado: y para matar al diseñador o programador de ese formulario.

  1. Los botones de un formulario pueden rotularse. ¿No estaría más clara la función de ese botón si estuviese rotulado como "Borrar todo" o algo así?

  2. Regla de oro cuando se diseña un interfaz de usuario: si una acción es potencialmente destructiva, pide al usuario confirmación antes de proceder a ejecutarla.

  3. Opinión más personal: ¿para qué se necesita un botón de "limpiar" en un formulario? Sinceramente, no le veo ninguna utilidad.

jueves, 10 de abril de 2008

Escritorios con efectos “3D”: ¿pura cosmética o son útiles?

Últimamente se han popularizado los efectos "3D" en los escritorios. Windows Vista los incorpora, Mac OSX también, así como Linux gracias al proyecto Compiz. Acostumbrados al escritorio "plano" de toda la vida, la verdad es que es bastante impactante esta tecnología.



(Ver vídeo a pantalla completa)

Pero la pregunta es ¿realmente sirve para algo aparte de "fardar"? ¿pueden mejorar o facilitar la interacción del usuario con el ordenador?

Mi valoración, muy personal, tras varios meses de usar un equipo Linux bastantes horas al día, con estos efectos activados, es que son muy útiles, pero no imprescindibles. A continuación enumero algunos de los efectos más útiles (para mí):

  • Mostrar un "resumen" de todas las ventanas activas en el escritorio.

  • Mostrar miniaturas de todos los escritorios.

  • Cambio entre aplicaciones con previsualización.


Los demás efectos son, para mi gusto, más cosméticos que otra cosa (lo del cubo giratorio, las animaciones al mostrar el escritorio, las ventanas "elásticas", etc.)
Son animaciones que embellecen acciones típicas de toda la vida (cambiar de un escritorio a otro, minimizar todas las ventanas activas para mostrar el escritorio, pasar una ventana de un escritorio a otro, etc.)

Escritorio “3D”: ¿pura cosmética o mejora?

Últimamente se han popularizado los efectos "3D" en los escritorios. Windows Vista los incorpora, Mac OSX también, así como Linux gracias al proyecto Compiz. Acostumbrados al escritorio "plano" de toda la vida, la verdad es que es bastante impactante esta tecnología.

[youtube Pmq_EhU6XPE nolink]

Pero la pregunta es ¿realmente sirve para algo aparte de "fardar"? ¿pueden mejorar o facilitar la interacción del usuario con el ordenador?

Mi valoración, muy personal, tras varios meses de usar un equipo Linux bastantes horas al día, con estos efectos activados, es que son muy útiles, pero no imprescindibles. A continuación enumero algunos de los efectos más útiles (para mí):

  • Mostrar todas las ventanas activas en el escritorio (en el vídeo anterior, segs. 1 al 12).

  • Mostrar miniaturas de todos los escritorios (segs. 29 al 33).

  • Cambio entre aplicaciones con previsualización (1:11 al 1:14)


Los demás efectos son, para mi gusto, más cosméticos que otra cosa (lo del cubo giratorio, las animaciones al mostrar el escritorio, las ventanas "gelatinosas", etc.)
Son animaciones que embellecen acciones típicas de toda la vida (cambiar de un escritorio a otro, minimizar todas las ventanas activas para mostrar el escritorio, pasar una ventana de un escritorio a otro, etc.)

martes, 8 de abril de 2008

30 años de máquinas “de marcianitos”

325px-space_invaders_cabinet_at_lyme_regis.jpgLeo en Barrapunto que este año es el 30 aniversario del juego "Space Invaders". No recuerdo cuándo llegaron las primeras "máquinas de marcianos" a España, pero sí mi primera partida a mis diez añitos más o menos: no pasé de la primera pantalla ;-)

Lo más sorprendente de estas máquinas era los pocos recursos que tenían. La máquina usaba una CPU Intel 8080 a una frecuencia de 2 MHz.

Una anécdota curiosa sobre la programación de este juego es la velocidad creciente con la que se movían los alienígenas según se iban "matando". No era la intención de los programadores conseguir este efecto, pero salió así porque según iban quedando menos elementos (marcianitos) que mover, el refresco de la pantalla se podía hacer con mayor rapidez. Al final lo dejaron así, le daba más interés al juego.

La verdad es que somos muchos/as los/as nostálgicos/as de los juegos "arcade" y hoy en día se han creado un montón de versiones de los mismos para las videoconsolas, ordenadores, PDAs y más cachivaches.

Mis favoritos eran el Tetris y 1943 ¿Y los suyos?

Patrones de diseño para torpes - 3ª parte

El patrón "Singleton"


Uno de los patrones de diseño más conocidos es el patrón "Singleton". Con este patrón se garantiza que sólo hay una instancia activa de una determinada clase.

Supongamos que tenemos una base de datos y queremos mantener una única conexión activa. Otro caso puede ser una clase que se dedique a grabar registros o trazas en un fichero. Imaginemos un objeto que descarga ficheros por FTP.

En todos estos casos puede ser conveniente tener un único objeto que realice el trabajo y garantizar que no hay varias instancias, por ejemplo, para no saturar una base de datos con conexiones, o no tener accesos simultáneos al mismo fichero, etc.

En la documentación oficial de PHP se muestra un ejemplo de este patrón para este lenguaje.

Otros patrones de diseño


Por motivos profesionales, últimamente casi programo exclusivamente con PHP. En developerWorks hay un artículo muy interesante donde amplían otro artículo anterior en el que presentaban cinco patrones básicos.

Explican y ponen ejemplos en PHP para los patrones "Adapter", "Iterator", "Decorator", "Delegate" y "State". Es una lectura obligatoria para cualquier desarrollador de PHP.