author: clseibold
New post! This was something I wrote in late 2022 (a little over a year ago) but took down, iirc, about an hour after I pushlished it. I decided to re-publish it.
gemini://auragem.letz.dev/devlog/20231204_2.gmi Re: "If X You Shouldn't Release Software"
New Post, called "Linux, Our Savior and Redeemer": gemini://auragem.letz.dev/devlog/20231204.gmi
I don't know why, but ever since switching to Firefox a few months ago, it has been using significantly more ram than Chrome/Edge and so over time it ends up lagging out my whole system. I've switched back to Edge because of this. Something weird is going on with Firefox recently, almost like there's a memory leak or something. Does anyone know anything about this?
I believe I have fixed most of the bugs for my live chat. Btw, this chat system livestreams text in an infinite connection. There are some browsers (like amfora) that don't support this, but lagrange and diohsc should. You can try the chat here:
gemini://auragem.letz.dev/chat/ AuraGem Live Chat
I'm not in a good place today to be interacting on social media, so sorry to the couple of people that I haven't responded to yet, and the others that I won't respond to, because I'll be off of Bubble (or is it BBS?) and Station for the day.
I have created a live chat in Gemini. This is obviously not the first time this has been done, but it was a fun project! It does save a history, but only for a day. After 24 hours, the whole history is cleared.
gemini://auragem.letz.dev/chat/
My previous somewhat expensive headphones broke, so I have to use these other headphones. The bass on these is WAY too high, holy guac! I have the dolby access app on Windows, and I had to turn down the lower ends on the EQ a ton to get it to a bearable state, lol.
Gonna be honest, I'm getting a bit bored of my current projects. I need a new project for Gemini! Anyone have any ideas of what they want to see in Gemini that doesn't already exist?
New devlog post that talks about my recent updates to my radio stuff, and a new idea I'm experimenting with, called "Textola":
gemini://auragem.letz.dev/devlog/20231130.gmi
There seems to be a bot that keeps going to the exact same link on my server (which returns a 60 error code requiring a user cert). I don't know if this is a search engine that is behaving improperly or something else.
Added a bunch of new music to many genres for AuraGem's Public Radio.
gemini://auragem.letz.dev/music/public_radio
AuraGem's Radio Stations will now have a 12.5 second announcer every 30 minutes (may make this less frequent in the future).
gemini://auragem.letz.dev/music/public_radio
Working on that new thing for AuraGem :)
gemini://auragem.letz.dev/textola/
Been working with some server things that require particular timing, and I'm slowly starting to realize (and read) that Golang has very big disadvantages in this area.
https://github.com/golang/go/issues/27707
https://github.com/golang/go/issues/25471
https://github.com/golang/go/issues/47084
Ever since I started working on the new Old Time Radio Station for AuraGem's Public Radio, I've also been wanting to do video livestreaming of public domain movies from the Silent Films era (as well as some of the earliest Talkies that are now in the public domain), and call it AuraGem Public TV. Unfortunately, no gemini browser supports video streaming quite yet, so there would be no way to do this that will work for most people atm.
I then got to thinking about the ways in which livestreaming media like radio and TV can apply to other mediums. So, I'm now toying with a new idea! More info on this will be posted later :D
I have updated the code for AuraGem Public Radio so that there's less repeats for most genres (some genres like World have less songs atm, so they will have repeats more often).
The radio keeps track of which songs have already played up to the max number of songs for that genre. Then, when it reaches max, it will pop from the front of a queue about 1/4th of the songs on the list. Poping off a quarter of the queue allows the next songs to be re-randomized from those songs. This system also makes sure that when the max is reached, the next songs are always the songs that were played the longest time ago (because that's how queues work).
gemini://auragem.letz.dev/music/public_radio
I'm very surprised by how many of the popular songs from the very early 1900s I know, lol.
I've added a new station to my public radio called "Old Time Radio". It features old public domain music from 78rpm records as well as radio dramatizations of a few books, and about 12 episodes of the radio shows called "The Adventures of Philip Marlow" that play at specific times, with a new episode twice a week. I plan to add more radio shows and music later.
All of the content comes from the Internet Archive.
gemini://auragem.letz.dev/music/public_radio/Old-Time-Radio
I have this public radio thing that I really like (auragem.letz.dev/music/public_radio), but it would be cool to have classic/old radio shows and music on there, or maybe even a video livestream of public domain tv shows and movies via gemini.
Last year I did this thing for Lent for a Theology class where I gave up the computer for about an hour or more a day, and it might be interesting to try that again - a reduced-technology challenge or something similar. If I do decide to do this, I might write up a gemlog about it.
I've got rate-limiting working for my Smallnet Information Services (SIS) project! I've also got max concurrent connections handled (using semaphors), as well as simple IP blocking, and TLS Handshakes are also time-limited. The next security thing I need to handle are idle timeouts.
I've still been working on my Smallnet Information Services (SIS) project. I've been taking this project slower than normal, and I think it's helping me to polish up things more before release.
I have finally gotten to the point of starting to move my capsule over to using it, so that's exciting! I just need to implement Titan and Misfin next.
I may release SIS before finishing the Gopher implementation, because it turns out that Gopher is a bit harder to handle, especially if you are trying to proxy other protocols over it. Gopher putting itemtypes in the directory listing (gophermap) rather than in the response of each file is both a blessing and a curse.
So, was just implementing rate-limiting in my gemini server, and it all worked right up until I clicked on a link that does a redirect, lol. For those who intend to implement rate-limiting, make sure you take into account how fast redirects happen.
Also, the approach of assuming that when the server sends back a redirect response that the next request from an IP is going to be that redirect request assumes that a person is only using one client and that that one client's request comes right after its previous one.
First time using semaphores in golang! They are really useful for limiting the number of concurrent connections being handled by a server. They are also really easy to understand - acquire 1 from the semaphore (locking if 1 is not available), and then release it when the connection is finished. Other people use channels, but channels are over-complicated for something as simple as this, imo.
For anyone wondering, I'm using this package: golang.org/x/sync/semaphore
There are some posts I wrote on other services that I'm slowly trying to move to my Gemini capsule. The next one is titled "Why I'm Proud of My University": gemini://auragem.letz.dev/~clseibold/20231116.gmi
I find it ridiculous when people defend the misuse of psychology words on the internet.
No, a "narcissist" is not just someone you don't like, or someone you think appears self-centered. No, "antisocial" doesn't just mean you don't like to go out to parties or be in public. No, "trauma dumping" is not just someone sharing all of their bad experiences to you. That's "venting". Trauma-dumping is unsolicited or repeated dumping of your traumatic experiences on someone who doesn't want to hear it in order to get a response.
Please, stop misusing psychology words.
So, just read an article by someone claiming to be a psychologist, and the title reads: "How to Identify a Narcissist: The Two Question Narcissist Test"
I'm so pissed off that things like this get written, let alone get views. Just how manipulative the author seems to be and how she makes these outrageous broad statements like being named after your parent means you have NPD, and that this naming pattern is a "smoking gun", or that she's never met someone who was named after their parent who hasn't had NPD. Like this is just ridiculous.
Internet Psychology is so toxic.
Bubble is being spammed again with hundreds of new users and likes from those users. They're clearly doing it with a script. @martin If you haven't already done so, you should think about spam-prevention, just in case those spammers also come here.
I would also make sure there's some form of rate-limiting, and idle timeouts on connections (I've seen some gemini libraries not implement idle timeouts, which isn't good for SYN and DDoS attacks).
One thing I made sure to do for the guestbook of my capsule was not allow any uploads that had any slurs in them. Rather than deleting the messages after the fact, it's even better, imo, to do the checks on upload so that the user can immediately be informed that their upload was not successful, and why it wasn't successful. The process also happens basically immediately.
I cannot remember if I added this functionality to AuraGem Ask, but I intend to make sure that it is added to that service as well.
Today marks the very first time I've seen someone use a racist slur on geminispace. It's a sad day.
Been working on this really cool feature for SIS that I finally got completely working, and I'm very happy with it! It lets you proxy routes from one of the servers to another server at a specific route on the server. This means you can serve a file on the gemini server from the nex server, and vice versa. For example, you could proxy the nex server on the gemini server at "/nex/".
The best feature of this, however, is that it will automatically convert gemtext files to nex listings and vice versa, depending on what is being proxied to what. All of the proxying happens internally (not via sockets) so that it's as efficient as possible.
Inching closer to being done with most of my SIS (Smallnet Information Services) project. It will allow you to create multiple servers of various different smallnet protocols (Gemini, Gopher, Misfin, and Nex), manage them with a gemini admin interface, and interact between these different servers and various text formats (gemtext, nex directory listing, plain text, gophermap, markdown, etc.). I will talk about the rest of the details when I release it in hopefully a couple days :D
Maybe about 50% done with my Smallnet Information Services project. The hardest part so far was writing the router code, but that code is now basically completely written, so this last 50% should go a bit quicker. I'm definitely excited to release it, but I want to make sure it's at least somewhat polished before I do.
Working on a router for gemini, gopher, and nex. I decided to go with a tree of path components because it's more efficient and not too hard to do. Searching for a route, then, will use something like a breadth-first search, I think.
I'm about 15-25% done with my new project. I've decided to call it Smallnet Information Services (SIS), and yes, it's inspired by IIS (Internet Information Services), which should hopefully give hints to what it actually is. I am trying to make this project very easy to setup like I did with my misfinserver project, which also means providing ways to transfer a pre-existing setup from other software to SIS.
More details coming soon! :D
Just got an idea for a new project that I want to do that should be really cool. I'm excited to start working on it!
Was just watching another show, and yet again they claim that Greece was the "birthplace of civilization". Um.... no, it wasn't. I hope younger generations nowadays know better, and know that the Mesopotamians, Sumerians, Assyrians, Babylonians, Egyptians, Chinese, Arabs, Israelites, and Indus valley all existed *before* the "Greeks".
You know, Windows Vista got a ton of crap, especially from me, but honestly, it wasn't *that* bad if you ran it on the proper hardware. The biggest blunder was manufacturers putting it on terrible hardware, or claiming computers would support/upgrade to Vista when that wasn't the case.
Anyways, all of this is to say that I decided to bring out another old laptop that was handed down to me that ran Vista originally, and I put Vista back on it, and.... I actually kinda like Vista's visual design and some of its other things :D
Granted, I am on Service Pack 2, so I imagine the original release was significantly worse.
I have written an extremely simple nex client library in golang, and which supports OSs as old as Windows XP. I will also be turning it into a real client soon, but this will be a separate project that will support gemini, gopher, and nex, and will hopefully support older Operating Systems (like Windows XP). I am also planning on adding TLS 1.3 support to the gemini handling of the client.
You can find the client library here: https://gitlab.com/clseibold/gonex
There is this Missed Features Installer 5 (MF5) that has basically packaged a bunch of stuff for Windows XP or Vista (Net Frameworks, Redistributables, Powershell, DirectX, PowerToys, Windows XP Unofficial Service Pack 4, Virtual CD control panel, etc.) and provides an easy interface to install all of them with. It's really useful for getting things setup on an old windows xp machine. It's pretty cool. You can find the file for it here: http://i430vx.net/files/XP/MFI5.iso
Found a cool video that lets you fix the windows update for older Windows systems (Vista and below). Going to be following along with this to get my old Windows XP machine updated.
https://www.youtube.com/watch?v=vdIVMwV9MCk
You can also download the updates manually at the Windows Update Catalog, but there's a lot of updates to do, lol: https://www.catalog.update.microsoft.com
Yeasterday I learned that the Windows Subsystem for Linux is not the first (or second) time Microsoft delved into Unix Microsoft had Xenix, their own version of Unix, but they also had a POSIX subsystem in Windows NT because Windows NT started off with the OS/2 2.0 codebase. It doesn't end here, because they also included many unix tools in their Windows Services For Unix (SFU) which later ended up bringing in the Interix (formerly OpenNT) system that they bought out from some other company, and was supported until Windows 7, deprecated in Windows 8, and replaced by the Windows Subsystem for Linux in Windows 10. SFU offered gcc, ksh, vi, awk & grep, and X11 client tools.
I always found it wierd that client certs were sent in the clear in TLS 1.2, but according to what I seen on Stack Overflow, the fact that TLS 1.2 does this isn't actually so bad because clients still have to prove they own the cert by signing some data unique to the session. Does anyone else know more about this and can verify if this information is accurate?
I've been working on a fun new project of bringing some smallnet protocols like Misfin, Gemini, nex, and Gopher to Windows XP, and I was able to successfully send a misfin mail to my server on Windows XP (using TLS 1.2)!!!! Unfortunately, I want my server to be TLS 1.3 only becasue misfin pretty much requires the use of client certs., so I will need to get 1.3 supported in the Windows XP client.
I am using Golang 1.10 on Windows XP, which doesn't support TLS 1.3, so I might look into either backporting TLS 1.3 from Golang 1.12 to 1.10, or if that doesn't work, look into using the NSS library, which I believe has TLS 1.3 support.
I've decided to start a new project for fun: Developing gopher and nex clients for Windows XP :D
I am also looking into developing gemini and misfin clients for them as well, but we'll see about the TLS support stuff (I may be able to get some form of TLS 1.3, but I'm not holding my breath for that).
I've written some computer history facts that I've personally found interesting on my nex site here: nex://auragem.letz.dev/
(You should now be able to use Lagrange's latest version to view Nex sites).
AuraGem now has a nex server running:
nex://auragem.letz.dev nex://auragem.letz.dev
It'd be cool if someone could make a PR to add gemini support to VLC. Anybody here skilled enough to do that?
I have released version 0.5 of my misfin server software. You can find more information here: gemini://auragem.letz.dev:1958/mailinglist/misfin/msg/12
Misfin-Server Version 0.4 Release:
Newsletters - they are mailinglists where only designated writers and admins can write to the mailinglist. This is done using the new send permission option for mailinglists.
Send permission option for mailinglists - determines who can send to the mailinglist. Options include: subs, writers, open (anybody)
Subs function option - determines whether subs are auto-accepted or not. Options include: accept-all, closed (all are auto-rejected), and prompt (not implemented yet).
Lots more bug fixes
Fairly big code refactoring
https://gitlab.com/clseibold/misfin-server/-/releases/0.4 https://gitlab.com/clseibold/misfin-server/-/releases/0.4
Published a new devlog on my misfin server and client projects: gemini://auragem.letz.dev/devlog/20231001.gmi
I have created a mailinglist on my misfin server! You can try it out by sending a misfin gemmail to misfin@auragem.letz.dev with the subject "Subscribe". For clients that don't handle subjects fully (like the original reference implementation), you need to put a "# " in front, so it should be: "# Subscribe". You should instantly get a gemmail sent back to you saying you have subscribed. Once you've subscribed, all messages sent to the mailinglist will be forwarded to you (except for your own messages).
I've just finished with major changes to my misfin mailserver software! I'm not going to put out an official gemlog about it yet though until I polish it up. I want to add support for 3 different setups:
1. Manual management setup - where the mailserver is mostly managed by one person or an admin. This is good for systems that don't take registrations and only host for a set number of people.
2. Pubnix setup - where the mailserver recognizes the system's users. It needs to be able to add new users without bringing the mailserver down, and gemboxes/gemmails should be put in user directories.
3. Gemini (or Web) Hoster setup - a Gemini server needs to be able to communicate with the mailserver.
Working on some major changes for my misfin server software. Should be much better. It will support multiple mailboxes, and allow for configuration in different ways (via config file or flags) so that it can support different setups, like running it as a service, etc.
I'm toying with another idea of it being paired with an internal gemini server on a different port from the standard so that there's a gemini interface to configure the mailserver and access its mailboxes, etc. Those who want to expose this as public-facing can do so by either port forwarding this interface, or proxying it through another gemini server. I haven't got all the details on how it will work yet, it's just an idea.
I'm debating on whether I should keep my personal gemlog post on "My Darkest Period" up. It was something I needed to write, and it's a very personal story to me. In a way, I am glad that I wrote it, and it helped a lot to reflect on this time of my life, especially about a period that I had kept inside for quite a long time. It was somewhat freeing to get my feelings out. However, I still feel a bit anxious about people reading it. It does concern a real experience I've had on a real private Discord.
I don't usually delete most of my writing, especially writing as personal and reflective as this. The type of writing I did in this post doesn't come often for me.
I have created a misfin server and client, as well as a gemmail (and gembox) parser. Just spent a ton of time today working on misfinmail (my client program that's modelled after the original Multics mail commands - I really like their UI design). I will eventually make articles on my auragem devlog introducing them and copying the readme documentation over to Gemini, but I want to do a few other things first before that.
You can find more info on misfinmail at my Bubble Post here:
gemini://bbs.geminispace.org/s/misfin/5718
Here are the two gitlab links:
https://gitlab.com/clseibold/misfinmail
https://gitlab.com/clseibold/misfin-server
I have republished my article/essay on the history of Unix Shells, and have updated it to include more information on Multics: gemini://auragem.letz.dev/~clseibold/20230924_ShellHistory_Unix.gmi
My new post: When Getting a Degree Makes You The Enemy
gemini://auragem.letz.dev/~clseibold/20230924.gmi
Recently got a fortune cookie that said this: "Truth will be your biggest ally this month."
I wrote a new extremely personal post: gemini://hashnix.club/users/clseibold/20230923.gmi
AuraGem Music's Public Radio now has multiple stations! There are 4 different stations: Diverse, Mainstream, Classical, and Non-mainstream.
Diverse will play all of the genres at specific time slots.
Mainstream will play mainstream genres, like Pop, Rock, Acoustic, Cinematic, and World.
Classical will play Classical as well as Classical-adjacent genres like Jazz, Blues, and Calm Piano.
Non-mainstream will play Electronic, Lofi, Ambient, and Rock.
These classifications could change in the future. If you have any suggestions on where you think a particular genre should belong, I'm happy to hear!
gemini://auragem.letz.dev/music/public_radio/
Rosy Crow has an issue tracker on Bubble, in case people use that android client: gemini://bbs.geminispace.org/s/Rosy-Crow-Issues
I'm considering a workaround for mobile devices that have no way to stream audio via gemini. I might go the Gemini to HTTP proxy route, or just offering the public radio stream via HTTP.
I have made an announcement post for the AuraGem Public Radio that has more information on Supported Clients as well as a new project that I intend to work on very soon: gemini://auragem.letz.dev/devlog/20230918.gmi
AuraGem Public Radio Bugfix: Songs should be properly randomized now :D
If someone could test if they are able to stream the below link on Rosy Crow on Android, that would be much appreciated :) gemini://auragem.letz.dev/music/stream/public_radio
AuraGem's Public Radio Schedule has been updated: gemini://auragem.letz.dev/music/public_radio/schedule
AuraGem Music's Public Radio is now live: gemini://auragem.letz.dev/music/public_radio
AuraGem Music Bugfix: The bandwidth throttling of music files was on a global basis by accident, which meant that it was throttling bandwidth for the sum of the bandwidth of all connections. Now bandwidth throttling happens per connection, which means there can be concurrent connections of 320 kbps streams running.
Tl;dr: Music files should no longer pause when multiple people are streaming at the same time. So if you experienced pauses while streaming before, give AuraGem Music another try - it should be much better now :)
I've been working on something for AuraGem Music for a while, and it's very exciting. So, initially AuraGem Music would just serve you the mp3 files that are in your library. But this meant you had to manually click on each song you wanted to play.
But now it has three new functions:
1. You can stream a full album in one stream. AuraGem Music will strip the ID3v2 tags (I'm working on getting it to strip *all* tags). No need to manually click each song anymore!
2. You can do the same for an artist's full collection of songs that are in your library.
3. There is a new "Shuffled Stream" option to infinitely stream songs from your library in random order, like a personal radio.
So... apparently the openssl command overwrites files without notifying the user. I was quickly pressing the up arrow to run previous commands and accidentally ran the command to regenerate the certs. And openssl just wrote over the existing files.
So AuraGem has a new cert again. Lol. *Sigh*
Can someone please explain to me why some gemini browsers are completely ignoring the Common Name field in certs and requiring domains to be in the Subject **ALTERNATIVE** Name (SAN) field? This feels like it's completely incorrect and broken.
AuraGem now has a new certificate. When you re-visit the capsule, you will have to accept this new cert, unless it's your first time at the capsule.
gemini://auragem.letz.dev/
Apparently Amfora verifies certs differently than other clients, so it isn't working for AuraGem. It might have to do with CN vs. the subjectAltName thing in the certificate, but I'm not quite sure. I expect clients to look at *both*, because I use CN for the main address and subjectAltName for alternative domains (hence the "Alt"), but maybe that assumption was wrong, idk.
If anyone knows anything about this and how I can fix it, that would be appreciated.
I'm relaunching AuraGem Music. You can find more information here: gemini://auragem.letz.dev/devlog/20230914.gmi
More Updates to AuraGem: gemini://auragem.letz.dev/devlog/20230912.gmi
I have just announced the relaunch of my AuraGem capsule: gemini://auragem.letz.dev/devlog/20230911.gmi
Currently streaming music on hashnix.club's radio station: gemini://hashnix.club/radio/
I have a new capsule! gemini://hashnix.club/users/clseibold/
Hello! I used to be called Krixano. Decided to get back on Gemini after being off for a while. Lost my previous identities, which is fine, because I'm using a new username now.
As for AuraGem and what happened to it? It went down because I wasn't able to pay for the domain any longer. I still have the server and all of the code and content, fortunately.
Anyways, I plan on creating a sourcehut page for static content for now, because I've decided to mirror articles that I've been writing to here.