💾 Archived View for gemini.hitchhiker-linux.org › tinylog.gmi captured on 2024-07-08 at 23:58:10. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-03-21)
-=-=-=-=-=-=-
Some shorter thoughts and updates that might not warrant a full gemlog entry. I'll probably be using this to post updates on my various projects in a much more regular fashion.
Test post using `osrand` in place of `tinyrand`
Preliminary results after swapping my `osrand` crate for `tinyrand` in Zond.
My project for the writing class is due this weekend. Which means I'm coming to the end of this term and will be into the new on fairly soon. Pre-calculus is next, which means I will actually be starting my CS courses after that. Really looking forward to that.
Having my morning coffee, but not relishing it as much as usual. Life is throwing some serious curveballs recently. My dad is in ICU and will likely have to go through rehabilitation to regain mobility before going home.
I haven't posted in a bit. Currently working on a pretty cool terminal emulator project called Ghostty written in Zig. The project is a cross platform terminal emulator that renders to an OpenGL surface, which has a native MacOS gui and a Gtk4 gui for Linux. I've been working on adding a split panes feature to the Linux/Gtk gui.
This is one of the larger projects I've contributed to, with a pretty large community building it already even though it's currently in a closed beta (to be open sourced at a future date once things stabilize). It's been a great experience so far.
I just made a change to Agis that serves up certain mimetypes based on the file extension. Previously, for everything other than .gmi files it was using the `tree_magic_mini` crate to read the file's magic data. However, I noticed that this was serving up png images as 'application/octet-stream', which is kind of ridiculous.
I may have to write my own mime parser at some point to get this correct. I'm shocked at how bad this is, because png files are one of the easiest mimetypes to identify based on their magic data marker.
Had some downtime earlier due to replacing our router with a more powerful model. Took longer than it should have to get everything reconfigured. Guess I have a lot of things that depend on IP addresses not changing.
Adding an upload feature to Zond. Right now, it just takes an optional string to be interpreted as a command, so you can do something like give rsync a list of files to upload or run an external script. It gets the job done but might need some tweaking.
Currently building packages from Pkgsrc for x86_64 Linux with Musl libc. Builds keep failing due to using types which Musl has hidden behind `_LARGEFILE64_SOURCE`. It's an easy fix, but it would be great if all of these upstream packages would write "modern" C/C++. I'm looking at you, LLVM.
Working on bringing some HitchHiker packages up to date. I also simplified code in a couple of the utilities written specifically for hhl, and added some man pages.
Did some work tonight on my little text editor, Vapad. Every time I touch this code I'm reminded just how perfectly suited Vala is to developing Gtk applications. One of these days I'll have to write something bigger using Vala.
Working through issues with the lang/zig port on FreeBSD, trying to get it ready to merge the upgrade to 0.11.0
My Gitea instance is currently down after a package upgrade. Considering options, as I'm not 100% satisfied with Gitea to begin with.
Just finished adding functionality to create unique message id's for incoming mail in Dory. The id strings will consist of the Unix timestamp upon their receipt and an 8-digit random string to avoid collisions, with a dot separator. This should make sorting your inbox by most recent trivial.
There is already a function for actually reading and processing a request in the Dory codebase, and passing the mail off to storage. It's just currently a bit naive, and doesn't send any feedback back to the client and exits on failure. Once that's working, the only thing left in scope is going to be getting the server side connection setup and client certificate validated. Then it's off to incorporating it into a live server application.
Since switching back to FreeBSD on one of my computers there have been just a few packages that I have wished were a little more up to date. Generally the ports tree is extremely up to date, with the packages collection being built on a quarterly basis. Some packages have definitely gone longer than that, however, so I decided to switch from packages to ports. This is pretty easy, just a little time consuming on the first run since you get one rather large batch of upgrades. I'm using portupgrade since that is the tool I remember, but there are a few others such as portmaster.
I was up late tonight, so I did some work on the Filesystem storage backend for Dory. Mostly writing tests, which caught a few bugs, but also implementing some missing functionality.
Just subbmitted a PR for the `sc` crate which gives the ability to make syscalls from Rust on NetBSD/x86_64. If accepted, maybe I'll see about adding other architectures on FreeBSD and NetBSD.
I managed to get the latest git source of Zellij to compile and run on FreeBSD, so no more faffing about with Tmux. Hooray! The fix for Zellij will be in the next release apparently. I had to apply a patch from the port to the `wasmer-vm` crate, as they're making some erroneous assumptions about not being able to support x86_64 on FreeBSD.
So apparently the terminal multiplexer I've grown accustomed to (Zellij) isn't working on FreeBSD right now. Trying out tmux. Hopefully my muscle memory doesn't get in the way too much.
I decided to install FreeBSD on actual hardware again and had some interesting complications. I had a full gemlog post ready to go about it actually, but one of the complications lead to some data loss, so I'll have to put it all back together again.
In other news, I've been forgetting to git commit/push/pull when updating this tinylog and had to clean up a bad merge earlier. No posts should have been lost, which is the great thing about putting it all into VC, but obviously my workflow needs updated.
The latest Dory commits center around an iso-8601 time implementation, which is the format that `timestamp` lines are supposed to use in messages. The spec is of course a little ambiguous, and iso8601 allows dates in one of three formats, with the further distinction that there is both a `basic` formatting and an `extended` formatting, where the difference is the appearance of separators between the fields. I've decided for expediency to only implement `calendar` style dates, which is the traditional yyyy-mm--dd format that we're all used to seeing.
Today, after finishing a blog post, I wrote a parser to convert a `&str` to the `Message` struct in Dory. I also added a lot more test coverage, which revealed a few issues to fix.
The `sendmsg` binary (using Dory as it's backend) is now able to send Misfin mail to the reference server. This required more debugging skill than it should have due to some issues with both rustls and a compiler issue. Might be good for a full post? Anyway, link to the repository below.
https://codeberg.org/jeang3nie/sendmsg
Just finished hacking together a small binary that sends Misfin messages from the command line using Dory. Time to grab the reference implementation code and start testing.
As an aside, I was thinking that client certs in theory should make identity spoofing next to impossible. That might mean that Misfin clients could just directly shell out to a sendmail-esque binary such as this rather than logging in to a remote server and sending their messages from there. Basically how email was always supposed to work, before all of the spam mitigations broke the ability to deliver mail from unknown random IP addresses. I mean, where you actually send from shouldn't make a bit of difference so long as your certificate goes with you.
Began a proof of concept binary project to test out sending Misfin mail using Dory. I should be able to commence testing for interop in the next couple of days. Watch this space for progress reports.
Rust 1.70 came out this past week. One of the highlights of this release was the stabilization of the OnceCell and OnceLock types. OnceLock in particular is a big deal because it has the potential to replace the `lazy-static` and `once-cell` crates, for those times when you want to have a lazily evaluated static data structure.
I just finished a short while ago changing Zond to use the new interface and so far so good. It's nice and simple, with good documentation.
I wasn't completely happy with how I had previously setup the workflow for this log, so I did a bit more coding to automate things in a better way than before. I created a small Rust crate for working with Tinylogs and incorporated that into Zond. Now, when you type `zond tinylog` with no other arguments, an editor window will pop up for you to type your thoughts. So long as the temporary file thus created is not empty, the text is added as a new post. This also allows the log to contain a header, which was not possible before.
First tinylog post!