Tidepool Diorama

I’m contemplating a new woodworking project. I carved a couple of bowls that for various reasons1 I decided not to finish. I didn’t want them cluttering up the shop so I was going to throw them into the burn pile. But then I got this crazy idea.

Create a tide pool diorama. Carve a few starfish and other tiny tide pool creatures and glue them into the bowl along with some shells and rocks. And I can solve the rotten wood problem by partially (or completely) filling the bowl with epoxy. The more I think about this idea, the more I like the idea.

This, I thought, will be a great place to make use of all those exotic woods I have left over from the Hundred Birds Project. So I went digging through the wood stash and came up with pieces from more than 30 different species, including exotics of many different colors, woods with distinctive grain patterns, and even some burls. My tidepool creatures will be very colorful.

I’m in the earliest planning stages, although I’m pretty sure this project will happen. I need to read up on tidepools and decide what types of creatures to carve. This one should be lots of fun.

Footnotes

  1. While carving, I encountered rotten patches of wood in some critical places. I’d have to carve those away and fill large areas with epoxy. Whereas I could do that, there are two reasons I don’t. First, I don’t think the result would be worth the effort. The elm is pretty enough, but it’s not so exceptionally beautiful that I want to spend that much time on it. I can get all the good quality elm I want from trees in my yard. Secondly, it’s not the direction I want to go with my bowls. I’m a huge fan of inlay to fill cracks, but I don’t at all like the look of large areas of inlay. ↩︎

Stopwatch resolution

In How to time code I showed how to use the .NET Stopwatch to time how long it takes code to execute. Somebody asked me about the maximum resolution of Stopwatch: how short of an interval can it time?

Stopwatch uses Windows’ high performance timer, the frequency of which you can determine by reading the Stopwatch.Frequency field. I’ve never encountered a system on which that frequency is not 100 nanoseconds, but I always check anyway. The ShowTimerFrequency function below reads and displays the frequency.

    static public void ShowTimerFrequency()
    {
        // Display the timer frequency and resolution.
        if (Stopwatch.IsHighResolution)
        {
            Console.WriteLine("Operations timed using the system's high-resolution performance counter.");
        }
        else
        {
            Console.WriteLine("Operations timed using the DateTime class.");
        }

        long frequency = Stopwatch.Frequency;
        Console.WriteLine("  Timer frequency in ticks per second = {0:N0}",
            frequency);
        double microsecPerTick = (float)(1000L * 1000L) / frequency;
        long nanosecPerTick = (1000L * 1000L * 1000L) / frequency;
        Console.WriteLine("  Timer is accurate within {0:N0} nanoseconds ({1:N} microseconds)",
            nanosecPerTick, microsecPerTick);
    }

The output when run on my system is:

Operations timed using the system's high-resolution performance counter.
Timer frequency in ticks per second = 10,000,000
Timer is accurate within 100 nanoseconds (0.10 microseconds)

So the theoretical best you can do with Stopwatch is 100 nanosecond resolution. That’s assuming no overhead. But what is the actual resolution you can expect?

Let’s find out.

Timing requires that you start the stopwatch, run your code, and then stop the watch. Broken down, it becomes:

  1. Start the Stopwatch
    • Call executes before the watch is started
    • Watch is started (reads current tick count)
    • Return executes after the watch is started
  2. Execute your code
  3. Stop the Stopwatch
    • Call executes while the watch is running
    • Watch is stopped (subtracts starting value from current system tick count)
    • Return executes after watch is stopped

Overhead is the time to return from the Start call, and the time to make the Stop call (before the current value is read). You can get an idea of the overhead by using a Stopwatch to time how long it takes to do a billion Start / Stop pairs, and subtract the time recorded by the Stopwatch that you start and stop. The code looks like this:

    static public void ComputeStopwatchOverhead()
    {
        Console.Write("Determining loop overhead ...");
        var numCalls = 1000L * 1000L * 1000L;

        // First, calculate loop overhead
        int dummy = 0;
        var totalWatchTime = Stopwatch.StartNew();
        for (var x = 0u; x < numCalls; ++x)
        {
            ++dummy;
        }
        totalWatchTime.Stop();
        Console.WriteLine();
        Console.WriteLine("Loop iterations = {0:N0}", dummy);
        var loopOverhead = totalWatchTime.ElapsedMilliseconds;
        Console.WriteLine("Loop overhead = {0:N6} ms ({1:N6} ns per call)", loopOverhead, (double)loopOverhead*1000*1000/numCalls);

        Console.Write("Stopwatch overhead ...");
        // Now compute timer Start/Stop overhead
        var testWatch = new Stopwatch();
        totalWatchTime.Restart();
        for (var x = 0u; x < numCalls; ++x)
        {
            testWatch.Start();
            testWatch.Stop();
        }
        totalWatchTime.Stop();
        Console.WriteLine("Total time = {0:N6} ms", totalWatchTime.ElapsedMilliseconds);
        Console.WriteLine("Test time = {0:N6} ms", testWatch.ElapsedMilliseconds);
        var overhead = totalWatchTime.ElapsedMilliseconds - loopOverhead - testWatch.ElapsedMilliseconds;
        Console.WriteLine("Overhead = {0:N6} ms", overhead);

        var overheadPerCall = overhead / (double)numCalls; // uint.MaxValue;
        Console.WriteLine("Overhead per call = {0:N6} ms ({1:N6} ns)", overheadPerCall, overheadPerCall * 1000 * 1000);
    }

This will of course be system dependent. The results will differ depending on the speed of your computer and on if the computer is doing anything else at the time. My system is an Intel Core i5 CPU running at 1.6 GHz, and was essentially idle when running this test. My results, running a release build without the debugger attached are:

Determining loop overhead …
Loop iterations = 1,000,000,000
Loop overhead = 566.000000 ms (0.566000 ns per call)
Stopwatch overhead …Total time = 30,219.000000 ms
Test time = 15,131.000000 ms
Overhead = 14,522.000000 ms
Overhead per call = 0.000015 ms (14.522000 ns)

If the timer’s maximum resolution is 100 nanoseconds and there is a 15 nanosecond overhead, then the shortest interval I can reliably time is in the neighborhood of 115 nanoseconds. In practice I probably wouldn’t expect better than 200 nanoseconds and if anybody asked I’d probably tell them 500 nanoseconds (half a microsecond) is the best I can do. It’d be interesting to see how those numbers changed for a newer, faster CPU.

Need a better podcast app

I’ve been a Spotify customer for years. I think $15/month is a good deal for access to all that audio content. But the app is so danged frustrating to use! More so because I regularly use four different versions of the app: the Windows desktop app, the Android app on my Samsung tablet in the shop, the Android app on my phone, and the Android Auto interface to the app on my phone.

The tablet and phone versions are almost identical. All of the apps are usable, although the Android Auto interface is just barely functional. But I expect better than just “usable.” The Spotify app, even on the Windows desktop leaves so much on the table. Things it should do but doesn’t, and often the things it DOES do are done in stupid ways.

Its handling of podcasts is particularly stupid. By default it lists the episodes in reverse chronological order. If I go to the podcast and hit “Play,” Spotify dutifully plays the most recent episode. And when that ends it goes to the previous episode, etc. Already heard it? Tough! You know where the “next episode” button is. And the next time I want to listen to something I haven’t heard I have to search through all the episodes I’ve already listened to.

It doesn’t help that most of the time when this happens I’m driving down the road in my truck and I don’t want to take my eyes off the road long enough to fiddle with the dang thing. I wonder how “Hey Spotify” would respond to “Hey, Spotify, play the most recent RadioLab episode that I haven’t already heard.” Asking Google to ask Spotify to do that hasn’t produced the desired result.

It seems as though Spotify hasn’t figured out that podcast episodes aren’t like songs. I don’t put podcast episodes on playlists and listen to them again and again. Why can’t I select an option so that hitting Play from the episodes list will play the most recent (or oldest! I’d love the ability to play all podcast episodes from the first one) episode that I haven’t already played?

More to the point, I listen to multiple podcasts. Why do I have to visit each individual podcast page to play the new episodes? Can’t Spotify create a “pending” list for me? It could append to the list whenever a new episode from one of my watched podcasts is released. I could go to that page, hit Play, and the oldest episode podcast would start playing. And when it’s done, it’s removed from the list!

I don’t think my requests here are unreasonable or even unusual. I suspect plenty of other podcast listeners have similar frustrations. Or maybe I can ditch Spotify for podcasts? Time to do some digging.

Habits

It became painfully (literally) obvious earlier this year that I should wear a hat whenever I go out in the sun. This was not an unexpected result; I’ve known for years that I should be careful. After all, my hair isn’t as abundant as it used to be and I did inherit my mother’s fair complexion. I probably should wear SPF 50 if I go outside during the full moon.

Anyway.

Since the aforementioned painful incident I have endeavored to wear a hat whenever I go out in the sun. Except what I’ve really done is start wearing a hat whenever I step outside. Why? Because I’m a creature of habit. It’s hard to create habits with exceptions. It’s a whole lot easier to make it a habit to put on a hat whenever I go outside. There’s no decision involved. I just put “hat” on my mental checklist for leaving the house.

I’ll admit that it’s pretty weird to walk out the door in the dark, headed to the shop, and then come back in saying, “Forgot my hat.” It’s dark. The sun can’t burn me and there’s no full moon, so I really don’t need the hat. But I go get it, put it on my head, and make my way to the shop.

It’s a harmless eccentricity, and it helps me remember to wear a hat.

The smoke is alive!

In 2020, a doctor in California encountered an unusual number of fungal infections in burn patients. Understand, a burn patient getting a fungal infection isn’t particularly uncommon, but it’s not an “every time” thing, either. A search for the culprit lead them to the ventilation system, where they discovered filters that had been overwhelmed with wildfire smoke. And the doctor got to wondering if the smoke could have been a vector for the burn patients’ infections.

Up in Smoke, an episode of the RadioLab podcast, tells this story and the story of a fire ecologist who has discovered that wildfire smoke contains a dizzying array of bacteria and fungi. Based on her research, it’s certainly possible that wildfire smoke could have been the vector for those infections. It can’t be proven, but there is some strong correlation in the data.

I found the whole thing fascinating, and it’s given me a couple of things to think about. The first is how it took us this long to ask the question, “What’s in smoke?” We’ve long known that smoke contains soot that interferes with breathing, and substances that in sufficient quantities can cause permanent lung damage and many different types of cancers. But nobody ever thought to ask if there’s anything alive in smoke?

Perhaps the reason nobody ever asked is that smoke comes from fire, and of course fire is hot enough to kill anything alive. So it’s silly to even think about smoke carrying microbes. Right? It’s an interesting blind spot. Nobody thought to ask the question until a fire ecologist named Leda Kobziar started her research project in 2017.

When I see something like this I think, “What other questions aren’t we asking?”

I also wonder whether this finding, dispersal by smoke, can help answer some questions in paleomicrobiology. It could enhance our understanding of plagues, and also of how microorganisms spread during Earth’s evolution.

Definitely take the 30 minutes to listen to this podcast (unfortunately, I don’t see a written transcript). Check out the references on that page, too, for the details of both women’s research.

Records are dead. Long live streaming!

People are forever waxing nostalgic over the “old days” of music. Through some twisted reasoning they long for the days of records, tapes, and CDs, complaining that today they have to pay a monthly subscription just to listen to music. Perhaps they don’t remember things the same way I do.

I bought a high-end stereo system in 1985. At the time, a record album cost about $6.00. For what is the equivalent of about $15.00 today, I got maybe 40 minutes of music. If I had a turntable and stereo. And I had to get up and flip the record after 20 minutes. Cassettes and CDs were available, too, and cost about the same. The CDs’ primary advantage was that I didn’t have to get up and flip the record (or tape).

Today, I pay $15.00 per month to Spotify, and Debra and I have access to a huge selection of music, podcasts, audio books, and who knows what all else. I can play whatever I want whenever I want. I turn it on and it plays. Continuously. Until I tell it to stop.

Let that sink in a little bit. For the monthly price of what I would have paid for one album, I have an essentially unlimited music library. And I’m not talking obscure stuff, but the latest music in any genre and pretty much everything of note that has been released since the dawn of recorded music. Sure, there are some things not available for various reasons, but Spotify and similar services do in a very real sense give you everything. For the price of one record album per month.

Not only that, but I don’t have to store the music collection, take special care of it, or replace a cassette tape because the temperamental player decided to have a snack. Warped records are a thing of the past.

To play those records or whatever back in 1985 required some special-purpose equipment. Very bulky, heavy, and expensive equipment. My high-end stereo system in 1985 cost what today would be about $12,000. And all it could do was play music: AM/FM stereo, vinyl records, cassette tapes, and CDs. The equipment weighed a couple hundred pounds and sucked power like nobody’s business. Sure, it was a really nice stereo, but even a low-end stereo back then would run you a few hundred dollars: what today would be $1,000 or more.

And if you bought one new record album every month then in 10 years you’d own maybe 120 hours of music. But if you then discovered Pink Floyd and wanted to collect all of their albums, it’d cost you $75.00 (equivalent to $180 today). Remember Apple Music and $1 per song?

Streaming, too, requires some equipment. You need a phone and an internet connection. Oh, wait, you already have those! All you need, if you want to save your ears, is a better speaker than what the phone includes. A pretty decent speaker for small spaces will run you maybe $30. Some quite usable wireless earbuds will be less than $100. You can spend a whole lot more if you want to, but a “listenable” speaker is not at all expensive. By contrast, even a set of low-end stereo speakers in 1985 cost hundreds of dollars: the equivalent of a thousand or more today.

So, let me see: a hugely expensive, non-portable stereo system combined with a laughably small music collection, or a $15.00 monthly subscription to a service that gives me immediate access to pretty much anything I’d ever want to listen to whenever I want it, wherever I am.

Tough choice. Let me think . . .

Who am I kidding? If you’re nostalgic for the bad old days of owning media, knock yourselves out. I’ve got some records, CDs, and cassettes (no 8-tracks left, sorry) I’ll make you a heck of a deal on. Me, I’ll sit back and groove to some tunes and laugh while watching you fiddle with your records or whatever.

The Whittling Pup

If nothing else, the current crop of AI chatbots is worth some laughs. Prompted by a friend’s recent experiments in which a chatbot told him that his sister is his wife, I thought I’d ask Microsoft’s Copilot if it knows who I am. Initial attempts weren’t very encouraging. When I asked it who Jim Mischel is, it told me about my distant relative, also named Jim Mischel, who is the founder and President of Electric Mirror in Everett, WA. (Very cool stuff, by the way. Definitely give it a look.)

I had to ask Copilot who was the author of The Delphi Programming Explorer (a book I co-authored with Jeff Duntemann and Don Taylor), and then ask it to tell me about that Jim Mischel. It still confused me with the Electric Mirror Jim a few times before it mentioned my blog and some of the topics I covered, including woodworking.


Me: Tell me more about his woodworking projects.

Copilot:

Jim Mischel has shared various woodworking projects, particularly focusing on carving. Here are some highlights:

  1. Whittle Pup: Jim created a popular wood carving pattern known as the “Whittle Pup.” This project involves carving a small, whimsical dog out of basswood. The pattern has been shared on platforms like Pinterest and is appreciated for its simplicity and charm.
  2. Creative Woodturning: Jim has also explored woodturning, where he uses a lathe to create various wooden objects. He has discussed the potential of woodturning beyond just making bowls, suggesting creative and intricate projects.
  3. Detailed Carvings: Jim’s projects often include detailed carvings, showcasing his skill and attention to detail. He enjoys experimenting with different techniques and styles, making each piece unique.

Jim’s woodworking projects reflect his passion for the craft and his willingness to share his knowledge with others. If you’re interested in specific techniques or want to see more of his work, you might find his posts on forums like Woodcarving Illustrated or his blog “Jim’s Random Notes” particularly insightful.


Whereas it’s true that I created the Whittle Pup, the rest of that response is fluff, or perhaps gilding the lily if not outright fabrication. In particular, my projects most emphatically do not include detailed carvings.

But I was curious what it knows about the Whittle Pup.


Me: Tell me more about the Whittle Pup.

Copilot:

The “Whittle Pup” is a delightful wood carving project created by Jim Mischel. It’s designed to be a fun and accessible project for both beginners and experienced carvers. Here are some key details about the Whittle Pup:

  1. Design: The Whittle Pup is a small, whimsical dog carved out of basswood. Its charming and playful design makes it a popular project among woodcarvers.
  2. Materials: The primary material used for this project is basswood, which is favored for its softness and ease of carving. A sharp whittling knife is essential for achieving clean cuts and details.
  3. Techniques: The project involves basic whittling techniques, making it suitable for beginners. It includes simple cuts and shaping to create the dog’s body, head, and features. More experienced carvers can add intricate details to enhance the pup’s appearance.
  4. Tutorials: There are various tutorials available online that guide you through the process of carving a Whittle Pup. These tutorials often include step-by-step instructions and visual aids to help you follow along. For example, you can find a detailed tutorial on the Woodcarving Illustrated forum1.
  5. Community: The Whittle Pup has become a beloved project within the woodcarving community. Carvers often share their finished pieces and tips on forums and social media, creating a supportive and inspiring environment for fellow enthusiasts.

If you’re interested in trying your hand at carving a Whittle Pup, you might find the tutorials and community discussions particularly helpful. It’s a great way to practice your whittling skills and create a charming piece of art!


I was pretty surprised to find that Whittle Pup is a “beloved project within the woodcarving community.” I’ve seen pictures from one or two carvers, but nothing to indicate that it’s hugely popular. And I do not often (like, almost never) carve the thing from basswood. My original tutorial talks about carving it from a tree branch, and I’ve shown pictures of carvings from pear, peach, oak, elm, mesquite, pecan, hickory, hackberry, several types of juniper, and others that I don’t recall. But basswood? No.

Anyway, I’d like to see some of the pictures that people share of their finished pieces:


Me: Can you show me some pictures of the Whittle Pup?

Copilot:

I’ll try to create that.

I’ll be chuckling about this one for quite some time . . .

Wobbly ceiling fan

A friend on Facebook asked how to make a wobbly ceiling fan not wobbly. That’s one of those questions that starts with, “The best temporary solution is . . .” My response was more an explanation of why there is no permanent solution.


What the uneducated call “balancing the ceiling fan” is really just an amateur attempt at counteracting Fae magic. The one about putting small bits of coin on the blades to “counteract the wobble” can work temporarily, depending on the amount of iron in the coins. But it only dampens the magic for a while–until the Fae notice what you’ve done, and change the magic frequency. Then you have to do the “balancing” exercise again.

Various other solutions are proposed, but none of them have proved effective over the long term. And what do you expect? The ceiling fan is the perfect toy for the Fae to torment us with. It’s something that humans think they like because they think they need, but they secretly detest because of the lurking danger of things getting caught, inadvertently losing a digit or a limb due to an ill-timed gesture, etc. It’s like a spinning guillotine just over people’s heads. The Fae love this kind of thing! They’ll give it a little wobble–just enough so that you barely notice it–and they’ll delight in the annoyance it gives you. Then they’ll increase it steadily until you go through that silly “balancing” trick. And every time you “balance” it, the wobble goes away for a while until the Fae decide to torment you some more. Then it comes back, slightly worse than it was before. The Fae find this whole thing incredibly amusing, watching you get more and more irritated over time and all the while wondering at the incredible stupidity of humans who can’t figure out that their problems would be *over* if they’d just get rid of the silly ceiling fan!

Yeah, ceiling fans. Playthings of the Fae. NOT recommended.

WordPress wonkiness

I mentioned a while back, as part of resurrecting this blog, the possibility of moving old blog entries (from October 2000 until March 2007) to WordPress. Having re-entered the old posts from 2007 on, I figured I might as well have the old posts here, as well. I’ll probably keep the old diary format on the site, but it’s nice to have all my blog writings in a single place.

Don’t get me wrong, I like WordPress. A lot. But it has some annoying quirks. One of which has to do with the UI for assigning categories and tags to posts. In the WordPress user interface, the controls for adding categories and tags are shown on the “Post” tab when editing a post. They’re supposed to be shown below where one adds the author, date, and a few other post-related items. Unfortunately, they’re not always shown.

Sometimes, perhaps most of the time, they’re shown when I select “Add New Post” from the list of blog posts. They’re also shown sometimes, very rarely, if I select “Add New Post” from the post-publishing page. In the cases when they’re not shown, sometimes (again, very rarely), doing a hard refresh (Ctrl+F5) of the page will cause them to be shown. Sometimes I get the Tags, but not the Categories. Oddly, I can’t recall seeing the Categories controls without the Tags controls.

The problem, of course, is “sometimes.” The only reliable way I know of to show the Categories and Tags controls is to do the following:

  1. Create a new post.
  2. Add the post title.
  3. Save the post as a draft.
  4. Go back to the list of posts.
  5. Click to edit the post that you just created.
  6. The Categories and Tags controls are now displayed in the “Post” tab.

I suspect the problem is that an AJAX request is timing out somewhere, although I can’t explain why it never seems to time out when I’m editing a previously-saved post.

WordPress gives the author a second chance to add tags and categories. When I click on the Publish button, it does some pre-publish checks and gives the opportunity to change some things. Or, if configured, to remind about Categories and Tags. At least that’s what it’s supposed to do. And it does. Rarely.

It’s way too much trouble. At some point I got tired of having to make that round trip. I don’t know if it’s WordPress or my hosting provider that’s the problem. At this point I don’t really care. I just won’t tag my blog entries at this time. Which is okay. It turns out that coming up with a good set of categories is difficult. And without careful thought, all a tag cloud does is obscure things. Surprise: taxonomy is hard. I’ll get all the blog entries converted to WordPress and then I’ll worry about taxonomy.

About the Moon: a podcast, a book, and a curiosity

Everybody loves the Moon. But we, people in general, don’t know much about it. We know it follows an approximately monthly cycle and it has something to do with the tides. Oh, and 50 years ago for a brief period we sent some guys up there to check it out.

That’s really too bad. The Moon is fascinating. The unusual nature of the Earth/Moon relationship could very possibly be a major reason life developed on Earth. Or, put another way, without that particular relationship, it’s quite possible that life would not have developed here.

The Radiolab podcast The Moon Itself explores that relationship, and much more. Listening to it got me interested me enough to buy and read Rebecca Boyle’s excellent Our Moon: How Earth’s Celestial Companion Transformed the Planet, Guided Evolution, and Made Us Who We Are. It’s well researched and well presented, giving us a look at the science and the mysticism of the Moon.

Highly recommended.

By the way, it’s odd that of all the objects in the sky, we attach the definite article (“The”) to only three of them. The Sun, the Moon, the Earth. But we don’t say, “the Jupiter” or “the Titan,” “the Betelgeuse.” Even more curious is that, as far as I can tell, we use the Moon’s name to reference satellites of other planets. As in “Titan is Saturn’s largest moon.” Kind of like “She’s my girl Friday” refers to Robinson Crusoe’s servant and friend.

I also wonder if the “Holy Trinity” that I learned about in Catechism class can be traced back through earlier writings and associated with the celestial trinity of Sun, Earth, Moon. There’s certainly a whole load of mysticism associated with Sun and Moon, and I can easily envision a path for that evolution. Whether it can be documented is another matter entirely.

And another aside. I really like that Radiolab provides a text transcript of their episodes. While I’m driving I’ll hear something that I want to go back to later. It’s a whole lot easier to search the transcript than try to find a particular word or sentence in a 40+ minute audio file. Although I wonder if that will be the case for much longer . . .