lunes, 14 de octubre de 2013

Policía francesa migra hacia GNU/Linux 37,000 PC de escritorio

GendBuntu

La Gendamerie Nationale , una agencia nacional francesa encargada de hacer cumplir la legislación vigente en ese país, migró 37,000 estaciones de trabajo desde MS Windows hacia una variante de GNU/Linux basada en Ubuntu y conocida como GendBuntu. El proceso tiene como meta la conversión total de sus 72,000 puestos para el próximo verano del año 2014.

GNU/Linux es sin dudas el sistema operativo ampliamente predominante en los servidores que corren los servicios más grandes y complejos que existen en la actualidad. Estamos hablando por ejemplo de Amazon, Google, Facebook, Twitter, por solo citar algunos ejemplos muy conocidos. Según el reporte confeccionado por Gartner en el tercer trimestre de 2013 Android (basado en Linux) ocupa una cuota de mercado superior al 70% de dispositivos. Sin embargo en las computadoras de escritorio la lucha por remplazar a Mac OS X (de Apple) y MS Windows no ha tenido resultados similares. La noticia de esta migración puede ser una señal de que la situación está cambiando.

La agencia afirma que el costo (i.e. cost of ownership) de los sistemas de código abierto basados en Ubuntu y GNU/Linux es apróximadamente 40% menor que el que conlleva el uso de las aplicaciones propietarias de Microsoft.

La transición ha comenzado por aplicaciones disponibles en ambas plataformas. El proceso comenzó en entre 2001 y 2004 cuando la agencia enfrentó el reto de controlar el acceso de sus usuarios a su red interna de datos. Con el fin de ahorrar el dinero de los contribuyentes se comenzó a remplazar paulatinamente MS Office por Open Office y el formato estándar ODF. La curva de aprendizaje no ha sido tan elevada y el cambio no fue abrupto. Un segundo paso fue dado en el año 2006 con la implantación de Firefox y Thunderbird. Solo después de un período de adiestramiento utilizando estas herramientas en Windows es que se remplazó en 2008 el sistema operativo de las primeras 5,000 estaciones de trabajo.

El nuevo avance hecho en este año y las expectativas para el próximo colocan a Francia como uno de los despliegues de GNU/Linux más extensos a nivel global. Muchos gobiernos (e.g. Brasil) avogan por el uso del software libre. Algunos como Venezuela, India y China mantienen sus propias distribuciones. Sin embargo la penetración de este sistema operativo en las infraestructuras de las entidades estatales no es para nada halagüeño. Por ejemplo en el Reino Unido el gobierno hizo público en el 2011 el compromiso de fomentar el uso del software de código abierto en preferencia ante las opciones privativas. Esto contrasta con los sondeos de la BBC que revelan que la mayor parte del presupuesto de IT se dedica a pagar instalaciones, servicios y licencias relacionados con aplicaciones privativas de fabricantes como Microsoft u Oracle. Las iniciativas de cambio están estancadas ya que muchos servicios críticos están completamente implementados sobre estas tecnologías proprietarias.

martes, 24 de septiembre de 2013

Apache™ BatchEE propuesto para Apache™ Incubator

Propuesta BatchEE

Recientemente se ha publicado la propuesta del proyecto Apache BatchEE para brindar soporte a la implementación de JBatch (JSR 352). Estamos hablando de una API para construir aplicaciones de procesamiento de tareas por lotes, generalmente en modo no interactivo. Esta es una de las novedades que incluirá Java 7. Los objetivos iniciales del proyecto consisten en continuar el desarrollo de la implementación inicial, pero además integrarla con la gran cantidad de frameworks para Java de la ASF. La propuesta es de vital importancia para incluir soporte para Java 7 en tecnologías que implementan los estándares J2SE y J2EE e.g. Apache™ Geronimo, TomEE. Otros proyectos relacionados son OpenWebBeans y OpenEJB, así como las soluciones de orquestación de aplicaciones empresariales como Camel.

Acerca de Apache™ Incubator

Es posible contabilizar más de 100 proyectos en el ecosistema de la Apache Software Foundation. Apache™ Incubator es el punto de partida en el camino a convertirse en un proyecto oficial de la fundación.

Suscribirse a este blog mediante RSS

miércoles, 18 de septiembre de 2013

Las murallas infranqueables de vim



En estos días he tratado de mejorar mis habilidades con vim porque, honestamente, no paso de ser un principiante. Lo digo basado en lo que pude aprender en este video grabado en una conferencia europea de Ruby On Rails. Hay varios mensajes claros. En general es un hecho que el desempeño de un programador aumenta muchísimo a medida que le resulta intuitivo el uso de los diferentes comandos de vi, especialmente si se construye un .vimrc que permita reducir el número de teclas utilizadas para realizar las acciones más comunes. Es por eso que no es una ciencia exacta. Algunas personas hacen ciertas cosas más frecuentemente que otras. Pero esto no basta, hay que coneguirse un buen teclado. Empiezo a pensar que los teclados que traen las computadoras y laptops frecuentemente no son apropiados para los programadores. Interesado en estos temas hice mis búsquedas y descubrí las respuestas de varios misterios.

Las teclas hjkl

Son disímeles las reacciones de las personas cuando conocen que en vi los movimientos del cursor se hacen con las teclas h (izquierda) , j (abajo), k (arriba), l (derecha). Algunos no se explican semejante barbaridad. Otros (casi siempre simpatizantes de Unix y/o GNU/Linux) inicialmente piensan que fue una decisión inteligente para disminuir el desplazamiento de las manos. Puede ser que haya algo de esto, quién sabe. En realidad el caso es que Bill Joy creó el editor de textos vi utilizando la terminal ADM-3A. Si observan la figura se podrán dar cuenta de que en ese (antiguo) aparato el desplazamiento se hacía con esas teclas. Más allá de que fuera una decisión inteligente o no, el comportamiento de vi fue algo natural (para la época). Después llegó vim y el resto es historia ... ;)

Teclas hjkl de ADM-3A

A continuación una foto de cuerpo entero de la terminal dónde se creó vi

Terminal ADM-3A de Lear Siegler

A continuación aparece el teclado completo. Fíjense en la posición de la tecla ESC y se darán cuenta de las razones por las cuales se utiliza para cambiar de modo.

Teclado completo ADM-3A

La huella de este terminal no parece limitarse a estos hechos. Si se presta atención a la tecla Home en la esquina superior derecha quizás comprendamos porqué es que la carpeta home de los usuarios de Unix (GNU , ...) es referenciada con el símbolo ~.

No son pocos los detalles interesantes relacionados con vi. Es un editor de texto que no deja de sorprenderme. A todos los interesados en conocer todos los secretos de vim les respondo parafraseando un poema de Nogueras

(...) vi tiene sus arcanos
vi tiene sus secretos
vi tiene sus «comandos infranqueables» (...)

martes, 17 de septiembre de 2013

Python utilizado en software para microscopio electrónico

Titan Themis S/TEM

Recientemente Enthought Inc. anunció el lanzamiento de una plataforma de software para los microscopios electrónicos de FEI, empresa líder en el campo de instrumentación para investigaciones en nano-tecnologías con gran impacto en la industria y el sector científico. Se ha materializado así la línea de productos de software Velox™ basada en la plataforma de aplicaciones científicas Enthought Canopy® y aplicada en el producto Titan Themis. Estamos en presencia de una infraestructura de desarrollo y despliegue rápido de aplicaciones basada en Python que ha sido implementada para la adquisición de datos, análisis en tiempo real, componentes de visualización y aplicaciones de flujos de trabajo optimizados para el sector al que van dirigidos estos productos.

¿Qué es Canopy?

Canopy es un framework de desarrollo robusta que ha ayudado a FEI a poner rápidamente en el mercado sus productos y aplicaciones Velox. La plataforma viene acompañada de un sistema de plugins, un entorno de desarrollo, herramientas de actualización y despliegue de paquetes de software, así como paquetes de herramientas especializadas en análisis de datos y soporte a investigaciones científicas. La popularidad y facilidad de uso del lenguaje Python le permite a FEI y sus clientes un nivel de personalización mediante scripts de Python muy útil para adaptarse a las características y condiciones presentes en los lugares específicos donde se utilice el equipamiento teniendo en cuenta los objetivos y necesidades puntuales de las investigaciones que se lleven a cabo. La productividad y eficiencia aumenta pues los especialistas se enfocan en temas específicos de su ámbito de negocios, dígase la microscopía, construcción de instrumentos de alta precisión e investigaciones relacionadas.

Acerca de Enthought Inc.

Fundada en el año 2001 Enthought Inc. es una compañía dinámica de rápido crecimiento en los últimos años. Su meta de negocios fundamental es la mejora significativa de los procesos de cómputo para aplicaciones científicas. Con ese fin acumulan una vasta experiencia ofreciendo a sus clientes potentes herramientas y servicios en el área de análisis cuantitativo y visualización de datos. Sus instalaciones radican en Austin, Texas con oficinas en New York (USA), Cambridge (Reino Unido), y Mumbai (India).


Acerca de FEI


NASDAQ:FEIC

Por su parte FEI es uno de los líderes mundiales en el sector de microscopía electrónica. El precio de sus acciones se ha elevado desde $11.82 USD en marzo del 2009 hasta su valor histórico más alto al cierre del 13 de septiembre del 2013 situado en $85.48 USD.


lunes, 16 de septiembre de 2013

Popularidad de Python, septiembre 2013

Python Community @ Linkedin

Después de 6 años de existencia el grupo de Linkedin Python Community ha sobrepasado la marca de los 50,000 suscriptores. El anuncio de Danny Adair no es más que el reflejo del interés sostenido en este lenguaje de programación por parte de emprersas, institucionaes y comunidades. El grupo es bastante activo y es el canal ideal para estar al tanto de tecnologías, soluciones, integraciones y oportunidades relacionadas con el ecosistema de Python. A propósito de este acontecimiento les ofrezco una panorámica actual de la popularidad de varios lenguajes según ciertas fuentes especializadas. Si quiere estar actualizado con estos temas le invito a suscribirse mediante RSS a este blog. No le resultará extraño que le mencione que el 90% de los proyectos están relacionados con Python. Puede ver los detalles (y seguirme si los repositorios le resultan útiles) accediendo a mis cuentas olemis @ Github y olemis @ Bitbucket.

TIOBE

TIOBE index

Comenzamos por este ranking. En estos momentos los análisis estadísticos de TIOBE lo ubican estable en el octavo lugar.

Los aspectos que más me llamaron la atención son los siguientes :

  • Python se encuentra inmediatamente después de (Visual) Basic ... ¿en serio? Bueno, sorpresas que nos deparan las estadísticas. Si alguien conoce las causas, por favor me gustaría conocer sus comentarios al respecto.
    • Antes que todo es preciso mencionar que (Visual) Basic ha oscilado históricamente entre los puestos 4 y 7, siendo agosto del 2013 su clasificación histórica más baja. Su tendencia en los últimos años evidencia una franca decadencia.
    • Python ha cedido terreno después de un pico histórico en el año 2011 que lo catapultó a la cuarta posición. A pesar de la baja en este último semestre considero en general que la tendencia es estable.
  • Actualmente C es el número 1 de la lista, presentando una de las tendencias más estables.
  • Java es el único que ha podido opacar la condición de líder de C. Su hegemonía abarca el mayor lapso de tiempo a lo largo de la historia del índice. Sin embargo en general muestra una tendencia negativa.
  • C++ muestra una tendencia estable desde el año 2005, pero en porcientos inferiores a los primeros años
    de conformación del índice.
  • Los dos lenguajes que más han mejorado en estos últimos 5 años son Objective C y C#. Sin embargo ambos descienden
    un escaño en comparación con el año anterior.
  • Es la primera vez que Transact-SQL clasifica en el top-ten.
  • El lenguaje estadístico R evidencia la mayor remontada al subir 6 puestos en un intervalo de un año. Esto no es algo fortuito.
    • Recientemente varios fabricantes importantes de gestores de bases de datos (e.g. Oracle Data Miner, Oracle Enterprise R, SAS/IML, JMP, SAP, Teradata,
      Jaspersoft BI, Pentaho Kettle) lo han empotrado en sus productos con el fin de ofrecerlo como una poderosa herramienta de ánalisis e inteligencia empresarial.
    • El uso de R en Google (con su estilo característico) es algo cotidiano. Con el fin de efectuar cálculos estadísticos internamente existe una infraestructura de cómputo distribuido para R basada en el paradigma MapReduce?. Por tanto no es extraño que la compañía se cuente entre sus patrocinadores.
    • La consecuencia másinmediata de esto es que el lenguaje es una solución probada para Big data analytics, sector en plena expansión según Gartner.
    • Otro aspecto importante a considerar es
      la espectacular aceptación de cursos online como Computing for Data Analysis y Data Analysis, ofrecidos ambos por Coursera.
    • En los últimos 5 años R ha desplazado a Matlab como lenguaje de cálculos estadísticos. No hay presupuesto de I+D que pueda competir con prácticamente todos los departamentos de estadística del mundo considerando el inmenso número de especialistas, profesores, alumnos y personas que mejoran el lenguaje de forma gratuita. Sin dudas un caso de éxito del software libre.
  • Bash está en el lugar 28, Erlang en el 36 y Scala en el 42.

Creo oportuno recordar que el índice de TIOBE se conforma seleccionando los motores de búsqueda más relevantes según Alexa y calculando un porciento tomando en consideración solamente el número de páginas que incluyen el nombre del lenguaje de programación. Los datos proporcionados por cada buscador son normalizados teniendo en cuenta su ranking e.g. Google Search 28%, Blogger 28%, YouTube? 7% . La influencia de Google en los resultados es incontestable. Esto ha generado fuertes críticas debido a que los resultados se pueden manipular y dependen en gran medida de las diferentes políticas de indexación y relevancia de los servicios de búsqueda.

El sitio de TIOBE está programado en PHP.

LangPop

LangPop

LangPop calcula varias métricas y ofrece una comparación normalizada que las combinapara dar una idea general de la popularidad de los lenguajes. En este últmo indicador Python se ubica en el sexto lugar, lidereando las categorías programming.reddit.com, e IRC. En todos los demás acápites los análisis siempre lo ubican entre los primeros 10* puestos.

RedMonk

RedMonk

Este índice se calcula desde el año 2011 utilizando una metodología presentada por Drew Conway y John Myles White en diciembre del 2010. Las fuentes de datos utilizadas son Github y StackOverflow?. Python ocupa el cuarto lugar, solo precedido por JavaScript?, Java y PHP.

Según los autores ambas fuentes de datos representan colectivamente significativos volúmenes de datos para fines estadísticos. Ambas comunidades, si bien se solapan, presentan una cierta independencia estadística evidenciada por una fuerte correlación de 0.78. La elección se justifica teniendo en cuenta esta característica combinada con la gran cantidad de usuarios de ambos servicios y las facilidades (API) para adquirir de forma pública los datos necesarios para confeccionar el análisis. De hecho se ignoran otros sitios muy populares como Bitbucket, Launchpad, Google Code, Sourceforge, Freshmeat ... En mi opinión esto afecta un poco los juicios que se puedan emitir a partir de los resultados.

PYPL

PYPL

El índice PYPL (de las siglas en inglés PopularitY of Programming Language) surge como un intento de ofrecer métricas más confiables (i.e. menos manipulables) que TIOBE. Los indicadores se calculan a partir de las tendencias de de búsquedas de tutoriales en Google Search.

Considerando estas métricas Python se ubica en el cuarto lugar. Los hechos más importantes a destacar son:

  • El descenso de Perl, PHP y Basic
  • El crecimiento sostenido de Python y Objective C.

Conclusiones

Muchos abordan el tema de la popularidad de los lenguajes por mera curiosidad. Otros lo consideran una vanalidad. También hay quienes (como yo) consideran que los análisis de popularidad sí son importantes. Por supuesto que a la hora de tomar decisiones basadas en este tipo de comparaciones es precisio tener bien claros los objetivos que se pretenden alcanzar, las variables que favorecen o atentan contra dichas metas y, una vez que se tengan estos aspectos bien definidos, entonces buscar el índice confeccionado con las métricas que reflejen mejor los criterios a favor o en contra de un lenguaje específico. En el supuesto caso que no exista un ranking que reuna estos requisitos, entonces será necesario seguir el ejemplo de PyPL. Habría que definir nuevos indicadores y buscar las herramientas de análisis necesarias para colectar los datos y calcular las métricas necesarias.

Perspectivas para Python

En todos los análisis Python aparece entre los 10 primeros lugares con tendencias positivas en los últimos meses/años. Sin embargo creo que hay varias líneas en las que considero que todavía hay mucho por hacer. A continuación menciono algunas que considero de vital importancia para impulsar una tendencia sostenida de crecimiento en la popularidad y uso del lenguaje.

  • Python debería ser utilizado más frecuentemente para construir aplicaciones e interfaces de usuario dinámicas en los navegadores web de los clientes.
    • En este sector Javascript es líder absoluto e indiscutible.
    • Todos conocemos las limitaciones de Javascript último desde el punto de vista de las estructuras de programación, especialmente si consideramos las facilidades que ofrece para programación orientada a objetos y otras estructuras cada vez más comunes y útiles.
    • Entre todos los lenguajes de programación Python se encuentra en una posición muy ventajosa
      para presentarse como el sustituto de Javascript como lenguaje de scripts en el navegador web.
    • Actualmente existen varios proyectos con serias intenciones de ofrecer una solución
      entre los que puedo destacar a Brython, CoffeeScript, pypy.js , entre
      otros con distintos enfoques, niveles de soporte y compatibilidad.
  • Los servicios de hosting deberían ofrecer opciones para activar aplicaciones web
    y/o paquetes de Python segun las demandas de los usuarios.
    • En este sentido PHP, Perl y Ruby tienen una ventaja considerable pues casi todos los
      proveedores que ofrecen cPanel o sistemas equivalentes incluyen herramientas como
      Perl Modules, PHP PEAR Packages, PHP Configuration, RubyGems y Ruby on Rails.
    • Quizás deban cambiar también algunos detalles de las soluciones de administración de
      paquetes y creación de entornos virtuales.
  • El uso de Python para programar aplicaciones en dispositivos móviles es todavía
    una asignatura pendiente.
    • Este es un sector muy dinámico que se encuentra actualmente en un franco crecimiento
      matizado por actores
    • Java, C# y Objective-C (en mi opinión por ese orden) son los lenguajes más
      populares en este sector.
    • Proyectos como QPython, Py4A o SL4A
    • Mono for Android (para .NET) es una referencia a considerar.
  • Python es un lenguaje ideal para usuarios de aplicaciones científicas, pero
    considero que las ofertas de productos de adquisición de datos, .
  • Python debería jugar un papel más activo en las soluciones big data
    pues este mercado está en pleno proceso de estandarización, crecimiento y adopción
    por parte de los mercados emergentes.
    • La presencia de Python en las API de los servicios en la nube es relativamente
      buena, pero todavía hay muchos espacios para mejoras.
    • Proyectos como Pydoop, Happy, Hadoopy, y otros, así como la plataforma Google App Engine son buenos ejemplos de integración de Python soluciones big data para IaaS, PaaS, SaaS.
  • Otro sector de la tecnología que se está gestando es el de la impresión 3D.

sábado, 14 de septiembre de 2013

TuxInfo 61 : Instalando Apache™ Bloodhound 0.7

TuxInfo 61

Unos pocos días atrás se anunció el número 61 de la revista argentina de software libre TuxInfo. Este volúmen incluye mi más reciente artículo acerca de Apache™ Bloodhound titulado Instalando Apache™ Bloodhound 0.7. Estructurado en forma de tutorial explica paso a paso el proceso de instalación de la versión estable más reciente de este sistema de gestión de incidencias prestando atención a los dos motores de bases de datos recomendados: SQLite y PostgreSQL. En próximos espacios repasaré las particularidades del proceso para crear una instancia con MySQL. En mi tiempo libre también confeccionaré más tutoriales acerca de otros temas muy interesantes relacionados con las posibilidades que ofrece el soporte multi-producto incluído por primera vez en esta versión, así como las mejoras en la navegación del sitio y las poderosas herramientas que añaden varios plugins que estamos desarrollando en estos momentos. Si estos temas son de su interés le invito a suscribirse a este blog y a seguir los desarrollos en olemis @ Bitbucket y olemis @ Github.

En los últimos dos días se reportan unas 515 descargas de la revista. Todos quieren saber acerca de las noticias más recientes del software libre. No se pierda esta oportunidad de estar actualizado.

Descarga gratuita de TuxInfo 61

Tengo el inmenso placer de compartir el espacio de la revista con otros colegas que han escrito los siguientes artículos:

  • Instalando Apache™ Bloodhound 0.7
  • DEB Libre – Tus paquetes DEB en un solo lugar
  • GNU/Linux no es gratuito, es libre
  • Falcon Pro… y sus trucos
  • Instalando Google Play en una Coby Kyros
  • Elementary OS – un GNU/Linux sencillo y elegante
  • ... y una revisión de una ultrabook Dell XP13 con GNU/Linux.

También se comentan noticias como :

  • Google y Motorola lanzaron oficialmente el Moto X, el primer smartphone de bandera Google directo.
  • Debian cumplió 20 años de vida
  • Ubuntu volvió a apostar por Firefox como navegador preinstalado
  • Jean-Baptiste Quéru, el máximo responsable de Android Open Source dejó su cargo.

viernes, 30 de agosto de 2013

Twitter propone Aurora para Apache™ Incubator

Propuesta Aurora

El pasado lunes 26 de agosto del 2013 se anunció la propuesta de Aurora en el marco de Apache™ Incubator. Estamos hablando de un servicio de planificación de tareas para Apache™ Mesos, desarollado para Twitter en la Universidad de California (Berkeley's AMPLab) . El sistema provee las bases necesarias para desplegar rápidamente servicios stateless, tolerantes a fallas y escalables. El proceso de incubación parece tener el fin de integrarse a Apache™ Mesos, recientemente convertido en un proyecto oficial de la ASF. Mientras que este último se especializa en distribuir tareas individuales a los nodos de un cluster, Aurora ofrece las abstracciones necesarias para clasificar y administrar estas tareas. Es típico que muchos servicios consistan en decenas o incluso cientos de tareas replicadas.

miércoles, 28 de agosto de 2013

Apache™ Mesos se gradúa de Apache™ Incubator

Apache™ Mesos

El pasado 24 de julio de 2013 fue emitido el anuncio de la graduación del proyecto Apache™ Mesos, convirtiéndose así en un proyecto de primer nivel de la fundación. Estamos hablando del sistema de administración de cluster que ofrece una propuesta eficiente de balance de carga y administración de recursos para aplicaciones distribuidas. Mesos actúa como una capa de abstracción entre las aplicaciones y pools de servidores. Se elimina así la necesidad de crear cluster de servidores separados para ejecutar frameworks de manera individual gracias a la optimización de la distribución de las tareas a lo largo del cluster. Entre sus virtudes se destaca la posibilidad de ejecutar frameworks como Apache™ Hadoop, MPI, Hypertable, Jenkins, Storm y Apache™ Spark. El sistema, al igual que Apache™ Spark, fue desarollado inicialmente en la Universidad de California (Berkeley's AMPLab) y es un elemento escencial de la infraestructura desplegada por Twitter y Airbnb.

A continuación les presento algunas opiniones acerca de Apache™ Mesos.

Mesos is the cornerstone of our elastic compute infrastructure, [...]
It's how we build all our new services and is critical for Twitter's
continued success at scale … one of the primary keys to our data infrastructure efficiency.


Chis Fry - Senior Vice President of Engineering at Twitter

We're using Mesos to manage cluster resources for most of our data infrastructure, [...]
We run Chronos, Storm, and Hadoop on top of Mesos in order to process petabytes of data


Brenden Matthews - Engineer at Airbnb, Apache Mesos Committer


Chronos es un framework basado en Mesos desarrollado por Airbnb con una funcionalidad similar a cron. Constituye un ejemplo de cómo se pueden desarrollar extensiones personalizadas con el fin de aprovechar sus capacidades para compartir recursos de cómputo.

martes, 27 de agosto de 2013

Steve Ballmer se retira de Microsoft

Steve Ballmer

Todos los medios cubren la noticia apocalíptica: Steve Ballmer anunció su retiro hace pocas horas. Casi al unísono comenzó la satanización y crucifixión del CEO de Microsoft, algo con lo que no estoy de acuerdo. Es cierto e innegable que bajo su mandato han ocurrido hechos nada alentadores para el gigante de Redmond. El valor de las acciones ha caído en apróximadamente un 40% con respecto al inicio de su gestión. Windows 8 no ha sido ni medianamente exitoso (yo personalmente no lo soporto). Windows RT tampoco, al punto de que los accionarios han iniciado acciones legales alegando que les habían escondido los datos que ilustraban el fracaso comercial de esta línea de productos. Asus abandonó Windows RT para concentrarse en Windows 8 y otro tanto hizo Acer que prefirió las Chromebooks con Android. La fusión con Nokia no creo que clasifique tampoco entre los romances más felices. Apple relegó a la compañía a un segundo plano en el sector de las TIC, mientras que Google se afianza en varios sectores muy dinámicos y prometedores como los dispositivos móviles. Pero ... ¿eso es todo?

Steve Ballmer - Windows 7

En mi opinión en estos más de 10 años (al menos yo) he visto que han sucedido muchas otras cosas que inclinan la balanza a su favor. En primerísimo lugar no fue hasta ahora que se han decidido a arreglar el Internet Explorer, con cierta cuota de acierto en lo que al plano técnico respecta. Aunque ahora el margen sea más estrecho sus dos productos insignia siguen lidereando el mercado. Ante la inminente catástrofe que dejaba Bill Gates, la compañía ha sabido (y se ha visto obligada a) expandir sus horizontes. Se han dado pasos en el área de la virtualización. Los servicios en la nube se consolidan mediante alianzas estratégicas importantes como es el caso del reciente acercamiento de Oracle a la plataforma Azure. Samsung se interesa por equipar sus dispositivos móviles con tecnología de Microsoft. Por los truenos que se sienten desde Corea es intrigante conocer el desenlace de la integración de las herramientas de software con una línea de dispositivos futurista. Por otra parte ya está disponible Office Mobile para Android. También existen proyectos que ofrecen sus plataformas (e.g. .NET) sobre este sistema operativo. La cartera de productos es impresionante y, con excepción del fenómeno Nokia no creo recordar otro caso en el que sus productos hayan abandonado la zona de los líderes del mercado (tomo por referencia los análisis de Gartner). Steve Ballmer también ha cargado sobre sus hombros la responsabilidad de reestructurar y unificar la estrategia de la compañía, bajo presiones inmensas del mercado y de los competidores. Yo mismo me considero muy lejos de comprender las dimensiones e implicaciones de tan arduo reto basado en mi experiencia formando parte en procesos similares pero a muchísima menor escala considerando las dimensiones y complejidades de Microsoft. En fin, en parte creo que Steve Ballmer está cosechando lo que otro sembró; sin que eso opaque el hecho de que su gestión no fue exitosa y que le cedió la iniciativa en varias ramas claves a sus principales competidores.

La rama de la informática es sin duda una de las más competitivas y difíciles que existe. En estos tiempos todos los gigantes del sector han cosechado fracasos notables. La capacidad de recuperación varía. El desempeño de Microsoft realmente no se ve nada bien. El ejemplo de Sun Microsystems muestra claramente que puede existir una capa de hielo fino cuando se valora el posicionamiento en el mercado, la imagen de marca, la capacidad de innovación y otros indicadores del desempeño de las grandes corporaciones. Sin embargo concuerdo totalmente con algo que leí en un artículo de PCMag: solo hay dos compañías mejor posicionadas que Microsoft cuando se trata de tomar las riendas de la innovación en los años venideros : Apple y Google. Quizás podríamos hablar también de IBM ... Cualquiera resbala y allí todavía estará Microsoft en su posición de compañía poderosa con su amplísima cartera de productos y su sólida presencia en el mercado. Ballmer sin duda alguna merece gran parte del crédito por eso.

lunes, 26 de agosto de 2013

Apache™ Bloodhound 0.7 listo para descarga

Descargar Apache™ Bloodhound 0.7

Después de una votación inicial en la lista de discusión dev@bloodhound.apache.org los miembros del IPMC han ratificado la decisión de liberar la versión 0.7 del sistema de gestión de incidencias Apache™ Bloodhound . El anuncio oficial deja constancia de los siguientes votos

Matevž Bradač binding +1
Andrej Golcov binding +1
Anze Staric binding +1
Jure Zitnik binding +1
Olemis Lang non-binding +1
Gary Martin binding +1

Una recomendación importante para los despliegues existentes es actualizar el plugin ThemeEnginePlugin a la versión 2.2.1 o superior. Para los usuarios de la versión 0.6.0 es muy importante actualizarse a esta nueva versión, pues se han eliminado varios errores importantes. Algunos de ellos están relacionados con fallos detectados al configurar las notificaciones.

Ahora bien .... ¿qué es lo que incluye la versión 0.7?

Productos

Productos en blood-hound.net

Para instalar varios proyectos en Trac es necesario crear varios entornos de administración en carpetas separadas en el sistema de archivos y desplegar varias bases de datos independientes. Los productos de Apache™ Bloodhound permiten lograr resultados similares usando el mismo entorno de administración y compartiendo la base de datos. Cada producto permite asignar permisos para los usuarios y configuraciones de forma independiente.

Hace unas pocas semanas se publicó el sitio http://blood-hound.net . El despliegue todavía está en proceso de mejora, pero ya muestra resultados muy alentadores. En primer lugar este caso demuestra que es posible publicar varios productos en varios sub-dominios pero con todos los datos almacenados en una misma base de datos. En este caso cada sub-dominio (i.e. producto) está dedicado a desarrollar un plugin o grupo de paquetes con un fin específico. Se logra así una mayor flexibilidad pues cada uno funciona de forma relativamente independiente pero al mismo tiempo se pueden compartir recursos. Por ejemplo, se puede conectar un mismo repositorio a varios productos. Los usuarios y sus sesiones también son globales. El sistema también facilita mecanismos de búsqueda que ofrecen resultados en múltiples productos.

Todo esto tiene un gran número de implicaciones que trataré de ir explicando poco a poco en este blog.

Lo que se viene …

Antes de finalizar le dedicaré unas líneas a explicar en qué estamos trabajando en este momento con vistas a la próxima versión .

Las versiones futuras se verán beneficiadas por las mejoras que se vienen realizando en la infraestructura de pruebas. La idea fundamental es poder ejecutar la suite de pruebas bajo diferentes configuraciones. Como consecuencia se espera mejorar a corto plazo el soporte para otros sistema de bases de datos e.g. MySQL y otros servidores web e.g. nginx. Esto también permitirá detectar rápidamente los fallos que se puedan introducir al hacer cambios y ajustes, evitando así recurrir en los mismos problemas ya detectados.

Plugins desarrollados en blood-hound.net

Uno de los objetivos a corto plazo consiste en mejorar la compatibilidad de los plugins para RPC y autentificación OpenId. Se trabaja también en una solución generíca de visualización y análisis de datos. Todo esto será presentado próximamente en este blog. No dude en suscribirse mediante RSS si está interesado en seguir de cerca el desarrollo de Bloodhound y su comunidad.

Conclusiones

Es preciso mencionar que hay dos demos online : el primero desplegado en https://bh-demo1.apache.org con la versión más reciente en el repositorio (i.e. nightly build) y el segundo https://bh-demo2.apache.org con la última versión estable. Si siente curiosidad Usted puede utilizarlos para familiarizarse con Bloodhound. No hace falta ni registrarse ni tener un usuario. Si después está interesado le invito a descargar Apache™ Bloodhound 0.7 , a que lea los próximos números de la revista TuxInfo y queden a la espera de una nueva versión con muchas nuevas herramientas. Como siempre , espero que las mejoras sean de su agrado . No dude en comentar acerca de estas propuestas o sugerir mejoras . Todo es posible ... simelo pide .

jueves, 18 de julio de 2013

Google Zoo

Image

El jueves pasado trataba de conectarme a GMail . En vez del formulario de inicio de sesión apareció un mensaje curioso en texto plano que decía :

500 Internal Server Error

Sorry, something went wrong.

A team of highly trained monkeys has been dispatched to deal with this situation.
If you see them, show them this information:

[...]

Al final había una cadena codificada con base64, para nada legible. Ahora mi pregunta es ... ¿Alguien ha visto alguna vez los monos de Google?

martes, 2 de julio de 2013

SAP propone Apache™ Olingo para Apache™ Incubator

Olingo

Recientemente se ha confeccionado la propuesta del proyecto Apache Olingo para dar continuidad a la implementación en Java de la versión 2.0 de OData hecha por SAP. Anteriormente la librería era desarrollada en su sitio de Github. Los objetivos consisten en actualizar el soporte para las versiones 3.0 y 4.0 del estándar. La propuesta inicial de integrantes consiste en empleados de SAP. Es por esto que la diversidad es uno de los temas fundamentales a considerar con vistas a la graduación del proyecto. Todo esto coincide en el tiempo con un desarrollo similar que llevo a cabo para Apache™ Bloodhound. Sin embargo, en los planes iniciales de Apache Olingo no se considera el desarrollo de una librería para Python.

Acerca de Apache™ Incubator

Es posible contabilizar más de 100 proyectos en el ecosistema de la Apache Software Foundation. Apache™ Incubator es el punto de partida en el camino a convertirse en un proyecto oficial de la fundación.

lunes, 1 de julio de 2013

La estrategia de Oracle en el segundo trimestre del 2013

Mark Hurd

Al cierre del segundo trimestre del año 2013 Oracle está agitado. Repentinamente se han suscitado una serie de eventos que, al menos a mí, me llaman la atención. Sin más preambulos comienzo la historia. Le invito a suscribirse a este blog para estar al tanto de otras noticias interesantes acerca del mundo de la informática.

La confrontación en al área del hardware

Este realmente es un capítulo en retrospectiva que permitirá entender mejor la historia (más reciente) que viene a continuación. Después de la adquisición de Sun Microsystems Oracle heredó la competencia que esta compañía sostenía con varios rivales en el sector del hardware. Uno de ellos resulta ser Hewlett-Packard. En el año 2011 Oracle anunciaba descontinuar sus desarrollos para Itanium. De más está decir que Intel y HP hicieron sus declaraciones al respecto ... en fin todo un culebrón. Se rompían así relaciones de negocios y líneas de cooperación que duraron más de 20 años. Este paso era de esperar pues Oracle contaba con la línea de hardware SPARC (RISC). Sun llegó a ser el mayor distribuidor de servidores RISC e Itanium en el mercado Unix con una participación estimada del 41.3% del mercado. Además HP ya en ese momento utilizaba casi toda la gama de procesadores Itanium en sus servidores Integrity Unix , sus soluciones NonStop y OpenVMS. La otra cara de la moneda era que las aplicaciones de Oracle eran el software más frecuentemente utilizado en la plataforma HP-UX (Unix). Este sistema operativo también era otro motivo de competencia con las soluciones basadas en Linux y Solaris que otrora fueron el motivo de otra disputa entre Sun y HP por la definición del futuro de Unix.

La historia continúa. Mark Hurd ex-CEO de HP fue contratado para el cargo de Presidente de Oracle. En los primeros días de junio de este año se presentó en el Dell Enterprise Forum para anunciar la alianza estratégica con Dell. El pacto consiste en llevar el software de sistema y aplicaciones negocios de Oracle al mercado pre-instalado en los servidores Dell de plataforma x86. De más está decir que el archirrival de Dell en el negocio de los servidores x86 resulta ser: HP. Se ha virado la tortilla (omelette).

Una ... ¿sorpresa?

Para continuar, el día 24 de junio 2013 anuncian una alianza estratégica con Microsoft. Si alguien me hubiera dicho esto en los tiempos de la adquisición de Sun Microsystems no lo creería. Después de este evento ambos gigantes quedaban como competidores directos en no pocos sectores. Además de todo esto las tecnologías y enfoques de ambos son notablemente ortogonales, aunque existen puntos de contacto.

En una conferencia de prensa se reunieron Steve Ballmer y Mark Hurd para anunciar esta nueva alianza. La misma consiste en que Oracle certificará y dará soporte a sus aplicaciones, plataformas y bases de datos para ejecutarlos en la plataforma Windows Azure y en los entornos de virtualización Hyper-V. Las distribuciones de Linux de Oracle también serán cerificadas para Hyper-V. Todo esto viene acompañado la posibilidad de que las licencias ya expedidas para Windows Server serán válidas también para Windows Azure. Microsoft, entre otras cosas, ofrecerá una versión completamente certificada de Java para Windows Azure. Para los usuarios que no posean licencias de Oracle en este momento Microsoft añadirá en la galería de imagenes de Windows Azure servicios de infraestructura con configuraciones que incluyen la base de datos de Oracle, WebLogic Server y Java.

Algunos productos de Oracle ya tenían una presencia notable en Windows, así que hasta aquí todo relativamente bien ... Lo más llamativo para mí fue que también se ofrecerán en Windows Azure instancias pre-configuradas de la distribución de Linux de Oracle con aplicaciones pre-instaladas de la misma compañía.

Aplicaciones empresariales en la nube

Recuerdo que hace un tiempo atrás Salesforce.com fue una de las compañías que más temprano y con mayor decisión desarrolló sus productos sobre la plataforma Google App Engine. Fue todo un acontecimiento mediático del momento. El día 25 de junio del 2013 se da a conocer una alianza por un período de nueve años durante los cuales la compañía estandarizará sus propuestas para correr sobre la base de datos, el sistema operativo Linux, la implementación y plataformas de Java y los servidores de base de datos Exadata ... de Oracle. Estos dos gigantes en el sector de aplicaciones empresariales también han acordado integrar la solución CRM de Salesforce.com y otras aplicaciones en la nube con Oracle's Fusion HCM y aplicaciones SaaS de Oracle en el sector de las finanzas. Salesforce.com adoptará todas estas tecnologías de Oracle en su infraestructura para desarrollar su propio negocio. La historia y el presente recogen la lucha en el campo de CRM entre estos dos actores de la tecnología y el software. Incluídas están varias declaraciones controvertidas como las de Larry Ellison (CEO de Oracle) en el Oracle OpenWorld 2010 cuando expresó que Saleforce.com no era una compañía de cloud computing.

Por otra parte, más esperado fue el acuerdo con Netsuite concretado el 26 de junio del 2013. Larry Ellison es el pricipal accionista de NetSuite. Oracle integrará sus aplicaciones y servicios en la nube para HCM con el ERP de NetSuite.

La repercusión directa de estas dos acciones apunta a hacerle frente a la competencia de SAP en el terreno de aplicaciones empresariales.

Conclusiones

Realmente en el 2011 veía muy lejana la visión de Peter Katz (CTO de PKA Technologies en ese momento) cuando mencionaba con respecto a la competencia de Oracle que después de comprar a Sun estaba en una posición de dar soporte a IBM y ayudar a Microsoft y Red Hat considerando a estos tres últimos como ganadores desplazados. Todo esto se ha concretado de manera acelerada después de conocer los detalles del resúmen del año fiscal de Oracle. A la lista se suman Google, HP, SAP ... y no me extrañaría que otros. Oracle tiene una visión clara de sus perpectivas considerando sus fortalezas actuales.

Tres días, tres alianzas. Nada ... que si le añadimos a todo esto una historia de amor y un poco de efectos especiales Hollywood y O'Globo tienen suficiente material para dos películas y una telenovela.

martes, 25 de junio de 2013

¿34000 qué?

 34000 visitas

El pasado día 14 de junio del 2013 a las 4:02 am -5GMT estaba tratando de redactar un artículo para mi blog. Coincidentemente mis ojeras descubrieron que el número de visitas había ascendido a 34001. Así que esta breve nota tiene como objetivo felicitar a todos aquellos que siguen interesados en los temas que se discuten en este blog. Espero que el interés se incremente porque realmente ahora es que empieza la mejor parte. Le invito a suscribirse mediante RSS para que no se pierda los próximos artículos acerca de varios temas interesantes en las ramas de la cibernética, edición de video, software libre, temas jurídicos, economía, música, lingüística, un poco de filosofía no muy elevada ... y hasta los temas de su preferencia. Todo es posible ... simelo pides :).

Desde hace tiempo he deseado hacer resúmenes semestrales de la actividad de mi blog parecidos al reporte del inicio del año 2011 y el reporte del primer trimestre del año 2011. Sinceramente no he tenido mucho tiempo ... pero ya se me ocurrirá algo al respecto.

lunes, 24 de junio de 2013

El (posible) significado de los números de versiones

Semantic versioning

A continuación les ofrezco unos comentarios acerca de un enfoque llamado semantic versioning. Esta guía ha sido formalizada por Tom Preston-Werner (inventor de Gravatar y co-fundador de Github) para lidiar con las dependencias de las aplicaciones de software. Muchas veces leí en las conversaciones de la lista bloodhound-dev@incubator.apache.org que los números de las versiones son ''baratos''. Para un proyecto que está en su fase inicial este consejo creo que es válido. Sin embargo, en mi opinión se deben considerar otras variantes para desarrollos con mayor madurez que implican un número considerable de usuarios. De gran importancia es este tema para librerías que son utilizadas muy frecuentemente para desarrollar distintos tipos de software.

¿Qué es el versionado semántico?

La versión 2.0.0 define este sistema de numeración de versiones de la siguiente manera:

  1. Cada versión se identifica utilizando tres números separados por punto MAJOR.MINOR.PATCH
    e.g. 2.3.1
  2. Los números de las versiones sucesivas se incrementan considerando las siguientes
    reglas generales
    1. Se incrementa MAJOR cuando se realizan cambios incompatibles en la API,
    2. Se incrementa MINOR cuando se añaden nuevos elementos compatibles con versiones anteriores,
    3. Se incrementa PATCH cuando se corrigen errores y el resultado es compatible con versiones anteriores.
  3. Se permiten ciertos calificadores para distribuciones todavía en desarrollo
    (e.g. alpha, beta, release candidate, ...)

¿Para qué sirve?

El objetivo fundamental consiste en prevenir, o al menos tener la capacidad de detectar casos del fenómeno conocido como dependency hell. En el ámbito de la ingeniería de software es muy importante poder hacer algo al respecto mientras se desarrollan sistemas complejos con gran número de dependencias. Bajo este esquema los números de versiones y la manera en que se asignan ofrecen rápidamente una información valiosa acerca del código y la compatibilidad de las mejoras incorporadas de una versión a la siguiente.

Ejemplo : La aplicación A se construye utilizando la versión 2.3.6 de la librería L.
Los usuarios finales la instalan de forma automática desde un repositorio que maneja las
relaciones entre los diferentes paquetes de software disponibles, quizás compilándolos en
tiempo de instalación. Como la librería L respeta los términos del versionado semántico
y la compatibilidad entre las versiones de la rama 2.x.x entonces los autores de la aplicación A
pueden especificar las restricciones L>=2.3.6 , L<3.0.0. En este rango de versiones
los autores de la librería L crean la expectativa de mantener compatibilidad en la API con las consecuentes garantías para permitir el correcto funcionamiento de A.

En mi experiencia como programador y arquitecto de sistemas considero útiles los puntos siguientes:

  • Punto 5: La versión 1.0.0 define la primera API pública estable.
  • Puntos 9, 10, 11: El estándar no impone un significado especial para las versiones de prueba.
    Existen modelos que le asocian un significado también a estas distribuciones intermedias, por ejemplo
    el esquema de versiones de Apache™ Subversion.
  • Se recomienda que la caducidad de una parte de la API se debe ofrecer inicialmente en una versión
    que incremente el número MINOR para que las dependencias puedan prepararse para adoptar versión
    subsecuente que incremente el número MAJOR.

Conclusiones

Existen otros esquemas para numerar las versiones. Apache™ Bloodhound no adoptó el versionado semántico. En este caso se consideró el número MAJOR como una señal. Es por eso que la próxima versión será la 0.6.0 a pesar de que es substancialmente diferente a (y en momentos incompatible con) las versiones precedentes; en especial definiendo la API pública de la solución multi-productos.

Sin embargo recomiendo mucho el uso del versionado semántico, el cual empleo en otros proyectos. Para estar al tanto de su utilidad es posible suscribirse mediante RSS.

viernes, 14 de junio de 2013

Tutorial de LD_PRELOAD, segunda parte

man ld.so

Un artículo previo mostraba cómo remplazar una función de la librería estándar de C con una versión personalizada. Esta nota explica lo que es preciso hacer para invocar la función original desde la nueva función.

Comencemos por recordar el ejemplo presentado anteriormente. Todo consistía en un programa llamado prog.c que invocaba la función fopen.


#include <stdio.h>

int main(void) {
    printf("Calling the fopen() function...\n");

    FILE *fd = fopen("test.txt", "r");
    if (!fd) {
        printf("fopen() returned NULL\n");
        return 1;
    }

    printf("fopen() succeeded\n");

    return 0;
}

¿Cómo hacer entonces una función que pueda remplazar a fopen y al mismo tiempo sea capaz de invocar la función fopen de la libraría estándar de C? Veamos el código de myfopen.c.


#define _GNU_SOURCE

#include <stdio.h>
#include <dlfcn.h>

FILE *fopen(const char *path, const char *mode) {
    printf("In our own fopen, opening %s\n", path);

    FILE *(*original_fopen)(const char*, const char*);
    original_fopen = dlsym(RTLD_NEXT, "fopen");
    return (*original_fopen)(path, mode);
}

Como se puede apreciar la librería exporta la versión personaizada de la función fopen. Prestando atención se puede constatar cómo se obtiene la referencia a la función original pasando el símbolo RTLD_NEXT a dlsym. Es muy importante definir el símbolo _GNU_SOURCE para tener acceso a RTLD_NEXT en dlfcn.h. De esta forma se coninua la resolución del símbolo en cuestión en el orden de búsqueda a continuación de la librería actual. La compilamos de la siguiente manera:

$ gcc -Wall -fPIC -shared -o myfopen.so myfopen.c -ldl

Al ejecutar el comando de ejemplo en cuestión con ayuda de la variable de entorno LD_PRELOAD, esto es lo que se obtiene:

$ LD_PRELOAD=./myfopen.so ./prog
Calling the fopen() function...
In our own fopen, opening test.txt
fopen() succeeded

Este truco es realmente útil para cambiar el funcionamiento de partes del sistema o depurar detalladamente ciertos detalles. Le invito a suscribirse mediante RSS para que no se pierda los próximos artículos de esta serie.

jueves, 30 de mayo de 2013

MetaModel y BeanShell propuestos para Apache™ Incubator

Apache™ Incubator

Es posible contabilizar más de 100 proyectos en el ecosistema de la Apache Software Foundation. El Apache™ Incubator es el punto de partida en el camino a convertirse en un proyecto oficial de la fundación. Recientemente se han propuesto dos proyectos interesantes. La primera propuesta que quería mencionar es la de BeanSheall, uno de los lenguajes de programación utilizado para escribir macros en Apache™ Open Office™. Este último ya es un proyecto oficial de la fundación; razón por la cual se podría justificar la incorporación directa a este proyecto en vez de pasar por todo el proceso de incubación. Quizás se justifique más incorporarlo en Apache™ Commons debido a que este proyecto ha estado relacionado con Apache™ Maven y Apache™ JMeter desde hace varios años.

La segunda propuesta es MetaModel; un framework muy interesante que provee una interfaz común para acceso, exploración y consulta de diferentes tipos de fuentes de datos. Entre los objetivos iniciales del proyecto se menciona establecer vínculos con otros proyectos de primer nivel como POI, Gora, HBase y CouchDB. Resulta interesante saber que estas dos tecnologías podrían incorporarse próximamente al ecosistema de la ASF, por lo que les invito a suscribirse mediante RSS a este blog si está interesado en conocer más acerca del futuro de ambos.

miércoles, 29 de mayo de 2013

Proyectos de Apache™ Bloodhound en el Google Summer of Code 2013

GSoC 2013

El 27 de mayo de 2013 es la fecha en que se determinaron las propuestas que se aceptarían como parte del Google Summer of Code. En total este año se han aceptado 1,192 propuestas de proyectos de estudiantes de varias latitudes. Hasta el momento se han confirmado tres proyectos relacionados con Apache™ Bloodhound

Los proyectos son :

  1. Customizable time series reports
    por Pranay B. Sudre
    • en este caso espero poder estar apoyando el trabajo con fuentes de
      datos que permitan representar las tendencias en líneas de tiempo
      anotadas.
  2. Embeddable tickets/objects por Antonia Horincar
    • Esta es una oportunidad muy buena para continuar el trabajo de José Angel Franco
      acerca de una API de servicios REST para los recursos de Trac y
      Bloodhound
  3. Add time series reports for Bloodhound por Hua Xiang
    • mi colaboración en este caso puede ser relativamente similar a la
      del primer proyecto.

Le invito a suscribirse mediante RSS a este blog si está interesado en conocer los que acontece con estos proyectos. Espero que haya más noticias pronto acerca de las propuestas restantes.

PS: Otras organizaciones han propuesto proyectos interesantes como este acerca de RTEMS un sistema operativo de tiempo real y código abierto; o las propuestas del W3C. Sospecho que hay más detalles en la lista completa de proyectos aceptados.

lunes, 27 de mayo de 2013

Knockout.js ... lo que Usted no vió

KnockoutJs banner

Le dediqué un tiempo a conocer más acerca del patrón MVVM . Me agrada, así que se suma a la lista de tecnologías relacionadas con Microsoft que realmente recomiendo. Este es un enfoque propuesto por la compañía que consiste, según sus propios autores, en una especialización del enfoque Modelo Vista Controlador para tecnologías como Windows Presentation Foundation y Silverlight. En la ingeniería de software este tipo de soluciones resulta muy útil para construir interfaces de usuario. Su ámbito de aplicación se ha extendido también al framework ZK (del cual tengo muy buenas referencias) y a HTML5. Incluso existe Google mdv, una variante relacionada con estos temas. En mi caso particular puse mi atención en la implementación para Javascript conocida como KnockuotJs. En esta ocasión no pretendo comentarles las peculiaridades de su uso . Para esto les recomiendo leer este artículo y la documentación de KnockoutJs. Más bien pretendo comentarles algunos detalles que me llamaron la atención al probar los tutoriales.

Dependencias y <select />

KnockoutJs tutorial 1

Al terminar con el primer tutorial debe quedarnos como resultado un modelo más o menos como el que se muestra a continuación.

// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
    this.firstName = ko.observable("Bert");
    this.lastName = ko.observable("Bertington");

    this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName();    
    }, this);

    this.capitalizeLastName = function() {
        var currentVal = this.lastName();        // Read the current value
        this.lastName(currentVal.toUpperCase()); // Write back a modified value
    };
}

// Activates knockout.js
ko.applyBindings(new AppViewModel());

A continuación se muestra la vista relacionada después de añadir un elemento <select /> conectado con el atributo lastName del modelo.

<!-- This is a *view* - HTML markup that defines the appearance of your UI -->

<p>First name: <strong data-bind="text: firstName">todo</strong></p>
<p>Last name: <strong data-bind="text: lastName">todo</strong></p>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<p>Full name: <strong data-bind="text: fullName"></strong></p>
<button data-bind="click: capitalizeLastName">Go caps</button>

<p>Last name: 
  <select data-bind="value: lastName" >
      <option value="x">Pérez</option>
      <option>Suárez</option>
      <option value="z">García</option>
      <option>Bertington</option>
      <option>BERTINGTON</option>
  </select>
</p>

En este punto me resultó muy interesante que la librería preserva automáticamente la consistencia del modelo teniendo en cuenta los bindings. Esta es la razón por la cual el botón Go caps solo funciona cuando el apellido es Bertington . La razón es que el binding con el combobox limita el número de valores que se le puede asignar al atributo del modelo. En el ejemplo el valor mencionado es el único que tiene también una opción con las letras mayúsculas.

Las listas y <select /> ... otra vez …

KnockoutJs tutorial 2

Pasando la página (literalmente ;) llegamos al segundo ejemplo que trata sobre los bindings para listas y colecciones de objetos. Lo que se muestra es impresionante y se completa cada paso satisfactoriamente; pero ... hay (al menos) un detalle muy sutil que se escapa. Utilizando Firebug, DragonFly o una herramienta similar es posible constatar que el atributo value de los elementos <option /> utilizados para escoger el menú siempre está asignado a una cadena vacía (al menos en las versiones de Opera, Firefox y Google Chrome que utilicé para probar ...). Con el fin de enviar los datos hacia el servidor es posible que sea útil asignar ciertos identificadores. Para lograr ese objetivo en la versión final es posible añadir en el model el atributo mealId

// Class to represent a row in the seat reservations grid
function SeatReservation(name, initialMeal) {
    var self = this;
    self.name = name;
    self.meal = ko.observable(initialMeal);

    self.formattedPrice = ko.computed(function() {
        var price = self.meal().price;
        return price ? "$" + price.toFixed(2) : "None";        
    });
}

// Overall viewmodel for this screen, along with initial state
function ReservationsViewModel() {
    var self = this;

    // Non-editable catalog data - would come from the server
    self.availableMeals = [
        { mealId: "s", mealName: "Standard (sandwich)", price: 0 },
        { mealId: "p", mealName: "Premium (lobster)", price: 34.95 },
        { mealId: "u", mealName: "Ultimate (whole zebra)", price: 290 }
    ];    

    // Editable data
    self.seats = ko.observableArray([
        new SeatReservation("Steve", self.availableMeals[0]),
        new SeatReservation("Bert", self.availableMeals[0])
    ]);

    self.addSeat = function() {
        self.seats.push(new SeatReservation("", self.availableMeals[0]));
    }

    self.removeSeat = function(seat) { self.seats.remove(seat) }

    self.totalSurcharge = ko.computed(function() {
       var total = 0;
       for (var i = 0; i < self.seats().length; i++)
           total += self.seats()[i].meal().price;
       return total;
    });
}

ko.applyBindings(new ReservationsViewModel());

Después es necesario utilizar el binding optionsValue en la vista como se muestra a continuación:

<h2>Your seat reservations</h2>

<button data-bind="click: addSeat">Reserve another seat</button>

<table>
    <thead><tr>
        <th>Passenger name</th><th>Meal</th><th>Surcharge</th><th></th>
    </tr></thead>
    <!-- Todo: Generate table body -->
    <tbody data-bind="foreach: seats">
        <tr>
            <td><input data-bind="value: name" /></td>
            <td><select data-bind="options: $root.availableMeals, value: meal, optionsText: 'mealName', optionsValue: 'mealId'"></select></td>
            <td data-bind="text: formattedPrice"></td>
            <td><a href="#" data-bind="click: $root.removeSeat">Remove</a></td>
        </tr>
    </tbody>
</table>

<h3 data-bind="visible: totalSurcharge() > 0">
    Total surcharge: $<span data-bind="text: totalSurcharge().toFixed(2)"></span>
</h3>

Al aplicar estos cambios se logra generar unos elementos como los siguientes:

<select data-bind="options: $root.availableMeals, value: meal, optionsText: 'mealName', optionsValue: 'mealId'">
  <option value="s">Standard (sandwich)</option>
  <option value="p">Premium (lobster)</option>
  <option value="u">Ultimate (whole zebra)</option>
</select>

¡Urra! ... pero no todo es color de rosa. Como resultado la columna Surcharge deja de actualizarse . Por consiguiente no se muestra el sub-total que se calcula en el último paso. Sin embargo el comando Remove introducido en esa misma etapa sí sigue funcionando. Esto me hace pensar que haya algún problema al calcular alguno de los diferentes tipos de bindings involucrados.

Quizás existe una forma de hacer que vuelvan a funcionar las actualizaciones, pero hasta este momento no la he encontrado. Tampoco he tenido mucho tiempo para profundizar en el tema.

Conclusiones

KnockuotJs es una librería excelente. Sinceramente preferiría que algunos detalles de los bindings fueran más parecidos al estilo de Genshi. De todas maneras los própositos son diferentes; quizás ni siquiera sea apropiado o posible realizarlo.

Me da la impresión de que no voy a poder dejar de utilizarlo después que lo pruebe en alguna aplicación. La recomiendo. Le invito a suscribirse a este blog mediante RSS si desea conocer si descubro algo más en el resto de los tutoriales . En próximos artículos comentaré cómo utilizar esta solución para enriquecer la experiencia de usuario de sus aplicaciones. A pesar de estas pifias los resultados son impresionantes.