Log (rss)

07.09.2024 // Great Software is Simple on Many Planes of Abstraction

Bogotá, Colombia

There is a dichotomy in software development, high-level and low-level software. This is particularly true for programming languages, where you have low-level languages that give you more control, but require more understanding of how computers work, and high-level languages that allow you to express your ideas more simply and allow you to not think about low-level details.

High-level software is called that because it operates at higher levels of abstractions. This means that it obscures the machinery of what happens within a computer (the "low-level"), so that we can focus on the task at hand. For example, we would not want to think about how a web browser forms a TCP/IP connection, communicates with a DNS server, etc., when opening a web page—at least, we do not want to up until the point where we encounter an error.

High-level software unlocks the ability for us to perform more advanced tasks quicker with less mental overhead. It can also unlock a great deal of improved security, as it can restrict certain operations from the user and better adapt to their needs, which, even if it deprives users of some liberty, can still be desirable.

However, when we only focus on building a good high-level experience, it comes at the expense of low-level control that becomes inaccessible or too complex for regular users. This invites us to be inefficient and construct false understandings. Without a deep understanding of our systems, we cannot meaningfully fix the system nor optimize it. It invites us to outsource this control to experts, who are often restricted to building general solutions for many use-cases. Poor understanding often leads to rebuilding the same solutions over and over again, with the solutions becoming even more complex and inefficient each time. When only experts understand systems, it centralizes knowledge and power away from the general population.

I explored the democratic problems it leads to in my essay The Curse of Convenience.

Low-level tools give us greater control and greater freedom. Understanding the lower-level units makes it easier for us to understand how everything fits together, and gives us the power to make the changes we wish. However, using only low-level tools makes it more difficult to cleanly express ideas and it can be a frustrating experience. It sometimes requires digging through manuals and the time it takes to accomplish tasks becomes much longer. It is also easier to make mistakes.

This dilemma leads me to solutions that attempt to be simple on many planes of abstractions. In programming languages such as Go and OCaml, the high-level semantics are simple, but a user can still also understand the lower-level details of what happens, which makes it possible to operate at a lower-level when necessary without being an expert. In software, Unix utilities find the balance of being simple and allowing users to express high-level ideas. Older motorcycles are easy to operate, and also easy to fix when necessary.

- Marc

07.09.2024 // Communal Computing

Bogotá, Colombia

One of the most beautiful ideas behind the original Unix, that I think has unfortunately gotten lost and is now underrated, is the idea of a form of collective computing. People would gather as a group and collectively build tools. The way Dennis Ritchie described it:

"What we wanted to preserve was not just a good environment in which to do programming, but a system around which a fellowship could form. We knew from experience that the essence of communal computing, as supplied by remote-access, time-shared machines, is not just to type programs into a terminal instead of a keypunch, but to encourage close communication."

Using a collection of simple tools, users would then be able to bring these together on time-shared machines and build solutions to meet the needs of their communities.

People sitting in a circle typing on typewriters, connected to the same computer.
Fig 1. Timesharing a Wang 3300 Basic. Source.

Another obvious advantage to collectively owned computers is that you retain ownership from the bigger companies, while at the same time still unlock better optimization permitted by scale. For instance, these collective computers can live in geographically advantageous regions. For example, Solar Protocol directs users to whichever server has the most sunlight.

There are a lot of advantages to empowering users to fix issues themselves, rather than someone fixing their problems for them. I wrote about it extensively in my essay The Curse of Convenience. I also see with the new LLM models a resurgence of this idea in Maggie Appleton's essay about home-cooked software. Personally, I am skeptical that LLM's will enable this revolution, but I think her essay is still worth a read!

Today, there is a communal computing system that exists, it is the SDF. It has been around since the 1987, and it is definitely marketed towards a technical audience. It hosts a set of collective computers that any member can use for any purpose (within reason). With it, people have set up a Lemmy instance and a Mastodon instance. It also comes with a free email account and a shell you can SSH into and do any kind of programming that you want.

Personally, I use SDF to host my notes with git. Doing that was as simple as ssh user@tty.sdf.org -t mkdir notes && cd notes && git init. Once done, I am able to access these notes from my phone or my laptop, wherever I happen to be. To clone it locally, I just run git clone user@tty.sdf.org:~/notes. I also hang out at their Lemmy instance.

Terminal screen showing Welcome to SDF Public Access UNIX system
Fig 2. SDF Public Access System.

- Marc

04.09.2024 // Human Readable File Formats

Bogotá, Colombia

I have recently(ish) become interested in file formats. In particular, file formats that are human readable and human writable.

These formats have quite a few advantages:

But they also come with challenges:

To me, the biggest beauty of these file formats is that they can outlive the software that created them. Even if I am on a foreign computer, without internet, hit with amnesia, I can still make sense of and modify these formats.

Software, in some way or another, always takes data and outputs data, that's what a computer is meant to do. I think it is worth thinking about how we can make sure that the data generated outlives the software that made it, inspired by Permacomputing.

I kicked off a thread on Mastodon to see what kinds of human-readable data formats people know of. I am excited to see what people share.

- Marc

04.09.2024 // Building Software is like Building a House

Bogotá, Colombia

Common startup-mentality is to move fast and break things. Books like Lean Startup also posits that startups should build "MVPs", which is an incomplete version of the product that allows you to test it on real users so that you can iterate on it.

All the talk is about being cheap and fast, which I do think is important for a startup. However, I also think people get it wrong, because while it is good to be lean, the product should not be buggy, wasteful or low quality.

I think of software as similar to building a house. The fastest way to get a house up is building a house with poor foundations, using the cheapest brick with prebuilt modules. But, it is also unlikely that anyone would want to live in such a house.

If, instead, we were to invest in quality, even if it means to build only a small section at the time; I believe the end result would be better and the feedback received along the way will also be more useful. So, when coding let's make sure that the code is good. Let's not neglect testing, but perhaps with a more limited scope. Let's take the time to think about the visuals and the energy efficiency of the solution, because neglecting this affects the quality of the entire product, and energy efficiency is a social responsibility we all bear.

I also think of writing code akin to maintaining a house. If your code is bad and smelly, it is like working in a kitchen that has not been cleaned for months with dirty dishes piled up in a sink. It is not a place where you want to work in, or inhabit.

- Marc

02.09.2024 // On Learning How to Publish

Bogotá, Colombia

As of today, I have publications forthcoming in Hypertext Review, The Good Life Review and The Madrid Review. In the past two years, I have published at Americas Quarterly, Periódico de Libros, Pie de Página, and for Artists at Risk Connection.

It was difficult for me to write that paragraph. It is even more difficult still to post it and keep it on this website. The feeling that I am bragging really gets under my skin, which is why I tend to struggle with self-recognition. But, my aversion to listing "accomplishments" is not even fully based on humility, it is also a bit of cowardice. It takes courage to stand publicly behind a piece of writing (especially some pieces of writing that I now find could be so much better, if only I could pick them apart and put them back together), it is safer to sink into anonymity.

However, if I were to retreat, I would be incapable of truly understanding where I am at as a writer. And, despite of everything, I also marvel at it all still, that the texts that I spent hours drafting and tweaking and dialoguing with others about are out there, whatever that means. In a sense, I still don't really truly believe it.

Americas Quarterly magazine open in the foreground and in the background a busy NYC street.
Fig 1. Visual Arts feature on Oaxacan artist Dell Alvarado for Americas Quarterly.

From childhood, language and writing have always been a safe haven. I gravitated towards storytelling in the moments of most uncertainty. It was fun. Libraries were there no matter how many times we had to pack up and move. I always knew I wanted to write, to be able to share images, thoughts, impressions, and feelings with others.

However, a writing career never seemed like an option. Of course, a career involving writing, yes. But it was out of the question that I would just write. That wasn’t a real career, and most importantly, it was unsustainable for someone like me. Even when I majored in languages, literature, and the humanities—I imagined I needed to enter academia or do something else. And I did, I did do something else, and I found many additional passions in the social sciences, in anthropology, in film, and in science.

I continued to write, but for myself. Other responsibilities quickly took up my time, responsibilities that I genuinely enjoyed tackling and that were within the fixed path laid out by my studies (which involved academic writing). But when the studies ended, or paused (who knows), and I had to think closely about what I really wanted to do, the urge to write, creatively, made itself known. But about what? And who would read it?

It turns out that I had published before, as a student. But I never took those achievements seriously. I downplayed the writing itself, for some reason, “it didn’t count”. In some sense, I feel that still, like the publications I have listed at the top of this entry "don't count", incomprehensively.

The first creative text that I published appeared a decade ago in the quarterly magazine, Just Poetry!!! This poem, “Fruit Salad is Heterogenous”, was just a faint memory in the back of my mind until I rediscovered the printed issue earlier this year. I didn’t even remember it had been printed. I certainly didn’t remember it had been one of the nominees for best of issue. And when I re-read it, I realized it was not half-bad for a high school student publishing and writing poetry for the first time. I surprised myself with those words, and they evoked feelings and memories latent with meaning.

Dithered image of Just Poetry!!! issue opened to the page of the poem 'Fruit Salad is Heterogenous'.
Fig 2. Fruit Salad is Heterogenous.

Exactly ten years later, my first creative English narrative pieces and Spanish-language poetry pieces are forthcoming.

I am well aware of all the ethical issues with the publishing industry, as with any industry, especially as journalism and print struggle financially. There are very good reasons the reject the notion of traditional publishing all together. And yet, the efforts of small presses that I see here in Bogotá and online internationally are exciting (Hypertext and The Good Life, are non-for-profits; The Madrid Review is a volunteer effort). And even in more traditional media, there are people passionate about storytelling. I can discern (or a better word, vislumbrar) a way of breaking through and sharing stories and histories with a variety of people. That prospect excites me.

Not to say I haven’t been discouraged by rejection (part and parcel of the process) or by a perceived shortage of time or disappointment in myself (self-doubt, or perfectionism). It has felt impossible at times. That feeling of failing to communicate something important, essential or the essential nature of that which I am trying to communicate. The hegemony of English also makes publishing in Spanish challenging—and I don’t want to feel pressured to write in English because of it. I want to write in English because I feel like it. And I want to be able to write in Spanish (or any other language) when I feel like it too.

In those times of self-doubt, my friends and family have been essential, as well as the kind words of the readers who have found something worthwhile in my writing. But also, diving into the written works of others has been so important. Those books, poems, and articles that speak to me motivate me and give me courage.

- Andrea

02.09.2024 // Homecoming + Logging

Bogotá, Colombia

Today is our first full day back in Bogotá and this is my first log entry for Comma Directory. Today, I want to reflect a bit on how I got here, both literally and metaphorically.

We had a rough trip back from Sasaima, Cundinamarca. Two buses with aggressive drivers, getting dropped off in an unfamiliar part of the city, and then a taxi driver who fell asleep at the stop light (wishing him safety and rest). These are the realities of traveling and living in Colombia, and even more so for most Colombians living day to day, struggling to survive.

For years, my family undertook this pilgrimage from Bogotá to Sasaima, and under much rougher conditions than we did. And despite of it all, visiting my great-grandparents’ farm was one of the familiy's happiest moments of the year, for as long as it lasted.

Landscape with mountains, sky and a cemetery in the foreground.
Fig 1. View of the cemetery in Sasaima, Cundinamarca.

I had never been to Sasaima before, by the time I was born the voyages had ceased, my great-grandfather had already passed away.

Being able to finally go to a place that meant so much to everyone and that I have heard about since childhood was very special. Eating almojabanas at the town square, going to the plaza (market) for lunch, hiking through the surrounding mountains, eating fresh mandarinas on the trail, and meeting kind people who love their town and are proud of the land—it was a wonderful parenthesis, a welcomed contrast from the grittiness of Bogotá.

But even with all its pollution, the crime, the poverty, and the painful memories embedded into these mountains, coming back to Bogotá is coming back home. This month, I’ll leave Bogotá again and I am not sure exactly when I’ll be back—like so many of the other times I've departed, but it never stops being painful. I am excited about what is to come, it is beyond my wildest dreams, life that is. It has been that way during the past ten years. Full of new beginnings, new opportunities, but those beginnings always come paired with goodbyes and (hopefully) see you laters. A "see you later" is always an act of faith, and I am by nature faithless.

I see logging as more than a recollection of important events or thoughts, but as a way to digest and accept that duality, so integral to life. Whether one travels or not, we are all constantly starting and ending. Moments, books, trips, meals, tasks, conversations.

A book and a journal on a bed in a wooden interior.
Fig 2. My latest read and the Rey Naranjo "Small Bibliographic Log" in Santa Inés, Sasaima.

Before Comma Directory I have been logging in journals, the analog way. However, I rarely keep my journals around and I almost never have wanted to re-read my entries. Too self-conscious of my own writing, unfettered and unedited. However, recently I have made the effort to keep and complete the same journal, and also keep two additional analog logs on books and films. These logs are from the Rey Naranjo Editorial House, which is part of Bogotá’s very vibrant artistic scene. Their design is quite nice, they are compact and portable, and there’s a bit of humor and character infused into them. I’ve also managed to keep an agenda for the first time, which I bought at the beginning of the year in Oaxaca, that has also served as a nice writing space. More on writing next time.

- Andrea

28.08.2024 // Social Apps with Email

Bogotá, Colombia

Email combined with isync makes it is possible to access email offline and have it synced on a regular interval.

I looked around for options to build a shared TODO list with Andrea and sometimes the best solution is that which is right in front of you. All the local solutions that I have used in the past made sharing difficult, and neither one of us wanted to sign up for some third-party service nor download an app just for TODO items. Then I started thinking a few days ago about how I have always shared links with myself in the past, which was through email.

Well, thanks to fastmail's web filters, I was able to set up a specific email address that Andrea and I could use to share TODO items between each other. All emails sent to that email address end up in my TODO inbox. How do I share TODO items? Well, just add Andrea on CC and then it's done. No sign-up to a new service needed. When the item is complete, I just reply done and then my email rule will automatically drag it to my Done archive.

Similarly, I use this as my social bookmarking service. I have a special email address and a email rule so that when that address receives links from the right people, those links end up automatically in my links archive.

These two solutions work cross-device as well. All my devices have email so sharing across BSD, iOS, and Android becomes trivial. All of them support email.

This could be further extended with interfaces that operate on the isync directory. You could then have TODO apps that use email as a backend, and what is nice is that people would not need to download an app to operate on it, so it would be a form of "progressive enhancement".

- Marc

28.08.2024 // Offline Website Documentation

Bogotá, Colombia

On most browsers, you can easily download and print a PDF version of a website for offline use by using Ctrl+P.

With that, you can save and render the PDF with Zathura or Mupdf. I discovered that my undervolted laptop actually struggles with Zathura for PDF rendering, however Mupdf renders the PDFs instantaneously.

However, another technique that might be nicer is to save the website page as Web Page (HTML only) and then convert it to a more readable plain-text format. That way it is much easier to search through your documentation using grep or other Unix tools.

Terminal window displaying readable
documentation.
Fig 1. Rendering documentation readable from the terminal.

To do so Pandoc can be used to to convert it to a Markdown page.

pandoc my-site.html --to markdown_strict -o my-site.md

Markdown is not necessarily the most readable format though, so with some extra help of lowdown, we can produce terminal-readable documentation.

NO_COLOR=true lowdown -tterm -o my-site.txt

With the power of Unix, we can pipe these commands together:

pandoc my-site.html --to markdown_strict |\
> NO_COLOR=true lowdown -tterm -o my-file.txt

Then we can read it with less

cat my-file.txt | less -R

- Marc

25.08.2024 // Personal Database with Recutils

Bogotá, Colombia

I have begun using recutils to build a database of what I have read, watched and also for storing references on how to do things.

The tool has a decent amount of utilities for querying data and its simple formatting means that even if recutils one day stops working, it would be trivial for me to build my own replacement.

Recutils collection including L'etranger by Albert Camus and Ishmael by Daniel Quinn.
Fig 1. Editing recfiles in Kakoune.

The usage becomes simple. To find all FreeBSD specific information, I can simply run the recsel -q freebsd ~/refs.rec and I will find all my Freebsd related references. I made an alias of it so I just have to type refs freebsd.

Three recfile rows shown on terminal: Backlight/brightness, Listing devices on Freebsd, blocking websites. Includes instruction
Fig 2. Output of running refs freebsd.

- Marc

25.08.2024 // Gymnastics Rings

Bogotá, Colombia

Working out remotely can be challenging. When the gym is far away, staying in shape is a goal that can easily be sidelined.

To work out regularly and everywhere, I carry my favorite set of exercise equipment, the Gymnastics rings.

Wooden gymnastics rings lying on the ground
Fig 1. Gymnastics rings.

These rings can be used anywhere you have a tree or bar to hang them up on, and enables you to perform a complete upper-body pull workout, which is hard to do without any form of equipment.

After 8 months, starting from scratch, I was able to unlock the ring muscle up with the help of a personal trainer.

Crude drawing of 3 steps for performing a muscle up.
Fig 2. The three steps of a muscle-up.

Over time, I have transitioned over to exercising on my own. These days I follow the training programs sold byfitnessfaqs. I find his marketing to be a bit like snake oil, flashy, but the concepts he teaches are legit and the programs were recommended by my trainer. Though it should be said that these workouts should be supplemented with some of your own reading, as his training programs can be a bit light on theory.

On Reunion island, I found a tree next to a small lake where I could hang up the rings, do my exercises and then jump into the lake and swim for a bit to cool myself down. On the best days the lake was completely empty.

A lush lake on Reunion Island
Fig 3. The lake on La Réunion where I would swim.

The simplicity of the wooden rings combined with being alone in nature makes it a meditative form of exercise.

- Marc