lunes, 23 de diciembre de 2019

Pero al hilo de estas fiestas, por si alguno no estáis al tanto, me ha parecido interesante aprovechar la ocasión para contaros un curioso cuento de navidad: la que se ha liado hace unos días en el repositorio de Visual Studio Code en Github, algo que algunos ya han denominado el "SantaGate".
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Los diez mandamientos del egoless programming
José María Aguilar - Crear proyectos usando versiones específicas del SDK de .NET Core
José María Aguilar
.NET Core / .NET
- El futuro de .NET en 2020: guía para desarrolladores (justificadamente) despistados
José Manuel Alarcón - Repasando Null-Coalescing Operator y Null-Coalescing Assignment Operator y convirtiendo tipos nullable a tipos no nullable
Jorge Serrano - Novedades de C#8: Interfaces. ¿Qué podemos esperar?
Jorge Turrado - Uso de yield en C#, ese pequeño desconocido
Jorge Serrano - Creating Common Intermediate Language projects with .NET SDK
Filip Woj - C# 7 ref returns and locals
Shao Voon Wong - User Secrets in Docker-based .NET Core Worker Applications
Jimmy Bogard - C# 8 Interfaces: Static Members
Jeremy Clark - Fuse.NET: A lightweight zero-dependency C# port of the Fuse.js fuzzy-search library
Conna Wiles - A Quantum Random Number Generator for .NET: The quantum measurement problem and many-worlds approach
Andrew Lock - Vertically Sliced Command Line Tools in C# and .NET Core 3.1
Garo Yeriazarian - C# 8 Interfaces: Static Main
Jeremy Clark - Hitchhiker’s Guide to the C# scripting
Ali Bahraminezhad
martes, 17 de diciembre de 2019

Este post es parte del segundo calendario de adviento de C# en español.
Días atrás veíamos lo sencillo que resultaba crear un servicio gRPC que hacía uso de streaming unidireccional de mensajes, en sentido servidor-cliente. Como recordaréis, en este post implementábamos un servicio generador de números al que los clientes podrían conectarse para recibir una secuencia de enteros a intervalos periódicos.

Hoy vamos a complicar algo el escenario, pues veremos una opción aún más potente: la creación de streaming bidireccional, es decir, cómo cliente y servidor pueden enviar mensajes al lado opuesto de forma asíncrona, una vez establecida la comunicación entre ambos.
Para ello, implementaremos un sencillo juego, con las siguientes funcionalidades:
- El lado cliente, una aplicación de consola, abrirá una conexión con el servicio. En ese momento, el servidor elegirá un número al azar (1-100) y lanzará un mensaje de bienvenida, que deberá ser mostrado en el lado cliente.
- Desde el lado cliente solicitaremos al usuario un número entero, que enviaremos al servidor por el stream ascendente.
- El servidor recibirá el número y lo comparará con el que tiene almacenado, enviando por el canal descendente el resultado de la comparación.
- El proceso finalizará cuando el número sea encontrado.
lunes, 16 de diciembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- 101 citas célebres más del mundo de la informática (¡505 ya!)
José María Aguilar - Antipatrones de asincronía en C#
José María Aguilar
.NET Core / .NET
- Runtime Host Configuration Options and AppContext data in .NET Core
Filip Woj - Thread-safe observable collection in .NET
Gérald Barré - GC Perf Infrastructure – Part 1
Maoni Stephens - C# 9
Bassam Alugili - Discriminated Unions in C# — An Unexceptional Love Story
Zhengbo Li - Setting assembly and nuget package metadata in .NET Core
Cezary Piątek - Useful ClaimsPrincipal extension methods I use in my projects
Jerrie Pelser - .NET Core, Docker, and Cultures - Solving a culture issue porting a .NET Core app from Windows to Linux
Andrew Lock - Fun with URL Encodings
Phil Haack - C# Channels - Timeout and Cancellation
Denis Kyashif - ConfigureAwait FAQ
Stephen Toub - Regex Performance With and Without RegexOptions.Compiled Using .NET Framework 4.8 and .NET Core 3.1 (December 2019)
Ken Dale - An Introduction to System.Threading.Channels
Stephen Toub - Demystifying the new .NET Core 3 Worker Service
Randy Patterson - Serialización/Deserialización Json omitiendo "JsonProperty" Name (o no)!
Juan Luis Guerrero
miércoles, 11 de diciembre de 2019

Este post es parte del segundo calendario de adviento de C# en español.
Hace bien poco hablábamos de la introducción en .NET/C# de la interfaz
IAsyncEnumerable
, y de las interesantes posibilidades que abría vistas a la producción y consumo de streams de mensajes.También hace unos días dimos un repaso al soporte para la implementación de clientes y servidores gRPC lanzado con ASP.NET Core 3. En dicho post hacíamos una pequeña introducción al desarrollo de este tipo de servicios, basados en HTTP/2 y el estándar protobuf.
Como ya comentábamos entonces, a diferencia de los tradicionales servicios tipo REST (HTTP/JSON), gRPC soporta el intercambio de datos en modo streaming, tanto unidireccional como bidireccionalmente. Es decir, en el escenario más complejo podríamos abrir un canal gRPC a través del cual un cliente podría ir enviando paquetes de información de forma asíncrona, y al mismo tiempo utilizarlo para recibir un flujo de datos continuo desde el servidor.
Hoy vamos a ver cómo se combinan estas características viendo un ejemplo de implementación de un servicio gRPC que utiliza streaming unidireccional, en sentido servidor-cliente.
Para ello crearemos un servicio generador de números en streaming que funcionará de la siguiente forma:
- Los clientes invocarán un procedimiento del servidor suministrándole un número entero inicial y un delay expresado en segundos.
- Como respuesta, el servidor creará un stream por el que irá enviando, según la periodicidad indicada, números consecutivos partiendo del especificado en la llamada inicial.
- El proceso finalizará, cerrando en stream, cuando el servidor haya generado 10 números, o bien cuando el cliente sea detenido.
martes, 10 de diciembre de 2019
Por si te lo perdiste...
- Interpolación de cadenas en C# 6
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- Announcing .NET Core 3.1
Richard Lander - .NET Core 2.2 will reach End of Life on December 23, 2019
Lee Coward - Updates to .NET Core Windows Forms designer in Visual Studio 16.5 Preview 1
Olia Gavrysh - C# - la palabra clave volatile
Juan Carlos Ruiz Pacheco - “Equals” and “==” are not… equal
João Antunes - Check for spammy email addresses when registering users
Jerrie Pelser - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Exploring borrowed annotations in C#
Jared Parsons - How to simulate AutoMapper that works during the build time
Cezary Piątek - IAsyncEnumerable<T> Is Your Friend, Even In .NET Core 2.x
Brant Burnett - Declaring InternalsVisibleTo in the csproj
Gérald Barré - Remote Debugging a .NET Core Linux app in WSL2 from Visual Studio on Windows
Scott Hanselman - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Controla la calidad de tu código con NDepend
Albert Capdevila