Monthly Archives: febrero 2009

Mentalidad de Suficiencia

Citando a Kent Beck, de su libro Extreme Programming Explained:


En la Gente del Bosque y la Gente de la Montaña, el antropólogo Colin Turnbull dibuja el contraste de dos sociedades. En las montañas, los recursos eran escasos y la gente estaba siempre al borde de la hambruna. La cultura a la que evolucionaron era horrible. Las madres abandonaban a sus bebés, los entregaban a hordas de niños salvajes errantes en cuanto tenían opciones mínimas de sobrevivir. Violencia, brutalidad y traición estaban a la orden del día.

En cambio, en el bosque había plenitud de recursos. Una persona tenía solo que emplear media hora al día para cubrir sus necesidades diarias. La cultura del bosque era la imagen en el espejo de la cultura de la montaña. Los adultos compartían el cuidado de los niños, quienes eran nutridos y amados hasta que estaban preparados para cuidar de sí mismos. Si una persona, accidentalmente, mataba a otra (el crimen deliberado no se conocía), era exiliado, pero solo tenían que ir a otra parte del bosque y solo por unos meses, y la gente del bosque le llevaba comida.

Xtreme Programing es un experimento que responde a la pregunta, ¿Que pasaría si tuvieras suficiente tiempo? Ahora, no tienes tiempo extra, porque esto es un negocio, después de todo y estamos jugando a ganar. Pero si tuvieras suficiente tiempo, escribirías tests; podrías reestructurar el sistema cuando aprendieses algo; podrías hablar con muchos colegas programadores y con el cliente.

Tal mentalidad de suficiencia es inhumana, al contrario que la incesante pesadez de lo imposible, imponiendo fechas de entrega que desperdician el talento en la programación en el mundo de los negocios. La mentalidad de suficiencia es también buena para los negocios. Esta crea sus propias eficiencias, al igual que la mentalidad de escasez crea sus propios perjuicios.

Este texto explica el uso de Xtreme Programming y los beneficios que conlleva. Leyendo esta introducción, queda claro, tal y como intenta transmitir el autor, que lo que propone esta metodología, no es solo producir más rápido, sino mejor, en sentido de que los desarrolladores no terminen quemados, como suele suceder en la mayoría de los casos.

Este tipo de metodologías, contribuyen a seguir haciendo la programación divertida, incluso en el trabajo.

Agradecer a mi amigo Jonathan la ayuda en la traducción, que sin él el texto habría quedado en inglés o muy mal expresado :-P

REST: Representational State Transfer

Después de haber usado durante unos años sistemas RPC para la compartición de la información, XML-RPC, SOAP y Elm; llego a REST, un concepto que mencionó primero un compañero de trabajo, Juanse, y después vi en profundidad en un curso de Ruby on Rails que se organizó en la empresa en la que trabajo (gracias Dani por ese curso tan completo).

El sistema REST se basa en usar las entidades de datos como recursos. Por ejemplo, si tenemos usuarios y queremos hacer un sistema de gestión de usuarios, mediante una URL, podemos establecer el recurso como:

http://bosqueviejo.net/users

Este recurso será accedido por HTTP, mediante el método GET, lo cual retornará, en formato serializado (XML, JSON, YAML…) la información solicitada, el listado de usuarios. También podemos especificar, mediante la agregación de un identificador, en la URL, que solo queremos un usuario concreto:

http://bosqueviejo.net/users/admin

Como se puede apreciar, el sistema de localización, es claro y limpio.

Lo más interesante viene en las siguientes acciones. Para hacer una agregación a la lista de usuarios, es decir, para insertar o agregar un nuevo usuario, se puede emplear la misma URL, agregando los datos como cuerpo del mensaje HTTP y usando el método PUT.

Por ahora, no tenemos novedades con respecto al uso estándar de los sistemas web, ya que la petición de páginas se realiza mediante GET y el envío de formularios a través de POST. Sin embargo, para las acciones de inserción, por ejemplo, se emplea PUT, con la misma dinámica que POST, solo que reacciona como una actualización sobre los datos existentes, por lo que, la URL que se usará, deberá de ser de la segunda forma que se vió anteriormente.

Por último, para eliminar un dato, usando la URL concreta como en el caso de PUT y POST, pero empleando el método DELETE, se indicará al sistema REST que se desea eliminar el recurso solicitado.

Las ventajas que ofrece este sistema son claras. Al hacer uso de los métodos de HTTP, el servidor web puede ser usado a nivel de autenticación para restringir en modo todo o nada la modificación, eliminación y agregación de recursos a usuarios no autenticados o a ciertos usuarios, e incluso, en concordancia con la raíz de URL, limitar el acceso a ciertos recursos, con ciertos métodos, etc. Además, a nivel de log del sistema web, se tienen datos más concisos sobre el acceso y uso del sistema.

Los inconvenientes son que las acciones tienen que ser muy específicas y, para las cadenas de búsqueda, se hace necesario el uso de los parámetros de URL, lo cual hace que no quede tan claro y limpio el sistema.

Este sistema, bien usado, constituye un punto de partida muy válido para la comunicación con sistemas BPM y la instauración de sistemas de consulta tan potentes y configurables como SQL.

¿Informáticos en paro?, no en el software libre

Hay varios sitios en Internet, como Software Libre y Cooperación, El Blog de Juantomás García y el blog de La Pastilla Roja, en donde se habla de lo mismo. En el sector del software libre NO hay paro, sino que hay déficit.

Los que nos dedicamos a las tecnologías abiertas, libres e intentamos siempre poner algo estándar y abierto sobre otras soluciones propietarias, nos damos cuenta de que, aunque en temas de software libre se está haciendo mucho, hay mucha gente que estudia certificaciones y productos de compañías propietarias, cuya implementación en cualquier empresa, es más cara que el sueldo que se le pueda pagar, durante uno o dos años, al empleado que lo mantendrá.

El software libre, y las soluciones de software libre son distintas y proponen mejoras, tanto a nivel de empresa, como a nivel de trabajador:

  • A nivel de empresa:
    • los costes de los productos se abaratan considerablemente, adquirir lo mismo y que funcione adecuadamente al modelo de negocio que se quiere implementar cuesta menos dinero y esfuerzo que adquirir una solución propietaria.
    • las personas que pueden mantener los sistemas no tienen que haber estudiado, ni tener una certificación especial, solo tienen que conocer las herramientas con las que están desarrolladas las aplicaciones (normalmente C, Java, Python, PHP, Ruby…) e incluir las modificaciones o correcciones en caso de necesitarlas.
    • hay más posibilidad de entrenar de forma más económica a nuestro personal TI sobre las tecnologías a implantar, que el coste de un entrenamiento de una empresa propietaria, sobre un producto que no podemos modificar, ni ampliar de forma interna.
    • el mantenimiento puede hacerse mediante nuestro personal TI, consultoras externas de TI, nuevos empleados con perfil de programador, etc.
  • A nivel de trabajador:
    • nos da la posibilidad de acceder a la información para aprender las nuevas tecnologías de forma más fácil, incluso pudiendo acceder al propio código fuente.
    • tenemos el código fuente a disposición y las herramientas para poder construirlo.
    • hay déficit de profesionales que se dediquen a las tecnologías de software libre, y estas tecnologías abarcan todos los campos aplicables de la informática.

Por ello, si un informático dice que está en paro, es posible que deba plantearse el renovar su curriculo, así como sus conocimientos y apuntar a tecnologías libres y abieras, al software libre, que es lo que, hoy en día, aún, da trabajo.

¡Debian Lenny 5.0 ya es estable!

La liberación de etch se produjo el 8 de abril de 2007, ya hace 20 meses de eso, en informática es mucho tiempo, pero sin embargo, es un tiempo de liberación muy corto, teniendo en cuenta los lapsos a los que nos tenía acostumbrados Debian.

Desde entonces, en el mundo de GNU/Linux ha habido muchos cambios y, la distribución, se estaba quedando atrás en pro de otras más dinámicas como Ubuntu.

No obstante, en este fin de semana, el día de los enamorados, San Valentín, el Proyecto Debian nos ha brindado una nueva liberación de Debian, la correspondiente a la versión 5.0, con el nombre clave lenny.

Los avances:

  • Kernel de linux 2.6.26
  • Escritorios Gnome 2.22.2, Xfce 4.4.2, KDE 3.5.10, LXDE 0.3.2.1, GNUstep 7.3…
  • Base de Datos PostgreSQL 8.3.6, MySQL 5.0.51a
  • Lenguajes GCC 4.3, Python 2.5.2 y 2.4.6, Perl 5.10.0, PHP 5.2.6…
  • Servidor Apache 2.2.9, Samba 3.2.5…
  • Xen Hypervisor 3.2.1
  • OpenJDK 6b11

Ver: http://www.debian.org/News/2009/20090214

Documentos en bosqueviejo.org

Después de unos días desarrollando un sitio apto para incluir mis manuales y documentos más largos, puesto que considero que el blog está bien para vivencias y experiencias, descubrimientos y “recetas”, pero, para los manuales, tutoriales y documentos, en sí, de mayor calado, es mejor tener algo un poco más orientado a la gestión documental.

Tras probar muchos wikis, me he dado cuenta de que el entorno web está bien, pero es insuficiente, al menos para mi. No me gusta el hecho de tener que trabajar siempre en una ventana de navegador tirando de javascript, para tener comandos óptimos para edición, o tener que copiar y pegar de un editor más completo y complejo a la web.

Por lo que me decidí a emplear DocBook. Este sistema de escribir documentos es como SGML o HTML, con la diferencia de que la riqueza sintáctica para la confección de documentos, es más cercana a LaTeX que a los anteriores.

Todo lo he montado en bosqueviejo.org, mi sitio de gestión documental, en el que iré actualizando e introduciendo, espero que a buen ritmo, documentos, libros, tutoriales, manuales y todo lo que pueda generar.

En principio, y para probar la sintaxis básica, he eliminado los artículos de redes en gnu/linux y asterisk y zaptel, por el hecho de que eran artículos muy extensos e incómodos de leer en el blog. Ahora están en formato HTML, un poco mejor organizado, y en formato PDF.

Espero comentarios :-)

Ruby para programadores de PHP

Mi amigo Dani me indicó una página, ya que estamos más metidos en Ruby on Rails, que nos permitiría tener un sitio de referencia y comparación con las cosas, tal y como las hacíamos en PHP, cómo hacerlas ahora en Ruby on Rails.

Rails For PHP Developers
Derek DeVries, Mike Naberezny; Pragmatic Bookshelf 2008

La idea es muy buena, la página, en inglés, se llamada railsforphp. Los autores tienen también un libro publicado por la editorial Pragmatic Programmers, una editorial con un contenido bibliográfico que, en mi opinión, está alcanzando o superando en calidad a los contenidos que suele presentar y presenta O’Reilly.

En la página se ven secciones, si se busca alguna función específica de PHP o de Rails, se puede ver la forma de uso equivalente en PHP, y cómo se haría en Ruby on Rails. Da consejos y admite comentarios. Quitando que el diseño está muy trabajado, la presentación y secciones, son muy parecidas a la página de referencia de PHP.

Información y Formación

En los tiempos que vivimos, donde en todos los medios y las comidillas de cada calle y esquina la palabra crisis acecha como la mayor preocupación de esta época, el paro crece desmesuradamente y, curiosamente, la informática y el sector del software libre es el único que registra aumento de contratación.

Hay un déficit real, antes y después de la crisis, de profesionales de la informática. Se piden conocimientos específicos en ciertas áreas. En estos tiempos, la más demandada, el software libre. Las empresas quieren economizar y, encontrar gente que conozca y domine software libre es una ventaja, tanto competitiva por prestar más servicios, como económica, porque el precio suele ser muy bajo o nulo.

En esas lindes, la formación se convierte en pieza fundamental para que estas empresas encuentren profesionales cualificados que estén dispuestos a trabajar con estas tecnologías, y no con las que proponen otras empresas, cuyas licencias y soportes son más caros que el suelo que se paga al trabajador.

Invertir en formación es fundamental, tanto a nivel personal, para ampliar curriculum, como a nivel empresarial, puesto que si nuestros empleados van reciclando sus conocimientos, van avanzando, no se quedan estancados y se puede optar por tecnologías punteras, para ofrecer nuevos servicios que permitan a la empresa destacar sobre la competencia, así como mejorar los servicios y productos en los que se trabaja diariamente.

Imagina que la empresa en la que trabajas ha estado desarrollando software para clientes durante 20 años. La empresa nació desarrollando en Clipper, el lenguaje de moda de la época y, dado que los tiempos cambiaron, y los equipos informáticos más todavía, los PC pasaron de tener DOS a tener Windows y todo el software desarrollado se fue quedando obsoleto.

La ingeniería del software describe y contempla estos procesos de mantenimiento de software como del tipo adaptativo. El software debe de adaptarse a los nuevos equipos hardware y a los nuevos sistemas operativos, entornos gráficos, etc.

El lenguaje de moda comenzó a ser, según las revistas de aficionados, Visual Basic. Incluso en revistas profesionales comenzó a hablarse de este lenguaje, al mismo tiempo que salía publicidad de productos de Microsoft… es normal, las revistas no tienen porque ser del todo objetivas, pero hay que reconocer que Visual Basic, gracias a su fuerte impulso comercial, tuvo su éxito.

Puestos de nuevo en la empresa que programa en Clipper desde hace 20 años, ¿qué pasaría si se pensase en desarrollar en ese sistema totalmente nuevo para adaptarse a las ventanas de las que todo el mundo comienza a hablar?, sería un fracaso sino tienen alguna guía, algún tiempo de formación y aprendizaje.

En esta labor, hay mucha gente que se dedica, casi en exclusiva, al estudio de las nuevas tecnologías. Estas suelen ser, casi siempre, consultoras y, estás especializadas en ciertos entornos y tecnologías. Como es lógico, si a una consultora dedicada a .NET de la actualidad le pides información para Java, te van a intentar convencer de que es mejor .NET, es su negocio.

Al final, llegamos al punto en que, la formación es importante, tener un formador es una vía rápida de conseguir producir en un tiempo muy corto con una tecnología que nos dé una ventaja estratégica en nuestro sector… pero conocer las tecnologías es también muy importante. Hay que acudir a varios sitios, ver comparativas, aprender, en primera instancia, las ventajas de cada opción y, después, decidir. Para esto, lo mejor es tener un consultor propio en la empresa, alguien que entienda las nuevas tecnologías, que pueda informarse rápido de ellas y que pueda tomar la información necesaria que nos permita tomar la decisión de, ¿en qué debemos formarnos?

Business Process Management

Según se puede ver en la definición de la wikipedia BPM es una metodología empresarial cuyo objetivo es mejorar la eficiencia a través de la gestión sistemática de los procesos de negocio.

Cuando una empresa tiene una actividad comercial, por ejemplo, basada en un almacén, con varios sistemas que requieren acceder a la base de datos para su manipulación (administrativos, atención al cliente, empleados de almacén…), cada uno con una misión específica, se deben de centralizar esa actividad de alguna forma para no caer en el problema de repetirnos a nosotros mismos (incumplir DRY) codificando una y otra vez lo mismo en varios programas distintos.

Un sistema BPM muy arcaico y con posibilidad de error es el SGBD. Si se usa un sistema que pueda almacenar procedimientos y se detallan un conjunto de ellos para uso de los usuarios, propiamente dichos, se puede sistematizar bastante el sistema. Pero SQL no está del todo bien diseñado para mantener un nivel de seguridad, abstracción y acceso para toda una jerarquía de empleados. No sería imposible, no obstante, pero sí muy complicado de implantar y casi imposible de mantener. Además de la incidencia en el rendimiento que ello conllevaría.

BPM se suele implementar con el uso de SOA, las arquitecturas orientadas a servicios, las cuales le dan un soporte ideal mediante el uso de servicios web o sistemas RPC.

Por lo tanto, para tratar los datos, con acceso controlado, inteligencia de negocio y un desarrollo de esta capa de forma más fácil, en ciertos lenguajes se facilitan empleando sistemas como servicios web mediante protocolos como XML-RPC, SOAP o similares.

Centrar todos los procesos de negocio en un sistema de servidores con acceso RPC de algún tipo, con todas las funciones de negocio disponibles con acceso por máquinas que usan esa inteligencia y desarrollan una actividad de interfaz basada en usuarios u otros sistemas superiores.

A este respecto, C tiene implementaciones tan antiguas y aún usadas como Tuxedo; Java tiene sus EJB en servidores de aplicaciones tales como JBoss, Glassfish, Weblogic, …; Python tiene como servidor de aplicaciones a Zope; etc.

JavaScript y CSS no intruso en HTML

Cuando se pensaba en MVC, la capacidad para dividir las tareas obvias de tratamiento de datos, en lógica de negocio (el modelo), control de flujo de ejecución (el controlador) y la presentación de datos (la vista), aún quedaban en el aire muchos problemas en lo que respecta a las interaces, propiamente dichas, entre estas tres capas.

Centrándonos en la vista, existen miles de soluciones, para alejar al diseñador del código y al programador del diseño, pero aún así, cuando se habla de AJAX y desarrollos específicos… el programador tiene que tocar diseño y el diseñador preocuparse de lo que hará el código de servidor.

Este dolor de cabeza puede paliarse mediante el uso de códigos no intrusivos, lo que facilita la especificación de una interfaz basada en identificadores para el tratamiento del HTML.

El código no intrusivo de servidor lo trataré en otro artículo para que no resulte este muy extenso.

CSS no intrusivo

En principio, desde el punto de vista del navegador, todo es HTML. Pero, al igual que en los procesadores de texto, para facilitar la estructura de estos ficheros y no plagarlos de contenido referente a tipos de letra, colores, fondos… se crearon las hojas de estilos.

Las hojas de estilos en cascada (CSS) ayudan, junto con la especificación de identidades y clases, a dar estilos (colores, fuentes y forma de presentación en general) a las etiquetas escritas en HTML.

El CSS se pude incrustar en las etiquetas HTML mediante el uso de las etiquetas style, o incluso a través de los atributos style dentro de cada una de las etiquetas típicas de HMTL.

La mejor forma de hacer que no sea intrusivo, es colocar esos estilos en un fichero separado, y agregarlo mediante el uso de la etiqueta link en la sección head.

JavaScript no intrusivo

El código JavaScript es algo que se ha ido haciendo cada vez más con el HTML. En principio, se usaba la etiqueta script dentro de la sección head para agruptar todas las funciones de javascript, a las que se iban llamando desde etiquetas como onclick, onmouseover, onchange…, es decir, las etiquetas de eventos de HTML, que se destinan para JavaScript.

Después su uso se fue masificando y mezclando cada vez más con el HTML, haciendo que la etiqueta script, en muchas páginas, se encuentre repetida y segregada a lo largo de todo el texto HTML y, además de eso, en atributos como href, donde se indica explíticitamente que se ejecutará un código javascript.

Esto hizo que el código javascript se convirtiese en parte simbiótica de HTML y, en muchos desarrollos, que no se pudiese separar fácilmente.

Con ciertas técnicas, como las usadas en CSS, la separación de JavaScript se puede llevar a cabo sin problemas, pero requiere de ciertas pautas y costumbres a la hora de realizar el HTML:

  • Asignar ID a las etiquetas con las que se vaya a trabajar dinámicamente.
  • Asignar una clase a todo tipo de etiquetas que se usen para un fin similar.
  • Intentar no realizar anidamientos muy profundos.
  • En caso de tenerlos, intentar diferenciar los niveles de profundidad con IDs claros.
  • No abusar de tablas.
  • Tener especial cuidado con las etiquetas div, sobre todo por su uso con varios navegadores.

Con esto, solo tener claro que, el fichero de tipo javascript que se asocie al HTML, debe tener un código lanzador, que se encargue de asociar las funciones javascript oportunas a los eventos y las modificaciones pertinentes.

Es importante también recordar que, para mejorar la depuración, es mejor generar cuanto menos código por javascript, mejor. Es decir, que si hay que modificar las propiedades de una tabla por dar la posibilidad de varios tipos de ordenación, hacer las funciones específicas para ese cambio en JavaScript, pero no caer en la tentación de pasar los datos a array de javascript para hacerlo todo desde ahí.

Conclusiones

Lo que se trata, en base, es llegar a lo que W3C considera que debería ser la web semántica, pero con el uso de HTML. Intentar organizar los datos con las etiquetas existentes, sin usar estilos de presentación, solo los datos, y agregar a esas etiquetas el estilo de presentación deseado, mediante CSS externo y el dinamismo de cliente que se requiera, mediante JS externo.

Las ventajas que agrega, es que el cambio de una presentación a otra, se puede hacer con tan solo variar el CSS, y agregar nuevas funcionalidades, es solo modificar el JS.

SQL Server vía ODBC en Debian Etch

Casi a punto de asistir a la liberación de lenny (la versión 5.0 de Debian), seguimos viendo que con etch, aún, tenemos lo suficiente para tirar perfectamente, y sin agregar paquetes de backport.

En este caso, voy a explicar como instalar y usar SQL Server vía ODBC desde cualquier aplicación en GNU/Linux, como pueden ser programas Java, Perl, PHP, Ruby…

En principio, vamos a tirar de apt-get para instalar algunos programas:

apt-get install tdsodbc unixodbc libct3 libltdl3 odbcinst1debian1

Lo siguiente es crear el fichero /etc/odbcinst.ini, que debe de contener lo siguiente:

[FreeTDS]
Description     = TDS driver (Sybase/MS SQL)
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
CPTimeout       =
CPReuse         =

Ahora, para cada base de datos a la que queramos conectarnos, habrá que agregar un bloque de este tipo en el fichero /etc/odbc.ini:

[contactos]
Driver      = FreeTDS
Server      = 192.168.1.5
Database    = contactos
TDS_Version = 8.0
Port        = 1433

El nombre de la conexión es el que se situa entre los corchetes, y el que se usará para referenciar a esa conexión.

Para comprobar, podemos ejecutar el comando isql con los siguientes parámetros:

isql contactos usuario clave

Con esto, desde interfaces como DBI (Perl y Ruby), podemos usar DSN del tipo DBI:ODBC:contactos para acceder a esta conexión, siempre pensando que el usuario y la clave debe de insertarse en el comando de conexión.