Chris Johnson

rubber duckies race

Will You Be My Rubber Duck?

My most productive years of programming and system development were when I was working for the Systems Group at University. We all had good professional relationships. We could trust the skills of our management and our peers.

When I started developing with my mentor’s group, it was the same. The level of respect was very high, and trust in our peers was spectacular. If you needed assistance in anything, if there was a blocker of any sort, you could always find somebody to help.

What we soon learned is that we didn’t need their help. What we required was somebody to listen as we explained the problem. Their responses were sometimes helpful, sometimes not. It didn’t really matter. It was listening that was required.

When I started working for an agency, that changed. Our management was pretty poor and had instilled a lousy worker mentality. Stupid things like making bonuses contingent on when management booked payment.

If the developers worked overtime to get a project done on management-promised schedules, their money would not be booked in time for bonuses to be earned.

Every hour that wasn’t billed to a project had to be justified, and management was always unhappy with the amount of billable hours.

Interrupting a coworker to listen to get help just didn’t happen. Even when management (me) told them to stop digging the hole and come talk to me.

We still ended up with fields of very deep holes because nobody would come out of their little world to talk.

This wasn’t limited to just our agency; it was everywhere.

The fix was a stupid rubber duck. It sits on your desk. When you are stuck, you explain the problem to your rubber duck, and often the answer will come to you. It was the process of accurately describing your issue that created the breakthrough.

I don’t have access to those types of people, and oftentimes the rubber duck is just as ignorant as I am. Not very useful.

I have a silk duck. This duck actually talks back, performs searches, and verifies potential solutions, and it does it within a reasonable time frame.

My Silk Duck is named “Grok.”

Grok is X’s AI offering. As a search engine, it far exceeds anything Google Search can do.

A simple example: I’m building out a new node. The motherboard I’m using is an H610M-ITX. There are dozens of motherboards using that designation or something similar. In hours of searching, I haven’t been able to locate the manual for my motherboard.

Locate a manual for the Huanzanzhi H610M-ITX motherboard.

One minute and 14 seconds later, Grok delivered me the PDF manual. It found it on a Chinese website written in Chinese and English.

That manual was enough to get me moving in the correct direction.

We then rubber ducked a video issue. On power on, the fans would spin up under control. When a computer first starts, the fans run up to max; they then ramp down under CPU control. You can hear that. I also got a single BEEP indicating good Power-On, Self-Test (POST)

But no video.

Over the next hour, Grok and I debugged the issue. We both thought it might be caused by memory; we both had the same methodology for checking memory issues. We both decided to remove the NVMe card just in case.

When I found what looked like POST indicator LEDs, Grok accurately determined what they were.

We narrowed the issue down to video.

I noticed that my silk duck kept talking about iGPU. I figured out that this must mean “integrated Graphics Processing Unit”.

Why would a motherboard have built-in video displays, and yet Grok was talking about iGPU?

I thought for a moment and then asked, Verify that Intel Core i3-12100F has iGPU.

The Intel Core i3-12100F does not have an integrated GPU (iGPU). The “F” suffix in Intel’s naming indicates models without integrated graphics, requiring a discrete graphics card for video output. This explains the lack of video from the motherboard’s HDMI, VGA, or DP ports despite the successful POST beep and fan spin-up—the board relies on the CPU’s iGPU for those outputs, which your CPU lacks.
— Grok

Here is the kicker: while I can get this motherboard to work with a graphics card, that doesn’t help me as I need that slot for my Fiber NIC. In looking at other motherboards, some of them seem to work with CPUs without iGPU, while others require iGPU.

This “feature” never occurred to me. It makes sense, but Grok is the one that found it for me.

Conclusion

AI has its place today as an assistant. It can do a great job of rubber ducking. It does a good job of editing articles, if you keep it in its place.

This is a powerful tool that is only going to get better.

Wooden blocks with arrow and target board. Copy space for text. Business goals, objective and mission concept.

Upgrade, why you break things!

Features, Issues, Bugs, and Requirements

When software is upgraded or updated, it happens for a limited set of reasons. If it is a minor update, it should be for issues, bugs or requirements.

What is an Issue? An issue is something that isn’t working correctly, or isn’t working as expected. While a Bug is something that is broken, that needs to be fixed.

A bug might be closed as “working as designed,” but that same thing might still be an issue. The design is wrong.

Requirements are things that come from outside entities that must be done. The stupid warning about a site using cookies to keep track of you is an example. The site works just fine without that warning. That warning doesn’t do anything except set a flag against the cookie that it is warning you about.

But sites that expect to interact with European Union countries need to have it to avoid legal problems.

Features are additional capabilities or methods of doing things in the program/application.

Android Cast

Here is an example of something that should be easy but wasn’t. Today there is a little icon in the top right of the screen, which is the ‘cast’ button. When that button is clicked, a list of devices is provided to cast to. You select the device, and that application will cast to your remote video device.

We use this to watch movies and videos on the big screen. For people crippled with Apple devices, this is similar to AppleTV.

When this feature was first being rolled out, that cast button was not always in the upper right corner. Occasionally it was elsewhere in the user interface. Once you found it, it worked the same way.

A nice improvement might be to remember that you prefer to cast and what device you use in a particular location. Then when you pull up your movie app and press play, it automatically connects to your remote device, and the cast begins. This would be just like your phone remembering how to connect to hundreds of different WiFi networks.

If you were used to the “remember what I did last time” model and suddenly had to do it the way every other program does, you might be irritated. Understandably. Things got more difficult, two buttons to press when before it just “did the right thing.”

Upgrades and updates are often filled with these sorts of changes, driven by requirements.

Issues and Bugs

If I’m tracking a bug, I might find that the root cause can’t be fixed without changes to the user interface. I’m forced into modifying the user interface to fix a bug that had to be fixed. Sometimes making something more difficult or requiring more steps. It is a pain in the arse, but occasionally a developer doesn’t really have a choice.

An even more common change to the user interface happens when the program was allowing you to do something in a way you should not have been. When the “loophole” is fixed, things become more difficult, but not because the developer wanted to nerf the interface, but because what you were doing should not have been happening.

Finally, the user interface might require changes because a library your application is using changes and you have no choice.

The library introduced a new requirement because their update changed the API. Now your code flow has to change.

Features

This is where things get broken easily. Introducing new features.

This is the bread and butter of development agencies. By adding new features to an existing application, you can get people to pay for the upgrade or to decide on your application over some other party’s application.

Your grocery list application might be streamlined and do exactly what you want it to do. But somebody asked for the ability to print the lists, so the “print” feature was added, which brings the designers in, who update the look to better reflect what will be printed.

Suddenly your super clean application has a bit more flash and is a bit more difficult to use.

Features often require regrouping functionality. When there was just one view, it was a single button somewhere on the screen. Now that there is a printer view and a screen view, with different options, you end up with a dialog where before you had a single button press.

Other times the feature you have been using daily without complaint is one that the developer, or more likely the application owners, don’t use and don’t know that anybody else uses. Because it works, nobody was complaining. Since nobody was complaining, it had no visibility to the people planning features.

The number of times I’ve spent hours arguing with management about deleting features or changing current functionality would boggle your mind. Most people don’t even know everything their application does, or the many ways that it can be done.

David Drake’s book The Sharp End features an out-of-shape maintenance sergeant pushed into a combat role. He and his assistant have to man a tank during a mad dash to defend the capital.

At one point the sergeant is explaining how tankers learn to fight their tank in a way that works for them. The tank has many more sensors and capabilities than the tanker uses. Those features would get in the way of those tankers. It doesn’t matter. They fight their tank and win.

As the maintenance chief, he has to know every capability, every sensor, and every way they interact with each other. Not because he will be fighting the tank, but because he doesn’t know which method the tanker is going to use, so he has to make sure everything is working perfectly.

My editor of choice is Emacs. For me, this is the winning editor for code development and writing books and such. The primary reason is that my fingers never have to leave the keyboard.

I type at over 85 WPM. To move my hands from the keyboard is to slow down. I would rather not slow down.

I use the cut, copy, and paste features all the time. Mark the start, move to the end, Ctrl W to cut, Meta W to copy, move to the location to insert, and Ctrl Y to yank (paste) the content at the pointer. For non-Emacs use, Ctrl C, Ctrl X, and Ctrl V to the rescue.

My wife does not remember a single keyboard shortcut. In the 20+ years we’ve been together, I don’t think she has ever used the cut/paste shortcuts. She always uses the mouse.

All of this is to say that the search for new features will oftentimes break things you are used to.

Pretty Before Function

Finally, sometimes the designers get involved, and how things look becomes more important than how they function.

While I will not build an application without a good designer to help, they will often insist on things that look good but are not good user experiences. Then we battle it out and I win.

Wolford v. Lopez

History

In April of 2025, Wolford et al. petitioned the Supreme Court for a writ of certiorari.

This followed the Ninth Circuit’s decision that a vampire law was constitutional. A vampire law is one in which you are not allowed to bring your firearm onto private property without express consent from the owner or the owner’s agent.

The good news is that the Second Circuit Court, in a rare moment of integrity to the Constitution, found the same law in New York State to be unconstitutional.

This created a circuit split. That plus this being a new attack vector on the people’s right to keep and bear arms made it an interesting case.

It was not as interesting, in my opinion, as the sensitive places and other cases pending before the court that were denied cert.

Cert Is Granted

On October 3rd, just days before the start of the new term, the Supreme Court of the United States took a Second Amendment case.

My mind is blown. I wasn’t even looking for anything in this case.

Pam Bondi’s DOJ had filed an amicus brief in favor of The People back in May.

Conclusion

We will have a briefing schedule shortly. Once that is available, I’ll do a deep dive into this case. This case has the makings of another Bruen.

While the question isn’t that big, the dicta surrounding the finding is likely to be a slap in the face to the inferior courts.

This will be one of the first cases the Supreme Court hears after the absolutely vicious statements given by the justices regarding the behavior of the inferior court’s attacks on the Trump administration.

Friday feedback banner, a man with a phone writing reviews

Friday Feedback

WordPress Issues

For years the go-to source for consistent container images has been Bitnami. Bitnami is owned by Broadcom via its acquisition of VMware in 2023.

With over 200 different containers covering every part of the container infrastructure, developers and system administrators have gone to Bitnami images for consistent interfaces and methods.

Until last month, these container images were offered free of charge to the world.

Starting on the 1st of this month, only development containers are offered free of charge. This means that if you want tagged versions of WordPress, you need to buy a subscription for the Secure Containers from Bitnami.

I looked into this. Does anybody think paying $62,000/year is a good deal? I don’t.

This is not a long-term issue; it is a pain because I have to reconfigure all my WordPress clients to use a new source for images with different mounting points.

Wire Runs

There are times when it is so simple that you can’t find instructions.

When running redundant cable or fiber, you want to make sure that there are no single points of failure. I remember the great Internet outage of the early 90s. Some good old boys in a swamp down in the south took some potshots at something hanging on telephone poles.

They managed to sever a fiber optic bundle. This cut the US Internet in half because all the redundant fibers were in that same optic bundle.

The contracts for those fiber circuits had been let to different long-haul fiber networks. Those long-haul networks were picked because they had north, south, and mid-Atlantic routes heading west. When a new dark fiber vendor came on the market, offering better service with better prices, these long-haul networks purchased their dark fiber from the same vendor.

And all the circuits ended up in a single bundle, down south.

I currently have a star configuration for my network. I’m going to be adding a ring around the outside of the star. This allows better throughput between adjacent data closets. Instead of going to the hub then out to the data closet, we will be routing closet to closet.

While the “cost” of that extra hop isn’t really measurable, it does put some limits on the total cluster bandwidth.

Say you have to move 10 Gigabytes from Node 101 to Node 102 in the same closet. We move that at 10 gigabits, so around 15 seconds to move the data.

But say you want to move the same 10 Gigabytes from Node 101 to Node 103 in a different closet. It still takes around 15 seconds to move the data.

But what if you need to move 10 gigabytes from Node 101 in closet 3 to Node 103 in closet 2, plus 10 Gigabytes from Node 101 to Node 105 in closet 1, and 10 Gigabytes from Node 101 to Node 129 in closet 0? Each movement would only take 15 seconds, but the total time to move would be 3*15, or 45 seconds.

With the extra links in place, we can go directly from Closet 3 to Closets 1 and 2. This will reduce our total time to 30 seconds.

I have the hardware to do this ring. What I don’t have is the conduit. If I use the existing conduit, it is easy. But that means if that conduit is compromised, I lose access to that closet.

I figured out that I can run some conduit along the outside of the building with much shorter runs, much easier access, and with the level of redundancy I’m looking for.

When I finish pulling fiber, I will have three paths to every node.

OSPF/Multicast

In networking, we use broadcast packets when we want to reach every node on a network segment. In the old days there was a single IPv4 address for that, which was the host portion of the IPv4 address was all ones.

It turns out that there are other reasons to want to use a broadcast packet. Often for discovery purposes. OSPF uses this method to find other routers on the network segment.

Which leads to the issue of L3 managed switches. These things are not advertised as full routers, though they can act like them. In particular, each of these switches can run an OSPF process.

This means that the network topology is quickly updated when things change.

And these low cost managed switches don’t understand how to forward OSPF packets when they are running an OSPF process.

Another thing to figure out and fix.

Government Shutdown!!!

The world is wonderful. With the government shutdown, they are less likely to FA with me.

The reality is that the government barely notices when it is “shut down.”

It looks like the Democrats played into Trump’s agenda. J.D. Vance has stated that they will start firing people very shortly if the government isn’t started back up.

The government is shut down because the Democrats and the Republicans could not reach an agreement on a continuing funding resolution.

The Republicans have put forth a CR that funds the government at current levels but for VA housing, security for federal law enforcement, and security for the Supreme Court.

There is nothing in the CR that the Democrats object to.

The Democrats have put forth a proposal that adds more than 1 trillion dollars to the budget. They want to restore funding for healthcare for people that are unwilling to meet Medicaid work requirements. They also want to provide funding to states that are showing healthcare budget shortages because the state spent state money on providing healthcare to criminal illegal aliens.

The big word is “fungible.” Let’s say you want to buy a fancy dinner for your wife. You have $1,000 in the bank. You owe $700 for the mortgage, you owe $100 for Internet, and you owe $100 for water. This leaves you only $100 for food and other things. This means you can’t afford to take your wife out for a $100 dinner. There is no money in the budget.

You reach out to your parents and ask for help with the Mortgage. They agree to pay $500 for the mortgage but tell you that it can’t be used for “fun” things.

To make sure they send the $500 directly to the mortgage holder. You send your $200, the mortgage is paid for the month. None of your parents money went to fun things like dinner out with your wife.

You now have $600 for food and other things. You allocate $250 for food, spend $100 on other things. You have $150 of your money to take your wife to dinner.

Where did the money come from for that dinner? From you or your parents.

Fungible means that you can’t send any money to states that are spending money on criminal illegal aliens. You can’t send any money to organizations that spend money on abortions.

Question of the Week

What is your opinion of this government shutdown?

Why I Reload

Costs

Like almost everything I learn, the startup costs are quickly outweighed by the cost of the “tooling.”

My lathe and milling machine cost less than $1500. The cost of my micrometers exceeds $1000 without counting toolposts, toolholders, inserts, and a wealth of other things.

Reloading is something like that. You can get a starting kit for around $175 that has just about everything you need to start reloading. You need to add dies, reloading manual, and consumables.

Assuming you are reloading for 9mm, your dies will be between $40 and a couple of hundred. I’m currently using Redding, which prices out at $75. Manuals run $25 or so. This puts the total cost of tooling just under $300.

Your consumables will be primers at $80 per 1,000, powder at $156 for four pounds, 115gr RMR JHP at $115 per 1,000.

This puts your consumables at $351 for a total start cost of $650 or so.

Assuming you are reloading “free” brass, this gives you a startup cost of $0.60/round, which is more than range candy but less than personal defense ammo.

After your initial investment, your costs will decrease, but it will take a while before you are truly saving money.

Your next 1,000 rounds will cost you $80 for primers and $115 for bullets, giving you a cost per round of $0.195. This would bring your costs from $0.60 to $0.422 per round, including your original investment.

The place where costs really change is when you need to start reloading a different caliber. Using the same equipment, you can add a set of dies, $75, and begin reloading a different caliber.

Availability

During the great panic-demic it became nearly impossible to buy certain calibers of ammunition. Even now, it is sometimes difficult to buy certain calibers.

If you have reloading equipment, those limitations are reduced.

I, personally, reload .38 Special and .357 Magnum with cast bullets. I cast HP myself and find those rounds to be consistent in weight and go where I point them.

My LGS was only selling cowboy loads and very expensive self-defense loads. They had no brass, they had no bullets, they had no primers, and their selection of powders was limited. For the cost of a set of very nice bullet molds, I was able to create freedom seeds for my R95 and revolver.

8mm Mauser is difficult to find and expensive; I’ve got nearly 500 rounds of it for the cost of bullets and powder. The same with 30-30 and 45-70.

I believe the only firearms I cannot reload for are my shotguns. Since I only run 4 rounds a year out of them, it’s not a real issue.

This is the great power of reloading, in my opinion. You can reload for unusual calibers for the cost of a set of dies and bullets.

Quality

The big-time long-distance shooters swear by hand reloading their ammo. I believe them. When I’m reloading, I attempt to maintain that same level of quality as they do. I may or may not succeed, but it is nice to know that I’m close.

Safety

There are two big rules in reloading:

  1. Don’t Shoot Other People’s Reload.
  2. Your mistake can kill you.

I currently use a Franklin Armory hand primer. It works for me. I can feel each primer seat properly. Before I had the hand primer, I used two different on-press tools.

One day, I was at a private range shooting .45 Colt out of a Marlin lever action. I would pull the trigger, the hammer would fall, and there would be no bang. Not even a pop. This was a problem, but I found nothing horribly wrong. It just meant I had to fix something.

Then I switched to my 1911. Bang. Bang. Pop. STOP!

I had a squib.

This led to me pulling every bullet on that set of reloaded rounds. Luckily there were only 20 of each caliber.

Conclusion

The startup cost of reloading is not horrible. The cost grows like in every hobby. Your break-even point will be in the 4,000 round range at today’s prices.

My start was $50 for a press, four or five sets of dies, a bunch of brass, and some other stuff. I bought a pound of Hodgdon’s No. 5 powder, a Lee Reloading manual, Lee powder scoops, a box of .45 ACP bullets, and 100 primers. My total investment to start was less than $200 for my first 100 rounds, giving me breakeven on my first 100 rounds.

Your mileage may vary.

Charlie’s Voice

I’ve been working with Ally on how to communicate in Charlie’s Voice.

What I believe I’ve found is that he starts with people that are willing to have a conversation. Usually, the people he is speaking with have the start of their conversation with Charlie written out. They expect to have a one punch knockout.

It seldom goes that way.

The reason is that Charlie starts investigating how to connect with them or to get them to articulate what they mean by the words they are using.

This allows him to use his wealth of general knowledge to have a conversation where they are working from talking points, emotions, and opinions and Charlie is working from a fact based world view.

I’m still working on this, and we are still looking from articles by you.

9mm jacketed hollow point cartridge compared to a 9mm full metal jacket 9x19 parabellum.

FMJ or JHP

Train Like You Fight, Fight Like You Train

One of the consistent doctrines of the US military is the above. And we do train that way. We train to be able to overcome, to succeed.

There are countless examples of training interfering with fighting and even more of training bringing victory to the battlefield.

The first cops into the Nashville school state that their training just took over. They moved with purpose towards the sound of gunfire. They cleared rooms along the way, rapidly with no wasted motion. When they had cleared, they took the lead and did not stop until the asshole was dead.

Compared to the school cops that ran and hid in Texas and Florida. In both cases they went into barricaded with hostages, and children died because of their cowardice and lack of training.

Another example from an earlier time: when they recovered the body of a dead cop, they found six expended cases in his pocket or pouch. Why? Because he had been trained to retain his brass when he reloaded.

Why do we train with FMJ bullets?

Cartridge Pricing

These are representative prices. I’m not suggesting that these are the best prices, but they come from the same source.
Description,Quantity,Price,Per Unit

Quantity Type Description Price Per Unit
1000 rounds 115gr FMJ $215 $0.21
50 rounds 124gr JHP 9mm $40 $0.80
2,000 bullets 115gr 9mm FMJ $125 $0.06
500 bullets 115gr 9mm JHP $60 $0.12
2,000 bullets 115gr 9mm FMJ $200 $0.10
2,000 bullets 115gr 9mm JHP $225 $0.1125

The cost of reloading a FMJ and a JHP is the same but for the cost of the bullet.

Training Costs

If you are buying your training rounds, you are going to save nearly 60 cents per round. When you are talking about 100 or more rounds in a single training session, that is a $60 difference per 100 rounds.

That means that most people will use “range candy” instead of self defense rounds.

On the other hand, the difference between firing a reloaded FMJ vs. a JHP is 6 cents per round. Even with a range session of 200 rounds going downrange, that is only a $12 difference in cost.

For me this is a non-starter. I am working through my FMJ .45 ACP but I will no longer reload FMJ pistol ammo. It isn’t worth it to me.

Changing EDC And Stocking Up on Freedom Seeds

I have some 9mm pistols. The Blue-Haired Fairie’s is an H&K in 9mm. The PC-9 is 9mm and takes Glock magazines, so I have a Glock.

What I didn’t have was an EDC that I actually liked. I’ve never been particularly fond of the Glocks. It might be because I was driving nails with my Kimber in .45 ACP and with the H&K, but the Glock had rounds going “that-a-way” for me. I traded it for something.

My Kahr got upgraded to a Sig P938, which I like. I just don’t like shooting it. It is so small and so light that it bites when it is fired.

That Kahr and later P938 were my EDC when I needed something small for when I was in the office. I had one box of Hornady Critical Defense for it. I fired just enough of those $1-per-round personal defense rounds to know that my FMJ reloads went to the same place.

So I looked through all the cans looking for 9mm. I found over 1,000 rounds of FMJ or copper-plated rounds. No problem there. What I didn’t find was any JHP.

This led to a big thank you to my son. Yesterday he moved every single ammo can until we found the crate with 9 mm and .45 ACP bullets.

The Ammo Hunt

My ammo cans are in crates: 4 30-cal cans per crate or 3 50-cal cans per crate. I also have some simple crates that hold bullets, brass, and other fun stuff. Each can is properly labeled.

The issue was that the crate labeled “bullets” was at the bottom of the hardest-to-reach stack of crates.

My son diligently worked his way to that stack and handed them all out to me until he got to that final crate at the bottom of the final stack. Therein he located 2,000 JHP bullets, just waiting to grow into Freedom Seeds!

I see reloading time in my future. There is no need to have bullets when I have spark buttons, powder, cases, and seeds.

As we say, shooting is a perishable skill, and I need more range time.

Conclusion

What do you think is the proper ratio of seeds to seed dispensers? My current is around 1,000 seeds per caliber or 500 per dispenser, whichever is greater.

Newcommers

EDC
Every Day Carry. It can refer to a firearm, knife, light, or IFAK. The stuff that you have with you all the time.
IFAK
Individual First Aid Kit
Spark Button
Primers
Seeds
Bullets
Freedom Seeds
A complete cartridge, ready to fire.
Seed Dispenser
A firearm

You can buy cartridges, or you can make cartridges. The process of making a cartridge is called “reloading” because, in general, we are recycling the cases of fired cartridges.

A cartridge consists of a case, normally brass, sometimes aluminum or steel, which holds all the other components. A primer, which causes a spark when struck correctly by the firing pin of a firearm. A propellant called powder, gunpowder, or smokeless powder. Gunpowder is not the same as smokeless powder; using smokeless powder when the firearm expects gunpowder or black powder causes bad things to happen. And a bullet.

We use a reloading press to prepare the case and insert the primer. We add powder to the case, then place the bullet in the mouth of the case and use the press to seat the bullet. Once done, you have a cartridge that is as good as, if not better than, factory cartridges.