Computers and Internet, Divulgación, Eventos

Evento gratuito – GitHub Copilot

GitHub Copilot

Este fin de semana vamos con otro evento gratuito. En esta oportunidad estaremos con Bruno Capuano hablando sobre Copilot. Viendo algunos ejemplos de funcionamiento, cómo impacta a los desarrolladores y otras cositas buenas y malas.

Para inscribirse: https://mug-it.org.ar/event.aspx?event=574

Standard
Computers and Internet

Chau genio

Hoy, una noticia tristísima. El fin de semana murió Angel “Java” López.

Si sos de Argentina, seguro seguro que sabés quién fue Angel. Si vivís en otros países latinoamericanos, seguro que alguna vez escuchaste de él.

Angel fue un referente en nuestro campo. Un maestro de maestros. Un tipo con pasión por el software. Un tipo del que siempre aprendías algo nuevo. Un maestro de maestros.

Desde acá, mi despedida a un amigo, que por las distancias no nos hemos podido ver tanto como hubiéramos querido, pero que a pesar de ello, siempre estará en mi mente.

Hasta pronto querido Angel!

Standard
C#

FluentSharp 1.0.5 is out

A new release of FluentSharp is out and ready to use through NuGet.

Some improvements has been made on Linq extensions but without breaking backward compatibility.

Additionally to that, a new namespace has been added: FunctionalSharp.Patterns

And within this, the first (of many to come) Design Pattern abstraction for Chain Of Responsibility in an attempt of simply the appliance and usage of it when is need it.

For more information about how to install FluentSharp: https://www.nuget.org/packages/FluentSharp/

To read the documentation: https://github.com/MatiasIac/netdevtools

Standard
C#, Eventos

Encuesta sobre malas prácticas

Durante el evento sobre malas prácticas de código realicé una encuesta entre los asistentes para que estos pudieran elegir que consideran más importante al momento de definir una buena práctica.

Los resultados fueron los siguientes:

Estoy dejando la encuesta abierta por unos días para que, si quieres votar, lo puedas hacer :).

Para votar, click aquí.

Standard
C#, Divulgación, Eventos

Evento – Detectando malas prácticas de código

Como se está haciendo costumbre… al final de mes estaré dando una charla gratuita online gracias a la comunidad MUG IT de Argentina.

En esta oportunidad voy a hablar de malas prácticas de código con C# pero con una pequeña modificación: No hablaremos de los clásicos como patrones de diseño o arquitectura que nunca se terminan aplicando… no!

Lo que trataré de hacer es sentar algunas bases para que los asistentes puedan detectar estas malas prácticas aplicando algún que otro método de deducción, aplicando cambios incluso si estos cambios no son los más destacados por la comunidad elitista de programadores :D.

Para inscribirse: https://mug-it.org.ar/event.aspx?event=558

Standard
JavaScript

Analizando un array… segunda parte

En el post anterior hablábamos sobre cómo era posible saber si un array estaba ordenado y veíamos una forma para reducir la cantidad de iteraciones y así tardar menos tiempo al momento de recorrer el array.

Al final del post dejaba una pregunta: Y si intentamos generar pequeños compartimientos y reducir aún más las iteraciones?

Hay muchas formas de hacer esto. Podríamos probar con pura matemática, bucles anidados o… creando código dinámicamente.

Posiblemente no necesitemos hacer nada de esto en la gran mayoría de escenarios, pero siempre es interesante ver hasta dónde un lenguaje puede llegar. Y JavaScript es uno de esos lenguajes que nos deja volar la imaginación y hacer cosas que en otros lenguajes sería muy complicado (O imposible).

Entonces, veamos una solución dinámica.

const constructFunction = (steps) => {
    let s = "return ";
    
    for (let index = 0; index < steps; index++) {
        s += `(arr[i * ${index * steps}] > arr[(i * ${index * steps}) + 1]) || `;
    }

    s = s.substr(0, s.lastIndexOf(" ||")) + ";";

    return new Function("i", "arr", s);
};

Lo primero que necesitamos es una función que nos permita crear código en tiempo de ejecución. Esta función genera estos pseudo compartimientos en base a la cantidad de los mismos y haciendo que el “cursor” del array “salte” las distancias de los compartimientos en cada iteración. El constructor “Function” nos permite crear una función en JavaScript basándose en el texto pasado por parámetros. Esto funciona de forma similar a “eval” con la diferencia que es ligeramente más seguro.

El siguiente paso es modificar el cuerpo de la función que valida el ordenamiento para que pueda crear y usar esta función.

const isSorted = (a, steps) => {
    if (a.length <= 1) return true;

    const partitions = constructFunction(steps);

    for (let index = 0; index < steps; index++) {
        if (partitions(index, a) === true) return false;
    }

    return true;
};

La navegación del array ahora se limita a la cantidad de compartimientos y no a todo el array. Por lo tanto, mientras más compartimientos tengamos menos iteraciones. Por supuesto, habrá más condiciones de comprobación (Todo tiene sus pros y sus contras). Por último, la ejecución.

const number_array = [1, 2, 3, 6, 9, 10, 30, 31, 88];
console.log(isSorted(number_array, number_array.length / 3));

Es importante aclarar que el código anterior es solo para ejercitarnos pero no debe ser usado directamente salvo que le hagamos modificaciones importantes. Por ejemplo, el cálculo de los compartimientos no es correcto y es necesario calcular de forma específica cuando el array no genera compartimientos enteros. De cualquier manera, y como decía al principio, es interesante para pensar una solución desde una mirada diferente.

Standard