We’re just about done with another year. It’s been a while since we did one of these picture posts. We’ve been meaning to do them more often. Maybe this year we really start the habbit.

It looks like the last time we did a picture post was 2020. Wow, the kids are a lot older and 2024 sure did feel a lot more normal.

Door Bell

Dec 21 2024

I had my first thoughts of wanting to do something with our doorbell a few years ago after we added our first smart home devices and tried to get a Ring doorbell, but it was too bulky to fit on our doorframe.

This idea remained vague until I saw a YouTube video, probably over a year ago, about how to turn an old doorbell into a smart home button. Once I saw that video, I knew I wanted that project to be my first foray into the world of small electronics, a world I have watched on YouTube for many years, waiting for the time to get into it.

Corn Maze 2024

Oct 3 2024

I just launched the Corn Maze app for the Crow River Winery for 2024 (year 3).

There’s some more background about it in a previous post. But I had a bit more time to put into it this year then I have had in the past so I thought I’d share a bit about the improvements I’ve managed to make this year and some general thoughts on how the project is going.

First off, a little bookkeeping. I have been using Goodreads for years now to track my reading. It’s still a pretty good platform, but it’s also just a lot. A lot of ads. A lot of features I don’t use, like “Reading Challenges,” and a lot of the “Community” stuff.

One of the things I’m going to try to do over the next five years, though, is attempt to self-host as many applications as I can. I found Jelu. I set it up a few days ago and so far, it’s been a pretty good experience. I’ll have some more thoughts on it below, but something you should know is that the data I brought over from Goodreads did not have everything in it I wanted. This is probably my fault, but I’m still in the process of cleaning things up. As a result, the books I’m looking at that I’ve read this year might not be all the ones I actually read this year.

The Problem

One of the crucial features I wanted <much-select> to support is value transformation and validation. This is important for configuring <much-select> to allow users to input “custom” values (not just the predefined options in the list) but you still need some guard rails on the values the user can enter. Accomplishing this through standard web APIs proved to be a daunting task. I tried some different things and I’m going to describe what I came up with and why.

Much Debouncing

Sep 29 2023

The Challenge

In the life cycle of a <much-select> a lot of events are triggered. Events can trigger additional events leading to big cascades of events that can block the main browser thread. We can prevent this from happening with debouncing.

Two example of this in <much-select>:

  1. Each keypress when a user is filtering down a list of options. If we debounce keypress events by a half a second or so the UI looks smoother and we do a lot less work.
  2. Updating the options in the <much-select> following a relevant DOM change. However, DOM changes can come in in rapid succession. Waiting a 10th of a second or so, for changes to stabilize/finish before updating the options saved a lot of work.

Changes and re-renders in the DOM can be costly. Reducing their frequency significantly improves the responsiveness of <much-select> and enables it to manage larger lists of options more efficiently.

The Problem

A lot of Options

I need <much-select> to support a lot of options. I’ve been testing with 10,000 options. <much-select> needs to be able to filter that list down “fast”. By that I mean it needs to feel fast to the user.

Big Options

The size (or length) of options also plays a role. If the options are fairly simple and short (e.g. city names), that’s a lot different than options with long labels and even longer descriptions (e.g. book titles).

Elm Inside a Web Component

A Whiny Introduction

This is part 1 of a story I never wanted to write. I have heard over and over again something along the lines of, “don’t make a UI widget, leave that to the platform or to someone else.” Those people are right.

What kind of UI widget, you ask? It’s that white whale, a multi-select widget. There are a lot of them out there. If I had spent more time studying the ones that folks have already made, I would probably have been better off, but when you’re doing a project in your spare time (at least it started out that way), just building it is a lot more fun.

Corn Maze 2022

Feb 1 2023

This past fall (autumn of 2022), I released my first ever computer game — created for the Crow River Winery’s Corn Maze.

Interested parties can check it out at cr2022.cornmaze.us. However, there isn’t much to do since the game is designed to be played on the actual corn maze. As it’s winter now, the maze is currently closed. Originally I’d planned to create a video explaining how the game works, but as with many aspects of the first iteration of this app, there simply wasn’t enough time.

2022s Best Books

Jan 19 2023

I’ve missed this post for a couple of years, which is too bad, I need to write more on my blog. I’ve got a whole bunch of draft posts, maybe this year I actually finish them.

Also, in case this is not clear, these are the best books that I managed to read in 2022. I’m sure there are more interesting lists of the best books that came out in 2022.