Hello world! (2023-03-15) - jlxip's blog

Throughout the course of my life, I've read plenty of blog posts from which I've learned most of my knowledge. University helped, that's for sure; it gives a "pointing" and (sometimes) sequential chain of subjects that one must learn to master some Computer Science and Engineering topics. It has even made me discover topics I didn't know could be that interesting (computer graphics, for instance). However, when it comes to real practical knowledge, it must be learned from the internet. Books and slides are useful only up to a point.

These last few months (maybe even years?) I've been feeling like I know way more than most people do about certain topics, and I've had the growing feeling of "contributing too little" to what one could call the "public accessible knowledge of the internet": the hive mind. Thus, I'm taking action. So, erm... Welcome to my blog! I will try to fulfill two purposes with it: talk about my projects, and write some tutorials on difficult topics that I encounter, and that I think other could benefit from.

I've recently redesigned my website [1][2] to make it look cooler and more in line with my current favorite computing aesthetic. If you're reading this from https://jlxip.net, you're actually just seeing a mirror of my Gemini capsule, gemini://jlxip.net. The mirror is done via a really simple program I've written recently: tg2h (trivial gemini to http) [2.5].

Welcome back to plain text, we've missed you. Nowadays, the web is so filled with javascript that it can barely run. For this reason, some geeks went back to gopher, a text-oriented alternative to the web that existed back at the same time. Gemini [3] was created to be a modern alternative to gopher, even though it doesn't intend to replace it. It has mainly two advantages: TLS, and a brand new markup language, gemtext [4]. It's a cool language because it implements most of what people wanted from the original web, while keeping it really easy to parse (and thus difficult to introduce vulnerabilities). If you want to try it, check out Lagrange [5], a beautiful client for it.

This being said, my posts will be written in plain text, not gemtext. However, I will soon make a program to "armor" them dynamically with a header and some footnotes as you're seeing now (for now I'm doing it manually).

I finished my degree on Computer Science and Engineering at University of Granada on September. You can check out my bachelor thesis [6]. Since then, I've been spending my time working on some projects that I'd like to state on this post.

I spent most of October studying for my driving theory test. I don't know how it is in other countries, but people usually do plenty of tests on their own to get comfortable with the tests. Later, once I passed, on the 23rd I came to know Gemini thanks to a YouTube video from Mental Outlaw [7]. Since I found it amazing, four hours later I pushed the first release of zodiac [8], a reverse proxy and load balancer for said protocol. I find it extremely useful since it makes writing Gemini servers way easier: there's no need of handling TLS certificates.

On the 26th I pushed the first release of bsgemini [9], the "basic static gemini" backend for zodiac. It's more of an implementation guide of sorts to make zodiac FastCGI backends; some really simple software.

On November 5th, I pushed the first commit of SSockets [10]. While writing both zodiac and bsgemini I came to know about non-blocking sockets and epoll technology. I find it surprising not having heard about it before, since it's essential to modern server-side application design; probably because most server software already abstracts the need for knowing this. When both projects were done, I realized I had solved the non-blocking sockets situation in a way that could be generalized for any other projects and purposes. This was the idea that came to be SSockets (Scalable Sockets): a library for taking care of non-blockingness.

Most November went to develop SSockets and make both zodiac and bsgemini use it. I also set up some CI/CD to automatically generate docker images, since both are meant to be used in servers. I then made some SSockets bindings for CPython on another project, pyssockets [11]. I had known of Python C Extensions for a long time, but I never really did anything with it, so there it is. Over those days I also did a really simple GitHub action to build and push Docker images following the Semantic Versioning 2.0.0 [12] naming convention for versions; I published it as docker-semver [13].

On December I started learning Rust, which I've found to be the best "modern" language (I might talk about this concept in the future). I also decided to put a stop to the development of Strife, the project that ended up being my bachelor thesis a few months before; my operating system from scratch. I wrote a farewell [14] and, since I don't really want to leave osdev, I started a brand new project, which felt like a breath of fresh air. I decided to call it Daisōgen [15], and it's my main project for now, even though it's been paused for a while. I will certainly return to it. I kept working on Daisōgen for the rest of the month, as well as the first half of January.

On the second half of January I got a bit tired of helper [16], the generic Makefile that all projects used on Strife, and what came to be used for all three SSockets, zodiac, and bsgemini. It was meant to be "the best Makefile", so it would get copied to my C/C++ projects, and modified to suit the environment. Because of this, I tried to learn some actual build systems. I had a bad experience with CMake from a few years prior, since it seems overcomplicated to me, and it's full of bugs. It doesn't want what I want it to do. So, I tried to learn the GNU Build System, and I had pretty much the same experience. Too much boilerplate and configuration needed for a very simple project. Because of this, and trying to avoid getting into weirder systems, I decided to stay on GNU Make, since I'm already very familiar with the language and you can make the fastest build system with it. I then got an idea: let's make a generic Makefile, like helper, but one which can be copied verbatim for all projects, and configured via variables at the top, not via inclusion as it was common to do before [17]. This was the birth of tbs, the trivial build system [18].

As soon as the first tbs version (1.0.0-RC1) was released, I put it to work on the three gemini-related project I've talked about. The difference was phenomenal [19] [20]. Soon after, I released version 1.0.0-RC2, which fixed some bugs and made configurations easier [20][21]. I will probably release 1.0.0-RC3 in the very near future, which will mostly improve the docs.

On February 1st I moved my ECDH project from my web to GitHub pages in order to make it more trustworthy, and made some improvements in usability [22]. I spent the whole rest of the month on a hardware project, since I'm starting to learn about Electrical Engineering. I'm having a lot of fun with it, and even at this point I haven't really put an end to it, I'm still working. I even ordered some PCBs from jlcpcb and all.

On March 5th I published tg2h [2.5] and went on a trip, away from the digital world, until today, which I have returned and started the blog.

That's what I've been up to since I got my degree. I will probably write some entries here shortly. Maybe I will even do a monthly catch up. We'll see.

Thanks for reading.

-- jlxip


[1] https://web.archive.org/web/20230226013214/https://jlxip.net/
[2] https://web.archive.org/web/20230305192418/https://jlxip.net/
[2.5] https://github.com/jlxip/tg2h
[3] gemini://gemini.circumlunar.space/
[3 www] https://gemini.circumlunar.space/
[4] gemini://gemini.circumlunar.space/docs/gemtext.gmi
[4 www] https://gemini.circumlunar.space/docs/gemtext.gmi
[5] https://github.com/skyjake/lagrange
[6] gemini://jlxip.net/theses
[6 www] https://jlxip.net/theses
[7] https://www.youtube.com/watch?v=K-en4nEV5Xc
[8] https://github.com/jlxip/zodiac
[9] https://github.com/jlxip/bsgemini
[10] https://github.com/jlxip/ssockets
[11] https://github.com/jlxip/pyssockets
[12] https://semver.org/
[13] https://github.com/jlxip/docker-semver
[14] https://github.com/the-strife-project/.github/blob/master/profile/farewell.md
[15] https://github.com/daisogen
[16] https://github.com/the-strife-project/helper
[17] https://github.com/the-strife-project/stdlib/blob/master/Makefile
[18] https://github.com/jlxip/tbs
[19] https://github.com/jlxip/zodiac/blob/5d8fea8c5e0bdc7a6c3a7be0387a076259b826a4/Makefile
[20] https://github.com/jlxip/zodiac/blob/a479209ef8f07e597121e63e866dcbbefe02e888/Makefile
[21] https://github.com/jlxip/zodiac/blob/f702ae86d71753e30268862a2f4207c543f3077b/Makefile
[22] https://github.com/jlxip/ecdh