šŸ”Ø Projects

šŸŒ Fediverse

Ā© Odori Sato, ; ć‚ˆćµć‹ć—

Nowadays, social media sites are all separated and isolated. Someone using Telegram canā€™t message someone using Signal, and someone on Facebook canā€™t follow someone on Twitter. This results in a cycle of consolidation. Whichever site has users will grow to have more users, because it has more users. And because it has more users, they will become more and more entrenched: ā€œI canā€™t leave, my friends are here!ā€ This consolidation gives the site power, which it invariably abuses: Violations of privacy, of non-free malware, censorship of opinions, and sometimes even the intentional spreading of dangerous lies intended to provoke violence. This is all profitable, and in their interest. This is why I think no single organization should have such power to begin with; it should be shared.

In the past, there werenā€™t massive silos, but a slew of small sites and discussion boards. Then, the power was in the hands of many server operators, but in very tiny pieces. It wasnā€™t too important if any given site started abusing its users, since they could jump ship easily ā€” they werenā€™t as entrenched as today. There was the problem, though, of small crowds: The same reason you could easily move was the same reason youā€™d feel like you werenā€™t reaching who you wanted. You couldnā€™t message someone on another board, of course. This is part of the reason Facebook & co. became popular. Itā€™s nicer to be isolated in a massive cage with a big crowd, than a cramped one with a tiny flock!

Fediverse is the perfect middle-ground between these two approaches. Itā€™s made up of several tiny sites, so noone has too much power, and these sites all communicate with each other, so you have a big crowd. On fedi (for short), you can follow or message anyone on any other Fedi server! All you have to do is choose a small server, and the world is your oyster. If you want to meaningfully escape X, you should consider joining a website of Mastodon, Pleroma, or Misskey! ^ ^

I want to support fedi as best I can, and so I host a social media server, Mansardo Jamada, and a Git-forge Shinonome Labs. Anyoneā€™s welcome to them, even you! In addition, Iā€™ve written some scripts dealing with fedi servers, and am writing a framework for writing fedi servers in Common Lisp, activity-servist.

šŸ’¬ Multi-protocol chat

Ā© MiiwoArt, ???; Pp6

We all have three, four, five, or even six programs for our chats. Signal, Telegram, WhatsUp, WhatsDown, WhatEverā€¦ they sure do pile up! But why? Whatā€™s the point of that? Thereā€™s a baseline functionality provided by all chat protocols; so why must we run a million different programs, each of them re-packaged Chromium, just to do the same thing in different walled gardens? Itā€™s not right, not right at all. Just as Iā€™d like our social media to be server-neutral (federated), Iā€™d like our chat programs to be protocol-neutral. Though here, it isnā€™t a moral stance, just personal preference.

That is, itā€™s not a value thing, Iā€™d just love to use a single program for all chats, a single client. Thatā€™s the dream! This sort of program, ideally, would also: Be easily scriptable by the user; have a simple and well-modularized codebase; be language-neutral (client written in X, server in Y, etc.); and be protocol-neutral (i.e., both XMPP and IRC in the same program).

Pidgin is a very good option that supports many protocols and is already pretty popular. However, itā€™s a bit tricky for your average user to tinker with, and is not-at-all language-neutral (protocol add-ons must be in C).

Telepathy would be the perfect choice, if only it were still alive! It uses D-Bus for communication between client-daemons (ā€œconnection managersā€) and client-programs (interfaces/GUIs). Each protocol is its own ā€œclient-daemonā€ that provides chat-data over D-Bus; because of this, Telepathy is both easily-scriptable and language neutral. So, perfect! But, again, thereā€™s a catch: The project is dormant. Wake up, Telepathy! Come on, now!

I tried my hand at making my own candidate, ā€œchatdir.ā€ The general idea was a something along the lines of the FIFO-backed IRC client ii, but with more modern chat features. Each chat a file-tree, etc. I started writing a library for Chicken Scheme and an IRC client-daemon, but I never really finished.

So, in the mean-time, Iā€™m sticking with the pidgeon, Pidgin! Iā€™ll pet it plenty and feed it well, so it gets nice and plump. It might not taste great, but itā€™s close enough to a full meal.

šŸ“š Data-hoarding

Ā© Seseren, ; 勤務24Ꙃ間ē›®

Data that doesnā€™t move is dead data. Beware of paper: It is a death certificate for your data.
ā€” Mike Gancarz,
The UNIX Philosophy (1995)

The ability to export a serviceā€™s or programā€™s data in a parsable format is vital. For example, it should inherently be simple to export messages to plain-text (or at least HTML!). Itā€™s easier to search through files directly, and you really canā€™t trust that the server will retain whatever logs/data you like. With XMPP/Matrix E2E, for instance, itā€™s fairly common to lose your encryption keys, a crime punished with a total loss of chat-logs. Because of that, I work on scripts for backing up such data, from time-to-time: dino-chat-export, divercities_dl, wyrics, bandcamp_dl, etc.

Thereā€™s also Pleroma Migrator, which is aā€¦ bit of an outlier here. Itā€™s a bit dangerous, to say the least. I made it when I moved from cawfee.club to my own fedi server, Mansardo Jamada, and felt that my new account was a bit lonely. ā€œWouldnā€™t it be nice,ā€ I thought, ā€œif my old posts were here, too?ā€ And so, I mirrored them with a simple script. But that wasnā€™t enough, for my folly knows no bounds. ā€œWhat if I directly modified Pleromaā€™s database in order to fake these postsā€™ dates, so they match the original post-dates?ā€ That is exactly what Pleroma Migrator does and did.

šŸ“Ž Extended attributes

Ā© ???; GNU-tan

Extended file-attributes (xattrs) are a way of attaching arbitrary metadata to files in a low-overhead way. You can can mark the source URL of a file, the name of its author, the geometry of its editorā€™s window, and more ā€” the possibilities are endless! Unfortunately, theyā€™re not used very much at all in the Free Desktop space, even where I think theyā€™d make a lot of sense. Theyā€™re second-class citizens, rarely used or supported. Forgotten. Pretty sad, right?

Haiku was my main operating system for a couple years, and it opened my eyes. While LiGNUx and friends kick extended attributes to the curb and spit on their unconscious bodies, Haiku holds them tight in a loving hug! Whether in the file-manager, the calendar, or the contact manager, theyā€™re everywhere! You canā€™t go ten feet without tripping over extended attributes, and I think thatā€™s just beautiful. Heck, they replace databases in most Haiku programs, or even replace file-formats entirely! Contact-file? Empty file with xattrs for metadata, more like. E-mail? Empty file with xattrs for metadata, more like. Calendar event-file? Thatā€™s xattrs, all right. Enlightenment? Love? Found on a T1 line.

Iā€™d like to use xattrs wherever they seem useful, to bring Free Desktops in-line with Haiku ā€” and by extension, the future. Extended attributes, spread far and wide!

All Iā€™ve contributed to this cause is the xattr library for Chicken Scheme and an RSS/Atom program feedsnake. However, Iā€™ve since started using another (superior) program for this, sfeed.

šŸ“© E-mail

Ā© naga_U, ; 青封ē­’ā‹Æ ā˜ 

With the Haiku operating system, e-mail messages are just a sort of file, with extended attributes containing metadata of the message. Haikuā€™s file-manager, Tracker, was made with first-class support for extended attributes, allowing it to display e-mail as wellā€”or betterā€”than any e-mail client. And Haikuā€™s e-mail reader? Itā€™s simple and fabulous.

Iā€™ll take a note from their book: Iā€™d like the file-manager to be the ā€œcoreā€ of a graphical system, just as the shell is for the command-line. More things should live in the file-manager, and e-mail management is one of them. To help that along, I made nautilus-maildir, an add-on for the file-managers Nautilus/Caja/Nemo which displays e-mail filesā€™ metadata in columns, similar to Haikuā€™s Tracker.


šŸ’€ Ex-projects šŸ’€

šŸƒ Haiku-ing

Ā© Haiku Project, Madia; ā€“; MIT

As previously mentioned, I kept busy for a while with Haikuā€™s community and software ecosystem. Itā€™s beautiful, coherent, progressive, and unique aesthetically and technically; it is, and I am not exaggerating, exactly what a GUI-centric UNIX-like desktop should be. It fulfills the promise of the UNIX philosophy more than any other GUI system on the modern Free Desktop landscape.

I wrote several programs and scripts for Haiku: Chat-O-Matic, Pogger, MediaMonitor, among others. My other main contributions were to Calendar and TrackGit. The most weighty work was probably on Chat-O-Matic, which was my 2021 Google Summer of Code project.

Ultimately, I moved back to LiGNUx from Haiku because, well, it was too nice. I know it sounds silly, but itā€™s true! Sure, Haiku gave me some paper-cuts, but itā€™s an otherwise ideal system with a beautiful community. And because of that, I started feeling like I was living in a bubble. While I was enjoying a lovely system, the majority of Free Desktop users were still crawling in the muck of LiGNUx and BSD; and I didnā€™t like that.

Instead of isolating myself in a pleasant bubble, Iā€™d rather try and make the muck more palatable; Iā€™d rather try to improve the software ecosystem in small ways that bring it in line with my (admittedly opinionated) taste. LiGNUx is the only proper competitor to Windows and macOS, and I think itā€™s important that it be as nice as it possibly can be. I do miss Haiku, though. I really do.

šŸŖ™ coinsh.red

Ā© jadedctrl, ; AGPLv3

Before Raddle (Reddit-like board) supported image-uploads, there wasnā€™t really any fitting image-host for the community. The choices we knew of either required too much JavaScript, didnā€™t respect privacy, or were hosted by ā€œfascists.ā€ So, I made my own over a weekend: That was insert-coin, the first version of coinsh.red. It was IIRC my first PHP project. It wasnā€™t pretty, but it worked.

I worked on that for a while, until I ran into IPFS, a distributed network that hopes to supersede HTTP(S). I then made a new version of the site with Common Lisp, which uploaded each file to the IPFS network: cl-ipfs-apiĀ². At some point, Raddle enabled image-uploading, and I started to tire of caring for an IPFS node; so I disabled file uploads. Overall, coinsh.red has hosted 93GB of files over 18835 URL redirects.

Now, though, Iā€™m disillusioned with IPFS and other dweb projects. I still think itā€™s important we replace centralized services, which are often consolidated into and controlled by massive companies, with truly distributed alternatives that canā€™t be controlled by anyone. Iā€™m not particularly happy with anything on the table right now, however. GNUnet seems promising, and it might some day become the perfect dish for that table. But for now, Iā€™m sticking with the federation camp.

šŸ‹ LibertyBSD

Ā© Spencer Jung, Estanislao Perez Rosso; ; CC BY-SA 4.0

LibertyBSD was an attempt to purify OpenBSD into a fully-free and Free Software Distribution Guidelines-compliant BSD. It was founded by Riley Baird, who published the first couple of versions. When he was unable to continue hosting the website, I took over as host. After Baird left the project, I started to work on new versions with Einhard LeichtfuƟ, Jimmybot, alimiracle, and a couple other contributors.

After some releases, it was found that some vital files lacked license headers, and were so considered proprietary as per the GNU projectā€™s standards; although the OpenBSD project considers this a non-issue. I lacked the skill and time to replace these files myself (by a long-shot!), and so I archived the project. It was a poor effort, but it was an effort.

A much better effort is being undertaken at this very moment by the folks of the HyperbolaBSD project, who are trying to make a fully-free BSD system using the OpenBSD kernel. This includes, of horse, replacing the aforementioned licenseless files. I recommend taking a look and helping them out!