Git # RSS Feed # My GPG key # Archive # Keybase # About
Weirdiverse # Software: CLI ∕ Viable # Distrohopping # Rollcall # Art # Books # FTC Disclosure
A Viable Software Model
last updated: 11-4-2019
Inspired by a trawl through the FreedomBone blog after a failed attempt to install Epicyon on my Raspberry Pi, I've decided to write a list of software that I endorse.
About halfway through the sole year I spent in a college, I discovered that the college's ISP had left ports 443 and 80 open, and that devices were assigned mostly static IP addresses. So I installed YunoHost over the existing Raspbian setup on my Raspberry Pi, which had spent most of its time languishing behind my TV as a poor man's desktop computer, and installed nearly every app I could get running. Three fediverse servers at the same time, Tiny Tiny RSS, an oft-abused Syncthing share: the poor beleaguered server spent nearly all of its time at 90% RAM, and I had to write a cron line to restart the MySQL server every six hours because the system would run out of RAM and all the databases would crash thanks to the OOM killer.
Until one day, when the SQL databases randomly decided to wipe half of themselves and corrupt the other half. I was only a baby administrator, and I didn't know how to manually dump what was left of the tables, and any answers I got from the internet didn't work. So I sighed and salvaged the little that was plaintext and resigned myself to only hosting static websites without databases.
All was well until late October of 2019, when the Alpine server I'd been living comfortably on for some months suddenly ran out of storage space, and I couldn't open a Byobu session no matter how many files I deleted. Several web applications I'd installed were installed through Docker, and I couldn't start the Docker daemon to try to figure out where each app's database was stored, so I lost my Matrix server (which I was only using as a cheap microblogging service through a public room, anyway) and my Pinry page. Again, when I bit the bullet and wiped and reinstalled the server, I devolved back to static websites without databases.
That, combined with incessant distrohopping on my laptop and all the reinstalling that comes with it, has made me come to appreciate programs that do or have the following:
Store their files and configuration in plaintest, preferably in a single easy-to-sync folder. All my notes are in Markdown format in a single folder. They can be opened with any text editor on any platform.
Don't use any databases whatsoever, or, at the very least, have a single SQLite database file that's easy to back up with the rest of the program. ZeroNet does this; it has two main databases (chart.db and content.db). Other zites can have their own databases, but these are more for indexing search rather than storing data, and the ZeroNet interface has a button to rebuild databases if they get corrupted. Ultimately, only users.json absolutely needs to be backed up, as this file has your private keys, and JSON is plaintext.
Come in a portable folder that doesn't require installation, in case the distro they're running under has something weird going on with their package manager, or if the newest available versions of dependencies are outdated. AppImages are an extreme version of this, as they're a single file instead of a folder. The vanilla Tor Browser Bundle does this too. ZeroNet on Linux fails at this, though, since you have to install its dependencies via pip. That means, in an emergency scenario where the pip repositories aren't available, it will be a lot harder to install ZeroNet on Linux.
Have configurable... config and default directories, preferably settable via the CLI. This makes life a lot easier when working within Tails, as I can point everything to my Persistent folder instead of messing with dotfiles and wondering why nothing's saving on reboot.
Software I endorse is as follows:
Password manager: pass. Stores passwords in plain text, encrypted by your GPG key. If pass isn't installed, you can still use GPG to decrypt your password files.
Music scrobbling: Maloja. All data is stored in plain text. As it has no multi-user support, it has no need for a database.
Note taking: Markor. An Android app that writes and creates plain Markdown files by default. On desktop, you can use literally any text editor to edit the same notes that Markor can.
Bookmarks and web archival: ArchiveBox. Install some dependencies, clone a git repository, and you're ready. Everything stays within the cloned repository folder, making it easy to backup or move to a different device. It generates a static website in the /output folder, which means no wrestling with configuring a reverse proxy.
RSS: DecSync, a library and standard for storing "key-value mappings", as the website puts it, without a central server or database. Every device duplicates the data, though, so you trade a tiny bit more used storage space for not having to worry about sync conflicts. So far, it doesn't have many applications that use it. Newsboat is a good alternative if you don't mind keeping a backup of the database file.
Books: KOReader, an eInk-optimized reader that stores bookmarks, positions, and highlights in plaintext. It reads nearly any format I throw at it, although it doesn't seem to render Markdown, only display it the same as any other plaintext file. The bookmark/highlight file works the same on Android and Linux, so I can take them with me anywhere.