Cómo registrar logs en la consola desde un juego de Game Boy Advance con mGBA

Desarrollar un juego para Game Boy Advance no obliga a renunciar a las funciones de registro por consola que sí están disponibles en otros entornos. El emulador mGBA incorpora varios registros mapeados en memoria específicos para logging que permanecen inactivos fuera del emulador, lo que permite in

La Underhanded C Contest 2015 premia el código oculto en verificación nuclear

La organización del concurso Underhanded C Contest ha hecho públicos los resultados de su edición de 2015, una competición anual que premia el código C más sutilmente malicioso escrito con apariencia inocente. Este año se recibieron más de 40 propuestas, todas ellas de alta calidad, lo que obligó a

El depurador integrado de Emacs, una joya infravalorada

El artículo repasa el Grand Unified Debugger (GUD) de Emacs, una herramienta de depuración integrada en el editor que suele pasar desapercibida pese a su potencia. GUD actúa como interfaz común para múltiples depuradores: GDB, LLDB, Perldb, JDB, PDB, Guiler, DBX, XDB y SDB, lo que permite trabajar d

Repositorio en C de los juegos clásicos 'BASIC Computer Games' de David Ahl

El repositorio 'bcg', publicado por el usuario proteanthread en GitHub, ofrece un port a C de los programas del libro 'BASIC Computer Games' (y su continuación 'More BASIC Computer Games') de David Ahl, obras de referencia de la informática personal publicadas originalmente por Creative Computing en

epoll frente a io_uring en Linux: comparativa técnica

El artículo compara los dos sistemas de colas para E/S asíncrona que ofrece Linux: epoll, disponible desde 2002, e io_uring, incorporado en la versión 5.1 del kernel en 2019. El autor parte de su experiencia reescribiendo TinyGate, un proxy inverso que pasó de una arquitectura basada en workers a ot

Linux 7.2 elimina la API strncpy tras seis años y más de 360 parches

El kernel Linux 7.2 ha eliminado definitivamente la API strncpy, una función heredada para copiar hasta un número determinado de bytes que llevaba años marcada como obsoleta dentro del propio núcleo. La retirada es el resultado de un trabajo de ingeniería de seis años que se ha concretado en aproxim

Cómo construir un Linux mínimo arrancando solo con kernel e init propio

Un desarrollador documenta paso a paso cómo reducir el arranque de un sistema Linux a su mínima expresión: un kernel y un initrd que contiene únicamente un binario 'init' compilado estáticamente. El objetivo es eliminar la creciente capa de software que, según el autor, ha convertido el arranque de

Array dinámico genérico en C sin struct ni capacidad almacenada

Un desarrollador ha compartido una implementación de array dinámico genérico en C que prescinde de estructuras y del almacenamiento explícito de capacidad. La técnica utiliza un array de dos punteros: el primero guarda la longitud como uintptr_t, y el segundo apunta a los datos. Así, declaraciones c

Física del CPU y ciclos de reloj: borrador de libro sobre C++ eficiente

## Física del CPU y ciclos de reloj: claves del rendimiento en C++ moderno Un borrador del primer tramo del capítulo 4 de un libro en preparación, "Efficient C++ Programming for Modern 64-bit CPUs" de Sherry Ignatchenko y Dmytro Ivanchykhin, ha sido compartido públicamente para recibir retroaliment

Un programador crea un Klondike Solitaire en 5 KB de C ofuscado para el IOCCC

El programador Oscar Toledo G. ha desarrollado un juego de Klondike Solitaire en lenguaje C que cabe en menos de 5 kilobytes, pensado como propuesta para la 29ª edición del International Obfuscated C Code Contest (IOCCC), un concurso de programación ofuscada que se celebra desde 1984 y creado por La

Optimizar una estructura de ping en C: de 12 KiB a 4 KiB por diversión

Un programador describe cómo, mientras trabajaba con un colega en un sistema de monitorización de conectividad basado en pings ICMP, fue reduciendo progresivamente el tamaño de la estructura de datos que almacena las entradas del anillo (ring buffer) de 512 elementos. Partiendo de un struct inicial

Reductores de casos de prueba: herramientas de depuración infravaloradas

Los reductores de casos de prueba son herramientas de depuración capaces de reducir automáticamente un fichero de entrada —código fuente, datos de configuración, cualquier texto— hasta conservar únicamente la versión mínima que reproduce un error. Funcionan combinando un programa, una entrada grande

Anunciados los ganadores del XXIX Concurso Internacional de Código C Ofuscado

El XXIX Concurso Internacional de Código C Ofuscado (IOCCC29) ha publicado sus entradas ganadoras en su segunda edición consecutiva tras la pausa de 2020-2024. Según la organización, el volumen de envíos y la calidad general alcanzaron niveles casi históricos, con cifras similares a las de IOCCC28 y

Simulación de fluidos 3D: tutorial práctico para programadores

Este artículo del blog de Mike Ash ofrece una introducción paso a paso a la simulación de fluidos en 3D, pensada para programadores sin formación profunda en física o ecuaciones diferenciales. El autor basa su explicación en el trabajo de Jos Stam, "Real-Time Fluid Dynamics for Games", y comparte la

Las cuatro preguntas de programación de mi entrevista en Microsoft en 1994

Casey Muratori, ingeniero de software y fundador de Computer, Enhance!, rememora en una serie de publicaciones las cuatro preguntas de programación que le formularon durante su entrevista para unas prácticas de verano en Microsoft en 1994. Las preguntas, que debían resolverse con código sobre la piz

Lone: intérprete de Lisp en C desde cero

Lone es un intérprete de Lisp escrito en C que se distingue por su desarrollo 'desde cero' sin utilizar librerías estándar como libc. Su sistema de gestión de memoria, conocido como el 'heap', es el tema central de esta explicación y representa un caso de estudio valioso sobre cómo se construyen los

Arrays en C: entre datos y punteros

Los arrays en C son una fuente común de confusión para desarrolladores debido a su comportamiento híbrido entre tipos de datos y punteros. Técnicamente, un array `T[n]` representa una secuencia contigua de valores en memoria, pero en la práctica se 'decomponen' (decay) en punteros `T*` en casi todas

Código C: la compatibilidad es un desafío constante

El artículo de lemon.rip explora un problema fundamental en el desarrollo de software en C: la dificultad de crear código que sea verdaderamente compatible con el estándar ISO C y que funcione de manera consistente en diferentes compiladores y sistemas operativos. La realidad es que la mayoría del c

Sp.h ofrece una biblioteca estándar moderna para C más eficiente y portable

sp.h representa un esfuerzo significativo para modernizar la biblioteca estándar de C, ofreciendo una alternativa ultra-portable y de alta calidad a libc. En un ecosistema donde las aplicaciones modernas requieren programación asíncrona y gestión de memoria precisa, libc a menudo se vuelve un obstác

Aprende a crear drivers para FreeBSD: libro gratuito

El libro "FreeBSD Device Drivers: From First Steps to Kernel Mastery" es un recurso educativo gratuito y de código abierto diseñado para guiar a los lectores desde un conocimiento básico de programación hasta la capacidad de desarrollar, depurar y contribuir con drivers de producción para FreeBSD.

Ingeniero explora el código de PostgreSQL para replicación WAL

Este artículo narra la experiencia de un ingeniero que, impulsado por la curiosidad, se sumergió en el código fuente de PostgreSQL para comprender el funcionamiento interno de la utilidad `pg_receivewal`. `pg_receivewal` es una herramienta crucial para la replicación WAL (Write-Ahead Logging) en Pos

Desaparece revista clave sobre código C

El 'Journal of C Language Translation' (JCLT) fue una publicación trimestral especializada, con un enfoque muy concreto: el desarrollo de herramientas que procesan y transforman código escrito en los lenguajes de programación C y C++. Aunque hoy en día pueda parecer un nicho muy específico, su impor

Biblioteca de programación clásica ahora gratuita en Internet Archive

La colección 'Dr. Dobb's Developer Library DVD' es un tesoro invaluable para cualquier desarrollador con interés en la historia y la evolución de la programación, especialmente en los lenguajes C, C++, Perl y la administración de sistemas. En esencia, se trata de una compilación digital de artículos

Spaces: Nuevo Asignador de Memoria para Linux

Un nuevo asignador de memoria llamado 'Spaces' ha sido desarrollado para Linux x86-64, ofreciendo una alternativa a malloc con características avanzadas para un control más preciso de la memoria. Spaces, disponible como un único archivo de código fuente, permite la creación de regiones de memoria ex

libghostty: nueva biblioteca para emular terminales

Desarrolladores han lanzado 'libghostty', una biblioteca de emulación de terminales de bajo nivel, como parte de un proyecto de demostración llamado 'Ghostling'. La biblioteca, extraída del núcleo de 'Ghostty', ofrece una API en C y Zig para que otras aplicaciones puedan integrar una emulación de te

Crea tu propia shell: guía paso a paso

Este artículo del blog de Healey Codes detalla la construcción de una shell de comandos simplificada, llamada 'andsh', como un ejercicio de aprendizaje. El objetivo es comprender el funcionamiento interno de una shell, más allá de su uso para ejecutar comandos y scripts. La shell es un programa inte

Juego resuelve un crimen depurando código

El juego 'Fatal Core Dump' es una innovadora propuesta que combina un misterio de asesinato con la depuración de un 'core dump', un archivo que contiene el estado de un programa en el momento de su fallo. El objetivo es enseñar una habilidad informática poco común de una manera atractiva y lúdica, s

Linux: Un libro experto ahora en aulas universitarias

El libro "The Linux Programming Interface" (TLPI) ha encontrado una inesperada pero valiosa aplicación: como material didáctico en cursos universitarios de programación para Linux y sistemas UNIX. Aunque su autor no lo diseñó específicamente para este mercado, su exhaustiva cobertura de los aspectos

ARM Neon: cálculo más rápido con nueva técnica

Un nuevo método para calcular sumas de prefijos (prefix sums) en procesadores ARM Neon ha logrado velocidades de hasta 8.9 mil millones de valores por segundo en un Apple M4, superando significativamente el enfoque tradicional (3.9 mil millones de valores por segundo). La técnica, desarrollada por D

libxml2-ee: mejora la biblioteca para XML

libxml2-ee es una versión mejorada de la popular biblioteca libxml2, un conjunto de herramientas en C para procesar documentos XML. Originalmente, libxml2 es una biblioteca fundamental para muchos proyectos que necesitan analizar, manipular y generar archivos XML. libxml2-ee se centra en optimizar e

Snkv: Almacenamiento Clave-Valor Simplificado con SQLite

Un nuevo proyecto llamado SNKV (SQLite Key-Value) ofrece una biblioteca ligera para almacenamiento de clave-valor directamente sobre SQLite, eliminando la necesidad de SQL. Desarrollado por Hash-Anu y disponible en GitHub, SNKV se integra fácilmente en proyectos C/C++ con un solo encabezado y propor

ia ligera para ESP32: zclaw, la solución personalizable

## zclaw: La IA ligera que transforma el ESP32 en un asistente personalizable En un mundo donde la inteligencia artificial se integra cada vez más en nuestros dispositivos, un proyecto de código abierto llamado zclaw está abriendo nuevas posibilidades para el ecosistema de Internet de las Cosas (Io

Deno: Guía completa de Interfaz con Lenguajes de Bajo Nivel

El Denonomicon se presenta como una guía profunda sobre la Interfaz de Función Extranjera (FFI) de Deno, un tema que, aunque cubierto brevemente en la documentación oficial de Deno, requiere una explicación más detallada para su correcta utilización. La FFI es esencial para permitir que Deno, un ent

Coccinelle: Automatiza cambios en código C

Coccinelle es una herramienta poderosa para programadores C que permite realizar transformaciones complejas en el código fuente de manera automática y preservando su estilo. Imagina que necesitas refactorizar una gran base de código C para adoptar una nueva práctica o corregir un patrón de error com

mahler.c: Biblioteca C para teoría musical

La biblioteca `mahler.c` es una herramienta de código abierto escrita en C99 diseñada para facilitar el trabajo con la teoría musical occidental. Su objetivo principal es proporcionar un conjunto de funciones para manipular conceptos musicales como intervalos, acordes, escalas y alteraciones de tona

Picol: intérprete Tcl en C de solo 500 líneas

Picol es un intérprete de lenguaje similar a Tcl, escrito en C por Antirez (conocido por su trabajo en Redis), que se distingue por su tamaño increíblemente pequeño: solo 500 líneas de código. Originalmente creado en 2007, Antirez lo ha puesto a disposición en GitHub como un ejemplo de código C bien

Juegos en C: El Regreso de un Lenguaje Clásico

Este artículo explica por qué un desarrollador elige usar el lenguaje de programación C para sus proyectos de juegos, una decisión inusual en la industria actual. El autor, con experiencia en desarrollo de juegos, detalla sus razones, que van más allá de la simple preferencia personal y se basan en