stillgreenmoss

maren | net | rss

low-effort dark mode:

@media (prefers-color-scheme: dark) {
    body {
        background: black;
        filter: invert(1);
    }
}

caddy webserver config:

blog.example.com {
	encode zstd gzip
	root /srv/writefreely/static
	reverse_proxy localhost:8080
}

previously on my wiki i had a section called “how i compute”

it described basically the hardware and software that i use for computing. this feels relevant to write about because computing is a major focus of my life and yet also i feel a permanent tension with how i do it that keeps me trying new things, which is sometimes fun and sometimes frustrating

currently i use basically only two devices to compute, a phone and a laptop

phone

my phone is a google pixel 8 running a FOSS android distro called calyxOS

i'm very happy with it for these reasons:

  • it gives me a very functional phone with optional access to the normal app store without requiring logging into a google or apple account
  • calyx institute, the organization that makes calyxOS, is a formally incorporated non-profit organization. for software as critical as the operating system on my phone, i actually prefer that it be made by a publicly accountable organization rather than a diffuse network of contributors
  • it's a US-based project, and i like giving money to projects in the place that i live when feasible

when i was making the decision of which phone OS to use, i was choosing between calyxOS and grapheneOS. i decided to go with calyx both because of the formal organization behind it, and because of graphene's history of public conflict.

i do not have very much software on my phone. the browser is disabled most of the time. i would really like to fully uninstall it (possible with ADB) but sometimes i absolutely must use it to pay for parking or some other frustrating tiny thing. installed on it i have email and private 1-1 chat apps (not discord, zulip, et. al.), calendar, todo list, weather, white noise app, banking apps, camera, maps, the wikipedia app, a podcast app, lyft (for emergencies), and that's it.

until recently i had social media (fediverse) installed on my phone too, but i think that was a big mistake.

laptop

my laptop is a framework 13. i put fedora on it because i'm feeling tired of fussing right now (i also like this about calyx, it's pretty low-fuss). i'm very happy with fedora. i use the default terminal, thunderbird for email (many such email addresses), and firefox etc etc etc it's not fancy. it's super default, i'm very happy. currently i've just got one user on here but i'm planning to soon create a second user and then have a “personal” account and a “work” account.

i'm not going to write an entire framework 13 review here but i will just say that i have never been happier with a linux laptop.

i usually use the laptop on a couch or at the kitchen table, but sometimes i do plug it into a dock at my desk that's connected to lots of other things. the dock is not connected to a monitor though.

other things

i have a backup chromebook in case something happens to my phone and laptop and i need to recover my digital identity from scratch. also useful in the event that a website i'm being forced to engage with gets upset about linux/firefox. i basically do not use this chromebook other than to turn it on and install updates every few months.

having a backup chromebook makes sense for me because my alumni email address from my alma mater is a google account, and i care more about being able to use the library and other things at my alma mater than i do about having zero google accounts. so i keep the google account, delegate it to its own device, and call it a day.

the chromebook is a manufacturer refurbished dell 3110. it's meant for schools and is extremely sturdy.

i have a mountain of other used computers that i am always figuring out what to do with. usually they are being given away to friends and acquaintances who need a computer

that's it for now

my computing framework is one of incentivizing using the productive device (laptop) and disincentivize using the consumptive device (phone) except where it substantially improves my life (maps, lists, calendars, photos, secure communication with loved ones, etc.). this writeup is specific to “early 2025” as it says in the title. the way i compute and devices i use changes a lot so i figured i'd just plan to write multiple of these from the jump

be well <3

this is an old post. it was collaboratively written by sorrel and i, and published in february 2024

bunkdeck is a terminal ~application suite~ that we made so it would be easier to talk to each other on our tilde server. this is her story...

IMAGINE you've found yourself in this position: you've recently started a computer club (!!!! https://startacomputer.club !!!!) with some friends. you're engaged in the project of improving the political economy of computing in the place that you live. and you want to have some fun and do some skillsharing while you do it. so you (maren) set up a tilde server and invite your friends (sorrel & [names redacted]). now that you've got some shared computing resources, what sorts of things do you get up to?

a screenshot of bunkdeck being used

one of the things we got up to was a simple chat application. we wanted something dramatically simpler than irc — you just ssh into the tilde server and write your texts to a file and read other texts from the file and everything is beautiful. so how did we do that? first was...

proclaim

proclaim is the program (part of the greater bunkdeck ~application suite~) for posting messages in the groupchat. it looks like a regular text box that you type words into and press ENTER to post them. here's the code:

#!/bin/bash -e

# make username uppercase
username=$(echo "$USER" | tr '[:lower:]' '[:upper:]')
timezone="America/New_York"
declare prompt

makeSlug () {
        # make time and date
        time=$(TZ=${timezone} date +%I:%M%p)
        date=$(TZ=${timezone} date +%m/%d)

        # make name/time string
        prompt="${username}-${date}-${time}"
}

# enter bunkchat mode (clear the screen)
clear

while true
do
        figlet -f future proclaim - bunkchat
        echo "You may view old chat with 'scry', heathen."
        echo "-------------------------------------------"
        read -r -p "speak to the server: " text
        makeSlug
        echo "${prompt}: $text" >> /srv/bunkchat.txt
        clear
done

here's the source in git

proclaim is just a bash read loop accepting input from the user. when the user presses enter, it appends what they typed to the chat file bunkchat.txt, then clears the screen and sets a clean read prompt and waits again.

for a long time, proclaim didn't have timestamps. the makeSlug() function didn't exist, and each post slug was just the username of the person who posted.

when we decided we wanted to know what time someone made a post, we implemented an unrelated cron job. this made an ASCII rooster (courtesy of cowsay) announce the time in chat every fifteen minutes. it was hilarious at first, but made reading old chat annoying because there was inevitably more rooster than chat.

heed

heed is the program (part of the greater bunkdeck ~application suite~) that displays chats to a bunkdeck user. it has a banner and looks like a textfield. when new posts are made, they automatically show up at the bottom of that textfield. here's the code:

#!/bin/sh -e

clear

figlet -f future heed - bunkchat
echo "#######################################################################"
echo "# Take heed, $USER! This is a group chat with everyone on the server! #"
echo "# You can view earlier chat with 'scry' or 'less /srv/bunkchat.txt'   #"
echo "#######################################################################"
echo

tail -f /srv/bunkchat.txt

here's the source in git

heed is even simpler than proclaim! it's literally just tailing the chat file bunkchat.txt (with just a little bit of style.) incredible!

heed is so simple it has remained unchanged since its original implementation. there was still a problem, however. running proclaim and running heed required bunkchatters to either open two ssh tunnels into our server OR have enough familiarity with terminal multiplexing to run them both in one session.

enter...

bunkdeck

bunkdeck is the ~suite~ part of the bunkdeck ~application suite~ that runs proclaim and heed in a single terminal AND gives you a shell to hack away with while you chat with your computational comrades. the code is as follows.. ..

actually, it's too long to put in this blog post, so you should just look at it here. as a teaser, here's one of her functions:

#!/bin/bash
set -e

# ...

heedPane="bunkdeck:0.0"
proclaimPane="bunkdeck:0.1"
shellPane="bunkdeck:0.2"

# ...

function startNewDeck {
	tmux new -d -s bunkdeck heed
	tmux split-window -h -t bunkdeck -p 70
	tmux split-window -t $heedPane -v -p 3
	tmux send-keys -t $proclaimPane 'proclaim' C-m
	tmux send-keys -t $shellPane 'cowsay "press [CTRL+b then o] to cycle through panes"' C-m
	# turn on pane titling
	tmux select-pane -t $heedPane -T heed
	tmux select-pane -t $proclaimPane -T proclaim
	tmux select-pane -t $shellPane -T shell
	tmux set -g set-titles on
	# attach session to shell
	tmux attach -t $shellPane
}

bunkdeck is just tmux with some little conveniences. it started its life as a couple lines to start a new tmux session, split the window into a few panes and run heed and proclaim appropriately. when bunkchatters who were new to tmux ran bunkdeck they found themselves uncertain of how to navigate around, so we enlisted a helpful cow to say “press [CTRL+b then o] to cycle through panes.” (did you know you can press [CTRL+b then o] to cycle through panes?). for a while, this caused a hilarious bug that caused all of us to post “press [CTRL+b then o] to cycle through panes.” repeatedly in the chat. so now we just yell that at each other sometimes

one of the nice things about tmux is that sessions can persist indefinitely. so, a bunkchatter could ssh into our little tilde server, start a bunkdeck session, and then leave (by choice or for wont of internet infrastructure) secure in the knowledge that they could later re-attach to the session and rejoin the chat.

sort of. it turns out tmux got weird if you try to run this original version of bunkdeck while there is already a bunkdeck session running. so! let's check for an existing bunkdeck session and attach to it if there is one. no problem! tmux lets you do that; you just need a little error-guarding:

function isExistingDeck {
        set +e
        sessions=$(tmux list-sessions)
        set -e

        if [[ $sessions == *"bunkdeck"* ]]; then
                return 0
        else
                return 1
        fi
}

this was before we split things up into functions mind you. you can see what the file looked like at this point here. after breaking up our script into functions, it was much easier to add small quality of life features, and the code is also easier to understand now

one of the quality of life features is taking the life of a bunkdeck session with the kill command which we added here. another is resizing tmux panes with user-friendly commands (grow & shrink) that abstract tmux's resize-pane flags (-D -U -L -R).

other thoughts about tilde chatting

none of us have used other tilde servers much, so we don't know how they do chat. we're really happy with what we came up with, but it has a caveat — we could only do chat this way because we all know and trust each other. without that, it wouldn't have been safe to make files world writeable and readable, and proclaim and heed rely on that. most of our little tools are built on this kind of trust <3

you may notice that the blog posts before this one were all posted on the same date

that is because they are previous blog posts. writefreely does not handle past dates well, so i just didn't

blog posts from this point forward will occur in regular-time. the normal timeline

old blog, october 17th 2024

i live in asheville north carolina and a few weeks ago the entire region was catastrophically damaged by severe flooding from hurricane helene

i was there for about two and a half days before evacuating to elsewhere in the state with my partner and our cats, and i'm still here now. lots of things are back to normal, but lots of things are not at all. for me, the main thing keeping me evacuated is that there is still a boil advisory across the city and probably will continue to be one for a while longer. i'll go back when the boil advisory is lifted

pretty much every plan i had for my life is now on hold. after the hurricane there was no water at all, no flushing toilets and nothing coming out of the faucet, in most of the city. that continued for more than two weeks, which is an actual public health crisis, and reveals a severely upsetting truth about the state of municipal infrastructure in asheville

this is basically the only thing going on in my life right now and so i just wanted to make a small post saying something about it. if you want to send money to help the region there are a huge amount of lists of places accepting donations

i wanted to stay in asheville for good, but now i'm not sure i can tolerate what happens to a place when it becomes beholden to tourism for economic activity. i knew that a tourism economy always meant there was some sort of decay in a place, things like unaffordable housing and sorry social services and infrastructure, but to be violently reminded that that tourism decay can actually kill people has thrown all my plans for my future in asheville into question

this is a bad time and i hope that you never have to experience something like it

old blog, february 18th 2024

one thing that's possible to do, if you'd like, is to use a shell script instead of slides to give a presentation

i did this for something recently and it was really fun. i put some example code in git which you can look at here

old blog, december 27th 2023

i'm thankful that i moved back to these mountains where i was gay-trans born

i'm thankful for my chosen family, who love me and who i love

i'm thankful for my biological family, who love me and who i love

i'm thankful for the relationships i had this year and the people i had them with, i learned so much from all of them

i'm thankful for the relationship i'm growing right now and the person i'm growing it with — you are incredible

i'm thankful for picnic, and every girl who comes — a stake for pivoting

i'm thankful for qacc and every freak who comes — a stake for pivoting

i'm thankful for modern medicine (cancer praxis)

i'm thankful for all our funny little situations (queer praxis)

i'm thankful for shared vision

i'm thankful for shared vision

i'm thankful for shared vision

i'm thankful for shared vision

(you could make a religion out of that, but we won't)

~

the end of the year is so intense for me. the end of this year is intense (good). the end of last year was intense (anxious). the end of the previous year was intense (anxious). the end of the previous year was intense (bad).

next year i'd like to continue the trend.

old blog, november 17th 2023

some friends and i started working on a project today that i'm very excited about.

we're making a small go program and accompanying guide intended to help local groups, with moderate technical support, self-host infrastructure for sending out sms updates.

backstory

i have plans to host an event locally, but i want to notify people about the event without using social media.

after fussing with an email newsletter setup, i decided that email is too hard considering how little most people engage with their email. i don't blame individuals for this, i blame the political economy of email.

so i decided to use sms instead. first i tried using a managed “sms marketing” platform. there were a couple negative parts of this, but mostly it was just too expensive and limited and it obfuscated the underlying compliance details.

so i moved to using twilio. the onboarding experience was much better — the details of initiating a compliant “campaign” were not obfuscated, and the cost is charged per text. however there are many more technical details to figure out, and if you want full control of your subscription list behavior while spending as little money as possible, you have to write and host your own program that interacts with the twilio api.

we're a group of computer friends, so we're excited and able to make all that happen ourselves. but most people can't do that, and i know i'm not alone in wanting to be less reliant on social media for following local events that i care about. maybe sms can be one of the digital equivalents of touching grass, much like email when used right.

so we're going to try and build this sms service for self-hosting, and clearly document it. a nontechnical person or group won't be able to host this themselves — but if they can find a local techie or computer club who's willing to help, then they'll have a highly effective, social-media-free, but traditionally hard-to-access medium for sending updates at their disposal.

if you know of something like this that already exists, please send me an email!

i'm really excited and i hope it works out :)

old blog, september 30th 2023

my name is maren. i'm just another weird girl. i'm somewhat tall

i use linux and care about foss and all that, but more than that i like doing computers irl with people i love towards local community ends. i'm still learning how to move that way

i'm inspired by cooperativism and permacomputing and diy culture and other things too