Mostrando las entradas con la etiqueta Configuracion_y_Versionamiento. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Configuracion_y_Versionamiento. Mostrar todas las entradas

domingo, septiembre 05, 2021

Utilidad de The Java Version Almanac

 Usualmente trabajo en Java 8, (como parte de otros lenguajes). La versión 8 es obligatoria como intersección de los distintos productos que se combinan en nuestro desarrollo (Plex, Websphere, C++, RPGIV, OS/400). Francamente, podríamos pasar a Java 9 sin problemas reales, pero sería ir un paso más allá de lo que el soporte de Plex reconoce. Es probable que terminemos haciéndolo durante el año, o poco después, de todas formas. Lo que parece un gran atraso respecto a la versión corriente (Java 15/16) y las versiones bajo desarrollo (Java 17/18), si consideramos que Java 8 es por ahora la anteúltima versión estable (LTS), seguida por Java 11, y en espera de Java 17. El sistema adoptado por Oracle de desarrollo de Java en versiones con pequeños cambios graduales, favorece el avance de versión analizando el impacto que puede tener el paso a la siguiente, considerando los releases mayores como objetivos principales. Sobre el plan de desarrollo de Java, dice Oracle:

For product releases after Java SE 8, Oracle will designate a release, every three years, as a Long-Term-Support (LTS) release. Java SE 11 is an LTS release. For the purposes of Oracle Premier Support, non-LTS releases are considered a cumulative set of implementation enhancements of the most recent LTS release. Once a new feature release is made available, any previous non-LTS release will be considered superseded. For example, Java SE 9 was a non-LTS release and immediately superseded by Java SE 10 (also non-LTS), Java SE 10 in turn is immediately superseded by Java SE 11. Java SE 11 however is an LTS release, and therefore Oracle Customers will receive Oracle Premier Support and periodic update releases, even though Java SE 12 was released. (en It's time to move to Java 17, Johan Janssen, 27 de agosto de 2021, Java Magazine)

Marc R. Hoffmann y Cay S. Horstmann han desarrollado un cuadro que despliega el inventario de todas las versiones de Java existentes, su soporte, y el análisis de los cambios existentes de versión a versión, a nivel de clase y método. Este cuadro es un auxiliar imprescindible a la hora de planear una meditada actualización a niveles superiores. Se trata de un gran trabajo, que al menos a mí me resulta de consulta obligatoria. Ojalá otros productos relacionados tuvieran un cuadro similar (estoy pensando en Apache POI, donde suelo necesitar la inferencia y el análisis de casos para concluír qué debo usar).

The Java Version Almanac, javaalmanac.io


 

martes, marzo 10, 2015

Plex: algunas actividades en marzo

Este primer trimestre de 2015 trae algunas novedades relacionadas con Plex: temprano, en enero, George Jeffcock anunció su decisión de soportar el conjunto de patrones elaborados de Pattern Factory, publicado ahora en su sitio de Stella Tools . Pattern Factory fue durante años un conjunto muy interesante de patrones de uso y código abierto, desarrollados por Peter Fabel. La republicación de los patrones en el dominio de Stella Tools permite acceder a ellos nuevamente.
También de mano de George viene el anuncio del establecimiento de un puente entre Plex y la herramienta de administración de cambios y distribución de paquetes TDS/OMS de Remain Software, de Holanda. Es interesante su comentario:
I propose a CA Plex developer will be very familiar with the CA Plex Object Browser and would like to use it to orchestrate which objects are to be managed by a 3rd party tool. Ideally the CA Plex IDE would support traditional OLE drag and drop to 3rd party but with this unsupported, creating a Model API application in between the CA Plex IDE and the 3rd party is the next best solution.

In the case of CM First's Matchpoint Product it offers in my opinion the closest integration to CA Plex possible aided by the fact it is written in CA Plex and so no need for the intermediate Model API dialog.

With Softlanding's Turnover (originally written in CA Plex) and Remain's TD/OMS both being Eclipse based, wouldn't it be nice (well we can dream) to make the CA Plex IDE into Eclipse.
En febrero, CM First anunció el soporte movil de su herramienta de administración de cambios, Match Point, comentada antes por Jeffcock.
También este mes, mañana mismo, se desarrolla una conferencia sobre Plex en Milán, promovida por AXSOS, Mondo Software y Websydian.
Aceptable comienzo de año...
 

domingo, febrero 22, 2015

James Ward sobre Java

James Ward, de Salesforce, escribió el pasado mes de diciembre una  nota sobre Java (y alrededores). Una excelente lectura sobre java para aplicaciones web, y seguramente adaptable a otros escenarios. En realidad, se trata de una recomendación basada en experiencia acerca de la adopción de métodos ágiles y el recurso a herramientas de automatización y sistematización del proceso de contrucción (e implementación) de aplicaciones. No quiero repetirlo, pero sí recomendarlo. En todo caso, quisiera citar su reflexión sobre el mantenimiento de releases "monolíticos" (trabajar para entregas en series de tiempo y desarrollo prolongadas):

Monolithic Releases Suck

Unless you work for NASA there is no reason to have release cycles longer than two weeks. It is likely that the reason you have such long release cycles is because a manager somewhere is trying to reduce risk. That manager probably used to do waterfall and then switched to Agile but never changed the actually delivery model to one that is also more Agile. So you have your short sprints but the code doesn’t reach production for months because it would be too risky to release more often. The truth is that Continuous Delivery (CD) actually lowers the cumulative risk of releases. No matter how often you release, things will sometimes break. But with small and more frequent releases fixing that breakage is much easier. When a monolithic release goes south, there goes your weekend, week, or sometimes month. Besides… Releasing feels good. Why not do it all the time?
Moving to Continuous Delivery has a lot of parts and can take years to fully embrace (unless like all startups today, you started with CD). Here are some of the most crucial elements to CD that you can implement one-at-a-time:
  • Friction-less App Provisioning & Deployment: Every developer should be able to instantly provision & deploy a new app.
  • Microservices: Logically group services/apps into independent deployables. This makes it easy for teams to move forward at their own pace.
  • Rollbacks: Make rolling back to a previous version of the app as simple as flipping a switch. There is an obvious deployment side to this but there is also some policy that usually needs to go into place around schema changes.
  • Decoupled Schema & Code Changes: When schema changes and code changes depend on each other rollbacks are really hard. Decoupling the two isolates risk and makes it possible to go back to a previous version of an app without having to also figure out what schema changes need to be made at the same time.
  • Immutable Deployments: Knowing the correlation between what is deployed and an exact point-in-time in your SCM is essential to troubleshooting problems. If you ssh into a server and change something on a deployed system you significantly reduce your ability to reproduce and understand the problem.
  • Zero Intervention Deployments: The environment you are deploying to should own the app’s config. If you have to edit files or perform other manual steps post-deployment then your process is brittle. Deployment should be no more than copying a tested artifact to a server and starting it’s process.
  • Automate Deployment: Provisioning virtual servers, adding & removing servers behind load balancers, auto-starting server processes, and restarting dead processes should be automated.
  • Disposable Servers: Don’t let the Chaos Monkey cause chaos. Servers die. Prepare for it by having a stateless architecture and ephemeral disks. Put persistent state in external, persistent data stores.
  • Central Logging Service: Don’t use the local disk for logs because it prevents disposability and makes it really hard to search across multiple servers.
  • Monitor & Notify: Setup automated health checks, performance monitoring, and log monitoring. Know before your users when something goes wrong.
There are a ton of details to these that I won’t go into here. If you’d like to see me expand on any of these in a future blog, let me know in the comments.
Un punto importante, pero recordado sólo con el propósito de que lea completa la reflexión de James Ward, que lo merece.

domingo, junio 15, 2014

El objeto CDO y Office: ¿obsolescencia programada?

 Revisando algún otro asunto (algún fallo ajeno en el uso de MAPI), topé con un anuncio que en particular nos afecta en más de una instalación; digamos que en general puede afectar a cualquier usuario de Plex, pero supongo que su alcance es más amplio, más allá de la estrategia propia de Plex, para cualquier instalación basada en mensajería de Microsoft. El anuncio tampoco es nuevo: refiere a Office 2010: Collaboration Data Objects (CDO) 1.2.1 no es soportado con Outlook 2010 y versiones posteriores. CDO es una librería basada en el modelo COM de Microsoft, accesible por medio de C, C++, VBA, VB, C#, usada ampliamente para el envío de mensajería en sistemas Windows. En el mismo sitio del anuncio CDO es definido como  a client library that provides a thin wrapper over Extended MAPI functionality. This library is typically used to add email messaging functionality to custom programs. This library allows those programs to perform functions such as sending email through MAPI, working with calendars, and accessing various data in Microsoft Outlook or in Microsoft Exchange.

Posiblemente el API de MAPI haya sido intermediado por el uso de CDO ampliamente desde su aparición; bien definido, bien documentado, consistente, capaz de ser invocado desde casi todos los lenguajes ejecutables en Windows, y particularmente desde las propias implementaciones de Microsoft para el lenguaje de propósito especial de Office (VBA).
Sin embargo, a partir de Office 2010, nos encontramos que CDO no es instalado, y es desaconsejado su uso para interactuar con Office a partir de esta versión, debido a cambios de arquitectura en la suite de oficina:  
Microsoft Outlook 2010 and later versions include many architectural changes to the client-side MAPI subsystem. Of particular concern are scenarios in which Outlook is configured to use multiple Exchange accounts. Also, CDO 1.2.1 is a 32-bit client library and will not operate with 64-bit versions of Outlook. Given all these factors, CDO 1.2.1 is not supported for use with Outlook 2010 or Outlook 2013, and we do not recommend its use with Outlook 2010 and later versions.
¿Podemos considerar esta decisión una violación de los principios de arquitectura del modelo COM? Una vez más, el concepto de compatibilidad y continuidad del soporte de Microsoft opta por la vía rápida: se elimina su instalación, se ralea la información y documentación a partir de ahora "legacy", y se recomienda calurosamente el cambio a la nueva versión. Microsoft tiene una solución a su patrimonio de funciones construidas usando CDO:
Programs that use CDO should be re-designed to use other Application Programming Interfaces (APIs) instead of CDO (...) Developers should use the Outlook 2010 and later object model instead of CDO 1.2.1. Also, developers can still use Extended MAPI (which requires unmanaged C++) in some scenarios where CDO was required. However, if it is possible, we generally recommend that the Outlook object model be used instead of Extended MAPI. Microsoft product support can help developer customers migrate custom programs from using CDO 1.2.1 to using other APIs. However, Microsoft will not provide support for any scenarios in which CDO 1.2.1 is used with Outlook 2010 or Outlook 2013. 
Simple, entonces: busque todos los casos en que usara CDO, y rediseñelos para usar el modelo de objeto Office. Justo cuando Microsoft está en transición entre Win32 y WinRT, para descubrir que dentro de un par de años WinRt determina otro modelo de objeto, y, sin más trámite, todo su patrimonio sea discontinuado de nuevo.
Sin duda usted podrá seguir usando CDO, en un marco limitado, recurriendo a modificaciones de la instalación, a condición de cómo administre su instalación de Exchange (vea el punto More information en la página del anuncio de Microsoft). Pero no será soportado, y cada día encontrará menos documentación para arreglárselas por su cuenta. Si lo va a seguir utilizando, tome una medida de precaución: conserve como documento off line todo lo que pueda conseguir todavía de guía de referencia y soporte de Microsoft. Como en muchos casos, pronto encontrará que las (escasas) referencias que se conserven, lo conducirán a páginas muertas. ¿CDO funciona? digamos que sí. Lo que ha cambiado es Office, y la compatibilidad hacia atrás parece que es secundaria: cambie de modelo de API. La mejor explicación acerca de las razones del conflicto de versiones la he encontrado en lo analizado por Matt Stehle, en los MSDN blogs. Matt apunta a la existencia de dos modelos de manejo de memoria: el de MAPI/CDO, y el de .NET, que pueden producir intermitentes problemas de asignación de memoria:
MAPI has its own memory management model that conflicts with and is incompatible with the .NET runtime. This the primary reason that MAPI and CDO 1.21 are not supported running in a .NET process. The common symptoms you will see are seemingly random Access Violations and very often memory leaks (especially with CDO 1.21). There is no methodology for avoiding or managing these symptoms by using interop libraries or managing references in a particular fashion in your .NET code – it just won't work.
The trap is that CDO 1.21 and .NET can "appear" to work and you can get pretty far in your dev cycle before you run into problems. Many times we see this come up in soon after a solution is released to production, in late cycle performance testing, or in a pilot program. Opening a critical case with Microsoft when you have end users complaining of crashes or project managers short on budget is not a good time to find out that your solution is unsupportable.
Matt se extiende sobre el alcance de éste conflicto, reconociendo que realmente sólo a partir de Office 2007 existen mejores reemplazos de CDO, y que por lo demás, ambos serán excluyentes (The simple answer is you either need to not use .NET or not use MAPI or CDO 1.21). Puede leer la nota completa de Matt en su blog. No se arrepentirá, especialmente si sigue la acotación que apunta Matt a lo que Patrick Reehan dice acerca de qué significa "no soportado" para Microsoft.

En nuestro caso, el impacto sería reducido (por otra parte en ningún caso los servidores de Exchange han provocado conflictos todavía), porque CDO/MAPI están sumamente encapsulados, y no conviven procesos .NET con CDO. Todo nuestro manejo de mensajería pasa por un solo objeto, y las interfases entre un modelo y este objeto son exclusivamente de datos, sin ningún condicionamiento técnico. Bastará con redefinir las actuales llamadas, adecuándolas a los nuevos requerimientos, y recompilarlo y distribuirlo. No hará falta tocar nada más. ¿Pero esto es así en todos los casos? seguramente no, y probablemente en muchas empresas habrá (o hubo) trabajo inesperado.

lunes, abril 21, 2014

Migrando a System i 7.1

En un proyecto en el que trabajo, en poco tiempo más (midiendo en meses) migraremos un conjunto de sistemas IBM i (AKA AS/400, iSeries, al menos en su base), de 6.1 a 7.1, mientras que IBM ya anuncia i 7.2 . El cambio no representa  inconvenientes mayores: probablemente no haya demasiado que tocar en aquellas aplicaciones que generamos con Plex, que básicamente no debemos recompilar ni tampoco rehacer código.Únicamente deberíamos asegurarnos de que ningún API usada o procedimiento de lenguaje de control pudiera entrar en conflicto por obsolescencia. De acuerdo a la información adelantada por IBM, los problemas no vendrían por este lado. Es casi seguro que podremos seguir trabajando todas nuestras aplicaciones RPG, sus APIs, y nuestro CLs, sin modificaciones.
En cambio, tenemos asegurado trabajo de revisión con Java, quizá el área de mayores novedades en el software incluído para la versión 7.1, ya que, si consideramos que nos movemos desde 6.1, debemos tener en cuenta que la nueva versión abandona la máquina virtual estándar de Java (esta parte tampoco nos afecta, porque Websphere 7.0 ya la usa), y utiliza sólo la propia de IBM (J9). Esto sí requiere análisis y tests para aquellas aplicaciones que no se ejecutan con Websphere.  En el caso del servidor de aplicaciones, que es el que usamos relacionado con Plex, estimo que podremos mantener inicialmente la versión 7 de Websphere, que ejecuta Java 6, pero en algún momento debemos pensar en subir su versión a 8.1, que usa Java 7. Y esto implica que también deberemos planear la migración de Plex a 7.1. No es obligatorio, ya que podríamos mantenernos como hasta ahora, pero debemos pensar que también podemos llegar a estar presionados por los cambios en Windows, de 7 a 8.
A pesar de todos estos movimientos, no es mucho lo que impacta en nuestras aplicaciones, que se mantienen con cierta holgura en estos movimientos de versiones. Más bien, lo que debemos repensar es qué cosas podríamos reenfocar, sacando provecho de las nuevas posibilidades: gran parte de los cambios se manifiestan como extensiones. Mayor es el peligro si habláramos de dependencia de Windows, ya que el paso de 7 a 8 sí apunta a un cambio de arquitectura mayor. Pero de estos inconvenientes podemos hablar mejor en otro momento.
Dany Burger, en The Four Hundered, dedica un interesante artículo a los problemas de migración de i 6.x a i 7.1 y 7.2, que me motivaron a chequear nuestros propios riesgos a futuro. Como en otras ocasiones, es de reconocer y agradecer la política de cambio y migración de IBM y el iSeries (o como lo llames), que difícilmente te deje en una situación de callejón sin salida con una aplicación antigua: se puede evolucionar gradualmente sin tirar lo que ya está hecho.

domingo, julio 07, 2013

Comienza el beta test para Plex 7.1

Simon Cockayne, Product Manager para Plex y 2E desde mayo último, anunció en estos días la convocatoria a clientes registrados para participar del test beta de Plex 7.1. Una buena parte de las mejoras programadas de incluír en la nueva versión están orientadas al soporte de .NET, WCF y Azure, y Kerberos en IBM i (AKA iSeries, ex AS400). De interés por lo tanto para todos aquellos clientes que utilicen estas variantes. Está programada también una nueva facilidad interna de la IDE: la creación de perfiles de configuración que puedan ser invocados de una lista. Esta es una solicitud de la comunidad que lleva tiempo en espera, que facilitará a todos el uso de variantes y versiones, libres de errores de configuración manual.
A la larga práctica de convocar a clientes y desarrolladores a los beta test de Plex y 2E, CA ha agregado el uso de técnicas ágiles de evolución y prueba del producto, que prometen ciclos más cortos de cambio. Otra parte clave de esta filosofía, es la inclusión del repositorio de ideas en la Comunidad Global de Plex/2e (y otros productos), en la que es posible postular mejoras y correcciones, con la habilidad de votarlas y ranquearlas.  Estas son tomadas en cuenta para la elaborar la evolución del producto.
Por lo tanto, están invitados a participar y adelantar los cambios propuestos...

sábado, agosto 20, 2011

SPLC 2011

Con programa preliminar a partir de este domingo, el lunes y martes próximo se desarrollará en Munich la 15ª conferencia de Lineas de Producto Software (SPL, Software Product Lines). Un concepto fundamental en la construcción de software, una fuente de ideas para quienes lo construyen, tanto sea en grandes unidades económicas, donde sus conceptos deberían ser  irremplazables, como para unidades menores, donde deberían motivar líneas de investigación y trabajo más racionales.
Aunque hemos conversado más de una vez sobre su significado, la descripción de uno de sus tutoriales explica razonablemente su meta:
Product Line Engineering is a common approach to address a business with a family of related software products. Instead of having separated development projects for each product in the family, products are built using a shared set of core assets, such as reference architectures and common infrastructure and domain-specific components. Key drivers for PLE are the potential cost savings due to shared core assets, as well as new business opportunities by, for instance, supporting tight integration and improved interworking among members of the product family. 
 Estoy persuadido de que SPL y MDD recorren caminos convergentes y retroalimentados. Uno de los tutoriales que se desarrollarán, toca esta característica: "Leveraging Model Driven Engineering in Software Product Lines", desarrollado por  Bruce Trask and Angel Roman:
Model Driven Engineering (MDE) is a promising recent innovation in the software industry that has proven to work synergistically with Software Product Line Architectures (SPLA). It can provide the tools necessary to fully harness the power of Software Product Lines. The major players in the software industry including commercial companies such as IBM, Microsoft, standards bodies including the Object Management Group and leading Universities such as the ISIS group at Vanderbilt University are embracing this MDE/SPLA combination fully. IBM is spearheading the Eclipse Foundation including its MDE tools like the Eclipse Modeling Framework (EMF) and the Graphical Modeling Framework. Microsoft has also launched their Software Factories and DSL Toolkit into the MDE space. Top software groups such as the ISIS group at Vanderbilt are using these MDE techniques in combination with SPLAs for very complex systems. The Object Management Group is working on standardizing the various facets of MDE. All of these groups are capitalizing on the perfect storm of critical innovations today that allow such an approach to finally be viable. To further emphasize the timeliness of this technology is the complexity ceiling the software industry find itself facing wherein the platform technologies have increased far in advance of the language tools necessary to deal with them. This complexity ceiling is evident in today’s Software Product Lines.
 Invito a seguir sus sesiones, a solicitar sus presentaciones, y a tomar contacto con sus participantes. Estas conferencias anuales acercan el mejor material sobre el tema.

Información y seguimiento en el sitio de la conferencia.

domingo, abril 24, 2011

Otra compra en el mercado de ALM

Un mes antes que MKS, también Aldon cambia de dueños. En un mes, dos viejos competidores pasan a ser parte de la cartera de empresas que participan del mercado de ALM (application lifecycle management), pero con un alcance más general. Ahora es Rocket Software quien absorbe a otro actor de gran alcance en el manejo de administración de cambios en el iSeries. Parecería ser que los márgenes en el mercado del iSeries (y del ALM seguramente) han disminuído convirtiendo en inviables a productos de un sólo perfil...o por lo menos, más fáciles de tentar con un cheque. Un argumento más en favor de considerar a ALM como un commodity.
El anuncio en SystemI Network, y en la propia Rocket.
También a Rita Sanders la noticia pare caerle por sorpresa:

I stumbled onto the news when I went looking for details on Seagull Software, which I hadn't heard any news from in quite some time. The application modernization vendor's website reminded me that it, too, had been purchased by Rocket Software back in 2007, and is operating as Rocket Seagull, another Rocket Software business unit.
I chatted briefly on Friday with a Rocket Software spokesperson, and he said Rocket Software's growth is a question of the company building its product portfolio in four areas: business intelligence and analytics; storage, networks, and compliance; application development, integration, and modernization; and database servers and tools.

jueves, abril 21, 2011

PTC compra MKS

Otro cambio de manos en la industria del software: PTC compra MKS, la empresa canadiense dedicada a herramientas de manejo de ciclo de vida del software. MKS es (o fue) un actor importante en el mercado de iSeries (o AS400, o System i, o como se llame), a través de Implementer y otras herramientas asociadas. A su vez, Implementer fue un producto comprado a Silvon (1998), diseñador originario del producto. MKS con esa compra integró una cartera de productos orientados al soporte del  ciclo de vida de desarrollo de software, que fuera el núcleo de su actividad desde su inicio. Su desaparición (o absorción, para ser más exacto) concentra un poco más la industria, como viene sucediendo desde el 2000 aproximadamente.
Aunque de esto hace ya algunos años, he tenido contacto con la empresa, que heredó, con la compra a Silvon de Implementer, el producto de administración de cambios (MKS-CM Connector) para 2E (hoy CA 2E). Su cambio de propietario traerá cambios de estrategias y partidas en el personal (diseñadores, ingenieros, comerciales) que harán su futuro un poco más anónimo y genérico. Es que ALM es un mercado de commodities...
Para los seguidores de Plex y 2E, CM First, base de Webclient, soporta un producto de administración de cambios para el iSeries (Matchpoint) que también deberá reacomodar sus cargas ante el cambio de guardia de uno de sus competidores.

lunes, abril 04, 2011

Una librería de interés para usuarios de Plex

Roger Griffith comenzó la publicación de una librería muy interesante para usuarios de Plex. Una idea simple y práctica: una colección de acciones a nivel de plataforma, abiertas por variante. De esta forma, basta invocar una acción determinada, y ésta será cumplida según el lenguaje de implementación. En la Wiki de Plex.

domingo, agosto 29, 2010

El modelo de Eclipse + Plex... ¿+ Xtext?

Varios meses muy atareado. Vuelvo de dos semanas de vacaciones, y llega el momento de rematar el trabajo...Extendiendo dos modelos construídos con Plex, con una presentación basada en C++ y servicios llamados en iSeries-RPG400/RPGIV, para que puedan disponer una presentación Web. La parte Web, hecha con Webclient (ADC Austin), con su extensión Java/Javascript disparada a través del uso de Eclipse. Este es el segundo proyecto organizado fuera de CA usando Eclipse como un mediador para extender Plex (el primero, el open source encarado por Christopher Smith para usar las facilidades de test y depuración de Eclipse/java con Plex).
En fin, el proyecto funciona...A partir de los modelos diseñados para C++/RPG, creamos una variante Java-WebClient que separa el diseño de paneles (y reportes) en la variante, de tal forma que conviven en el mismo modelo dos paneles distintos; con sólo configurar una variante u otra, generamos paneles para cada lenguaje. La lógica la hemos desarrollado en la variante base (C++), usando metaoperaciones para separar las diferencias de implementación entre ambos lenguajes. Luego, el modelo declara en la variante Java-Web dos elementos: nueva herencia que indica qué tipo de paneles Web se construirán, y el lenguaje Java de implementación.Así, se genera distinto código según la variante configurada.
¿Cómo pasa el código de Plex a Eclipse? El código Java generado en Plex es tomado por scripts escritos en Ant y transferido a un proyecto JEE en Eclipse. El área de trabajo en Eclipse se compone de un proyecto Ant , uno Java, un servlet WebClient, y un proyecto Web (JEE). Por cada panel el proyecto java construye una función (servlet) que enlaza la presentación y los eventos interactivos con el código Javascript que ejecutará en tiempo real. El código javascript (Dojo + Json) está enlazado a plantillas tipo que son invocadas al indicarle al modelo que se hereda de determinados patrones Webclient.
Teóricamente, (y lo he puesto en práctica rudimentariamente) cada plantilla es factible de ser creada por el modelador. Mientras nos familiarizamos, nos hemos sujetado a utilizar las que están disponibles, modificando algunos aspectos de éstas, sea en las directivas de las plantillas o en las hojas de estilo asociadas.
El último paso es configurar los ficheros properties y adecuar el fichero de configuración de la aplicación Web (Web.xml), crear un paquete War, e implementarlo en Websphere (este paso resultó sorprendentemente más fácil de hacer de lo que esperaba).

Es decir, Plex es extendido en este caso agregando enteramente el código Ajax en un proyecto Eclipse, y asociándolo con el código Plex java mediante un servlet. Así, no sólo extendemos Plex a aplicaciones Web que se basan en Ajax, sino que podemos usar las facilidades de testeo y depuración de Eclipse: en una sesión normal, testeo el código java directamente en el ambiente Eclipse, y, usando Tomcat o Jetty, el código Web. Si hay diferencias de comportamiento, a revisar...(Consola de Java, Log de actividad del servlet).

Generalizando, la utilización de Eclipse por distintos grupos de desarrollos de Plex, puntualiza la potencia disponible a partir de esta combinación. Existen infinitos recursos disponibles en Eclipse, particularmente el Eclipse Modeling Framework, y las extensiones que lo utilizan (UML2, OCL). Aquí se ha mencionado a MODISCO (Model Discovery), como un elemento de mucho interés que debería ser seguido con atención. Y otro más debería ser seguido con máximo interés: Xtext, que por su versatilidad podría ser usado para extender Plex de muy distintas maneras.
Es mi parecer, y ojalá estuviera en mis posibilidades explorarlo, que es posible extender Plex para muy distintos alcances, entre ellos algunos que en más de una oportunidad fueron desestimados basados en el alcance estricto de sus generadores.
A modo de confirmación, dos discusiones (1,2) de finales de este mes muestran que es posible incluír IPhone o IPad entre las aplicaciones generables a partir de modelos Plex.

jueves, enero 21, 2010

...Y para completar, ThoughtWorks habla de tendencias


Publicado por InfoQ, ThougthWorks, la empresa con la que colabora Martin Fowler, publica una evaluación de las tendencias en tecnología en cuatro áreas: técnicas, herramientas, lenguajes, y plataformas. Asigna una prioridad a cada uno de los ítems destacados en este cuadro: Adoptar (rojo), probar (amarillo), investigar (verde), postergar/esperar (azul).
Seguramente se puede disentir en algún ítem, pero en general la tendencia es claramente orientada hacia la agilidad, el desarrollo distribuído, la operación de lenguajes a un nivel más abstracto (DSLs) y el predominio de la arquitectura basada en la web.
La noticia en InfoQ aquí, y el informe, aquí.

domingo, mayo 11, 2008

Bye, Bye COM: Estándares y Empresa

...otro Requiem, por COM (escrito por Ángel López). Un buen resúmen de la transición de COM a .NET, que da una idea de cómo mapear las relaciones entre las dos tecnologías. Sin embargo, quisiera agregar dos palabras al tema, que hacen a un asunto más general: el soporte de las tecnologías que son reemplazadas por nuevas versiones.
En distintas ocasiones, muchas más de las que se pudiera suponer, me he visto obligado a mantener código o arquitecturas que fueron quedando si no obsoletas, al menos demoradas; es decir, desarrollos con los que su propietario se siente conforme y no ve la necesidad de evolucionarlo radicalmente, adoptando un nuevo paradigma que le obligue a reescribir o reestructurar código por la simple razón de que la "nueva novedad" lo representa de otra manera. Éste es un fenómeno que en algunas plataformas puede degenerar en real atraso (1), pero que es absolutamente legítimo: una inversión satisfactoria no debería quedar descartada simplemente porque no encaja ya con la evolución de su propia plataforma nativa.
En el caso de la evolución de COM a .NET, así como en el paso de Visual Studio 6.0 a 2005 0 2008, el problema se plantea en el campo del soporte de documentación; quizá en cuanto a compatibilidad del código el problema no sea muy grande, pero es complicado si se requiere mantener una aplicación de VS 6 consultando MSDN; lo más que frecuente es que se hayan perdido las referencias de detalle, y que no se encuentren sino con grandes dificultades las descripciones de las versiones "antiguas" que se desea mantener. La única garantía es conservar bajo llave una copia de la documentación original, mas la historia de modificaciones, porque obtenerlo en la guía en línea puede ser casi imposible.
Este patrón se extiende al seguimiento de problemas, que una y otra vez conduce a callejones sin salida: páginas que ya no existen, aún para temas que debieran estar cercanos, pero que quizá hayan sido enviados a vía muerta en el curso del desarrollo del nuevo producto.
En más de una ocasión algún colega me explicó esto como una política disuasiva de Microsoft, para inducir a la masa de desarrolladores a adoptar las nuevas versiones de sus productos. Sin embargo, tengo la impresión de que, a nivel decisorio, esto produce otro efecto: la observación de una política de soporte del usuario descuidada y tiránica. Bastante alejada de la que he observado por muchos años sobre el AS400 y otros ambientes de IBM, y también, aunque no lo he requerido probar muy a fondo, con el caso del soporte de Sun sobre la plataforma Java.

Justamente, la conveniencia de no estar sujeto a las políticas de un proveedor, es lo que da al diseño guiado por modelos (MDA/MDD) un atractivo especial: la posibilidad de mantener el patrimonio de diseño a un mayor nivel de abstracción, nos otorga libertad de movimientos frente a proveedores y plataformas.

(1) Las facilidades de mantenimiento de código obsoleto -legacy- sobre el AS400 ;-) han llevado a muchas empresas a no innovar por años, dado que el código de su plataforma antigua sigue ejecutando sobre las nuevas versiones). Recuerdo algún caso de una distancia entre código ejecutado y sistema operativo de más de diez años.

miércoles, abril 23, 2008

Brad Appleton sobre Software Product Lines

Brad Appleton, que es una autoridad en administración de configuración y versionamiento, ha comenzado a enfocarse en Software Product Lines, con la particularidad de aportar el enfoque de la configuración, que debería ser un punto importante del problema. En el último tiempo ha dedicado al menos dos artículos en su blog:
Software Product-Line Architecture and Product-Families, dedicado a presentar brevemente el tema, pero apuntando al aspecto de la configuración.
Commonality and Variability Management, dedicado a presentar un aspecto central, el manejo de los aspectos comunes y las variaciones, con referencias a algunos papeles que discuten el problema en detalle.
Hoy simplemente quería destacar la participación de Appleton. En otro momento volveremos sobre el tema, como seguramente lo hará él mismo: Unir SPL con SCM es algo que se produce naturalmente.

sábado, febrero 16, 2008

Integración contínua (Continuous Integration)

Aplicado a Plex, un artículo en curso de elaboración en la wiki toma uno de los puntos de particular interés no sólo en este caso, sino en general en las distintas variantes de generación de código a partir de modelos o directivas de alto nivel. El artículo parte del papel escrito por Martin Fowler sobre Integración Contínua, y examina lo que Plex cubre, y lo que le falta para lograr el objetivo: un equipo de trabajo desarrollando cada uno su parte, e integrándola a un repositorio común, con un proceso definido de resolución de conflictos, compilación, testeo, implementación (Any individual developer's work is only a few hours away from a shared project state and can be integrated back into that state in minutes. Any integration errors are found rapidly and can be fixed rapidly.This contrast isn't the result of an expensive and complex tool. The essence of it lies in the simple practice of everyone on the team integrating frequently, usually daily, against a controlled source code repository).
Las observaciones del autor del artículo (John Bell) apuntan a la necesidad de extender la integración del proceso de construcción de tal forma que sea posible tener control sobre todos los elementos participantes del proceso, y de todos los estados hasta su implementación. Difiero con Bell en cuanto a que es posible tomar más control del proceso partiendo de los recursos que hoy se disponen. Estoy de acuerdo en que este mayor control no está incluído en el producto mismo.
Estos aspectos son los que, en términos generales, hacen interesantes las ideas de Jack Greenfield sobre su Software Factory, más allá de su final concreción. Creo que existen más ideas estimulantes en la descripción genérica de su idea, que en cómo se la ha implementado.
Estaremos esperando el desarrollo ulterior del artículo en la wiki...

viernes, agosto 10, 2007

Angel "Java" López y AJGenesis

Angel López, a quien leo habitualmente con mi Google Reader, está desarrollando varios artículos sobre su emprendimiento AJGenesis, al que tipifica como generador de aplicaciones. Su idea es muy familiar para el universo de desarrollo basado en modelos, en términos generales. Ángel establece estas premisas para crear un generador de código:

¿Qué le pediríamos entonces, a un generador de código? Gran pregunta, intentemos algunas respuestas:
- Que genere código que hubiéramos generado nosotros: si genera código inentendible, estamos en mal camino. Ese es el problema de varios wizards y demás herramientas: hacen lo que ellas quieren, no lo que nosotros queremos.
- Que genere cualquier texto que nos imaginemos que necesitamos: no basta que genere lo que el generador de código decida. Debe ser lo bastante flexible, para que podamos generar lo que querramos: desde una simple entidad, a un mapeo de Hibernate, desde una página web, hasta un mensaje de Windows Communication Foundation, desde el archivo de configuración de Struts, hasta el interminable ejb-jar.xml que nos pide el JBoss versión 17.84 que tengamos el año que viene.
- Que parta de un modelo simple, o compuesto, pero libre: no que parta de una base de datos, y sólo genere entidades y mapeadores. Necesitamos más flexibilidad. Ya vimos los que nos pasa en la vida real: todo cambia, necesitamos multitud de artefactos. Cualquier inversión en un generador de código que no permita incluir un modelo libre, me parece riesgosa. Creo que como prueba ácida, le pediría a un generador, que permita, desde un modelo libre, generar todo programa "Hello, World" que se nos ocurra. Si una herramienta no puede obtener ese resultado, estamos en el horno.
- Que permita escribir los templates, plantillas que querramos, y generarlas en grupo, en serie, en paralelo, o como querramos. Tanto el orden y enumeración de artefactos a generar, como las plantillas, como la toma de decisiones (generar de tal forma o no), debe estar bajo control del utilitario, y bajo control nuestro.
- Que permita generar desde un modelo, al cambiarlo, de forma fácil: si para generar los artefactos, por un cambio en el modelo, hay que dar cuarenta pasos, de nuevo estamos en problema. Compilar hoy es una tecla. Lo mismo debe ser la generación de código.

AJGenesis no tiene por ahora documentación, pero sí se puede tener una idea de su alcance a través de los ejemplos de uso en construcción, y los comentarios a éstos:
Quisiera en este artículo, comentar cómo funciona y se construye, uno de esos ejemplos. Permítanme primero repasar algo sobre el proyecto.
Está escrito en Visual Basic .NET 1.x, y es código abierto, pues viene con una licencia tipo BSD, que permite utilizarlo en cualquier proyecto que quieran. Se puede usar como librería, invocado desde nuestro proyecto, se puede invocar desde la línea de comando, o puede ser utilizado desde el poderoso NAnt (esto último me permitió organizar mejor las tareas que realiza el generador de código).
En la página del proyecto (y en el proyecto mismo) hay varios ejemplos, que generan código desde un modelo, usando plantillas. Los ejemplos generan código PHP, Java, JSP, VB.NET, C#, ASP.NET, y hasta scripts de base de datos y procedimientos almacenados. Quisiera destacar dos puntos:
- El modelo del que parte es totalmente definible por el usuario
- Las tareas y plantillas a aplicar son totalmente programables y controlables
Esto lo diferencia de otros generadores. Podemos construirnos nuestro propio modelo, y sus propias plantillas, para generar los artefactos de texto que prefiera. Otros sistemas parten de la base de datos, y sólo generan un grupo de artefactos de textos predefinidos (por ejemplo, POJOs, plain old java objects, o DAOs, Data Access Objects). Pero con AjGenesis puede generar el artefacto de texto que se nos ocurra.

[AJGenesis]Se basa en:

- Tener un modelo totalmente libre, que hoy está serializado en archivos XML.

- Plantillas que generan artefactos de texto

- Tareas programables, que cargan los modelos, ejecutan lo que uno quiera, y son invocables desde programas nuestros, desde la línea de comando, o desde un utilitario como el NAnt.

Entonces, se arma uno o varios modelos, que expresan lo que Uds quieran de su sistema, de forma independiente de la plataforma, y luego, adosándole modelos (uno o varios, de nuevo libres), que indican la tecnología a usar, y escribiendo las plantillas que Uds. quieran, generan lo que se les ocurra.


Ángel también explica su concepto a través de lo que No desea de un generador:

Primero: el generador sólo genera lo que él quiere. Típico de generadores "profesionales", que sólo producen lo que los creadores del generador imaginaron. Es difícil, y en algunos casos, imposible, extenderlo más allá de lo que hacen actualmente. Variante de esto: sólo genera código para entidades, o sólo para una tecnología, o sólo para EJB, o sólo para.... y puedo seguir. Claro, la herramienta soluciona el problema, y al comienzo estamos chochos de haberla encontrado. Pero advertiría desde ahora, que encontrarán limitaciones.
Segundo: el generador sólo parte de un modelo predeterminado (típicamente de una estructura de tablas de base de datos). Creo haberlos convencido que hay más bajo el sol que generar entidades y mapeadores. Hay colecciones inmensas de artefactos que tenemos que generar en cualquier sistema no trivial. Y seguirán apareciendo, por lo menos, en el futuro cercano. Si el generador sólo está pensado para partir de un modelo determinado, nos limita en lo que podemos pedirle. La historia nos ha mostrado, que siempre necesitamos algo más.
Tercero: el generador es cerrado, no se puede aprovechar e integrar en sistemas nuestros, o no entrega el código de base, o no permite armar plantillas y demás auxiliares.
Puedo seguir enumerando problemas. Mencionemos uno más: hay quien menciona que utilizó generadores de código, pero sólo lo usa para generar el código inicial de un sistema, y luego ya modifica el código generado, y no puede regenerar sin perder los cambios que hizo. Sugerencia: pongan en claro qué artefactos se generan automáticamente, y cuáles son los generados manualmente. Cuando Uds compilan un ejecutable, y necesitan cambiar un algoritmo, no van y cambian los bits del .exe. No: van al modelo, al lenguaje de programación, lo cambian y compilan de nuevo. Lo mismo deberíamos conseguir algún día, con generación de código. Como no podemos generar todo, debemos tener la disciplina de decidir cuáles artefactos son generados por el utilitario, y cuáles son los artefactos nuestros. En algunos casos, en los repositorios de código, en un CVS, cuando se trabaja en grupo, NO SE GUARDA lo generado automáticamente: solamente se guarda el modelo, y lo generado manualmente. Esto refuerza la responsabilidad de no tocar ese código automático: cualquier cambio manual que hagamos sobre ellos, no se guardará en el repositorio común.

(...) De alguna forma, un generador de código ideal no estará atado a una tecnología. Siempre habrá alguna "better mousetrap", siempre alguien inventará alguna nueva forma de hacer algo, siempre habrá un ruso con insomnio, o un hindú sin novia, que no tiene otra cosa que hacer que crear algo nuevo, ya sea en forma de librería, framework, patrón, o estilo arquitectónico. Un generador de código debe ser agnóstico de la tecnología, de las modas, de las soluciones actuales y futuras.

El generador de código que adoptemos, debe poder adaptarse a lo que querramos hoy y mañana y pasado mañana. La estrategia es: no importa la tecnología, el patrón o el framework que aparezca, nuestro generador deberá aprovecharse de lo que surja.

Estas premisas son familiares. Ángel propone una vía de trabajo que es la preocupación de la actual generación de creadores e investigadores de herramientas para el desarrollo de software "industrial". (Otra vez habrá que explicar qué significa esto?). Me interesa, y aunque mi disponibilidad de tiempo es menor que cero, trataré de seguirlo. Me interesa en la medida que escucho "plantillas", "scripts", "modelos"...
Diría que es importante no perder de vista que cuando hablamos de generadores hoy, no debe pensarse en las herramientas de la década del 80, rígidas y de alcance limitado. Tanto en el propósito como en la existencia real de las múltiples herramientas existentes, es posible ser expresivo, tener control, y soportar un ciclo de desarrollo más o menos completo.
Construír una herramienta es tarea de un equipo de desarrollo, probablemente más o menos numeroso. Seguiré con interés su propuesta.
Con Ángel hemos hablado, en cierta forma. Esta es mi primera nota sobre su trabajo, porque, si bien hace varios días me dedicó dos palabras, esta mañana de sábado es mi primera disponible (esto no le importa a nadie excepto a Ángel en todo caso). Le escribiré este fin de semana, porque debo agradecerle su elogio, y porque quiero conocer más su proyecto.
Quisiera decir que un aspecto importante de su trabajo, como es el caso de otros que trato de seguir, es el interés en progresar en la elaboración de herramientas de mayor flexibilidad y alcance en la generación de código.
En uno de sus artículos, Emilio, un desarrollador español, le apunta que le falta a Ángel referirse a MDA como sustento de su elaboración. El apunte es pertinente en términos generales, si queremos hablar de fundamentación de las condiciones de desarrollo de un generador. Pero muy en parte, porque MDA implica un estándar más o menos determinado (UML, OCL, un esquema definido de transformaciones). AJGenesis no parece estar en este marco. Y por lo demás, el estándar de la OMG está abierto y en evolución, y tiene sus puntos débiles: la expresividad de UML para desarrollar el detalle del comportamiento de un modelo quizá alcance, pero quizá también requiera un trabajo excesivo. En este sentido, siempre me pareció mejor la vieja solución de James Martin (diagramas de acción), que es la que empleo con Plex: un metalenguaje que describa en términos abstractos las acciones, suficientemente flexible y suficientemente detallable como para expresar en un párrafo lo que de otra manera puede significar trabajar duro en diagramas de actividad y de estados. Otro aspecto que no veo todavía manejado, y que es un desafío en muchos casos, es el versionamiento. MDA trata bien la variación por plataforma, pero no veo muy bien expresado el manejo de versión, salvo que no sea el abrir un nuevo modelo para cada versión requerida. Y otro aspecto, puntualizado correctamente por Greenfield con su Software Factory, es el seguimiento y mantenimiento del conjunto de dependencias de un proyecto.
En fin, el problema está abierto, y muchos, como Ángel, lo atacan con nuevas y mejoradas ideas y herramientas. Quiero mencionar de nuevo a Emilio, miembro desconocido para mí de una empresa española (que tampoco conocía) que trabaja con MDA: es interesante seguir el laboratorio que existe en algunas universidades españolas sobre este tipo de proyectos, tanto en Málaga, como en Alicante, como en Valencia, para mencionar a quienes sigo más de cerca.

lunes, mayo 21, 2007

Más sobre Aldon

IT Jungle publica un reportaje a David McGovern, de Marlin Equity, donde responde a preguntas sobre la empresa (Marlin) y sobre los planes acerca de Aldon. Si Aldon es buen negocio y da dividendos, progresará...
Marlin is interested in acquiring mature businesses that we think have strong management teams and are in consolidating industries. We look at businesses where revenues are driven either by having a mission-critical product or system, or brand power, or another defensible position. Despite the technology background that I have and the deals that we have done to date, we are focusing on three verticals. Technology will be the broadest and probably the most frequent area, but we are about to sign up a consumer deal and we are also focusing on healthcare businesses. Generally speaking, we are industry agnostic, so long as the company meets a certain profile for us.
(...) We expect to build out with Aldon in a very similar way that we have built out in ERP software. We feel very strongly that the iSeries portion of the market is not going anywhere any time soon[1], and more particularly around the product set, Aldon has a very dominant or strong position within the iSeries, and they also have products that surround that, which positions the company well for growth and which are not just geared for iSeries customers only. There's a lot of opportunity to sell into Unix, Linux, and Windows environments where the customer might be iSeries-centric, but also operates these other environments. There is also a large installed base of iSeries customers where you can upsell additional products.
[1] Luego corrije: lo que quiso decir:
[Timothy Prickett Morgan, el autor del reportaje]: That has been my experience too at IT Jungle. But can I give Marlin some advice? Can we not say that the System i or iSeries market is not going anywhere? There are obviously two different connotations to that phrase. . . . and this is how my kids are going to get to college.

David McGovern: We certainly agree that the iSeries market is not going away. We think that the iSeries market is going somewhere.

domingo, mayo 13, 2007

Manejo de Configuración e ISO9001

Sigo ordenando notas antiguas: este artículo fue publicado también en Methods & Tools, en su número Summer 1999. Escrito por Robert Bamford y William J. Deibler II, de SSQC, compara los puntos de vista sobre Manejo de Configuración del software (CM) de IEEE (Institute of Electrical and Electronics Engineers), ISO (International Organisation for Standardisation), y SEI(Software Engineering Institute). Partes 1, 2 y 3. Buen artículo y excelente bibliografía.

Una guía para el testeo de paneles

Limpiando notas antiguas, encuentro mucha información de interés que pasaré aquí para no perder (y a del.icio.us). En Methods & Tools, destaco un artículo sobre testeo de GUI's(1) , (2) y (3)(año 2000), así como el autor, Barry Dorgan, que deja disponibles otros artículos en su página. Dorgan integra el grupo Software.Testing (1) y (2).
Lateralmente, de la información de Software.Testing, dos o tres sitios vinculados a testeo de software para agendar, especialmente TestingFaqs, y Software Configuration Management FAQ de Dave Eaton.