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.


Generar imágenes Docker de proyectos SPA de netcore
· ☕ 5 min · ✍️ eiximenis

¡Buenas!

Cuando creas un proyecto SPA de netcore, ya sea mediante VS o bien usando dotnet new y alguna plantilla SPA como react (dotnet new react), se genera una estructura parecida a la siguiente:

Estructura ficheros proyecto SPA

La carpeta “ClientApp” contiene todo el código de cliente (javascript, CSS y demás) mientras que el resto es el código netcore que se limita a “lanzar” la SPA.


Unicode y encodings
· ☕ 13 min · ✍️ eiximenis

Uno de los conceptos que hoy en día siguen causando más confusión es el de Unicode y sus distintos tipos de codificación. Pero… ¿qué es realmente Unicode? Para ello, déjame que remonte unos cuantos años atrás…

El inicio: ASCII

Los ordenadores los inventaron los americanos y como suele ocurrir se preocuparon de lo suyo: que un ordenador pudiese presentar textos en su idioma. Tampoco hay tantos caracteres en el inglés: las veinte y poco letras (en mayúsculas y minúsculas), los símbolos de puntuación, paréntesis, operaciones matemáticas y poco más. En total eran menos de 128 carácteres. Genial, porque esos espacios que sobraban se podían aprovechar para colocar otros caracteres que no tienen representación gráfica pero que eran (y son) necesarios para controlar el teletipo: retornos de carro, saltos de línea y similares. Había nacido el código ASCII.


Ejecutar bases de datos en Kubernetes: ¿Sí, no?
· ☕ 4 min · ✍️ eiximenis

Esta es una de las preguntas que tarde o temprano cualquiera que trabaje con Docker y Kubernetes (o cualquier otro orquestrador) se termina encontrando: Tienes toda tu aplicación en contenedores, ejecutándose en Kubernetes. Sabes también que existen versiones dockerizadas de las bases de datos. Así pues… ¿es conveniente ejecutar las bases de datos como contenedores adicionales en el orquestrador?


Azure Functions y SignalR: serverless push
· ☕ 9 min · ✍️ eiximenis

El hecho de ofrecer SignalR como servicio PaaS en Azure y su integración con Azure Functions nos abre un escenario interesante: ahora es facilísimo hacer notificaciones push desde una Azure Function (AF) a un cliente SignalR (p. ej. una Web).


Diseccionando DevSpaces (i)
· ☕ 7 min · ✍️ eiximenis

DevSpaces es una de las grandes novedades para desarrolladores que nos trae Microsoft (ehm sí… es otro producto más que está en preview :p). Básicamente se trata de la posibilidad de desplegar parcialmente y depurar nuestros contenedores ejecutándose en un clúster de Kubernetes. En lo que Hanselman llama un “entorno que huele como producción”.

¿Pero… cómo funciona esa magia? Vamos a ver, dentro de lo posible, qué ha hecho Microsoft para proporcionarnos esta experiencia, dentro de un Kubernetes completamente normal…

Este post **no pretender ser un tutorial de DevSpaces, **ya que la propia documentación lo explica bastante bien. La idea es intentar ver “como” funciona DevSpaces, más que como lo podemos usar.