2024-07-06 19:11:44 PDT
I talk about my journey to a plot of land I purchased, and the bitter realization that met me shortly after I arrived.
2023-06-07 01:00:00 PDT
This was a little narrative I wrote one day going over a day in my garden and thoughts that filled my mind on that day
published 2026-02-23 14:29:23 PST
Senioritis + Job Woes = one unhappy camper
As I've mentioned multiple times, I do not like my job. At least once a month I go scrolling through job listings looking for the next thing.
I'm also on the 12th and final semester of my 8 semester long CompSci undergraduate degree. I could write a dissertation on how much of this was not entirely my fault and how much of this was caused by systemic inefficiencies in the university, but I'll save you from that whining this time.
No, today I want to complain about burnout.
School
It's been about a year since I've liked any of my classes. I was thinking that finishing up all the general education requirements would let me get more deeply involved in my studies, especially when it is in subjects I am interested in, but it's had the opposite effect. I'm longing for the days of having my head pushed under the waters of an unfamiliar stream in the river delta of human knowledge. While some of those courses also caused the same pangs of burnout, many of them also served as a nice break from the unending flow of clever ways we've tricked transistors into doing math for us. One of the major reasons is that I'm deeply uninterested in the electives I'm taking.
Ok I lied, I'll do some whining about the systemic issues of the university, as it is necessary to understand the context. My school's CompSci classes fill up in the blink of an eye due to there being a major discrepancy between the number of sections taught and the number of students, with the latter dwarfing the former. There exists a program for students who are the first-generation going to college or are part of a minority group which allows them to get earlier enrollment dates as well as special advising. On paper this sounds great and something I would support, the problem is that my school is majority-minority, even more so in the CompSci classes. While not everyone is part of the program, a large enough portion are, so much that days before I'm even allowed to sign up for classes, they're already filled with a maxed out waitlist. Of course I don't hold any animosity towards the program members, hell most of my friends are in it, but it knocks the wind out of your sails when it feels like your university doesn't want you to graduate.
Last semester, I only had two classes on the first day, requiring me to make a mad dash to any classes that were notoriously, frequently dropped, whether it be for their difficulty or poor quality of professor. That's how I got to sit through the confused ramblings of a geriatric, over indecipherable slides that only served to confuse even relatively basic concepts. The subject matter need not apply, the man could have been teaching a course on the order of the planets and I would have come out less sure of position of Mercury for every lecture I attended (which was not many).
The second class was run by a man that would have made der Fuehrer blush; so enraged by the scourge of grade inflation, that the most dedicated students are lucky to pass with a C, also a total prick. Fortunately I was able to drop him after a couple weeks as I was able to secure a spot in a GPU Accelerated general computing course. This professor was decent, with reasonable homework and solid lectures, but the subject-matter was nevertheless difficult. I wanted to avoid the mad scramble again and bugged the advisor's office until I had all my final requirements fulfilled and wouldn't have the mad dash again...
Work
The semester starts a bit earlier for work, we're on our fourth week, but it's only now is the torrent of tickets starting to trickle. This cohort is rowdier than previous ones and I've had more people screaming at me over the phone than previous semesters. Last week a guy called us and kept shouting about how he felt scammed, that all we did was take his Pell grant and left him with classes he couldn't attend because our software doesn't work. I didn't have anything to tell him, because I know that's exactly how the business worked.
I hated the feeling of leaving work every day hating the company even more than the last. I remembered the feeling all too well, it was exactly like my last few weeks working at the store, the malice and resentment building up before it boiled away with my resignation letter, one I hope to be turning in soon.
Conflict
So that takes us to last week (5 weeks ago now), the start of my school in phase with a busy period of work. My entire schedule was meant to be online, so at least I wouldn't need to actually get up and go anywhere besides the office in the evening. I read through the syllabus of one of my courses, one that I was told was online and asynchronous, only to find out that I was mistaken, yes it was online, but it was very much synchronous, and right in the middle of my shift. Now it would be one thing if I needed to get into work a little late, I've had to do that a couple times for afternoon classes, but smack dab in the middle of our busiest time of the night wouldn't fly, and even if it did, I didn't provide any notice because I was told it would be asynchronous!! Could I have probably made something work with my boss? Yes, but at this point I was itching for an excuse to leave.
So I asked for my job back at the store.
They were hiring and the manager would have hired me on the spot if it were fully up to him. We left on good terms. I walked out of the store feeling somewhat relieved, once I got the approval from the owners of the store I was going to put in my two weeks and fall back to an old routine, from a time where I was truly happy doing something I felt good about.
As I drove to work, some pangs filled my head:
"You'll need to work weekends"
Ok yeah, that kinda blows not having your 2 days off sync up with the rest of the world, but I'd have my evenings back. No more needing to get home late every evening.
"But what about those weekend trips to go see your girlfriend in Washington"
Oh shit, right, she can't just take time off to sync it up with my schedule and the long weekends where the store is most busy...
"You'll need to buy an Apple computer"
Why?
"You Facetime her on your work laptop all the time and need something for OpenBubbles verification""
Oh right... Well how much would a beat up M1 Mac cost anyway?
"But you're making less money"
Only if I work the same hours!!
"So you want to pick up a job where you have to work more doing a harder task because?"
It's closer to home and so I'll save money by riding my bike, and it's right next to the grocery store so I'd be incentivised to cook more!!
"Sure buddy, you say that every time"
ACCEPTED: ADD FORM FOR CLASS CS XYZ
Oh. So there's no more problem?
Then actual relief went through, not the faux relief I wanted to feel walking out of the store asking for my job back. I knew what it meant. I wasn't leaving.
So now I have it all, the classes I need to graduate, a flexible enough job that I can spend money on things I enjoy and people in my life, everything should be dandy.
But it's not.
I feel stuck in a state of impermanence. Stuck in classes I couldn't care any less about, stuck at a job I actively despise, stuck in a state that no longer feels like home. I want to start packing for Washington, but know that it's too early. I want to start applying to real jobs but know that I don't yet have the degree. I want to learn but I already know the material covered in class.
It's just hard, I'm so ready to take that next leap, I'm 95
And I miss my girlfriend a lot. I didn't realize how much those little walks sipping our chai lattes made the days so much more bearable. Bless the telephone, but it's no replacement for having her here.
At least I have that weekend a month up there with her to look forward to.
published 2026-01-26 14:16:23 PST
13 hours and 22 minutes without traffic, 816 miles; The drive from Sacramento to Port Angeles, Washington is not a frequented weekend getaway for most Sacramentans.
Yet for the foreseeable near future, it will be one for me!! My girlfriend joined the United States Coast Guard and is stationed along the Olympic Peninsula. Never would I have thought that I'd have to worry about OPSEC issues and this blog, yet here we are.
Last Friday I played hookie from work, catching a stomach bug from Roomie's mom, a kindergarten teacher. The best lies are ones that weave in bits of truth, and knowing my stammering ass, I needed to make sure I had my story down pat for the inevitable interrogation from HR. Of course, this interrogation would never take place, but I feel more secure when I think through these things. Thursday evening I made sure to make a scene about needing to run out to the car for some pepto bismol for an upset stomach. I think I put on a pretty good act, my coworker offered me some dramamine in case I was feeling nauseous.
After my shift let out I got on the road right away, no sense in not getting a head start if I wasn't going to be sleeping for the next few hours anyway. I plugged in the closer of the two possible rest stops I was planning on staying at that night, one a half an hour south of Redding. I assumed Google Maps would be smart enough to route me to the more direct of the two paths, but was sorely mistaken. I assumed it would have me loop back a bit on I-80 west, putting me on Highway 50 west for a few exits, before I could get on I-5 North and have a straight shot.
But No!!
I understand why it took me on this route, it's still fairly direct and would require zero back tracking, however what the bots did not account for was the horrible fog. I'm unsure if along the same stretch of I-5 it was just as foggy, but I lean towards no. The visibility was so poor that for sections I had to be moving at <30 mph, well bellow my target velocity to truly shave off time this night. Eventually Google provided a detour that added 15 minutes to the trip, but put me along my desired route, and boy am I glad I took it. As soon as I got on it the fog immediately cleared up and before I knew it I was on I-5 with its 70 mph speed limits. I continued on for a little over an hour before the clock switched over to 01:00 and the lingerings of tiredness started to make themselves known. Fortunately the rest stop I was aiming for was only 15 more minutes down the road.
The Mazda 3 hatchback is not generally considered a good car for road-tripping, but I found it to be plenty comfortable for the night's stay. My camping air mattress always leaks over the course of a few hours and has a tendency for slipping out from beneath me in the night. I had gotten some foam tiles from home depot, the kind you see at gyms or elementary schools. I have to say for $25 it was the best purchase of the trip. Although firm, they were comfortable to fall asleep on and insulating enough to keep me warm; I've had worse nights of sleep on real beds. I had the rear seats laid flat and my head facing the rear of the car, with my feet resting on the center console between the front seats. Not a lot of wiggle room, but didn't require contorting myself or the stiff neck I get whenever I sleep in the front seats.
Before bed, I drafted out the text I would send to my supervisor the next morning, telling him how I wasn't able to keep anything down and didn't get a lick of sleep between trips to the bathroom to hurl. It's a busy time at work and a little head cold wouldn't cut it, nor could I request this time off. After setting my alarms and my head hit the pillow, I quickly slipped into sleep.
Friday morning I awoke, sent the text, called my folks letting them know I was ok, and hit the road. Nothing of note really happened, besides a pleasant interaction with a pump attendant shortly over the Oregon border. I made good time, having purchased all the snacks and drinks I would need ahead of time. I made it onto US-101 (Hood Canal Highway) before sundown and made it to her home around 20:00.
Her beautiful, smiling face was a sight for sore eyes. Even though it was only a few weeks since I had seen her last in person, it felt like it had been ages. We had a wonderful weekend together, she led me through some of the most beautiful landscapes, showing me all the spots she had discovered over with her brief time there so far. It was magical. While I have some commitments I have to wrap up in Sacramento, The gentle whisper of the call of the North has become a beckoning cry.
Saturday evening, we watched the sunset on the beach, the chilly wind biting at our extremities. The beach was right along the Strait of Juan de Fuca, separating us from our Canadian neighbors. As someone who has lived smack dab in the center (latitudinally speaking) of the U.S. for all of my life, being surrounded for hundreds of miles of Californian authority on all sides, crossing into other states feels weird. Being able to look over the narrow strait to another sovereign land was truly peculiar, it made the hair on my neck stand; Not out of fear, just an alien experience. A bald eagle flew over our heads as a reminder of which side we were on, though the raptor held no allegiance to the border as she sailed aloft above the brine and stone.
My tear-filled departure Sunday night was a hard one. Every fiber of my body begged me to stay, and if it weren't for work, I would have. What I would give to be free of the ties to Sacramento I hold, to spend every night with her. Soon this day will come, but for now it will have to be made up for long weekends together.
I made great time through Washington, by 23:00 I was in Oregon, not needing to deal with the traffic through Portland was a godsend. 45 minutes later, It was time for a refuelling stop. As soon as I stepped out the tiredness hit me like a freight train. With only 15 minutes down the interstate past the gas station, I was already longingly looking at the rest stop signs. I know the dangers of tired driving and didn't want to add to the statistics. I passed the first rest stop I saw, but ended 30 minutes shy of the stop I was aiming for.
This night was colder and I was all the more desperate to make it to bed, I layered up and assumed my sleeping position, but the cold night air burned my sinuses and left me with a pounding headache. Once the residual heat of the car's HVAC wisped itself away, it left me in an icebox. What I didn't realise in the dark of the night is that the sleeping bag I was under was inside out, my desperate half-awake attempts to zip it up were futile and I laid there cold; not cold enough to jolt me awake, but not warm enough to sleep through either. At 04:30, I had had enough and forced myself awake so I could fix the sleeping bag and get at least a couple hours of good, restful sleep. I managed to turn it rightside-in and got it halfway zipped up. I slumped back into position and before I knew it, the blare of my phones alarm broke through the deep slumber. In hindsight, I wish I slept one more hour, but at the time I thought I had work in 10 hours with an 8.5 hour drive ahead of me; I was told I we were working on MLK day. My boss who told me was mistaken. 🙄
I started the car and had the heat on high blast as I sipped at my energy drink, shaking away the tiredness of the less-than-restful previous night. Soon the frost that had settled on every surface of the car started to melt away and I was feeling awake enough to hold the car within the lines and let cruise control take care of the rest before the caffeine took hold.
I made it home by 14:30, averaging 26.5 mpg during the trip, a pleasant surprise, and a number that could be brought higher if I didn't joy ride up the winding passes as fast as I did. I really enjoyed the trip and am eagerly planning out my next one. Fortunately, this last semester is going to be purely online, so I only have to contend with work in order to spend time up there.
Someday soon, I will return to the North, without a return trip
published 2025-12-18 07:49:08 PST
I'm flying this week
I hate flying.
You're telling me that I get to be harassed by power-tripping TSA workers, sit at a gate in anxious anticipation to see if my flight will be delayed, get hit with highway robbery for the most basic of goods, and be crammed into a cramped cylinder for hours with sick and screaming children? No thanks!!
But alas, the only way to cross the country in a reasonable amount of time is through flying.
The first leg of my flight out was on a 737 Max 8. The seat left my ass sore and my neck sorer after trying to get some sleep. At least the middle seat was empty so I could stretch out a little more. Also the landing was ROUGH, though the plane has made rougher landings... But having a 60 watt type c port was convenient for keeping the laptop charged.
I'm currently on the second leg. This time, a 737 800, an older plane. Man this seat is so much more comfortable, and I actually have leg room!! However, I am getting a bit of range anxiety for the 3-4 hour bus ride after this, maybe the bus will have a charge port, fingers crossed it's a 120 outlet. Still, I'd say a worthy trade. This is the first flight I've been on where they had to direct people to spread themselves out to balance the plane, we're about 60 bellow capacity; another flight with an empty seat! I should play the lottery with this luck streak!
$5 that this landing is a hell of a lot smoother, no bots to get in the way
published 2025-12-08 00:36:04 PST
Stranger Things 5: a return to form
The follow up seasons... not so much
Season 2 felt aimless, but was still charming at times.
Season 3 was fun, and developed Billy's character well.
Season 4 was... Awful. Like I almost didn't want to see season 5 because it was so bad. It was so bad that I powered through a Covid-headache to write this on my gemini site:
Like many people in summer 2016, I watched the original Stranger Things on Netflix after hearing positive reviews. Sure enough it was a captivating show with believable drama and decent horror with an adorable cast.
However I have felt disappointed with the subsequent seasons of the show. Season 2 didn't have the same impact as season 1. It lacked cohesion, Finn Wolfhardt was in the popular movie series, It, and so was not available for filming much of the time. Instead they focused on the adults and young adults, developing Hopper and Joyce as well as redeeming Steve's character.
Season 3 of the show was better, I've seen others not like this season as much, but it was undeniably fun and had captivating character arcs. However they undermine the overall impact of Hopper's self-sacrifice by revealing he lived within 10 minutes of his on screen death. The Russians being the enemies was a bit of campy fun and they didn't overplay it and better yet didn't make a political statement.
Season 4 was much more like season 2 than season 3.
Starting out with things I liked, Eleven's dark side was interesting. After the opening scene where it appears she has murdered the rest of her test-siblings, it makes you wonder if we can really trust Eleven. Really most of Eleven's solo story and internal battle with Papa was quite good. I also liked how they treated the satanic panic, not making people overly bloodthirsty, most people doubting what the boy pushing it was saying. People didn't suddenly lose their mental capability as soon as Satan was mentioned. I liked Hopper's escape and the way the audience was kept in the dark for his plan. Overall the visuals for the show were quite good. I had far fewer "This is CGI" moments than previous seasons.
But that's about it...
We saw way too much of the villain, initially he looked creepy, but after the fifth time I couldn't help but notice how goofy he looked. Like Jim Carrey's Grinch was shaved and had a feeding tube installed in the side of his neck. Additionally Dustin's banter was a little much sometimes. Finally can we stop naming all the villains after DND villains? It was cute when they were little kids but I can't take them seriously when a bunch of almost adults feel like they need to name the murder demon.
Lets start big picture then work down from there. The overall story was far too disconnected. Half of the kids were in Hawkins, the other half was on a road trip for most of the season, Eleven was doing her own thing, and all the adults were in Russia. They only meet up at the season finale. This had me constantly thinking, "what are they doing again, why do I care about this group of kids?", which is the last thing you want your audience to be asking. Despite the already bloated cast, this did not stop them from adding even more characters!! A stoner who is friends with Jonathan and a metal-loving, DND player who becomes the lead suspect of the murders, Eddie.
We don't learn anything new about the established cast. I guess that's not true, Max's character has some development, but the fact I forgot about her even existing before I started watching the show this time around makes me not want to include her in the established cast. Will still just wants to be a kid and is still upset with Mike for having a girlfriend, just like last season. Lucas becomes a basketball player in the school's team but that is dropped after episode 3 when he joins back up with the Hawkins kids. The first 3 episodes feel like they were killing time before the actual story starts.
They attempted to have a motivated villain for this season (good), but failed to give him any motivation (bad). There was an underlying message about trauma being bad, but whatever they were trying to say was lost by the tentacle monster man being too distracting. He attacked people who had past trauma and told them they were bad for causing the event. The first girl had bulimia, the second guy had survivors' guilt from a car accident where the other person died, and Max had lost her brother in the finale of the previous season. This was an interesting plot point, seeing as most of the cast could be a target with their own fair share of traumatic experiences. However, this was pretty much dropped all together once we discovered that the villain was actually One; And One's motivation? He was treated poorly by Papa which made him evil and wanting to take over the world by merging it with the upsidedown. The same goal as all the other villains except this time he can speak.
Every few episodes they needed an emotionally wrenching moment and each time it felt undeserved. They would get a close shot of the actor for the scene, the actor would give a half cry about something, sad music would be playing, and I would be almost laughing at how poorly it was done. "WE NEED AN EMOTIONAL MOMENT ON SET, EMOTIONAL MOMENT IN 3 ... 2 ... ok look sad, say how much you love them, a little more tear, ok done". It never felt like the scene was earned, it felt like they needed to move the story forward with a quick heart to heart that then gets thrown away within minutes. The worst part is that this show knows how to have an emotional moment because last season they handled them perfectly. There were only a handful of emotional scenes and all two of them I remember were earned: Hopper's death and Billy's death. Both deeply impacted all the characters of the show in some way. Billy was Max's brother and Hopper acted like a father figure to pretty much all the kids at one point. However with this season, emotional scenes were thrown in willy nilly. Eddie and Steve get one where Eddie sees that Steve is actually a good guy and sees why Dustin likes him. Now mind you it was sweet what he said, but it puts the whole story on halt just for the show to remind us Steve is in fact a good guy, something which has been established since season 2.
Additionally, Eddie's death was idiotic. It's not really explained well why they must kill the bats, I assume it weakens the main villain because he showed pain when the other monsters were killed. Eddie decides instead of running from the fight to plunge himself head-first into certain death. This did not come off as brave or satisfying since he ran away in the first scene, but rather as a naive self-flagellation resulting in pointless death. Since this character has been on screen so little I didn't even really care he died, yet it's written to seem like we should
I hate what they did with the character of Robin. Last season she was a fun addition and served as a good fish-out-of-water compared to the original cast. Last season they revealed she was actually a lesbian, cool, it would have been cooler if Steve had a more negative initial reaction with an ultimate better understanding and acceptance, but Netflix needed to have an additional representation token and I'll let them take it. This season however they completely changed her character, making her a stereotypical band lesbian who also somehow managed to lose any social skills she had between the last season and now. I thought her sexuality was an interesting development to her character and they could do so much given the setting of small-town Indiana, but they threw her away and brought in a bland replacement to get bonus points for.
The majority of the adult section this season does not work. Joyce decides to leave her entire family to go save Hopper from Russia with a days notice. Now mind you Jonathan is older now and could watch after them, I accept that, but after losing her son multiple times to spooky monsters the past few years you would think she'd be a tad more worried when mysterious murders start occurring. More than that, these scenes are tonally completely different. They feel much more like the campy, fun romp of season 3 than the darker season 4. This is most notable when they cut between the stories; Suddenly after seeing a child get their skull caved in and their arms snapped in two we see a man fight a peanut-butter smuggler using karate on a plane flying into Siberia. It's to the shows detriment that while we have 2 serious stories, the main villain story and Hopper's experience in the camp, we have a very light-hearted, silly story tying them together. It's like hitting an emotional brick wall every time you swap between them. However I did enjoy the goofy parts. This show is best when it's having fun and it had a lot more fun with Joyce and Murray than any other characters.
Hopper's story was actually pretty good. He portrayed having experienced working in a prison camp very well; This was a much wiser Hopper. Everything he did had purpose and he had gotten over some of the pride he had in the first few seasons. Purposefully breaking his ankles to escape was hard to watch but communicated very well the stakes he was willing to go to escape.
When it got to the end of season 2 I was wanting more. When it got to the end of season 3 I was wanting it to be over. At the end of season 4 I'm wanting both. It ends on a cliff-hanger where the upsidedown is shown entering into Hawkins. The ultimate climax was a let-down of a battle between One and Eleven where they force-throw each other around a few times. You could tell immediately that this unfortunately would not be the last season of the show. Season 3 felt like it had wrapped up pretty much everything and it should have ended there but they wanted to finish Hopper's story so they had to make season 4. Since nothing much happened in season 4 I feel like I want more from the show. I invested more than 12 hours into this last season, at least give me a cohesive ending that wraps our journey to Hawkins with a nice little bow. Alas we get neither something to look forward to nor a satisfying ending.
I hope they just make season 5 a really long episode that makes this whole last season worth it. I've put too much time into this show and hell I guess I sunk too much time into this to stop watching now.
Wow did I get exactly what I asked for!!
Now of course, only the first 4 episodes are currently out, they still have the rest of the season to crash and burn, but I have high hopes.
They managed to effectively transition from that garbage fire of the last season back into the show I remembered watching nearly a decade ago. They don't pretend the previous season didn't happen, but they shy away from its weaker elements.
Robin is an actual character again, still different from season 3, but it doesn't feel like she's just there as bait for Tumblr. I actually really like what they did with her serving as a gay confidant for Will. Will being gay has been poked at since season 1 and them sharing and bonding over their closeted lives feels earnest.
In general, It feels like Will is an actual character for once, where the writers never gave him much to do in previous seasons except for being a sort of damsel in distress whenever the monster of the season was nearby. He has agency.
The characters stories are tied together, while still being split up. Breaking up the characters into smaller groups is necessary with such a large cast, but you don't get whiplash every time the group we're focusing on changes. I feel like each character has had their time in the spotlight.
They have fun with serious situations. Escorting the children out of a tunnel they dig in the bathroom of a military base was simultaneously absurd and grounded enough to feel like there was real stakes.
The story hit the ground running. The intro with Robin summing up the current situation during her radio broadcast cut right down to the quick of the story. It didn't wait around reestablishing what the audience already knows.
They made ham radio look cool!!
Demogorgans are formidable foes again and having 10 spawn right in front of everybody in the rightsideup was tense, especially Lucas in the tunnels. The use of hand-held cameras as Mike and the crew dodged soldiers and monsters alike added to the anxiety of the moment. While I saw Will stopping the Demogorgans from a mile away, the twist that he has powers of his own was a genuine surprise.
The fake-out self-sacrifice by Hopper made me roll my eyes a bit as they've played that card a few too many times, the reveal that it was 8 behind the door was a great surprise. It seemed like they wanted to ret-con that whole episode out of season 2, which I didn't blame them for, but tying it back in was satisfying as it has been sitting in the back of my mind for the past two seasons.
Overall, I couldn't be happier with how they just stuck the landing after the hit that was season 4.
Here's hoping they continue this wild ride to the end!!
published 2025-12-05 23:38:49 PST
I work at a college that has its own online learning platform. This platform is quite shit.
There was a bug that was causing quiz submissions to not work, just a white screen would appear and the whole page would crash. Quizzes are still marked as "in beta", despite pretty much every course requiring them.
It took 3 days to fix, why didn't they just roll back to the previous version where the issue didn't exist?
There is no way to "reset" a quiz for a single student without hitting api endpoints with postman. Each reset request has to be handled by IT and only 3 of us know how to do it. It has been this way for over a year, despite the api endpoint existing and functioning well.
But they just added emoji reactions to messages!!
The default interface doesn't fit on the low-resolution laptop screens the school provides to students. They developed an alternative and better interface layout, which has been hidden away in settings for over a year and a half.
Each semester there is a flood of students who can't see their assignments tab for the first 2 weeks before they eventually reach out to IT, and we tell them how to switch to the new interface.
I can go on about how the software (and the company) is deeply flawed, but I think you get the idea.
It's one thing for a startup tech platform to have bugs, but the "move fast, break things" approach doesn't work well when those bugs result in hindering someone's education.
published 2025-11-20 23:54:12 PST
Sigh...
Xorg is an aging pile of bugs, leftovers from stripped out previous features, and poor implementations. However, it's the only good display server we have.
It has been in maintenance mode for the majority of the time I have been using Linux, despite the lack of new features, Linux adoption has exploded and most people don't even have to think about what display server they are running. That is, until they are "upgraded" to Wayland by default and features that used to work suddenly stop working.
Now I'm not going to beat the dead horse about all the things that Wayland can't do. This has been trodden over so many times, and with ongoing development this post would have to be updated with strike-throughs and asterisks. Yet the main point still rings true, something shouldn't be touted as a replacement until it is actually capable of replacing the thing it's supposed to replace, and in the case of Wayland for Xorg, there are many workflows that it cannot.
What I'm more interested in discussing is the fundamental flaws with Wayland's approach.
One of the key "issues" with Xorg is its security model, or lack there of. Any client can become a keylogger or be funnelling off a live stream of your desktop to a hostile actor, and there's no way for X to stop it. Is this really a problem though? How often do we hear about the keyloggers plaguing Xorg desktops? The software distribution model of most distributions makes most pathways for malware null and void, however that's not how Wayland took it.
Their solution to the (non-existent) problem is to isolate clients so that they are only able to effect themselves. They're only able to read key-presses when their client is focussed and they can't capture the screen. Of course, global hotkeys or screenshot utilities must have completely slipped the mind of Wayland developers when they were drafting that design decision out.
Furthermore, this design principle just does not adapt well to a multi-window environment. With the single-window environment of mobile OSs, it makes sense; I don't want any old app to be poking around all the apps I forgot to close out of, and really they have no reason to. With all major platforms taking the Xorg attitude towards isolation (until recently), applications and the people who use them expect to be able to have their windows interact with one another.
Where a display server should be working to enable applications to be able to do whatever they need to do, Wayland goes out of it's way to make sure they can't do anything outside a slim set of acceptable actions.
"But Jasco!!", you exclaim, "Wayland allows applications to interact with each other through the desktop portals and pipewire!"
Which brings us to the next point.
Since applications DO need to interact with one another, Wayland needed a way to allow it. Their solution was desktop portals. This allows temporary access to certain parts of the underlying system through a user-confirmation pop-up window. Really?
Confirmation pop-ups have been the butt of jokes for the past couple decades for a reason, they suck. They slow you down, having to confirm each time you want to do something, instead of just doing the thing you asked it to. All this does is train users to automatically accept any of these pop-ups. Granted, they may have learned these habits from other platforms (looking at you iOS), but it basically nullifies any gained security. If I were ever to be targeted on my work Mac, the bad actor would have no issues because by the time my eyes have registered I'm looking at the Okta verify prompt, my finger is already on the scanner to authorize it. It seems like this is being done a bit more intelligently on most portals, only asking once on first time use, but it is nevertheless not actual security, and thus further makes this a poor decision by Wayland.
So much of what makes the desktop actually usable is not part of the display server at all. Sure this makes it a bit easier to swap things out if it ever comes to that in the future, but how is this an improvement? Now the code can grow long in the tooth in a different repository than the rest of the display server?
"Wayland is a protocol" is a mantra (deflection) of Wayland zealots. It is true, Wayland is simply the protocols used to communicate with the compositor, which is the display server. However, by not having a unified /usr/bin/wayland, You require each project to implement the same protocols in their own ways. In a perfect world this wouldn't be an issue as all the Wayland projects would work together to find the best way to implement it, but we do not live in a perfect world. When Xorg implemented a new feature, every window manager and desktop environment didn't need to scramble to implement it, the rising tide simply raised all the ships.
Looking at the governance model, it seems pretty good on paper. Major projects get to agree on what protocols get added and each project must implement the core protocols. Ignoring the fragmentation problem, so long is everyone is being a good steward of the project, relevant protocols will get added to the core as necessary.
The only problem is Gnome does not act as a good steward, they only seek to serve their own interest. This has held back protocols from being added because Gnome had no use for them. This has left the core protocols to be anemic and ones that really should be part of core to live out their lives in the unstable namespace.
This is makes life particularly difficult for an application developer, as you don't know what extended protocols are going to be supported, and the core ones don't provide the functionality you need.
I understand as a group of former Xorg developers, you wouldn't want to reimplement the same system that caused you so many issues and made you to start a new project in the first place. However, after a decade I would start to question if I had tossed the baby out with the bathwater if it has still not taken over as the successor. I would start to wonder if the dogmatic ideals I based my project on were in some way flawed. I'd look at the 2 year long debate over a coordinate system being merged as something to be ashamed about.
Yes, things are getting better in terms of things like governance, and the overall user experience, but how did it take 12 years?
Sigh...
So as I have made clear so far, I'm not a big fan of Wayland. Naturally when I heard the current lead developer of Xorg started a fork, XLibre, I was intrigued. Even if it means breaking some software, I think there are good bones and a strong history behind X and don't want it to be replaced by Wayland. However I am disappointed by how the project has positioned itself:
"This is an independent project, not at all affiliated with BigTech or any of their subsidiaries or tax evasion tools, nor any political activists groups, state actors, etc. It's explicitly free of any "DEI" or similar discriminatory policies. Anybody who's treating others nicely is welcomed."
I don't really take issue with the substance of what he is saying. The recent (now waning) obsession over Codes of Conduct and the more illiberal elements of "wokeness" have not made things any better for the open source world.
But man, it's a display server, do you really need to champion it as being the anti-DEI alternative? That's going to do little more than stop you from being included in repositories and alienate people. You could have cut out 1 sentence and not made this all about the culture war.
Still, progress is being made, and I hope for the best for the project. I'll probably end up running it sooner or later.
In reality, my software selection would only need to be minorly tweaked in order to have a comparable setup to what I have now, some things may even be improved, but yet I don't want to. Maybe it's in part an act of defiance against a project that wants a different future for the desktop than what I imagine. Maybe it's just that innate fear of change that we all have to some degree. I'm not sure which, but I do know one thing.
I'm still running X
published 2025-11-14 23:56:01 PST
I use LLMs to help me code
There I said it, get out your pitchforks or cartoonishly large bags of money and let me have it.
I was, and to a large extent still am, an AI-skeptic. However, it has proven to be very useful numerous times and has helped my learning. Instead of needing to go scouring through dense documentation or finding a GeeksForGeeks page for proper syntax, I can just ask chatGPT and it will spit out not only the information I was looking for, but also relevant follow ups for further down the line. It severely softens and speeds up the learning curve.
Now don't think I was trying to be sneaky and cheat, the professor actively encouraged us to take advantage of LLMs.
Our senior year requires a project to help a company or organization in our community by building a piece of software for them. I, along with my 7 compatriots, are writing a web app for a volunteer organization.
Our team leader made a good decision and chose to use a pre-packaged starter kit. I just wish I had been more involved in the start of the term and voiced my preferences, because the whole stack is Typescript.
I am already not privy to Javascript, but that's more so to do with what it has done to the web. I don't have enough real experience with it or its statically typed counterpart to have a full-throated opinion on it. Nevertheless, working in this codebase feels completely alien, I don't know what I should or shouldn't touch or really how any of it all works.
What I should have done a month ago, when development started in earnest, was to sit down and spend 30 minutes familiarising myself with the language and the stack we are using. What I actually did was tell chatGPT what repo we were basing off of and asking it how to do what I wanted to get accomplished. In my defence, this was during a study date and I didn't want to tell my girlfriend that I needed to put my earbuds in and ignore her for a while. Undermining my defence, I still haven't taken the time to learn it.
I've just been asking the bot a question, fully intending to write the code myself, only to find that it provided a solution in its response. Of course the code still has issues, mostly around where things are placed in the repo, but after enough prompting, I get code that is working and I get to move my tasks to completed on the Jira board. And so has the rest of my group.
That brings us to tonight.
In my off time at work for the past few days I've been cracking away at getting BetterAuth working. I had the back-end portion set up, now it was just time to tie it in with the existing front end. I pasted the bot's code in the files it told me to and tried to get it up and running, but the dev environment kept on complaining about not being able to find a file. I went back and forth for half an hour asking it what I should do with the error message, each time it suggesting to make the file that the interpreter couldn't find. I knew this was wrong, after all this was one of the files I hadn't touched.
In my attempts to try and pinpoint the issue, I was peeking through the files and found all these things for connecting to the database. I looked at our repo history and my back-end partner hadn't touched them either.
So I went ahead and finally looked at the documentation.
I don't care to go into the specifics, but if I had continued doing what I was doing, We all would have to be fighting against the scaffolding already set up for us from the starter kit.
I knew chatGPT has a tendency to "forget" specifics about what you are trying to accomplish once you're a few prompts deep, but with it's instructions it's almost like it straight up ignored what I had told it about the codebase.
I just feel like a fool for not listening to my own advice, to try to fully understand what the code the bots generate is doing before ever using it.
Guess I got what I deserved
published 2025-11-13 12:49:04 PST
Now don't get me wrong, I love a good TUI
Hell, all the programs I've written have been either web-GUIs or TUIs
Shameless plug to feedie if you haven't seen it already
No need to worry about theming, being able to access it over ssh, Vim style-controls nearly ubiquitous, decent scaling, Whats there not to love?
The problem is that terminals were not intended to be GUIs.
You had these symbols:
Note the first 31 of those are just control codes, including #7, the terminal bell, Which I share a love-hate relationship with.
It just typed text. Far easier than punch cards. Eventually they stopped using paper all together and adopted screens. Besides the physical closing of the keyswitches, it was digital end-to-end.
Computers continued to evolve and proved to be more capable. Yet for a myriad of reasons, it was important to preserve that simple interface, And we still use it to this day. Sure it picked up a few new sets of codes along the way, and quite a few more characters, but you still log in at a TTY.
The atomic unit of the terminal is the cell. For teletypes each cell matched the dimensions of the typebar, for terminal emulators they are a fixed set of pixels wide and tall, determined by your font. Herein is the kernel of almost every problem.
My 1920x1200 pixel display, with a maximized terminal window, has 63 rows and 192 columns. That gives me 12,096 characters to work with, not bad. However, most of the time I don't just run my computer with the terminal maximized, most of the time it is in a window with 30 rows and 75 columns, 2250 characters, significantly less. Not to mention you probably want to have a border for your TUI app so more like 28 rows and 73 columns, even less. And you can't fill every single cell, you have to have some whitespace in between data in order to have each piece recognizable as separate from the previous. Overall, you have a lot less space to work with than if you were to be working with a true GUI, where you can use a far more granular atomic unit, the pixel.
For instance, lets say you have a TUI composed of two panes that take up half the window each. The window can either be an even or odd amount of units wide.
In the case of a GUI with an odd window width, you'll have (2k + 1) pixels to work with, with each pane being k pixels wide and k+1 being the separator line. In the even pixel scenario, its not quite as simple and is handled differently between toolkits. You can either make one pane 1 pixel wider than the other, which is nearly imperceivable on our modern, pixel-dense displays, or you could do some anti-aliasing tricks to make the line still appear to be at the exact center
It is handled similarly with a TUI. An odd cell width can be split exactly down the center, and an even one can be split into two equal sized panes. The issue is that you can't consistently draw the same border for both scenarios like you more or less could with a GUI. In the odd scenario, you can have each cell share the center column as a border, using 1 cell. In the even scenario, you can't, so you either use some ascii tricks to make the two columns appear to be the same width as if it were a single column, or you don't. You just make 1 pane 1 cell wider than the other, or throw out that extra column. The ascii tricks solution is highly dependent on what border style you are using and the available symbols. Making one pane wider can make the TUI look asymmetrical, so most programs just throw out a column. This makes the programming really simple, since pane_width = window_width/2 will always yield the correct width no matter if the window width is odd or even due to the extra .5 being thrown out with integer division.
It seems like most TUIs opt to not share borders though (as so have I) and go with each pane having separate borders:
So in order to be consistent between window sizes, the best option is to par down an already limited working space.
A cell is approximately twice as tall as it is wide, in my case each cell is 19 pixels high by 10 pixels wide, though the standard was 16x8 for the longest time. This adds too the aforementioned centering problem with the fact that an off-by-one on the height is far more noticeable than a off-by-one on the width. It also means that your x and y axis are at different scales.
Now why would that matter? After all, you're working with characters that take up a cell height and width no matter what.
It matters when you're using one of the new terminal image rendering programs.
Now this is more of a niche issue, If you stick with text it makes things a lot simpler. However the adage of a image being worth a thousand words, although trite, rings true. When I was first dreaming up Feedie, the whole desire of having a thumbnail came from not being able to tell what a video was about by the title alone, which is an exasperated issue on Youtube, but that's a whole different subject.
It just proves to be useful from time to time, and there are programs to make it relatively simple.
However, like all things in the Linux space, there are a few options for you to work with that all work a little different and have their upsides and downsides.
Kitty
I think kitty's image protocol is the best currently existing method. Of course, you have to use a terminal that supports it, but quite a few do. It's just one command to draw an image, and one command to clear an image. You have to make sure that the stdout of the thread that runs the command is the stdout of the window you are outputting to, which adds some frustrations, but for the most part it just works. However it is not perfect, and still glitches out from time to time.
Ueberzug
Ueberzug has it's own quirks. Despite what documentation might have you believe, images are not drawn centered within their canvas size. Due to the non-square cell issue, any offsets to make images centered requires one to make calculations using the image aspect ratio and the cell aspect ratio. It's real pain in the ass and adds complexity, requiring the drawer to parse this information.
There's also the new(er) Ueberzugpp, a c++ reimplementation of ueberzug as the original developer ragequit. I have not yet to try it nor know if it has the same centering quirks.
Chafa
When it is not just calling the kitty protocol in the background, something it now supports, images look like this (80x80 cell resolution):
original:
So image quality is significantly degraded even when it takes up the full terminal window.
Others?
There are a handful of other options, but these are the major players for terminal image rendering today. W3m-img used to be in that list, but with how poorly it worked, it no longer is really in the running.
In a terminal's normal context, if one line is too long to be expressed on a single row, it is moved down to the next. In most cases this is fine and good. In the case of TUIs, this is the bane of our existence.
Go's bubbletea library handles this intelligently and does all wrapping handling in the background. NCurses does not. Now it's not the end of the world to work around, but it is a real pain to do it in a way that do
esn't cut off a word half way through. Again, there are libraries for handling this too.
This becomes more apparent when you remember that most TUIs only redraw characters that have changed, not a full redraw of the screen, so if there is one stray wrapping line, or unexpected new line it can do this:
This is an existing bug in Feedie, I'm not sure why it happens. It only happens when using the kitty image backend and so far I have not found any other images that cause this phantom newline to be printed. Nothing is printed to stdout or stderr either. The weirdest part is that it only happens on certain window resolutions.
TUIs are awesome and come with a great deal of advantages. They bring the simple interfaces of GUIs with the portability and simplicity of a terminal. They also inherit a lot of downsides stemming from their half-century old history. You have to count on the developer to account for edge cases.
I'm sure I'd have my own bucket of complaints for GUIs if I was more well versed in writing true GUI apps. However, my experience with web programming has not given me the same frustrations.
But that's not gonna stop me from using and loving them!!
published 2025-11-10 21:55:14 PST
I've mentioned my rss feed reader, "Feedie", before on here
At one point I even had it listed under my projects, but I took it down. I am kinda ashamed of it in it's current state. When I first wrote it in 2021, I was quite proud. Now all I see are bugs and half-baked implementations.
I wanted Feedie to do 2 things:
It gets the job done. It provides a list of entries that are able to be opened, and provides a thumbnail, but that's it. It doesn't do those things particularly well, the thumbnail will be placed somewhere in the top right corner (sometimes covering text), the description is so horribly formatted that it is nearly incomprehensible, The highlighting on the selected item background bugs out depending on which feed is being read, it doesn't always select the correct link if the entry has multiple, and worst of all there's no way to refresh or fetch new entries after the program launches.
It wasn't always this bad though.
When I first switched to it as my rss feed reader it was in a better state. It cached previously downloaded feeds, making load times a lot quicker. This was done with a bad version of a csv file, except using tab characters instead of any other better delimiter. Being a gung-ho 19 year old know-it-all, I thought my version would be so much simpler, being purpose built for the application. It, of course, was not. It actually was quite problematic, each time the description was read from the cache, a leading "b'" was added. This was because instead of figuring out how to properly decode a byte array, I just casted it to be a string, giving the debugging view representation of it. It was always one of those "I'll go back and fix it later" type issues.
Inevitably some change in python broke my horrible caching scheme.
I opened the dusty code files again and couldn't tell what the hell was going on. The amount of coupling made the modules I had separated the project into purely nominal. After an hour of trying to find where the issue even was, I decided to cut my losses and just remove the caching functionality all together. This would buy me some time until the eventual rewrite.
The point at which I stopped the original development was not my intended final destination. I had wanted to give it some polish, make things a bit neater and squash the bugs. However, once I finally got it to it's minimal working state, I completely stopped developing it. The code was bad. It was the best I could do at the time, but it was bad. How was it bad?
Let me tell you:
If you have taken a introductory computer science class sometime in the past decade and a half (maybe before that too), the language they started you with was likely Java. Java is the epitome of Object Oriented Programming, for better or worse, everything is an object.
This means for a student programmer, every assignment starts with making a handful of classes.
So that's exactly what I did for Feedie. While not strictly necessary because Python is not Java and everything need not be an object, it's also not a bad place to start. What I did wrong was trying to cram all the functionality into those few objects I had already made. This resulted in one object in particular having its thumb in far too many pies: Feed Folders. It's responsible for both grouping feeds into categories for the GUI (think tags in every other rss feed reader), as well as constructing the feed and entry objects from cache, fetching new data during feed refreshes, and merging the two intelligently. It really should have been 2 separate objects, a "CacheManager" object of sorts, and a FeedFolder. Except I should have done what everybody else does and used tags because it is not possible to have a feed in 2 categories.
Whenever I got in the mood to work on the project, I wanted to implement a new feature. I'd tirelessly type away until I got something working, but then a problem would appear. Whether it be the aforementioned caching problem, the program being unusable while there was a running program, or a myriad of other issues, I just kept saying "I'll fix it later" and that later date never came. It's fun to make something work, it's less fun to iron out the edge cases where it doesn't.
As I've continued as a programmer, I've learned that hacky fixes aren't the foundation of stable programs.
Hearing others speak about their early days of development, It seems like a common pattern. You're passionate about programming and you've done a handful of smaller projects, why not just try to do everything yourself for the next one? You'll definitely make something better that way.
HA!!
Of course I relented fairly early on, but that attitude of thinking I knew better stuck with me the whole way through. I could've taken heed of the writing on the walls when things didn't work the way I expected, but I decided to trudge forth.
The first attempt
A couple years later I felt ready for the rewrite. I had a half dozen more programming classes and a new language under my belt. I was going to rewrite it in C++!!
Oh C++, what a language. I don't hate it, but it's so...
Old? No C is older and it doesn't come with the same pangs.
Ruled by committee, that's it.
It's like 5 people had their own good ideas and crammed them into the same language, without much thought in how it would all work together.
Yet the challenge intrigued me, so I pushed forward. I worked for a week to get the rss feed data into an object I could work with. That hubris was still somewhat around because I decided to write my own rss parser this time around. If I remember correctly, the cursory run-throughs of each available one didn't sit right with me. With the help of TinyXML2, I was able to get basic elements out of Atom and rss feeds like the author and links. However this was a lot more taxing work, spending hours chasing segmentation faults and coming out each session with so little to show for. After that week I probably touched the project a half dozen more times before accepting it was dead and moving onto other things.
The second attempt
Last December I was bored and alone. I needed to put my energy into something and decided to revive the dead project. This time I was making progress, little by little. I had forgotten the faulty reasoning that lead me to writing my own parser, remembering it as being the only reasonable option. Still, I stuck with it and was able to parse the more complex elements, ones in enclosures and handling dates. I got into a rhythm of working on it little by little, but in the back of my mind I knew my heart wasn't in it. I knew given some time I would be knocked out of that rhythm and the project would fall to the wayside again.
I started working on the Step, and all enthusiasm for the project died again.
The third attempt
Over the summer I wanted to learn a new language. I tried Rust and really didn't care for it. I liked zig but felt weary starting anything with it because of the lacking libraries. Then I remembered how much Roomie's dad bugged me about trying Go, so I did.
I FUCKING LOVE GO
With the exception of the syntax of enums, I struggle to find anything to complain about in the language. Great syntax, great standard library, great build system, everything is great.
A few weeks back I was staring at the nearly half-decade old rotting mess that was Feedie's first iteration and knew what I needed to do.
And so I did.
I remembered where I had slipped before, I learned my lessons and changed my approach. When something wasn't working I kept at it, though the challenges were far easier with an improved language. I broke it up into a server and client, another thing I should have done from the beginning.
And I'm pretty proud of it, at least for now
published 2025-10-29 21:52:49 PDT
I got a sticker from the FSF booth at LFNW earlier this year
Like with all stickers that in some way or form convey an opinion, I hesitated to put it on my laptop. After today, any reluctance regarding it's message has vanished.
If you are not reading this on or about October 29th 2025, there was a massive Microsoft outage today. This is shortly following a similar outage with AWS on October 19th.
I'm taking a course on general purpose GPU computing, which so far has been using NVidia's cuda library. We submit the final .exe executable requiring it to be compiled on Windows. I do not have a (modern enough) NVidia GPU for the version of cuda we are to use, as well I do not want to faff about with PCIE pass through for a VM to take advantage of it, even if I were to have one. Fortunately the school provides remote access to the computer lab with Azure Virtual Desktop. While there is no native Linux client, the web interface works fine enough so I make do with it.
I've been very busy the past week and so did not start in earnest on the assignment until today, the day it was due. So I was quite alarmed when I sat down at my desk, preparing to hunker down for the next few hours and complete the assignment, when the webpage (windows.cloud.microsoft) wouldn't load. Surely it's just my NIC acting up again right? Nope!!
Fortunately I had access to a Mac from work and was able to sign in using the "Windows App" client, but man it was a pain using such a tiny screen and not being able to use my keyboard and mouse. Apple's move to only having type-c is one that makes my blood boil.
After a few hours I was able to log in on the webpage and suddenly started making far faster progress than previously. The site was back up and I presumed that would be the end of my troubles. Then I got to work.
I asked my coworker how the outage effected us, he didn't have much to say other than most everything had been resolved by the point I arrived. He left, 30 minutes passed, and then the phone started to ring. A student said office.com was down so they couldn't log into Teams. I directed them to teams.microsoft.com, got them logged in, and sent them on their way. Then 2 minutes later it rings again, another student unable to log into Teams, only being given the option to sign out. I walk them through signing in, and as I'm sending them off I get another call, and then another, and another.
I guess one of the faculty decided the best way to proctor her students' exams was to have them join on their phones with their cameras facing them. Arguably a better idea than lockdown browser, but nevertheless problematic, especially today. Since Microsoft is not as big as AWS, word of the outage did not spread as far and as quickly, and this instructor was none the wiser of how miserable they were making my day.
I won't pretend that I am a local-compute only purist, the site you're reading this on is hosted on a computer in some datacenter I have not an likely will never visit. However, I keep that in mind. I don't use the server for anything else besides this website. Every file on here is backed up on at least 3 devices. I am well aware that this is not my computer, if a rat cuts the wrong wire or a technician pees on the wrong hard drive, everything on it could be lost.
That's not how it's treated by the mainstream.
"The cloud" is treated as infrastructure, like bridges, power plants, and dams. Do failures occur? Yes, but normally with some degree of warning, and with passive safeguards in case it ever does. We have to be able to count on infrastructure being there and operational in order to complete much of anything. The past two weeks alone have shown that is not the case for the cloud. We can't treat the near endless well of computing capability to always be online, outages happen, and that's okay if it's not essential. However, more and more essential services purely exist in "The cloud".
Honestly, I can't really fault my school for not being able to access the computer, since it is at least tied to an actual physical machine on premises. If I really needed to I could have just driven there and logged in.
My work on the other hand deserves all the shame it can get. As the company is pushing to be more and more of an online education program, it has been bit so many times by outages and overages that prevent students from being able to go to participate. Each time the solution is to throw money at the issue, buy another service that supposedly fixes it, or shrug and wait until it is resolved.
Maybe instead of doing that, they invested in some on-prem servers and paid a couple of guys to make sure they stay on, an AWS outage wouldn't mean a complete halt in providing service.
Beyond that, if each company had to invest time, planning, and real estate into online services instead of just swiping the company card, it's reasonable to believe they may actually care more about the end product. If they had to install a pallet of GPUs in order to have the new AI feature, they may think twice about the new "smart assistant". They may have stronger backup routes, ones that don't involve a web-portal sign-in page, ones that the non-tech-savvy could use. They may look to conquer their slice of the market instead of chasing after unlimited growth and the line moving up and to the right.
But that's a pipe-dream.