aerkiaga's blog

Progress report on my projects

Successful attempts warrant celebration, while failure asks for a swift change in perspective. This is illustrated by this log of mine, where I describe in detail how the last design for a 3D printable PCB wasn't working well enough, and what I'm doing instead.

After managing to produce the third prototype for the electrochemical soldering machine, I noticed the method had too many drawbacks; now I'm working on something much simpler: using a low-melting alloy and air.

I've also made a 180º turn (maybe not that much...) regarding my custom scripts for the same job. Rather than a full-stack solution involving a GUI and full G-code exporting capabilities (all of this already implemented), I'm now writing a script that simply pipes together KiCAD, OpenSCAD and Cura to get better capabilities. More details on this later! For now, I'm deciding whether to publish the previous tools, as they are incomplete but already useful in their current form...


I've also designed a mechanical device to control 16 axes with just two stepper motors. The design uses a corkscrew-shaped ramp and a shaft that just moves into and fits any of the axes. I've made a few tries with printing the pieces, but still not a working thing.

And, outside this project, I've already finished rewriting the Avogadro 2 graph code. I'm already planning changes further into the future, particularly with regards to connected group detection...

Finally, all three bugfix commits have been taken up by Debian, Ubuntu and Fedora maintainers. After the important matters have been taken care of, I'm focusing on extending Avogadro, already as part as this year's GSoC work (the application to which I'm discussing with its developer).

  • A huge optimization to bond perception, which makes importing PDB files an order of magnitude faster.
  • A fix for metals in PDB files not being loaded properly.
  • Support for formal charges in CML (and thus also SMILES, etc.), CJSON, SDF and, in a rudimentary form (detects cations in e.g. some drugs), PDB.
  • An optimization in secondary structure perception, that makes PDB import much faster when combined with other optimizations.

Right now I'm rewriting a part of Avogadro's code; the reason is, molecules in Avogadro contain some atom and bond information, as well as a graph data structure. I added some extra metadata to speed up many operations, but Geoff suggested that I move that into the graph (which makes sense). Problem is, the molecule code wasn't relying on that graph in the slightest, and trying to do so revealed it's basically nonfunctional... So a small optimization turned refactoring has now become a full-fledged rewrite :)


I've also finished my third 3D-printable PCB manufacturing device prototype. Hopefully I'll be able to try it within the coming days and report the results on Hackaday.io.

Most notably, I've fixed two more bugs in avogadrolibs, and I've contacted the Debain and Ubuntu maintainer teams to get all three fixes merged in time. Overall, working with the Avogadro 2 codebase feels pretty straightforward; it's basically a full rewrite of the original Avogadro, under the Open Chemistry umbrella.


I'm knees deep into designing the code for my project! I want to make a very extensible base to build on top of, so that involves some careful planning, especially around the data storage paradigm. Storing “data” might not be sufficient, because “data” can only be interpreted in a particular context; “knowledge” could be a more useful philosophy to work with, involving the storage of both data and enough context to understand it by itself.

I've also ordered some tungsten nozzles and ball bearings, and designed some specific stuff, but otherwise not much. I have an exam tomorrow, so I've dedicated the week to studying. I hope it plays out well...

I wish I could have done more this week, but unfortunately there are many times when one can only powerlessly watch and grieve; a feeling I, and any other person in the medical field, are familiar with. And one that might be more widespread these last few days, as violence and despair unfolds right before our eyes, once again, affecting millions of unwilling people for interests way beyond them... Maybe I'm missing the politics involved here, but honestly, doctors should worry about people first, and maybe that's the right mindset in general.

Last week I focused on studying, which is likely not of interest to anybody... But this week's activity is! I've been hard at learning the Rust programming language. What for? Well, because I intend to write all code for the Big Project in it :)

Rust is truly wonderful. It has most features one can desire, is rooted in formal theories and, more importantly, offers the highest reliability for a language almost as fast as C. I only miss a stable ABI for plugins and low-level stuff, but I'll work around that in due time.


Remember that sub-project of mine to 3D-print circuits? Well, I've uploaded it to my hackaday.io account. For now it's just a description of the mechanics and the start of a log of my work. You can read more about it there!

If you don't want to, here's a TL;DR: I want to use my custom scripts to print tiny water-tight channels and then make use of electroplating to grow copper crystals along them, controlling the process so it's reproducible and the copper actually bonds with all contacts (and the voltage doesn't fry anything!). Once I get a prototype that works, I'll upload all the files to Hackaday; I'm making a third prototype right now, after getting modest results with the previous two.

And, regarding my Big Project again... I'm in the initial design phase for its code. Which means I'm redacting a huge LaTeX document with things like design goals and code organization, and I've yet to write a single line of it ;). I don't typically dedicate that much time to design, but this one's really important (and also really complex), and I believe I'll otherwise regret it down the road.

This week I decided that I would mainly work on my game Nodeverse, which has just hit 2000 downloads on ContentDB 🥳. Here's what I've been able to accomplish:

  • Now ships persist across server restarts, clients joining and leaving. Their data is serialized in a compact format to minimize I/O operations in future versions. You can even fly a ship, quit and rejoin, then keep flying right where you left off!
  • Unboarding a ship will place you outside it, at a location that makes sense, like next to it at the nearest reasonable spot, or on top if you've landed on a liquid.
  • I added a dozen new sound effects; these are all footstep sounds to make the experience more immersive. Still, I'm not quite satisfied with all the sounds and will probably polish some of them a little more.
  • I've begun the work to compose a title screen theme for Nodeverse. I'd like it to be an orchestral piece with a more adventurous, rather than spacey, vibe to it. Not sure if this will land on 0.2 or 0.3.
  • A little tweak to grass soil textures to make them more diverse, ported to the 0.1.x branch.

With this, most of the ship-related infrastructure is in place for 0.2. For your interest, here's the list of things I'm still planning to do before the release:

  • Add many nodes for shipbuilding. The current ones are only for test purposes, and don't allow for very good-looking or customizable ships.
  • Polish the sounds and textures a bit more.
  • Finish the title theme. I may as well put this off.
  • Changes to world generation, like a couple new nodes and more interesting caves. I'm also unsure about this.
  • Make the ship code more general and add an API. This is because this code will be reused for other cool features in version 0.3. But it's also important regarding the next point.
  • Create a new mini-game making use of the 0.2 ship mechanics. Something like finding various ship pieces on different planets and using them to improve or customize your ship. I'm open to suggestions :)

What nodes should be added? Should the focus be on making ships realistic, visually appealing or customizable? I'm not entirely sure of that, if you want to discuss this or other stuff, you can do so at ContentDB threads or forums, GitHub or @aerkiaga:matrix.org.


While that's been my main focus this week, I've also been working hard on my project to embed electronics into 3D printed parts. Right now as I write this, a small test setup is running and reporting voltages continuously on my laptop. It's still too early to determine if the test is going well, let alone whether the technique will even serve my needs... That'll have to wait until next week, so stay tuned!

Unfortunately, I've had an issue with my 3D printer, so that might delay further tests a few days. Also, while I try to be as productive as I can regarding these projects, as a medical student I'm still severely limited by time and exams. So streamlining my workflow (as I've done here building an electrical tool to automate these tests) is vital to ever seeing projects completed.

I've finally had the time to get my hands on my new 3D printer! Armed with OpenSCAD, Cura and my growing codebase of custom scripts, I am finally ready to start working on some serious stuff.

I've had a custom OpenSCAD gear library since December, featuring very fast-rendering gears of all kinds. I just couldn't get bevel gears right... This week I finally managed to. I printed those double helical bevel gears and they couldn't mesh better! Right now I'm trying to get some printable bearings; after some trial-and-error I've decided for a herringbone cycloid gear bearing.

Last week I polished my 3D-printable electronics/fluidics scripts. This week I've been able to actually test and debug them against the real thing; plus I've kept on adding new features.

I've sent an update to the PrinterOS Discord, informing them of this progress and what I intend to do next: embed electronics into the print (well, “printable electronic circuits” should imply this, but anyway...). I have some tricks up my sleeve for that, but unfortunately it's just too stupid of a method to tell anyone before checking it actually works :) And no, it's not conductive filament, that's basically like a nicely shaped resistor.


Regarding other projects, I've added a unit test to a Minetest pull request I made a while ago. Not much actually, but tests are important, right?

I've learned a lot about bolts from a couple of textbooks lent by a friend. There are other interesting engineering subjects written about in there so I may as well give them a good read too. In particular, now I can actually buy bolts in my local hardware store, using some more specific terminology than “bolts, star-shaped hole, small”.

What does one do when a software bug is annoying them? Report it to the developers, of course. But there's one cool thing with Open Source software: you can also do it yourself!

I did this with LibreOffice back in the day (just kidding, that's only last year). I reported the bug in November 2020, self-assigned it in March 2021, and after learning the ropes, sent a fix in May. Et voilà! Now I can make clinical statistics charts without the data series going haywire! Could I have done this with MS Office, huh?

So, fast-forward to November 2021, when I reported this bug in Avogadro, one of the programs in the Open Chemistry suite. These months I've come to believe this project should be getting more love from contributors (just look at the name, it's important stuff!). Seeing how little manpower such an important project gets has inspired me to, hopefully, work for them in GSOC 2022.

But that's a whole different matter. Here I'm talking about a bug that was, well, bugging me; and it seems like I've grown less patient and more efficient since last year. Because this time I only waited until January, and sent in a fix two days later, this week. It also helps that the Open Chemistry codebase has such well organized code, heck I want to spend the summer diving into it so badly!


Now, honestly that's not taken up much time this week. Most of it was spent improving the code I want to use for fully 3D-printing hydraulic and electronic circuits. It's not yet in a state wherein I could comfortably publish it (FOSS ftw ;), but at least I've implemented the ability to export the prints. The hackers and makers among you will love this...

I've also become more familiar with the theory behind dielectric spectrocopy, and I'm pretty positive that I could use it for my intended purposes if I design the circuits carefully.

Also a friend has quite a few spare stepper motors to sell cheap, so that's some monies I could shave off the BoM for the Big Project. A project still expensive for my standards, but it's something.

Btw, if you would like to contact me for any reason, drop me a text at @aerkiaga:matrix.org.

There's a chance you know about the electric-hydraulic anlogy. An analogy between two fields I happen to need, in combination, in two of my projects... Now, I've got an exam on neurology and cardiology next week. Apparently unrelated, huh?

What if I show you this article related to neurology? Or this one to cardiology (no, that graph is not from a half-wave rectifier with a smoothing capacitor). Or this whole bunch of literal circuit diagrams taken straight out from medical-related publications? See the pattern now?

Well, this is the simple fact that both engineers and nature look for solutions to fight the very same physical laws (also scientists don't like reinventing the wheel). And this week I'm studying all these four “similar” subjects; isn't that terribly beautiful? :D

By the way, I'm much less interested in those four than I am in the psychiatry-computer science duo; and I might be forcing the analogy at this point, but I want to believe it's no coincidence that I want to become a psychiatrist... Deep Learning, anybody? Anyway, don't mind my ramblings ;)


This week, after having previously contacted them, I sent an e-mail to the FSFE translators mailing list with a list of changes to help correct the faulty spanish translation of their PM/PC Open Letter. I hope their campaign ends up being successful!

My Big Project is related to the field of biotechnology. I need to make it reliable for critical applications, while still being open to flexible use. One particular problem I've faced is storage: how can I implement an atomic, consistent filesystem that's still dead simple and standard? Well, I've been working a bit on that front. I want to create a protocol that's verified by automated proof and then show it to people that might also find it useful.

And, last but not least, I've made the decision that I want to participate in GSOC 2022, as, for the first time, it allows non-CS students to get onboard! I've read the rules and everything, but I'm worried that my being a med student will get my proposal turned down... Oh, yes, I only intend to send one, to this organization (provided they even participate...). I've been reading their source code this week so at least I get a head start; I'll need to set up a computational chemistry workflow though.

This week has been marked by productivity; that, and bad sleep. I ...

  • ... published Nodeverse 0.1.6 with many bug fixes. One of them had been reported back in August!
  • ... sent three pull requests to the engine developers. Two of them are related to API documentation, and one has already been merged. I tend to follow engine development very closely.
  • ... started this blog, obviously :)
  • ... learned more about AC circuits. I'll need that knowledge for the printer, but especially for the Big Project (it needs several RF dielectric spectroscopy circuits).
  • ... bought many presents for my relatives and friends! Yay!
  • ... made a visit to someone in a different city. Sorry, no details on this.

Did I mention I have a final exam tomorrow? Yeah... It's about this. Not my cup of tea, not terribly complicated either; I could probably have studied more if I hadn't done any of the above things :/ Or if I had studied at all before this week. But, y'know, procrastination... Of the productive kind.

Well, there's some good news too. The new 3d printer has arrived, so hopefully I will start using it in the coming days.

Also, Nodeverse is becoming much more popular. Now over 1600 downloads, it got its first positive review, stating that it “needs some work, but we could be looking at the next No Man's Sky”! Not sure about the last part, but I sure will put that work in. The game currently appears on the first page of the ContentDB “Top Games” list... which is only 3 pages long anyway, but hey, that's something!

The New Year is already here, and nothing can make a year as memorable as, well... writing everything down!

I'm Aritz Erkiaga, currently a Medicine student at the University of the Basque Country. But, for someone as curious as me, learning and making are unavoidable side quests, so as projects come and go, I'll keep track of my progress around them here.

As of right now, in the middle of the exam period, there are three main creative projects behind my procrastination: * Nodeverse, a space exploration game inspired by No Man's Sky, but with voxel mechanics. * An open-source printer; it started as a proposal by a social network user, then evolved into a project involving multiple people... Although only I seem to be working on it at the moment. * Something else :) A big, big project that I expect to talk more about in the future.