HNHacker News
TopNewBestAskShowJobs

boricj

2,051 karma · joined May 21, 2020

https://github.com/boricj

https://boricj.net/

submissionscomments
boricj··on Ask HN: What is the most interesting project you are working on?
At work, DC power systems for the telecommunication market. Deceptively complex, think UPSes if they were made of Lego and scaled from kilowatts to hundreds of kilowatts, with installed bases stretching across decades.

At home, ghidra-delinker-extension [1], a Ghidra extension for exporting relocatable object files (or in other words, stripping programs for parts like Doctor Frankenstein). Absurdly complex, got me a poster session at SURE workshop at ACM CCS last year, as a hobbyist.

[1] https://github.com/boricj/ghidra-delinker-extension

boricj··on US Treasuries Have Become Unappetizing for Foreign Central Banks and Governments
It's not just about treasure bonds. The mood is shifting in Europe that, maybe, putting all the eggs in the USA basket is perhaps not that great of an idea.

It's the vindication of Gaullism half a century after De Gaulle's death, the concept of strategic autonomy is getting traction in the rest of Europe. It's not that we can't be friends, but that we shouldn't let our future be gambled in the hands of Wisconsin voters every two years.

boricj··on China's Regulators Take Aim at "AI Boyfriends"
Generalities like this dismiss the lived experience of other people.

You don't know the pain of others, especially what others hide from you.

boricj··on I wanna live an NPC life
That can happen with a high stress tolerance too, it just needs to be pushed past the breaking point. Some of us have gone through harrowing experiences and the NPC lifestyle is one coping mechanism among many others.
boricj··on Zig: Pointer Stability for ArrayLists
It took me a minute to understand that this asserts on pointer change within the container, rather than lock/unlock the data structure like a SDL surface.

I recently implemented a custom C++ container for a path whose components could be iterated, backed by a std::string. I just store indices and a reference to the string, such that my iterators are not invalidated if the std::string gets reallocated after being modified. Far less error prone for little added cost.

boricj··on That's a Lot of YAML
I wrote a C++ library at work that, among other things, serializes/deserializes to JSON, CBOR and BSON. I don't get that point.

The first two formats I've implemented as fully streaming, the serializers emit into an output iterator one character/byte at a time and the deserializers only need to hold one value at a time (mostly for strings, and not even for CBOR's byte arrays, which are streamed). BSON requires full document instantiation because of byte offsets and is genuinely anti-streaming in its design.

I happen to have implemented a serializer for YAML, fully streaming, mostly as a compact-ish human-readable debug data representation. I can scarcely think of fates worse than having to write a spec-compliant YAML parser.

boricj··on I should have loved biology (2020)
Isn't biology the applied reverse-engineering of a billion years of DNA evolution, where the laziest solution that works wins, is all written in assembly, with tremendous amounts of dead code and hardly any refactorings?

I've already seen the horrors that lurk inside of poorly-written 90s video games. Hard pass.

boricj··on Why aren't smart people happier? (2022)
Because being smart doesn't mean being wise. Lack of wisdom can fuck up your life far, far worse than lack of intelligence... and I for one am not wise when it comes to people.
boricj··on Ask HN: What Project are you the most proud of?
ghidra-delinker-extension [1]. It's a Ghidra extension for exporting relocatable object files from programs, which enables all kinds of heresy I've dubbed "Mad Max-driven development".

Somehow, it landed me an academic poster presentation [2] at the 2025 SURE Workshop, part of ACM CCS 2025 held in Taiwan. As a hobbyist playing Doctor Frankenstein with bits instead of gibs in my spare time, that is "received an invitation from Hogwarts"-levels of impossible, given that ACM CCS is the biggest academic cybersecurity conference in the world.

It also somehow grew a small community online around it, mostly within the Windows decompilation scene. It's not finished (as it is the kind of project that is practically endless), but I don't see how I could top that.

[1] https://github.com/boricj/ghidra-delinker-extension

[2] https://boricj.net/2025/10/25/ghidra-delinker-extension-and-...

boricj··on Ask HN: What art would you like to express?
Drawing.

I used to. Back at university and at the pub. Graduated almost a decade ago and had the one drink too many a while back. The soul's too broken to draw for now. The skill's there, but the heart isn't.

Maybe I'll be able to draw again someday.

boricj··on How to Make a Nintendo 64 Game in 2026
I'm tinkering with a PlayStation homebrew (voxel space renderer) and development for fifth generation consoles has never been easier.

Modern toolchains, programming languages, dev cartridges and libraries from the community makes all the difference. Outside of some niceties like ICE (gotta write that GDB stub for target hardware at some point), it's not that different from what you'd experience with modern embedded work.

boricj··on Everyone should know SIMD
Everyone doesn't need to know SIMD. Mechanical sympathy is an important passive perk for software architects to cut down the number of reworks down the line, but I would rate benchmarking and being able to identify bottlenecks as more important everyday skills.

I'm working on a voxel space renderer homebrew for the PlayStation. I only have so many cycles to spend on rendering before it becomes a slideshow, so I count them in my hot rendering loop and parallelize work as much stuff as I can, even across memory load stalls from main RAM.

I've worked on a basic network accessory card with a STM32 MCU that is extremely overkill for what it needs to do. We haven't bothered making any performance or memory optimizations whatsoever, writing plain C++ almost as if we were on server-class hardware because we had such egregious margins.

The first question to ask is not whether something can leverage SIMD, it's whether the performance requirements are met or not (although it's far too easy to not care when it's not your hardware that's struggling...).

boricj··on Ask HN: A DC Powered Home?
I've actually went far in planning and acquiring gear for my apartment, though it's a low priority task for me.

Turns out there are tons of stuff that sip power (set-up boxes, Ethernet switches, NAS...) that can either be powered directly by Power-over-Ethernet or through a splitter (DC-DC converter). That can be handled by a PoE Ethernet switch, which itself is usually powered at 54VDC, so it's also an excuse to run a homelab on 48VDC and get rid of tons of power supplies.

However, DC isn't well suited for the entire home for several reasons, mostly due to cheapness and historical reasons. For example, AC breakers are dirt cheap because arcs naturally extinguish when current crosses zero volts, whereas DC doesn't.

There are areas where DC is used. I work on telecommunication gear where nearly everything is -48VDC, but the beefy copper busbars needed to push large amounts of power through them would make a homeowner cry at the expense. Higher voltage is possible to compensate, but you enter not-safe-for-touch territory and I'm not knowledgeable about that.

boricj··on Linux on the Sega 32X. Who needs hardware synchronization primitives anyway?
Careful, or at this rate you'll end up running Linux on the Sega Saturn's 68000.
boricj··on Theo de Raadt: "You've been smoking something mind altering" (2007)
Doesn't that message date back to a time that either predates or is almost concurrent with the introduction of x86 hardware-assisted virtualization? I wasn't around playing with VMs back then, but I'm not sure that the track record of x86 virtualization 20 years ago was that great.
boricj··on Cache-Conscious Data Layout in Rust: Field Zoning, False Sharing, 128-Byte Rule
Some of us work with industrial SoCs, with puny in-order Cortex-A7 cores and tiny L1/L2 caches. Sometimes, you really need to optimize for the hardware and micro-architecture you have in order to hit the performance goals required and message passing isn't always the answer.
boricj··on Linux on the Atari Jaguar
The Sega Saturn might also qualify, as its sound subsystem has a 68000 with 512 KiB of RAM. Running Linux on it might be trickier though.
boricj··on Quake in 13 Kilobytes (2021)
The making of is well worth a read: https://phoboslab.org/log/2021/09/q1k3-making-of
boricj··on Zig's new bitCast semantics and LLVM back end improvements
If I understand it correctly, it basically boils down to copying bits from the source to the destination, in order from the least significant bit to the most significant bit. It's not equivalent to C++'s reinterpret_cast.

I'm no Zig expert, but if you want endian-dependent semantics I'd assume either @ptrCast or a packed union would do the job.

boricj··on Why I email complete strangers
I've received a couple of emails about ghidra-delinker-extension, but I would not limit this to only emails. I've also had numerous people contacting me through GitHub issues or Discord messages over the years, with this as a topic starter.

I've had deep technical exchanges with smart people all across the world I would've never met otherwise. I've seen people using my tool for completely insane projects successfully. I've even had a data scientist from India who was inspired and motivated by my story of presenting at ACM 2025 as a hobbyist to put his work out there.

Interacting with all these people has broadened my horizons - literally going halfway across the globe in one instance. All of that happened despite me being an introvert, who hates initiating any form of social interactions with people and sounds like a raving lunatic on my blog.

Maybe I should be the one to send out more emails...

boricj··on Tribblix: The retro Illumos distribution
I can't seem to find a list of supported hardware (or at least hardware which is supposed to work). Will it run on a UltraSPARC T2 server? I've got one collecting dust in the basement.
boricj··on Ask HN: What is your blog and why should I read it?
It's https://boricj.net and you should read it if you like software development and Doctor Frankenstein combined.

(hint: I showcase Mad Max-driven software development on it)

boricj··on Ask HN: What Are You Working On?
Personally, a voxel space renderer for the PlayStation (Comanche terrain style rendering).

In theory, it's really not suited for this because (at least back then) this was designed for computers with:

- relatively large amounts of RAM (uncompressed color+heightmap data takes a lot of space),

- fast CPUs with data caches (it's a 2D trapezoidal walk of a top-down projected fustrum with plenty of additions, multiplications and divisions),

- memory-mapped linear framebuffers (for software rendering).

The PlayStation has none of these things: only 2 MiB of main RAM; an in-order scalar 33 MHz MIPS III processor without a FPU or a data cache, where any CPU load from main RAM stalls the pipeline for 5 cycles, multiplications have a 6 to 13 cycles latency and divisions have a 36 cycles latency; and the only way to touch VRAM is to send commands to the 2D GPU.

What it does have is 4 KiB of I-cache (direct-mapped), 1 KiB of scratchpad with no wait states and a fixed-point GTE coprocessor which is mostly geared towards projecting 3D points onto a 2D screen and not general matrix/vector processing. Meaning that if I get my hot loop within 1024 instructions (and no function calls), fit my working set+stack within 1 KiB and can pipeline the GTE for transformations and the CPU for map scanning/GPU submissions, it might just work.

So far I'm getting decent framerates (like 10-15 FPS at 256x240) with just software projection and GPU line rendering. Right now I'm wrestling with the GTE and various ways to trick it into transforming more points than it's supposed to be able to do, by looking at the fixed-hardware math equations for the various instructions and trying to fit my equations into them (doing stuff like putting relative altitude into X/Y vector registers instead of coordinates and massaging the rest of the values to get screen Y coordinates out of it).

Kind of a hardcore topic to pick for my first homebrew ever, but I craved a simpler, low-level optimization challenge as a pipe cleaner, after working on ghidra-delinker-extension for so long.

boricj··on A Farmer Donated Land to Turn into a Park. The City Is Building a Data Center
I'm only pointing out that ever since the French revolution, we have a rich history of regime change (and also of strikes and demonstrations). Some were due to external factors (like the Vichy régime during WW2) and some were bloodless (like the end of the Fourth Republic).

Us rolling the dice whenever we have a major political crisis is a meme at this point, for better or for worse we're just not the kind of people to keep the same constitution around for 250 years.

boricj··on A Farmer Donated Land to Turn into a Park. The City Is Building a Data Center
Probably because we have a well established history of regularly changing regimes. Since we overthrew royalty in 1789 we've had five republics, two empires, three monarchies and a bunch of short-lived totalitarian regimes, coups and other major political events.

If anything, the longevity of the Fifth Republic is starting to become unusual (only the Third Republic and the Ancien Régime have lasted longer). Maybe we're overdue to flip the table again as per tradition.

boricj··on Full Reverse Engineering of the TI-84 Plus Operating System
Isn't the information in this already largely known and documented? There have been over 30 years of tinkering, reverse-engineering work and assembly programs on the (e)z80 TI graphing calculators.

Incidentally, that lineage has finally come to an end as TI has released the TI-84 Evo-T, which uses an ARM Cortex-M core and a firmware apparently rewritten from the ground up.

boricj··on Making Graphics Like it's 1993
I'm tinkering with a voxel space rendering tech demo as a PlayStation homebrew. After one weekend of work I'm getting decent results (like, 10-15 FPS) and I've yet to use the DMA, the GTE or even polylines primitives.

It's refreshing to dust up trigonometry and good old low-level optimization tricks. When the scratchbuffer has 1 KiB and the stack can only use a fraction of that, it makes me realize how spoiled I'm at work with the microcontrollers we have, with threads being allocated 8 KiB of stack and backtraces with over 50 functions of C++ templates on it.

boricj··on Dutch gov't will only allow European company to operate DigiD platform
> The Dassault family has very close ties with the French government and defense industry. There's no doubt in my mind that if the French government gets serious and says "Jump!" Dassault would just ask "How high?"

I'll push back on that point.

The FCAS program was originally conceived as a French-German joint political initiative by Macron and Merkel. The NGF plane within it has been dead in the water for years because Airbus and Dassault can't work out their disagreements. It's a conflict between two industrial companies that's blocking forward progress, with the Airbus and Dassault CEOs duking it out across press releases and shareholder meetings.

If Dassault was a French state puppet, Macron would've strong-armed Dassault into working with Airbus on this €100 billion project by now. Yet, the French President seems to know better than to try and do that. One does not get to be basically the only major private independent defense company in a famously nationalized French defense industry during the Cold War without managing to hold the French state at arm's length, especially during the nationalization years of Mitterand's presidency.

Though your concerns about ownership of the Dutch defense industry are certainly valid, I don't see how the European defense industry could have completely avoided consolidation after the end of the Cold War, given the budget cuts to defense. The Americans went much further on that front and nowadays the lack of internal competition is causing them all kinds of problems for them.

boricj··on PlayStation Architecture
If you want a good horror bedtime story, you can peek at OpenBIOS within the pcsx-redux tree: https://github.com/grumpycoders/pcsx-redux/tree/main/src/mip...

The commentary section starts with "The retail PlayStation BIOS code is a constellation of bugs and bad design." and it gets worse after that. There are hidden gems inside the source code comments of that simili-reconstruction.

boricj··on Dutch gov't will only allow European company to operate DigiD platform
The days of nationalized French defense companies and state arsenals have been over for quite a while. Assuming I didn't make any mistakes:

GIAT was privatized, then renamed to Nexter, then merged with German KMW to form European KNDS and now it's about to do an IPO.

All of the French aerospace industry (including missiles) bar Dassault and Thales is inside Airbus.

Arquus was bought by Belgian John Cockerill.

I could probably cite more if I dug deeper, but while we still have French defense companies like Dassault, Naval Group and Thales, a fair amount of our defense industry is no longer exclusively French owned.

And if the French government or owner starts getting uppity, you could always take a page from the Swedes and how they Kockums the shit out of ThyssenKrupp.

Page 1 of 15Next →