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.

jueves, 6 de julio de 2017

Tuneando el control de concurrencia optimista.

Supongamos que tenemos una entidad en nuestro sistema llamada "Cliente" que se compone de los atributos [Nombre - Apellido -  EsVIP]. Si modelamos esto en un sistema de persistencia con concurrencia optimista nos quedaría así:

Nombre    - varchar(50)
Apellido   - varchar(50)
EsVIP      - bit
stamp       - rowvewsion

donde stamp es un valor que siempre cambia cuando la entidad ha sufrido algún cambio en persistencia.

Como aquí hablamos de concurrencia no me voy a meter en el tema del estancamiento de datos. Para eso les remito a la esta entrada. La gestión del estancamiento de datos no debe basarse en el campo stamp.

Los pasos que vamos a seguir serán los siguientes:
  1. Rehidratamos la entidad desde persistencia.
  2. Le aplicamos los cambios respetando las reglas e invariantes del dominio.
  3. Intentamos persistir la entidad aplicando el control de persistencia.

viernes, 24 de febrero de 2017

Paralelización con RxJava

Para los que no lo sepan: Rx es monohilo por defecto. 

Un entorno multihilo rompe un stream secuencial inmutable; puesto que deja de ser secuencial.

Aun así, todavía hay posibilidad (y potencial) de ejecutar procesos en paralelo.