Monthly Archives: November 2008

Por qué fallan los proyectos de sofware ?

Why software projects fail ?

Why software projects fail ?

Esta es una recopilación muy interesante de las principales razones por las cuales los proyectos de sofwtare fallan realizada por Codediesel.com.

  1. Requerimientos incompletos: mal recogidos o documentados.
  2. Mala comunicación: entre los integrantes del equipo o con el usuario (propietario del proyecto).
  3. Falta de recursos: malos desarrolladores o que no trabajan en equipo.
  4. Metas irreales: agendas sin sentido -> presión innecesaria -> desarrolladores estresados.
  5. Cambio de requerimientos: cambio demasiado frecuente, sin planeación, sentido o con mala documentación.
  6. Falta de planeación: mala planeación o documentación pobre e inconsistente.
  7. Prácticas de desarrollo descuidadas: sin control de versiones, pruebas, seguimiento de errores, …
  8. Información no oportuna: no se conoce a tiempo el estado actual de los proyectos y sus progresos.
  9. Uso de tecnología inmadura: con las que no se tiene suficiente experiencia o documentación.
  10. Presiones comerciales.

Lo obvio no siempre es lo mas entendido.  Cuáles podemos/deberíamos mejorar ?

Enlace: “why software projects fail” – CodeDiesel.

Tipos de gerencia en la Gerencia de Proyectos Informáticos

Tipos de gerencias

Tipos de gerencias

La función de las universidades

"It is not the task of the University to offer what society asks for, but to give what society needs.

[The things society asks for are generally understood, and you don't need a University for that; the university has to offer what no one else can provide.]"

Edsger W. Dijkstra.

Tomado de EWD-1305.

Enlace: IN MEMORIAN – EDSGER WYBE DIJKSTRA.

Cambio de locale y zona horaria en PHP

Una circunstancia muy común que se presenta en los servidores compartidos es que la zona horaria no corresponda con la del país o con la del usuario en general, esto repercute en el cálculo de la hora y la fecha actual.  Sucede algo similar con la información de localización.

Solucionar esto es muy sencillo, se deben incluír las siguientes instrucciones antes de realizar realizar cualquier invocación a estas instrucciones.

setlocale(LC_ALL, "es_CO");
putenv("TZ=America/Bogota");

El locale recibe información del idioma y el país.  Los códigos de los paises se pueden obtener del ISO639 y del ISO3166.

La variable de ambiente TZ recibe como parámetro la zona horaria.  El listado de zonas horarias puede consultarse en este enlace.

Conexión a MSSQL desde Aptana

Aptana's Database Manager

Aptana's Database Manager

Probando una nueva alternativa para tener un cliente a MSSQL desde Linux he decidido probar el cliente de bases de datos JDBC de Aptana Studio con buenos resultados.

Para su configuración se deben seguir estos pasos.

  1. Tener el driver JDBC de MSSQL en algún lugar del disco duro.
  2. Abrir la perspectiva de Database Explorer.  Para hacer esto seleccione los menúes Window > Open Perspective > Other … > Database Explorer.
  3. Haga click derecho sobre la rama Databases ubicada al lado izquierdo y seleccione la opción Add.
  4. Elija el nombre de la conexión y presione el botón Next.
  5. En los detalles de conexión presione el botón Add.
    1. Especifique un nombre para el controlador.
    2. Presione el botón Add File y seleccione el archivo del driver JDBC de MSSQL establecido anteriormente.
    3. En la información de conexión seleccione el driver encontrado.
    4. Presione el botón OK.
  6. Adecúe la cadena de conexión según sus necesidades: jdbc:sqlserver://<HOST>:1433;DatabaseName=<DBNAME>
  7. Especifique el nombre de usuario de conexión a la base de datos (User).
  8. Especifique la contraseña del usuario de conexión a la base de datos (Password).
  9. Presione el botón Test Connection para verificar la información de conexión.  Realice los ajustes necesarios en caso de presentarse problemas.
  10. Presione el botón Finish para terminar la configuración.

Bug de IE – radiobutton olvidadizos al ser movidos entre el DOM

Esta semana tuve que invertir (perder) mi tiempo intentando entender y solucionar un comportamiento extraño de IE que resultó ser un bug que aparentemente existe en todas las versiones de este navegador y que fue solucionado según dicen en la versión 8 beta2.

A grandes razgos el problema sucede cuando se tiene una lista de radiobuttons (no sucede con otros componentes incluyendo el text o los checkboxes) y esta es trasladada entre el árbol DOM de la página, como por ejemplo cuando se mueve el formulario de un div a otro.  Cuando esto sucede, a IE se le olvida mágicamente cual era el radio seleccionado.

Para no volver a perder el tiempo con este error de IE hice una pequeña implementación de un formulario que reproduce las condiciones del error y le indica al usuario si el navegador utilizado padece o no del bug.

Inicialmente se tiene un formulario dentro del div seccion1 y otro div seccion2 vacío.

<div id='seccion1'>
    <form id='formulario' action='#' onSubmit='return procesarEnvio()'>
        <input type='radio' id='uno'    name='grupo' value='1' />
        <label for="uno">Primera opción.</label><br />
        <input type='radio' id='dos'    name='grupo' value='2' />
        <label for="dos">Segunda opción.</label><br />
        <input type='radio' id='tres'   name='grupo' value='3' />
        <label for="tres">Tercera opción.</label><br />
        <input type='radio' id='cuatro' name='grupo' value='4' />
        <label for="cuatro">Cuarta opción.</label><br />
        <input type='radio' id='cinco'  name='grupo' value='5' />
        <label for="cinco">Quinta opción.</label><br />
        <br />
        <input type='submit' value='Enviar' />
    </form>
</div>
<div id='seccion2'>
</div>

Cuando el usuario envía el formulario se obtiene el radio seleccionado.

        var seleccion1 = obtSeleccionValor('seccion1', 'formulario', 'grupo');
        alert("[1] El 'radiobutton' seleccionado es: " + seleccion1);

No hay problemas.  Para reproducir las condiciones del bug, se mueve, para este ejemplo con la ayuda de Prototype, al formulario de la seccion1 a la seccion2.

        var formulario = $$('#seccion1 #formulario').first();
        $('seccion2').insert(formulario);

Se vuelve a consultar cual es el radio seleccionado.

        var seleccion2 = obtSeleccionValor('seccion2', 'formulario', 'grupo');
        alert("[2] El 'radiobutton' seleccionado es: " + seleccion2);

Si seleccion1 == seleccion2 significa que se está utilizando un buen navegador, de lo contrario significa que se está utilizando un navegador ampliamente conocido por desconocer estándares y ser la pesadilla de los desarrolladores.

Desafortunadamente no encontré una solución elegante para este problema diferente de almacenar temporalmente cual es el radio seleccionado antes de realizar su movimiento en el DOM y actualizar su valor posteriormente.

Esto es práctico de hacer con Prototype.

        var formulario = $$('#' + secc + ' #' + form).first();
        var seleccion = formulario.getInputs('radio', grp).find(
            function(re)
            {
                return re.checked;
            });

Esta sección de código obtiene los radios del formulario form que se encuentran contenidos en el div secc, que pertenecen al grupo grp y que se encuentran seleccionados.  seleccion será undefined si ninguno de los radios se encuentra actualmente seleccionado.

        var seleccion = formulario.getInputs('radio', grp);
        if(seleccion[sel] != undefined)
              seleccion[sel].checked = true;

Esta sección corrige el valor seleccionado (sel) entre los radios (seleccion).  Dependiendo de la información contenida en los value y referenciada por sel, podrá ser una mejor opción recorrer la seleccion y realizar las comparaciones necesarias para activar (checked) al radio adecuado.

Utilice la aplicación demostración para verificar la presencia del bug en su navegador y para revisar con mayor precisión su código fuente.

Enlace: BugIERadioMovDom 0.1.

Ingeniería de sistemas o Ciencias de la información

Entre mas cosas aprendo acerca de este mundo, con mayor certeza me doy cuenta de que la cantidad de conocimientos que tengo acerca del mundo es cada vez menor, para dejarme siempre en el conocido estado de saber muy poco para creer que soy experto en algo y de saber lo suficiente para entender que no se nada.

Este estado en lugar de ser algo caótico e intranquilizador es todo lo contrario.  Es sólo una manifestación que nos recuerda que la ciencia y el conocimiento humano son vastos mas no infinitos y que por suerte, aún hay mucho por aprender y por ende, un bonito motivo por el cual vivir.

Para aumentar la confusión ya no se si somos ingenieros de sistemas, de las ciencias de la computación o del tratamiento de la información.  Alguien tendrá una respuesta para la trillada pregunta de "qué venimos siendo" ?  En esta profesión creo que todavía nadie esta seguro.

Enlace: Ciencias de la Info. vs Ingenieria de Sistemas en Colombia.

Tamaño y localización del proyecto

Tamaño y localización del proyecto

Tamaño y localización del proyecto

Tomado del curso Formulación de Proyectos del SENA.

Enlace: Versión PDF.

Fases del ciclo de desarrollo de los proyectos

Fases del ciclo de desarrollo de los proyectos

Fases del ciclo de desarrollo de los proyectos

Tomado del curso Formulación de Proyectos del SENA.

Enlace: Versión PDF.

Clasificación de los proyectos

Clasificación de los proyectos

Clasificación de los proyectos

Las clasificaciones resaltadas (estrella) corresponden en las que estimo pueden enmarcarse los proyectos de desarrollo de software o de TIC en general.