Faces de los compiladores

Compiladores

Hoy en día estamos tan acostumbrados a usar compiladores para generar nuestros programas, que nos resulta algo completamente natural y fácil de utiliza, esta simple como escribo mi programa, guardo y le doy ejecutar, ya ni siquiera nos preocupamos por compilar el programa para que esté listo para funcionar, y eso es lo que convierte a los nuevos lenguajes de programación en un éxito. Sin embargo, pocas veces estamos conscientes del proceso de compilación como tal, pocas personas conocen el procesamiento interno y los pasos que debe hacer un compilador antes de entregarnos un programa compilado. Pues bien, durante mi estancia por la universidad tuve la fortuna de que me enseñaran como es que funciona un compilador, las fases y lo más importante, a hacer uno.

Escribir un compilador no es simple, ya que se tiene que realizar en varias fases y cada una de ellas ataca al proceso de compilación desde un ángulo distinto pero relacionado. Pero antes de entrar en materia me gustaría presentarles el compilador que yo desarrolle, al cual bautice con el nombre de Oscar++ (Crean o no batalle mucho pensando en el nombre), el cual es un compilador bastante simple que procesa solo unas cuantas expresiones, que para aquel entonces que estaba apenas en la universidad ya era un gran logro. Les dejo una imagen para que vean un poco de lo que hablo:

Compiladores Oscar++

as

Introducción a los patrones de diseño (Libro)

Tras dos años de arduo trabajo he concluido la publicación de mi libro “Introducción a los patrones de diseño”, en el cual explico la importancia de la utilización de los patrones en la Ing. de Software, abordando un total de 25 patrones.

Introducción a los patrones de diseño - un enfoque práctico

Hoy en día aprender patrones de diseño no es una cualidad más, si no una obligación. Y es que estudiar y comprender los patrones de diseño nos convierte en un mejor programador/arquitecto y es clave para conseguir una mejor posición en el mundo laboral.

Este libro fue creado con la intención de enseñar a sus lectores cómo utilizar los patrones de diseño de una forma clara y simple desde un enfoque práctico y con escenarios del mundo real.

Tengo que aceptar que este no es un libro convencional de patrones de diseño debido, principalmente, por que as

Servidores Virtuales

Servidores Virtuales

Hoy en día los servidores virtuales en la nube han dominado casi por completo el mercado de servidores. Es impresionante ver lo fácil y económico que puede ser tener tu propio servidor montado en la nube a precios tan accesibles que la gente los renta solo por hobby o solo para introducirse en el mundo de la administración de servidores.

Les debo de confesar que hasta un tiempo atrás me surgió la necesidad de adquirir mi propio servidor, por lo general en los proyectos en los que trabaja el cliente o la compañía me proporcionaban los servidores y si necesitaba algo mas solo tenía que mandar un correo y listo, en un par de días me respondían que ya estaban listo que el requerimiento y todos felices. Sin embargo, hora que yo he decidido adquirir mi propio servidor por motivos personales que espero contarles más adelante me he dado cuenta de lo complicado o confuso que puede resultar este mundo, al menos para mi que me he especializado mucho más en el Software que en Hardware y redes. as

toString elegantes con ReflectionToStringBuilder

ReflectionToStringBuilder

En esta ocasión les quiero platicar de una fantástica clase de utilidad que yo he utilizado con frecuencia en el desarrollo de software, Esta clase es ReflectionToStringBuilder la cual es parte de la librería commonds-lang de Apache fundation. Mediante esta clase podemos imprimir de forma muy rápida las propiedades de toda una clase con solo una línea de código. Seguramente en varias ocasiones has tenido que imprimir mediante System.out.println( myObject.getPropiedad() ) las propiedades de una clase para depurar los valores o los has tenido que imprimir directamente en el Log de la aplicación como logger.debug( myObject.getPropiedad() ). En tal caso tenemos que realizar esto por cada propiedad de la clase que deseamos depurar. Si eres de los que hace esto con regularidad entonces este Artículo te interesa. as

A/B Testing

A/B Testing

El A/B Testing es una técnica que se utiliza frecuentemente como parte de una estrategia de marketing o estrategias digitales para medir el rendimientos de dos modelos que están puestos a prueba al mismo tiempo, midiendo cuál de los dos modelos tiene un impacto mejor ante nuestros clientes y por lo tanto, puede representar que se interesen por nuestros productos o que lleguen incluso a comprarlos.

En el mundo del diseño web, el A/B Testing es muy utilizado para medir el desempeño de los sitios web, como lo son las Landing pages, tiendas virtuales, campañas de Email o cualquier sección de un sitio web.

as

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