aleteoryx: a demon girl in a uniform, smiling wildly with fire in the background (second yama)

welp, here we are, in the new year.

2025 was something. near the end of 2024, I stumbled across permacomputing, and that mindset and the community around it defined this year for me. it's been a lot of disillusionment with the economic forces of high technology. in trying to articulate this, I wrote an absolute banger of a blogpost, laying out some thoughts and the no-new rule I have been following since.

in february, I performed the complicated migration of my personal email system from a single server to a multiple-server architecture, letting me handle delivery in my sorry excuse for a homelab (lol). this has remained stable for the duration of the year, and I'm super happy with how it went

I spent a chunk of the start of the year playing citizen sleeper 2, which was great. I periodically throw the soundtrack into rotation, and I am super happy amos roddy (the composer for CS and CS2:SV) is being recognized for his talents, even getting his music into minecraft

in april, I took a greyhound to new jersey, and attended VCF east. it was pretty entertaining, and I got some neat shit at the flea market. sadly I was not able to get some of the larger kit, due to my not having a car. I met some interesting people, and had an odd conversation with a rideshare driver

in may, I attended pycon US, as it was being held here in pittsburgh. it was neat, probably not worth the price of admission for someone like me (crazy). I won't be attending this year, especially as it's not in pittsburgh

in july, I went to tekko. as is tradition, I didn't post about it. it was pretty good. I had ribbons to trade, for once, and that went very well, but I missed some critical ribbon game meetups. there were some domestic issues with people I attended with, that led to a lot of the con just being us chilling on the floor. I'm not really complaining it was a good time lol

also in july, I went from my main machine being a framework 16 to being a lenovo N23 chromebook running debian. an absolute trash machine that I love, who I affectionately refer to as The Goob. I really do prefer running a small laptop.

in september, a handful of irc #uxn people, myself included, started playing with a little messaging protocol d_m put together. a nano chat, if you will. it's been a lot of fun! it's really inspired me to just fuck around with networking

in october, partially venting frustration about using rust on The Goob, partially articulating something I'd been thinking about, I wrote a blog post with an inflammatory title. I am not proud in the slightest of the conclusion, I routinely consider editing the post, and I keep forgetting to. it was a lesson to me to not post anything I write at 2 AM without re-reading it in daylight hours.

I've also spent a lot of time lately thinking about what I want from a mobile computer. I came across, in my endless hoard of computers, a Next Thing Co CHIP. it's running an allwinner R8, and I think it will be good as the heart of whatever I end up making. I'm getting pretty attached to the thought of a portable smalltalk environment

and in december, I did december adventure. I kind of fell off for a bit of it, and decided to call it when the holidays came around, but I still had a good time. I mostly worked on a plan9 uxn emulator, but near the end of the month I threw together a simple job-server and have been using it to re-encode my media library without babysitting ffmpeg.


here's the thing: the first half of this post is just me piecing together shit from the year's blogposts. my memory is not great. there are months omitted here because I just didn't blog during them (but hey, at least I averaged more than 1 post a month!). so, new year's resolution: amity is gonna start journalling!

I have tried and failed repeatedly to start, but doing decadv was proof that I can keep it up if I really try. so, that's what we're doing. some people I orbit like to write bi-weekly internet journal posts, keeping a more thorough journal private. this sounds like a good plan, and I'm gonna try and do that. this place is gonna stay a log for my more well-thought-out long-form writings. weekly stuff will probably end up on my site


this year has seen me grow a lot. I'm a lot less stupid than I was at the start, in a lot of ways. I look forward to hopefully saying the same thing, in a year.

~aleteoryx, till next time

aleteoryx: Konata inspecting a list in front of Tsukasa, in the middle of a crowd (comiket)

expect fanfiction in the coming months! or terrible failure! I'll be using this post to track what I end up making

[community profile] genprompt_bingo iyw 2 join

Resonance Chiaroscuro Hurt / Comfort Energy Beings Toys
Anticipation Surreality That Moment (incident / chapter / episode) in detail Physical imperfections Rich and Poor
Anthropomorphic Personifications of Abstract Concepts Echoes Wild Card There is No Escape Shopping Together
Smell I think, therefore I am Cheese Festivals and Celebrations Partnership
Cherished The Oncoming Storm Butcher / Baker / Candlestickmaker: Tradesman Reunions The Labyrinth

Update

Nov. 27th, 2024 12:15 am
aleteoryx: Dorothy Haze, from VA-11 Hall-A, over the rune from Signalis. (dorothy haze)

so, on Oct. 8, I broke my right wrist. happened 1 week to-the-day after my laptop crapped out (she's back, by the way). I am right dominant, so this put me out of commission for a bit! I have most of my fine motor skills back now (thumb is still pretty tight but eh), but it is non-weight-bearing atm.

the mandatory hiatus has caused a lot of problems, and for reasons I may be busier than usual (they said it couldn't be done!) for a bit.

anyways!

Recent Things

I wrote some fanfiction that I am actually proud of. it's short, for ducktales 2017, and very angsty. find it on my ao3.

I participated some in the [community profile] fandom_empire mahjong event this year, and will probably participate in more as time goes on. despite my complete lack of EF recently, I have had a lot of fun writing stuff for it.


I have completely fallen in love with the Tcl programming language! I haven't discussed it here but a few of my recent projects have been written in it. I have several drafts of a post discussing why I think its design is as good as it is, so look forward to that when I can put some brainpower to it!


bluesky is huge now! I have some thoughts on that that I will probably be posting sometime, but I think on a protocol level it blows activitypub out of the water in a few ways (...and falls short in others). anyways, as an exercise in both writing more Tcl and learning atproto, I wrote a bluesky feed in tcl! currently the websocket implementation is a bit broken, but the problem only appears once every N hours, so I have yet to source the cause. other than that, it is a solid reimplementation of the official bluesky template (typescript) in Tcl, with additional moderation tooling. if you play with it, let me know!


mk.aleteoryx.me died.

this was preventable, but I was recovering from a broken wrist and my VPS provider nuked things the day I finally had it in me to try and pay for shit. I had the money the whole time, my bank are just assholes about foreign transactions.
I have come to terms with it.

I also lost my bookwyrm, peertube, and owncast instances.
I have come to terms with it.

I don't have an easy way to send gravestones for any of this, and I don't plan to for now.

there's not much else to say here, it just sucks. I think I have a spare backup of mk.aleteoryx.me's database somewhere, but not the uploaded files. ultimately the lesson is to never use VPS hosts that can't autobill (like the last one), nor ones that can't bill without 15 minutes on hold with the bank. I will not be saying which company it was, as I do not want to shame them for what was ultimately more problems on my end.

still, I wish they had sent me something other than "we might delete stuff :)" followed by me having a panic attack at the login panel.


I got a rugged laptop! a Dell Latitude 5404 Something Something Something. they are cheap as shit on eBay and with a bit extra in spare parts I will have a laptop that can take a sledgehammer for ~$200. I am currently considering elementaryOS as the operating-system-of-choice for it.


politics :) )


that's about it. I'm going to sleep now, and then I have stuff to get done tomorrow.

I've been ~aleteoryx, g'night.

aleteoryx: Dorothy Haze, from VA-11 Hall-A, over the rune from Signalis. (dorothy haze)

sigh.

a couple days ago I spilled coffee on my main laptop, my primary machine for everything. ...and in trying to air it out my clumsy ass gouged a resistor on the mainboard. so it's in the shop. I've had good experiences with uBreakIFix in the past, and I'm hoping they can repair the mainboard without the $700+ replacement cost I'd be looking at for a new part.

the result of this is that I have gone from strictly using an archlinux install to using a fresh windows 10 install, as I've decided to use this event as an excuse to fix up my desktop, which will be running windows until ALVR stops bugging out on me or such a time as I can afford a non-standalone VR headset. this is my first time daily-driving windows in about a year and a half, and it's weird to be back.

a short list of what's stuck on that laptop, at the moment

  • all of my SSH keys. this is fine for most, on account of them being to VPSes with VNC support, but I cannot access the amehut box, unless I feel like walking someone through the ssh key creation process over the phone, which does not sound fun at all.
  • all of my obsidian notes
  • quite a few saved games that don't have cloud sync (my GTNH save particularly stings)
  • quite a few unfinished pixel art projects
  • some projects that were never checked into source control (I recently started syncing one of the most critical to amehut, luckily)

the backup plans that worked

  • vivaldi sync is the reason I am able to write this with a proper keyboard. annoyingly, the mobile app refused repeatedly to export my backup key. luckily, I was able to export from my other (very slow) windows machine. when my laptop is up again, I will be reinitializing sync and keeping careful note of the password.
  • many of my non-sensitive files are already synchronized to my phone, so that's handy.
  • I had a spare computer computer with me. this whole ordeal would have been significantly worse were it not for that.

so, what have we learned?

well, I do in fact regret not having proper backups. there's no good reason the data on my laptop won't be mostly recoverable, but it's going to suck to be without my development environment and servers for a bit. nothing absolutely 100% critical is missing, but it's going to be profoundly inconvenient for a while.

I also clearly need to have a solution for accessing SSH without my primary machine. I may end up putting together some sort of backup keystore that can be securely accessed in times like this.

next steps?

no device of mine other than my laptop currently meets my standards for encryption of sensitive files. I am going to try deploying a solution like veracrypt to my windows systems, and begin mirroring critical files from my laptop to there. I will also be synchronizing my obsidian vault somewhere. time permitting, I will organize and backup my dotfiles somewhere.

well, how's windows going?

good, actually. instead of reaching for choco as a package manager, like usual, I decided to finally try winget. this was the right choice. no longer am I confronted with 20 confirmation prompts and licensing upsells, instead the system Just Works. I have yet to try installing something through winget and have it fail. as in, everything I have tried blindly winget installing has Just Worked. this goes for everything from vencord to 7zip. it's wonderful.

I am also realizing that windows 10 was, in fact, created by UX designers that knew what they were doing. I am appreciating the various small UX optimizations that came about in its 8-year lifespan quite a lot.

I am by no means a windows fan, but I am not some linux evangelist either. it's always fun setting up a new machine.

anyways, I've got to go read the aeneid.

~aleteoryx,
signing off

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (space)

for much of my code, I want to make it public entirely for educational purposes. I think that, broadly, if any part of what I have currently published made it into corporate use, that would be more funny than anything. projects that I think could be monetized maliciously, such as lfm_embed are licensed under the AGPL, but other than that I mostly code to have fun, and don't care what others do with it.

in service of this, a bit ago I began using the BSD 0-clause license for projects. the problem, as I've learned, with it, is that it is not strictly a public domain dedication in some contexts. I am rather sympathetic to the philosophy behind the WTFPL and similar. I think that terse, easily understood language in software licensing is a good goal to strive for. so, I wrote my own license.

This repository is dedicated entirely to the public domain. The creator
waives all intellectual property rights to the work as much as is
possible in the given jurisdiction.

In other words, do whatever.

THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

that's one of the earliest forms. the text at the bottom is directly ripped from the BSD 0-clause license, and the public domain dedication is my own. it's pretty simple.

and then someone I know was working on a project, and looking for a simple noncommercial license, that was good for software. in theory the creative commons family will do, though from what I've heard their language around derivative works isn't as good for software as other licenses.

so I wrote them one too.

and then I got to thinking that it would be sick if there were terse licenses that weren't pigeonholed into artistic or software use. if there was something as flexible in terms of use as the CC family, as terse as the WTFPL, BSD0, etc, and usable for multiple creative domains.

so I decided to make that.

TPL

TPL is hosted on 雨hut. it makes use of a simple templating engine and a simple file structure to create configurable small licenses, where the language can be adjusted for every user. the wizard is hosted statically on my tilde.institute domain, and works well.

I don't think this project is nearly in a complete state, but it is functional, which is why I am publishing this. I am no lawyer, and I want the language to be robust, despite its size. I would appreciate all thoughts and criticisms (constructive only) of the language and license offerings that come to mind, either in the mailing list or under this post. help me make this project better.

I do plan to eventually create a system for generating and saving licenses statically, so that a no-js templater can be served over HTTP, Gopher, Gemini, etc, but that is a ways out. for now, the wizard is the only source of truth for licenses.

I hope this can become a robust-ish and useful tool to those who may desire it.

~aleteoryx, signing off

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (the sleeper)

Welp, I'm hosting another thing, but this thing will probably end up being very much so used in the future.

Introducing...

ameHUT(ah may hut), a sr.ht install!

I have a lot of respect for Drew DeVault, and the general philosophy with which he operates. Sourcehut is exemplary of this. It is ascetic software, shipping barely anything to the browser and relying only on Postgres and Redi{s,ct} in the backend. It eschews fancy modern editors for mailing lists and git send-email. Most important for me, it is software built to stay running, and software built to work first and show off later. It is software built to be lightweight and yet capable of scaling with load trivially.

Switching from cgit/soft-serve to this as my main forge feels better, in a way that other, more cluttered programs do not.

SourceHut is also project-focused, not repo-focused. What this means in practice is that docs can be associated with code, without sharing a file tree; announcement feeds can be associated with a number of repos, instead of just one; etc. I find this significantly nicer in terms of organization, and it's a shame GitHub et al. don't have much similar.

As always...

Deployment was a thing!

I spent a week or two setting up the services on a little Alpine box at my house. It proxies via Wireguard to the VPS that runs my core internet services, and I have an Apache macro to manage proxying. Currently, this macro does not account for API proxying, and I will be fixing this... eventually! Currently there are 3 users, myself included, only 1 of which, yours truly, has actually used any of the services, which is to say there is no strong demand for a working API at present time. Wouldn't be hard to get working though lol

SourceHut is built to be easy to shard. Each subdomain is composed of 2+ services, most minimally an API server and webserver. As long as all services can see the same Postgres and Redi{s,ct} databases, it sorta just works. At present moment, I do not have the need to shard, so, naturally, I set the server up on a Core 2 Duo with 2GB of RAM. Does this work? Yes, actually! With minimal stability issues, too! Sourcehut is almost exclusively written in Golang and Python, which accounts for its backend lightweightness. There will probably be an eventual hardware upgrade, but yk, it works for now.

The setup process for each service is roughly the same. Install the package with APK, copy in and tweak the example config from Git, tell the webserver to listen over Wireguard, start everything, test it, and add them to the default runlevel. There were no major issues during it.

So, what works?

Currently the following subdomains work, and run the same-named services as sr.ht:

  • amehut.dev
  • git.amehut.dev
  • hg.amehut.dev
  • meta.amehut.dev
  • lists.amehut.dev
  • todo.amehut.dev

Planned are:

  • amehut.page (srht.site)
  • paste.amehut.dev
  • builds.amehut.dev

The first is unimplemented due to poor documentation(a rarity in this project, as it were). The second is unimplemented because I am lazy. The third requires special treatment and I have yet to provision a VPS for it. I will likely reuse the one that currently powers redmine, and decommission redmine.

At some point, I will be soft-forking the sr.ht project, and changing around the color scheme and some of the marketing details.

Well, this sounds interesting, where can I learn more?

I've put together an FAQ that says mostly the same stuff as this blog, with some extra details thrown in.

Alas, it seems signups are out-of-the-question.

Almost! If you want an account on amehut, and we've interacted before, PM me here or anywhere else. Despite some of the slightly cursed details of the backend, it runs like a dream.

Oh, nice!

IKR! Also when did you learn to type my headings? Ah whatever.

Aleteoryx, signing off.

Update

Jul. 27th, 2024 12:08 pm
aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

Shit's been rough lately, Tekko 2024 post coming soon.

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

I finally fixed the downloads page!!!

I had been really, really lazy in first making it, and called to a mod_autoindex local endpoint. At a certain point, config refactoring broke this very very badly, and I disabled the downloads page altogether. It's back up now, with a table thrown together in PHP like the rest of the site. I'm going to re-add the icons at some point, I just haven't had the energy to yet.

New download!

Part of the motivation for fixing up the downloads code was the release of a """plugin""" for wpren. wpren's design means you can swap out files in wallpaper directories under its nose, and it will just keep chugging, which means wallpapers that can react and change themselves are trivial to implement.

It's a tool for randomly selecting a wallpaper from a pool of options, with support for tagging them by a value. This will only update a given wallpaper directory, and I mainly set it up this way as having 5 new wallpapers seemed a tad excessive in terms of probability distribution.

I've started putting static wallpapers in circulation on my system, and this reflects that, as it currently only supports static wallpapers. I may release an animated version later down the line.

That's all.

I'll post again sometime soon, expect something morbid if I can work up writing energy!

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (the sleeper)

so, my fedi instance was offline for about a day, and during it I was kinda a dumbass, but here's the basic gist of what went down:

Reasoning!

for a while, I'd had relays enabled on mk.aleteoryx.me. I'd had them enabled on social.aleteoryx.me before I killed it, and way back when I was setting up mk.aleteoryx.me, I decided to enable them. I was new to the fediverse, I didn't follow many people, and I was the only user on the instance, so there was no way to see the wider network but relays.

relays are cool but they also eat up database with a bunch of pointless notes, and any of the content I would have hoped to get through them (fandom stuff, mostly) was missing. in its place, I got plenty of new instances to fediblock, and awful takes from cryptobros and israel apologists. when I moved my fedi instances to new infra, I did not pick a particularly large disk, as misskey forks don't force you to mirror everything the way mastodon does. this meant that the database space used by relays was now more precious than before.

oh, and sql VACUUM would error everytime I called it.

Methodology!

mastodon has this lovely cli tool called tootctl, which allows the server admin to do all sorts of maintenence tasks. it's where the core instance management takes place. stuff like branding lives in the gui, but creating new users, instance deletion, etc, all are done via tootctl.

tootctl has options to prune users, user profile files, statuses, and status attachments, that haven't been interacted with by any local users. interacted also includes either direction of follow relationship, ofc.

misskey has.... no comparable functionality! i'm dead serious there's no way to cleanup the database or the storage!! this is really annoying!!!

so, I had to make it work myself. the postgres query I came up with was this:

DELETE FROM note
  WHERE "userId" NOT IN (
    SELECT "followerId" FROM following WHERE "followeeHost" IS NULL
     UNION DISTINCT
     SELECT "followeeId" FROM following WHERE "followerHost" IS NULL
      UNION DISTINCT
      SELECT id FROM "user" WHERE host IS NULL)
  AND "replyId" IS NULL
  AND "renoteId" IS NULL
  AND "repliesCount" = 0
  AND "renoteCount" = 0;

it deletes all notes, by all users that are not either local or followed by a local user, that have no interactions and are themselves not interactions. this excludes a lot, obviously, but it still amounted to 25% of the entire notes database. i don't feel like working out the longer query to handle notes that haven't been interacted with by local users or local follows.

this is only half the battle, however, as the search backend(meilisearch) also uses a considerable amount of disk. i needed to remove these from it, too. meilisearch has an endpoint at /indexes/:id/documents/delete-batch, which will delete every document in the index whose uid is in the POSTed JSON array. i can just SELECT the above, process the output into JSON via python, and POST it to the deletion endpoint. this will be simple!

It took. A day.

this should have been simple! it was a million or so deletions, but that really shouldn't take too long, I mean postgres is fast, right? and meilisearch prides itself on speed, so...

after I got the database query running, I realized it was going to take a while to run. at about an hour in, I decided to start queueing the batched deletions in meilisearch. this was kinda a pain, because despite what I had set in the config, and what the defaults are supposed to be, meilisearch was refusing the full 30mb JSON POST, with a limit of 2mb set somewhere. I need to file a github issue, yes, I just don't feel like it.

with the json file split into 16 jobs, and those jobs queued, i decided to just wait for a bit. in the span of about 20 minutes of waiting, lmdb(meilisearch's disk backend) decided to eat all free space on the drive, and postgres crashed.

I had been planning on keeping bookwyrm up and running, but clearly that wasn't going to happen, so I stopped everything and disabled bookwyrm's status tracker.

I mounted a tmpfs to do stuff in, and tried starting postgres. surprisingly, despite there being no space left, she lived. I dumped the database to the tmpfs, just in case anything more went wrong, and then tried uploading it to the usual backup bucket. and then moved a bunch of stuff to the tmpfs, because python needed free disk to unpack compressed libs, and then uploaded the backup to the backup bucket. once that was done, I stopped postgres.

I then restarted meilisearch, and began polling the job queue, until it had finished deleting everything. it seems that eating disk was just for scratch space, as it didn't have much of an issue with the drive being entirely full. I then went and dumped the search index, and restored it, and meilisearch was no longer using 20gb. it currently sits at about 8 gigs of disk use. incidentally, the documentation says that restoring a backup of a given index will overwrite any same-named existing indexes, but for me it just errored and asked me to delete the old db directory. again, I don't feel like filing an issue right now.

it was at this point I had to deal with various other things, and so I set postgres to run deletions in a tmux session, assuming it would get some of the way done.

when I got back, I got curious, and decided to EXPLAIN the deletion of a single note. this was when I discovered something horrifying: each deletion was taking nearly 100ms to calculate constraints.

but like, these are the notes that have no connections to anything...

these are the notes that shouldn't really need to calculate that much...

so if i were to... disable triggers... wouldn't that be fine?

anyways, I disabled triggers on note and reran the query, and it finished in around 40 minutes. i re-enabled the triggers, and, to try and maintain database consistency, I dumped the database, and restored it, and of the 1.6 million deletions, only 7 caused issues, and postgres automatically deleted the violating entries.

with that, I restarted everything, ensured that federation was running fine on either instance, and passed out while the instance cpu was maxed out catching up on like 12 hours of AP requests

So that's that!

yeah! i'm not sure if i'll do a lot of this infrablogging thing, but it was fun. anyways, keep an eye on disk usage when using meilisearch, lol.

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

...almost 2 months. that's too long. i need to keep this place updated more.

What's new?

oh lots of things. i got sick, as i write this i've got a hellish fucking cough. the clearlungs is keeping it at bay but it's still painful. i have chorus later today, not sure how i'm gonna manage that.

i sunk the $9 on an uptimerobot paid plan, so there's now a status page for my stuff. we'll see whether i migrate to something self-hosted or not, but i figure a status page is the one thing that's foolish to selfhost.

i've started a new form of to-do list, on my remarkable. the only thing really new about it is that i rewrite it from scratch every day. it forces me to think about tasks more concretely. i also have a second list, the evertodo, for those things that i'll get to later. it's, uh, long. anyways, i'm thinking i'll add a "write something" daily task, try and keep this place updated more.

i started reading ficciones. borges is an amazing author holy shit. i have very little to say other than that i now see from where some of my previous favorite short stories draw clear and direct influence.

i've got matrix and jabber accounts now. @aleteoryx:constellatory.net(good homeserver! cool admin!) and @alyx@jab.aleteoryx.me. contact me if you dare.

i got a pixel fold. convinced my family that the last 6 years of no upgrades was worth funding such an investment. i do enough reading and shit on my phone where being able to say "fuck it, tablet" comes in handy. i've not been using the folding functions enough to properly justify the price tag, but it comes in handy now and again. i expect that when i start doing research on allegheny county parcel laws again, it'll be far more useful.

i've begun actually using my myanimelist account. it's been enough motivation to finally watch stuff. i'll post reviews of stuff as i finish shows.

all sorts of stuff. i started running my own authoritative dns server via powerdns. it's a good little program, and it works well for my needs.

i killed social.aleteoryx.me. it had been broken for a while, it would seem. i still have database backups in case i ever want to try resurrecting it, probably under glitch-soc or chuckya.

i started moving shit off the singular linode i'd been using for a while.

  • mk.aleteoryx.me and books.aleteoryx.me are now living on a royale hosting vps together.
  • airsonic is back on oci, as it should be.
  • discourse is properly setup, and living on its own royale vps.

i setup a redmine install. unfortunately, it seems as though the inbuilt repo browser can't actually handle soft-serve, as soft-serve stores all repos with no working tree. i probably won't do much about this anytime soon, as i prefer cgit to the repo interface i've seen on other redmine installs.

i've discovered that leveldb has a tendency to create unreadable files under gocryptfs. frankly, i'm considering switching to a new encryption solution, as gocryptfs has too many random incompatibilities. steam updates tend to max out all of my cores, only in the kernel, and iirc this did not happen before moving to gocryptfs.

i wrote a bit of the script for the eventual major update to comics.marigold.town. no work has been done on the engine, but yknow, progress is progress.

i mocked up some code and datastructures for the scrobble.observer wizard v2.

i'm now running a public searxng instance. i need to poke at the csp config at some point until stuff stops failing to load, but that's a problem for later. for now, it works well enough that i use it and i've had it listed on searx.space.

Any upcoming plans?

well, when i get the time, i'm going to completely restructure my website. i'm thinking aleteoryx.me will become a mobile-friendly single-page site with links to various things, and the current site will end up at www.aleteoryx.me. i'd also like to have some sort of sso domain so that people i trust can have a unified login system to my things i host, but i'm not sure if sharkey supports ldap or anything of the sort. i've had good experiences running keycloak in the past, so i'll probably end up using that.

lfm_embed is going to get something of an overhaul with regards to theming. handlebars is proving too limited for any real use-cases, and i'm thinking lua may be the right choice going forwards. this is pending on free time.

i'll probably try teaching sharkey to send out normal reactions at some point, although from what i've heard *key federation code is nightmarish. it's a problem for later.

Anything in the news?

neil cicieriga released a demo off mouth dreams, it's ...baby one more time reworked as a symphonic rock song. it's pretty good.

Welp, I'm off.

alright, thanks for reading. i'll be back sometime soon, maybe with a sequel to that thing i wrote that one time.

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

Just 2 things today.

Revamped comics.marigold.town buttons!

I finally added buttons for negative tags to the UI. I also moved some stuff around so that the add button is separate from the tag name itself.

Also just stopped using the buttonborder color in things, and swapped it for #767676, as that's what it is on dark mode Vivaldi. Should've done that earlier as it's nonstandard and vendor-specific.

In general I just really like how it looks now. It's very much so inspired by e.x. Danbooru but the massive cloud of tags makes it look super chaotic and I'm really happy with the general feel of the interface.

On that note, I also added the webcomic Byoe & Nemu. It's really goddamn weird?? I really like it.

Reorganized and added to downloads.

I reorganized the Downloads folder on my site some. I sorted out some htaccess issues and moved some of the stuff into a utils/ subdirectory. I also added the script that I use to sync data between soft serve and cgit.

I also added general licensing and copyright notices, both to the folder and to the scripts contained within.

Coming soon: I'll probably write some code around melon's BBSS standard, cause why not.

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

I built a webcomic searching tool! It's a simple booru-style positive/negative tag search, and the actual catalog doesn't contain that many comics right now, but that's besides the point.

The actually interesting thing is the context, as this was launched as a part of Alexandra's Marigold Town! It's half webhost, half roleplay, with the idea being that each site is a location in Marigold Town. Certainly not a new idea, but anything making the internet a bit of a weirder place is good in my book. The town's mayor is an owl also? Rad. If you've got the sitebuilding bug and some free time you should totally check it out! Also if you want to just dick around online!! There's an apothecary with docs on 19th century and before medicines! A coffee shop with cute little pixel arts to download!! Lots of other cool stuffs!!!

My contribution was Marigold Town Comics, Games, and More. Creative name, I know. Right now it's just a JavaScript toggle for future ventures, and the aforementioned index.

As is starting to become customary, here's a brief technical breakdown:

The actual comics are entered into a big long YAML file. Unfortunately there's no strictYAML port for PHP(I'll probably end up writing one lol), but I know the quirks of it enough to stay safe. I prefer YAML for its general readability, without the verbosity of something like JSON. On pageload, the catalog checks the YAML file's modtime against the modtime of a Sqlite DB file. If the DB is older, it gets regenerated from the YAML file. This is done just because, as more comics get loaded in, having an index saved to disk will be significantly faster than YAML parse -> Hashmap gen -> Hashmap search. Plus it makes the code nicer.

This project contains my most advanced SQL work to-date. The queries are a bit bulky, but I figure keeping everything as 2 or 3 queries will be faster than constantly making Sqlite library calls from PHP. It also makes the code more concise, which is a plus in my book. I did take care to document their workings for future me, so that they're not too unweildly.

That's the only particularly complicated part, from there it's just standard webdev stuff. That help menu is by-far the sexiest CSS I've ever put into prod though.

Short-term Future Plans

  • I need to sort out a method for getting user contributions, like adding tags or whole webcomics. This should either be via e-mail, a form, or both.
  • Start adding the networks I'm aware of.
  • Continue to add various comics from across the 'net!
  • Attempt to put up an archive of gopus.xepher.net

Long-term Future Plans

  • This site will eventually evolve into a more complicated web experience! There's gonna be characters and a dialog system and probably some other stuff, too!!
  • Spoilers!
aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

There's a lot less than last time. That being said:

Webring Joins

I'm now in the No-JS & Fediring webrings. That's really all there is to say about it.

Layout Changes

Made some slight edits to the footer and header, including separating the 2 external links from the remaining internal links. I still need to work out how exactly to make it clear they're external(probably what Wikipedia does cause it's a well-known convention), but it's a step in the right direction.

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

The first big update:

The new content system is up!!

This is a completely different system to the old SHTML-based one. For all the charm of SHTML, it's far too verbose for my continued use of it. The new system is written in PHP, and can accept multiple formats, as well as supporting theming. I'm not sure if/when I'm going to get around to making the code for this public, as it's kinda a rat's nest implementation-wise. You'd need to have identical Apache VHost conf for it to work because of how it handles the downloads page, among other things.

That all being said, I'll briefly document the rough design here, for anyone who wishes to copy me(please don't this thing is so janky).

Entrypoint

The entire system is served through handler.php, a script which manages the theming, formatting, and whatever else.

When it loads, it first initializes Parsedown, Mustache, and imports simplehtmldom. These libraries get used at various stages in the game later on. After that, it checks the cookies for theming and JavaScript opt-in data. These will be user settable down the line. Once it's located the theme the user has configured(or fallen back to a default), it loads

The Content

This is one of 3 things. For static pages, it supports Markdown and HTML, and in the case where I need to be more dynamic, it supports PHP.

Once the source file has been found(I let Apache handle the filename resolution for the most part), the system checks for a .nh file. NH for No-Handle. If the system finds one of these, it will stop everything, set the MIME type for the file, dump it over the wire, and exit. What happens next is up to the file extension, which can be one of

.html / .md

Markdown and HTML are handled almost identically. First, the aforementioned Mustache library is used to provide them with limited templating facilities. I don't register many handlers, as it stands, but this will likely change down the line. The crucial things here are the ability to query whether JavaScript and cookies are enabled. Not in the browser, mind you. One of the core things I want for this site is the ability for a user to opt-in to those things. This will end up leading to disabled links and pages, down the line, I'm sure. That's not a bad thing.

If it was a Markdown file, at this point Parsedown gets run over the resulting contents of the file, and the templating process is done.

Almost done, anyways. Because files only have page contents, and can't control the HTML <head>, I need an out-of-band way to set the title, and it would be nice to have a system for disabling theming per-page, without disabling the templating or markdown system altogether. This comes in the form of a simple directive system. It strips lines prefixed with $! and does stuff based on them. The following directives are supported:

  • $!title <title> - Uses the rest of the line as the page title.
  • $!notheme - Disables the theme completely, only outputting the result of the templating/markdown steps.
  • $!noextras - Disables headers/footers, while keeping around the theme's HTML scaffold.

PHP

PHP scripts are simply executed. The Output Buffering library is used to take the stdout of the PHP script. Early on, the script was expected to return the title, but with the addition of notheme and noextras, the script is now passed a set of functions with which it can set the 3 main properties.

Themes

Once that's all finished up, the theme gets run. Themes consist of the following files, which are processed in the following order:

  1. /manifest.yml - Currently, this just stores if a theme requires JavaScript to function or not. If a user has their theme set to one that requires JavaScript, but has yet to opt-in, they will be given a fallback theme.
  2. /preprocess.php - Allows the script to make modifications to the HTML content. In the current system this is primarily used to generate the ASCII-art <h1>; tags. This is the main source of jank.
  3. /extra_ctx.php - This allows the theme to generate data to include in the markdown for the theme's template. The current theme uses it to generate the optionally disabled links in the header, although I'd like to move that to mustache later on.
  4. /template.mustache - The actual mustache template! It gets given the extra context and the processed content, as well as the global helpers and some request metadata. The output of this will get sent back to the requester.

That's it!

That's the basic flow of the system, although I've left out some stuff. The downloads page is implemented by forcing all requests to a downloads.php file that does... a lot... of stuff! I delegate to mod_autoindex in there. Figure it out!


Fediring join pending!

My first(second) webring! Technically I'm in the Melonking Surf Club ring too, but I have yet to figure out how to incorporate it into the current design. I've sent in the Fediring join request, though, so that's fun. The buttons are on the hompage, awaiting activation, and when they're up, I'll be properly in! It's fun!


That's all from me!

College has been busy, and I have other things I should be working on than my website, but this has been clawing at my brain for days and I needed to get it all done. Be sure to email me with any issues!

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

Alright! I'm actually pretty happy with where my site is now. It's not gonna support mobile anytime soon, and I'm fine with that. It's got an aesthetic^tm.

Site areas are basically done!

I've finally gotten together a links page proper, and im super happy with it so far. I've tried to make sure the page loads as fast as possible on everything, and some testing proves this, as it's still getting around 20s to full load in dial-up simulators(significantly faster to become navigable). It is, by far, the heaviest part of the site, simply due to the sheer number of people's little buttons I've included. All of this to say: I'm doing my part!.

This isn't the only area I've recently finished, and I think I'm basically done with the core site layout for now. Everything else will end up accessible through the downloads page, explore page, or homepage, although the PHP that renders the header has room for new links just-in-case.

A Discovery:

I've also discovered that the platform, in its infinite wisdom, includes a nojs way to snap scrolling, and am now planning to try doing mandatory monospaced scrolling. I would absolutely love to get the screen to, at least mostly, snap to individual rows of text. I need to see how it plays with screen readers is the main issue. I'm pretty sure everything works fine now, but I have yet to do particularly extensive testing. To anyone reading: has the MacOS screen reader changed all that much in the last 8 years? The only Apple device I have to test with is slowly approaching middle school, and I want to be sure it's accurate for testing purposes.

Final things:

Added a www.aleteoryx.me redirect subdomain, just in case, and a noenc.aleteoryx.me subdomain, which serves the main site with no HTTPS redirection. I still need to fix the odd embed or iframe that breaks security policy, but that's a problem for later.

Plans:

I'd like to add a guides.aleteoryx.me, where I can put out help for all sorts of things. This would probably end up being similar to LandChad but with a far broader scope of topics. I have an image in my head of what this will end up visually looking like, and I'm excited to start work on it.

Might play around with some sort of virtual tenancy/shared unix setup? Need to harden the server more, but mod_userdir should handle the bulk of the site hosting for me. It would probably just be for me, my partners, and some friends.

More work on personal 88x31 buttons! I've already obsoleted my current one after subtly changing the link colors for accessibility reasons! I'm probably going to play with a design like wings.nu's button design.

Find a way to reintegrate eyes to the new site! I simply must return to my bullshit, and said bullshit is being a scopophobe's death sentence!!!

aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

I guess monthly doesn't mean the first.

Development

  • Drought - 1/3 done. Need to get the macros to talk to, well, everything, and then start adding the higher level stuff.
  • Personal Website - Mostly at square one. All new work pending on Drought's completion.
  • Iris(and UI) - Not started, pending more design work and more free time.
  • wpren rewrite - Not started, pending time + motivation.

Admin

  • Setup Roundcube - I need to get this done at some point, although, not sure when. Pending on working out the silent crashes I was getting.
  • Move GSuite email to Postfix - Pending on Roundcube. Need to learn imapcopy.
  • Setup Nextcloud - Pending on GSuite being dealt with.

Personal

  • College application essay - Done bay beeeeeeeeeeeee.
  • Repair Local Nextcloud Instance - Now it is, and it's done lol.
  • Start writing down my little stories here. Maybe figure out how to format stuff like a screenplay in HTML. - Everything's pending on like so many things.
  • Whittle down Articles folder - 0/9
aleteoryx: kasane teto, in a suit and santa hat, singing in the snow (Default)

I'll try and do this monthly at least, mostly for myself.

Development

  • Drought - 1/3 done. Need to get the macros to talk to, well, everything, and then start adding the higher level stuff.
  • Personal Website - Mostly at square one. All new work pending on Drought's completion.
  • Discord Scrobbler - Barring something unforseen, finished. I've got stability sorted, and a lot of contributions to make to discord-sdk.
  • IrisUI - Not started, pending more design work and more free time.
  • wpren rewrite - Not started, pending motivation. I'd like to keep the old bash code, so it might be more efficient to write a secondary daemon that it just delegates stuff to? But it's probably a better idea to rewrite the whole thing.

Admin

  • Setup Roundcube - I need to get this done at some point, although, not sure when. Pending on working out the silent crashes I was getting.
  • Move GSuite email to Postfix - Pending on Roundcube. Need to learn imapcopy.
  • Setup Nextcloud - Pending on a good hard look at how I'm handling authentication.

Personal

  • Repair Local Nextcloud Instance - NEED TO DO THIS. Lots of important files stuck in the aether.
  • Whittle down Articles folder - 3/16

January 2026

S M T W T F S
     123
45678910
11121314151617
18192021222324
25262728293031

feeds

RSS Atom

i use a lot of these

omg ty for making my site look good

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 08:11 am
Powered by Dreamwidth Studios