3D Printing

Today’s Functional Print: Filter Cage for the Blueair Blue Pure 311 Auto Air Purifier

The Blueair Blue Pure 311 Auto air purifier requires a plastic cage to support the filter. Theoretically, if you accidentally throw away the plastic cage when you change the filter, you will be unable to use the air purifier. Theoretically, if you have a friend with a 3D printer, you could ask them to design and print a new cage for you. Theoretically, this actually happened, and I was the friend.

I designed the cage to closely mimic the original, although I used circular holes instead of hexagonal to eliminate the need for most support material.

I tried printing just a short end-cap for each end of the filter to save time and plastic, but it turned out that it really did need the full structure to stop it from collapsing once the purifier is running.

It prints in two parts, but they don’t need to be glued together; the friction against the filter is enough to hold them in place.

The OpenSCAD and STL files are available on GitHub.

Standard
Woodworking

I designed a clothes rack that can be made out of one sheet of plywood

My wife manages a free clothing warehouse for foster children and parents; consequently, she needs lots of sturdy clothing racks that:

  1. Make efficient use of space, and
  2. Don’t cost a lot of money.

To meet this need, I designed and built a rack that accommodates up to 288″ of hanging space in a 30″ x 75″ footprint, and it costs one sheet of plywood plus the cost of the hanging hardware. This is about what it would cost to buy a commercial hanging rack that has 40% of that capacity.

It takes about three hours to build from start to finish; if you build two or three at once, you can get your per-rack time closer to two hours.

Here’s the rack in its natural habitat, waiting for the young clothing to approach so it can attack.

The rack has pounced, filling its belly with winter clothes and pajamas. The rack deserves a nap after this productive hunt indeed.

Here’s a line of seven racks holding 3.1% of a mile of clothing:

If you’d like a copy of the plans, email me at cfinke@gmail.com or leave a comment below.

Standard
3D Printing

Today’s Functional Print: Microwave Feet

You know how your microwave slides around on the countertop because its hard plastic feet don’t grip on the smooth quartz? Same!

To solve this problem, I had tried putting little adhesive pads under the existing feet, but the surface area was too small to resist the force of the door opening and shutting. So, I printed larger feet to fit around the existing feet so that I could use 2″ carpet tape underneath them. Problem solved! Now I can close the microwave door as violently as I want without it moving an inch.

The OpenSCAD file and and STL are available on GitHub.

Standard
Woodworking

I made a spice cabinet slash measuring cup cabinet slash measuring spoon cabinet

Ever since we finished remodeling our kitchen, we had been storing our spices in a drawer using an organization method known as “a pile.”

I promised my wife I would build a cabinet to organize the spices, so I did:

The spice shelves are adjustable; I also included a magnetic bar to hold the measuring cups and a steel bar to hold the magnetic measuring spoons. I added magnets to the corner of the door and cabinet to hold the door shut, since the weight of the spices makes it want to pull open slightly.

Standard
3D Printing, Maker

Today’s Functional Print: A Custom Birdseed Funnel

We have a birdfeeder that looks like a barn, and you refill it by pouring birdseed through the chimney. This is prone to spilled seed, and a regular funnel often clogs with the larger sunflower seeds. To solve this, I designed and printed a custom square funnel:

It’s square to both create the largest possible opening into the feeder and to allow it to rest evenly on top of the chimney while the feeder is being filled.

The STL and SCAD file are available on GitHub; you can customize the funnel by editing the parameters at the top of the SCAD file.

Standard
Metermaid, Programming, WordPress

Metermaid: Easy Water Meter Tracking, Powered By WordPress

My house’s water is supplied by a well. This well is shared with a dozen other houses, all of which have water meters to track usage. Several years ago, I was volunteered to be the president of this water association, and with this position came the responsibility for tracking water usage to ensure that we’re not losing water to leaks or unauthorized usage.

For a couple of years, I just used a spreadsheet to track meter readings, but I felt like the data I was collecting could be so much more useful in a custom-built application, so I built Metermaid.

Metermaid is a WordPress plugin that adds a dashboard for tracking meter readings. Once you’ve entered some readings, it will begin charting gallons per day over time, comparing usage from this year against previous years, and even highlighting situations where water is potentially being lost due to broken pipes. It’s useful for tracking a single meter or tracking hundreds of meters.

To get started, install and activate Metermaid (available on Github) and then open the “Metermaid” menu item:

Click “Add Meter” to add your meters.

Once you enter meter readings, you will see charts showing gallons per day compared across years and gallons YTD compared across years.

Scroll down, and you’ll see all previous readings.

What are child meters and parent meters?

Metermaid supports the concept of “child meters” and “parent meters.”

A child meter is a meter that only counts usage that is already counted by a meter further upstream (the parent meter).

Imagine you have a well. At the well, there is a pump, and the pump pushes water to three houses. Directly after the pump, there is a meter that counts all gallons that the pump outputs. This is the parent meter. The three house meters are child meters. Their combined readings should equal the reading of the parent meter.

When you set up child and parent meters and then enter readings for all meters in a system on the same days, Metermaid will calculate how much water might be getting lost in the system, either through leaks or unmetered usage. For example, this real-world example shows a parent meter that measured 6.3% higher than the sum of its children meters across a six-month period.

This discrepancy could be due to unmetered water usage, inaccurate meters, or a leak in the distribution system. (It was a leak in the distribution system — an old repair had failed, but with this Metermaid feature, I was able to track it down and get it fixed.)

What is a supplement?

Metermaid also supports the concept of supplementary water. “Supplements” are a way to track water that is added to a system between a parent and a child meter.

Imagine you have a well, and a pump pumps water from the well into a holding tank, from which three houses draw. Your well pump breaks, so you have water delivered directly into your holding tank. Without tracking this supplementary water, it will appear that the houses have used more water than the well provided.

“Real” readings

Metermaid also solves the annoying issue of meter rollovers by using “real readings.” Imagine you have a water meter that reads 999999. The next day, you check the meter, and it reads 000001. Even though the meter shows a single gallon, its real reading is actually 1,000,001 gallons. Metermaid automatically calculates what the true reading of a meter is based on previous readings.

Real readings are recalculated any time you add or delete a reading, so adding historical meter data will only make them more accurate.

It is possible for the real reading to be wrong due to lack of data. If you read a 6-wheel meter on January 1 and it reads 500000 and then you check it again on February 1, and it reads 600000, there’s no way to know whether it measured 100,000 gallons or 1,100,000, and Metermaid will assume 100,000. If you added a reading from January 15 of 900000, then Metermaid would correctly update the real reading to 1600000.

Metermaid is available for free on Github. Contact me with any questions.

Standard
Backyard Chickens, Woodworking

I Designed and Built a Simple Roll-Out Chicken Nesting Box

Chickens lay eggs — this much is true. Chickens also eat eggs — this much is also true. If you want to have chickens, and you want to have eggs, you need to either quickly collect them or prevent the chickens from reaching them. I designed and built a simple plywood nesting box that allows the eggs to roll out of reach of the chickens so you can collect them later.

The nesting box is built entirely out of less than a sheet of plywood, costing about $40 in materials. From start (a single, uncut sheet of plywood) to finish (chickens sitting in the box in their coop), it took me about 90 minutes to build while following my plans.

The idea is simple: roughly cubic nesting areas with a sloped floor (about 9º), and a barrier that prevents the chickens from pecking at their eggs after they’ve rolled away. Add some padding underneath the chickens and against the back wall to prevent eggs from cracking, and you’ve got a recipe for success (and you’ll need recipes for eggs).

Obviously, she loves it.

The eggs don’t always roll directly to the back, but every time a chicken moves around in the nesting area, she’ll push the egg further back until it is eventually unreachable.

If you want a copy of the plans, either leave a comment below or email me at cfinke@gmail.com.

Standard
Cooking, Food

Cooking Around the World: Canada

There’s nothing more Canadian than poutine: fries covered in cheese curds and gravy. I also bought some pulled pork as an additional topping option, but it was unnecessary.

Previous Entries in Cooking Around the World

Standard
Cooking, Food

Cooking Around the World: Cameroon

For our Cameroonian dish, I made Poulet D. G. It’s essentially chicken braised in a parsley/onion sauce. The chicken was nice and juicy (I used thighs), but I found the sauce to be pretty bland, which was surprising given how much onion, garlic, and parsley was in it. It also didn’t photograph especially well.

Continue reading
Standard
Cooking, Food

Cooking Around the World: Cambodia

For our culinary trip to Camboda, I made Char Kroeung Sach Ko, a stir-fried beef dish containing lemongrass, galangal, lime leaves, and turmeric. I wasn’t able to find galangal, but it turned out ok. I probably overcooked the beef and cooked at at too low of a temperature though. We ate it over rice noodles.

Continue reading
Standard
HTML, JavaScript, Programming

Run Your Own Television Network with Channel Two

YouTube allows anyone to be the star in their own television show, but the true dream job of every little girl and boy has still been out of reach: Vice President of Program Scheduling. But today, that dream becomes reality.

Channel Two is a web application I’ve written that allows you to run your own TV network in a Web browser. You simply define your programming schedule and open a browser tab — it’s just that easy!

A screenshot of Channel Two broadcasting an episode of NewsRadio. It includes a chyron with the text "You're watching NewsRadio - Led Zeppelin Boxed Set." The browser chrome is visible, but Channel Two normally runs in full-screen mode.

What can Channel Two do?

  • It can play random home movies all day.
  • It can play a new episode of Seinfeld every night at 6pm.
  • It can pick a random G-rated or PG-rated movie to play every Saturday afternoon.
  • It can automatically insert commercial breaks into episodes of TV shows.
  • It can play Groundhog Day all day on February 2nd.
  • And it can do all of this for free (assuming that you already own this content and have digitized it).

Why would I use this?

Do you have a digital media library that you never watch anything from because it’s too cumbersome to sift through? Do you have home movies that you don’t ever see because it takes too long to pick one? Do you want a family-friendly TV channel available in your house where you control all of the content? Channel Two solves all of these problems.

How does it work?

Channel Two begins with the schedule file. It’s similar to a crontab file — every line defines the time to perform some task; in this case, the task is playing a specific video or a video selected from a directory.

Here’s an example Channel Two schedule:

shuffle=true
* * * * * /Media/Home Movies/
shuffle=false

0 7 * * * /Media/TV/Backyardigans/
30 7 * * * /Media/TV/Curious George/
0 12 * * * https://example.com/noon-affirmations.mp4

shuffle=true
0 14 * * * /Media/Movies/Rated-G/
0 14 * * * /Media/Movies/Rated-PG/
shuffle=false

0 17 * * * /Media/TV/Planet Earth/

ads=/Media/Ads/

0 20 * * * /Media/TV/Green Acres/
30 20 * * * /Media/TV/Gilligan's Island/
0 21 * * * /Media/TV/The Beverly Hillbillies/
30 21 * * * /Media/TV/Petticoat Junction/

0 20 * * 4 /Media/TV/The Office/

(If you’re not familiar with cron, read this for some background.)

In plain English, this file tells Channel Two to do the following:

  1. At 7am and 7:30am, play episodes of Backyardigans and Curious George. Each day, it will automatically play the next episode of each series in order.
  2. At noon, play the file from the URL https://example.com/noon-affirmations.mp4.
  3. At 2pm, play a random movie from the directories /Media/Movies/Rated-G/ and /Media/Movies/Rated-PG/
  4. At 5pm, play an episode of Planet Earth.
  5. Every night from 8-10pm, play a block of vintage programming: Green Acres, Gilligan’s Island, The Beverly Hillbillies, and Petticoat Junction…
  6. …except on Thursday nights at 8pm, play an episode of The Office. (A line at the bottom of the schedule takes priority over the lines above it.)
  7. Any time when there is nothing else scheduled, play a random home movie.

What happens when there’s nothing for Channel Two to play? If you don’t set backup programming with a line like * * * * * /Media/my-videos/ it’s possible that there will come a time when Channel Two has nothing to do. In this case, it will show a spiffy placeholder until it’s time to play something:

You can customize this by replacing the file assets/right-back.gif.

Capitalism

The lines shuffle=true and shuffle=false turn shuffle mode on and off, but what about the line ads=/Media/Ads/? That unlocks the true power of TV: commercials!

If you tell Channel Two which directory you’ve filled with ads, it will do two things:

  1. It will automatically detect ad breaks in TV shows and movies by watching for when the show fades to black. At this point, it will insert up to five commercials and then resume the show. (It also ensures that it hasn’t taken an ad break too recently and that there is enough time in the current programming slot to play ads without causing the show to overlap the next timeslot.)
  2. When a show or movie ends, it will play ads until the next half-hour mark (or until the next show begins).

Tip: You can find many many many TV commercials on certain Internet video sites, and tools exist to download them to your own computer. I can confirm that commercials from your youth can hold just as much nostalgia as actual TV shows and movies. ¡Yo quiero Taco Bell!

Once you have Channel Two open and running, it will play programming continuously forever (or until you close the browser tab, whichever comes first). To get the full effect and benefit of controlling your own TV station, I recommend either mirroring your computer screen to a television, or go all the way like I did and buy a digital RF modulator and permanently broadcast your media server’s screen on the channel of your choice so that all the TVs in your house can tune in.

I want to see it in action, but I don’t want to expend any effort.

You can view a demo version of Channel Two here on my website — it only plays three (public domain) videos, but it should give you an idea of how it works. The schedule.txt file for this installation looks like this, which ensures that the videos will always play back-to-back:

base=/home/cfinke/

* * * * * /media/His Girl Friday - Get Out.mp4
* * * * * /media/It's a Wonderful Life - Lasso the Moon.mp4
* * * * * /media/The General.mp4

Does Channel Two have any additional features?

It sure does. Channel Two displays a chyron at the beginning of each program announcing what’s playing.

Additionally, you can use the left and right arrow keys to move forward and backward respectively in the content list for the given timeslot. Don’t want to start a series at season 1 episode 1? Just press the right arrow until your preferred episode plays.

So you’ve decided to become an executive.

Now what?

  1. Download Channel Two from GitHub.
  2. Open the included schedule.txt and define your schedule.
  3. In the Channel Two folder, run the command php parse-schedule.php --schedule schedule.txt. This will generate a JavaScript file that Channel Two uses to manage programming.
  4. Open channel-two.html in your browser.
  5. Click the “Click to Start” image and enjoy your programming!

Comment below or email me at cfinke@gmail.com with any questions or feedback.

Standard
Cooking, Food

Cooking Around the World: A Date With Banana Cake

The Internet is not awash with genuine Burundi cuisine recipes, so I settled for this allegedly Burundian banana and date cake recipe from Travel By Stove to satisfy the Burundi requirement of my Cooking Around the World challenge.

The result was basically pound cake with bananas and dates in it, so not bad.

Continue reading

Standard
Cooking

Cooking Around the World: Riz Gras from Burkina Faso

Around and around the world he goes, what he cooks, nobody knows! Until now: I cooked Riz Gras from Burkina Faso. It’s a tomatoey peppery chicken and rice dish. I used this recipe from At Home World Traveler, substituting sweet red bell peppers for the habaneros and cutting up the chicken thighs before sauteeing them.

I loved this. It was my favorite meal of all of the “Cooking Around the World” meals so far, and I’ve eaten it for leftovers three times since the night I made it. It’s especially good eaten with flatbread, but still really good all on its own.

Continue reading

Standard
Cooking, Food

Cooking Around the World: Patatnik Patatnik Baker’s Man

It’s Bulgaria’s turn to be cooked around the world. I made patatnik (a potato pie) using a recipe from Kitchen Frau.

It was basically a large hash brown. It certainly needed more salt, and in a perfect world, it would be half as thick and twice as crispy. Better luck next time Bulgaria! Continue reading

Standard
Cooking

Cooking Around the World: Brunei Scream, Bruyou Scream, We All Scream for Honey Barbecue Chicken Pizza

My latest “Cooking Around the World” recipe comes from Brunei, and it’s the Pizza Hut Brunei-exclusive Honey Barbecue Chicken Pizza. I used this recipe from Foreign Fork with this Pizza Hut crust copycat recipe from Alyona’s Cooking.

How did it taste? Like every barbecue chicken pizza I’ve had before. But I felt extra fancy thinking about Brunei while eating it! Continue reading

Standard
JavaScript, Programming, Typo.js

Typo.js 1.2.1 Released

I’ve tagged and released version 1.2.1 of my pure JavaScript spellchecker, Typo.js on npm. The only change in this version from 1.2.0 is that it’s now less susceptible to a regular expression Denial of Service attack, which is to say that it more elegantly handles .aff files with lots of consecutive whitespace. (Thanks to huntr.dev for reporting the issue.)

Some stats and fun facts:

  • Typo.js is 10 years old this year!
  • I initially wrote it because Chrome did not expose its spellchecking API to extensions like Firefox did, and I wanted to port YouTube Comment Snob to Chrome.
  • Typo.js is a dependency is 27 other npm projects.
  • It’s downloaded about 50,000 times per week via npm and has been downloaded more than 7.2MM times.
  • It has 408 stars on GitHub and is by far my most popular GitHub repository.

 

Standard
Maker, Woodworking

I Made Some Karate Belt Racks

A couple of years ago, a friend of mine needed a karate belt rack for her son who had begun racking up the belts in his karate class (pun definitely intended). The racks available on Amazon were of suspect quality, so I made one for them out of maple.

Two years later, she has another son who is also racking up the belts (puns are funnier the second time), so I made him a contrasting one out of walnut.

If you’re interested in making one yourself, each slat is 14″ wide, 1.5″ tall, and 5/16″ thick, and I chamfered all of the front-facing edges. They’re spaced about 7/8″ apart, and the boards that they’re glued and pin-nailed to (from the back) are 1/2″ thick and 1.5″ wide. The entire rack is about 51″ tall, large enough to display twenty belts.

Standard