¿Qué significa un problema P o NP?
· ☕ 18 min · ✍️ eiximenis

No suelo escribir en el post artículos sobre teoría de la computación, aunque es un tema apasionante. Que ahora recuerde solo escribí uno acerca del concepto del Orden de un algoritmo. Pero hace algunos días (he tardado más de lo esperado en escribir eso xD) buceando por twitter leí unos comentarios donde se mencionaba el concepto de un problema NP y leyendo el desconocimiento al respecto, me he animado a escribir esto… para que, si alguna vez te topas con ese concepto, sepas de que se habla. Por supuesto voy a hacer varias simplificaciones al respecto, así que si alguien conoce los fundamentos matemáticos que subyacen debajo, espero que me perdone 😉


ACI (Azure Container Instances): Serverless containers
· ☕ 4 min · ✍️ eiximenis

Cuando hablamos de serverless todo el mundo lo asociamos a las soluciones tipo FaaS como Azure Functions o Amazon Lambda, pero hay otros productos que se engloban dentro de ese paradigma y en Azure uno de los más interesantes es Azure Container Instances. Del mismo modo que con una Azure Function me limito a poner código en “ejecución” y esto se ejecuta en algún sitio, usando ACI lo que hago es “poner un contenedor” que se ejecutará en… bueno, donde sea. Eso es serverless señores.

Con este post quiero iniciar una pequeña serie dedicada a ACI, como ACI se compara con su primo Zumosol (AKS) y como AKS y ACI habilitan interesantes escenarios (altísima escalabilidad y workloads mixtos de contenedores).


Ya es oficial: Microsoft anuncia el abandono de Full Framework
· ☕ 5 min · ✍️ eiximenis

A ver, era algo que se veía a venir… Microsoft ha anunciado finalmente el abandono de Full Framework, en favor de Net Core. Cualquiera que estuviese al tanto de los intríngulis de pasillo del gigante de Redmond sabía que ambos equipos andaban bastante a la greña.


Comparaciones en C#
· ☕ 8 min · ✍️ eiximenis

¡Buenas!

Este post pertenece al “calendario de adviento de C#“, y me gustaría hablaros de un tema que parece sencillo pero que bueno, esconde sus cosillas. En concreto sobre comparaciones en C#.


C#: Conversiones (explícitas o implícitas) e interfaces
· ☕ 5 min · ✍️ eiximenis

Una de las características más útiles, aunque más potencialmente peligrosas de C# es la posibilidad de sobrecargar los operadores de conversión (casting) y concretamente el de conversión implícita.

Poder sobrecargar el operador de conversión explícita, aunque lo entiendo como una característica que agrega ortogonalidad al lenguaje, no es algo que me guste. Antes de eso prefiero crear un método AsXXX(). De hecho me parece que un cliente de mi clase encontrará más lógico un método AsXXX() que no “un casting a XXX” que debes saber que se puede hacer para hacerlo.


Crear imágenes Docker de proyectos netcore en varias versiones del framework
· ☕ 6 min · ✍️ eiximenis

Imagina que estás probando alguna versión release de netcore (pongamos la 2.2-preview3) y quieres generar imágenes Docker de tu proyecto para esa imagen. Pero a la vez quieres también crear las imágenes usando la última versión estable (pongamos la 2.1).

Asumiendo que el código fuente es compatible, ¿como puedes gestionar eso sin morir en el intento?


C#: Structs de un solo campo como typedefs
· ☕ 7 min · ✍️ eiximenis
No hace mucho me preguntaba si usar structs de un solo campo tenía alguna penalización respecto a usar, simplemente, una variable del tipo del campo. Es decir, me preguntaba si tener: struct Sint { public int value; } Tenía alguna penalización al respecto de usar, simplemente, una variable int. A nivel de memoria sospechaba que no: una struct ocupa lo mismo que la suma de todos sus campos, más los paddings que se agregan para que los campos estén alineados, más el padding final que se agrega para que, en el caso de un array, los elementos estén alineados.

Depurar netcore ejecutándose en WSL con VS2017
· ☕ 5 min · ✍️ eiximenis

Hoy he tenido que afrontar la dolorosa situación de un código en netcore que funcionaba correctamente en mi máquina (Windows 10) pero que al ejecutarse en Docker fallaba miserablemente.

Dado que el error que imprimía por consola era que no encontraba un fichero, lo primero fue comprobar que nuestro código era cross-platform (p. ej. que usábamos siempre Path.Combine y no concatenábamos el caráter \ para separar directorios) ya que la imagen Docker era de Linux. Luego hicimos todas las verificaciones habidas y por haber (permisos, etc) y nada. Todo parecía correcto. Al final, nos preguntamos si era un problema de Docker o de cualquier Linux en general y ahí acudimos a WSL.

Ejecutamos el programa bajo WSL y obtuvimos el mismo error. Eso era bueno por dos motivos: No era Docker la fuente del error y además nos permitía depurar el proceso.