Skills

Prepping – Butchering a Deer

I know we’re out of season, but this seemed to be a good topic. Butchering applies to all animals, and whether you’re taking something small or large, there’s a level of skill to getting it done. The video is self explanatory, and it’s pretty good. I learned things watching it, and I hope you do, too.

I wanted to talk about butchering in general, though, for those who may not want to sit through an hour long video (though I do recommend doing so when you have time, it’s VERY good). In my very strong opinion, the hardest part about harvesting an animal is killing it. Once the animal is dead, it doesn’t really matter what you do to the body. It’s not going to complain or suffer in any way. So if you can shoot or otherwise dispatch the animal, know that the butchering can go as slow as needed and no one’s going to judge you for your cuts.

The purpose of butchering is to get the meat off the animal and into usable pieces. When you’re talking about large game like deer, elk, moose, bear, and the like, you will be dealing with parts rather than a whole animal. Like in the video, your butchering will consist of taking pieces off the larger carcass, and then preparing them for freezing or otherwise preserving them for long-term storage. Smaller animals like chickens, ducks, geese, possum, squirrel, etc. are small enough to allow you to work with the whole animal, and so the process is slightly different. You can prepare the entire carcass for freezing or preserving, which can be easier (but occasionally is more tedious).

The first order of business with any animal is to remove the guts, the viscera. Generally speaking, this involves opening the stomach cavity from the anus to the ribs, and then carefully pulling everything out. In larger animals this is pretty easy except for the first cuts. I always worry I’m going to puncture something when I’m cutting around the anus, and you don’t want that because you don’t want fecal matter in what’s going to be your food. Basically, you have one long connected tube (or more correctly, set of tubes) that go from mouth to ass, and you need to remove it all. There are internal organs that can be eaten, like the heart, liver, and kidneys. Technically, brain is also edible, as well as other stuff, but the other areas are very much filters for all sorts of things. Liver and kidneys, while filters, aren’t likely to pass anything on to you (especially after both freezing and cooking), but I always avoid the brain, lungs, and other stuff. The sole exception to this is that you can use the large intestines of some animals to make sausage casing (generally you would use pig, but technically any large animal intestine will do), but it requires a lot of cleaning to make it safe. Hides on larger animals can be removed first or last, depending on how you’re storing it during processing.

Read More

happy new year 2025 countdown clock on abstract glittering midnight sky with copy space, festive party invitation card concept for new years eve

Tick Tock, The Clock is Done

The amount of grief I’ve put up with to get this working buggers imagination.

To have a NTP stratum 1 server, you need to have a certain set of capabilities.

First, you need a stratum 0 device. This is an atomic clock or a GPS receiver.

You need a method to communicate with the GPS receiver.

Your clock needs to be network connected.

Each of these pieces must be done correctly with the least amount of jitter possible.

Jitter is how much a signal deviates from its target. If the jitter is zero, then we have a level of accuracy that depends solely on our reference clock.

The little GPS unit is self-contained. If it is supplied 3.3V of power, it will search for satellites and do the calculations to know what time it is and where it is.

The calculations turn out to be for someplace along the cable from the antenna to the GPS unit. Some highly accurate versions of the GPS SoC measure the length of the antenna feed and account for that in the calculations. Regardless, it is the time for a place a little offset from the actual GPS chip.

For me, that is a delay of around 10ns.

The GPS will communicate via a serial protocol. This means that we have a delay from when the message is received and when we can put our timestamp on the message. For me, that is around 140ms.

This can be discovered by tracking the time indicated by the serial GPS and the system/local clock. The local clock is synced to multiple remote NTP servers to get this number.

Unfortunately, there is about a 1ms jitter in this signal.

If I were to use a USB converter. I.e., serial to USB, that jitter goes up. I am seeing a jitter of 4 to 9 ms.

Using the serial directly is a good start.

But there is another signal that can help. That is the Pulse Per Second (PPS). We are using a 1second pulse.

IFF we can capture the time at which the pulse arrives, we can get a very accurate start of the second marker.

This requires that the hardware have a general purpose input/output(GPIO) pin available.

Most motherboards do not have exposed GPIO pins. Worse, some boards have GPIO pins, but there is no documentation on how to access them.

So the server board requires GPIO plus a method of accessing those pins.

There are two ways to discover a change of value, we can pole for it, or we can get an interrupt.

Consider you have your phone alerts silenced so you don’t get a noise every time you receive an email or message.

You have to check your phone for new messages. This is “poling”.

If somebody calls, your phone still rings. You then immediately check to see who it is and perhaps answer the phone.

This is an interrupt.

The default operation of a GPIO pin is poling driven. Even if it is generating an interrupt, that interrupt is only used to record the change of value.

What is needed is a high-performance interrupt handler. When an interrupt happens, the handler records the system clock. A user land process watches, either poling or interrupt, it doesn’t matter, for that value to change.

When it changes, the software knows that the GPS “knew” it was the start of the second when it created the pulse.

The amount of jitter is only as much time as it takes for the system to allocate a CPU and for that CPU to process the interrupt. In other words, really, really fast.

Currently, the jitter on my PPS reference clock is 300ns. Because of the many samples that have been taken, the PPS reference clock is currently running 17ns from the real time. That has been going down over the last few hours. By the time you read this, it is likely to be even less.

The PPS clock is so tight that the other clock sources hide the values, even in logarithmic form

This is an interesting graph, to me, as it indicates how the system clock is slowly being conditioned to keep more accurate time. It software currently says that the drift is -17.796271 ppm off which I think translates to 3.324ms

So how bad was this task?  More painful than I wanted it to be.

I’m fine with “dumb” computers.  I started programming on 6502s.  I’ve been bit slinging for 50 years.  Programming Arduino’s?  No problem.

Building a PC from components, installing any compatible operating system?  I do it a dozen times a week when developing.

The Raspberry Pi is a different animal.  It isn’t sold as a low-level system.  You can use it that way, but that is not how it is intended to be used. It is sold as a System On a Board (SOB) that runs a modern (Linux, Android) operating system.

This is where things get strange. When we are working with modern PCs, they have known hardware.  We boot the computer, run the OS, the OS has drivers to talk to the hardware.  Everything just works.

This is possible because PC’s have a Basic Input Output System (BIOS).  This is a low-level set of routines that are there to allow accessing certain parts of the hardware with a standard Application Protocol Interface (API).

Since every BIOS has the same API, OS vendors can use the BIOS to load enough of their software to continue booting.  The hardware is attached in known ways.  The hardware vendor supplies the drivers for their hardware.  Linux people write their drivers if needed.

So consider that SOB. It has a serial port.  The serial port is controlled by a standard UART.  That UART is programmed in a standard way.  They are all the same.

In order for that UART to work, the software needs to know where the UART is located in memory (or on the I/O bus). In addition, the pins that the UART uses have to be configured for the UART.  Most UART’s use standard pins on the GPIO header. The pins that the UART uses can be used in different modes for different things.

The problem comes from that address being different in every SOB or SOC.  A board could have one, two, or more GPIO driver chips.  It all depends on the designer.

The developers overcome this issue with what is called a “Device Tree”.

The device tree is a parsable description of devices and their locations in memory or on the I/O bus.

The board I purchased doesn’t have a supported modern OS.  The only OS that I could get to boot was released in 2016.  The OS is not really supported anymore.  The board itself was flaky. It would randomly reboot, or just power off.

The “modern” OS that should have worked didn’t even complete the boot.

In discussions with a community support person, we decided that there was hardware that was not being properly initialized in the kernel.  I.e., we had a bad Device Tree.

The replacement Banana Pi doesn’t have a supported modern OS.  It is fully supported by Arabian, which is a supported, modern OS.

When I first booted the system, it just worked.  I was thrilled.  It has continued to work properly.

Then I plugged the GPS in.  I could see it blinking.  This indicates that it has a lock and the PPS signal is being sent.

But I can’t get any input on the serial ports.

It turns out that the default device tree doesn’t activate that UART.  Once I figured that out, I had to find an overlay to the device tree to turn on the UART.

That was a pain, but it happened.

Working serial, no PPS.

With the tools on hand, I could monitor the GPIO pin and see the PPS.  But it wasn’t doing anything.

I loaded the correct kernel modules, still no PPS.

My Google Foo suggested that the device tree entry for PPS was missing.

Yep, there was no PPS overlay.

The Linux kernel documentation describes the Device Tree.  But no real examples, and nothing fully commented.

By comparing multiple sources, I finally was able to create a device tree overlay for PPS. I need to figure out how to return that DTD to the community.  The problem is, I don’t know what the hell I did.  I made it work.  I think I know what was done.  Nonetheless, it was truly a case of looking at different device tree overlays and picking out the parts that seemed to match what I needed to do.

I don’t think I’ve had this much difficulty hooking up a piece of hardware since 1983, when I was attempting to attach a DEC 10 MB hard drive to a computer that wasn’t really a DEC.

The only tasks remaining is to put everything in a case and move it to its long-term home, off the top of my computer.

The Weekly Feast – Potato Soup

At this time of year, with the blisteringly cold nights, a pot of hearty potato soup is just the thing to warm you. I love this plain, where I get to enjoy the simple flavors of the potato itself. I also love it “blinged out” with cheese and onions and other delicious additives. It’s super easy to make, too!

Ingredients:

  • two tbsp margarine, butter or olive oil
  • one potato per person, plus one extra, diced, skins on or off to taste
  • one to two onions, chopped roughly
  • one tbsp minced garlic per person
  • enough chicken or vegetable stock to cover the potatoes completely
  • milk or cream, to taste
  • finely chopped fresh parsley (optional)
  • crumbled fresh bacon (optional)
  • shredded cheese of your choice (optional)

In a soup pot, heat your butter or oil and add the onions. Cook for a few minutes, until the onions are clear and limp. Add the garlic and stir well, cooking for another minute. If you are using fresh parsley, add half of it now and give the onions a good stir, then add the potatoes and the broth, just to cover them. Bring to a boil, then reduce heat and simmer until potatoes are tender and starting to fall apart.

Remove the pot from the heat. Using a potato masher, mash the potatoes until they are the consistency you like. Some people prefer a lumpy soup, with large chunks of potatoes (that would be me). Others like a smooth, pureed soup (my children), and this can be achieved by pouring the soup into a food processor or blender and giving it a bit of a whir. Alternatively, you can use an immersion blender easily enough for something in between.

Once the soup is the right consistency, return it to a medium high heat and bring it to a low boil. Add your cream or milk if you want, and salt and pepper to taste. Simmer until it’s as thick as you like it. As a quick fix, if you find your soup isn’t thick enough, you can always add dehydrated potato flakes until it’s the right thickness. Add the remaining fresh parsley right before removing it from the heat, and stir to distribute evenly. Serve the soup in large bowls garnished with a sprig of parsley, and a sprinkle each of bacon and cheese.

Notes:

If you’re in a real hurry, or you’re exhausted and just want potato soup, use instant potato flakes in your favorite flavor. Add enough liquid to make it soupy, then add your onions, parsley, and toppings. This isn’t as good as making it yourself, but it’s nice in a pinch or when you’re camping and don’t want to be bothered with whole potatoes.

You can add all sorts of things to potato soup. A loaded baked potato soup would have bacon, onions, sauteed mushrooms, and cheese. You could do broccoli and cheese as a topper for something that pretends to be healthier. Add a dollop of sour cream and paprika to the top for a creamier finish. Use your imagination!

Prepping – Gardening

When people ask me how much food I have prepped, I always say just about 18 months. It’s an odd number to many, and I often get asked why. The answer is, if the apocalypse begins right in the middle of summer and it’s too late to start planting, that’s the “worst case scenario.” From there to a finished crop is just about 18 months, give or take a few weeks. So 18 months is the longest I can expect to be with no food.

That assumes, of course, that I know how to make a garden grow. Now, I do know, and I’ve practiced. At one point, we had a small farm with an acre of kitchen garden that friends and I tended. I raised chickens and we hunted, and we traded with locals for things we didn’t grow or hunt. It was a lovely way to live and I miss it terribly. Sadness aside, I spent four years or so learning how to grow a garden of sustainable size. I’ve done the practice, though I need to continue to practice.

If you’ve never grown anything other than a few flowers, you need to begin learning how to grow crops now. This is not something you can “learn as you go” during an emergency. You need to know how to do all this stuff before an emergency. Do you know what to grow? Do you know how to grow it? Do you know how to harvest it? Do you know how to preserve its seeds, or otherwise get a crop the following year without getting seeds from a store? You must have the answers to all these questions and more before the SHTF.

The first and most important question to ask yourself is what kind of food you can grow, and what kind you want to grow. You should focus on learning how to grow the things that are in the middle of that Venn diagram. I usually suggest people start with garlic, green beans, herbs, and some sort of squash. All four are easy to grow, and require only a bit of attention to keep the weeds and predators out. I can tell you that my family can eat 100 feet of green beans each year. That’s a LOT. Most people plant about half that, if they’re planning on growing all their beans rather than purchasing. What that does NOT include is seed for next year, and that’s an important thing to remember.

I find that the best information for beginner gardeners comes from the Victory Garden networks out there (like these: Plant a Victory Garden and Vintage Victory Garden booklet). Victory Gardens were grown during WWII as a patriotic method of keeping commercially grown food for “the boys across the water.” Today, they’re an act of rebellion, because growing food makes you less dependent upon The Man. The idea of a Victory Garden is to provide enough supplemental food for your family that you don’t rely as heavily upon the government and commercial farmers to feed you. I suspect that this is a very good practice for all conservatives to begin as we move into a time of frugality and less government spending.

Read More

The Weekly Feast – Garlic Pull-Apart Bread

This stuff is crack. It’s worse than potato chips. You can’t just eat one. They’re so yummy that you won’t be able to help yourself. It can be made with margarine instead of butter and it turns out okay, but if you can digest dairy, use butter.

Ingredients for the dough:

  • 1/4 cup warm water
  • 1 tbsp active dry yeast
  • 1-1/2 tbsp sugar
  • 1 cup milk, warm
  • 2 large eggs, beaten
  • 1-3/4 tsp salt
  • 1 cup butter, melted
  • 5 cups bread flour
  • no-stick spray

Ingredients for the garlic butter:

  • 1/2 cup butter
  • 8 garlic cloves, grated or minced very fine
  • 1 tsp salt
  • 1/4 cup finely chopped parsley
  • 1 tbsp finely chopped rosemary
  • 1/4 cup shredded Parmesan cheese

First, gently whisk together the water, yeast, and 1/2 tablespoon of the sugar in a bowl. Let this proof until it’s bubbly and smells yeasty, at least five minutes.

To the yeast mixture, add in the milk, eggs, salt, butter, and the rest of the sugar. Beat these together with a wooden spoon or with a dough hook in your stand mixer. Slowly begin to add the flour, half a cup at a time.

Once all the flour is incorporated, knead the dough until it’s smooth and elastic. This will take 5 to 10 minutes in a stand mixer, or up to 20 minutes by hand. Always finish up your dough by hand, so you can tell when it’s ready. Place the kneaded dough into a lightly oiled bowl and turn it to cover all the dough with the oil. Cover with plastic wrap or a grocery bag with no holes, and let it rise until it’s doubled in size. This will take one to two hours.

While the dough is rising, make your garlic butter. Combine the butter, garlic, and salt in a small saucepan. Heat over a medium low heat and stir occasionally, until the butter is completely melted. Remove it from the heat, and stir in the parsley and rosemary. Reserve a tablespoon of the garlic butter for brushing on the finished bread.

Lightly grease two loaf pans (your favorite no-stick spray works great for this). Turn out the dough onto a lightly floured surface. Divide the dough into about 40 pieces. Shape each piece into a ball. Roll half the dough balls in the garlic butter, and arrange them in the bottom of the prepared loaf pans. Sprinkle with half of the Parmesan. Repeat with the rest of the dough balls. If you have any of the garlic butter left (except the reserved tablespoon), drizzle it evenly over the loaves.

Cover your pans loosely with plastic wrap or grocery bags, and let the dough rise until it has doubled in size. This will not take as long as the first rise, so plan on it being 45 minutes to an hour. Preheat your oven to 350°F during the last 20 minutes of the rise.

Uncover your loaves and put the pans in your preheated oven. Bake the bread until the tops are golden brown. If you have a thermometer, the interior should be about 200°F, which should take about 35 to 40 minutes to bake. Remove the loaves from the oven and brush the tops lightly with the reserved tablespoon of garlic butter. If necessary, reheat the butter to melt it.

Cool the loaves in the pans for five minutes, then remove the bread from the pans. Serve while still warm, with a side of pizza sauce!

Pipe Whipped Cream in Center Filling. Making Boston Banoffee Pie.

One Step Forward n Steps Back (geek)

I’ve known about “System On a Chip” and “System On a Board” for many years. I have one of the early embedded software development kits, including some TI chipset.

The most common style of these today is likely the Arduino class of SoC. These things are incredible.

An idea I pitched years ago, for potential military use, was a swarm of small single purpose computers that could be dropped in mass from an aircraft.

Something about the size of a quarter with one or two sensors, a mesh Wi-Fi system, GPS, and a battery. These would drop like the “helicopter” seed pods, scatter over an area, then set up a monitoring network. Using spread spectrum, low power, and burst transmissions, the network might be difficult to detect.

As the sensors detected “things”, they would report to a transmission unit, which would then send a report to home base.

This was all based on a small battery. We figured we could get these things in mass and get them ready to toss out the back of a C130 for less than $100 each.

Today, I can buy a chip that will do that, put it on a custom board with all components for less than $20 in low unit counts.

So SoC, way cool.

The other thing that has been happening is that the physical size requirements for a personal computer have gone way down. Whereas the original XT motherboard was 8.5×11 and the AT was 12×13, we are now seeing Mini-ITX at 6.7×6.7 and even Nano-ITX at 4.7×4.7.

My son found the Mini-ITX form factor computer a few years ago. A full computer that was the size of 3 boxes of .45cal. It weights less.

His computer came with 2 HDMI ports, 4 USB3.2 ports, a headphone jack, Wi-Fi, Bluetooth, and 1Gb Ethernet. It had upgradable memory and at least one M.2 port. This thing just works.

What is cool about it is that it mounts to the back of a monitor. He needs his keyboard and two power supplies.

It is what I got my lovely wife for Christmas this last year.

Can I ditch the big boxes?

Things go in circles. My primary machine lives in a case I purchased almost 20 years ago. It has a new power supply, an extra video card, and a SAS controller. It is designed to handle 9 internal drives plus the optical drive. It can connect to external SAS cabinets.

It was designed to have 36 TB of storage in a ZFS pool. It is heavy. It requires big fans. It is a workhorse.

But, I’m moving away from ZFS. It is a great system, I love it. It just does not meet my current needs. I’ve moved to ceph, a distributed system.

Ceph does not use raid technology the same way that ZFS does. Instead, it depends on having many nodes with lots of redundancy.

With ZFS, my normal was one parity drive for every 4 data drives. So a 20% overhead.

In its fast mode, ceph has a 200% overhead. For every block of data stored, it requires two copies. There are modes that are more optimized, but they all seem to have higher overhead than a raid system.

But because I don’t need to create 5 drive pools, I can do something different. More boxes with just a few drives in each.

I don’t need all that motherboard. I don’t need all that memory. I don’t even need all that much CPU.

Some of the servers I’m using only support two SATA drives, but have an NVMe slot. Still, it is a big box.

My answer was to go looking. I found a cheap ITX-Mini motherboard. It would have been cheaper off the boat, but I found it on Amazon. A used i5 CPU. It will handle an i7 and maybe an i9. A cheap 128GB NVMe, and some DDR3 ram. Toss in a CPU cooler and it is a fully functional system.

It only has a Gigabit Ethernet, but it has a PCI slot. It has four SATA ports.

The cheap case I found has four hot swap bays for SATA drives. It takes a Mini-ITX motherboard. This thing is perfect for what I require.

So yes, this can do the job. I can downsize.

What else is cool about these Mini-ITX boards?

They really are designed with specific markets in mind. I found one with 2 2.5Gb RJ45 and 2 10Gb SFP+ ports. It has GPIO ports, comes in an extruded aluminum heat sink/case. It replaced the old router and everything got faster.

There are versions with multiple RJ45 ports. Different layouts. Different CPU designs. Some come with a CPU on the board, making them a SoB. Some are AMD, some are Intel based.

What I couldn’t find is a board with four SATA ports, a PCIe slot, and GPIO.

Which brings me back to PI

The board I want needs to have hardware-driven Ethernet, GPIO pins, and serial IO. It also has to be cheap. I think I found it in the Banana PI M2 Ultra.

It has everything I need, it was very cheap, less than dinner for three at the fast food joint.

My step backward? It requires power that I can’t give it. GRRR. So it requires a dedicated power supply.

Oh well, my NTP server is almost here.

Prepping – Fitness

I’m writing this while I pant heavily, sitting in my chair at my desk. I’ve just finished cleaning bunny cages and exercising, and I’m dripping with sweat despite it being a mere 58*F in my room. I’m exhausted and aching. I am not fit.

I’ve seen this topic touched on a few times in the prepping world, but not really in a practical manner. Fitness is something that doesn’t really exist in the “Rule of Threes” or in common prepping documents. It does matter, though. So much so, that I feel it belongs under “three minutes without air” because right now, I’m panting. I mentioned that.

I get practical exercise every summer. I spent the weekends (2 to 3 overnights) living in a tent and cooking over a fire with cast iron. I’ve had some of our (very fit) fighters carry my cast iron pots to the table for me at the end of a long day, and they’re always astonished at the weight that I “seemingly easily” lug around all day. And it’s that weekly practice (or daily really) that makes it possible for my fat ass to haul this stuff over and around camp.

Our bodies were made to keep us alive under horrendous circumstances. The whole “fight or flight” thing is part of our basic human wiring. This means that our metabolism likes to find sugar, salt, and fat. We crave it! When you’re a Scotsman in the highlands above Edinburgh, dodging the English invaders, it makes sense. You need to find those things that will keep your body working. When you’re sitting at a desk typing emails all day, not so much. It works against us. We want to sit and do the things that stimulate our brains, but unlike even 20 years ago, pretty much everything that stimulates our brains is right here at our fingertips (with Doordash being a thing, doubly so).

It behooves each of us to get up off our duffs five to seven times a week, and move around. I don’t mean doing the dishes (though do those too). I mean exercise of the hot, sweaty, uncomfortable kind. If you’re very out of shape, going for a 20 minute walk five times a week will improve pretty much everything: mind, body, and spirit. Lifting weights for a similar amount of time will do the same thing. Ditto with using a ski machine, swimming, playing a physical game like tennis or soccer, going roller skating or ice skating, and running bases with your kids.

If you can’t do any of those things, chair exercises exist. That’s where I started, so don’t be embarrassed. You have to start somewhere, and no one needs to know. But you need to do it. This is a NEED, not a want or a desire. If you can’t pick up and go because of your lack of fitness, then the problem is 100% you. Please note, people with physical disabilities and such, who simply *cannot* do it, are exempt from this shaming. If you can’t, you can’t, and I get that. But if you can and you just don’t want to, that’s on you.

I really do get it. I don’t like getting sweaty except in one way. I don’t like it when my body aches. I don’t like being on a treadmill or bike machine. It’s boring and stupid and I hate it. But I need to do it, because if I don’t, I won’t be carrying even a half load in my pack, never mind a full load. If I can’t carry a full load, there’s not a whole lot of point in my bugging out, because I won’t get far.

So… what are you doing to make yourself more able, more fit, and more in shape?

A Little Shake of Pepper (what is a nanosecond)

Correction(s):
I made the mistake of trusting Google’s AI answer.

Speed of light:

Time Distance
1s 299,792,458m
0.001s(1ms) 299,792.458m
0.000001s(1us) 299.792m
0.000000001s(1ns) 0.2997m (299.7mm)
0.000000000001s(1ps) 0.0002997m (0.2997mm)

Sorry for that. A pepper grain is the size of a picosecond. A nanosecond is around 11.7 inches, which makes much more sense.


My mentor, Mike, had so much to teach me. Coming from University, I knew I was the best programmer on campus and better than anybody I had met.

That changed the day I met Mike. After being introduced to him, I went to my boss and said something like, “That is the most arrogant man I’ve ever met.”

Greg replied, “He’s earned it.”

When I had an opportunity to work with him, I found that yes, he was that good.

He was the first person to stretch my abilities in computer science. I will forever be thankful to him for that.

He had the privilege of meeting Admiral Grace. He was one of the many that were handed her “packet of Nanoseconds”.

This was Grace’s way of getting across to people just how fast computers were running.

In 1 ms, light will travel 299.79 meters. This is a reasonable rifle shot.

In 1 us, light will travel 0.2998 meters (299.8mm), or about 1.2 inches.

In 1 ns, light will travel 0.2998 mm. This is about the size of a single grain of ground pepper.

Just how fast?

My Cray X-MP/48 had a memory bank cycle time of 38ns. This means that light would be able to travel about 10mm or a little less than 0.5 inches.

My memory said that we had a 85ns wait time from accessing memory to having loaded that word into a register.

Your PC likely runs faster than that X/MP. It surely has more memory.

Frames of Reference

As stated above, my world was baby sitting a Cray Super Computer. We worked in nanoseconds. We were trying to optimize code to shave a few nanoseconds out of a loop.

Saving grains of pepper.

When I purchased some study lights for doing photoshoots, I didn’t buy the fancy radio controllers. Instead, I bought “slave” style lights.

With the slave style, you could tell your study light to fire when it detected the flash of another strobe.

Before I purchased these study lights, I went to Mike with concern. I had done the math.

From the moment my flash fired, a long sequence of things had to take place. The light had to travel from my strobe to the detector on the study light. There was a delay while the photoreceptor energized and “fired”. There was still more time as that signal propagated through the circuitry, and finally that light would fire.

My studio lights would be at different distances, we couldn’t even predict the sequence that they would fire.

According to my simple calculations, we could be talking as much as 2ms from the time my light fired until the last study light fired.

Mike pulled me back to the ground. My shutter speed would be set to 1/60 of a second. That is 16.6ms. If the study lights fired anytime while the shutter was open, I would get a good photo.

I was so focused on my reference frame, nanoseconds, I lost sight of the real-world application that was running in 10s of milliseconds.

pkoning Brings Reality to the Clocks

Here is the magic of GPS. It works by knowing the time and then calculating the distance to different satellites.

The more accurate the clock, the more accurate the location.

Communicating that time to an external device is where it gets interesting. The definition of NMEA tells use exactly when the second mark occurs during the transmission of the NMEA message.

Most GPS units default to transmitting at 9600 baud. Which for us is the same as 9600 bits/second. Each 8 bit byte sent requires start and stop bits. My rule of thumb is 10 bits per byte.

This means that it takes around 83ms to transmit one 80 character NMEA sentence from the GPS to the computer.

The instant when the second starts aligns with the edge of a signal of one of the characters in that sentence.

Now my issue was that I thought that the GPS unit had time that was “wrong” it was offset from the real world.

This is not the case. The real reason for the delay is in the time it takes to process the sentence. That should be fixed to the computer, not to the GPS unit.

Which brings us to PPS, or Pulse Per Second. This is a signal that indicates the start of a second. Depending on the GPS unit, this can be at ns accuracy. Even cheap units will get you sub us accuracy.

The processing time to handle the pulse is much lower than to handle a full NMEA sentence.

A PPS can be treated as the “real” time, without fear of being too far away from reality.

A couple of grains of pepper.

The Weekly Feast – Turmeric Meatballs

Meatballs are the ultimate feast food, in my opinion. There are as many ways to make them as there are cooks, and maybe more. This recipe was created based upon a video by Country Life Vlog in Azerbaijan, Turkey. While Aziza (the cook) doesn’t give you amounts or any real instructions, I pieced this together by watching her cooking the meal. It’s incredibly delicious!

Ingredients:

For the broth:

  • 6 cups water
  • 1 lb beef soup bones
  • 1 lb beef, diced
  • 1 lb pork, diced
  • 1 head of garlic, halved across the middle, paper still on it
  • 1 large onion, quartered
  • 1 hot pepper (dehydrated or fresh)
  • salt, pepper, bay leaves

For the meatballs:

  • 1 lb ground beef
  • 1 onion, minced fine
  • 1/3 cup rice, washed well
  • 1/2 tsp salt
  • 1/2 tsp black pepper
  • 1 tbsp turmeric
  • 1 tbsp dry mint (crushed fine)
  • several dates, figs, or prunes

For the rest of the recipe:

  • 3 large potatoes, peeled and split in half the long way
  • 1 can chickpeas, well rinsed
  • several threads of saffron

Make your broth first. Add the broth ingredients into a large pot and bring it to a boil. Reduce the heat and allow it to simmer for at least 3 hours, adding water as necessary to keep it from drying out. If you want to skip this part, you can use 6 cups of beef broth, and add the other ingredients to it, and let it simmer for 30 minutes before moving on.

While the broth is cooking, work on your meatballs. In a large bowl, add all the ingredients except the figs. Mix together by hand, until everything is well distributed. Let this sit, covered, for at least 30 minutes and up to 2 hours.

When the broth is ready, remove all the ingredients and strain it to be sure there’s no hot seedy surprises lurking in the bottom. Return the broth to the pot, and taste it. Add salt and pepper to taste. Bring the broth back to a simmer while you form the meatballs.

For a pound of ground beef, make 3 to 4 meatballs (yes, they are LARGE). Really manhandle the meatballs, slapping them from hand to hand to make them fairly solid. In the center of each meatball, place one fig, and form the ball around it. Set the meatballs aside.

Mix together a tablespoon of turmeric, a cup of water, and a dash of salt, and whisk to combine. Use this turmeric water to “wash” the outside of the meatballs. This adds a bit of flavor, but also smooths the outside of the meatballs to help them hold together better while cooking. As each meatball is done, place it into the simmering broth. Make certain the broth covers the meatballs most of the way. Cover the pot, and allow to simmer.

Peel and slice your potatoes in half now, and slide them into the broth around the meatballs. Add the rinsed chickpeas, a few figs, and the saffron, as well. Be careful not to squish the meatballs, as they aren’t firm yet and could fall apart. If there isn’t enough liquid at this point to cover everything, you can add a bit of beef broth or water, or even a dash of red wine, to bring it up high enough. Using a large spoon, gently nudge the meatballs to make sure all sides are getting evenly cooked, and they aren’t sticking to the bottom of the pot.
Simmer until the meatballs are cooked through and the potatoes are soft and just beginning to crumble a bit. You can check the meatballs with an instant read meat thermometer. They should register at 165°F when they are ready.

Serve up this delicious meal with a side of pickles or beets if you would like to be immersed in Turkish food culture. Alternatively, a slice of bread never goes wrong, either.

Notes:
When I made this soup, I found the broth to be so spicy that I couldn’t eat it. I used a dehydrated poblano pepper, and it was just too much for me. I’m not a big heat person. Family said that it was warm but not hot to them, so your mileage may vary! I served the broth in small bowls on its own, and then put the meatballs, potatoes, and chickpeas on a plate. That way, people could use as much or little of the broth as they wanted. This was a very hearty meal.

The Country Life Vlog video:

happy new year 2025 countdown clock on abstract glittering midnight sky with copy space, festive party invitation card concept for new years eve

Tick Tock, More Clock Stuff

There are two network time protocols in use today. One is the NTP protocol, the other is PTP. I have no idea what the PTP looks like, I know that it requires hardware support.

The goal of NTP is to create a local clock that is accurate to less than 1ms from sources that have up to a hundred times that in latency.

The fact that this works at all simply amazes me.

I have 7 servers acting as an NTP cluster. That is to say, they all work to come to a consensus as to what time it is, and then each syncs to that time point.

They do this via actively querying each other every 64 seconds. The protocol knows that the referenced clock time is somewhere within the total time from query to response. Using complex statistics, it can get it much closer than just “somewhere” or “middle”.

As I am writing this, one server believes it knows the time to the network with a standard deviation of less than 500us. It has one nailed down to less than 83us.

Within the local cluster, it believes it knows the time within 50us for all the cluster members. For a few of the cluster members, they agree on the time within 3000ns (3us). That’s not bad.

So what are the problems.

The first problem is that I have a clock that claims to be very accurate, but which I know is slightly wrong.

The clock is fast by 957us with an SD of 57us. I believe it to be worse than that. The issue being that the clock is influencing the rest of the time cluster.

I did that because I had a usable fudge factor for the clock. Now I need to bring it much closer to “real time”.

To that end, I’ve reconfigured the server with the GPS clock to never use the GPS time. Instead, it will use the network servers to converge on “the time”. Once I know “the time” I will be able to adjust the GPS offset better.

The second issue is that USB injects jitter into the signal. We don’t know when the USB port received the time message from the GPS unit. Hopefully, we have a good estimate, but it is still very jittery.

It is nearly impossible to get down to 1ns or less with a clock that has a 500us jitter.

What does this mean? I need to stabilize the time signal. We do that with a PPS. This pulse tells us that the second happened on the rise or fall of the pulse. This is configurable. The second starts on the rising edge of the pulse. With a PPS input, we can reduce jitter to a few nanoseconds.

The issue still is, “What is the offset detecting the leading edge from the “real” start of the second?”

This value comes from the delay along the antenna cable and other such speed of light delays.

Which takes us to the conclusion of this article.

The GPS units I purchased came with a small ceramic antenna. The antenna is about 10 mm on a side. It has a 10 cm connector. This means the unit and the antenna are very close to each other. The antenna isn’t a great antenna.

With this taped to the inside of the window, I was picking up 3 satellites. I replaced it with a cheap, yet “real” antenna. I’m not locking on to 10 or more satellites. More locks mean better time keeping.

If you are doing this yourself, do yourself a favor and order a real antenna to go with your project.

In addition to being “real”, the cable is 3m long, giving me options on where to place it. And it is a water proof unit.