lunes, 30 de octubre de 2017

Arquitectura de software - Parte 4 (fin)

¡Hola a todos!

Para continuar con la cuarta y última parte sobre Arquitectura de Software me centraré en los temas Arquitecturas Orientadas a Servicios y Evaluaciones de Arquitecturas.

Tiempo de lectura estimado: 8-9 minutos.

Antes de comenzar, me gustaría recordar que en la parte anterior (parte 3) sobre Arquitectura de Software vimos Representación de la Arquitectura (Viewpoints, Views, Perspectives, SAD) y Patrones de Arquitectura (Contexto + Problema  + Solución, ej. Broker). Sigamos ahora con estos dos últimos temas: SOA y Evaluaciones.

Arquitectura Orientada a Servicios

La puesta en práctica del paradigma Service Oriented Computing (SOC) requiere la implementación de una Service Oriented Architecture (SOA).

SOC es un paradigma de computación que utiliza servicios como elementos fundamentales para dar soporte al desarrollo rápido y de bajo costo, de aplicaciones distribuidas en ambientes heterogéneos.

SOA es una forma lógica de diseñar un sistema de software para proveer servicios a usuarios finales, aplicaciones u otros servicios, a través de interfaces públicas que pueden ser descubiertas.
Algunas características de este tipo de arquitecturas son:
  • Los servicios se mapean a funcionalidades de negocio
  • Cada servicio tiene una interfaz bien definida que le permite ser publicado, descubierto e invocado
  • Una organización puede publicar sus servicios de forma externa, para interactuar con sus socios de negocio, o de forma interna a la organización
  • Debe cumplir con principios tales como Contratos estandarizados, Abstracción, Reusabilidad, Autonomía

viernes, 20 de octubre de 2017

Arquitectura de software - Parte 3

¡Hola a todos!

Para continuar con la tercera (y penúltima) parte sobre Arquitectura de Software me centraté en la Representación de la Arquitectura y Patrones de Arquitectura.

Tiempo de lectura estimado: 8-9 minutos.

Antes de comenzar, me gustaría recordar que en la parte anterior (parte 2) sobre Arquitectura de Software vimos cómo debería ser nuestro Proceso de definición de la Arquitectura y los distintos Atributos de calidad. Sigamos ahora con los temas Representación y Patrones.

Representación de la arquitectura

La Representación de la arquitectura se basa en los conceptos de Puntos de vista (Viewpoints) y Vistas (Views). La motivación de realizar una representación de la arquitectura basada en estos dos conceptos es que no es posible capturar los aspectos funcionales y propiedades de calidad de un sistema complejo en un modelo simple, comprensible y de valor para todos los stakeholders. Un sistema complejo es más efectivo describirlo utilizando un conjunto de vistas interrelacionadas que lo ilustren colectivamente.

Una view es una representación de uno o más aspectos estructurales de una arquitectura que ilustra como la arquitectura lleva adelante uno o más concerns de uno o más stakeholders.
Un viewpoint es una colección de patrones, plantillas y convenciones para la construcción de una vista.

viernes, 13 de octubre de 2017

Arquitectura de software - Parte 2

¡Hola a todos!

Para continuar con la segunda parte sobre Arquitectura de Software me centraté en el Proceso de definición y los distintos Atributos de calidad de la Arquitectura.

Tiempo de lectura estimado: 5-6 minutos.

Antes de comenzar, me gustaría recordar que en la primer parte sobre Arquitectura de Software vimos como introducción a la temática una definición de arquitectura, su propósito, quienes la influencian y finalmente el rol del arquitecto. Sigamos ahora con el proceso de definición de la arquitectura y sus atributos de calidad.

El Proceso de Definición de la Arquitectura es el proceso en el que deberíamos capturar las necesidades de los stakeholders, diseñar una arquitectura que cumpla con esas necesidades y describirla claramente sin ambigüedades.

Como arquitectos deberíamos resolver qué es significativo para la arquitectura y que no. Podríamos decir que algo es significativo para la arquitectura si tiene un impacto en la estructura del sistema o en las propiedades de calidad más importantes.

viernes, 6 de octubre de 2017

Arquitectura de software - Parte 1

¡Hola a todos!

Tal como mencioné en el post anterior hoy comenzaré con un acercamiento al tema Arquitectura de software. Como introducción voy a compartir una definición de arquitectura, siguiendo por cual es su propósito, quienes la influencian y finalmente el rol del arquitecto.

Tiempo de lectura estimado: 5-6 minutos.

Una de las definiciones modernas de arquitectura de software y que a mi entender es simple y clara es la del Software Engineering Institute (SEI) de la Universidad de Carnegie-Mellon “...es la estructura o estructuras del sistema, que comprende elementos de software, las propiedades visibles externamente de dichos elementos y la relación entre ellos”, basada en el libro Software Architecture in Practice.
Desde una visión no tan conceptual, se puede decir que la arquitectura es estructura y comportamiento, se enfoca en elementos significativos o relevantes, se presenta a un alto nivel de abstracción, está presente en cualquier sistema y balancea necesidades de los involucrados.
Su propósito es comprender el sistema y organizar el desarrollo, fomentar la reutilización de componentes y facilitar la evolución del sistema

Generalmente, la arquitectura se ve influenciada por distintos factores que afectan significativamente tanto su definición como su mantenimiento, algunos de ellos se pueden clasificar en:
  • los stakeholders (involucrados)
  • la organización que desarrolla el sistema
  • el ambiente tecnológico 
  • la experiencia del arquitecto 

sábado, 30 de septiembre de 2017

Temáticas de Ingeniería de Software

¡Hola a todos!

Durante los próximos meses iré compartiendo algunos resúmenes sobre ciertas temáticas de la Ingeniería de Software. A fines del año pasado terminé con algunos cursos de actualización y posgrado en la Facultad de Ingeniería (UdelaR) en el marco de la Especialización en Ingeniería de Software que cursé durante un período de dos años y algunos meses, y de cada uno de esos cursos hay información valiosa que me gustaría compartir, difundir y discutir.

Fueron varios cursos sobre distintos temas tales como arquitectura, testing/pruebas, requisitos, diseño, construcción, mantenimiento, entre otros. Para comenzar, dejaré un resumen en tres o quizás cuatro etapas del curso Arquitectura de Software. Este curso me resultó muy interesante porque trata un área de la Ing. de SW en la cual no se hace foco durante la carrera de grado, sin embargo es algo que a nivel laboral debemos tenerlo muy en cuenta.

Comenzaré con una introducción sobre la arquitectura, planteando cuales serían sus dominios a nivel empresarial, una definición, su propósito, quienes la influencian y el rol del arquitecto. Luego comentaré en qué consiste el proceso de definición de la arquitectura, los distintos atributos de calidad que deberíamos evaluar y los distintos puntos de vista y patrones de la arquitectura. Y para finalizar trataré brevemente algunos puntos interesantes como arquitectura orientada a servicios y métodos de evaluación de arquitecturas.

La semana próxima estaré publicando la parte 1 de esta primer temática. Espero que este ciclo les resulte interesante.

¡Hasta la próxima!

jueves, 31 de agosto de 2017

Genexus y su participación en eventos de tecnología

¡Hola a todos!

A diario, utilizo a nivel profesional una variedad de herramientas que podrían agruparse en categorías como gestión, desarrollo, comunicación, etc. Genexus (@Genexus) es una de ellas y es una de las más importantes, pues es la principal herramienta de desarrollo en los proyectos en los que participo habitualmente. Es por eso que suelo estar atento a los eventos que Genexus organiza o bien en los que participa colaborativamente. En este artículo voy a repasar algunos de estos eventos, algunas de sus características y aprovecharé a compartir un par de resúmenes de dos charlas que formaron parte de dos eventos recientes.

Tiempo de lectura estimado: 5-6 minutos.

Antes de adentrarme en los distintos eventos que quiero comentar, vale aclarar que voy a referirme a eventos a nivel nacional (Uruguay) más allá de que hace ya varios años Genexus también participa a nivel internacional, principalmente con el reconocido Encuentro Genexus. Pueden ver aquí una lista de eventos pasados, en donde hay referencias que evidencian la presencia de Genexus en otros países tales como Chile, Argentina, Brasil, España, Japón, entre otros.

lunes, 31 de julio de 2017

Migraciones Win de modelos #GeneXus

¡Hola a todos!

En este artículo quiero compartir algunas lecciones aprendidas de dos migraciones Win (también con componentes web) de Genexus 8 y 9 a Evolution en las que he participado en este último tiempo. Aunque algunas son lecciones sobre aspectos técnicos, me interesan tembién otros aspectos que quizás puedan verse cómo reflexiones y/o críticas al uso de KBs (Knowledge Bases) GeneXus Win y sus "consecuencias" en la actualidad.

Tiempo de lectura estimado: 10-12 minutos.

viernes, 30 de junio de 2017

Testing ágil, exploratorio y en el proceso de desarrollo

¡Hola a todos!

En esta oportunidad quisiera compartir con ustedes ciertos temas sobre Testing de Software y de paso dejarles algunas referencias que considero muy interesantes sobre la temática.

Tiempo de lectura estimado: 6-8 minutos.

El pasado mes de Mayo, tuvo lugar en mi país (Uruguay) un evento sobre testing de software llamado TestingUy. Es un evento anual muy recomendable en el que se realizan talleres y charlas. Es organizado por las empresas Abstracta (@abstractaUS), Genexus Consulting (@GXConsulting), Centro de Ensayos de Software (CES @ces_com_uy) e Infragistics (@infragistics) y además hay varias empresas que financian y apoyan el evento, incluso este año tuvo el apoyo de la ANII para poder contar con la presencia del reconocido Michael Bolton (@michaelbolton y su colega James Bach son conocidos por ser impulsores de la metodología Rapid Software Testing). Si quieren conocer más sobre el evento les recomiendo darle una mirada al sitio www.testinguy.org.
También pueden ver el sitio de Federico Toledo https://www.federico-toledo.com (@fltoledo) que además de tener un montón de posts interesantes sobre testing publicó uno especial luego del evento con un resumen del curso de RST que brindó Bolton cuando estuvo en nuestro país con motivo del evento.

viernes, 26 de mayo de 2017

Reflexiones después de WannaCry

Mucho se ha hablado de WannaCry, el virus informático que dos semanas atrás sorprendió al mundo con un ataque masivo. Para quienes aún no están al tanto, WannaCry es un tipo de virus conocido como ransomware, que consiste en un software malicioso que de alguna manera bloquea el acceso a datos/archivos para luego pedir rescate comúnmente a cambio de dinero (en el caso WannaCry solicitaban bitcoins).

Como dije al comienzo, este caso ya ha sido bastante comentado, por lo que no entraré en detalles de este tipo de virus ni tampoco de éste virus en particular, pues para eso les recomiendo leer el post WannaCry uno de los ataques de ransomware más masivos de @spamloco que explica claramente en qué consistió e incluso brinda referencias interesantes como la de @chemaalonso de Telefónica.

sábado, 29 de abril de 2017

Tomando nota de una lectura recomendada sobre Warren Buffett

Hace algunos días, a comienzos de Abril "me llegó" una lectura recomendada a través de twitter sobre Warren Buffett (inversor y empresario estadounidense) que es breve pero sin desperdicio y desde ya la recomiendo leer Warren Buffett y su ley de 2 pasos para decir ‘no’ a casi todo. Lo interesante del artículo es que menciona algunos aspectos importantes en lo que respecta a la toma de decisiones de nuestro día a día, tanto en lo personal como en lo laboral. El artículo me llegó a través de un retweet de @njodal  (Nicolás Jodal, GeneXus CEO, al cual sigo en twitter desde hace un buen tiempo y también recomiendo seguirlo, pues siempre postea cosas interesantes) y de un post originario de @fernandomontans (Fernando Montans, Genexus España).

El artículo comienza con la frase de Warren Buffett No puedes mantener el control de tu tiempo sin decir que no. No debes dejar que la gente anteponga su orden del día a tu vida. Bien podría ser una frase a tener impresa y puesta a la vista en una cartelera de cualquier proyecto de software, ya que permanentemente se debe gestionar la lista de requisitos con los clientes. Naturalmente los clientes pretenden ir actualizando su lista de requisitos casi en tiempo real durante proyectos que generalmente distan varios meses entre su inicio y fin, por lo que siempre se tienen que estar negociando los SI y los NO para cumplir con los objetivos del proyecto. Desde un extremo, ya sea que se esté gestionando un proyecto con la metodología propuesta por PMI se preven procesos como el Control del Alcance (que es un proceso que forma parte de los Procesos de Gestión del Alcance) y el sistema de Control de Cambios para que el proyecto no se desvíe demasiado. En el otro extremo, si se está gestionando un proyecto con una metodología ágil como Scrum (una de las metodologías ágiles más utilizadas) también se tiene en cuenta la gestión de los requisitos a través de la priorización del Product backlog y la gestión permanente del mismo con el Cliente.

sábado, 4 de marzo de 2017

Cifrado Triple DES (3DES) en Java desde Genexus

¡Hola a todos!

Hace ya un tiempo tuve la nececidad de implementar la comunicación con una pasarela de pagos para un cliente que quería realizar ventas desde su sitio web. Una de las exigencias en cuanto a seguridad al momento de consumir los servicios web era el encriptado de los datos con el alogoritmo de cifrados Triple DES.
En ese momento, los desarrollos para ese cliente estaban hechos en GX9 (Dev. U7 - Java U6, actualmente está en Evolution) y por lo tanto no había una solución nativa para resolver el tema de la encriptación con ese algoritmo.
La solución entonces fuer desarrollar la encriptación y desencriptación directamente en java y luego utilizar esa clase desde genexus como una clase externa.

La opción que se utilizó del algoritmo de cifrado triple DES consiste basicamente en tener un mensaje a encriptar/desencriptar, una clave compartida y un vector de inicialización compartido. A partir de la combinación de estos tres datos se obtiene el texto encriptado/desencriptado que se necesita.

lunes, 6 de febrero de 2017

Consumir Web Service Seguro NO Genexus

¡Hola a todos!

En estos últimos años he participado (y lo sigo haciendo) en varios proyectos que consisten en adaptar sistemas de facturación ya operativos a las exigencias de e-factura que impulsó DGI (Dirección General Impositiva) en nuestro país.
DGI expone Web Services a través de los cuales se debe enviar on line cierta información referente a la facturación de la empresa. En cuanto a la comunicación con estos Web Services, hemos trabajado con un socio de negocios que se encarga de resolver esa problemática. Lo positivo de esto es que este sistema (middleware para nosotros) nos brinda distintas alternativas de comunicación con ellos, lo que nos ha permitido optar entre ellas según las necesidades de nuestros clientes.

Entonces, yendo a la problemática que quisiera compartir, en uno de nuestros clientes hemos tenido que encontrar una solución al consumo de WS Seguro desde Genexus 9, generando Java Web, desplegando la aplicación en un Tomcat 6 y utilizando BD Postgres (tener en cuenta que queremos consumir un WS Seguro NO GENEXUS).

Las alternativas que tenemos son servicios web SOAP o REST, en ambos casos utilizando Certificado + Usuario y Contraseña.

lunes, 23 de enero de 2017

Problemas con Reorganizaciones

¡Hola a todos!

Recientemente he tenido que trabajar con una KB a la que debía adaptar su módulo de facturación para cumplir con los requisitos de factura electrónica (e-factura). Más allá de algunos problemas técnicos que tuvimos para consumir los Web Services Seguros, nos encontramos con que las Reorg no se podían hacer desde Genexus. Estabamos trabajando con Genexus 9 U7, generando Java con U5 (VM Sun 1.6) y con Postgres 9.
A continuación dejo un resumen de los problemas, las distintas alternativas que fueron probadas y la solución alcanzada. Este es uno de los casos en que por distintas razones no fue posible ser exaustivos en las pruebas, pero de todas maneras llegamos a una solución, así que igualmente puede resultar útil la experiencia.

jueves, 19 de enero de 2017

Incorporando Captcha a una aplicación con Genexus

¡Hola a todos!

Algo no despreciable que aporta a la seguridad en pantallas que están expuestas en internet es la incorporación de Captcha. Más allá de que no es la solución para evitar intrusos o spam, les dificulta un poco la tarea.

Por ejemplo, un uso común puede ser en formularios en los que se solicitan datos o páginas en las que se permite publicar comentarios.

En nuestro caso, necesitabamos que el usuario ingresara ciertos datos para luego mostrarle un pdf con determinada información. Para eso recurrimos al User Control Captcha, que puede descargarse del Marketplace de Genexus.




Por las dudas, aquí dejo el enlace con los pasos para instalar UCs:
http://wiki.genexus.com/commwiki/servlet/wiki?5920,HowTo%3A+Installing+User+Controls

Habiendo instalado el UC y yendo a la implementación... Al agregar el control al web panel, éste mostrará en pantalla tres elementos:
- una imagen
- un enlace para renovar la imagen
- y el campo input que permite escribir el texto
Cuando se confirman los datos, el control permite consultar en una propiedad si el texto ingresado fue el correcto.
Las imágenes que utiliza el UC están en una carpeta dentro del UC (en el servidor).

Particularmente, este UC utiliza 191 imágenes (numeradas 1..191) pero podrían agregarse más y luego modificar los archivos jcap.js (que tiene el MD5 del texto de la imágen) y CaptchaRender.js (que hace el Random de las imagenes) para que el random tenga en cuenta la nueva imagen.

En cuanto a interfaz de usuario, el único detalle es que el enlace de -Renovar imagen- queda a un costado de la imagen, pero nuevamente puede editarse el archivo CaptchaRender.js y agregarse un “<br/>” para que quede más prolijo.

Aquí nuestro caso de Consulta de Comprobante Fiscal Electrónico


Más abajo dejo el enlace al marketplace de genexus en el que es posible descargar el User Control así como acceder a documentación bien detallada y con ejemplos.

https://marketplace.genexus.com/product.aspx?captcha,es

Hay otros controles captcha para utilizar con Genexus, algunos son objetos externos y otros User Controls, pero estos no los probamos (es una deuda pendiente). De todas maneras aquí van los enlaces:

https://marketplace.genexus.com/product.aspx?k2btoolscaptcha,es

https://marketplace.genexus.com/product.aspx?pscaptcha,es

https://marketplace.genexus.com/product.aspx?recaptcha,es

¡Hasta la próxima!