summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blog/24th-World-Scout-Jamboree.md33
-rw-r--r--blog/Announcing-Campmaster-Constantine.md19
-rw-r--r--blog/FIRST-Robotics.md15
-rw-r--r--blog/Internet-Services-Decentralization.md65
-rw-r--r--blog/January-status-update.md38
-rw-r--r--blog/Make-FOSS-Ham-Software.md27
-rw-r--r--blog/My-Journey-to-Eagle.md58
-rw-r--r--blog/New-Site.md17
-rw-r--r--blog/October-Status-Update.md22
-rw-r--r--blog/Online-Scouting.md20
-rw-r--r--blog/Scouts-and-D-D.md20
-rw-r--r--blog/Summer-Status-Update.md21
-rw-r--r--blog/april-status-update.md26
-rw-r--r--blog/august-status-update.md57
-rw-r--r--blog/best-laptop.md63
-rw-r--r--blog/coming-out.md19
-rw-r--r--blog/degoogling-part-one.md30
-rw-r--r--blog/draft/hello-world.md40
-rw-r--r--blog/february-status-update.md16
-rw-r--r--blog/get-a-radio-license.md47
-rw-r--r--blog/how-to-plan-an-event.md104
-rw-r--r--blog/installing-sourcehut.md61
-rw-r--r--blog/july-status-update.md20
-rw-r--r--blog/june-status-update.md24
-rw-r--r--blog/march-status-update.md19
-rw-r--r--blog/may-status-update.md16
-rw-r--r--blog/my-covid-experience.md57
-rw-r--r--blog/new-site.md9
-rw-r--r--blog/offline-email.md55
-rw-r--r--blog/on-deadnames-and-git.md63
-rw-r--r--blog/postfix-on-debian.md14
-rw-r--r--blog/preparing-to-come-out.md22
-rw-r--r--blog/september-update.md17
-rw-r--r--blog/spotifyd.md73
-rw-r--r--blog/starting-an-irc-server-in-2021.md28
-rw-r--r--blog/status-update-may.md27
36 files changed, 1262 insertions, 0 deletions
diff --git a/blog/24th-World-Scout-Jamboree.md b/blog/24th-World-Scout-Jamboree.md
new file mode 100644
index 0000000..61bee61
--- /dev/null
+++ b/blog/24th-World-Scout-Jamboree.md
@@ -0,0 +1,33 @@
+---
+title: "24th World Scout Jamboree"
+date: 2019-08-04
+categories:
+ - scouting
+series:
+ - reflection
+---
+This July, I had the wonderful opportunity to be a part of the Boy Scouts of America's 24th World Scout Jamboree contingent. For two weeks, I camped out with 50,000 other scouts, scouters, and staff from more than 160 countries. It was a wonderful experience, and I thought I'd kick off the new blog by writing about it. I don't have many pictures, which will hopefully not set a trend for the rest of the travel posts here.
+
+### The Arrival
+The trip started off with a 14 hour bus ride from the Warwick, RI Scout Shop at 5 AM, to the Ruby Welcome Center in Glen Jean, WV. The ride was not memorable, I mostly watched YouTube and Netflix. I managed to catch some shut-eye after lunch, which tided me over from Maryland into West Virginia. We got into the Summit at around 6:30 in the evening, with plenty of time to set up my tent and figure out where we were. I was in campsite C101, which was fairly close to everything except Basecamps A and B.
+
+The next day, the US contingent was supposed to serve as "ambassadors" to the incoming international troops. My troop helped all those incoming units get their rain flies set up, organize their tents, and otherwise get settled in. It rained a bit, which is why we prioritized the rain flies. At the end of the day, at least three staff members came down to personally thank our troop for our help that day.
+
+### Program
+Tuesday, the 22nd. Program opened for the first time that day, and I made a beeline for the Scott Summit Center, which is where most of the trading happened. On that day, I didn't end up trading anything, but I did meet some people. The next day, the 23rd, I hit the trading post. A JOTA/JOTI (Jamboree on the Air/Jamboree on the Internet) neckerchief was about $16, so I got one of those and two IST (International Service Team) Council Service Patches.
+
+Skipping ahead to Saturday, the 27th, I went zip lining for the first time in my life, which was amazing. I was a bit scared at first, I've never been very fond of heights,  but it was all very safe and the staff were well trained. That same day, I watched a weather balloon launch from the NA1WJ tent, which is [currently tracking](1) just outside of Morocco. That event, along with near-daily visits to the NA1WJ event, is what's motivating me to advance from my Technician class to a General class amateur license.
+
+Tuesday, July 30th. Whitewater rafting day. It started off as a nice day, my group got through some class 5 rapids on the New River, (beautiful place by the way,) and I almost fell off the boat. About 15 minutes after leaving the boats and getting on the bus back to the Summit, it started to rain. Soon after I left the bus, standing right next to the Basecamp D Tower, where did lightning strike? That's right, the Basecamp D Tower. The torrential rain kept up for about half an hour before clearing up to be a nice sunny day.
+
+On Wednesday, the final Basecamp Bash in C was cut short by three separate Lightning Alerts. We were all rushed under the pavilion and held there for at least an hour and a half. We eventually got back to the site at around 11 PM, only to find that lightning had struck a tree about 200 feet from my site. Nothing caught fire, but it was still alarming.
+
+Thursday, the closing show. Hoo boy, if I had known what $12m worth of equipment could do for a show. There was so much going on and two talented acts. Special appearances included [Pentatonix](2) and [Light Balance](3), which won the Golden Buzzer on AGT Season 12. It culminated in a 30 minute long laser/pyrotechnic show, the first time I've ever seen a group of people rave to the "Tetris" theme.
+
+## Conclusion
+
+The World Scout Jamboree is something I'll remember for years to come. It was two weeks of fun and international bonding, even with the long thunderstorms and oppressive heat. The Jamboree emphasized what needs to be done in order to truly improve our world. That's why Scouting is important. That's why I believe that World Scouting is crucial to the long term survival of our species and our planet. I'll update this post with pictures of the patches and neckerchiefs I got soon.</p>
+
+[1]: https://aprs.fi/#!call=a%252FNA1WJ-7
+[2]: https://twitter.com/PTXofficial/status/1157350106900754433
+[3]: https://lightbalance.net/
diff --git a/blog/Announcing-Campmaster-Constantine.md b/blog/Announcing-Campmaster-Constantine.md
new file mode 100644
index 0000000..deac28b
--- /dev/null
+++ b/blog/Announcing-Campmaster-Constantine.md
@@ -0,0 +1,19 @@
+---
+title: "Announcing Campmaster Constantine"
+date: 2020-04-29
+categories:
+ - project
+---
+## Overview
+I've been on Discord for five years now, and I've been developing bots for it since at least 2016. In that time I've really had two major bot projects, namely the OtmasBot and Kronos. Both of those were implemented in Node.JS, and they both had their respective problems. The OtmasBot was a [mess](https://github.com/Muirrum/Kronos/tree/9e4aa458c62493671ea72c98d0ccd01fdeeca117), and sometimes the [token](2https://github.com/Muirrum/Kronos/commit/5c0d1218a70f4cf7f205ae70f7b21ff953d783bc) even got leaked into git as well. Kronos was different. Kronos had a decent command framework (run through [discord.js-commando](https://discord.js.org/#/docs/commando/master/general/welcome)) and commands that (sometimes) worked. The major difficulty I ran into with Kronos was getting the databases to play nicely with my code. There were multiple issues with SQLite and Docker, spread across many different repositories as I tried GitHub, GitLab, and different frameworks like Klasa. None of them worked, and the project lost my interest for a while.
+
+## Camp Quarantine
+Enter Camp Quarantine, a new Discord server focused around inclusive international Scouting. As one of the founding staff members, I wanted to provide something to help the server out, and I immediately thought of a bot. At first, I was going to implement it in Node.JS again. Then, I remembered all the difficulties I had last time I tried that, and I remembered that I've been meaning to learn [Rust](https://rust-lang.org) for a while. I know that making a Discord bot is not *exactly* the preferred way to learn a new language, but it worked for Node.JS, why couldn't it work with Rust? I decided on using the [serenity](https://github.com/serenity-rs/serenity) library, which included a "Standard Framework" to make commands easier.
+
+## Sourcehut
+Around this time, I discovered [Sourcehut](https://sourcehut.org/). Sourcehut is a simple, JavaScript-free project site that's split up into several different services, like Git, CI, and Todo lists. I decided I'd give Sourcehut a go along with Rust.
+
+## The Outcome
+Somehow, this combination of new services, languages, and libraries worked. I've been more productive in the last few weeks than I ever have been before. Campmaster Constantine has grown in functionality faster than either Kronos or the OtmasBot, and the code is cleaner and faster. My databases "just work". I've finally figured out how to make Continuous Deployment work properly, and I've learned so much about Rust and Git.
+
+For all software developers, I'd *highly* recommened both Rust and Sourcehut. They're both incredibly powerful and useful tools. As for the Campmaster, he's available to [join](https://discordapp.com/api/oauth2/authorize?client_id=702632205062635607&permissions=26630&scope=bot) your Discord servers and start working today! You can read more about him [here](https://hub.sr.ht/~muirrum/Campmaster-Constantine/).
diff --git a/blog/FIRST-Robotics.md b/blog/FIRST-Robotics.md
new file mode 100644
index 0000000..641cc5f
--- /dev/null
+++ b/blog/FIRST-Robotics.md
@@ -0,0 +1,15 @@
+---
+title: "FIRST Robotics"
+date: 2019-10-15
+---
+Honestly, this post has been a long time coming. I've been involved with [FIRST](1) (For Inspiration and Recognition of Science and Technology) since I was in 4th grade almost nine years ago, and I can honestly say that my life has changed for the better. I was part of my district's first ever robotics team, competing at our first events, and winning our first awards. That experience was absolutely amazing, and now, working on an FRC team with robots and coding that 4th-grade me could only begin to imagine is even better.
+
+So much of what I know today about computers, engineering, physics, and science in general comes through my exposure to FIRST. I've learned to work well with other people and how to use Git. Most importantly, however, I've learned how to properly deal with people above me making strange or irrational decisions. All of this has helped me strike out on my own.
+
+FIRST has also cemented my love of public and community service. Most of my volunteer hours from last year came from FIRST events. I've served mostly as a scorekeeper, but I've also pitched in as an unofficial A/V guy when needed. One event last year had me running the playoff matches from my phone's hotspot. If that's not dedication, I don't know what is. Working with these kids, seeing their projects and dedication, it really inspires me to do better as a person.
+
+My ideal college major has shifted a lot over the last few years. At first, I was sure that I was going to be a genius computer scientist, solving all the problems in the world. Then reality sunk in, and I changed to IT services. Competing in the FIRST Robotics Competition, however has convinced me that what I really love is building and coding robots. That's what I want to do in life, and that's what I'm going to college for.
+
+I can highly recommend FIRST as a meaningful and fun thing for any young person to do. Whether you're a third grader or a senior, there's a program for you.
+
+[1]: https://www.firstinspires.org/
diff --git a/blog/Internet-Services-Decentralization.md b/blog/Internet-Services-Decentralization.md
new file mode 100644
index 0000000..8362407
--- /dev/null
+++ b/blog/Internet-Services-Decentralization.md
@@ -0,0 +1,65 @@
+---
+title: "Internet Services Decentralization"
+date: 2020-10-21
+draft: true
+---
+
+The internet as we know it today is full of useful services, that millions of
+people use every day, all over the world. Most of these services are controlled
+by a few corporations like Google, Facebook, Microsoft, and Apple, among others.
+These are silos, walled gardens that want to keep you on their platforms for as
+long as they can. There can be no true free flow of information on these sites,
+which often have obscure and arcane moderation policies.
+
+Take, for example, the amount of time[^5] it took for Reddit to crack down on
+subreddits that violated its' rules. Quoted from the article
+
+> It is part of a broad shift away from the hands-off approach long embraced by online platforms that have claimed to be neutral in the face of whatever users publish.
+
+I'm not saying that Reddit admins or admins of any other community platform
+should be curating content. That responsiblity should fall to the users
+themselves. However, the admins can and should take action when rules are
+violated.
+
+The bigger issue, though, is that there is often nowhere else for their users to
+go. They don't know what else exists for them to gather and share.
+
+What to do, then? *Is* there any alternative?
+
+## Enter the Fediverse
+A (relatively) new development in this arena is the rise of what people are
+calling the Fediverse. It's a network of different hosts and different
+communities interacting over the internet. They use the same basic software[^1],
+but each instance is privately run. User accounts on one instance can follow
+accounts on *any other instance*.
+
+For the rest of this post I'm going to be focusing on one brand of software,
+[Mastodon][mastosite]. It's based on Twitter, in that users can write small
+posts in a microblog format. I've been on Mastodon since 2018, and I've stuck
+with the same instance[^4] the whole time.
+
+The most important aspect of the Fediverse to me is *data portability*. If you
+don't like the way your instance is being run, you can take your data with you
+to another one[^2] or set up your own[^3]. If tomorrow, for example, the admins
+of mastodon.technology decided to start banning accounts randomly, I could get
+an archive of my entire account and go to another instance.
+
+This kind of flexibility brings accountability to instance admins, and also
+provides an alternative to users who are unhappy with the moderation of their
+instance. There are thousands of instances out there, and it's easy to set up a
+private instance for yourself and possibly some friends.
+
+The Mastodon project maintains a list of public instances
+[here][mastoinstances]. Each instance on this list has to agree to certain
+policies, like active moderation against racism and hate speech. You can read
+the full Server Covenant [here][mastocovenant]. I *highly* recommend trying Mastodon out.
+
+[^1]: ActivityPub, described more here [ActivityPub](https://en.wikipedia.org/wiki/ActivityPub)
+[^2]: As documented [here](https://docs.joinmastodon.org/user/moving/)
+[^3]: As documented [here](https://docs.joinmastodon.org/user/run-your-own/)
+[^4]: https://mastodon.technology
+[^5]: From [NPR](https://www.npr.org/2020/06/29/884819923/reddit-bans-the_donald-forum-of-nearly-800-000-trump-fans-over-abusive-posts)
+
+[mastosite]: https://joinmastodon.org
+[mastocovenant]: https://joinmastodon.org/covenant
+[mastoinstances]: https://joinmastodon.org/communities
diff --git a/blog/January-status-update.md b/blog/January-status-update.md
new file mode 100644
index 0000000..d61e825
--- /dev/null
+++ b/blog/January-status-update.md
@@ -0,0 +1,38 @@
+---
+title: "January Status Update"
+date: 2021-01-27
+draft: false
+series:
+ - status
+---
+
+Hello! I've sort of fallen off the bandwagon with these status updates, I think mainly because of a lot of other work including college applications and schoolwork. I'd like to get back to doing them as a regular thing, sort of documenting what I'm working on from month-to-month.
+<!--more-->
+
+Given that I've skipped three months, this status update will be a little longer than usual.
+
+# College
+Kicking things off with probably the biggest development, I've been accepted to and have committed to attend Worcester Polytechnic Institute as part of the Class of 2025! This is big, since WPI was my first choice. I'm super excited to go there this fall.
+
+# Constantine Rewrite
+This has been progressing slowly. I'm running into issues regarding Postgres connections blocking the main event loop. I think it's an issue with not closing connections at the end of commands that use the ORM connection. I need to write a function that runs at the end of every SQL command to close the connection.
+
+# FLL-Scoring
+This has morphed from its' original design. I'm working on sketches for a hardware component to make it easier for referees to enter the scores. I'm basing it off of the scoring pedestals that come with the FRC fields that the referees use to enter fouls, penalties, and the endgame scores.
+
+I'm thinking of a network of Raspberry Pi 3 or 4s, with keyboards and touchscreens, in a custom box that can be clamped on to each table. They'd be powered with power over ethernet, which will also be used to connect them to a private network that also hosts the server.
+
+This has led to a redesign of the software side of the project. Instead of being a microservice architecture that's designed to be served over the internet, it's going to be similar to the current standard software, in that it runs on the local network.
+
+![login page](/img/fllscoring-login.png)
+
+The CSS isn't the *prettiest* but it's a start (and it's better than anything I've done previously!). I'm really excited because this project has already taught me more about CSS and web apps.
+
+![scoring page](/img/fllscoring-scorepage.png)
+
+Like I said, not the *best* design, but it's a prototype. I'd like to get some help with making it look nice before I mark it as ready for production, but that can come once the functionality is down.
+
+# This Site
+I'm thinking of redesigning this site a little bit. I'd like to put my own spin on the design instead of using someone else's. We'll see how that goes though!
+
+That about does it for what I've been working on over the past three months. I'll see you (hopefully) next month for another status update!
diff --git a/blog/Make-FOSS-Ham-Software.md b/blog/Make-FOSS-Ham-Software.md
new file mode 100644
index 0000000..32ff619
--- /dev/null
+++ b/blog/Make-FOSS-Ham-Software.md
@@ -0,0 +1,27 @@
+---
+title: "Make FOSS Ham Software"
+date: 2021-07-23
+draft: false
+tags:
+ - radio
+---
+
+If you follow ham radio news, you might have seen a recent [post][post] to the EZNEC[^1] website. It gets a little long, but the important line is
+
+> On January 1, 2022 I will be retiring. I'll be nearly 76 and want to spend more time at other things. EZNEC is and always has been developed, sold, and supported only by me, so all development, sales, and support will end at that time...
+
+The following is the first bullet point in the explanations that come immediately after (emphasis mine).
+
+> EZNEC will be released to the public domain and become free of cost and can be freely copied and distributed. *I do not plan to release the source code*.
+
+This line is important, because it means that not only will all support and development cease, there is no one who can take up the torch and continue development of what some would consider a critical tool for radio amateurs. This software will soon fade from relevance, and this is an issue that I've seen build for a while. So many of our tools are based on proprietary software that much of our hobby is beholden to private corporations and our hope that they will continue to operate in good faith.
+
+One of the goals of every amateur in the hobby should be to increase the number of new amateurs joining us to replace the ones we lose every year. Having expensive proprietary software as the prominent requirement for running a quality station is exclusionary to newcomers.
+
+As the most experienced members of our hobby begin to exit it, for whatever reasons, we must be prepared to move on and continue with amateur radio. When software is developed by a single person, as EZNEC was, when that person no longer wishes to keep going, and doesn't release their code, the software withers and dies. This is part of the software lifecycle, but in this case there is no alternative to EZNEC that I know of. If you know of one, please drop me a message in my public inbox (found in the sidebar)!
+
+When software is free, knowledge is free. Encryption and obfuscation isn't allowed on the air, why do we allow it in our software?
+
+[post]: https://eznec.com/retirement.htm
+
+[^1]: EZNEC is a popular tool to model antennas and their RF patterns.
diff --git a/blog/My-Journey-to-Eagle.md b/blog/My-Journey-to-Eagle.md
new file mode 100644
index 0000000..e42ff84
--- /dev/null
+++ b/blog/My-Journey-to-Eagle.md
@@ -0,0 +1,58 @@
+---
+title: My Eagle Trail
+date: 2020-05-18
+series:
+ - reflection
+categories:
+ - scouting
+draft: false
+---
+
+Over the past 12 years, I've been involved in the [Boy Scouts of America](https://scouting.org). I've gone from a Tiger in elementary school to an Eagle Scout in High School. I've poured thousands of hours in both volunteering and camping, both as part of the main BSA program and the OA, and I've gone to the largest Scouting event in the world, the World Scout Jamboree. As I've now reached the pinnacle of the Scouts BSA program, I figured it would be a good idea to reflect on what brought me here, and where to go.
+
+<!--more-->
+## Cub Scouts
+I started my journey as a Tiger Scout. There's not much that happened here, except for MassJam 2013, which was my first really big event as a Scout. I credit this event with first getting me into amateur radio.
+
+## Boy Scouts
+In 2014, I "crossed over" from Cub Scouts into Boy Scouts. My scoutmaster at the time was Scoutmaster Dude. Dude was my scoutmaster for several years, and he oversaw my journey from Scout to Life, which, for those unaware, is the majority of the ranking system. At that point there was only one rank left, Eagle Scout.
+
+At that point, my troop changed scoutmasters. The new scoutmaster had a... *different* approach to running a troop. Scoutmaster Dude was more focused on himself planning outings that we would all have fun on, while the new Scoutmaster was a lot more focused on us as youth planning all of our trips. By this time, I was one of the more senior scouts in the troop, and already hard at work on my Eagle Scout rank.
+
+In the summer of 2017, my then-Senior Patrol Leader agreed to appoint me as Troop OA Representative. This was the first appointment in a series that would leave me in 2020 holding four leadership positions within the troop. I was already the troop Webmaster, but that fall I was appointed Scribe, then Troop Guide in 2019. Through these positions I've gained the confidence to carry out my plans (and actually plan).
+
+### The Order of the Arrow
+In the fall of 2017, I completed my Ordeal and was inducted into the [Order of the Arrow](https://oa-bsa.org). That sparked my membership in an amazing organization that's shown me the power of cheerful service to others. In 2019, I worked on the New England Fellowship Shows Committee, and I was offered the ability to be the 2020 Shows Fellowship Coordinator. The 2020 NEF has, sadly, been cancelled, but I still gained valuable experience.
+
+**Update 2020-06-22: NEF 2020 was a virtual event, where I was responsible for running the minecraft server.**
+
+### World Scout Jamboree
+Also in 2019, I applied and was accepted to be a part of the BSA's contingent to the 24th World Scout Jamboree at the Summit Bechtel Reserve in West Virginia. I've written about my experience there in [another post][1].
+
+### Coronavirus
+In March of 2020, the Coronavirus forced my school and other activities to close. This, unfortunately, caused my scout group to stop meeting in person. By this point I only had one or two badges left, having completed my project in the spring of 2019 (more on that later). In keeping with my plan for COVID, I decided to muscle through the last few requirements that I had yet to complete, like Citizenship in the Community and the Hiking merit badge reflections. By late March I had completed my last badge and had my counselor sign off on [Scoutbook][scoutbook], which is the BSA's official online record of advancement. Since I didn't have to worry *as* much about school and things like that, I was able to get them done fairly quickly.
+
+### Scoutmaster Conference
+Before the Board of Review comes the Scoutmaster's Conference, where the unit leader gets the chance to talk to the Scout and discuss what they've accomplished between this rank and the last. My Scoutmaster and I talked about my vision for the troop and how I was planning to stay involved after earning my Eagle. We discussed what problems I saw in the troop leadership and my ideas for how to fix them. I ended up with an appointment as Junior Assistant Scoutmaster.
+
+## The Board of Review
+### Planning
+After the Scoutmaster's Conference, the troop committee chair reached out to local Scout leaders like the Assistant Camp Director at Wanocksett, the former District Activities Coordinator, and adult leaders within the troop. It took a few days to get them to all agree on a date and time.
+### The Zoom
+The Board was held on Zoom, and I was in my full Class-A uniform with the beret I traded for at the Jamboree and my Jamboree youth participant neckerchief. The Board went well, and didn't take as long as I thought it would (about 30 minutes). I was asked questions about my time in Scouting and what I learned from my experiences. They asked what I got out of the program, and especially the Eagle required merit badges. After the zoom I took the photo currently on the sidebar of the site at time of writing.
+
+## Hiking Merit Badge
+This badge was, without a doubt, the absolute hardest merit badge I earned as part of my journey to Eagle. Over seventy miles of hiking were required to complete this badge, with the final hike being twenty miles in one day. Admittedly, I *did* pick some difficult routes. For one of my ten-mile hikes, I plotted a route over the Seven Sisters, which is a ridge in the Berkshires of Massachusetts. The contour lines on the map did not tell us about the steep drops and climbs that we would face as we traversed that ridge. Then, for the twenty mile hike, I wanted a route without much elevation gain, so I chose a trail that was part of the Massachusetts [Bay Circuit Trail][bc-trail]. What I forgot about, however, was the hill at the start of the loop. By the end of the day, that hill was the last thing between us and the car, and it took at least half an hour longer to climb it than it would have had we not been as tired as we were. That hike made me never want to touch hiking boots again. My feet ached for days afterwards.
+
+Now, that's not to say that Hiking merit badge is a bad badge. Without it, I probably wouldn't have made Eagle, certainly not during quarantine. I am not a strong swimmer. This badge let me bypass most of the swimming requirements in favor of something I enjoy and am good at. Some of the hikes we went on, like a hike up the side of Exit Glacier in Kenai Fjords National Park, were stunning and fun (even if we didn't make it to the top). I have hundreds of good pictures and memories from my hikes, but I would've had more fun had I not been choosing routes solely for the distance.
+
+## Where Next?
+With the rank of Eagle attained, there's no higher place to go in the Scouts, BSA program. No further rank to achieve, unless you count the various awards. I have less than one year at time of writing (2020-06-22) until I age out to become an Assistant Scoutmaster. The Coronavirus has killed any hope I had of working at Camp Wanocksett this summer, which was my last opportunity to work as Junior Staff. Next summer, I've applied to work on staff at the 2021 National Scout Jamboree at the Summit Bechtel Reserve. My application is still pending at time of writing.
+
+However, Scouting has been and is still one of the biggest and best forces in my life, and even though I'm "finished" with the advancement program, I plan on staying in the program for a long time.
+
+
+
+[1]: blog/2019/8/24th-world-scout-jamboree/
+[scoutbook]: https://scoutbook.com
+[bc-trail]: https://www.baycircuit.org
diff --git a/blog/New-Site.md b/blog/New-Site.md
new file mode 100644
index 0000000..8c9e4c9
--- /dev/null
+++ b/blog/New-Site.md
@@ -0,0 +1,17 @@
+---
+title: "New Site"
+date: 2019-09-20
+tags:
+ - me
+categories:
+ - introduction
+series:
+ - me
+---
+Well now. Here we are again. This must be what, the fourth fresh site I've started? They've all eventually gone to the mists of time. For a time I was using [Postleaf](1) on my Raspberry Pi as a blog, but that didn't go well. I'll probably move over my post about the World Scout Jamboree to this site as well, so that post may appear before this one chronologically.
+
+The goal for this incarnation is long-term stability. I don't want to have to reinstall another CMS in a few months. That just gets weird. I also don't want to have to hand code my site, that's not my cup of tea. I build desktop applications and games, not websites.
+
+A little bit about me: As of writing I'm a Life Scout in the Boy Scouts of America. I'm very close to earning my Eagle, with only Hiking, Personal Fitness, and Family Life to go. I believe wholeheartedly in the importance of public service, and I try and provide as much as I can, through my skills with amateur radio and coordinating events for local organizations. I currently work as a student lighting designer and sound technician at my school for outside shows and events. I play the euphonium in the school concert band. In my spare time I write roguelikes and Discord bots.
+
+[1]: https://postleaf.org
diff --git a/blog/October-Status-Update.md b/blog/October-Status-Update.md
new file mode 100644
index 0000000..dc04d0c
--- /dev/null
+++ b/blog/October-Status-Update.md
@@ -0,0 +1,22 @@
+---
+title: "October Status Update"
+date: 2021-11-01
+draft: false
+series:
+ - status
+---
+
+Hi y'all! Welcome back to another status update! I'm settling into my second
+term at WPI. It's super weird to have 7 week terms instead of the longer
+semesters I'm used to. I've been learning a lot with [LNL](https://lnl.wpi.edu),
+especially stuff that I haven't known before. It's giving me the opportunity to
+do more of something I love (event production) with some really high-quality
+equipment.
+
+## Skills
+I've taken to learning Django as a framework, mainly so that I can contribute to
+the [lnldb](https://github.com/WPI-LNL/lnldb), which is the way that LNL manages
+events. I've been knocking out some old issues and getting acquainted with the
+codebase.
+
+That's all I've got for this month, see you next time!
diff --git a/blog/Online-Scouting.md b/blog/Online-Scouting.md
new file mode 100644
index 0000000..3f16db9
--- /dev/null
+++ b/blog/Online-Scouting.md
@@ -0,0 +1,20 @@
+---
+title: "Online Scouting"
+date: 2020-05-02
+categories:
+ - scouting
+---
+
+During this pandemic and state of quarantine, many activities are moving online. This includes everything from schools, to work, to Scouting. I am not new to the world of online Scouting, having volunteered at the 2019 Jamboree on the Internet with [ScoutLink](https://scoutlink.net), and being a member of the largest Discord Scouting community, [Discord Scout Troop](https://discord.gg/a4TQPdg) since April of last year. Through each of these, I've made friends from around the world, and learned more about other cultures than I ever would've otherwise.
+
+I've seen firsthand the impacts that this sort of international goodwill can have on people. I wrote about some of that in my post about the [24th World Scout Jamboree](http://devosmium.xyz/2019/08/04/24th-World-Scout-Jamboree/), but there's so much more to it.
+
+## Keeping the Scouting Spirit Alive
+Throughout the quarantine, I've seen many community leaders emerge and try to keep Scouts engaged. These range from small Discord servers to giant National Scouting Organizations like the [BSA](https://scouting.org). They all want to keep Scouts both young and old engaged during this time of crisis. One of the most successful challenges that I've seen has been the "Pass-the-Necker" challenge, where 24th WSJ participants would "pass" their red youth participant necker from camera to camera, traveling all over the world. Other communities have a daily "Question of the Day" to answer, or challenges to complete.
+
+All of these serve to remind people of the unifying power of Scouting and the incredible impact it can have on people's lives. Why stop when the quarantine is over?
+
+## After Coronavirus
+Certainly, at the moment we should all be focusing on the present health crisis and doing everything we can to hasten its conclusion. However, we should also be looking to what the world will look like when we're returning to "normal", whatever that looks like. A lot of resources have been created or updated to help provide programs of all kinds at home, and that's something that should be continued well after Coronavirus has "ended".
+
+It's important that Scouting and other youth programs have the ability to reach as many people as they can, including people who may not be able to participate in the regular activities, for whatever reason. These new "work from home" tools and procedures shouldn't completely go away when this is all over.
diff --git a/blog/Scouts-and-D-D.md b/blog/Scouts-and-D-D.md
new file mode 100644
index 0000000..66e5278
--- /dev/null
+++ b/blog/Scouts-and-D-D.md
@@ -0,0 +1,20 @@
+---
+title: "Scouts and D&D"
+date: 2020-01-08
+categories:
+ - scouting
+---
+<p>One of the earliest memories I have in Scouting is circling a picnic table with some dice and playing a dumbed-down version of D&amp;D. That was the experience that introduced me to the game, and, while I've grown as both a Dungeon Master and a player, I still have one-shot adventures to run with my younger Scouts.</p>
+
+## Mechanics
+It's hard to play a game like Dungeons and Dragons at camp. Camp gets wet, and so do character sheets. Camp gets muddy and dirty, so do miniatures and game mats. Most importantly, younger Scouts aren't always as keen on writing everything down and moving miniatures around as older, more experienced players. What my troop has done for these problems is remove a lot of the complexity surrounding the game. We don't use character sheets. Instead, we have each player pick a race and a class, solely for roleplaying. The DM decides what each class gets at the beginning (for example, a wizard might start off with Magic Missile or Fireball, and a rogue might start off with a crossbow or knife). Dice are rolled in something from a Scout's mess kit, and it's rare to use a die other than a d20.
+
+"No character sheets? High level spells to low level characters? That doesn't sound like D&D at all!" I know, that seems like a really oversimplified version of the game. The point of getting rid of all those extra dice and complications is to make the game more accessible to a younger audience.
+
+## Adventures
+It's usually a good idea to try and find some one-shot adventures with a simple plot. One of the ones I can usually fall back on is "Beneath the Ruins of Firestone Keep" from [DriveThruRPG.](https://www.drivethrurpg.com/product/205741/Beneath-the-Ruins-of-Firestone-Keep--Adventure) I managed to get it on sale, but it's a well-written adventure that you can use to ease new Scouts into the game. An alternative is, as always, to write your own adventure. For this, don't make the plot too complex. It should be fairly simple, especially for young Scouts. Dungeons and other locations should all be able to fit in a small notebook, with minimal notes.
+
+Whether you use a premade module or opt for the homebrew route, all the components of the adventure, like traps and monsters, are defeated or bypassed mostly when the DM feels like it. For traps, I usually pick a DC of around 10 to 15. Monsters are defeated when I feel that the players have expended enough effort to defeat it. This leads to less time spent messing with papers and statblocks and more time spent engaging the Scouts.
+
+## Conclusion
+In general, the goal of introducing Scouts to Dungeons and Dragons should be to ease them in, with minimal complexity. By eliminating character sheets, most dice, and using simple adventures, the game can be made a bit more engaging for them. This can be made into a great activity for the trail too. Take a cup and use it for dice, and play the game like that. That's how I've gotten through a lot of Scout hikes, and it's a good way to keep Scouts entertained.
diff --git a/blog/Summer-Status-Update.md b/blog/Summer-Status-Update.md
new file mode 100644
index 0000000..3f2e243
--- /dev/null
+++ b/blog/Summer-Status-Update.md
@@ -0,0 +1,21 @@
+---
+title: "Summer Status Update"
+date: 2021-08-08
+draft: false
+series:
+ - status
+---
+
+Hello from summer camp! Apologies for the tumbleweeds around here lately, I've been away at a Scout Camp running their archery program for the past seven weeks. Given that there hasn't been much progress over the past few months, I'm going to combine the status updates for June-August into one "Summer Status Update". This was mentioned in the [last status update][laststatus], but I figured it was a good idea to say it again.
+
+I'm writing this from the staff lodge at summer camp as we prepare to take down everything we set up for the summer so we can store it for next season. I haven't had all that much time to write code, so this status update is mostly a placeholder. Things *have*, however, been busy on the personal side of things. In short summary:
+
+- I've graduated high school!
+- I was elected as North America Regional Coordinator for ScoutLink[^1], in charge of recruiting and managing volunteers for the Jamboree on the Internet
+
+I'm excited to start the next chapter of my life at college, where I'll be majoring in Computer Science, more on those changes in a later blog post 😊.
+
+With that, I'm going to close out the summer with a bang and get a good start at college. See you next month!
+
+[laststatus]: https://devosmium.xyz/blog/2021/5/may-status-update/
+[^1]: [ScoutLink](https://scoutlink.net) is a global network of Scouts that runs the official chat and Minecraft server for JOTI every year.
diff --git a/blog/april-status-update.md b/blog/april-status-update.md
new file mode 100644
index 0000000..c045fd1
--- /dev/null
+++ b/blog/april-status-update.md
@@ -0,0 +1,26 @@
+---
+title: "April Status Update"
+date: 2021-04-21
+series:
+ - status
+---
+
+Howdy y'all! Welcome to the April status update! This month, given the weeklong
+break from school, I've been working on expanding my front-end development
+skills. Specifically, I've been working on learning [Flask][flask] as an
+alternative to Django.
+
+This marks 4 months since I started working with Python in earnest with the
+[Campmaster Constantine][cc-project] rewrite. I think it's important for me to
+expand my knowledge beyond backend servers and non-networked desktop apps into
+frontend to really round out my skillset.
+
+In other news, I have the AP Calculus AB exam coming up on 4 May. I've been
+studying a lot and I'm confident that I'll get at least a 3. Higher would be
+preferred, but I also don't want to get my hopes up.
+
+That's all for this month!
+
+
+[flask]: https://flask.palletsprojects.com/en/1.1.x/
+[cc-project]: https://devosmium.xyz/projects/constantine/
diff --git a/blog/august-status-update.md b/blog/august-status-update.md
new file mode 100644
index 0000000..f963ab2
--- /dev/null
+++ b/blog/august-status-update.md
@@ -0,0 +1,57 @@
+---
+title: "August Status Update"
+date: 2020-08-22
+draft: false
+series:
+ - status
+---
+
+August shifted back from a meta month onto a more even balance with development.
+For Hackagotchi, I worked on the new websocket backend to allow for real-time
+updates to player's hacksteads, as well as started maintaining the new chat
+backend, Gotchinet. In other news, I've begun to move the FLL-Scoring codebase
+into a monolithic app.
+<!--more-->
+
+## Hackagotchi
+### Backend
+Cedric[^1] spent a few weeks working on a new Websocket API called "The
+Wormhole". This will allow for our new non-Slack clients to receive real-time
+updates from our central backend, at a significant increase to our current
+client.
+
+Moving to our own backend is essential to eliminating the limitations imposed by
+Slack, including an issue that's been plaguing our players, namely that
+sometimes Hacksteads would fail to display, because of Slack limiting the amount
+of "Blocks" we can send to an app Home.
+
+### Gotchinet
+Part of moving away from Slack is providing our own chat platform. Communication
+is such an integral part of the game, and I want to drive the creation of a
+community around Hackagotchi.
+
+I've created an IRC[^2] network for Hackagotchi, that is planned to be
+integrated directly into the standalone clients. The dev team has already moved
+over to it and we're writing documentation to help our existing playerbase move
+over (something we're expecting to be made easier by the standalone client
+integration). You're welcome to come on and chat on [KiwiIRC][kiwiirc-gotchinet]
+
+## FLL-Scoring
+I've had some time to think since the last time I made a commit to the codebase,
+and in that time I've realized that making this app decentralized doesn't make
+sense like it does for, say, SourceHut, in which each service isn't tied to any
+other except the meta service. In FLL-Scoring, however, each service will be
+tied to another. You can't have a Scoreboard without a Tournament, you can't
+have Teams without Tournaments, etc. As such, I'm going to be continuing
+development of the FLL-Scoring app as a monolithic app.
+
+My goals haven't changed much though, I still want to build a fast and reliable
+app with minimal JavaScript. I still believe that's possible and I will
+continuing working until it's done.
+
+[kiwiirc-gotchinet]:
+https://kiwiirc.com/nextclient/#irc://irc.hackagotch.io:+6697/gotchi
+
+[^1]: Lead developer for Hackagotchi
+[^2]: Internet Relay Chat. Old and venerated text-based communication tech,
+built on an [open standard](https://tools.ietf.org/html/rfc1459).
diff --git a/blog/best-laptop.md b/blog/best-laptop.md
new file mode 100644
index 0000000..99dd34f
--- /dev/null
+++ b/blog/best-laptop.md
@@ -0,0 +1,63 @@
+---
+title: "Best Laptop - Lenovo T430"
+date: 2021-10-11
+draft: false
+---
+
+Some of you may not know this, but my daily driver for the past six years has
+been a refurbished Thinkpad T430 that I bought for $200 when I was in middle
+school. It's lasted through two school changes, countless road trips, and it's
+soldiered through with only minor damage. Today, I want to go over why I
+absolutely love this laptop, and why it's sold me on Thinkpads.
+
+First things first, the design. Like most Thinkpads, the majority of the laptop
+is flat black. The particular T430 that I have still has the older keyboard, so
+it's extremely satisfying to type code or blog posts. The chassis feels very
+sturdy, even though the screen likes to flop down if you shake it too much.
+
+With enough equipment, I can fit three full hard drives in this laptop without
+expanding the chassis. First, there's the standard drive bay behind the left USB
+ports and the mini-DisplayPort. This is held in by one screw[^1], and I've
+upgraded this drive twice while I've owned this laptop. Then, there's a slot for
+an mSATA SSD beneath the RAM inside the chassis. Finally, and this is the most
+wild thing I've ever seen on a laptop, the whole CDROM drive can be removed and
+replaced with a whole number of things - but most importantly, a full 2.5" SSD
+bay can be inserted.
+
+This really cuts to the core of why I love this laptop so much. It's so easy to
+pull it apart and fix or upgrade things. For example, even a laptop as durable
+as this can get damaged after six years of heavy use. First, the screen started
+to show lines down the left. I could work around this with clever tiling and
+resizing windows. Then, the battery wouldn't last longer than half an hour. That
+worked out fine, I just sat next to an outlet all the time. Finally, the battery
+and charger completely stopped working, and I caved and bought an X1 Carbon.
+
+While that laptop was sleek and modern, it lacks the repairability of the T430.
+When I arrived at WPI and started earning money of my own, the first thing I
+bought was a new battery and charger for the T430 off of Amazon for ~$30.
+Swapped out the battery and plugged it in, and everything worked perfectly. The
+screen I held off on for a while, because I wanted to make sure it wasn't just a
+loose connector, but eventually I had to cave and I just ordered a newer LCD
+panel with a better resolution off of eBay. It arrives on Friday, and I'll
+update this post then with the outcome of the screen upgrade.
+
+Try doing an LCD replacement on an X1, or any modern laptop. The laptop itself
+will cost upwards of $1k each, and if anything breaks, you're straight out of
+luck unless you still have a warranty. Every pain point that I've ever encountered
+with this laptop is something that I can fix. When it arrived, it had a 128GB SSD. I
+upgraded that without taking apart the whole chassis. Lenovo has published a
+whole [guide][cruguide] on how to upgrade and replace components, and many of
+them can still be found on eBay for good prices.
+
+
+In short, the Thinkpad T430 is one of if not the best laptop ever made. Even
+though it's seven (7!) years old, it can run any bit of software I throw at it
+(including "modern" games like KSP, and video editing suites), and if anything
+breaks there's enough documentation and materials for me to repair it myself.
+You won't find anything else like that for this price point. A cursory Amazon
+search shows that you can find refurbished T430s for around $300. For a laptop
+that lasts, and you can repair yourself, that's the deal of a lifetime.
+
+[^1]: More on that later
+
+[cruguide]: https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/t430_t430i_hmm_en_0b48304_04.pdf
diff --git a/blog/coming-out.md b/blog/coming-out.md
new file mode 100644
index 0000000..37fc98e
--- /dev/null
+++ b/blog/coming-out.md
@@ -0,0 +1,19 @@
+---
+title: "Coming Out"
+date: 2021-08-14
+draft: false
+series:
+ - me
+---
+
+Howdy y'all, this is going to take a turn towards the very personal, which is something that as you can imagine I'm not very comfortable with. However, this is something that I need to get down. This is being posted simultaneously on my site https://devosmium.xyz, my Facebook[^1], and my Instagram[^1]. Same content, same message. With that out of the way, let's get into the meat of this post.
+
+[^1]: If you have it, you have it.
+
+First things first, the "easy" bit. I don't do well with subtlety, so I'm just going to go ahead and say it. I'm gay. I call this the "easy" bit because compared to the second thing, it's the more widely accepted one.
+
+Second things second, and this is something that I do not take lightly, I am trans. I am a trans woman. My name is Cara, my pronouns are she/her. Over the past seven or eight years I've gradually been able to come to the realization that I am not a cisgender man. I've been thinking and reflecting on my identity during that time, and I'm 99% certain that I've settled. No matter what you think you can do, or what your personal opinion about this is, you won't be able to change my mind.
+
+What I want to ask from all of you is simply for your support and understanding as I begin my social transition. If you don't support this change, it's quite simple to unfollow/unfriend/whatever.
+
+This next paragraph will be different based on which platform it's on. Since you're on my website, I'll give you that version. This site (https://devosmium.xyz) will transition to a redirect to https://devcara.com. The email listed in the sidebar will automatically forward to my new email and all responses will come from there. The content on this site (posts, etc) will be moved over to the new site. Thank you all for reading and understanding.
diff --git a/blog/degoogling-part-one.md b/blog/degoogling-part-one.md
new file mode 100644
index 0000000..94fafea
--- /dev/null
+++ b/blog/degoogling-part-one.md
@@ -0,0 +1,30 @@
+---
+title: "De-Googling Part One"
+date: 2020-05-25
+draft: false
+series:
+ - degoogle
+---
+
+Taking a look at my use of [Google](https://google.com) and their... not-great history of privacy, I've been spending my spare time over the past few years working on, if it's not possible to *completely* get off their platform, then at least minimize my use of it. <!--more-->Frankly, I think I've been fairly successful. So far I've migrated my email from Gmail to [Migadu](https://migadu.com), and I've been working more and more on using services like [Disroot's](https://disroot.org) Nextcloud instance instead of Google Drive. [DuckDuckGo](https://duckduckgo.com) has been my default search engine for the past year. Those were really the only two Google services I used.
+
+## Why?
+The answer to this question can be either simple or complicated depending on who you ask. To me, Google has grown far too big to be truly concerned about data privacy, and their near-monopoly makes me deeply uneasy. I would much rather that my data be held in a place where I can have a certain level of trust that they won't sell my data or lock me into a walled garden.
+
+## How?
+This is what I'm going to try and answer over the next few posts on this subject. This post is going to outline my goals and reasoning behind this, and the next few will go into how I did it.
+
+There are a few major services that I use(d) Google for. They are, in no particular order:
+- Mail
+- Drive
+- Calendar
+- Website Analytics
+- Contacts
+- Photo Storage
+
+Some of these I've already replaced with other services. For example, as I mentioned before, Mail and Drive have been replaced with Migadu and NextCloud, respectively. Some will be more difficult, however. Photo Storage needs a lot of disk space, and Contacts needs to be able to be synced with my mail clients easily. I'm not sure exactly how much effort all this will take, but I'll get there.
+
+As to what I'm going to be replacing them with, that varies based on the service.
+
+### Overall Requirements
+I would much prefer that my data be self-hosted. That may not always be possible, especially for things like Drive and Photos that I fill up quickly with files. For things like Contacts, Mail, and Analytics, there are open-source alternatives that I can host myself. For my next post, I'll focus on my migration from Gmail to Migadu, and what I can potentially do to move from Migadu to a self-hosted email service.
diff --git a/blog/draft/hello-world.md b/blog/draft/hello-world.md
new file mode 100644
index 0000000..3c8e296
--- /dev/null
+++ b/blog/draft/hello-world.md
@@ -0,0 +1,40 @@
+---
+title: Hello World
+layout: false
+draft: true
+---
+Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).
+
+## Quick Start
+
+### Create a new post
+
+``` bash
+$ hexo new "My New Post"
+```
+
+More info: [Writing](https://hexo.io/docs/writing.html)
+
+### Run server
+
+``` bash
+$ hexo server
+```
+
+More info: [Server](https://hexo.io/docs/server.html)
+
+### Generate static files
+
+``` bash
+$ hexo generate
+```
+
+More info: [Generating](https://hexo.io/docs/generating.html)
+
+### Deploy to remote sites
+
+``` bash
+$ hexo deploy
+```
+
+More info: [Deployment](https://hexo.io/docs/one-command-deployment.html)
diff --git a/blog/february-status-update.md b/blog/february-status-update.md
new file mode 100644
index 0000000..16d1322
--- /dev/null
+++ b/blog/february-status-update.md
@@ -0,0 +1,16 @@
+---
+title: "February Status Update"
+date: 2021-02-26
+series:
+ - status
+---
+
+Welcome back to another status update! As I write this, temperatures in Massachusetts are rising for the first time in a while, and it's just beginning to feel like spring. Given that Februrary is a shorter month, and that I've had less time to myself between school and work, I haven't had much time for my projects this month. However, I've still been working on *some* things!
+
+## FLL-Scoring
+This month, not many new things happened. I did some pen-and-paper reworking of my design for the leaderboard, but I'm still running into issues with the scores not displaying. I also still need to figure out how best to score the matches. Right now, I've got a utility function that takes in a `MatchScore` object and runs through it to determine the score. I think this might be the best option, but I want to explore others before I commit.
+
+## Hakkard
+Hakkard made its return this month, as I explored new ways of structuring the code. You can see my current working thoughts [here](https://git.sr.ht/~muirrum/hakkardrs). I'm working with a friend on potentially implementing state machines to manage the login and game flow, as opposed to nested loops.
+
+That's it for this month, hopefully March lends itself to giving me more time for side projects.
diff --git a/blog/get-a-radio-license.md b/blog/get-a-radio-license.md
new file mode 100644
index 0000000..b8c4524
--- /dev/null
+++ b/blog/get-a-radio-license.md
@@ -0,0 +1,47 @@
+---
+title: "You Should Get a Radio License"
+date: 2021-03-25
+series:
+ - radio
+---
+
+Some of you may know this and some of you may not, but I'm an active amateur radio operator. I earned my Technician[^1] license in February 2019, and upgraded to General[^2] in October 2020. Getting "on the air", as it's called, opened my eyes to not only a world of technical fun, but also community service and worldwide fellowship, two things that I hold dear.
+
+I came across a [WIRED][wiredarticle] article today about how amateur radio is part of a California couple's disaster preparations, and it got me thinking. Here on the East Coast, we may not deal with *fires*, but we still have our fair share of disasters and other public emergencies. A few years ago, we had Hurricane Sandy. In 2008, we had an ice storm that crippled the power grid. Being able to communicate without relying on the traditional infrastructure could become even more essential as climate change increases the power of storms. Even a "standard" nor'easter can knock out power and internet for a few hours or days.
+
+In this series, I'm going to talk about what amateur radio is, how it can help you in an emergency, and how you can get involved.
+
+## What is Amateur Radio anyways?
+Amateur radio has many definitions depending on who you ask. In general though, it's non-professional radio operators coming together to learn, grow, and prepare. The FCC has three stated goals for the Amateur service:
+1. Developing radio science and the art of communication
+2. Public Service
+3. International goodwill
+
+Those three goals are pretty broad, so let's break them down.
+
+### Developing Radio Science and the Art of Communication
+This one is definitely important to me. I love tinkering and experimenting, and amateur radio operators have always been at the forefront of scientific innovation. The WPI Wireless Association ([WPIWA][wpiwa]) was the first collegiate radio club in the US. It took part in the first trans-atlantic radio communications. Radio amateurs have developed systems to accurately report positions[^3], send email[^4], and measure long distance propagation[^5] [^6], all using radio.
+
+### Public Service
+One of the most recognizable services of amateur radio, public service is a big part of being a "Ham". We provide all communications support for the [Boston Marathon][baaham], for example. There are also organizations, like ARES[^7] and RACES[^8] that officially support emergency response and local authorities. Many local radio clubs provide their services to more local events as well, including to the Scouts for Jamboree on the Air.
+
+### International Goodwill
+This one is a bit trickier to define, because it's so broad. What does "goodwill" mean? To many amateurs, it means getting on the higher frequencies and "ragchewing" or just chatting with other amateurs from around the world. With a properly tuned antenna and favorable atmospheric conditions, your 100W radio can go all over the world. All it takes is a couple calls of "CQ CQ CQ"[^9], and more likely than not you'll get someone to respond.
+
+## Conclusion
+This post got into what amateur radio actually is. The next one will cover how it can be helpful in an emergency or how you can get involved as a fun hobby. After that, I'll take a look at the current US licensing system and how you can get your Technician license.
+
+
+[wiredarticle]: https://www.wired.com/story/amateur-radio-disaster-preparedness/
+[wpiwa]: https://wpiwa.wpi.edu
+[baaham]: https://www.baa.org/races/boston-marathon/volunteer/volunteer-descriptions/amateur
+
+[^1]: Technician is the entry-level license
+[^2]: General is the next step up, and gives access to the worldwide frequencies. If all you want is emergency communications, then Technician is fine
+[^3]: This is done with [APRS](https://en.wikipedia.org/wiki/Automatic_Packet_Reporting_System), which can actually do a lot more than just report position
+[^4]: This is done through a protocol called [WinLink](https://en.wikipedia.org/wiki/Winlink)
+[^5]: *Propagation* is the way that radio waves bounce off of the Earth's atmosphere and spread throughout the world. Different frequencies propagate differently.
+[^6]: [WSPR](https://en.wikipedia.org/wiki/WSPR_(amateur_radio_software))
+[^7]: Amateur Radio Emergency Service
+[^8]: Radio Amateur Civil Emergency Service
+[^9]: "CQ CQ CQ" is the standard way of asking for a contact on the HF (High Frequency) bands
diff --git a/blog/how-to-plan-an-event.md b/blog/how-to-plan-an-event.md
new file mode 100644
index 0000000..bc22b9f
--- /dev/null
+++ b/blog/how-to-plan-an-event.md
@@ -0,0 +1,104 @@
+---
+title: "How to Plan a Successful Event"
+date: 2021-12-10
+draft: true
+---
+
+Note: This is not meant to serve as a definitive "how to plan" guide. This is
+tips that I have collected on both sides of event planning - that of an event
+team member, and that as a service provider and volunteer.
+
+Over the past few years, I've had the opportunity to plan and service quite a
+few events, including large multi-day events for a multitude of organizations.
+Most recently, that took the form of the 2021 WAVE[^1] VEX Robotics Signature Event.
+For that event, I was a sound crew chief for LNL[^2]. Since arriving at WPI, I
+have also been a crew chief for several events totalling hundreds of hours of
+work, not including preparation.
+
+In November 2019, I also had the chance to plan a FIRST Lego League qualifying
+event. As a member of the event core team for that tournament, I was in charge
+of the technical production including scoring and A/V. Here are some steps to
+take as you go through thinking about your event and how you interact with your
+service providers.
+
+## TL;DR
+Write down *everything*. Even if you think it's not important. Make sure that
+more people than you have access to it. Give as much detail as you can to your
+service providers.
+
+## First Steps: Pre-planning (T-3 months)
+The absolute first thing you should do is write down what your event will be at
+a top level, something like "Winter Formal". Then, write down *why*. This
+doesn't have to be anything complicated or more than a few sentences, but even
+saying "to give students a celebration before finals and relieve stress" goes a
+long way. This will set the tone and mood for your event, so it's okay to take a
+little bit to get it right.
+
+## Next: Planning and Preparation (T-2 to 1 month)
+The second step you should take is to start deciding on some specifics. Pick a
+venue and a date if you can. If you're waiting on a date, you can start to look
+at venues, but don't let yourself get too set on one in case your date doesn't
+work with it. As soon as you have a date and a venue, put in a reservation. Make
+sure you tell the person making your reservation everything they ask. If you
+don't know, make sure they know that you'll be changing your answer later on.
+
+Pick one or two people to serve as the point(s) of contact with the reservation
+manager and any service providers. Make sure that all communication flows
+through them. I can't tell you how many times I've receive conflicting
+information because the planning team all emailed different documents. It's so
+much easier to just have one or two people giving the same information.
+
+Then, nail down what's going to happen at the event. You've got your theme, what
+would go well with it? For each part, figure out:
+- Why it's being included
+- If it needs any special materials or equipment
+ - If it does, who will be providing it?
+- Who will be in charge of making sure it happens
+
+Try not to overload yourself or your team with too many separate parts. Try to
+keep the total number of components to around 2 per planning team member. Any
+more and you might get burned out teammates.
+
+Your event should have a way for all volunteers to see the status of tasks
+across the whole event and filter to certain parts. As tasks are completed, the
+task owner should update the status and close it out. You can use a Trello
+board, a spreadsheet, or anything else that might help you keep track of
+everything.
+
+This is the proper time to reach out to any service providers you may need. If
+you need lighting or sound, figure out a good company or other organization that
+will be able to provide those for you. If your venue needs a custodial fee or
+contract, make sure that's budgeted for.
+
+## Almost done! Final plans and promotion (T-1 month to 2 weeks)
+By this time, you should be starting your promotion of the event. Make a poster
+and put it up everywhere you can. Try and get your event onto weekly event
+emails. Get people to know about your event well enough in advance that they can
+generally avoid conflicts.
+
+At this point (generally about 2 weeks before the event starts) be sure to
+confirm with your service providers that they know about and are willing to take
+care of your event. Run checkins with your teammates about their components and
+ensure that everything's going according to schedule. Get a list of materials
+from them for each component and purchase those. Double-check the task list and
+make sure you haven't forgotten anything.
+
+## Run the event (T-0)
+Weeks and months of planning have hopefully turned into an actual event for you
+and your participants to enjoy. If you don't have a job during the event itself,
+sit back and let the people who do have a job work. Make sure to be on-call for
+any issues, especially if you're in charge of an important component.
+
+During the event, keep a running log of issues and successes. Anything that goes
+wrong or really well should be noted down for the next step.
+
+## Aftermath & Post-Mortem (T+3 days)
+No more than 3 days after the end of your event, when the dust has settled a
+little bit, gather your planning team again. Go through your lists of roses
+(successes) first, and then your thorns (challenges) second. Compile all of them
+into a post-mortem and share it with the entire team. Keep it around, so that
+future teams can have a reference.
+
+[^1]: WPI Annual VEX Event
+[^2]: Lens and Lights - a WPI club providing lighting, sound, and projection
+services to the WPI community
diff --git a/blog/installing-sourcehut.md b/blog/installing-sourcehut.md
new file mode 100644
index 0000000..e95a995
--- /dev/null
+++ b/blog/installing-sourcehut.md
@@ -0,0 +1,61 @@
+---
+title: "Installing Sourcehut"
+date: 2020-08-27
+draft: true
+---
+
+A few months back, at the beginning of quarantine, I installed a self-hosted
+version of [SourceHut](https://sourcehut.org) for my git repos. In the end, I
+only actually set up and used the following services:
+
+- meta.sr.ht
+- git.sr.ht
+- todo.sr.ht
+- man.sr.ht
+- paste.sr.ht
+- dispatch.sr.ht
+
+I did not end up setting up lists.sr.ht or builds.sr.ht, either because I wasn't
+confident enough to do so (lists) or I didn't have the resources or knowledge
+(builds). Now, I figured that I have learned more and want to give it another
+crack. This post will go over the methods I use to install Sourcehut on my local
+machine and any pitfalls I encounter.
+
+The laptop that I used for this is a Thinkpad T430 running Arch Linux.
+
+## Packages
+Sourcehut upstream provides installable [packages](https://man.sr.ht/packages)
+for Alpine, Arch, and Debian. The Arch Linux mirror is at
+[https://mirror.sr.ht/archlinux/sr.ht](https://mirror.sr.ht/archlinux/sr.ht). To
+use the repository with Pacman, I had to add the following snippet to
+`/etc/pacman.conf`.
+
+```
+[sr.ht]
+Server = https://mirror.sr.ht/archlinux/sr.ht
+```
+
+I also had to import the signing key, which took a little while, because I had
+to configure Pacman to use a different keyserver since the MIT one wasn't
+responding. To receive the keys, I had to run the following commands
+```
+# Get the key
+sudo pacman-key --recv-keys C0AAFC1676BD998617C94C42DC59670F1EB0A189
+# Sign the key
+sudo pacman-key --lsign-key C0AAFC1676BD998617C94C42DC59670F1EB0A189
+```
+This made installing all the Sourcehut packages a lot easier than building from
+source, which I tried to do my first time around.
+
+## meta.sr.ht
+Since I had the package repository set up properly, all I had to do was `yay -S
+meta.sr.ht`, and both meta.sr.ht and the dependencies were downloaded. One
+dependency, `python-psycopg2` is marked as an optional dependency, but is
+required.
+
+### Configuration
+Each sr.ht service maintains a `config.example.ini` file in its' git repository.
+For meta.sr.ht, that file is
+[here](https://git.sr.ht/~sircmpwn/meta.sr.ht/tree/master/config.example.ini)
+
+
diff --git a/blog/july-status-update.md b/blog/july-status-update.md
new file mode 100644
index 0000000..58ff19d
--- /dev/null
+++ b/blog/july-status-update.md
@@ -0,0 +1,20 @@
+---
+title: "July Status Update"
+date: 2020-07-22
+series:
+ - status
+draft: false
+---
+
+This month is less heavy on the development side and goes more into what I've done to my servers. I didn't get the chance to do as much software as I would've liked, though the coding I _did_ do was fun and a learning experience.
+<!--more-->
+
+## Hackagotchi
+First things first, I've joined the dev team for [Hackagotchi][1], which is a multiplayer farming game that's currently played over Slack. Part of my job includes fixing up their practices including eliminating code from the production server in favor of automated binary deployment. I'm also working on writing a common backend for the game so we can release a standalone client.
+
+## Server Stuff
+This month I've also added monitoring via Collectd, InfluxDB, and Grafana with automated alerts going to a private discord channel. This has let me see that my servers are just a _little_ bit overloaded, which I shouldn't be too surprised by. After all, they're all running multiple things and several CPU-intensive services.
+
+Today, I set up a hosted static status page at https://status.devosmium.xyz. I plan on using this to announce maintenance or outages on all of my services, so I can have a log of what went down when and how I fixed it.
+
+[1]: https://hackagotch.io
diff --git a/blog/june-status-update.md b/blog/june-status-update.md
new file mode 100644
index 0000000..157b96d
--- /dev/null
+++ b/blog/june-status-update.md
@@ -0,0 +1,24 @@
+---
+title: "Status Update: June 2020"
+date: 2020-06-22
+series:
+ - status
+draft: false
+---
+
+In the second month of status updates I'm going to announce my project for the summertime, and give an update on how I've been dealing with COVID.
+<!--more-->
+
+## Summer Project
+In both the 2018 and 2019 season, I was a volunteer at events as part of the FIRST Lego League, where I served as scorekeeper. The "official" software for scorekeeping is provided by [FLL-Tools][fll-tools], and is implemented in Electron and Node.JS. It only runs on Windows, it's slow, and it's full of bloat. My project for this summer is to implement an FLL tournament management system that follows the UNIX philosophy, in that it's composed of multiple microservice that each does one thing well. My language of choice for this project is Rust, with a MongoDB backend. I'm taking my inspiration for the design and architecture of this from [Sourcehut][srht], in that my goal is to do this with as little JavaScript as possible.
+
+You can find the hub for this project at https://sr.ht/~muirrum/FLL-Scoring
+
+## Coronavirus
+Now that school is officially out for the summer, I have significantly more time to work and relax. I've been getting into new shows, notably Netflix's Disenchantment, and British shows like Friday Night Dinner. I've also been playing around in the Elder Scrolls Online's new chapter, Greymoor. In short, I've been coping well and have still been enjoying myself. I hope all of you are doing well and are staying safe.
+
+## docs.devosmium.xyz
+I've set up documentation for my non-crates.io crates at https://docs.devosmium.xyz/\<crate_name\>. This gets automatically deployed to when I push a new commit of one of these crates to Sourcehut. I plan on adding more than just Crate documentation though, my hope is that this will one day serve as a wiki domain for my projects.
+
+[fll-tools]: https://fll-tools.com
+[srht]: https://sourcehut.org
diff --git a/blog/march-status-update.md b/blog/march-status-update.md
new file mode 100644
index 0000000..764c6f6
--- /dev/null
+++ b/blog/march-status-update.md
@@ -0,0 +1,19 @@
+---
+title: "March Status Update"
+date: 2021-03-25
+draft: false
+series:
+ - status
+---
+
+Welcome back to this month's status update! I'm writing this at my desk as the first rain of spring falls here in Massachusetts. I've been working on quite a few things this month.
+
+First and foremost, I'm testing out a new system of organization where I write down all my tasks for the day the night before and check them off as I go through. I had originally done this with a hard-and-fast schedule, but I quickly realized that that was *not* the right way to go for me. I think it's been working out well, but I still need reminders from Thunderbird to get on them.
+
+Also this month, I've rewritten Hakkard-RS to use a more effective MPSC design that makes the code a lot cleaner and easier to read than it was before. I'm also scaffolding the code that allows me to add new verbs[^1] and rooms.
+
+For scouting, this month I accepted a position at Treasure Valley Scout Reservation as the Archery Director. I'll be up there this summer and I'll be teaching Radio merit badge as well as Archery. If any hams are reading this and would like to get on the air to help Scouts earn their badge, send me an email.
+
+That's it for this month, in April I want to do more work on Hakkard and writing my lesson plans for this summer. I also want to keep working on and refining my time management before college this fall.
+
+[^1]: Verbs are, as the name implies, the *action* of a command. Everything else is a noun that can be processed.
diff --git a/blog/may-status-update.md b/blog/may-status-update.md
new file mode 100644
index 0000000..f57eb88
--- /dev/null
+++ b/blog/may-status-update.md
@@ -0,0 +1,16 @@
+---
+title: "May Status Update"
+date: 2021-05-28
+draft: false
+series:
+ - status
+---
+
+Welcome back to the status updates! This month has been light on the software engineering side of things. Most of my time has been spent preparing for the big life change that is college, and finalizing things at my school. I graduate next week, and then it's off to summer camp for seven weeks.
+
+## Campmaster Constantine
+I've re-added Question of the Day suggestions, you can use these after you set the `suggest_channel` server setting. In a break from the old bot code, QOTD suggestions no longer cost points.
+
+Listing questions with the `qotd list` command will also now only list questions that have *not* been asked. This should make it easier to see what's coming up! You can still access the full list with `qotd listall`.
+
+That's really all that happened this month. June and July might not have status updates because all of my time is going to be spent at summer camp teaching archery and radio. Until August, then!
diff --git a/blog/my-covid-experience.md b/blog/my-covid-experience.md
new file mode 100644
index 0000000..5c3a472
--- /dev/null
+++ b/blog/my-covid-experience.md
@@ -0,0 +1,57 @@
+---
+title: "My COVID Experience"
+date: 2020-06-08
+categories:
+ - personal
+series:
+ - me
+ - reflection
+draft: false
+---
+
+Since March, my state has been locked down almost completely, and we're just now starting to reopen. My experience of the Coronavirus is probably different from most people, and given that the lockdown is getting *slightly* less strict, it's a good idea in my eyes to reflect on what's happened and how I've coped with the quarantine.
+<!--more-->
+
+## What I kept doing
+Given that a lot of my work is already based at home/online, I was able to keep doing a lot of my software work. I was also able to finish all my paperwork and merit badges for Eagle[^1]. Even though I won't be able to have a Court of Honor until the Fall at the earliest, it's still a big accomplishment. I also kept up my exercising habit that I started last year when I was working on [Personal Fitness][2] merit badge.
+
+[2]: http://www.usscouts.org/mb/mb010.asp
+[^1]: My paperwork hasn't been processed yet, but I'm officially an Eagle Scout to my Council.
+
+## What I started doing.
+During this quarantine I took the time to start new projects and learn new skills. One of the most significant of which is my newfound love of [Rust][3]. This was my third time trying to learn the language, but somehow this time it just *clicked* and I started getting really productive. I hammered out a lot of the work on Campmaster Constantine in a few days[^2]. This project managed to accomplish what [Kronos][5] could not, which was a persistent strike database. It also incorporated Question of the Day management and a points system.
+
+I also started using [Sourcehut][1] to host my projects. This is purely anecdotal, but since then I've had a massive boost in productivity with regards to my software work. The CI ([builds.sr.ht][4]) works well and is so incredibly fast. Oftentimes, when I go to check on my build job after submitting a new commit to this website, by the time I've loaded up the build page it's already done. See my repositories [here][6].
+
+In non-software stuff, I've gotten into art. I started with pencil sketches, and the other day did my first piece with [digital coloring][7].
+
+[1]: https://sourcehut.org
+[3]: https://rust-lang.org
+[4]: https://builds.sr.ht
+[5]: https://github.com/Muirrum/Kronos-Base
+[6]: https://git.sr.ht/~muirrum/
+[7]: https://pixelfed.social/p/muirrum/175615672540336128
+
+[^2]: This is a purely subjective analysis based on the [commit log](https://git.sr.ht/~muirrum/campmasterconstantine/log). You're welcome to draw your own conclusions from that log too!
+
+## What Else has Happened
+I've turned down the opportunity to be employed by Camp Wanocksett this year[^3]. I'm sure they're capable of keeping me and other campers safe, but I'm not ready to risk my health. Ordinarily I'd be all over working at my favorite place, but my health has to come first.
+
+I've also started a few Discord servers around a few interests, often with my best friend. Not all of them were *directly* started by us but I/we still had a hand in the early days of the server.
+
+- [Camp Quarantine][8]
+- [Bow and Aros][9]
+- [Feral Forest][10]
+- [The Lost Cause Hotel][11]
+
+[8]: https://discord.gg/MZ5gbBC
+[9]: https://discord.gg/Tq5SqMs
+[10]: https://discord.gg/FJ72bcj
+[11]: https://discord.gg/NpMNe85
+[^3]: I was originally hired on the Shooting Sports staff.
+
+## Current Events
+This is a kinda stressful topic, so I'm not going to spend too much time on this. I stand with the protesters and people exercising their rights under the First Amendment. I am fervently opposed to police brutality and militarization, as well as an invocation of the Insurrection Acts of 1807. The rampant institutional racism present in our system of government can only be removed by the action of the masses.
+
+## Final Thoughts
+I miss when I could go hiking with my scout group. I miss when I could go to school every day and see friends and learn. I miss being able to *do* stuff with my friends. However, the only way to stop the Coronavirus is for all of us to do our parts, practicing social distancing and proper precautions. Hopefully by the Fall we can get back to some semblance of normalcy, but until then I'm taking things as they come.
diff --git a/blog/new-site.md b/blog/new-site.md
new file mode 100644
index 0000000..4078a9e
--- /dev/null
+++ b/blog/new-site.md
@@ -0,0 +1,9 @@
+---
+title: "New Site"
+date: 2021-02-21
+draft: false
+---
+
+This starts the newest version of my site, this time with a brand new domain! I bought this one because the old one was based on my deadname, and I wanted a domain that I could take with me. As a bonus, .xyz domains are blocked by my university, so I had an additional reason to change.
+
+Now I'm here with a fancy .com domain for at least the next two years. On this blog especially I'm going to be writing about my experiences in the queer tech community, specifically as a software developer and sysadmin.
diff --git a/blog/offline-email.md b/blog/offline-email.md
new file mode 100644
index 0000000..495bc9b
--- /dev/null
+++ b/blog/offline-email.md
@@ -0,0 +1,55 @@
+---
+title: "Offline Email"
+date: 2021-10-02
+draft: false
+---
+
+First things first, I want to apologize for missing last month's status update.
+The transition from high school and the summer break to the new rigor of college
+has hit me and I still need time to adjust. I'll definitely be writing a status
+update for October though!
+
+Onto the post: Recently I came upon an older
+[post](https://drewdevault.com/2021/05/17/aerc-with-mbsync-postfix.html) by Drew
+Devault about how he uses mbsync and postfix for offline email, and I was
+inspired to recreate it myself. My college will sometimes refuse to allow my old
+T430 to connect to the WiFi, leaving me unable to respond to emails until I can
+get back online. Plus, it seems like a really cool thing to do!
+
+I deviated a little from Drew's post, specifically in the software that I used.
+I ran into issues using postfix as my MTA, which I'll detail further on. I also
+decided against using aerc as my MUA, because I've had consistent performance
+issues with it and it still sometimes crashes when I change folders. My final
+software list is:
+
+- mbsync/isync: Syncing IMAP to a Maildir on my laptop
+- neomutt: Mail Client
+- msmtp: sending email
+
+The first thing I attempted was setting up mbsync/isync to grab new messages
+from my IMAP account at Migadu. This was fairly easy using Drew's post and the
+Arch Wiki page as guides. My final `.mbsyncrc` can be found
+[here](https://git.sr.ht/~muirrum/dotfiles/tree/master/.mbsyncrc). Then, I set
+it up to sync every minute with a simple crontab:
+```
+* * * * * chronic mbsync -a
+```
+
+Next came neomutt, which I use to read and manipulate mail. This took some
+finicky configuration, because I had to get it to read the right directory.
+Specifically, it kept adding a second `/` to the end of my folder, which turned
+out to be my fault adding a `/` to the end of my `set spoolfile=+` line in
+.muttrc. You can see my final configuration file
+[here](https://git.sr.ht/~muirrum/dotfiles/tree/master/.muttrc). I had some
+issues where neomutt would use my linux username instead of my configured email
+address as part of my `From` header, which I fixed by adding the following line
+to my muttrc:
+```
+my_hdr From: Cara Salter <cara@devcara.com>
+```
+
+Finally, msmtp. I decided on msmtp against postfix because postfix kept erasing
+my `From` header and sending an empty sender to Migadu. Msmtp "Just Worked", so
+I went with that. It's possible I might try postfix again soon, especially since
+I want to learn how it works, and when I do I'll be sure to write it up for this
+blog.
diff --git a/blog/on-deadnames-and-git.md b/blog/on-deadnames-and-git.md
new file mode 100644
index 0000000..f6f13c7
--- /dev/null
+++ b/blog/on-deadnames-and-git.md
@@ -0,0 +1,63 @@
+---
+title: "On Deadnames and Git"
+date: 2021-03-09
+draft: false
+series:
+ - coming-out
+---
+
+Coming out is a hard thing no matter what form it takes. People who have known you for years or decades now need to reconcile the true you with the you that they've known for so long. This is hard enough for sexual orientations, but throw in new pronouns or a new name and the whole experience gets so much harder. There's inevitably going to be stumbling blocks, either accidental or intentional, and part of coming out is learning to deal with these.
+
+As a software engineer, I've been working with Git for many years[^1]. In that time, a lot of stuff has changed. I've gone through three usernames (Oatmas64134->Otmas->Dev-Osmium->Muirrum), several emails, and quite a few organizations. One thing that's been constant, however, has been the output of `git config user.name`. For more than six years now, that command has spat out my birth name. Up until recently, that was perfectly fine, but then I changed my name, and I started trying to scrub my deadname from as many places as I could.
+
+Git by nature keeps a record of who made what change and when. These changelogs can be viewed by anyone who has the repository. While they _can_ be changed, it's usually considered bad form to change the history of a public repository. And on top of that, several organizations that I am not and will not be out to have my GitHub and see it regularly. I've been looking for a way to update my name across all git commits that I've made, but only in certain repositories.
+
+This was an interesting problem. A few searches later and I came across [this][gittower] page on how to edit committer names. Scrolling down led me to this `git filter-branch` script
+```
+$ git filter-branch --env-filter '
+WRONG_EMAIL="wrong@example.com"
+NEW_NAME="New Name Value"
+NEW_EMAIL="correct@example.com"
+
+if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
+then
+ export GIT_COMMITTER_NAME="$NEW_NAME"
+ export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
+fi
+if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
+then
+ export GIT_AUTHOR_NAME="$NEW_NAME"
+ export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
+fi
+' --tag-name-filter cat -- --branches --tags
+```
+
+This seems like a fairly simple script, and a review of the docs for `git-filter-branch` confirms this. What it _also_ mentions, in a nice big "WARNING" paragraph at the top, is this:
+```
+ git filter-branch has a plethora of pitfalls that can produce
+ non-obvious manglings of the intended history rewrite (and can leave
+ you with little time to investigate such problems since it has such
+ abysmal performance). These safety and performance issues cannot be
+ backward compatibly fixed and as such, its use is not recommended.
+ Please use an alternative history filtering tool such as git
+ filter-repo[1]. If you still need to use git filter-branch, please
+ carefully read the section called "SAFETY" (and the section called
+ "PERFORMANCE") to learn about the land mines of filter-branch, and then
+ vigilantly avoid as many of the hazards listed there as reasonably
+ possible.
+```
+
+Well then. More searching led to [this][gitfilterrepo] repo for `git filter-repo`. I spent some time looking through the docs, and came across the `--name-callback` and `--email-callback` arguments. These take in python code and expect a return value. I threw together this oneliner to replace any instances of my deadname with my real name:
+
+```
+git filter-repo --name-callback 'return name.replace(b"$deadname", b"Cara")' \
+ --email-callback 'return email.replace(b"$deadname", "cara")' \
+ --message-callback 'return message.replace(b"$deadname", b"Cara")'
+```
+
+This worked perfectly, and I am now able to update my name across all repos I want to.
+
+[gittower]: https://www.git-tower.com/learn/git/faq/change-author-name-email/
+[gitfilterrepo]: https://github.com/newren/git-filter-repo
+
+[^1]: I made my first GitHub repository in 2014 as Oatmas64134
diff --git a/blog/postfix-on-debian.md b/blog/postfix-on-debian.md
new file mode 100644
index 0000000..0fd51f1
--- /dev/null
+++ b/blog/postfix-on-debian.md
@@ -0,0 +1,14 @@
+---
+title: "Postfix on Debian"
+date: 2021-11-20
+draft: true
+---
+
+Hi y'all! A while back, I wrote a [post][offlineemail] detailing my offline
+email setup, based on another post by Drew DeVault. In that post, I mentioned
+that I wanted to learn how to use Postfix as a send-only MTA, and today I
+finally cracked it. It took a combination of a full reinstall, and several idiot
+checks to get to the point where I was able to programmatically send email from
+my cronjobs.
+
+
diff --git a/blog/preparing-to-come-out.md b/blog/preparing-to-come-out.md
new file mode 100644
index 0000000..9c4af42
--- /dev/null
+++ b/blog/preparing-to-come-out.md
@@ -0,0 +1,22 @@
+---
+title: "Preparing to Come Out"
+date: 2021-04-26
+series:
+ - coming-out
+---
+
+I've written about changing your deadname with Git [before](/blog/2021/3/on-deadnames-and-git), but I haven't written about how to _come out_ to other people. I'm getting ready to go to college in the fall, so I'm continuing this series as I go through the steps to come out not just to my family, but to my college and friends.
+
+## The Plan
+No matter what, you should have a plan to come out. Just rushing into it will rarely go well in my experience. You need to make sure of the following:
+
+1. You will be safe if anything goes wrong
+2. You have a backup plan
+3. You know how you're going to tell them
+
+The first two are kind of related, so I'll be talking about them together. You need to be sure that whatever happens, you'll be able to have a roof over your head and a way to get food and water. This is obviously a worst-case scenario, but given the insane number of stories of gay and trans kids being kicked out of their homes after coming out, it's a fair thing to prepare for.
+
+The third one is important too. If you don't know how you're going to tell whoever it is you're coming out to, your coming out is going to be disjointed and you might not get your point across. Whether it's a note left on a desk, a post on $social_network, or a heartfelt conversation, you need to be prepared for how you're going to tell the person.
+
+
+I'll get more into executing the plan in a later post. I hope this one helped, though!
diff --git a/blog/september-update.md b/blog/september-update.md
new file mode 100644
index 0000000..3e319e8
--- /dev/null
+++ b/blog/september-update.md
@@ -0,0 +1,17 @@
+---
+title: "September Status Update"
+date: 2020-09-18
+draft: false
+series:
+ - status
+---
+
+September brings with it cooler weather and decreased time, now that school has
+started again. I'm going to be shifting more and more time to my schoolwork and
+away from my side projects, especially because this is my senior year. With that
+said, I'm prioritizing FLL-Scoring, because I want to get that done for the next
+season.
+
+## FLL-Scoring
+I'm rewriting this to take advantage of the new monolithic app and to get issues
+ready for Hacktoberfest next month. Other than that, not much is going on.
diff --git a/blog/spotifyd.md b/blog/spotifyd.md
new file mode 100644
index 0000000..56a46b8
--- /dev/null
+++ b/blog/spotifyd.md
@@ -0,0 +1,73 @@
+---
+title: "Spotify on Linux"
+date: 2020-07-09
+draft: false
+---
+
+I've been trying to use command-line tools more often recently, and that
+includes my music software. For a long time, I was using the official Spotify
+client for linux, with an AUR package [here][spotaur]. This was fine for
+a while, but I really wanted to be able to use it on the commandline. This post
+is documentation on where I went with this.
+<!--more-->
+
+## Beginnings
+I started by doing a search for "spotify tui". This led me to a number of
+options, but the only standalone one I could find was [`ncspot`][ncspot], a TUI
+written in Rust. I used `cargo install` to build and compile ncspot, and was
+presented with a screen allowing me to enter my username and password.
+
+Following that, I was shown to the main screen, which looks like this:
+
+![ncspot main page](https://files.devosmium.xyz/s/232qlo6g.png)
+
+I could use the arrow keys or `hjkl` to navigate the tabs and songs, and `F1`,
+`F2`, and `F3` to navigate the different contexts[^1]. The keybindings were
+a bit confusing (`Shift-p` to toggle playback, and `>`/`<` to skip songs).
+
+This is what the album view looked like:
+![ncspot album view](https://files.devosmium.xyz/s/lwufwnj0.png)
+
+This worked well for me, for a little while. Eventually I got tired of not being
+able to control it from my phone or control other devices from my laptop.
+
+## Enter Spotifyd
+For those who don't know, Spotifyd is an open source spotify client that runs as
+a system service. Its major benefit to me is the ability to use Spotify Connect
+to control or be controlled by other devices like my phone. Spotifyd is part of
+the AUR for different audio backends, so the install was a simple `yay -S
+spotifyd-pulseaudio`.
+
+Following the documentation at the project's [github][spotifyd-github], I filled
+out a configuration file, which is tracked in my [dotfiles][dotfiles-spotd]
+repository. My password is tracked by [`pass`][pass], so I can put that command
+in the configuration file without worrying about my password getting leaked into
+git. There's also a systemd service, that I placed in my `.config/systemd`
+folder to run as a user service.
+
+With `spotifyd` enabled and running, I found a frontend in
+[`spotify-tui`][spotifytui], another TUI written in Rust. I followed the README
+directions and created my OAuth application. With my Client ID/Secret in hand,
+I managed to authenticate with the Spotify API and could select devices.
+
+One of the advantages of spotifytui over ncspot at least is that it supports
+Spotify Connect, so that I can control both the `spotifyd` service running on my
+laptop and any other clients running on my network, including my phone.
+
+The main layout of `spotify-tui` looks like this:
+![spotify-tui main layout](https://files.devosmium.xyz/s/xyh6dpwd.png)
+
+Overall I like `spotify-tui` a lot more than `ncspot`, but I'm keeping it on my
+system in case I need to run multiple clients at once.
+
+`spotify-tui` is available in the AUR as `yay -S spotify-tui`.
+
+[^1]: Queue, Search, and Library, respectively
+
+[spotaur]: https://aur.archlinux.org/packages/spotify/
+[ncspot]: https://github.com/hrkfdn/ncspot
+[spotifyd-github]: https://github.com/Spotifyd/spotifyd
+[dotfiles-spotd]:
+https://git.sr.ht/~muirrum/dotfiles/tree/master/.config/spotifyd/spotifyd.conf
+[pass]: https://passwordstore.org
+[spotifytui]: https://github.com/Rigellute/spotify-tui
diff --git a/blog/starting-an-irc-server-in-2021.md b/blog/starting-an-irc-server-in-2021.md
new file mode 100644
index 0000000..6b95dd1
--- /dev/null
+++ b/blog/starting-an-irc-server-in-2021.md
@@ -0,0 +1,28 @@
+---
+title: "Starting an IRC Server in 2021"
+date: 2021-05-19
+draft: true
+---
+
+I've been spending a lot of time on IRC[^1] lately, whether it's on Freenode (now Libera), ScoutLink, or a network for my friends. There was some drama on the friend network, which resulted in control being passed to me. This led to me needing to stand up a complete IRCd with services in a short period of time. This blog post is going to document what I did to do this, and some of the design choices I made. I don't want this post to devolve into *why* you should use IRC in 2021, that's a discussion for another time.
+
+## IRCd
+The heart of any IRC network is the IRCd. It manages the connections and keeps all the data flowing between clients. For this part of my network, I chose [InspIRCd][inspircd]. This IRCd was chosen for its stability and ease of configuration. All the config options are stored as XML files, which makes it easy for me to, in the future, add programmatic configuration for things like opers and other things.
+
+## Services
+The other big part of the IRC server is the services package you use. This is like an IRCd, but users don't directly connect to it. Instead, they send commands to "fake" users on the network, named things like `NickServ`, `ChanServ`, etc. These services will manage things like user accounts and channels, to make it easier on both network staff and end users.
+
+## Client
+Finally, the client. I wanted to have something that non-technical users could use to get online with minimal setup. For this, I opted to self-host an instance of [thelounge][thelounge], a web-based IRC client. It also acts as a bouncer[^2], which keeps them logged into the server even when they're not looking at it.
+
+In my opinion, thelounge solves one of the biggest issues with IRC, namely that it's not user-friendly. IRC is an old and venerated protocol. It has quirks dating back years, and it sometimes takes skill to navigate them. I'm going to go off-topic a bit here, and talk briefly about how I think IRC can make a comeback. IRC *desperately* needs user-friendliness. The days of complex clients need to end, or at least be complemented by newbie-friendly clients. If clients like thelounge can be made to do certain tasks automatically, like registering with Nickserv, and allowing registrations on "private" instances, it would be easier to market IRC as an easy replacement for proprietary apps.
+
+Back on-topic, the client is hosted on a separate server from the IRCd. People who use it can join other networks, like Libera or OFTC, from the same place. This makes it similar to, for example, Mastodon, where people centralize in small clusters. In this way, their IRC life is centered around the client, which they can access from their phone, laptop, or desktop. It works really well when you're trying to get people online quickly.
+
+Personally, I connect through ZNC, but that's a topic for later (if ever).
+
+[^1]: Internet Relay Chat
+[^2]: A bouncer is a program that runs constantly, keeping you connected to IRC. It gathers all the logs and relays them to your client when it connects. In this case, the client *is* the bouncer.
+
+[inspircd]: https://inspircd.org
+[thelounge]: https://thelounge.chat
diff --git a/blog/status-update-may.md b/blog/status-update-may.md
new file mode 100644
index 0000000..4dbe6d2
--- /dev/null
+++ b/blog/status-update-may.md
@@ -0,0 +1,27 @@
+---
+title: "Status Update: May 2020"
+date: 2020-05-18
+lastmod: 2020-05-18T16:04:30-04:00
+draft: false
+series:
+ - status
+categories:
+ - projects
+---
+
+I figured I'd take a leaf out of other people's books and start doing monthly status updates (if I remember to do them). For the first month, I'll be talking about Campmaster Constantine, Discord Scout Council, and this site.
+
+<!--more-->
+
+## Campmaster Constantine
+This month has seen a lot of changes, from PostgreSQL to task scheduling. I'm currently in the process of adding server mute functionality based off of the task scheduler I wrote (found [here](https://git.sr.ht/~muirrum/campmasterconstantine/tree/feature/queue)). Also upcoming are reminders and timed bans. If you have any suggestions for what I can do with this, feel free to drop a note in my public inbox (found in the sidebar).
+
+I'm also working on a secret for the Campmaster, that's coming up, so stay tuned!
+
+## Discord Scout Council
+I've recently joined the Discord Scout Council as the representative for Camp Quarantine, and as the Tech Team lead. I'm currently working on maintaining their [bot](https://github.com/Discord-Scout-Council/DSC-Bot) and creating their website. I'm excited to be working with them, and I'm looking forward to creating their website and bot.
+
+## devosmium.xyz
+This site recently went through yet another revamp. This time, it's using a [theme](https://git.sr.ht/~tristan957/tristan.partin.io) written by [Tristan Partin](https://tristan.partin.io). I'm planning on reworking the theme a bit, but this works for now. I also added an [about](about/) page to the site.
+
+As the Campmaster grows, I'm planning on creating documentation for it here.