¿Alguna vez te has preguntado por qué tu código se vuelve cada vez más lento a medida que crecen los datos? La respuesta está en el coste computacional de tus algoritmos. Si alguna vez te has frustrado al ver que tu código no escala bien, este artículo es para ti. Hoy te explicaré cómo los aparentemente inofensivos bucles anidados pueden convertir tu proyecto en una «tortuga» y, lo más importante, veremos cómo optimizarlos para transformar tu rendimiento.
Sigue leyendo Optimiza tu código: Cómo mejorar el rendimiento de bucles anidadosCategoría: Programación
Cómo Recibir Notificaciones en Tiempo Real en Aplicaciones Model Driven
En este post, te enseñaré cómo recibir notificaciones en tiempo real mientras utilizas tu aplicación en Model Driven. Esto es especialmente útil cuando trabajamos con Dynamics CRM (Customer Engagement), ya que es común encontrarse con procesos que se ejecutan en segundo plano y que pueden tardar mucho tiempo en completarse. Es esencial proporcionar feedback al usuario de que el proceso ha finalizado.
Sigue leyendo Cómo Recibir Notificaciones en Tiempo Real en Aplicaciones Model DrivenValores Money en Dynamics 365 CE y Power Platform
El tipo de dato «Money» en Dynamics 365 CRM, que es parte del ecosistema de Dataverse (por lo tanto, este artículo es valido tanto para Dynamics 365 CE como para Power Platform), ofrece una manera especializada de gestionar valores monetarios dentro de la plataforma. Esta especialización permite que las aplicaciones que dependen de Dataverse, manejen cantidades de dinero de manera consistente y precisa, teniendo en cuenta aspectos como los tipos de cambio y la precisión decimal necesaria para operaciones financieras.
La elección entre usar el tipo «Money» y el tipo «Decimal» en Dynamics 365 CRM o Microsoft Dataverse depende de las necesidades específicas de tu aplicación o solución y de la naturaleza de los datos que estás manejando. Ambos tipos ofrecen precisión decimal, pero tienen características y usos óptimos diferentes. Aquí hay algunas consideraciones para ayudarte a decidir.
Sigue leyendo Valores Money en Dynamics 365 CE y Power PlatformLibrerías HTTP en .Net
He de decir que nunca me había planteado usar librerías HTTP para hacer una llamada REST desde mí código en C#. Simplemente uso HttpClient y luego serializo el resultado con Newtonsoft, nada del otro mundo. La autenticación, parámetros o cuerpo de la petición, la monto a mano y listos. Hasta el día de hoy (en el momento de escribir esta entrada para el blog) no conocía librerías para hacer esto, ni interés que tenia. Pero entonces, me ha llamado un compañero de trabajo para ver si podía darle mi opinión sobre un tema y mientras mirábamos el código, he visto una clase llamada RestClient. -Eso no es estándar de .Net- he pensado, así que me he puesto a indagar. Y lo que he visto me ha parecido interesante y por eso he indagado un poco y me he puesto ha hacer unas pruebas básicas, para ver si compensa o no usar librerías para realizar llamadas HTTP.
Sigue leyendo Librerías HTTP en .NetPasar el contexto de formulario y XRM de Dynamics 365 a un WebResource
Dynamics 365 CE permite muchas formas distintas para poder extender su funcionalidad y adaptarla a tus necesidades. Una de ellas es poder añadir un recurso web y mostrarlo en un formulario. Esto nos va a permitir crear nuestro propio HTML que se mostrará dentro de Dynamics.
En estos casos nos puede pasar que necesitemos mostrar en nuestro recurso web algún dato que se recupere del propio Dynamics.
Cuando estamos en el lado de cliente, Dynamics nos ofrece el objeto XRM y el FormContext para poder realizar acciones sobre los objetos del propio Dynamics y por lo tanto si tenemos que acceder a cualquier dato del formulario, podemos hacer algo tan sencillo como lo siguiente:
function displayName(executionContext)
{
var formContext = executionContext.getFormContext(); // get formContext
// use formContext instead of Xrm.Page
var firstName = formContext.getAttribute("firstname").getValue();
var lastName = formContext.getAttribute("lastname").getValue();
console.log(firstName + " " + lastName);
}
¿Pero que pasa cuando estamos en el contexto de nuestro recurso web? Pues que no tendremos dicho contexto y que por lo tanto, en este caso, no podemos acceder a estos datos. Pero es muy sencillo solucionar esto, vamos a ver como podemos pasar este contexto a nuestro recurso web para poder accederlo.
Sigue leyendo Pasar el contexto de formulario y XRM de Dynamics 365 a un WebResourcePasar un número variable de parámetros en C#
Estamos en verano, y esto se nota en el blog. El ritmo de actualización ha bajado mucho, es cierto, pero también es cierto que genero mas contenido además del publicado en el blog, cosa que hace un año no era así. Aprovecho pues para recordarte que puedes seguir mi contenido en Twitch y en Youtube.
Dicho esto, vamos con una pequeña píldora. El otro día aprendí una nueva característica, posiblemente muy básica, de primero se podría decir, pero que yo por el motivo que fuese, desconocía. Y es la posibilidad de pasar un numero variable de parámetros a una función en C#.
Es posible que tengamos la necesidad de pasar un número variable de parámetros a una función, para ello podríamos pasar un listado o un array, pero también tenemos la palabra reservada params.
Para mostrar esta funcionalidad, un pequeño ejemplo. En este trozo de código tenemos una función recibe un número indeterminado de palabras, que simplemente junta para mostrar una frase:
static void Main(string[] args)
{
MuestraFrase("Hola", "esto", "es", "una", "prueba");
}
public static void MuestraFrase(params string[] palabras)
{
Console.WriteLine(string.Join(" ", palabras));
Console.ReadLine();
}
El resultado de ejecutar el código anterior será:
Para poder usar esta funcionalidad solo hay que tener en cuenta un par de cosas:
- Se pueden pasar parámetros adicionales a la función, pero el declarado como params ha de ser el último dentro del método.
- El parámetro declarado como params ha de ser un array unidimensional
Hasta aquí esta pequeña píldora de verano, espero que te sea de utilidad.
¡Nos leemos!
Yield Return: que es y como usarlo
Hoy os quiero traer una pequeña píldora con el uso de yield return en C#. Usándolo, estamos indicando que el método es un iterador. Pero, ¿esto que quiere decir?
Veámoslo con un ejemplo, leed el siguiente código. Sin conocer el uso de yield return, a priori el método DameInts() sería imposible, ya que entraríamos en un bucle infinito. Tomate un segundo y ejecútalo, a ver que pasa.
using System;
using System.Collections.Generic;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var resultado = DameInts();
foreach (var a in resultado)
Console.WriteLine(a);
}
public static IEnumerable<int> DameInts()
{
int i = 0;
while (true)
{
yield return ++i;
System.Threading.Thread.Sleep(1000);
}
}
}
}
Sigue leyendo Yield Return: que es y como usarlo Patrones cloud: patrón Retry
Que es un patrón en desarrollo de software
Antes de ver el patrón retry, vamos a empezar por el principio, vamos a ver que es un patrón. En el desarrollo de software, es de los más normal encontrarnos con problemas y/o retos que son recurrentes y que siempre están ahí. Retos que son agnósticos al lenguaje de programación que utilices, incluso si estas haciendo algo con alguna herramienta low code, te encontraras con estas casuísticas. ¿Cómo accedemos a la base de datos? ¿Cómo tratamos los errores? ¿Cómo muevo millones de registros en el menor tiempo posible?, etc. ¿no te ha pasado nunca que tienes un error, un problema, algo que no sabes como hacer, lo buscas en StackOverflow, y hay cientos de respuestas? Seguro que creías que eso solo te había pasado a ti, pero no, en software, todos nos encontramos con las mismas problemáticas.
Un patrón es un diseño que nos permite «atacar» a una casuística concreta, no es mas que una forma concreta de resolver un problema. Puedes profundizar mucho más en la definición desde la página de Wikipedia.
Los patrones cloud, por lo tanto, serán soluciones a problemas concretos que se dan en los entornos y desarrollos pensados para la nube. Recuerda, son soluciones agnosticas a la tecnologia que uses. Yo para mis ejemplos voy a usar Azure y C#, pero podrías aplicar el patrón a AWS y Java, por ejemplo, o picar el código en Python, es indiferente.
Sigue leyendo Patrones cloud: patrón RetryEl futuro de .Net y sus distintas versiones
Dentro de poco, en noviembre de este año, .Net 5 pasara a GA (general availability) y esto va a suponer un gran cambio en el ecosistema .Net, que no todo el mundo esta terminado de entender.
El otro día me topé con el siguiente Tweet que no tiene desperdicio:
Cómo el mismo menciona en la conversación creada, Microsoft no lo ha puesto fácil, así que me he puesto a revisar la documentación y roadmap para intentar resumir esto un poco.
Vamos a ver cada una de las versiones del framework y a intentar explicar esto un poco.
Ojo, no confundir los frameworks o implantaciones de .Net con los lenguajes (que alguna vez me lo he encontrado). C# es el lenguaje y .Net Core es el framework (por poner un ejemplo).
Como hacer pruebas de carga HTTP con Vegeta
Una de las tareas que mas he de realizar últimamente es la creación de Api web (REST) para comunicar distintos componentes entre ellos. Cuando los desarrollamos, hacemos algunos test unitarios y de integración, pero mas haya del rendimiento que ofrece la Api en nuestros entornos de desarrollo, no estábamos probando como rinden en situaciones de estrés. Y eso me tenía mosca. El otro día, vi por Twitter a alguien que mencionaba una herramienta llamada Vegeta, que sirve precisamente para hacer pruebas de carga HTTP.
Con esta necesidad que tenía y este nombre de proyecto, no hay duda que los astros se alinearon en ese Tweet.
Vamos a ver en esta entrada como usar Vegeta para realizar pruebas de carga de nuestra API. «It’s over 9000!»
Sigue leyendo Como hacer pruebas de carga HTTP con Vegeta