It’s just a hobby.

It’s just a hobby. It’s just a hobby. It’s just a hobby. It’s just a hobby.

This month, I have run three live streams. They were all for my daughter’s school, so there wasn’t all that much variety in the scenery, but I can’t say they went badly.

As per the tagline of this site, I’m just this guy, you know? I’m an IT guy. I work in with switches, routers, firewalls, servers, air conditioners, battery backups, automatic transfer switches, and generators. So, what business do I have running live streams? I use the word “business” in a figurative sense, of course, since I volunteered to do this. What the hell do I know about videography or live broadcasting? Honestly, not all that much.

I had a huge section of “what the heck is this guy rambling about” written out, but the short version is that, after converting some VHS tapes to digital, I didn’t want videos of my kids’ school sporting events to look terrible in the future, so I grabbed some used mirrorless DSLRs off eBay and B&H. Other families wanted copies of some of the sport videos I shot, so I guess I started being seen as someone who was mildly competent at that sort of thing.

My daughter’s school has its own Youtube channel specifically for live streaming, but it wasn’t really being used that often. Sure, some of the sports were being streamed using some Logitech Mevo stuff, but the guy running the streams was not going to be with the school anymore once his kid graduated. Because I was the guy who seemed to know camera stuff, live streaming was going to come to me. I’ve used OBS before, so one way or another, I was going to use that.

Some of the gear I’ve acquired includes a recording monitor, for which I’ve acquired a broadcast switcher add-on, which was much cheaper than buying a dedicated broadcast switcher. The first stream used three cameras directly connected to the recording monitor and it was … alright. The second stream, though, was probably the most fun one to do, as it used one directly-connected camera and two connected via wireless HDMI — which is actually a thing, and it works shockingly well. That one ran over 9 and a half hours. The stream dropped a single-digit number of frames over its duration, which is nuts. The last one was a single-camera one with text overlays and such.

Thing is, there are actual companies that do this. Anyone can rent a streaming setup and hire some folks to do this all for ’em, but here I am, sitting on a folding chair in front of a table, or on the top row of the bleachers, making it happen. I’m not complaining about it — far from it, as I just got done saying, it was fun. But this is quite literally just a hobby, something I don’t do professionally. There’s obviously a way to monetize it, but is that something I really want to do? My fear is that if I do, it’ll suck all the fun out of it, which leaves … what for fun, exactly? Games? There’s only so much of that I can handle.

So … it’s just a hobby. It’ll remain just a hobby.

New File Server

It’s been a few months since my last update. Lots of things can happen over four months, and a lot of things did happen over four months, so I’m going to talk about some of it.

The file server in my living room has been decommissioned. I still have the hardware and intend to use it somewhere because I don’t like the idea of contributing to e-waste, even if it’s Ivy Bridge-EP with DDR3 memory. I’ve also decommissioned the Synology DS418 I’ve been running for several years; however, as I still needed file storage, I built a new-ish file server My goals with the new device were pretty simple: build a NAS that combines the capacities of the old ones, provides faster write performance than either old one, provides room for expansion, and is efficient enough to run in the basement without tripping a breaker, while maintaining a price point at or below that of an 8-bay Synology NAS. From a software perspective, I needed an operating system that let me a mix of hard disk capacities without having to sacrifice spare capacity provided by the larger disks in the set.

With these goals in mind, I settled on a SuperMicro X11SSH-GF-1585L mainboard. This is alphabet soup: it’s a Micro-ATX board with one PCIe x16 slot, one PCIe x8 slot, and one PCIe x4 slot (in x8 form factor); one PCIe M.2 socket; six SATA3 ports; four DDR4 SODIMM slots; and, crucially, an Intel Xeon E3-1585L v5 CPU. The one I grabbed on eBay had those four SODIMM slots populated with a total of 64GB of RAM, which is simultaneously the maximum the board supports, and the amount I wanted to use. The CPU is a 4c/8t part, contrasting with the 10c/20t CPU I had in my old TrueNAS server. Realistically, this is plenty as the server will primarily serve files and won’t need the extra compute horsepower. Additionally, the E3-1585L v5 is a 45W part, whereas the E5-2690 v2 it replaced was 130W, so the drop in core count contributes heavily to my efficiency goal.

The PCIe x16 slot is occupied by a 16-port SAS HBA, increasing the total drive capacity to 23 (including the M.2 slot). The x8 slot holds a PCIe M.2 card, pushing that count to 24. Finally, the x4 slot has an Intel 226-V, which increases the network speed from the 1Gbps provided by the integrated I350 chip to 2.5Gbps. All of this means that the GeForce GTX 1650 in the TrueNAS box isn’t being reused, further contributing to the power efficiency of the new box.

The case I chose for this application is an odd one: the Jonsbo N5. It’s a big black cube with a pair of backplanes yielding a total of 12 3.5″ hot-swap drive bays. The bays themselves are trayless: Jonsbo provides a set of HDD screws with rubber grommets and rubber handles that must be attached to each drive in order to slot it in properly. The one ding I had against this case was that the fans didn’t generate enough airflow to cool the CPU effectively, as it came equipped with a 1U passive heatsink. Even attaching a 92mm fan to a 4 duct didn’t push enough cool air to the CPU. I did manage to find an active copper heatsink for the CPU, which brought its temps into a sane range, so I swapped the passive heatsink for that one and kept the 4″ duct for good measure.

While TrueNAS Scale does support the use of mixed hard disk capacities, it will limit the usable capacity of each drive in the array to the smallest disk’s capacity. So, if I throw two 6TB, two 8TB, two 10TB, and two 12TB disks in a single array, the larger disks will all be treated like 6TB drives. I really liked the Synology Hybrid RAID feature, which allowed me to use all of the capacities of each drive. For example, RAID 5 (or RAIDZ 1) would yield a total of 38.2TB of usable capacity with these drives, but SHR would yield 54.5TB — a huge difference that effectively rules TrueNAS Scale out. There are ways to run Synology’s DSM operating system on non-Synology hardware, but apart from being against their license terms there’s no guarantee the methods will support future DSM versions, so that’s out as well. Ultimately, I decided on Unraid as the operating system for this build.

Let me tell you, it’s a good thing Unraid has a 30-day trial. I had never used it before and didn’t want to pay for a license if it wasn’t going to suit my needs. However, within the first 5 days, I knew it was the perfect fit, so I sprung for a Lifetime license. Within the first 10 days I had half the drives fail (the 6 and 12 TB ones), so I replaced them with 8TB ones. I also added a pair of 64GB SATA DOMs (basically tiny SSDs that plug directly into the SATA ports on the mainboard), and a pair of 512GB M.2 drives as mirrored write cache. Unraid is strange in that you have to boot it off a USB drive, and most USB consumer drives are poor quality, so I put it on a USB 2.0 thumb drive with SLC memory specifically designed for industrial use called the ATP Nanodura. It’s slow, but speed ultimately doesn’t matter because the OS mainly runs out of system memory.

Three months on from that adventure, the system is completely solid. The two 10TB drives act as the parity pool, ensuring that the array can survive drive failure. The ten 8TB drives give me 80TB of usable capacity, and the mirrored 512GB SSDs let me saturate the 2.5Gbps link when taking backups or copying large amounts of data. A fantastic feature is the system’s ability to spin down the mechanical disks when they’re not needed, meaning the system should be using a minimal amount of power when the disks are not being accessed. There are a couple Docker containers running, yielding additional functionality on top of serving files that I originally didn’t intend to use, but even with everything running the system is using less than 10% of its available RAM and, after all backups have been completed (both my main system and Proxmox), only 23% of available disk space is being used.

Overall, I’m quite happy with this new box. However, I have no idea how much power it’s consuming, so I’ll have to get my hands on something to let me log that information.

But, did I meet my pricing requirement? Well, let’s see … the closest thing to what I built is a Synology RackStation RS3618xs, which costs $2799.99 bare (i.e. no drives) at B&H Photo & Video, which is where I buy most of my stuff now. If I fill all 12 drive bays with new 8TB WD Red disks at $179.99 each, it’d be $2159.88 on top of that, it comes out to $4959.87 (which also happens to be the cost of B&H’s RS3618xs + disks bundle). Adding a pair of 512GB NVMe drives ($49.99 each) and a Synology M2D20 dual-M.2 card ($169.99) yields a final price of $5229.84.

In reality, I got most of my stuff on eBay. That’s the mainboard, I/O shield, SATA DOMs, and 8TB disks. The Jonsbo N5, power supply, 92mm to 4″ fan adapter, 4″ hose coupler 4″ 90-degree elbow, and Dynatron copper heatsink came from Amazon. The 8GB ATP Nanodura USB drive came from DigiKey. The Unraid license came from Unraid, appropriately enough. All in, that’s $2362.07 — less than half the cost of the Synology solution. So, yes, the pricing requirement is more than met.

Is this the approach for everyone? No, absolutely not. However, it’s the approach for me, so I took it and am happy with the result.

Uncharacteristic

Yep, it’s another Shiba Inu post.

The American Kennel Club describes the Shiba Inu as “the most popular companion dog in Japan.” I’ve never been to Asia, much less Japan, but from what I understand the urban areas are quite densely-populated, leading to very tight living spaces; Shibas are pretty small, so they can fit into small spaces well.

The AKC also says that Shibas are “lovey-dovey” with their families. Until Kasha, I have never experienced this. Lilo and Daisy’s idea of affection was “I’m allowing you to be within six feet of me, what else do you want?” Kasha, on the other hand, will walk right up to you, stare you in the face, unleash a bark to get your attention, and not leave you alone until she receives pets. Sometimes she demands headpats or bellyrubs, but you absolutely have to give pets or you will be barked at until you do.

Is this what the AKC means, and what makes Shibas the most popular companion dogs in Japan? Is this how they normally behave, or is Kasha a weirdo among the breed? I’ve only ever heard of them described as “aloof” but this is something else.

A Year On

One year ago today, almost to the minute (since I started writing this post, at at least), since Daisy crossed the Rainbow Bridge. We still miss her every day; we keep pictures of her up on shelves and as backgrounds on our phones. We went so far as to get a plush replica of Daisy made that we keep on the counter near the front door.

With all of this you’d think we haven’t moved on. And to some extent, you’d be right: Daisy was with us for 14 and a half years, and it takes more than a year to get over a loss like that. My son is still younger than that as I write this — imagine the magnitude of a loss like that. Some people never get over that.

Before Christmas of last year, Kasha joined the family. I stand by what I said — that she is not a replacement for Daisy. It would be unfair to put that expectation on any dog, and it would be stupid for us to think of her in that way. Indeed, when we brought her home, she hid in a corner and generally kept her distance from the family. She refused to wear a collar or harness, had no clue what to do with stairs, and didn’t even want to eat. The “not eating” thing ended pretty quickly as she realized pretty quickly that it’s necessary for life. She also warmed up to the collar and harness, making walks a lot easier, and eventually figured out stairs too.

Kasha still has her moments. She occasionally forgets that she can go outside to poop and lets loose on the family room floor, at which point her more traumatic puppy mill memories take over and she cleans up after herself — meaning she eats the poop. It’ll take longer to train that out of her, but we’re making progress as that doesn’t happen all that often anymore.

She still has this one weird habit: she jumps up on the top of the sofa and licks the top of my head. But while she is 100% distinct, her own dog as it were, she has filled Daisy’s shoes in a very unique way — a way that only another Shiba Inu can. Yes, we still miss Daisy terribly, and we love Luna because she’s been here for us the whole time, but Kasha has found her place in this family and we love her just as much.

It’s still a Yes.

LGA 3647 was for Skylake and Cascade Lake, and the Xeon Gold 6254 was part of the latter generation. Make no mistake, 18 cores is nothing to shake a stick at, but who’d turn down more? Cascade Lake went up to 56 cores per socket, but those are 400W parts, which is a bit spicy for my taste and I didn’t have access to any. I did, however, have access to Xeon Platinum 8280, so I pulled the 6254 out and slapped the 8280 in. There’s not much of a tradeoff when used in a single-socket board: both parts have the same number of UPI links and the same amount of cache per core; but you take a 400 MHz base frequency hit; TDP increases by 5 W; and core count also increases by 10. In the end, VM/desktop/container performance is roughly the same because 400 MHz is really not all that significant these days, but it feels smoother overall.

It also helps that there was another decommissioned server with larger DIMMs, which allowed me to upgrade to 512GB. The main drawback of this whole thing, though, is that it takes a long time for the machine to boot. That’s the case with proper servers in general, though. I also swapped the Noctua air cooler for an Alphacool 360mm AIO, as it has a huge cold plate that can cover the Xeon’s IHS.

Speaking of long boot times, on Memorial Day I picked up a Gigabyte B650 mainboard, 32GB of DDR5-6000 RAM, and a Ryzen 7 7800X3D. Yes, I’ve upgraded from Zen 3 to Zen 4. According to the reviews, Zen 4 takes a long time to start up due to RAM training or something along those lines, but it actually boots faster than the 5900X did, even with the EXPO profile enabled. I also put a DeepCool Mystique 360 on the CPU, which I’ve taken to calling the “Mistake 360” instead as they’ve been banned from operating in the US. Also, despite connecting to the RGB header on the mainboard, and running a node.js application on Windows to configure the screen, there is no way to configure the thing in Linux — and DeepCool’s support was not willing to provide any manner of assistance.

Not gonna touch the Crowdstrike thing, as it didn’t really impact us at work all that much; also not gonna touch the Intel 13th- and 14th-gen issues since there’s no definitive answer to that question yet.

Bitten Again

Every now and then I get an idea. It’s typically not an original idea, in that commercial products to do what I’m trying to do already exist, but it’s an idea nonetheless. I like to think that knowing how those commercial products are built may come in handy for one reason or another.

The physical computing bug has bitten me once again, but this time I want to do more than just capture and log environmental data; I want to control things.

The idea stems from a vacation my parents took this year. Don’t get me wrong, I have no problem heading over to their house and checking on/watering their plants, but wouldn’t it be pretty cool if there was a “set and forget” system that would just do the work for them? To that end, I have started collecting components to build a self-refilling irrigation bucket. It’s an interesting sequence of words to be sure, and it’s not completely automated, but it’d be pretty cool if I can build a working device.

I had a couple of design ideas in mind, but settled on a microcontroller in a weather-resistant project box on top of a 3 to 5 gallon bucket with a lid. There are several sensors involved:

  • The most obvious sensor is for soil moisture. It doesn’t make sense to water a plant that’s already been watered, does it? I don’t recall which one I ordered, but I believe it’s the one that senses temperature and humidity.
  • A slightly less-obvious sensor is for water level. I’m not measuring the amount of water entering or leaving the bucket, so the best way to determine when to refill — and how much water to let in — is by sensing how high the water is inside the bucket.
  • The least-obvious sensor is for ambient light. I’ve always been told that it’s advisable to water plants toward the end of the day, and as it tends to get dark around that time, sensing how much light is around is reasonable.

So, that’s all input. If I’m going to control things, it’ll need output as well — and not just a screen or a blinking light or a speaker. No, it’s going to be water this time.

  • The supply of water into the bucket is provided by a garden hose connected to a solenoid valve. When the water level sensor detects that the water reaches a certain height, the microcontroller opens the valve, allowing water into the bucket; once the water reaches the “full” level, the microcontroller closes the valve.
  • Water is supplied to the plant by a tube that is submerged in the water, in the bucket. The tube behaves like a soaker hose: it is positioned on (or slightly above) the soil around the plant. The pump isn’t controlled directly by the microcontroller; rather, it activates a relay to start the pump.
  • A monochrome OLED screen shows current readings/status: water level, ambient light level, temperature, pump/solenoid state, and soil moisture level.

I need to observe how the soil moisture sensor behaves in order to determine how to stop the pump. If the sensor reacts quickly enough, I can deactivate the pump when the soil reaches a certain moisture threshold; if not, I can tell the pump to run for, say, 30 seconds at a time.

There is no internet connectivity required here. It doesn’t report stats, download updates, or anything like that — configuration must be done directly via USB cable. This is not a hard and fast requirement, but I like the idea of not having yet another thing connected to the internet.

Also, while this is a standalone device, only minor modifications would be required to make this “chainable.” This would introduce the requirement for multiple solenoids, which may also create the need for inter-microcontroller communication. That doesn’t necessitate Wi-Fi or cabled Ethernet either — but it’s something that would need to be considered later on.

So … can’t wait for the parts to get in.

Yes.

Some time ago I asked if a server could be my workstation and, shortly after that, I answered “no.” My opinion has recently changed.

My previous experiment involved an Ivy Bridge EP part with DDR3 memory. Numerous computers have spoiled me over the years when it comes to performance, even the low-power laptop parts, but despite being a 130W 10-core/20-thread CPU with a 3 GHz base frequency, it just didn’t cut it as a daily-use workstation, even with 128GB of memory behind it. Disheartening, really, especially given that even marginally newer desktop rigs with that amount of RAM are absolute monsters.

Long story short, I’m now running a Xeon Gold 6254 in a single-socket workstation board. It’s air-cooled, sitting under a Noctua NH-U14S DX-4677 with an extra fan attached, wrapped up inside a Fractal Design Torrent case with its two 180mm front fans and three 140mm bottom fans. I know how the 6254 behaves in a server, but as it turns out, it’s frightening as a workstation. It’s roughly equivalent to the i9-10980XE in spec, with a 100MHz higher base frequency and a 600MHz lower max turbo, same amount of cache, and 35W higher TDP, but ridiculously smooth. Runs desktop workloads, virtual machines, ZFS, and containers concurrently with no discernible latency.

The cool thing, though? This thing supports up to 1TB of RAM. It’s currently running 256GB, which probably helps quite a bit with that latency, but the fact that I can multiply that by four if I can get my hands on enough DIMMs is insane.

So … yes. I can use a decommissioned server as a workstation. Thing is, it needs to be powerful enough.

Speaking of powerful enough, I’m posting this from the most expensive laptop I purchased since 2005. Still under $400, of course. It’s an HP Dev One, which was only sold in one spec: Ryzen 7 5850u, 16GB DDR4, 1TB NVMe, 1920×1080 display, but the previous owner upgraded this one to 64GB of RAM. So, I’ve got the same amount of RAM on my lap as I do on top of my desk in the home office, which is pretty remarkable now that I think about it. The only thing I’d change about it is the wifi card, which is already happening: an 802.11ax Intel card is already on the way.

Whole Again?

There’s a question mark at the end of the title because it’s still early days, but the family is whole again.

In early 2017 I stumbled upon a Shiba rescue website while I was looking for a friend for Daisy. I figured she’d want another Shiba friend, having lost Lilo in December. The site was for Midwest Shiba Inu Rescue (MSIR), and the URL is, appropriately enough, www.shibarescue.org. I checked every month, but at the time we didn’t really have the extra time to dedicate to another dog, especially one needs as unique as a Shiba Inu.

The “extra time” item was resolved in early 2020 by complete chance. A certain global event occurred that ended up forcing us to stay at home a lot more than ever before, and in July of 2020, Daisy was joined by the polar opposite of a Shiba Inu, who we named Luna. Based on her genetic test results, she’s a Poodle/Labrador mix, but looks mostly Lab. Frankly the only thing Poodle about her is the length of her legs and, maybe, the shape of her snout. I’ve mentioned before that this invigorated Daisy like nobody’s business; it was clear that a friend was was exactly what she needed.

Daisy was an integral part of our family and the house truly felt empty without her. Luna enjoyed the extra attention, but it was clear that she was lonely. I looked at the camera in the living room every now and then, and she just sat on the sofa staring out the window the way Daisy did in her younger days. So, it was back to the Shiba Rescue website. Julie had the same idea, and when she saw a picture on MSIR’s Facebook page, she knew Luna wouldn’t be lonely for long.

Every rescue organization has their own vetting process, and passing Chicagoland Lab Rescue’s for Luna didn’t guarantee we’d make it through MSIR’s. However, given the 14 years of experience with Daisy and the additional years with Lilo, we passed theirs too. One thing led to another and, earlier this week, we headed up to Minneapolis to pay this Shiba a visit in her foster home. By “we” I mean the five of us: Julie, the kids, Luna, and me. I think things went well — I don’t usually have a feel for these things — but given the first line of this post you can probably put two and two together.

We returned from Minneapolis with a sixth passenger in the Honda of Fury: a small, young female Shiba named Kasha. She’s not puppy young, coming in at 1.5 to 2 years old, but she’s much smaller than one would expect of a Shiba this age. She’s quite timid, preferring to stay in a corner amongst her toys rather than run jump up on the furniture and gnaw at shoes. However, she and Luna get along quite well, with Luna occasionally lying down in front of her as if to protect her from some threat across the room.

From what we understand she was rescued from a breeder that was “getting rid of dogs they couldn’t use anymore.” The phrasing of that sentence kind of makes the hairs on the back of my neck stand on end. What does “getting rid of” mean? MSIR doesn’t buy Shibas from breeders or at auction, and I have evidence to back that up for Kasha’s specific case, so “getting rid of” clearly doesn’t mean “selling.” Does that mean they were killing the dogs they couldn’t use anymore? Abandoning them on the side of the road? Putting them in a box and leaving them behind a Home Depot or something? Honestly, I don’t want to speculate. It actually makes me angry to think that someone would do something like that to an animal, especially one like this.

Kasha’s coat is best described as “saddleback,” which doesn’t conform to the breed standard. Is that why they “couldn’t use” her? That’s not what a responsible Shiba Inu breeder would do. Quite honestly, she looks like someone took a double-exposure photo of Lilo and Daisy. That doesn’t mean she deserves to be gotten rid of, though; she still deserves to live with a family that loves her for what she is, and that is a Shiba Inu. Cat software running on dog hardware. A squirmy escape artist that will love you, but be extremely subtle about it so you don’t notice because being obvious doesn’t look cool.

So now, Kasha’s lying on the rug, biting her crinkly toys every now and then. She’s still getting used to her new surroundings, and it’ll take a while for her to fully open up. But, she’s a part of the family now, and we’ll help her however we can. We wouldn’t have submitted the application if we weren’t ready for it.

Red to Green

I’ve been an AMD GPU user for a decent amount of time. Back in the day I used an ATI All-In-Wonder card in my Windows XP MCE PC, and kept with that pattern until it stopped being supported. There were some GeForce cards in there, but I was on Team Red for the most part. Then, I started editing video.

I’m not en expert at editing video by any stretch of the imagination. I go to my kids’ sporting events, point my camera at ’em, hit the record button, and just … keep the lens on my kid. At first I shot video with my phone like any other parent, but I grew to dislike the video quality: the image stabilization on my regular iPhone 12 was lacking. So, I pulled my OnePlus 7T out of the drawer, factory reset it, and used its nice optical image stabilization feature to get some steadier footage. The mic in that phone was marginal at best, though, as the right channel liked dropping out at random. That’s when I started recording video on both phones simultaneously and combining the video from the OnePlus with the audio from the iPhone, but that’s exactly as dumb as it sounds.

It was time to upgrade. I put the iPhone into a cage, mounted an external mic to it, and sat it all on a gimbal. That made a huge difference in audio quality and picture smoothness, but it still wasn’t what I was looking for. eBay held my answer: a Sony a6400 mirrorless camera. B&H held the other part of the answer: a zoom lens that was good enough to get me close to the action (so to speak) but light enough to sit on the gimbal. The external mic worked just fine with the camera too, so I was pretty much all set.

I started noticing the roughness around the edges of kdenlive, so I installed DaVinci Resolve. This is where the drama began. See, I was on Pop!_OS at the time, and for the life of me I couldn’t get Resolve to play nicely with my Radeon RX 6750 XT, so I hopped over to EndeavourOS and … magic. Resolve worked beautifully, but there were so many workarounds I had to employ in order to get it to work it was nuts. The free version of the software didn’t support the CODEC the camera used, so I had to transcode before editing. Then, once I finished, I had to transcode after exporting, since the files that came out of Resolve were enormous.

I simultaneously got sick of it and wanted more, so I hit B&H again and bought a bundle containing the DaVinci Resolve Speed Editor and a Studio license. That solved the pre-edit transcode problem right away, and gave me access to a whole bunch of additional goodies. The files that were coming out of Resolve were still huge, though, but it wasn’t anything Handbrake couldn’t handle.

As the sports seasons progressed, my recording techniques got more refined, and the resulting videos started looking better. I did something that I should have done ages ago and disabled automatic white balance, setting it to 5500K and using a Datacolor Spyder Checkr 24 to calibrate instead. I also started shooting in S-Log3/S-Gamut3.Cine, which gave me a lot more control over what the finished product looked like, as DaVinci Resolve is really good for color grading. That, of course, meant that I had to learn how to color grade … which I kind of did, but nowhere near professional capacity.

I’ve been alright with the result, but it took a while to get there. The last video I edited turned out to be about 13 minutes long, but took over half an hour to render to DNxHR using the 6750 XT, and nearly 90 minutes to transcode to H.265. Additionally, as new versions of Resolve Studio were released, the number of hours spent troubleshooting OpenCL-related issues increased. I knew something was missing, but there was no way I was going to crawl back into Redmond’s cold, unfeeling arms to see what it was. So, I crawled back into NVIDIA’s cold, unfeeling arms instead by replacing the 6750 XT with a 4070.

Instantly, 80% of my games broke. That was my fault, though, as I’d set a bunch of command line arguments in Steam to force certain operating modes; as soon as I removed them, everything worked. Cyberpunk 2077 runs at 2560×1440 with RT High settings, between 50 and 60 fps at all times. The fans on the GPU simply don’t spin most of the time, which makes the machine sip power when it’s idle. The real test, though, was Resolve Studio: what would happen on first launch?

As I had already replaced all AMD OpenCL packages with their NVIDIA counterparts, first launch was completely unremarkable. The software started, which is a low bar to clear but one that I couldn’t necessarily pass with the 6750. Second test: open the last video I edited and see how long it took to render. Recall that the total process took two steps (render + Handbrake) and around 2 hours before. With the 4070, it took less than 10 minutes and a single step. With the NVIDIA drivers installed, Resolve can export directly to H.265 without any intermediate steps, offloading completely onto the GPU, and the resulting file is half the size on disk with identical quality. I was at a loss for words. What was I doing before?

Why did I subject myself to the excessively long rendering and transcoding times I experienced with the AMD GPU when I knew full well that the NVIDIA performed better with such projects due to the feedback from the creative team at work? It couldn’t have been in the name of open source. I try to be a bit more pragmatic than that when it comes to the software I run on top of the OS, as evidenced by the fact that I use DaVinci Resolve Studio and hardware built specifically for it, and despite the famous video clip of Linus Torvalds’s legendary opinion on NVIDIA, I’ve used their stuff before and didn’t hate it. So … why did I waste hours of my life waiting for these operations?

The question is somewhat open-ended as I haven’t really found a satisfactory answer. I knew Zen3 was a multimedia powerhouse, especially in its Ryzen 9 and Threadripper forms, but I am also conscious of the fact that GPUs are vastly different architectures and don’t have the same core competencies as general-purpose CPUs. I knew NVIDIA performed better than AMD in general and in creative workloads, but I didn’t know the performance delta was this wide. This has triggered somewhat of an existential crisis, and I don’t like it. However, what I do like is the performance — can’t argue with results after all.

And Then There Was One

This post is uncharacteristically long and heavy. It took three days to write. Buckle up.

I can’t say I wasn’t allowed to have a pet as a child. I had several species of freshwater fish. Nothing exotic or over-the-top, just your typical goldfish, neon tetras, and assorted gouramis over the span of many years. There were small aquatic frogs in there as well. At one point I had a half-dozen or so hermit crabs named Bob, mainly because I couldn’t tell the difference between ’em, and because they’d occasionally swap shells overnight so it was never really possible to tell which was which. However, my sister and I were never allowed a dog, point-blank. There was no discussion, no argument, just a solid wall of no.

So, of course, as soon as we each moved out and got married, we got our own dogs. My wife had several growing up, so she knew her way around caring for a puppy. We were still dating when her family got the most recent one, and I was able to see a lot of the early stages of the puppy’s upbringing, so I kind of knew what to expect. That puppy was Lilo, a red female Shiba Inu.

At that point in late 2006, I didn’t know what a Shiba Inu was. Cryptocurrency didn’t exist, and neither did the “doge” face meme that appeared alongside Dogecoin. Lilo was my first exposure to the breed, and while she had a love-hate relationship with me during the first few of years, we ended up figuring each other out, and I grew to love the Shiba Inu personality.

Julie and I got married in 2007 and, in early 2009, we made the decision to get a dog of our own. Our search ended in Gurnee, Illinois with a tiny, 6-week-old, black Shiba Inu named Saki; on June 8, 2009, we brought her home, decided “Saki” just wouldn’t do — us giving a Shiba Inu a Japanese-sounding name just seemed played-out — and renamed her Daisy.

Daisy became the focus of our lives. We found ways to be with Daisy, or to have Daisy with us, even if we couldn’t physically be in the same space: setting up a laptop on a tray table with Skype on a webcam, projecting a continuous webcam view of Daisy’s enclosure on a wall at the office for all to see (the PuppyCam), two-way conversations via whatever random software I could find that day … whatever worked. We were able to teach her that the way to the bathroom was through the sliding door downstairs, and she’d wait patiently for us to grab her leash and take her out. Daisy learned very quickly who brought her food, and she never — and I mean that in the strictest sense of the word, absolutely never — bit any of our hands when we were near her while she ate. When Julie or I put our hands into her food bowl while she was eating, she’d simply stop and wait for us to take ’em out before resuming. We played with her paws, and she had no problem with us trimming her claws, though she preferred Dremels to clippers. She would sit in my lap, give me a paw, and just stare off at her surroundings while I worked.

She didn’t care for baths, though. She’d tolerate them, sure, because she knew we wouldn’t hurt her, but they were not her favorite. Daisy preferred to lie down somewhere and lick herself clean like a cat.

We took her to some group training classes being held in the large back room of a local PetSmart so she could be exposed to other dogs and learn a couple things, and while she was about as stubborn as Wikipedia would describe a Shiba Inu to be, she did pick up some good habits and earned the privilege of wearing the silly graduation cap.

Julie and I decided to start a family in 2010. Daisy was aware something was changing due to the increased activity around the house and such, and she did not leave Julie’s side throughout her pregnancy. She was protective of whatever it was that was in Julie’s belly, but not to the point of violence. When our son arrived, Daisy was skeptical at first: one of my favorite pictures of that time was when Julie was sitting on our sofa holding our screaming infant son, and Daisy was sitting on the sofa opposite her, leaning back in shock at the noisy object. Captures the moment perfectly.

And so, that is how Daisy was introduced to our son at the age of 15 months. While she didn’t quite act like a sister, being a dog and all, she took a liking to the tiny human and watched over him as he navigated the world. Being a Shiba Inu she kept her distance and made it look like she was detached from the situation entirely, but anyone with eyes could tell that she was being protective. As our son learned to walk, she was right there, following close behind and actually propping him up with her snout when he started to falter. I wish I were making this up as it sounds like something straight out of a cartoon; however, that’s exactly how it happened. She was a surrogate broom/mop as well, happily collecting the delicious morsels of whatever our son decided to throw from his high chair. She was quite selective, though, as she left some behind if the flavor wasn’t to her liking.

The “aloof” personality of the Shiba Inu is something that I really love about the breed. Most of the time, Daisy simply could not be bothered. During the day, she’d lie on the back of the sofa and look out the window absorbing the sun. As a puppy and a young adult, fireworks and thunderstorms really didn’t faze her. If anything she was looking changed, though, she’d make all manner of weird noises, making her a fantastic watchdog. Squirrel? Bark. Mail? Bark and run to the door. Car driving by? Stand up and bark. Someone familiar shows up? Definitely don’t bark — start howling and prancing around instead. And make no mistake, I’m using the word “bark” somewhat loosely here, as Shiba Inus … vocalize. They yodel, howl, squeak, scream … I think one of the more frequent sounds out of Daisy’s mouth was “rrr-ow” — a very nicely rolled “r”, at that — often repeated so it was more like “rrr-ow rrr-ow rrr-ow.” Not as a howl, either, more like she was trying to make it into a sentence, actually, with each occurrence descending in pitch until she was finished. It’s not the easiest to describe in text.

Our second child arrived shortly before Daisy reached the age of 5, and none of her behaviors toward babies changed. Daisy was right there behind the new baby girl the same way she was behind our son, exactly as caring as before. This little dog knew her way around human babies, and our human babies saw this little dog as the integral part of the family she was.

Almost two years after our second child arrived, Lilo passed away and Daisy remained as the only Shiba Inu in our lives. Daisy noticed, and we noticed that she noticed. She slowed down a bit, and was clearly missing Lilo, but after a bit she got used to being extra-spoiled. We started taking road trips all over the place, and Daisy had her own seat of honor in the minivan. It wasn’t a fixed seat — whatever seat she sat in was the seat of honor. She had earned it.

The year 2020 rolled around with all of the hot garbage it brought to everyone. Daisy was 11 years old, her tan fur fading, white hairs showing up among the black. She couldn’t run as fast as she used to anymore, and she’d started hiding under the bed or in the bathroom for storms, but other than that she was still the same Daisy, still as gentle and silly as usual. She’d been alone too long, though, so we decided to bring home a friend: on July 3 of 2020, Daisy met Luna, a Labrador mix we adopted via Chicagoland Lab Rescue, and was instantly reinvigorated. Luna, despite being just 9 weeks old, was almost as big as Daisy but was exceedingly clumsy, as you’d expect of a puppy. She was also overly playful, so Daisy had to keep up, and she adapted masterfully. Daisy took on the role of Luna’s surrogate mother despite having no experience being a mother herself, and she handled it like a natural. They did everything together: went on walks, played in the backyard, visited the vet, had spa days, slept in our bed.

Julie and I bought the camper in 2021, and we did not leave Luna or Daisy out. They came camping with us every time. Our camper had a loft for the kids, which Luna and Daisy loved to visit whenever they could, though Daisy did so with increasing difficulty. She wasn’t getting any younger after all, and Shibas tend to have hip and knee issues as they age.

Around mid-2023, Daisy stopped being able to climb up the stairs consistently. There were times she simply stopped at the bottom and waited for us to come get her; other times she felt like she could do it, but found out halfway up that she couldn’t and fell down. Those times were the worst; she wouldn’t scream, either. In fact, the way she reacted, she seemed almost ashamed about it. There was nothing to be ashamed of at all, though: she was 14 years old. In early June Daisy started stumbling all over the place, tripping over her own paws, tilting her head to the side — we didn’t know what to make of it and thought she’d had a stroke. We were terrified, and thought the worst; I’m going to have to take credit for floating the “we may need to make a really difficult decision soon” idea first. Julie took her to the vet, where the diagnosed it as vestibular disease, basically dog vertigo, and prescribed some meds. We were instructed not to allow her to go up and down the stairs by herself at all anymore, so Julie and I carried her up and down the stairs, and lifted her on and off the bed. We gave her the medications that the vet prescribed, and for the first time in her life she disagreed with the method I used to do so, attempting to bite my hand on a number of occasions. However, after a couple weeks of this, Daisy returned to her normal self.

Last Saturday, October 21, we headed out to the camper to clean it up and get it ready for winterization. It was just going to be an overnight trip, as we only needed to get toiletries, cleaning supplies, nonperishables, etc. out of there, as we didn’t want to risk anything freezing over the winter. As usual we took Daisy and Luna with us, though they rode in separate cars: Luna rode with me, and Daisy rode with Julie. At some point during the drive out to the campsite Daisy started screaming, which lasted for the rest of the ride out there — for a 90-minute drive, that’s torture. Julie and our daughter were quite upset by this, so I grabbed Daisy out of the minivan and walked around the campsite with her to see how she was. She seemed to be alright, waddling around, peeing on stuff, giving Luna the side-eye as usual. Her head tilt had returned, though. In the late afternoon I sat out on the deck alongside the camper and trimmed up her claws with the Dremel while she looked around at the trees and sniffed at the autumn wind.

The trip was short, but we were concerned, so Julie took Daisy to the emergency vet as soon as we got home on Sunday. They recognized it as vestibular disease again and prescribed fresh meds, but also drew some blood for labs. Monday morning I gave Daisy these meds in the usual form — stuffing them into a treat — and she ate ’em right up. When Julie came home, though, she found Daisy lying on the floor in a puddle of liquid excrement. Distressed, she called me and asked if I was on my way home. I was, and was happy to take over; she’d already cleaned up the puddle, but Daisy was still dirty, so I gave her a nice warm bath.

Not 30 minutes after her bath, I heard Daisy scream and looked over to see that situation play out again: Daisy, in a puddle of her own excrement. I quickly picked her up, crated Luna, rushed Daisy back to the bathtub, cleaned up the floor, and bathed Daisy again. I told Julie what happened and we thought it was due to the new medications being stronger than the old, since after this second occurrence, Daisy returned to her bowls to eat and drink.

Tuesday morning, the 24th, started out the same as the 23rd. We got up, I took the dogs out — Luna ran down the stairs and I carried Daisy. The kids refilled the food and water bowls as usual. I stuffed Daisy’s meds into a treat as usual, but she refused to take them. I didn’t blame her after what happened the night before, so I put the treat into a small Ziploc and put it on the kitchen counter behind a bunch of stuff so Luna wouldn’t get at it. Shortly before I left to take the kids to school Daisy threw up on the rug. I again attributed it to the strength of the medication and cleaned it up, but when Julie returned home, she saw a scene similar to Monday’s: Daisy in a puddle of urine, lying on her side. That’s too much to let slide, so Julie called me to ask if I was on my way. Again, I was, so as soon as I got home and parked in the garage, we all got into the minivan and we went to the vet. All four of us were more worried than ever about Daisy at this point, and the “difficult decision” talk came up multiple times during the relatively short ride. Upon arrival they immediately took Daisy into the back and started checking her out.

When the vet told us that Daisy’s temperature was quite high, even for a Shiba Inu, that her breathing wasn’t normal, and that her heartbeat was irregular and a murmur had developed, we knew Daisy was telling us it was time. That difficult decision we’d put out of our mind from 2009 until June of 2023 finally had to be made. We had originally wanted to have someone come to our house to perform the procedure in an environment where Daisy would be comfortable, but given the past few days, taking her home and waiting another 12-24 hours would have been nothing but torture. My first dog was in pain, was dying, and Julie and I made the decision to put an end to her suffering right then and there.

The vet inserted a catheter into Daisy’s front leg, wrapped her in a blanket, and brought her to us to say our goodbyes. Given how recent this was it’s a bit difficult to write about, so I won’t get into much detail, but after approximately half an hour we called the vet into the room. She came in with the drugs necessary to end Daisy’s life, explained the procedure, and began. The four of us put our hands on Daisy while Julie held her in her lap. The vet put Daisy to sleep with the first drug, cleaned the tubes with saline, and then administered the second drug to stop her heart. It was all over in less than a minute; she looked like she was asleep, finally at peace, not in pain. The vet left the room to give us another few minutes to say goodbye before the vet tech returned to take our Daisy away forever.

The lab results from Sunday’s emergency vet visit finally came back Wednesday morning: Daisy was experiencing heart and kidney failure at that time already. We found a minor amount of comfort in the decision we’d made the night before, but … Daisy’s still gone.

Last night, the 27th of October, I returned to the emergency vet’s office to pick up Daisy’s ashes. We’ve currently placed them in the china cabinet, until we find a better place. Luna’s been sniffing around for her, and rubbing her head where Daisy used to hang out, but she knows Daisy isn’t coming back; she hasn’t been barking as much as usual, and has shown a bit less activity. The kids are wrecked. Julie and I miss her as well. The house seems empty despite Luna being an 80-pound beast. I don’t feel like doing anything for Halloween. But … life’s continuing.

Daisy gave us everything. Sometimes I wonder if I gave her enough. She was the best first dog anyone could ever ask for … she was the best dog anyone could ask for full-stop. She cannot be replaced. The family will be getting another Shiba Inu, that is 100% certain — I’m ready to get in the car right now. However, we will miss Daisy ’til the end of our days, and as unfair as it may sound, every dog we have from here on out will have to live up to the standard she set.