• 1 Post
  • 61 Comments
Joined 1 year ago
cake
Cake day: June 13th, 2023

help-circle



  • Oh wow thanks! :) One program syncs my home Mastodon timeline, with all replies, to a Maildir. Dovecot serves that over IMAP. Sending involves a custom SMTP server which reads the mail message and creates a post from it.

    For Mastodon it was all about converting statuses (toots? Posts?) into RFC 5322 messages. Using the status’ ID as Message-Id in the message header is handy. Mail clients do the heavy lifting of rendering threads thankfully!





  • Devil’s advocate: what about the posts and comments I’ve made via Lemmy? They could be presented as files (like email). I could read, write and remove them. I could edit my comments with Microsoft Word or ed. I could run some machine learning processing on all my comments in a Docker container using just a bind mount like you mentioned. I could back them up to Backblaze B2 or a USB drive with the same tools.

    But I can’t. They’re in a PostgreSQL database (which I can’t query), accessible via a HTTP API. I’ve actually written a Lemmy API client, then used that to make a read-only file system interface to Lemmy (https://pkg.go.dev/olowe.co/lemmy). Using that file system I’ve written an app to access Lemmy from a weird text editing environment I use (developed at least 30 years before Lemmy was even written!): https://lemmy.sdf.org/post/1035382

    More ideas if you’re interested at https://upspin.io


  • They even have a term for this — local-first software — and point to apps like Obsidian as proof that it can work.

    This touches on something that I’ve been struggling to put into words. I feel like some of the ideas that led to the separation of files and applications to manipulate them have been forgotten.

    There’s also a common misunderstanding that files only exist in blocks on physical devices. But files are more of an interface to data than an actual “thing”. I want to present my files - wherever they may be - to all sorts of different applications which let me interact with them in different ways.

    Only some self-hosted software grants us this portability.






  • We can never know exactly. For me I always think about the (incidental) complexity of these huge apps like Instagram.

    Somebody mentioned the phone overheating when watching Reels - those short videos. Here’s a made-up example (but I’ve written some software for video streaming services)…

    Those videos are pretty short, and some people skip the clip even after less than 1 second. Instagram want that next video to be playing instantly (gotta get that dopamine hit ASAP!). A strategy you could take is have the app load the next, say, 5 possible videos in the background before you’ve even seen them. When the user swipes, that video is already playing. To make this even faster we could execute some recommendation decisions on-device rather than on some servers (over a relatively much slower 4G connection).

    With all this complexity comes greater chance of some unexpected behaviour. Instead of loading 5 videos, maybe we accidentally load 100 and never clean up the old ones. Maybe after an OS update we need to change the way we mark a task as low priority.




  • Yeah I’ve always found that AllowedIPs name a little bit misleading. It is mentioned in the manpage:

    A comma-separated list of IP (v4 or v6) addresses with CIDR masks from which incoming traffic for this peer is allowed and to which outgoing traffic for this peer is directed.

    But I think it’s a little funny how setting AllowedIPs also configures how packets are routed. I dunno.