I actually can't believe it's already been a month since I last wrote a blog post. So much has happened since then, and it's all gone by so quickly. I think I'll cover just a few quick things.
First of all, school starts on the 29th, so I'm about to get even busier. I'm a little nervous about my cello lessons, because I have not had as much time on my cello as I would have liked this summer. I've practiced it on and off over the course of the summer, so I can't say that I feel super accomplished. I'm a little discouraged, because playing my cello just isn't as fun as it used to be. Since I started studying cello for my music minor, it became homework, and it immediately lost all its appeal. I can't say the same about computers though. My computer science major has been really fun so far. So I'm starting to think that maybe music is not for me, and I'm better off spending my time and energy on computers, because I still enjoy them. That being said, I'm definitely going to finish out the music minor. I can always hope that my attitude changes. I have two semesters of lessons this year, as well as two semesters of aural skills and music theory. So I definitely have lots of music classes; in fact I have three music classes, and three computer science classes this semester.
My summer has been really busy because I've been working full-time. A few weeks ago, my department took a trip up to Michigan's Drummond Island. I kept a journal of that trip, but I'm not going to share much of it because it is pretty personal. I will say that we had a lot of fun adventures though. My boss introduced me to an old T.V. show called The Computer Chronicles. I actually really enjoyed watching a few of them, because they talk about the technology of the day, and so it's really interesting to see what all has changed, and what hasn't. I have a mirror of the YouTube channel, The Computer Chronicles.
I would highly recommend checking out the UNIX episode, as well as the shows on wireless networking, and artificial intelligence, to name a few. The Y2K episode, which aired in 1999, was also pretty interesting. It's also interesting to listen to them talk about standards, because at the time, there really were no standards in the computer world. There was no such thing as Ethernet, or POSIX, or anything like that. So every company just kind of did their own thing.
The UNIX episode is particularly interesting because of how little today's UNIX-like operating systems have deviated from it. Being an OpenBSD user, I'm very familiar with UNIX-like systems, and after watching that episode, I'm confident that I could navigate a UNIX mainframe in 1985 just as well as my laptop now, because the operating system interface has changed so little. I recognized command line utilities like 'troff' and 'more', so that was really cool.
Speaking of my laptop, I ordered a Framework laptop a few weeks ago. It isn't going to ship until mid-September, which means I probably won't get it until October, but I'm really excited for the Framework laptop, because it is a modern laptop that is fully user-servicable. Framework provides instructions on how to replace just about every single component on the Framework laptop. Nothing is soldered or glued in, everything uses standard connectors, and can be replaced with third-party components. Additionally, you can order Framework laptops without any operating system on them, which saves you $200 if you aren't going to use Windows. I think the best part is that, according to all the sources I can find, OpenBSD runs amazing on the Framework laptop. The only thing I know won't work right now is the WiFi card, but I'm hoping that by the time I get my laptop, OpenBSD 7.2 will be out, because I know OpenBSD 7.2 will support that WiFi card, as support for it has already been merged in.
I'm currently using an HP Elitebook for my personal and school computing, which I've borrowed from my work until my Framework laptop comes. It seems to be a pretty sturdy laptop, and OpenBSD runs it really well, all things considered. My only real complaint is that sometimes it doesn't wake from the suspended state, and the headphone jack seems to be messed up, as it only outputs audio to the left ear. This appears to be a hardware issue with the laptop, not an OpenBSD issue, but I could be wrong.
Last school year, I was using a ThinkPad T540p. That now belongs to my sister, who needs a good Windows computer for school. So I had to put Windows 11 on that, and within 15 minutes of installing it, it bricked the UEFI, and killed an SSD. So that was a fun morning. I was able to re-flash the UEFI using a CD from Lenovo, but I was definitely worried there.
Anyway, on my ThinkPad during the school year, I just used FVWM, which was built into OpenBSD. It was a really old version of it, but it seemed to work okay. It was never great though. During my summer classes, I got fed up with it and just switched to Gnome. However, Gnome is really bloated and everything got really sluggish. My computer was spending way too much compute power on blurring my wallpaper. One of the reasons I liked Gnome is because it would automatically configure my monitors, as I was using a multi-monitor setup that I could never get working with FVWM. But Gnome was just too much for my ThinkPad to handle, and I wasn't a fan of installing so many packages just to get a working GUI. So, just a few days ago, I decided to look at FVWM again. I read a bunch of documentation, and tried to fix some of the issues I was having by editing my configuration file, but the configuration file syntax for FVWM is kind of crazy, and I don't really have time to mess with it. I ultimately need a window manager that just works. It has to be easy to configure, and also lightweight and fast.
I know that OpenBSD has a number of different window managers built in, so I looked around a little online, and tried to figure out what other people use on OpenBSD. I kept seeing CWM come up, so I figured I'd give it a go. It is technically a stacking window manager, but it also has tile functionality, which I was willing to try out, because I feel way faster with a keyboard than I do with a mouse. When I first fired up CWM, I had no idea what I was doing. I couldn't even figure out how to move or resize the default xterm window it had spawned for me, let alone open new windows. There was also no status bar or anything. Just a single xterm window with no border, right in the middle of the screen. I was luckily able to read the manual page on CWM from the open xterm, and slowly but surely, I built up a working CWM configuration.
I learned that CWM is not at all useful by default, but that you can customize all the keybindings, and make it work pretty much however one would want it. So that's what I did. I spent a few hours writing a config file, based on the manual pages, and by the end of that process, I got a configuration I was happy with. So now I'm officially a CWM user. I wrote a status bar in KSH, the default shell on OpenBSD, so I can see the date and time, as well as check my battery life and get my IP address, and all that good stuff. I'm actually much happier with CWM than I was with FVWM. For the most part, it behaves exactly how I would expect. There are still a few quirks, but they're not nearly as annoying as FVWM's quirks.
Now that I'm using a tiling window manager—or more accurately, I am using CWM as a tiling window manager—I don't think there's any going back. It's so easy to launch programs and organize them on my screen, that it is crazy. I'm looking forward to using CWM for school this year, because I think it'll make me a lot more productive than I was last year. I also discovered after I got CWM all set up, that it is actively developed by the OpenBSD team for OpenBSD, whereas FVWM is just a port, and an old one at that. So that's a bonus too. As I've said many times before, I like using OpenBSD base software anywhere I can.
My work on Telodendria has slowed down a little bit, as I've been busy getting ready for school, and working. But I'm pleased to report that I have a fully-functional multithreaded TCP server up and running now. I'm currently in the process of building up an HTTP server on top of it, but that's kind of tedious, because I have to map all the HTTP status codes to strings, and whatnot. A lot of the hard work is behind me now, however. I'm using the POSIX thread library, and I've built up a queue data structure to manage connections, and it seems to be working really well. This is the first thing I've ever done with POSIX threads, so I'm pretty proud of myself for actually building something useful with them.
Once I get the HTTP server built, so I can serve basic HTTP requests, then I think I'm really to start building a Matrix homeserver! I just have to figure out how to handle routing requests in a clean and elegant matter, and I also have to figure out how to manage the server's data in a way that is not only thread-safe, but also scalable. My goal is to eventually be able to point two Telodendria binaries at the same data directory, and have them work together, without conflicting. The goal is to scale Telodendria by allowing multiple instances of it to read and write the same data. I'm not sure if I'll be writing a socket program to handle data reads and writes, or if I'll just implement a basic lock system, but it would be nice to be able to run Telodendria in a containerized fashion, so that it could technically be capable of replacing the Synapse instance that runs matrix.org.
So that's it for this month. I hope I'll have more time to write during the school year, and I hope I'll have more to write about. Although I do have a queue of posts that I could write if I do get the time, so we'll see of any of those actually get written in the near future.
© 2019-2023 Jordan Bancino.