Skip to content
View arreina's full-sized avatar

Block or report arreina

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
arreina/README.md

Alberto Ruiz

Español

I build software by directing AI coding agents (Claude Code). I choose what to work on, set the constraints, decide what gets proposed to other projects and handle the conversation with their maintainers. The agent writes and tests the code. Every pull request below says so in its description.

Open source contributions

AnyPS5 · C++20, CMake

A tool that ports PS5 executables to Linux and Windows. My contributions are robustness fixes found with fuzzing and sanitizers. Each one has a regression test.

Pull request Status What it fixes
#183 fix(relinker): require a full ELF64 header before reading it Merged Truncated input files were read past their end
#193 fix(relinker): keep ELF bounds checks from overflowing Merged Crafted offsets wrapped the bounds check (heap overflow)
#213 fix(shader): skip the push constant copy when there is nothing to copy Merged Undefined behaviour reported by UBSan in the shader cache
#280 fix(shader): reject SDWA and DPP instructions without their modifier word Merged Truncated GPU instructions were read out of bounds
#328 fix(json2): reject documents nested deeper than 512 levels Merged Deeply nested JSON crashed the process (stack overflow)
#412 fix(shader): reject position exports without vertex input info Merged A pixel shader exporting a position crashed the recompiler (null pointer)
#455 fix(audio): bound ATRAC9 decoding to the superframe Merged Corrupt ATRAC9 audio made the decoder read past the game's buffer
#488 fix(json2): throw on numbers that overflow a double Merged A JSON number like 1e309 became infinity and crashed the process when serialized
#352 fix(savedata): reject invalid directory names in sceSaveDataDelete Merged ../ in a save name deleted directories outside the save folder
#3631 test(json2): destroy the value before constructing over it Merged A test leaked a node, reported by LeakSanitizer
#3971 fix(libkernel): limit param.json nesting depth Merged A param.json with tens of thousands of nested arrays crashed the process (stack overflow)

My fork, arreina/AnyPS5, adds CI for this work: AddressSanitizer and UBSan jobs, static analysis (cppcheck, clang-tidy), SPIR-V validation, and fuzzers for the ELF reader, x86 and GPU instruction decoders, the shader recompiler, the shader cache, JSON and GPU command packets. They have found more than a dozen bugs; the ones not yet reported are queued.

Issues I reported:

Issue Status What it is
#1276 ANYPS5_ENABLE_SPIRV_TOOLS: CCP turns a constant byte store into an 8-bit OpConstant that the module cannot declare Fixed in #1343 14 hours later Found by the recompiler fuzzer; the fix was tested with the shader from the issue
#3634 AddressSanitizer on Linux: the PS5 window is the shadow gap, so the guest arena has no free range Fixed in #3705 (by another contributor) Sanitizer builds could not allocate guest memory. The fix uses the same approach as the workaround described in the issue: move the guest window out of the shadow gap

I also ran the AMD tests of #487 on a Radeon RX 580 (Polaris), and a maintainer cited the result when closing it.

On #2709, an intermittent guest_avplayer test failure, I ran 1,000 stress runs under AddressSanitizer and UBSan with no failure on Linux and posted the result. The failure that remained on Windows was fixed by another contributor in #5733.

Coucou · Tauri (Rust, TypeScript)

A desktop companion that shows the state of coding agent sessions (Claude Code, Codex, Gemini CLI and others) at the top of the screen. My contributions are to its Linux version.

Pull request Status What it does
#104 Linux (X11): keep the island unfocusable and on every workspace Merged The overlay no longer steals keyboard focus and follows you across workspaces
#110 Pause idle animations, and stop polling for a cursor Linux doesn't have Merged Lower idle CPU use
#111 Linux: shrink the hidden island to its wake strip, and only take clicks there Merged The hidden overlay no longer blocks clicks on the windows below it
#105 Add npm run fake-session to try the island without Claude Code In review A simulated session for developing and testing without an agent
#106 Ignore clicks on a fresh approval card, and wire up Y / N Closed Prevented approving a permission request by accident; closed because the project merged the same click guard separately

ATRAC9 audio decoder used by PS4/PS5 emulators.

Pull request Status What it fixes
#5 Range-check band extension, gradient and channel config parameters In review (approved by a reviewer) Corrupt audio frames made the decoder read and write past its own arrays

Own projects

Lince · C

A programming language for making video games, with Spanish keywords, so that programming does not require knowing English. Written in plain C with nothing to install to build it (gcc and make); tested on Linux and Windows. The juego module brings a window, 2D drawing, sprites drawn with text, keyboard, mouse and gamepad, sound (WAV and OGG), particles and scenes.

  • Hot reload: save the file while the game is running and it updates without closing the window, with the player where they were. Errors show up in the game window.
  • Sharing: lince repartir turns a game into a .zip with SDL2 inside that runs without installing anything.
  • Documentation that cannot drift: the manual's examples and the tutorial's steps are real programs that run when the pages are built, and CI fails if a page no longer matches.

Website: arreina.github.io/lince · Tutorial: your first game · Manual

Platform game made with Lince

importar "juego"

juego.abrir("Mi juego", 640, 480)
sea x = 320

mientras juego.abierto() {
    si juego.tecla("derecha") { x = x + 300 * juego.dt() }
    si juego.tecla("izquierda") { x = x - 300 * juego.dt() }
    juego.limpiar([20, 24, 48])
    juego.circulo(x, 240, 20, "#ffc850")
    juego.texto("HOLA", 20, 20, 3)
    juego.presentar()
}

How the work is done

  • Small, single-topic changes that follow each project's conventions
  • Bug fixes come with a regression test where the project has a test suite, checked to fail without the fix
  • Only synthetic test data; no proprietary content
  • Nothing is published to another project without my review

Popular repositories Loading

  1. lince lince Public

    Lenguaje de programación de propósito general en español

    C 1

  2. machinelearning-az machinelearning-az Public

    Forked from joanby/machinelearning-az

    Repositorio del Curso de Machine Learning de la A a la Z con R y Python

    Jupyter Notebook

  3. curso-automatizador curso-automatizador Public

    Aplicacion portable para automatizar cursos online corporativos. Secuencia configurable de clics por posicion o imagen, sin necesidad de instalar nada.

    Python

  4. bot-reels-videojuegos bot-reels-videojuegos Public

    Bot que convierte noticias de videojuegos en reels verticales: guion en español de España, voz Piper, B-roll libre de derechos y control desde el móvil

    Python

  5. AnyPS5 AnyPS5 Public

    Forked from boykopovar/AnyPS5

    Tool for automatic PS5 executables porting to Linux and Windows

    C++

  6. coucou coucou Public

    Forked from Louis-CFM/coucou

    A tiny friend that lives in your notch (macOS) or at the top of your screen (Windows) and keeps an eye on your Claude Code sessions.

    Swift