Entradas

Adviento C# 2020: Diario de ASP.NET

Este año volví tiempo completo al desarrollo Web, primero con .NET Core y ahora con .NET 5. Quiero compartir 3 cosas que aprendí y me parecen relevantes. Si logro mostrarte al menos una que no conocías, habré cumplido con el propósito de este post. 1. Inyectar el usuario Seguramente tienes varios servicios que agregas a tus controladores usando inyección de dependencias y es probable que en ellos tengas métodos como: IEnumerable<Product> GetProducts(string userId); En donde userId lo pasas desde el controlador usando algo como: var userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value; var products = _service.GetProducts(userId); Yo creé una extensión para usar: User.GetId(); Eso me funcionó en muchos proyectos, hasta que me topé con la implementación de un IEditableDashboardStorage para un control de DevExpress. En resumen, esa interfaz la implementas para almacenar la configuración de un dashboard que es editable por el usuario… Pero no tie

Comprimir archivos PDF en Linux

Continuando con la pequeña serie sobre tareas sencillas en Linux, esta vez el comando es para comprimir archivos PDF:   ps2pdf archivo.pdf final.pdf Reduce archivos de 20 MB a 1.3 MB en menos de un segundo. Es perfecto para documentos escaneados.

Unir archivos PDF en Linux

Si tienes archivos PDF en linux y necesitas unirlos, puedes usar el comando: pdfunite archivo1.pdf archivo2.pdf archivo3.pdf archivoN.pdf final.pdf ¡Funciona muy rápido! La única regla es que al final va el nombre del archivo en el que quieres guardar el resultado.

Cargar archivos locales desde Azure Functions

Lo primero: la forma ideal de trabajar con archivos en un entorno de nube es usando servicios de almacenamiento administrados, por ejemplo, Blob Storage . Ahora si, vamos con el artículo. Algunas veces debemos acceder a archivos que hacen parte del proyecto: un .json con valores estáticos, un formato de correo electrónico en .html , una plantilla de hoja de cálculo en .ods , una extensión, etc. Eso es relativamente sencillo porque C# ofrece la propiedad Environment.CurrentDirectory : public async Task<string> GetFileContent(string name) { string filePath = Path.Combine(Environment.CurrentDirectory, "Files", name); string content = await File.ReadAllTextAsync(filePath); return content; } Pero este código no funciona en una Azure Function. Para las funciones debemos inyectar el ExecutionContext y después obtener el directorio base con la propiedad FunctionAppDirectory . [FunctionName("QueueFunction")] public async Task Run( [QueueTrigg

2 años de CaliSharp

¡El tiempo pasa muy rápido! CaliSharp cumple 2 años 🎉 Somos afortunados por encontrar personas interesadas en compartir su conocimiento. Son ellos, y los asistentes, quienes consolidan la comunidad a través de las charlas y discusiones que tienen lugar el penúltimo martes de cada mes. Quiero invitarlos al evento de aniversario, el sábado 25 de julio a las 9:30am COT. Pueden separar un espacio aquí . Tendremos charlas sobre Neo4j, Git, LightGBM y Computer Vision. Si están interesados en dar una charla, pueden inscribirla en este formulario . En CaliSharp hay espacio para diversos temas; aquí encuentran el listado completo de estos 2 años.

La extensión de Azure no mantiene la sesión iniciada

Si usas Visual Studio Code para programar Azure Functions, seguramente conoces la extensión Azure Account. Esa extensión tiene varios problemas en Linux. Uno es que el inicio de sesión "normal" no funciona, entonces debes usar el comando: Ctrl+Shift+P > Azure: Sign In with Device Code Otro es que la sesión dura mientras mantengas abierto el programa. Se vuelve frustrante tener que ir al explorador e introducir el código de inicio todos los días. Para resolverlo, instala esta "dependencia oculta": sudo apt-get install gnome-keyring Cuando vuelvas a iniciar sesión, basta con establecer la contraseña del llavero y la extensión seguirá funcionando sin problema. Puedes ver este enlace para más información. -- Quizá no necesites esto si usas GNOME. Yo uso KDE.

Instalé Teams en Linux. ¡El audio se escucha mal!

Lamentablemente esto es algo normal en Ubuntu. El audio no viene configurado por defecto y la cancelación de ruido, común en Windows y en Mac, no está. Basta con editar el archivo /etc/pulse/default.pa agregar la línea load-module module-echo-cancel y reiniciar el equipo. En las opciones de Teams (y de otras aplicaciones) vas a ver que aparecen 2 micrófonos. Selecciona el que tiene cancelación de ruido. Este es un problema conocido y bien documentado. Guarda este enlace para aprender más de la configuración. -- Para evitar el ajuste automático del volumen, pueden seguir la recomendación de este enlace y quitar el control de ganancia.   load-module module-echo-cancel aec_args="analog_gain_control=0 digital_gain_control=0"   -- Esta es una pequeña serie sobre configuraciones del entorno .NET en Ubuntu. Recientemente cambié mi sistema operativo principal de MacOS a Kubuntu porque la nueva versión no será soportada en mi equipo y gran parte de mi trabajo requiere un terminal. W