Repairing Couch Recliner Footrests

2025-09-25 10:37 - Making

My couch, with footrests in need of repair.

This is my old couch. I got it when I moved into Manhattan and it's followed me here to Maryland. I've already decided it's not going to move with me again. It was cheap when it was new, and it hasn't aged well. I really like the wide arm rests: good for arms, and leaning against, and resting objects on. But since the outside seats are recliners, they don't have a lot to attach to and have sagged after years of that usage. More obviously: the pleather surface of the footrests have worn away. I've wanted to improve this for a while but never got around to it.

A footrest, removed, prepped for repairs. One footrest repaired, one remaining to do.

Yesterday I finally got off my butt. At a local thrift store, I found a brown sheet for only a few bucks. This morning, I started work in earnest. For some reason I started by imagining a sewn cover, and wasted a lot of effort measuring and trying to lay out something that I could sew. I was hoping to leverage the built in elastic (this being a fitted sheet) to make it naturally "stick" to the footrest. Before too long I realized I'm doing upholstery so I simply got out the staple gun, and things went much quicker.

Each footrest got a piece of batting cut just smaller than it (can't add any thickness around the edges, or it won't fold back into the couch correctly) plus a piece of the sheet. This was stapled around the edges, then reattached. Look closely and you can see where I colored in (with black marker) the bright fabric backing, where the pleather part had worn off, a few years ago. And the much wider section of what has worn off now.

Couch with repaired footrests.

Here it is in place. The color certainly isn't a perfect match, but on the other hand it looks way better than the flaking broken surface underneath! The batting helps smooth out that roughness. A simple and cheap repair, but it will probably last as long as I need it to.

My Car's Windshield

2025-09-10 12:40 - General

When I bought my (used) car in late 2022, it had two minor problems: a couple small chips in the windshield, and the wiper blades hit each other. It's got opposed wipers, which sweep both from the center out (as opposed to the more typical parallel arrangement). The passenger side wiper is a bit lower, and would rise too quickly, striking the other blade during operation. But just barely. I didn't know why, and for a quick "fix" originally, I trimmed down the length of the wiper. It's got "beam" style blades, which made this practical. I kept making small adjustments, and I could see it getting better. But by the time it was no longer hitting anymore, I had removed four or five inches from that side.

The windshield chips were just cosmetic, and out of the way enough to not be a big deal. But at some point with a significant (ten or fifteen percent) discount via a credit card, I opted for repairs. I was warned that there's a chance for them to cause further damage, but I figured: it's just two tiny cosmetic chips, they don't even go all the way through the glass. It'll be fine. It wasn't. Ironically, the smaller of the two did fixes did end up causing a crack in the windshield. Just cosmetic, and the further out of the way one. And for about a year it was small, still minor. Then one day, overnight, the crack jumped all the way from the out of the way origin on the passenger side, right across the primary line of sight the whole way to the drivers' side. So I got the windshield replaced. I had avoided that originally because: The car has rain detectors to automatically control the wiper, and replacement glass might be worse, and because I fear how well the rear view mirror would be attached. But that all worked out alright in the end. (And I wish I went for replacement to begin with: not only would it have saved hassle, but it wasn't as expensive as I expected!) The installer complained that they had trouble aligning the wiper blades! (I think they could have just been folded out of the way on the hinges built into the arms, but apparently they were taken off!) And also commented that the nut holding one of the wiper arms on was incorrect. (Foreshadowing!)

Fast forward a while. I've still got the wiper weirdness, and I've also observed that the washer fluid filler neck is very loose: I think it makes space that the fluid easily evaporates out of, over time. I get far less usage out of it than I expect, between refills. The local junk yard alerted me that they got a C-Max in, so I went and I got two wiper arms to experiment with, and a washer fluid reservoir. I expected to bend one of the wiper arms, tilting the blade so it's less likely to interfere.

Well I got home with the extra blades and realized I didn't take note of which was which: left/right or driver/passenger side. The process of figuring it out made me realize: On my car, they're installed backwards! They've got bends and angles from the factory, and one is longer than the other. So I've now reversed them, and they operate perfectly, and with plenty of space between them during operation! (The spare junkyard arms had blades installed, no worse than what I've got now, so I took a full-length one from there, and still no interference!) Would have been an easy fix if I knew about it! Plus I think it will be a minor aerodynamic improvement: the old layout had one wiper sticking up higher than it should have, into the air stream.

As far as the washer fluid goes: the extra junkyard replacement is just as loose as mine. It sure seems like there's supposed to be a rubber gasket between the tank and the fill neck, which are separate pieces. I think I'll try to figure out a good way to make such a gasket. On the replacement parts, easy to work on outside of the car.

My Gaming History

2025-06-20 15:50 - Gaming

This was originally (at the date stamp above) a post that started when I used my PS3 for the first time in a while, and realized that its trophies were a record of my otherwise lost gaming history. Then I took some more effort to find equivalent data sets and gathered them together. Now I'm hoping to keep this up to date as a living document.

2008 DecemberPS3Grand Theft Auto IV
2009 FebruaryPS3LittleBigPlanet
 MarchPS3Mirror's Edge
 MayPS3Prince of Persia
 MayPS3The Elder Scrolls IV: Oblivion
 JulyPS3Fallout 3
 NovemberDSScribblenauts
 NovemberDSChrono Trigger
 NovemberDSProfessor Layton and The Diabolical Box
 DecemberPS3Valkyria Chronicles
2010 MarchPS3God of War
 MayPS3God of War II
 AugustPS3Rock Band 2
2011 AprilPS3Gran Turismo 5
2012 AprilPS3Lego Rock Band
 MayPS3Red Dead Redemption
 JunePS3inFamous
 JulyPS3Skyrim
2013 JunePS3Fallout: New Vegas
 JunePS3Catherine
 SeptemberPS3Grand Theft Auto V
 NovemberPS3Final Fantasy XIII
 DecemberPS3Gran Turismo 6
2014 FebruaryPS3Heavy Rain
 MarchPS3Dragon Age: Origins
 MarchPS3Tom Clancy's Splinter Cell HD
 AprilPS3Metal Gear Solid V: Ground Zeroes
 AprilPS3Uncharted: Drake's Fortune
 AprilPS3Tom Clancy's Splinter Cell Pandora Tomorrow HD
 MayPS3Uncharted 2: Among Thieves
 MayPS3Tom Clancy's Splinter Cell Chaos Theory HD
 JunePS3Uncharted 3: Drake's Deception
 JulyPS3Deus Ex: Human Revolution
2015 AprilPS3The Last of Us
 DecemberPS4Metal Gear Solid V: The Phantom Pain (100%)
2016 FebruaryPS4Fallout 4 (100%)
 AprilPS3Metal Gear Solid Peace Walker HD
 AugustSNESSuper Mario RPG
2017 FebruaryPS4Life Is Strange
 MarchPS4Mirror's Edge: Catalyst
 SeptemberWii UNew Super Mario Bros. U
 SeptemberPS3Persona 5
 OctoberPS4The Last Guardian
 December3DSSamus Returns
2018 MaySwitchSuper Mario Odyssey
 JunePS3L.A. Noire
 NovemberSwitchThe Legend of Zelda: Breath of the Wild
2019 JanuarySwitchInside
 JulyPS1Chrono Cross
 JulyPS3Bioshock Infinite
 JulyPS3Assassin's Creed: Brotherhood
 NovemberSwitchHollow Knight
 NovemberSwitchPuyo Puyo Tetris
 NovemberSwitchStardew Valley
 NovemberSwitchSteamWorld Dig
 NovemberSwitchSteamWorld Dig 2
 NovemberSwitchSuper Smash Bros. Ultimate
 NovemberSwitchSteamWorld Heist
 DecemberSwitchUntitled Goose Game
 DecemberSwitchGorogoa
 DecemberSwitchDeath Squared
2020 JanuarySwitchSnake Pass
 MaySwitchDead Cells
 JuneSwitchWhat the Golf?
 JuneSwitchPicross S
 AugustSwitchThe Turing Test
 AugustSwitchPicross S2
 AugustSwitchMr. Driller DrillLand
 AugustSwitchInvisible Inc.
 SeptemberSwitchCivilization VI
 SeptemberSwitchA Short Hike
 SeptemberSwitchThe Great Perhaps
 SeptemberSwitchBorderlands: GOTY
2021 MaySwitchBowser's Fury
 JuneSwitchBlue Fire
 JuneSwitchMew Super Mario Bros. U Deluxe
 JulySwitchPicross S3
 SeptemberSwitchHuman: Fall Flat
 SeptemberSwitchBaba Is You
 SeptemberGBAMario vs. Donkey Kong
 OctoberSwitchPicross S4
 DecemberSwitchMini Metro
 DecemberSwitchBoxboy! + Boxgirl!
2022 JulyPS5Astro's Playroom
 JulyPS5Gran Turismo 7
2023 MaySwitchThe Legend of Zelda: Tears of the Kingdom
 JulyPCPortal
 JulyPCPortal 2
 JulyPCPortal Stories: Mel
 JulyPCPortal Reloaded
 JulyPCKerbal Space Program
 OctoberSwitchGood Job!
 OctoberSwitchPicross S5
 OctoberSwitchSuper Mario Bros. Wonder
 OctoberPCThe Talos Principle
 DecemberPS3inFamous 2
2024 FebruaryPCCities: Skylines
 FebruarySwitchPikuniku
 FebruarySwitchPhoenx Wright: Ace Attorney Trilogy
 MarchPCFactorio
 MarchSwitchBlossom Tales
 AprilSwitchOceanhorn
 MaySwitchBastion
 MayPCAlba: A Wildlife Adventure
 MayPCHer Story
 MayPS3[Prototype]
 MayPCSlay the Spire
 JulyPS3Ratchet & Clank
 JulyPS3Beoynd: Two Souls
 OctoberSwitchSubnautica Below Zero
 OctoberSwitchLayton's Mystery Journey: Katrielle and the Millionaire's Conspiracy - Deluxe Edition
 OctoberPCSuperhot
 NovemberSwitchPicross S6
 DecemberPCBalatro
2025 FebruaryPS4Red Dead Redemption II
 MarchPCAntimatter Dimensions
 AprilSwitchYoshi's Crafted World
 MayPCBitBurner
 JunePCTandem: A Tale of Shadows
 JunePS3Flow, Flower, Journey
 JulyPS4Fallout 4 (replay w/ all DLC)
 AugustPCBraid
 AugustPCFirewatch
 AugustPS5Horizon: Forbidden West
 SeptemberPCHalf-Life
 SeptemberPCHalf-Life 2
 SeptemberPCHalf-Life 2: Episode One
 SeptemberPCTwo Point Hospital
 OctoberPCTurnip Boy Commits Tax Evasion
 OctoberSwitchTimespinner
 OctoberPCEscape Academy
 NovemberPCTrain Valley 2

Albino Squirrel

2025-06-11 19:55 - General

An albino squirrel.

Low quality image, because it's a skittish wild animal and I could only get the shot well zoomed in. But: I saw what must be an albino squirrel on my walk this morning. Those can't be too common.

The Fridge in the Kitchen

2025-05-21 07:28 - General

For a while now, but somewhat rarely, I've noticed a strange jittery sort of sawtooth pattern to the graph of the temperature in my kitchen. (I've got sensors scattered around the house, to enhance decisions around comfort and energy expenditure.)

Graph of kitchen temperature and refrigerator energy usage.

More recently, I added an energy sensor to the refrigerator. (I was doing some specific appliance energy measurements, as part of research into a solar power project.) Given a relatively stable outdoor temperature, so little baseline change, the kitchen temperature jaggies showed up. And I just realized: I'm measuring the waste heat of the refrigerator! It kicks on roughly once an hour, and the temperature jaggies turn upwards with the same cadence. (With a little delay, because the sensor is in the opposite corner of the room as the fridge.)

Plumbing My (Countertop) Dishwasher

2025-04-24 21:13 - Making

When I moved here, I knew I'd be without a dishwasher — which I had grown accustomed to. It's not really a big deal, but it is an inconvenience. I survived that way just fine for a couple years. I knew about "countertop" dishwashers. But they seemed to all require either a very awkward and probably destructive plumbing-in process, or used awkward sink faucet attachments (which would get in the way, needing to be hooked and unhooked each time). Possibly more hassle than the chore they'd be replacing. But then I learned about the existence of no-plumbing models: A drain hose simply runs towards the sink (or a bucket!), and water supply is simply poured in top, e.g. from a pitcher. I managed to find a cheap used one (~$300 new, $100 for the one I got) and have been enjoying it since.

But it does take four-ish round trips, waiting for the pitcher to fill, then carefully pouring it in without spilling. I've enjoyed the dishwasher enough that I put some thought into plumbing in the supply line. My used appliance didn't come with the original supply line, so it took some creativity. But I got a bit lucky!

The original supply line for the sink.

The supply for the sink is a ⅜" plastic line. After some measuring and research, I was confident I knew the thread (¾" BSP) for the inlet on the appliance. And I found an adapter from that to ⅜" push-in fitting.

My update: teeing the supply to feed both the sink and the dishwasher.

So with that adapter, and a hose and fitting kit I put this together: The existing incoming water supply now goes to a tee, which feeds the sink and also (via a shut off valve) the dishwasher. From there, it only takes two inconspicuous holes through the very back of the cabinet towards the fridge.

The dishwasher supply, hooked up. The dishwasher, in place between the sink and the fridge.

And there it is! Hooked it up with a 90° fitting to ensure there's no stress on the line, and set it back in place. If you look close, you can see the drain hose passing behind and then to the left of the faucet. When the dishwasher turns on, it opens a valve to fill its internal tank (which takes surprisingly long, perhaps it wants a bigger supply line) and from there it's all automatic. Worked first time, no leaks.

Balatro and Probability

2025-02-07 11:56 - Programming

I've been thoroughly enjoying Balatro lately. I've proceeded through the challenge mode, and completed 19 of the 20 challenges. The last one, though, seems very difficult. Enough that I went looking online for suggestions of how to beat it. I found a post claiming that the four of a kind hand is the winning strategy. I immediately scoffed. Drawing a four of a kind is just too hard! Right? Right??

I felt the need to validate my intuition, that it's too hard to draw a four of a kind. I tried to look up the chances online, but I have a problem. I want the chances for this game. It's a little like poker, but barely. Specifically: you draw a hand of eight cards. Then you get some number (three, normally) of discards, of up to five cards. Then you get some number of hands to play (four usually, so three can be "throw away" fake discards). Or: what I really want to know is how likely it is to: A) draw eight cards, then B) as necessary discard up to five of them, up to six times, and end up with a four of a kind in hand. Nothing I could search up quickly gave me the answer, but the "real answer" was to simply simulate it. I got nerd sniped, and as a result I did. Simulate it.

#!/usr/bin/env python

import collections
import random

DECK = list('23456789JQKA' * 4)
N = 10000

def draw_from(deck):
  i = random.randint(0, len(deck) - 1)
  return deck.pop(i)


results = []
for _ in range(N):
  deck = list(DECK)
  random.shuffle(deck)

  hand = []
  for _ in range(8):
    hand.append(draw_from(deck))

  for i in range(7):
    #print('hand', hand)
    cnt = collections.Counter(hand)
    com = cnt.most_common()
    if com[0][1] >= 4:
      #print('Found 4 of %s!' % com[0][0])
      results.append(i)
      break
    elif i == 6:
      results.append(None)
      break
    else:
      for _ in range(5):
        d = com[-1][0]
        cnt[d] -= 1
        com = [x for x in cnt.most_common() if x[1] > 0]
        #print('discard', d)
        hand.remove(d)
      for _ in range(5):
        hand.append(draw_from(deck))


for result, freq in collections.Counter(results).most_common():
  if result is None:
    print('Failed %.2f%%' % (freq / N * 100))
  else:
    print('Success with %d discards %.2f%%' % (result, (freq / N * 100)))

This is some quick and dirty code. I wrote it in almost exactly half an hour. (As of reading this post, I realize I shuffled the deck, so I didn't need the extra step of randomly choosing a card to draw. I could have "drawn from the top". Probably other minor mistakes of that nature. But I think it's a valid simulation.) And it tells me:

$ python four_of_a_kind.py
Failed 42.50%
Success with 6 discards 15.02%
Success with 5 discards 13.09%
Success with 4 discards 11.59%
Success with 3 discards 8.99%
Success with 2 discards 5.69%
Success with 1 discards 2.72%
Success with 0 discards 0.40%

Indeed: using "all six" discards results in only a slightly-under-60% chance of finding a four of a kind. In a standard 52 card deck. (Changing slightly each run, as this is a random simulation, not exact probability.) So this might be a workable strategy, but it requires some luck in manipulating your deck, to be able to make the four of a kind hand regularly.

Made in December (2024)

2024-12-24 18:31 - Making

Candles that I

I find something cozy and pleasant about having a candle burning, during the winter. I've managed to find old partially used bits of various candles from a few places. So for a while I've been remelting these into the containers for other candles. Over time I've figured it out and can generally produce a candle that burns nicely and consistently. Or at least I can fix it part way. (When necessary, which is getting more rare.) The hardest part is getting the wick nicely centered. My most preferred method now is to stick a metal rod down the middle, with some paper card at the top to keep that end centered. When I remove it, the wick has the perfect spot to go to. Since the wax shrinks as it cools I usually want to add a top-up anyway, and this fills the remainder of the hole.

Christmas cookies.

I also prepared some christmas cookies. These are "M&M Magic Bars". They didn't come out as pretty as the pictures, but they sure look scrumptions!

Ingredients and equipment gathered for my first all-grain brew. Reaching the "mash in" step. Boiling the wort. Wort and yeast in the fermenter.  Beer soon!

I took up home brewing this summer. I started with a very basic kit, then I tried making a hard cider (both turned out well), I made a mead (just bottled, haven't tried it yet besides tiny sips, seems good but strong), and then most recently I did an "all grain" brew. Above is the gathered ingredients and equipment, then the "mash in" step, where the grains are steeped in hot water to convert the starches to sugars. After these are carefully removed the "wort" as it's now called is boiled. Finally, it all goes in a vessel with some yeast to ferment. Since it was my first time with the full process, I had some learning opportunities, but I'm cautiously optimistic that it will turn out well. The yeast are definitely doing their work.

Quickly view installed (Gentoo, portage) package sizes

2024-12-13 11:04 - Linux

I've known about gentoolkit for a while. For that time equery has been my standard way to inspect portage. Turns out there's (a whole collection of useful portage tools, including) also the "q applets". These Q applets are typically faster, and one of them will report the installed size of packages.

$ qsize -m | sort -t , -k 3 -n | column -t -s ,
...
sys-devel/gcc: 1746 files (1742 unique)                  100 non-files    282 MiB
dev-lang/rust-bin: 131 files (125 unique)                31 non-files     474 MiB
sys-kernel/linux-firmware: 4204 files                    379 non-files    1218 MiB
sys-kernel/gentoo-sources: 81770 files                   5322 non-files   1291 MiB

I've got reason to inspect installed package size and I just found this. And it executes in only a few seconds on my machine with nearly 800 packages installed.