jueves, 5 de julio de 2018

Los eventos nunca fallan

Seguro que cuando has leído el título has pensado: "!Y un huevo que no!". Déjame explicarme un poco más para que se entienda el título de esta entrada.

Hace poco he charlado sobre arquitectura con otro desarrollador de software y me hizo un par de preguntas que no tienen sentido sobre que pasa cuando falla un evento que me dejó bastante mosqueado con respecto a si ese desarrollador tiene completamente claras las cosas o tiene algún concepto que le baila un poco y no está del todo encajado en el puzle.

miércoles, 4 de julio de 2018

Meditando un test de código.

Hace poco he realizado un test de código y he discutido los pormenores de la implentación con otros desarrolladores de software. Como en medio de una conversación en tiempo real siempre es más complicado estructurar tus pensamientos y materializar en palabras lo que la experiencia en un tema te da; en forma de "feeling in the guts"; voy a poner aquí mi posicionamiento de la implementación al respecto para estructurar mis propios pensamientos y mejorar mis dotes debatidoras, que son un poco patéticas y de paso puede interesarle a algún lector.

El código es el cálculo de una factura de un contratista de reformas. Para el cálculo de la factura existen reglas de tarificación según el tiempo invertido y además tenemos un descuento en el trabajo más largo.

Voy poniendo el código y explicando que hace y porqué he tomado tales decisiones:

lunes, 18 de junio de 2018

La perversión repositoria.

Querido lector:

¿Se ha planteado, verdaderamente y a fondo, el propósito y la responsabilidad de un repositorio cuando está implementando una arquitectura que facilite DDD?

miércoles, 4 de abril de 2018

Vega ahí esos Funtores, esos Funtores Aplicativos y esas Mónadas bien explicaditos.

  • Funtor: es una function de una categoría a otra que lleva objetos a objetos y morfismos a morfismos de manera que la composición de morfismos y las identidades se preserven. 
  • Monada: es un endofunctor (un functor desde una categoría hacia ella misma), junto con dos transformaciones naturales.
  • Funtor Aplicativo: funtores monoidales laxos con fuerza tensorial.
¿A qué vienen esas caras?¿No ha quedado claro? Bueno vale; entonces os recomiendo que le echéis un vistazo a esto:

lunes, 5 de marzo de 2018

Lecturas recomendadas.

Un blog muy fino e interesante con respecto al desarrollo de software:


Un libro estupendo que te guía sobre el maravilloso camino de convertir tu arquitectura y tu código en la documentación de tu proyecto para que nunca esté desactualizado y descontextualizado:


Compradlo bastardillos que merecen la pena los 4 duros que vais a invertir en él.

Otro estupendo libro que ayuda a salir del "arroyo" del "computer think", el cual  nos guía a desarrollar software cuyo único contexto es "el orden en que la máquina ejecuta cosas" y nos lleva a grandes despropositos:

jueves, 22 de febrero de 2018

Crazy FizzBuzz in C#

Si programas casi seguro que te has encontrado con el test FizzBuzz o has leído alguna reseña o referencia a él; y si no, aquí dejo una de un blog famoso.

Pero, aparte de su principal uso para filtrar profesionales de la programación, me he dado cuenta de que los matices inherentes de este test (condiciones no exclusivas y salida incremental) lo hacer muy bueno para demostrar técnicas que fomenten DRY, separación de responsabilidades y organización de código.

jueves, 9 de noviembre de 2017

Soy un perezoso

Desde que tengo un churumbel me estaba acostumbrado a consultar la página de alertas nacionales de productos peligrosos cada varios días con el fin de estar informado de juguetes y utensilios defectuosos o engañosos que supongan un peligro para el vástago. Puede parecer una tontería; pero una vez le compramos a la criatura, en una papelería local de dueños no orientales, una pintura de dedos JOVI (sí, sí, la de toda la vida) que iba a ser retirada del mercado por contener una cantidad de arsénico y aluminio incompatibles con la vida basada en el carbono.

viernes, 22 de septiembre de 2017

Going wild.

Un desarrollador de software experimentado desarrolla habilidades secundarias que pueden llegar a ser tanto o más importantes que su habilidad principal de desarrollar software.

Un ejemplo de un caso real es éste:


Yo tengo una historia parecida que contar.

Yo necesitaba incorporar unas librerías de código nativo en C a un enorme proyecto hecho con .Net 3.5. y sin posibilidad de migrar a una versión más reciente. Estas librerías vienen con un enlace programado en C#; por lo que en teoría es perfectamente viable usarlas.

El problema que me encontré fue que en NuGet, incluso la versión más antigua, estaba compilada para .Net4. De hecho, no encontré, en ningún sitio, ni ninguna versión ya compilada para .Net3.5, ni el código fuente.

Así que decidí ponerme salvaje e intentar locas medidas desesperadas.

Primeramente usé un inspector/decompilador de ensamblados (https://www.jetbrains.com/decompiler/) para acceder a la información interna del enlace programado en C#. Después de una hora de análisis e investigación y una vez que confirmé que no existía ningún impedimento técnico para que el enlace funcionase con .Net 3.5, cogí el código fuente del enlace del decompilador y todas sus dependencias que también fuesen enlaces de C# a código no administrado, y cree una solución con varios proyectos de librería con el target framework 3.5. Una vez enlazadas todas las dependencias entre proyectos lancé una compilación y TADA! Ya tenía los envoltorios C# perfectamente compilados para .Net 3.5 y completamente funcionales.

Happy coding bastardillos!

miércoles, 13 de septiembre de 2017

SCUNM - A text adventure game engine

Me he currado un pequeño proyecto en Nodejs que trata de un sencillo motor de aventuras textuales con el cual puedes crear tu propio videojuego y exponerlo online para que la gente se divierta.

No te pierdas el video de la demo usando el motor expuesto a traves de un bot de Telegram.