Los tres canteros, en búsqueda de la excelencia.

Extraigo este texto de la web https://www.computerapia.com/, la verdad es que me ha parecido un ejemplo magní­fico de motivación:
Tres canteros al pie de una catedral, que están haciendo el mismo trabajo: tallar piedras.
Un hombre se acerca al primero y le dice “¿Qué haces?”
El cantero le dice: “Tallo piedras” y la hosquedad de su mirada parece que añade: “¿No lo está viendo?”
El segundo responde diciendo: “Me gano la vida” y con su gesto de resignación parece añadir: “Es duro, ¿sabe usted?”
El tercer cantero, al escuchar la pregunta, levanta la cabeza, mira a lo alto, le brillan los ojos y dice: “Estoy construyendo una catedral”
Caigamos en la cuenta de que la misma acción puede tener distintos niveles de significado, sin embargo, es el tercero quien indudablemente hace su trabajo buscando la excelencia, porque ve en el mismo una finalidad más elevada.

Gestor de Curriculums. Documento de Especificación de Requerimientos de Software

Hace ya bastante tiempo que debí­a haber avanzado algo con el Gestor de Curriculums. Prácticamente casi ni os acordaréis de que iba la cosa.
La idea es que me gustarí­a que la página principal de la web, www.miguelmatas.es mostrara mi curriculum actualizado. Para ello, pensé en crear una pequeña aplicación que me permitiera gestionar los datos de mi curriculum de forma dinámica. De ahí­ partió la idea de, añadiendo algo de literatura, ir mostrando aquí­ todos los pasos que voy a ir siguiendo para crear la aplicación.
Por ahora se han hecho ya 2 entrevistas (a clientes imaginarios de la aplicación), se ha creado un Documento de Visión (Gestor Curriculum – Documento de Vision v1), y, en este post, llega la primera versión del Documento de Especificación de Requerimientos de Software (Documento SRS).
El Documento SRS publicado es sólo una primera versión, ya que después de leerlo seguro que se pueden observar nuevas necesidades, casos de uso en nuestro caso, que aparecen tras ir transcribiendo los requerimientos que han salido de las dos entrevistas, y de alguna imaginaria conversación telefónica que ha aportado nuevos datos interesantes. Más adelante publicaré una segunda versión, donde se va a ahondar un poco más en otros casos uso, y, tal vez, realicemos una tercera entrevista, para acabar de cerrar lo que será nuestro Documento de Especificación de Requerimientos de Software.

Estimaciones

Sigo prácticamente a diario las noticias provenientes de https://www.navegapolis.net, y hoy no puedo hacer más que volver a referirme a una de sus noticias, en concreto cuando habla de estimaciones.
 Estimaciones:

  • Una de las dos causas principales que generan proyectos desbordados son las estimaciones mal realizadas.
  • Normalmente las estimaciones se realizan al comenzar el ciclo de vida. Tiene un cierto sentido, si no fuera porque de esta forma se hace la estimación antes de definir los requisitos, y por lo tanto antes de conocer el problema.
  • La estimación se produce por tanto en el momento erróneo.
  • La mayorí­a de las estimaciones las realiza personal de gestión o de marketing, no las personas que van a construir el software, o sus gestores.
  • La estimación la realizan las personas inadecuadas.
  • Una vez realizadas las estimaciones no se gestionan con pautas de gestión de proyectos (supervisión periódica, revisión por la ocurrencia de riesgos, modificaciones…)
  • Podéis encontrar el artí­culo completo en https://www.navegapolis.net/content/view/634/51/
    Un saludo.
    Miguel.

    Introduction to Capability Maturity Model Integration V.1.2

    Este es el tí­tulo del íºltimo Curso al que he podido asistir. El curso es requisito indispensable para poder participar en las auditorí­as para obtener el nivel de madurez 2 del modelo CMMI. Certificación que ofrece el ESI, el Instituto Europeo de Software.
    Curso de 21 horas en el Instituto Tecnológico de Aragón. Demasiado teórico a mi gusto, prácticamente 15 horas fueron teóricas. En parte es algo difí­cil de evitar, sobre todo porque partimos de la base de que sólo disponemos de 21 horas. La metodologí­a necesita su tiempo para poder ver cómo está organizada, y como intenta abordar las diferentes areas de proceso.
    La verdad es que por fin tuve la oportunidad de poder conocer in situ el funcionamiento del CMMI, y entender bastante mejor las crí­ticas que conocí­a sobre el modelo.
    Como rápido resumen sobre el modelo, digamos que su máxima es que la calidad de un producto depende directamente de la calidad de los procesos que se realizan para llevarlo a cabo. El problema de enfocar tanto la gestión a los procesos, es que almenos en la definición del modelo se está dejando de lado totalmente a las personas, y no nos da ningíºn tipo de guí­a al respecto.
    Veremos ahora qué pasa con la auditorí­a. Tenemos hasta octubre para prepararla.
    Saludos!
    Miguel.

    Resolución de Errores de Software.

    De todos es sabido que los errores en el software son el pan nuestro de cada dí­a. Alguna de las aplicaciones con las que nos toca trabajar dan más problemas que otras, y lo más normal es que si una aplicación se mantiene viva, con constantes actualizaciones y mejoras, los problemas vayan surgiendo a medida que se añaden nuevas funcionalidades. Por no hablar por supuesto de nuevas aplicaciones, recien salidas del horno, en las que tras una arquitectura moderna y robusta, puede esconderse una falta de testeo de algunos módulos o funcionalidades, o simplemente algunos descuidos de programación que aíºn no ha degenerado en error ya que para explotar necesitan verse inmersas bajo una serie de condicionantes que en entornos de desarrollo es difí­cil simular.
    Y estoy hablando de errores, de errores de programación, tí­picos mensajes de alerta, con nuesto querido sí­mbolo de admiración, o su triangulito… no de errores provenientes de una mala toma de requerimientos (modulos que no fallan pero no hacen lo que se supone que tení­an que hacer). Petadas, reventadas, bugs… ya sabéis de lo que hablo.
    Sobre prevención de errores hablaremos otro dí­a, pero… ¿cómo resolvemos los errores de software una vez se han producido?
    Si tenemos suerte y nuestro Proyecto cuenta con un Plan de Riesgos en el cual se ha contemplado el riesgo de errores en el software y se ha documentado cuales son los pasos que debemos seguir en caso de que se produzca un error… tendremos bastante ganado. Vamos a suponer que no es así­, para hacer el “más difí­cil todaví­a”.
    La posibilidad de resolver un error comienza cuando este se produce (obvio), lo que no es tan obvio es que debemos disponer de medios para detectar el error lo antes posible, cosa de la que a veces nos olvidamos. “Bueno, si falla ya llamarán”. “No ha llamado nadie en toda la mañana, eso es que va bien”. ¿Por qué debemos esperar a la llamada de un usuario para ponernos en marcha? ¿No serí­a mucho mejor que una vez se ha producido un error, la propia aplicación sea capaz de enviarnos una alarma al equipo de trabajo, y así­ poder ponernos a investigar prácticamente en el acto? Que bonito serí­a que antes de que llamara el usuario llamarle tíº. Hola buenas tardes señor Fulanito, hemos observado que ha surgido un error en la Aplicación durante el proceso de blablabla, le informamos que tenemos el error controlado, que no ha afectado a la transacción que estaba llevando a cabo, y que tenemos ya a una persona resolviendo la incidencia. O… que te llamara el usuario… Ah si, buenas tardes sr Menganito, somos conocedores del error que se le ha producido en la aplicación, se ha realizado un análisis del mismo, y visto que su nivel de importancia es medio, y no produce ningíºn bloqueo en la aplicación, hemos postpuesto la publicación del parche a la primera hora de mañana, para así­ juntarlo con otras mejoras que tení­amos pendientes.
    Qué diferencia eh. Y no es tan difí­cil conseguir que una aplicación mande un SMS o un E-Mail cuando se ha producido una excepción en la aplicación.
    Y para finalizar unas cuantas frases.
    “Los errores de software desprestigian a la empresa, desprestigian al producto, desprestigian al grupo de trabajo y desprestigian al programador. Además, cabrean.”
    “La confianza del usuario en un producto es inversamente proporcional al níºmero de errores generados por la aplicación, multiplicado por la importancia de los mismos (y añadirí­a también por aquí­ algo sobre la media de la distancia de tiempo entre errores)”.
    “Esta claro que no se puede tratar igual la gestión de errores de sistemas crí­ticos como el de una central nuclear o un cohete espacial, pero eso no quiere decir que nos tengamos que olvidar de la gestión de errores de un simple editor de texto. Siempre que lo queramos vender, claro.”
    Seguimos en la siguiente parte.
    Saludos.
    Miguel.

    El Jardí­n de Zen

    “Atrás quedaron las maquetaciones HTML con Tablas”. “No utilice Tablas para realizar sus diseños”. “Maquete con capas”.
    Estos son algunos de los slogans que se pueden leer en contra de las tablas HTML y en favor de la maquetación mediante capas. Entonces es cuando los que llevábamos de toda la vida maquetando con tablas nos tocó reciclarnos, porque estaba claro, era lo nuevo, era lo mejor.
    El problema de todo esto es el de siempre, una imagen vale más que mil palabras, y por mucho que leas artí­culos y manuales al respecto, si no tienes a alguien cerca que te abra los ojos… tardas demasiado en descubrir algo que si alguien te lo explicara con las palabras adecuadas sabrí­as valorar en toda su potencia en 5 minutos.
    ¿Alguien necesita una verdadera prueba que le demuestre que maquetar con capas es absolutamente más avanzado que hacerlo con tablas? ¿Algo que lo motive de verdad?
    Espero abrir vuestros ojos. A mi me resultó realmente impresionante.
     https://www.csszengarden.com/tr/espanol/
    Saludos.
    Miguel.

    Arquitectura Orientada a Servicios

    Arquitectura Orientada a Servicios, o lo que es lo mismo Service Oriented Architecture (SOA).
    Como siempre, tiro de Wikipedia para mostraros la definición “oficial” https://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios
     ¿Aplicaciones? Puf.
    Un ejemplo simple de la potencia que desprende esta arquitectura. Imaginaros una aplicación encargada de capturar las tomas de los contadores de agua de una comunidad. La aplicación consta de dos partes, una web, que emplean en una oficina central, y otra en una PDA, que utiliza el técnico que realiza la toma. En la aplicación web se encargan de hacer estadí­sticas, realizar los cobros… la aplicación del técnico se encarga de mostrarle las direcciones de las comunidades de vecinos a las que debe acudir… seleccionar el abonado y asignarle la toma del contador. Ambas aplicaciones tienen una capa de presentación bastante distina, una es web, y otra es una aplicación de escritorio para pda. Pero ambas necesitan en un momento dado obtener los datos de un abonado en concreto. ¿Realizamos la misma consulta para ambas aplicaciones? No, llamamos al mismo servicio web, que nos devolverá los mismos datos, y ya será la propia capa de presentación de cada aplicación la que se encargar de mostrarlo de la manera que deba.
    Añadidle a esto la transparencia que supone, las aplicaciones no tienen ni idea de cómo va el modelo y el controlador, sólo tienen la vista, les da igual cómo está programado, la vista recibe XML y punto.
    Saludos.
    Miguel.

    The Non-Designer's Design Book – Second Edition

    Por fin me llegó el íºltimo libro que pedí­. En este caso estoy hablando de “The Non-Designer’s Design Book” cuya autora es Robin Williams. Podéis encontrar información sobre ella en https://ratz.com/.
    El libro viene recomendado por Jesíºs Castañeda, Certificado por Sun Microsystems, el profesor del íºltimo curso al que asistí­, el cual contaba con amplia experiencia en Usabilidad. La verdad es que nos lo “vendió” bastante bien, y como considero que mi capacidad de diseñar no es precisamente algo que me diferencie, me decidí­ a comprarlo.
    Por ahora sólo le he echado una ojeada, pero he encontrado exáctamente lo que necesitaba. Una guí­a para gente como yo, que moviéndose en el mundo del desarrollo no le ha quedado más remedio que realizar diseño, sin tener formación académica sobre ello, y sobre todo, sin tener un especial don para el mismo.
    Si os interesa el libro, podéis adquirirlo en https://www.amazon.com, el ISBN es el 0-321-19385-7.
    Saludos a todos.

    Benditos TableAdapter

    Recuerdo la primera vez (y no tan primera), en la que empecé a trabajar con aplicaciones cliente-servidor, donde el cliente realizaba consultas a la base de datos. En concreto fue una aplicación en un entorno WAMP (Windows-Apache-MySQL-PHP). En aquel momento el problema de realizar consultas se realizaba de manera algo rudimentaria, vamos, la select a piñón en el código, mezclado además entre el propio diseño de la página, y poquito más. La cosa fue mejorando cuando a partir de alguna pequeña técnica y concatenando strings la cosa tomaba mejor forma. Eso sí­, el gran salto vino cuando conocí­ cómo resolver el problema a través de clases de manejo de SQL, las cuales te ayudaban a realizar selects, updates, inserts y deletes, abstrayéndote un poco de lo que es el SQL en sí­. Es más, realmente podí­as hacer una consulta en una base de datos sin tener ni idea de qué era el SQL.
    A medida que pasó el tiempo, y con algo más de experiencia, apareció la necesidad clara de relacionar las interacciones contra la base de datos directamente con cada uno de los objetos del modelo de negocio. Es decir, ya no sólo crear las consultas ayudado por una jerarquí­a de objetos, si no que dichas consultas tuvieran sólo sentido embebidas en las clases que te ayudaban a gestionar el negocio. Ejemplo simple: cuando tengo que realizar una select que me retorna todos los usuarios de mi aplicación, voy a utilizar métodos de mi propia clase de Usuarios que son los que van a tener incorporados por debajo las clases de interacción con la base de datos.
    Normalmente se puede hacer una relación 1 a 1 entre las tablas de base de datos maestras de una aplicación y las clases (hablando en términos de programación orientada a objetos). Qué bonito serí­a, pensaba yo, que cada vez que creo una tabla en mi base de datos, inmediatamente tuviera un objeto que me ayudara a manejarla. Poder acceder directamente a los campos, conocer su tamaño, su tipo, poder añadir métodos para realizar inserts, updates, selects… Es más, era algo que preparaba manualmente. Creaba la tabla, luego un objeto para manejarla, donde cada campo de la tabla era una propiedad de la clase, creaba métodos para realizar inserts, selects… Vamos, para mi una maravilla, era algo laborioso, pero a mi parecer bastante elegante.
    Qué bonito, seguí­a pensando yo, que llegue un momento que este se pudiera crear automáticamente. Y… entonces salió Visual Studio 2005 y los TableAdapter. Madre mia, alguien habí­a escuchado mis plegarias y habí­a hecho exactamente lo que necesitaba. La verdad es que hací­a ya tiempo que conocí­a la existencia de los TableAdapter, pero hasta hace poco no habí­a tenido la ocasión de trabajar directamente con ellos.
    Soy totalmente conocedor de que aíºn me queda bastante tiempo para dominarlos, pero por lo que conozco ahora, realmente me parecen una auténtica maravilla. Para quien desee conocerlos, dejo un link, https://msdn2.microsoft.com/es-es/library/bz9tthwx(VS.80).aspx
    Saludos a todos!

    A vueltas con las WCL (Windows Control Library) y los Controles de Usuario .NET

    Hola a todos,
    Qué bonito serí­a poder desarrollar en web con la misma facilidad que se hace con una aplicación de escritorio, ¿verdad? Pues si es ese el problema que os desespera, tal vez sean las WCL la solución a vuestro problema. Y digo tal vez porque el marco donde puede ser (a mi parecer) viable su uso, es bastante reducido, aunque en caso de que tus necesidades se ajusten a sus requerimientos y restricciones, sea la solución a parte de tus dolores de cabeza.
    Voy a ser algo Práctico, y en lugar de ponerme a explicar lo que es una WCL, voy a tirar de metodologí­a, en concreto con el término reusabilidad, y os voy a dejar un link con una explicación bastante buena al respecto… https://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/art94.asp
     Tal vez os suena la cosa un poco a ActiveX, y hablando de ActiveX puede que os venga a la cabeza “problemas de seguridad”. Las WCL usadas como controles embebidos en el navegador parece que quieren dejar de lado ese problema y me parece a mi que Microsoft ha tirado de forma bastante clara en ese sentido. Basta que abramos el Visual Studio 2005 e intentemos hacer un ActiveX en VB.NET o C#, para comprobar que es imposible. O lo hacemos en C++ o nada de nada. O eso, o tiramos de WCL.
    En cuanto a seguridad, efectivamente, se ha mejorado. Para poder ejecutar una WCL embebida en el navegador vamos a necesitar ajustar la configuración de nuestro .NET Framework para permitir ejecutar aplicaciones que provengan de una determinada dirección web. Estoy puede resultar hasta un engorro, pero es la parte que nos queda poner a nosotros para que todo esto funcione.
    ¿Y la viabilidad? Pues teniendo en cuenta las restricciones, juzguen ustedes mismos. Para poder ejecutar una WCL embebida en el navegador vamos a necesitar primeramente que el navegador sea Internet Explorer, y, además, por lo que parece deberá ser servida desde el servidor de aplicaciones de Microsoft, Internet Information Server (almenos por ahora no he podido demostrar lo contrario). Por supuesto, deberemos tener instalado el .NET Framework con el que se haya desarrollado la WCL instalado en nuestra máquina. Vamos, todo Microsoft. ¿No supone todo esto un problema para vosotros? Entonces, tal vez sí­ que sea esta la solución para vuestro problema 🙂
     ¡Ventajas! Una vez superadas las barreras de entrada, tenemos bastantes. Una de las que más me llama la atención que es la WCL que generemos podrá ser llamada desde una aplicación web, pero al mismo tiempo ser incluida en una aplicación de escritorio. Basta añadir la referencia a la dll que se genera en el proyecto y… voila. Por supuesto tenemos la posibilidad de utilizar todos los controles windows de una aplicación de escritorio, y que desde una aplicación web se nos hace realmente complicado o imposible ejecutarlos en la máquina cliente, por ejemplo: aplicaciones multi-hilos, acceso al sistema de archivos, recursos compartidos… ListViews, DataGrids, ImageList, Meníºs… Todo lo que podemos utilizar en una aplicación de escritorio.
    ¿Tiene sentido crear una aplicación web completa con esta solución? Tal vez no, pero puede ayudarnos a solventar problemas puntuales, de forma algo más cómoda, rápida y elegante. Por ejemplo, poder seleccionar fácilmente imágenes a transferir del equipo local para luego enviarlas al servidor remoto, controlar un escáner, una impresora,  tratar gráficos con GDI o imágenes en general.
     Con un poco de imaginación y algo de práctica… se pueden conseguir cosas bastante interesantes 🙂
    Saludos!