CodeMirror: Diseño simple para edición colaborativa

Este artículo del blog de Marijn Haverbeke explora el diseño de la estructura de datos para cambios de documentos y la función de edición colaborativa en la próxima versión de CodeMirror. El objetivo principal es explicar por qué se optó por una solución aparentemente simple: la transformación opera

Redis: IA impulsa nueva estructura de datos 'Array'

El desarrollador de Redis, Antirez, ha presentado una nueva estructura de datos llamada 'Array' para Redis, resultado de un proceso de desarrollo de cuatro meses que ha incorporado extensivamente la inteligencia artificial. La necesidad de esta nueva estructura surgió de la búsqueda de una forma más

Rust: ¿Propiedad o Conteo de Referencias?

Rust, conocido por su seguridad de memoria sin necesidad de un recolector de basura, logra esto a través de un sistema de propiedad riguroso. Sin embargo, este sistema tiene una 'válvula de escape': el conteo de referencias. Normalmente, cada valor en Rust tiene un único propietario, y cuando ese pr

Rust optimiza memoria al procesar JSON de AWS

Este artículo del blog de dystroy.org describe una optimización significativa de memoria en un programa Rust que deserializa archivos JSON complejos. El problema original era que el programa, al procesar archivos JSON que representan estructuras de datos de AWS (Smithy Shapes), consumía una gran can

Jubbly: Nuevo enfoque para asignar valores en programación

El proyecto 'Jubbly' explora una idea innovadora en diseño de lenguajes de programación, enfocada en simplificar y mejorar la forma en que se realizan las reasignaciones de valores, especialmente en estructuras de datos complejas. Tradicionalmente, en muchos lenguajes, asignar un nuevo valor a una v

Skiplists: la estructura de datos que optimiza análisis

Este artículo de Antithesis.com explora el uso de 'skiplists' y una extensión llamada 'skiptrees' para resolver un problema específico de rendimiento en el análisis de datos. Inicialmente, los skiplists se consideraban una estructura de datos de nicho, pero la empresa descubrió su utilidad para opti

Levenshtein: cálculo rápido con estructura Trie

Este artículo explora una forma eficiente de calcular la distancia de Levenshtein, una métrica que mide la diferencia entre dos cadenas de texto, crucial para funcionalidades como la corrección de errores de escritura en búsquedas web. La distancia de Levenshtein se calcula tradicionalmente con un a

B-trees: la clave para búsquedas rápidas en bases de datos

Este artículo de PlanetScale explica los B-trees y B+trees, estructuras de datos fundamentales en muchos sistemas de gestión de bases de datos (DBMS) como MySQL, PostgreSQL, MongoDB y DynamoDB. Son la base de los índices que permiten búsquedas de datos eficientes. ¿Qué son los B-trees? Un B-tree e

Algoritmos de Red: Más Allá del Transporte

Algoritmos de Flujo de Red: Una Visión General. ¿Qué son y por qué son importantes? Los algoritmos de flujo de red son una herramienta matemática poderosa que permite modelar y resolver problemas que involucran el movimiento de algo a través de una red. Originalmente concebidos para optimizar el tra

Go: Nuevo sistema de logs con buffer circular

El artículo de Alex Rios, "Construyendo slogbox", explora la implementación de un manejador de logs (`slog.Handler`) en Go que utiliza un buffer circular (ring buffer) para almacenar los últimos registros de logs. La motivación surge de la necesidad de tener acceso a logs recientes para fines de mon

K: Eliminan 'raze' para optimizar código

Este artículo explora una optimización interesante en el lenguaje de programación K, específicamente relacionada con la eliminación de una técnica llamada 'raze'. K es un lenguaje de programación de matriz (array language) conocido por su concisión y expresividad. El problema que aborda el autor, Ch

aprende a usar ⍋⍋: la función inesperada de APL

Este artículo explora el significado y la utilidad de la función ⍋⍋ en el lenguaje de programación APL, un tema que inicialmente parecía carecer de sentido según Paul Mansour. Aunque inicialmente se considera inútil (equivalente a una versión más lenta de otra función), el artículo revela una aplica

Recrean Crazy Taxi: Descifran modelos 3D

Este artículo es la segunda parte de una serie que detalla cómo el autor ha recreado los niveles de Crazy Taxi en 3D y los ha puesto a disposición en la web. La primera parte se centró en la decodificación del archivo `.all` del juego, un formato de archivo que contiene miles de recursos del juego.

Pratt Parsing: Analizando código de forma intuitiva

Este artículo explica el 'Pratt Parsing', una técnica ingeniosa para analizar expresiones matemáticas o código, especialmente útil en compiladores. La idea central es que, tradicionalmente, las expresiones (como `a + b * c + d`) se representan en un árbol de sintaxis abstracta (AST) donde los operad

Monuses optimizan búsqueda en montículos

Este artículo explora una estructura algebraica llamada 'monus' y su aplicación en algoritmos de búsqueda y ordenamiento, particularmente en el contexto de montículos (heaps). Un montículo es una estructura de datos en forma de árbol donde el valor de cada nodo es menor o igual que el de sus hijos,

Domina Pandas: 101 ejercicios interactivos

Este recurso, alojado en machinelearningplus.com, ofrece una colección interactiva de 101 ejercicios prácticos para dominar Pandas, una biblioteca fundamental de Python para el análisis y la manipulación de datos. Pandas facilita la carga, limpieza, transformación y análisis de datos tabulares, y es

Rob Pike: 5 Claves para Programar Mejor

Las '5 Reglas de Programación' de Rob Pike, un ingeniero influyente en Google y creador de lenguajes como Go, ofrecen una guía valiosa para el desarrollo de software eficiente y mantenible. Estas reglas, que se basan en principios establecidos por otros grandes de la informática, enfatizan la import

Recursión: A veces, la solución es recursiva

Este artículo explora una idea contraintuitiva en programación: a veces, la mejor solución para un problema recursivo es, precisamente, una solución recursiva. La premisa central es que, aunque teóricamente cualquier función recursiva puede convertirse en una iterativa, esta transformación a menudo

Matemáticas en Python: Descifrando los 'thinnings'

Este artículo explora el concepto de "thinnings", una herramienta matemática que, aunque a menudo vista como compleja en contextos como la teoría de tipos dependientes, puede ser aplicada y comprendida en lenguajes de programación más comunes como Python. En esencia, un thinning es una forma de test

Recursión sin pila: técnica para código más robusto

Este artículo del blog explora una técnica para transformar código recursivo, a menudo elegante y mantenible, en una forma imperativa más robusta, especialmente útil en entornos como Node.js y TypeScript donde los desbordamientos de pila son una preocupación. La idea central es simular explícitament

Emacs: Desentrañando el código Lisp en C

Este artículo de The Cloudlet explora la estructura interna de GNU Emacs, específicamente cómo representa los valores de Lisp (Elisp) en C. El objetivo es comprender el diseño del sistema desde una perspectiva de bajo nivel, desglosando el tipo de dato `Lisp_Object`. La pieza se basa en el conocimie

C: la API de archivos más eficiente, según expertos

El artículo de maurycyz.com argumenta que C posee la mejor API para la manipulación de archivos, destacando una flexibilidad y eficiencia que carecen otros lenguajes de programación. La clave de esta superioridad reside en la capacidad de C para tratar los archivos como si fueran datos en memoria a

Contratación en software: ¿evaluaciones erróneas?

Las prácticas de contratación en la industria del software están siendo cuestionadas debido a lo que se conoce como la “falacia del green lumber” (madera verde), un término acuñado por Nassim Nicholas Taleb para describir la confusión entre conocimiento irrelevante y esencial. El problema radica en

Forth: arrays a la carta, sin estándar fijo

Forth, un lenguaje de programación conocido por su flexibilidad, no tiene una implementación estándar de 'arrays' como otros lenguajes. Esto se debe a que Forth facilita la creación de nuevos tipos de datos, permitiendo a los programadores diseñar estructuras que se adapten perfectamente a sus neces