Compartir con la comunidad todo aquello que pueda resultar útil para las personas interesadas en software development, software craftsmanship, agile, leadership, etc
Monday, October 24, 2022
Monday, September 19, 2022
Monday, September 12, 2022
Manejo de Excepciones
Introducción
Técnicas de anejo centralizado de excepciones en ASP.NET
- Definir un filtro que se ejecute después de que se haya generado una excepción en una acción.
- Implementación de un Middleware que se integra al pipeline de peticiones de ASP.NET.
Links
Thursday, July 7, 2022
Containerize a .NET app
Pasos para "contenerizar" una aplicación NET.
- Crear la aplicación NET
- NET CLI
- dotnet new console -o App -n DotNet.Docker
- dotnet run
- Publicar aplicación NET.
- Antes de agregar la aplicación a una imagen Docker debemos tener la versión publicada de la aplicación.
- NET CLI
- dotnet publish -c Release
- Crear imagen con el archivo Dockerfile
- Este archivo es usado por el comando "docker build" para crear la imagen Docker.
- El archivo debe estar junto con el .csproj
- Docker CLI
- docker build -t counter-image -f Dockerfile .
- docker images
- Crear contenedor
- Docker CLI
- docker create --name core-counter counter-image
- docker ps -a
- Administrar contenedores
- Docker CLI
- docker start core-counter
- docker attach --sig-proxy=false core-counter
- docker stop core-counter
- docker ps
- docker ps -a
- docker rm core-counter
Links:
- Repositorio: https://github.com/javierguerrero/containerize-net-app
- https://docs.microsoft.com/en-us/dotnet/core/docker/build-container
Friday, April 29, 2022
Aplicando TDD a la arquitectura
¿Qué es la arquitectura?
La arquitectura implica la toma de decisiones relevantes de diseño.
Ahora la pregunta clave es ¿cómo nos ayuda TDD a tomar estas decisiones relevantes? Básicamente tenemos que plantear pruebas que nos ayuden en la definición de la arquitectura.
El proceso de construcción
- Premisas:
- El resultado es consecuencia del proceso
- El desarrollo es guiado por pruebas
- El proceso es iterativo y los incrementos son pequeños
- Al trabajar de forma iterativa hay desperdicios
- Integración, verificación y entrega continua
- Mantenerlo estúpidamente simple (KISS)
- Técnicas:
- BDD/TDD
- Integración continua / Despliegue continuo
- Walking Skeleton
- Arquitectura Hexagonal
- Arrancamos con una funcionalidad desde la perspectiva del usuario.
- Para esta funcionalidad escribimos pruebas de aceptación (los tradicionales casos de prueba). Esto es una prueba a nivel de requerimiento.
- Para satisfacer estas pruebas de aceptación voy a tener que crear un conjunto de objetos y es aquí donde entramos en el ciclo de TDD. Escribo pequeñas pruebas para cada uno de los objetos que van a intervenir en resolver esa transacción de negocio.
Friday, April 22, 2022
Crear sitio web multi-idioma con ASP.NET Core 6
Términos
- Globalization (G11n): Es una convección creada por IBM y Sun Microsystem para cubrir tanto la Internationalization como la Localization.
- Internationalization (I18n): Hacer que la aplicación soporte distintos idiomas y culturas/regiones.
- Localization (L10n): Hacer que la aplicación soporte una cultura/región específica. Por ejemplo, no es lo mismo el español de Perú (es-PE) que de España (es-ES).
- Translation (T9n): Es el proceso de traducir texto de un lenguaje a otro.
- https://www.linkedin.com/pulse/difference-between-g11n-i18n-t9n-l10n-satish-singh/
Implementar sitio web multi-idioma con ASP.NET
- https://github.com/javierguerrero/globalization-and-localization-aspnetcore-6
- https://tutexchange.com/how-to-implement-globalization-and-localization-in-asp-net-core/
- https://mookiefumi.com/2017-01-04-internacionalizacion-net-core
Monday, March 28, 2022
Opinión: Por qué un desarrollador debe aprender DevOps
Es hora de aprender seriamente DevOps ¿Porqué?
Así es. Es necesario empezar por el porqué. Descubrir el propósito, hallar la motivación que te mantenga firme en la meta por aprender los procesos, prácticas y herramientas que giran alrededor de DevOps.
Básicamente es una cuestión de entrega rápida de valor. No olvides que los clientes pagan por el valor aportado a sus negocios y esto es prácticamente software funcionando en manos del usuario. Vale la pena revisar el manifiesto ágil para reforzar esta idea.
En este sentido, tu trabajo como desarrollador no termina cuando subes el código al repositorio, sino cuando lo despliegas a un ambiente productivo para que el usuario lo pueda usar. Con este criterio, como desarrolladores nos toca hacer tareas de desarrollo y tareas de operaciones (infraestructura) para lograr que el software esté disponible cuando el usuario lo necesite.
Por lo anterior, DevOps propone un conjunto de prácticas para reducir el tiempo entre un cambio que se realiza en el código y colocar dicho cambio en un ambiente productivo manteniendo altos estándares de calidad.
En el libro DevOps: A Software Architect’s Perspective (by Liming Zhu, Ingo Weber, Len Bass) se proponen 5 prácticas sobre los cuales se basa DevOps:
Práticas de procesos
- Involucrar al área de operaciones desde el kickoff del proyecto
- Hacer que el área de desarrollo asuma la responsabilidad por los incidentes de producción
- Tener un proceso formal de despliegue utilizados por todos (desarrollo y operaciones)
Prácticas técnicas
- Continuos Delivery para entregar el software cuando el negocio lo necesita.
- Infrastructure as code para generar los ambientes de forma rápida y sencilla. Si podemos representar nuestra infraestructura como código, entonces tendremos todos los beneficios del código (versionar, ejecutar, probar, desplegar)
Requisitos para aplicar DevOps
- Versioning
- Continuous Integration
- Formal test cases
- Automated unit tests
- Automated acceptance tests
- ...
- Retrospectives
- Backlog management
- Time-boxing
- On-site customer
- ...
¿Por dónde empiezo?
- Infrastructure as code: aprender las herramientas (Docker, por ejemplo) para manejar nuestra infraestructura como código y poder levantar distintos ambientes.
- Continuous Delivery: aprender las herramientas (Jenkins, por ejemplo) para hacer que nuestro código fluya los ambientes creados anteriormente.
