Published Software
I publish some of the software I produce. I do it when I think some other people can benefit from it, even if "other people" means "myself from someone else's computer".
As always, unless I get a ridiculously large amount of free time, I will only gather the software published since the creation of this list.
Publication dates may be approximated.
SVG to PDF
An offline-first, progressive web application to extract multi-paged PDF from an SVG.
- 2026-09-30
- Progressive Web Application. It uses JavaScript and WASM.
- PWA source code. It references to a private registry for styling.
- Typescript package and its source code.
- C core library's source code. Loot at development branch.
Motivation
I use to take notes by hand with my tablet. If they were related to literature, or almost any other topic, probably I would be able to use handwriting recognition to register them. But the thing is I take notes in mathematics. So I have to record pen's strokes, not characters. For doing so, I found that the more practical tool is Obsidian's excalidraw plugin. This tool gives me a infinite whiteboard to write, and information is saved in its own (open) format.
The point is, time to time, these notes have to be converted in presentation slides or in PDF documents. And here comes the problem: how do I convert a notepad in a multi-paged PDF?
Well, first thing is to decide which chunk of the notepad corresponds to each page or slide. When I take the notes, I usually fit the content in rectangles page-like or slide-like. So I have this part covered.
Next? Obsidian let me export the notepad to an image (SVG or PNG). An image with huge dimensions. In particular, SVG only stores the "drawn content", therefore its weight is proportional to the actual content, not to the surface it uses. Therefore I export my notes to SVG, which is a more standard format than Obsidian's one. As the result I have a big image with rectangles containing my notes, which should be transform to PDF's pages.
Then, the final steps should be extract each of these rectangles (with the content inside them and only with that content) and convert it to a PDF pages. Finally, merge the pages in a single PDF document.
I made my self a program in C which does exactly that: given an SVG image and the dimensions of a rectangle playing the role of a page, it creates an SVG image for each of them, cropping the content. It does from left to right, up to down. Then, with help of the Inkscape's command line, I converted each of them in a PDF with a single page. Finally, with pdfunite, I merged all pages. I actually had a shell script which did those three steps.
Although this process seems a bit unreliable, it has worked well for my needs. However, I could only perform that conversion in my computer, but my notes where originally on my tablet. All the back-and-forth file transfers made the process really cumbersome.
So, I transform the project to a tool that every device with a modern browser can use, even offline. The first command line version was made by hand with love. The refactoring to turn it into this web tool was done using generative IA, followed by some manual tweaks without paying much attention to style, readability or extensibility.
About
The usage is designed to be simple: You select the image, then you set the size of the page-like elements (referred as "containers") and select which kind of PDF document want as output.
By default, the SVG objects that act as containers are excluded from the result. By selecting the option, you can include them.
Going into more detail about how it works, I have to point out that its functionality is really limited. Because its original purpose, by now it only takes into account SVG rectangles and SVG paths, ignoring all the other SVG objects.
Also is important to be clear about how it detects a container. What the core logic does is to compute the bounding box of all the SVG paths and SVG rectangles. If dimensions match the input container dimensions (with a certain tolerance), it is consider a page. For example, that means a diagonal line with the right length and inclination could be consider a container.
To conclude, I want to mention that this project has three pieces of code: a C library (compilable to WASM), a Typescript package, and the actual PWA. The source code of all three are open, and I encourage you to request me to pull any of your improvements.
GBA Tetris
An offline-first, progressive web application with the game of tetris.
- 2026-08-30
- Progressive Web Application. It uses JavaScript and WebGL.
Motivation
Long time ago, by coincidence I re-visited this old codepen I did when humanity coexisted with dinosaurs. It actually worked, and it was fun! Of course, it is only a prototype, as it was intended.
I remember doing that in a full afternoon.
Then, a question popped into my head:
In my current situation,
am I still able to overcome the prototype barrier
and create real products?
If so, how much time will it take me?
(for comparison, prototype's afternoon).
Well, then I did it. I went beyond the prototype and did the working production-ready game. And more importantly: I answered my questions.
About
As said, it is a progressive web app. Therefore, you can install and use as an standalone application, using your browser as the engine. This allows you to reuse a really thick layer of software in your device.
In turn, either as standalone or web application, it is designed to be offline-first. In particular, you need internet to reach the web the first time, and all needed resources will be cached. After then, you can play completely offline. If you're online, resources will be downloaded only if there is an update.
This application is a personal reinterpretation of the tetris game I used to play in my game boy pocket during my childhood. Controls, scoring and other details should be as similar to the original as my memory, documentation and ability allow me.
In addition to the game itself, there is a public leader board that the application updates when it has internet access. Only 100 top scores are shown.
I thoroughly enjoyed designing and doing every aspect of the game. From engine ABI's design, to drawing the sprites, handling user input, or user interface, to mention a few. Nevertheless, despite how much I was enjoying, I stopped this madness before I got into the sound management.
Finally, I just want to say that I could write way more about how it was made, what I learned from it, and others. However, I'm finishing here. If you are interested, just ask me about it.
Skew B Ultimate
A post about that Rubik's cube.
- 2026-07-24
- Post. It optionally uses JavaScript and WebGL.
I just had a draft with the ideas about the resolution of this cube and the other ideas presented in the post. I also had the ThreeJS render with the cube. Both since long, long ago.
It took me a while, but I finally wrote all together. I did it quickly and messy, but its done.
Double pendulum visualization
With time-dependent masses.
- 2026-04-14
- Web Application. It uses JavaScript.
At the time of starting the project, in relation with this article, I needed to smoke test the equations for the double pendulum with time-dependent masses. And quickest way I know for that is simulate and look.
At the same time, I knew that simulation would not be the last one I would need to do, and probably I would want to publish some of the future simulations.
This,
together with enthusiasm for C and my (back then) recent interest
for
WebAssembly.
push me to test the practicalities of one of my software
philosophies:
compute close to the metal, visualize close to the user.
As a result, I created (for the first time) an application using web interface to control a logical core in C.