Linkblog/2025/03/31
raylib4PlayStation2, Skin Deep on Steam Deck, Dennis's Thoughts on ECS, Self-contained Python scripts with `uv`, PostgreSQL MCP Server, There is no Vibe Engineering, Armin leaving Sentry.
Raylib on the PS2, neat.
Brendon Chung - Skin Deep: Steam Verified
Skin Deep is now officially Steam Deck Verified! ✔️
What does this mean? Basically, it means the game has been confirmed to play well on the Steam Deck.
![]()
I am so hyped for Skin Deep, I’ve already played through the entire demo on my own Steam Deck, so I can confirm, it runs great!
Dennis Gustafsson - Thoughts on ECS
I mentioned in my year summary that I have a lot to say about ECS, and got several requests to write more about it, so I’ll do an attempt to write up my thoughts here.
Dennis goes onto talk about ECS, and bring up many points I’ve seen others discuss before, but the second section of the article is what I find the most interesting, his answer to what he views as a more “Sensible ECS” setup.
I’d argue that a large portion of what ECS brings to be table can be implemented in a much simpler way, that is equally data-oriented, but does not require the complex, dynamic database that ECS really is. If your game does not require dynamic composition at run-time, you can simply create your entity types statically using composition in the following manner:
struct Monster { Transform transform; Velocity velocity; Collider collider; PathFinding pathFinding; };
There is no need for inheritance here, just include whatever components that make sense for what you are implementing. Note that all data for a monster is layed out linearly in memory instead of being scattered.
I like this approach.
Another idea, which isn’t really ECS, is just to be content with a big Entity
struct, that other things can extend, but to only one layer, and you are much more fine with overloading that said big Entity
struct with whatever you might need.
Self-contained Python scripts with uv
uv
, lets you write this:
# /// script
# dependencies = ["ipython", "httpx", "loguru"]
# ///
import httpx
import IPython
from loguru import logger
...
And then simply run uv run whatetver.py
, it will fetch the packages this file needs before it runs, and run it in its own little self-managed virtual environment.
Astral keeps hitting the mark, I am so hyped for their answer to Python typing.
stuzero/pg-mcp - PostgreSQL Model Context Protocol (PG-MCP) Server
PG-MCP is a server implementation of the Model Context Protocol for PostgreSQL databases. It provides a comprehensive API for AI agents to discover, connect to, query, and understand PostgreSQL databases through MCP’s resource-oriented architecture.
YAMCPS - Yet another MCP server.
Also known as yam clicks per second.
Sergey Tselovalnikov - There is no Vibe Engineering
[…] While AI undeniably impacts the way we write code, it hasn’t fundamentally changed our role as engineers. […]
I can’t really summarize this article, its a good read I wouldn’t want to paraphrase.
The authors own conclusions I’ll leave here as-is:
Vibe Coding as a practice is here to stay. It works, and it solves real-world problems – getting you from zero to a working prototype in hours. Yet, at the moment, it isn’t suitable for building production-grade software.
It is possible that there’ll be a future where software is built from vibe-coded blocks, but the work of designing software able to evolve and scale doesn’t go away. That’s not vibe engineering – that’s just engineering, even if the coding part of it will look a bit different.
Armin Ronacher - I’m Leaving Sentry
Every ending marks a new beginning, and today, is the beginning of a new chapter for me. Ten years ago I took a leap into the unknown, today I take another. After a decade of working on Sentry I move on to start something new.
Armin has been at Sentry for as long as I can remember, hopefully his next endeavour is great!