Torres de Hanói (código fuente).

Hace ya un tiempo atrás, cuando aún era estudiante de universidad. Estaba en 3° semestre y cursaba la asignatura de Estructura de Datos. Para no hacer el cuento largo, me dejaron realizar un proyecto muy interesante. Teníamos que desarrollar el algoritmo recursivo que resolviera el problema de las torres de Hanói. El proyecto era simple, desarrollar un algoritmo que fuera imprimiendo en pantalla el número de movimientos que iba realizando y el disco que movía en cada paso. Hasta aquí todo pintaba simple. Pero como siempre a mí me gustaba batallar y me arriesgue a desarrollar este proyecto de forma gráfica. Mi intención era impresionar a mi maestra y sí que lo logre, este proyecto fue suficiente para exentar un parcial :).

La intención de este post es simplemente compartir con ustedes este proyecto, que lejos de ser una joya de la ingeniería de software, represento y sigue representando para mí un gran triunfo, pues fue desarrollado casi a los inicios de mi carrera. Sin experiencia, y claro, sin conocer nada de técnicas de ingeniería, patrones y arquitectura de software. Lo que busco con este post es compartir con todos este proyecto y que les pueda servir de ayuda, ya sea para simplemente comprender como funciona el algoritmo, curiosidad o para realizar su proyecto universitario. as

Integración de aplicaciones con Cross Reference

cross reference

Cross Reference o Referencias cruzadas es una de las técnicas más utilizadas para la integración de aplicaciones basadas en Arquitectura SOA, en donde las distintas aplicaciones comparten información similar pero replicada en cada una de ellas.  De entrada puede resultar un poco tonto decir que la información se encuentre en varias aplicaciones, sin embargo existen escenarios donde esto es así y en realidad no está mal. Pero antes de debatir este punto me gustaría explicar en qué consiste Cross Reference.

as

Objetos en Caché


System-Memory-icon[1]En los últimos años la memoria en caché se ha convertido en una clara ventaja en las aplicaciones, favoreciendo principalmente el performance de la aplicación, pero antes de entrar en detalle, me gustaría dar una pequeña introducción sobre que es la caché y las claras ventajas que ofrece su utilización.

Que es la Caché

Se le conoce como caché a toda la información que es cargada a la memoria RAM de la computadora. La memoria en caché ofrece como principal ventaja el acceso súper rápido a la información que se encuentra allí. Esto debido a que el acceso a la memoria RAM es muchas veces más rápido que el acceso a la información en disco. Sin embargo la cache tiene algunas inconveniencias de las cuales hablaremos más adelante, pero por hora cabe destacar que la memoria cache es volátil, lo que implica que podríamos perder cualquier cambio no persistido en un dispositivo físico. De momento hasta que lo dejamos y más adelante analizaremos todas las caras de la memoria en caché y sobre todo los Objetos en caché.
as

Git vs Subversion

CapturaHace ya un tiempo que el control de versiones del código fuente es más que obligatorio, se ha convertido en una necesidad inimaginable sobre todo porque te permite realizar guardar las versiones del código fuente administrarlas, etiquetarlas y tener con ello un mejor control del código fuente de nuestra aplicación, Sin embargo en este artículo no nos centraremos en las ventajas de un sistema de control de versiones sino más bien analizaremos las diferencias que existen entre los Sistemas de control de versiones Distribuidos y los Centralizados. as

Seguridad – Confidencialidad, Integridad y Autenticidad en mensajes

Cada día las aplicaciones tiene mayor necesidad de intercambiar mensajes con el fin de integrar aplicaciones o de comunicar algo a otras aplicaciones, este tipo de intercambio de mensajes ha crecido a un mas con la llegada de la arquitectura orientada a Servicios(SOA), ya que ha creado un ambiente propicio para que las aplicaciones intercambien mensajes de un punto a otro.

Sea cual sea la el motivo por el cual un mensaje es enviado de un punto a otro es indispensable asegurarnos que los mensajes sean enviados en un canal seguro y que el mensaje enviado sea el mismo que se reciba del otro lado sin ninguna alteración, también existen escenario en los que los mensajes contienen información altamente confidencial como datos de nuestros clientes o cuentas bancarias por lo que somos responsables de asegurarnos que la información continué siendo confidencial.

La pregunta aquí es, que mecanismos podemos implementar para que nuestros mensajes sean enviados en un canal seguro, el cual impida que nuestro mensaje sea alterado o descifrado por terceras personas. as

Patrón de diseño Command

Patrón de diseño CommandEl patrón de diseño Command es muy utilizado cuando se requiere hacer ejecuciones de operaciones sin conocer realmente lo que hacen, estas operaciones son conocidas como comandos y son implementadas como una clase independiente que realiza una acción muy concreta, para lo cual,únicamente recibe un conjunto de parámetros para realizar su tarea. as

Patrón de diseño – Composite

El patrón de diseño Composite nos sirve para construir estructuras complejas partiendo de otras estructuras mucho más simples, dicho de otra manera, podemos crear estructuras compuestas las cuales están conformadas por otras estructuras más pequeñas.

Para comprender mejor como funciona este patrón imaginemos una casa de ladrillos, las casas como tal no están hecha de una pieza, si observamos las paredes estas esta echas de pequeñas piezas llamadas ladrillos, entonces, el conjunto de estos ladrillos crea paredes, y un conjunto de paredes crean una casa. este ejemplo puede ser aplicado al patrón Composite, y no digo que vallamos a crear una casa con este patrón, sino más bien nos da una idea de cómo trabaja para poder utilizarlo con otros ejemplos.

Patrón de diseño Composite
Fig. 1: Estructura del patrón de diseño Composite.

as

2Phase Commit

Hoy en día casi todas las aplicaciones utilizan bases de datos para almacenar y transaccionar la información, sin embargo casi todas las aplicaciones tiene como origen de datos una sola base de datos centralizada, en donde guardan toda la información, actualizan o borran, para lo cual una sola transacción garantiza que todos los cambios que realicemos se apliquen de forma atómica. as