Things you can do with a Software Defined Radio (2024)
blinry.org
The Asus Gaming Laptop ACPI Firmware Bug: A Deep Technical Investigation
github.com
Apple releases iOS 15.8.5 security update for 10-year old iPhone 6s
support.apple.com
How to make the Framework Desktop run even quieter
noctua.at
Irssi: IRC Client in a Docker Image
hub.docker.com
Denmark close to wiping out cancer-causing HPV strains after vaccine roll-out
gavi.org
Doom crash after 2.5 years of real-world runtime confirmed on real hardware
lenowo.org
Java 25 General Availability
jdk.java.net
Show HN: A PSX/DOS style 3D game written in Rust with a custom software renderer
totenarctanz.itch.io
A dumb introduction to z3
asibahi.github.io
CubeSats are fascinating learning tools for space
jeffgeerling.com
Shai-Hulud malware attack: Tinycolor and over 40 NPM packages compromised
stepsecurity.io
I got the highest score on ARC-AGI again swapping Python for English
jeremyberman.substack.com
Waymo has received our pilot permit allowing for commercial operations at SFO
waymo.com
I just want an 80×25 console, but that's no longer possible
changelog.complete.org
I built my own phone because innovation is sad rn [video]
youtube.com
How Container Filesystem Works: Building a Docker-Like Container from Scratch
labs.iximiuz.com
Coders End, from Typers to Thinkers
etsd.tech
AMDVLK (AMD Open Source Driver For Vulkan) project is discontinued
github.com
So, after years of abandoning Rust after the hello world stage, I finally decided to do something substantial. It started with simple line rendering, but I liked how it was progressing so I figured I could make a reasonably complete PSX style renderer and a game with it.
My only dependency is SDL2; I treat it as my "platform", so it handles windowing, input and audio. This means my Cargo.toml is as simple as:
[dependencies.sdl2] version = "0.35" default-features = false features = ["mixer"]
this pulls around 6-7 other dependencies.
I am doing actual true color 3D rendering (with Z buffer, transforming, lighting and rasterizing each triangle and so on, no special techniques or raycasting), the framebuffer is 320x180 (widescreen 320x240). SDL handles the hardware-accelerated final scaling to the display resolution (if available, for example in VMs it's sometimes not so it's pure software). I do my own physics, quaternion/matrix/vector math, TGA and OBJ loading.
Performance: I have not spent a lot of time on this really, but I am kind of satisfied: FPS ranges from [200-500] on a 2011 i5 Thinkpad to [70-80] on a 2005 Pentium laptop (this could barely run rustc...I had to jump through some hoops to make it work on 32 bit Linux), to [40-50] on a RaspberryPi 3B+. I don't have more modern hardware to test.
All of this is single threaded, no SIMD, no inline asm. Also, implementing interlaced rendering provided a +50% perf boost (and a nice effect).
The Pentium laptop has an ATI (yes) chip which is, maybe not surprisingly, supported perfectly by SDL.
Regarding Rust: I've barely touched the language. I am using it more as a "C with vec!s, borrow checker, pattern matching, error propagation, and traits". I love the syntax of the subset that I use; it's crystal clear, readable, ergonomic. Things like matches/ifs returning values are extremely useful for concise and productive code. However, pro/idiomatic code that I see around, looks unreadable to me. I've written all of the code from scratch on my own terms, so this was not a problem, but still... In any case, the ecosystem and tooling are amazing. All in all, an amazing development experience. I am a bit afraid to switch back to C++ for my next project.
Also, rustup/cargo made things a walk in the park while creating a deployment script that automates the whole process: after a commit, it scans source files for used assets and packages only those, copies dependencies (DLLs for Win), sets up build dependencies depending on the target, builds all 3 targets (Win10_64, Linux32, Linux64), bundles everything into separate zips and uploads them to my local server. I am doing this from a 64bit Lubuntu 18.04 virtual machine.
You can try the game and read all info about it on the linked itch.io page: https://totenarctanz.itch.io/a-scavenging-trip
All assets (audio/images/fonts) where also made by me for this project (you could guess from the low quality).
Development tools: Geany (on Linux), notepad++ (on Windows), both vanilla with no plugins, Blender, Gimp, REAPER.