Friday, November 24, 2017

Paradise ponders: post-Thanksgiving pain edition...

Paradise ponders: post-Thanksgiving pain edition...  Our b'stilla yesterday was, we think, the best one we've made yet.  I did some research yesterday on the web, looking for advice on making them, as our past efforts, while good, didn't taste quite like the version we had at the restaurant.  I found a post allegedly by a Moroccan woman who was ranting about how Americans screwed up b'stilla. :)  She had two criticisms: one was that Americans crushed their almonds instead of grinding them (something she apparently thought was pretty close to heretic), the other was that Americans used too much water when cooking the chicken and vegetables, leading to watery broth.  Well, both of those were definitely possibilities for us – we crushed our almonds and quite likely used too much water. 

The almond rant particularly interested me, as the Moroccan woman went to some trouble to explain why it mattered.  According to her, unless you ground the almonds they wouldn't express any oil, which provides a key element of flavoring for the b'stilla.  Our crushed almonds (toasted) were always dry as dust, so I was really curious if grinding them would actually result in what she said: something akin to crunchy peanut butter.  So I whipped out our meat grinder (which we haven't used in years) and ground up our toasted almonds.  The result was ... exactly as she described: just like crunchy peanut butter, and very oily.  As directed, I mixed that with sugar and cinnamon, and the resulting concoction was way different than anything we'd used before when making a b'stilla.  And the resulting dish, I have to say, bears out that woman's rant.  I also measured the water we used very carefully, and in fact we ended up with ingredients that matched the recipe.  I think we might have done it right this time!

And there are leftovers!

The carrot salad was not what we remembered, but it was pretty good nonetheless.  This recipe had cayenne pepper in it, and we won't do that again.  Even without the pepper, though, it wouldn't have matched our memory.  We'll keep searching for the right recipe.

The chocolate mousse also came out wonderfully.  I modified Julia Child's recipe slightly (gasp!): I eliminated the coffee (going for pure, unadulterated chocolate flavor) and I increased the butter from 6 ounces to 8.  It was pretty much perfect. :)

Our little canine friends were not left out, either.  They got several treats yesterday: an extra banana (3 for 5 dogs, instead of 2), milk on their kibble, egg yolks, and the cream leftover from making the mousse.  They were all quite happy with that! :)

My brother Scott, Debbie, and I played a traditional family game last night: Oh, Shit.  Scott won. :)

Thursday, November 23, 2017

Happy Thanksgiving, everybody!

Happy Thanksgiving, everybody!  Here in Casa Loco (aka Bin of Loonies and House of the Hopeless), we have a great deal to be thankful for.  Things that come right to mind, in no particular order:
  • Debbie and I are both in age-adjusted good health.
  • We live in a wonderful place, surrounded by admirable and tolerant neighbors.
  • We're blessed with an assortment of friends who watch out for us, and make us smile.
  • We're not worried about money (this is a huge change for us in the past four years).
  • Our animals are all healthy and happy.
  • Our several friends who have had recent health scares are all feeling much better.
  • Our immediate families are all healthy and at least sometimes happy.
  • It's a beautiful day today, and our holiday meal is being prepared.
My brother Scott will be down for Thanksgiving dinner with us.  We have a non-traditional menu: the main course is a b'stilla (a traditional Moroccan holiday dish, a kind of pigeon pie - though we use chicken), a Moroccan carrot salad, and chocolate mousse for dessert.  We've made the b'stilla several times before, using a recipe given to us by the Moroccan restaurant where we first had the dish.  It's full of rich food (eggs, almonds, butter) and exotic flavors (cinnamon, especially) Americans don't often associate with chicken.  The carrot salad we're making this year is a different recipe than the one we've used in the past; the jury is out on that one.  I make the chocolate mousse from Julia Child's recipe (the best I've ever had), using Callebaut chocolate.  If you love chocolate, you should make that mousse – it's not complicated, and it's been a favorite of ours for years.

We're planning to be near-comatose by around 5 pm.  I hope you are too!

Wednesday, November 22, 2017

Remembering...

Remembering...  It was four years ago on this day that my father died.  I have many good memories, but the feeling of loss is still very strong.  Much more about him here...

Sunday, November 19, 2017

Paradise ponders: sculpture progress edition..

Paradise ponders: sculpture progress edition...  We heard from the artist who is working on a sculpture for our back yard – the clay statue is coming right along!  Two views:


Our notion is to build a water feature in our back yard that includes the sculpture.  We've got some thinking and planning to do!

Saturday, November 18, 2017

Paradise ponders: moderated temperature, kittenly progress, and bigeye tuna edition...

Paradise ponders: moderated temperature, kittenly progress, and bigeye tuna edition...  Yesterday I finished up all the remaining “mechanical” work on my office temperature moderation project.  Part of that work involved making cover plates to go over the three big rectangular holes I had earlier cut into the OSB in the storage part of my barn (photo at right shows two of these).  These were more fun than you might think, as I had to cut a 10" diameter hole in each of the cover plates.  I used my bench scroll saw to do that, and it made very short work of it indeed.  The rest of the work involved putting insulation around my office door, and then wiring up the blower.  Once that was all finished I lit off the blower, shut off my heater, and let it run all last night.  This was a test of sorts, as the outside temperature got down to 17°F last night.  This morning when I got into my office at 6 am, it was quite comfortable inside.  The temperature measured 68.3°F, which had me a bit puzzled at first: it was actually warmer in my office than the 64.8°F of the first floor.  Then it dawned on me that I'm sucking air from the ceiling of the first floor, not the 5 foot high area where the thermostat is set to 65°F.  To test that theory, I got my precision thermometer up on a ladder with me and measured the temperature at the ceiling: 73.6°F.  That got me to wondering what it would be on the floor of the first floor, so I measured it there: 62.1°F.  So there's an 11°F gradient between the floor and the ceiling of the first floor – much more than I'd have guessed.  On the other hand, there's nothing circulating the air down there, so there's every opportunity for a gradient to be established in a relatively stable way.  That observation led me to turn on the ceiling fan in my office; we'll see what that does to the measured temperatures there.

This morning I've started writing the software that will eventually control the new fan, based on the algorithm I've described in a previous post.  This would be a trivial exercise in daemon construction but for the fact that I'm going to allow some nice monitoring capability.  That requires me to write the daemon multi-threaded – a new experience in C programming for me.  I've also got another challenge: a parts delivery is late and prevents me from actually bringing up the Raspberry Pi I bought for this purpose.  So I'm writing a bunch of software that I won't be able to debug for several days, at least.  This is not my preferred modality – I like to write a little bit, then test, fix, and repeat...

The little kitten is doing very well.  We may have settled on the name “Kalea” (pronounced ka-LAY-ah), which is Hawai'ian for “full of joy”, but I wouldn't count on that. :)  It's eating like a little piglet, and spends a lot of the time sleeping.  All signs of stress have disappeared.

Yesterday at Macey's we spotted some scrumptious-looking bigeye tuna.  We bought about 20 ounces of it, and today my lovely bride made us a mess of poke with it (my bowl at right).  Oh, man, was that good!  That's raw fish in a soy-based sauce flavored with a bit of sesame oil, with avocado, green onions, and some sesame seeds for garnish.  That big-eye tuna disappeared mighty quickly!

Friday, November 17, 2017

Paradise ponders: temperature moderation progress, kitten settling in, and great customer service edition...

Paradise ponders: temperature moderation progress, kitten settling in, and great customer service edition...  Debbie and I took a nice drive up Blacksmith Fork Canyon yesterday.  We spotted several groups of deer, and noted that the bucks are back with their harems.  We also spotted a large herd of elk just north of the Hardware Ranch enclosure – they're coming back for the winter.  It won't be long now before they're all in the enclosure and the kids are taking horse-drawn wagon rides out to see them.

I spent most of yesterday afternoon working on the return for my office temperature moderation project.  I had a question from a reader about how I cut those rectangular holes in the OSB.  The first photo below shows the beginning of such a cutout, in this case through the second-floor floor sheathing.  I started with a 1/2" hole right in the middle.  Then I used a battery-powered skill saw to cut a couple of chunks out, as you see in the first photo below.  This gives me access to make the square cuts, and I ended up with what you see in the second photo.  To put the return in, I had to make four of these rectangular holes: on the inside and outside sheathing of my office wall, on the second-floor floor, and on the first-floor ceiling.  These all had to be in perfect alignment, which meant much careful measuring.  Once the holes were cut, however, the rest was a piece of cake; in the last photo you see the completed return.  Well, almost complete.  Today I'm going to cut some OSB to make covers for the rectangular holes I cut, with a hole for the ducting.  This will let me refill the holes with insulation and button it all up nicely.  Then I really will be done!


Debbie is working on a name for the new kitten, which she thinks is female (it's surprisingly hard to tell with kittens).  We have an appointment for it at the vet next Tuesday.  Meanwhile it's in one of our isolation cages, with a soft bed, a clean litter box, and an unending supply of food and water.  It looks quite content. :)

I had a great customer service experience last night.  I'd ordered the little camera at right to put in our cattery, so Debbie could watch over the kitties while she was upstairs or away from home.  It didn't work at all out of the box, which of course was very disappointing.  I followed their directions in case of trouble, and fired off an email to their customer support describing my problem.  Then I went to bed.  This morning when I got up, I had a very nice email from Connie – directly reassuring me that if the camera really didn't work they'd send out a new one.  But first, she asked if I could try an alternative microUSB cable.  I did, and that solved the problem.  I let Connie know, and instantly she reimbursed me for the cost of the replacement cable.  Very nice service, and about as easy a problem resolution as I could imagine.  What makes it even more impressive is that the company (Wansview) is in China, as is Connie, and she's Chinese.  Her English was excellent (as so often is not the case), and her service attitude admirable.  Kudos! 

Thursday, November 16, 2017

Paradise ponders: first air and fallen kittens edition...

Paradise ponders: first air and fallen kittens edition...  I made good progress on my temperature moderation project yesterday.  The first photo below shows the door (a hatch, really) for the plenum box I finished yesterday, and the next photo shows it installed, with chest latches holding it in place.  The last photo shows the completed plenum box, with the flexible duct leading up to the boot (and on the other side, the grill for first floor air to get into my office).  When I light it off, I can't hear the fan at all – wonderful!  Last night I left the fan going all night with the second-floor heater turned off.  When I checked it out this morning, my office temperature was 64°F, same as my first floor.  That wasn't really much of a test, though, as the coldest it got outside was 55°F!  :)  Tomorrow night it's forecast to get down to 20°F – that will be a real test!


This morning, as I was drinking my morning tea, Debbie called up from the cattery, saying there was something there I needed to see.  That turned out to be a little kitten, to all appearances healthy except for a complete lack of body fat – that little thing was hungry.  Small as it is, it put away two cans of wet cat food in mere seconds.  Debbie found it in the well of one of our basement windows – apparently it wandered over to our house, perhaps attracted to our cats visible in the basement windows, and tumbled down.  You can see in the photo at right just how small it is.  We don't know if it's male or female yet; we're waiting for it to settle down a bit before we handle it too much.  It's already accepting being held and stroked, so I don't think that's going to take long.  It's going to the vet next Tuesday for a checkup, and of course we're hoping it's FeLV negative...

Wednesday, November 15, 2017

Paradise ponders, moderated temperature progress edition...

Paradise ponders, moderated temperature progress edition...  I actually got to work on my project yesterday!  It feels ... unusual ... to have an uninterrupted day to work on a single thing.  Focus!  It's a good thing!

The first photo below shows the blower I installed on the ceiling of the first-floor “garage” section of my barn.  I did that well over a year ago, and it's just been sitting ever since.  That's a very conventional squirrel-cage blower, running on a fractional horsepower synchronous motor (so very efficient), blowing straight up.  Above that exhaust port on the blower is a rectangular duct I built out of wood, leading through the ceiling (which has 8" of insulation in it).  The second photo shows what's directly above that blower, on the second floor of my barn.  This is out in the storage section of the barn, which is uninsulated and unfinished.  You can see the top of the wooden duct I built, and the beginnings of the plenum box.  That box is made of 1/2 OSB skin with 2x3 stringers, and stuffed with insulation.  One the inside you can see the “rails” I fabricated to hold a standard 16x25x1 filter (and you can see that filter installed on the last photo).  The next thing I built was the top of the box, a slightly complex assembly (fabrication in progress on the third photo).  Finally, in the last photo you can see the almost-complete plenum box – only the front door remains to be built, and that will be my first job this morning.  Once that's complete, the downstairs blower will pressurize this plenum box, and filtered air will exhaust through the 6" duct connection on the top.  The next step after that will be to install a “boot” in my office and connect it to the plenum box with flexible insulated ducting.


Tuesday, November 14, 2017

Progress on the lair...

Progress on the lair...  By “lair” I mean my office in the barn, of course.  Yesterday I was suffering more than usual from a lack of sleep.  I was up at 2:30 am, and out in the part of the barn where I need to work on the fan project there is no light and no heat – so I didn't start yesterday.  Instead I worked in my office to put my desk together – another long-delayed project.  The result you can see at right.  There's a story behind this desk...

Originally we'd ordered this desk for Debbie's office, in our house.  At the time we ordered it (almost two years ago), I carefully measured the dimensions needed and sent them to the craftsman who was building that furniture.  The desk and a matching table in her office are made from black locust by a guy in Georgia.  Well, unbeknownst to me, as the craftsman was working he proposed making the desk bigger – much – bigger, with no increase in price.  He made that proposal to Debbie, through the vendor.  Debbie said “yes”, not realizing that the size was a critical factor.  I never heard about this little exchange.  We took that desk upstairs to her office, after taking it apart to negotiate all the corners.  I only realized the size was off after we'd gotten it all up there and the delivery guys had left.  That desk is heavy – I'd guess over 200 lbs all assembled.  Realizing that it wasn't going to fit was quite disheartening.  Finding out it was all our fault (and not the craftsman's) was even more disheartening – that desk was not cheap.  And it wasn't going to fit in Debbie's office, no matter what magic I tried to do.  Dang it!  There was nothing for it but to order a new desk for Debbie.  That left this giant desk with no home.  The only obvious things to do were to either keep it for me, or to try to sell it.  We decided to keep it.  So I disassembled the desk again, enlisted the aid of my brother Scott, and the two of us moved it, piece by piece, over to my office.  What a struggle that was!  It spent the last year disassembled in my office, right in the middle of the chaotic room.

So yesterday I reassembled it and moved it into place where I'd been using a folding table as a desk.  That's what you see in the photo.  It's beautiful, isn't it?  And it took me all day!

Paradise ponders: twilight zone edition...

Paradise ponders: twilight zone edition...  I'm not sure if I've blogged about Kickstarter before, even though it's a place I frequent.  I've never put a project up there, but I have backed quite a few of them over the years.  Amazingly, my experience has been uniformly good so far – every single project I've backed delivered what they promised.  Often, in fact, they over-delivered.  I do choose carefully, though: I only back projects that are something interesting to me and that look practical and competently led.  There are many that I review and dismiss because their goals look unrealistic or the project leaders look flaky.

But ... last night I ran across a new Kickstarter project that has set a new bar for both of my red-flag triggers.  To my surprise, investigating this project was like walking through a portal to another world: one populated with (if I'm being charitable) a large number of astonishingly under-informed people.

My first clue was the title of the project: Gabriel Device - Free energy for everyone.  That seems to over-promise a bit, no?  The photo at right is a screenshot of the device itself, taken from the video on the project home page.  It appears to be a simple toroidal transformer, a common enough device in modern electronics and electrical gear – one without any magical properties that I'm aware of.

My second clue was the first bit of the project description.  I'll just quote it:
How to change the world, Changing the world in of itself is a undertaking only most dream about and bicker about in early morning rush hour or afternoon coffee-shops, The United states is hapless says a Englishman, the new world is destroying our faith says a Muslim, why does my country seem to be in free-fall all the time, says a American.

Most of these issues are brought about by the media and propaganda that aspire to enrich or enslave a mind, but what if, the core issue to all of our problems stems from a power-source that just either hasn't been developed or needs to be fully developed,

If power was a source that could be transported and established across a well, a farm, a school, a vehicle, a hospital, all without moving parts and the only need to make it work is to get it initialized, that would even make Tesla himself dance in his grave.
I think Nicola Tesla may well be dancing in his grave, though perhaps not for the reasons this fellow thinks!

Further along in his description, he calls his device a “nested bi-toroidal transformer” – something I'd never heard of.  So I googled it.  It was when I started following the links that I felt like I'd entered that portal into another universe: the Universe of Perpetual Motion.  The current phrase in vogue is “above unity”, referring to devices with a ratio of output power to input power that is greater than one.  In the short intervals of coherency I found in the posts and videos, I think I figured out why the bi-toroidal transformer has entranced these folks: it's because they don't understand power factor, and this has fooled them into believing they're creating power from nothing.  This wouldn't be the first time that power factor has been a perpetual motion factor.

But ... this project is certainly the first time I've seen something so plainly loony on Kickstarter.  People are being asked to pledge a half million dollars (for what, I have trouble imagining, and the project doesn't actually say).  I'm somewhat relieved to see that as of this morning there is just one backer who has pledged $40.  I'm reasonably confident that this fellow won't get a half million dollars in pledges – but what if he did?  Would Kickstarter actually give him the money?  Kickstarter's guidelines and prohibited items list don't seem to rule out perpetual motion schemes.  Kickstarter and Stripe both make money from funded projects, so clearly both have an incentive to actually follow through with the funding, should there be sufficient pledges.  Gulp.  Part of me says “Yikes!  That shouldn’t be allowed!”  Another part of me – dominating at the moment – says “If there are enough fools willing to donate to an obviously hopeless cause, then … it’s on them. ”

But still ... oh, my!

A bad vendor experience..

A bad vendor experience...  Our old trash compactor (one that we inherited with the house) was on its last legs: rusty bin, problems with the tracks, noisy as all get out.  I'd been looking into a replacement for over a year, and I waited for a highly-rated KitchenAid model (at right) to become available – and for some of the other projects I had going to settle down.  So in early October, I selected a vendor (Lowe's) and ordered it.  They promised delivery on October 24th.  I was surprised that it would take two weeks, but that was still ok.

Well, the 24th came and I hadn't heard from Lowe's at all.  Not good.  I called, was promised a call back with a delivery date.  Never heard back.  I called again, this time got another delivery date promised: the 30th.  The 30th came and went.  Are you seeing a pattern here?  In this day and age, when vendors like Lowe's must compete with Amazon, the experience was so bad I can still scarcely believe it.  Overall it was five weeks from the time I placed the order until it arrived in my house.  I called Lowe's on six separate occasions, was promised three different delivery dates before they finally got it right on the fourth try.  There is no online service to get this information, and every employee I contacted seemed to be uncertain about how to even find my order – much less any accurate information about it.  I never received any sort of email confirmation from Lowe's (no snail mail, either).  I still don't have a receipt, though the cost was charged to my credit card.  About the only positive thing I have to report about the experience with Lowe's was that their delivery people were great: they had the right equipment, they took great care in the delivery, and they were friendly and polite.

We will never be ordering online from Lowe's again, unless convincing evidence of improvement is presented to us.  You may remember that we had a similarly disappointing experience with WalMart a few months ago.  Based on these two experiences, I'd say Amazon has little to worry about.  The bad service from Lowe's and WalMart contrasts especially keenly with the almost perfect record of great service with have with Amazon...

I should be careful to point out here that we have zero complaints about the trash compactor itself.  It is exactly as advertised.  So far we are very pleased with it.  It opens and closes effortlessly, and its operating noise is roughly half that of our old compactor.  A win on that front! 

Sunday, November 12, 2017

Paradise ponders: temperature moderation edition...

Paradise ponders: temperature moderation edition...  My office is located on the second floor of my barn.  It's well-insulated, and last year I installed a heat pump that both heats and cools it.  That heat pump works great, but there are a couple of less-than-perfect things about it.  First, when the weather is very cold (under about 20°F), it stops heating.  The only other source of heat in the office is a little woodstove – which works very nicely indeed, but of course only while I'm there to feed it.  So when I walk into my office after a very cold night, it might well be below freezing in there.  Secondly, in the summertime if I turn off the heat pump when I leave in the afternoon, by the next morning my office is very hot indeed.  So I've been leaving the heat pump running all night, spending the extra money to make it comfortable for me in the mornings.

The engineer in me says “There has to be a better way!”  A couple years ago I thought of one, and actually started to implement it.  This better way depends on the fact that my barn's first floor is heated, and never goes below 64°F.  It's a very nice heating system, using in-floor circulating hot water.  The first floor isn't air conditioned, but it is very well insulated and rarely goes above about 77°F.

So I came up with the idea of circulating air from the first floor through my office in two circumstances.  First, when the temperature in my office goes below about 60°F, and the first floor is warmer than that.   Secondly, when the temperature in my office goes above about 70°F and the first floor is cooler than that.  Last year I installed the fan required to do this, and started with the ducting for the fan's output.  My next big project is to finish that work: the fan ducting, the return and its ducting, and a controller.  The controller will be the fun part, of course. :)

Why not simply use a thermostat?  The challenge there is the thermostat would base its decision solely on the temperature in my office, but I need something different: to take the temperature at the ceiling of the first floor into consideration.  Of course I'm going to tackle that with a Raspberry Pi (diagram of proposed system above right)!  The parts are on order and should be here soon.  I'm going to put a temperature sensor in my office, near my desk, and a second on the ceiling of the first floor.  I'll use a solid state relay to turn the fan on and off.  The Raspberry Pi will implement the fan control algorithm exactly as I described above, and in addition it will act as a monitor for both the first floor temperature and my office temperature.  Once I have that all running, I'll be able to restrict my use of the heat pump to when I'm actually in the office (saving a few bucks a month), and I won't have to worry about the office temperature descending into the deep-freezer realm...

Paradise ponders: powered by UPS edition...

Paradise ponders: powered by UPS edition...  My “install the UPS” project yesterday went about as well as it could.  There were no major challenges, and no extra trips to Home Depot were required.  The new L5-30R receptacle (at right) is about the only visible part of the project, other than the UPS itself.  As I'd hoped, at the current draw my actual equipment has, the UPS is fairly quiet.  I located it in the storage area of my barn, outside the insulated walls of my office, so from inside the office I can't hear it at all.  I put my 'scope on the power produced by the UPS, and it's a beautiful, noise-free sine wave.  Put my freq counter on it, and it's running at 60.0002 Hz: more than close enough for anything I need!  That's actually probably better than the power company, especially when you take the noise on the main lines into account.

I did run into one disappointing thing.  The “Multilink” software that comes with the UPS is a restricted license with very limited capabilities.  It has an embarrassingly bad user interface, and there's no obvious way for me to write software that can interact with it, or monitor it. This is not what I had been expecting out of a datacenter-class piece of kit.

Multilink communicates with the UPS over a serial port.  That got me to wondering whether the serial protocol was documented.  A little googling and I discovered that (a) no, it's not documented and in fact is explicitly proprietary, and (b) of course some other datacenter operations folks have reverse-engineered it (the same protocol is used on many UPSs, including the monsters used in datacenters).  This fellow made a start on documenting it, and includes some interesting information about how he did it.  Here's another guy who actually wrote a Linux device driver for it!  It looks like it won't be too hard for me to integrate some monitoring for this...


Saturday, November 11, 2017

Paradise ponders: a new project edition...

Paradise ponders: a new project edition...  Naturally I have a challenge right from the start!  Yesterday I took delivery of a new UPS (store photo at right) for my office.  One advantage of having run datacenters in the past is that I know a bit about UPS technology (datacenters make extensive use of them) – something that comes in very handy when selecting one for my own use.

The main problem I'm trying to solve is providing power for the (hopefully short) period of time between the time we lose main power and the time my backup generator kicks in.  Generally that's around 30 seconds.  A secondary problem I'd like to solve is to mitigate the effects of “dirty power” (brownouts, momentary outages, surges) on the computer equipment in my office.  We had an example of a momentary outage last week, and it took me a couple of hours afterwards to get everything back up and running.  It was that experience that prompted me to pull the trigger on ordering a UPS.

The one I bought is an “online” type, meaning that it has an inverter that continuously outputs 60 Hz sine wave 120 VAC.  That inverter is powered from a battery, and the battery is continuously charged when there's 120 VAC available at its input (in other words, when the power is up).  Most UPSs designed for home or small office use are a different type: “standby”.  These UPSs only produce power when the main power fails, and there's always a brief “glitch” when the power switches over.  Furthermore, standby UPSs aren't very good at dealing with brownouts or intermittent power outages.  The datacenters I managed all used online UPSs, as hard experience with the problems caused by standby UPSs long ago convinced datacenter operators to stay away from them.

Another thing I learned while managing datacenters is that you really don't want to run an online UPS anywhere near its rated capacity.  Doing so will reduce reliability (not exactly a feature in a UPS!) and, perhaps surprisingly, cause them to make much more noise.  The latter is because in order to cool the power electronics (for the inverter, primarily) at maximum capacity, the fans in the unit generally run full blast – but when running well below their capacity, they can (and usually do) run much more slowly.

So I selected a UPS with roughly twice the capacity I actually need (I need 1,500 VA, so I bought one rated at 3,000 VA).  Everything I read about it validated the thought that this would reduce noise, and I know enough about electronics to know that it will also increase its lifetime.  The particular model I selected is 120 VAC in and 120 VAC out, matching the power I had available at the place I wanted to mount it, and the power I need for my computers. 

Here's where the challenge arises.  A 3,000 VA UPS will draw nearly 30 amps from its 120 VAC input if it's running at max capacity.  Standard 120 VAC outlets, the kind you're used to using every day, are rated usually at 15 amps, sometimes at 20.  They can't safely handle a 30 amp load.  I knew this, but it never occurred to me when I ordered the UPS.  So when I unpacked it yesterday, I noticed immediately that it had a weird plug (just like the one at right).  Of course I do not have a receptacle matching that plug, nor do I have a circuit installed that can handle 30 amps.  Dang it!  So yesterday evening Debbie and I headed for Home Depot, where I bought all the parts I'd need to install a matching (NEMA L5-30R) receptacle and run a 30 amp circuit to it.  Today I'll be installing it.  I have a subpanel already installed just 30 feet from where I need the receptacle, so this really isn't all that big a deal.  But so much for my careful planning!  I fully expected to unpack that UPS, plug it in, and be done.  Not so much!

Friday, November 10, 2017

Paradise ponders: gpsctl functionally complete edition..

Paradise ponders: gpsctl functionally complete edition...  gpsctl is the name of the C program I've been working on for a few weeks now.  Early this morning I added the last planned features in – it does everything I needed it to do.  I've made it publicly available, on the off chance that it will help some other nutcase who wants a stratum 1 NTP server on the cheap.

It came together very quickly in the last few days, mostly because that's when I finally got all the basic stuff up and running solidly.  Here's one example of a feature recently implemented: querying the GPS for the data it holds on visible satellites:

GNSS     ID CNo  El Azi   PRr Signal qual         Sat Hlt Orbit Src      Flags
GLONASS   2  52  43  35   0.6 Code/carrier locked Ok      Ephemeris      uea
GPS      29  51  36 158   1.2 Code/carrier locked Ok      Ephemeris      uea
GPS      15  50  52 101   0.9 Code/carrier locked Ok      Ephemeris      uea
GPS      20  50  55  52  -0.4 Code/carrier locked Ok      Ephemeris      uea
GLONASS  18  50  74 355   0.6 Code/carrier locked Ok      Ephemeris      uea
GPS      21  49  72 333  -0.9 Code/carrier locked Ok      Ephemeris      uea
GLONASS  17  49  46 125  -1.5 Code/carrier locked Ok      Ephemeris      uea
GPS      18  48  58 248   0.5 Code/carrier locked Ok      Ephemeris      uea
GPS      13  47  33  62   0.0 Code/carrier locked Ok      Ephemeris      uea
GLONASS   3  47  79 207  -2.7 Code/carrier locked Ok      Ephemeris      uea
GPS      10  45  24 240   0.4 Code/carrier locked Ok      Ephemeris      uea
Galileo   8  45  66 174   1.3 Code/carrier locked Ok      Ephemeris      uea
GLONASS  19  45  22 322  -1.3 Code/carrier locked Ok      Ephemeris      uea
Galileo   3  44  48  57   0.6 Code/carrier locked Ok      Ephemeris      uea
GPS      16  42  20 299  -1.4 Code/carrier locked Ok      Ephemeris      uea
GLONASS   4  41  22 213  -7.0 Code/carrier locked Ok      Ephemeris      uea
GPS       5  47   7  56  -1.1 Code/carrier locked Ok      Ephemeris      a
GPS      27  46  13 320  -0.4 Code/carrier locked Ok      Ephemeris      a
GPS       4  44 -91   0   0.0 Code/carrier locked Bad     None          
GPS      26  41  20 267   2.3 Code/carrier locked Ok      Ephemeris      a
Galileo   7  39  18 208   1.6 Code/carrier locked Ok      Ephemeris      a
GLONASS  10  38   3 348   4.6 Code/carrier locked Ok      Ephemeris      a
Galileo  22  37   8 124   4.6 Code/carrier locked Ok      Ephemeris      a
Galileo  26  33  14 308   7.9 Code/carrier locked Ok      Ephemeris      a
Galileo   5  13   1  39  -1.4 Unusable            Ok      Ephemeris      a
Galileo   1   0   2 307   0.0 Searching           Ok      Ephemeris      a
Flags:
  u - used for navigation fix
  d - differential correction is available
  s - carrier-smoothed pseudorange used
  e - ephemeris is available
  a - almanac is available
  S - SBAS corrections used
  R - RTCM corrections used
  P - pseudorange corrections used
  C - carrier range corrections used
  D - range rate (Doppler) corrections used


That is a lot of information, and quite useful when troubleshooting.  The results of some of the configuration code I wrote are visible here, if you know what to look for.  For example, I've configured the GPS to ignore any satellite whose elevation is within 20° of the horizon.  This prevents the use of satellites whose signal path goes through a lot of atmosphere.  Similarly, I've configured the GPS to ignore any satellite whose signal strength (as CNo) is under 30.

Another feature recently implemented is querying for configuration information.  This is vital, both for figuring out what the default configuration was, and for verifying that the configuration code I wrote actually worked.  Here's an example result:

U-Blox GPS configuration
  Antenna:
    Power enabled:            yes
    Short detection:          yes
    Open detection:           no
    Power down on short:      yes
    Auto recovery from short: yes
  GNSS:
    Tracking channels:  32
    Type: GPS
      Enabled:          yes
      Minimum channels: 8
      Maximum channels: 24
    Type: SBAS
      Enabled:          no
      Minimum channels: 0
      Maximum channels: 0
    Type: Galileo
      Enabled:          yes
      Minimum channels: 8
      Maximum channels: 8
    Type: BeiDou
      Enabled:          no
      Minimum channels: 0
      Maximum channels: 0
    Type: IMES
      Enabled:          no
      Minimum channels: 0
      Maximum channels: 0
    Type: QZSS
      Enabled:          no
      Minimum channels: 0
      Maximum channels: 0
    Type: GLONASS
      Enabled:          yes
      Minimum channels: 8
      Maximum channels: 24
  Navigation engine:
    Dynamic model:                Stationary
    Fix mode:                     3D only
    Fixed altitude (2D):          0.00 meters
    Fixed altitude variance (2D): 0.0001 meters^2
    Minimum elevation:            20 degrees
    Position DoP mask:            10.0
    Time DoP mask:                10.0
    Position accuracy mask:       40 meters
    Time accuracy mask:           40 meters
    Static hold threshold:        0 cm/s
    Dynamic GNSS timeout:         60 seconds
    Threshold above C/No:         8 satellites
    C/No threshold:               40 dBHz
    Static hold max distance:     0 meters
    UTC standard:                 USNO
  Time pulse:
    Time pulse 0 enabled:         yes
    Use frequency vs. period:     no
    Use length vs. duty cycle:    yes
    Lock on GPS frequency:        yes
    LockUseOtherSet:              yes
    Align to top of second:       yes
    Polarity rising edge:         yes
    Time grid:                    UTC
    Antenna cable delay:          56 nanoseconds
    RF group delay:               20 nanoseconds
    Locked pulse period:          1000000 microseconds
    Unlocked pulse period:        1000000 microseconds
    Locked pulse length:          500000 microseconds
    Unlocked pulse length:        0 microseconds
    User configurable delay:      0 nanoseconds
  Fix rate:
    Measurement rate:                 1000 milliseconds
    Measurements per fix:             1
    Time reference:                   GPS
  Power mode:
    Power setup:                      Balanced
    Period (if interval):             0 seconds
    On time (if interval):            0 seconds


Lots of information there, too!  At least, if you're a GPS geek. :)  It's a bit mind-boggling that all this capability is in the tiny little module you see in the photo at right.  By “module”, I don't mean the green circuit board with the LEDs on it.  I mean that tiny little square module just to the right of the antenna connector.  That teensy little thing – smaller than my thumbnail.  That thing can listen simultaneously to 32 satellites, solve large systems of differential equations, and communicate at high speed with my computers.  It's quite astounding, actually.

I have some personal experience that really drives this home.  When I was in the U.S. Navy, back in the '70s, I worked on a system called SINS (for Ship's Inertial Navigation System).  There's some specific information on SINS here, and on inertial navigation systems in general here.  In the '70s, long before GPS, these were the state of the art in navigation.  A SINS system occupied a fairly large compartment shipboard, used huge amounts of power, and it had a low reliability (in my own experience, less than 50% up time).  The information it provided degraded in accuracy the longer you went since a calibration (against a known point on the earth).  At its best, at least when I was observing, it would put you within a mile or so of your actual location.  As bad as that sounds, that was far better than the alternatives available at the time.  That GPS in the photo above is smaller by far than the smallest piece of electronics in SINS – and far more accurate and reliable.  Not to mention cheaper!  A SINS system had to cost several million dollars in today's money; that GPS cost me under $100.  Amazing!

Wednesday, November 8, 2017

Paradise ponders: we live in a postcard edition...

Paradise ponders: we live in a postcard edition...  Just walked outside, and the skies are clear with a beautiful, bright, 2/3 moon.  The moonlight is bright enough for me to clearly see the snow-capped mountains around us, just like those in the daytime photo at right.  Despite the bright moon, the air is so clear that I could still easily see the Milky Way, the Pleiades, and other not-so-bright celestial objects.  Beautiful...

Monday, November 6, 2017

Paradise ponders: winter approaches edition...

Paradise ponders: winter approaches edition...  Yesterday's weather was a little nasty – cold, wet gloppy snow on the ground, and not too much sunshine.  We went on a quest for moose (we start seeing them in Blacksmith Fork Canyon in the winter), with no success.  We were treated to some pretty scenery (as in the view at right, from near the mouth of canyon), saw about a bazillion turkeys, and a few deer.  There were quite a few hunters in the back country, all scanning the hillsides – Debbie tells me that cougar (mountain lion) season is now open here, so that may be what they're looking for.

My little C program is shaping up nicely.  It's not so little any more – it's just over 3kloc (three thousand lines of code, for all you non-geeks).  It's been a terrific learning exercise for me, just what I needed for “reentry” into the world of low-level programming.

When I quit working on code yesterday afternoon, I had a problem that was vexing me: unreliable communications (via serial port) with the GPS, using the U-Blox proprietary UBX protocol.  Fixed in my head was the notion that the problem was caused by the fact that the GPS was transmitting both UBX and NMEA data on the same wire.  I imagined that the GPS was behaving stupidly, interleaving the bytes from each protocol.  This morning while I was taking my morning shower, an alternative theory came to me – one that would be much simpler to fix.  It's amazing how often I have solved (or at least made progress on) problems while taking a shower.  Something about that activity is conducive to insights.  Anyway, the alternative theory was simply that when I was sending a UBX command the host computer's UART receiver was out of sync with the data stream being transmitted by the GPS.  This would only be an issue if the receiver had been fed a stream of NMEA data before trying to read a UBX message.  I made a quick change to my code to force synchronization before any UBX operation, and poof! – just like that my reliability problem disappeared.

Obviously I need to take more showers!  :)

Sunday, November 5, 2017

Paradise ponders: dogs in the snow edition...


Paradise ponders: dogs in the snow edition...  Well, we had a most unexpected event last night: snow!  Roughly 2" of the white stuff, heavy, wet, gloppy snow.  The forecast called for a moderate amount of rain, but apparently it was a bit colder than the weatherman expected. :)

We let the dogs outside to play in it, and they had a ball.  Short video at right, a few photos below.  This may well be Ipo's first sight of snow: we believe she spent last winter in Florida, with her then-owner.  If this was her first snow, she certainly seemed unfazed by it.  Miki (first photo) was more like “Oh, crap, we’ve got this again?” ..


Friday, November 3, 2017

Paradise ponders: NTP server update...

Paradise ponders: NTP server update...  I wrote yesterday that I had installed the new antenna on my barn roof, and that a quick check showed it to be working correctly.  Well, now it's had most of 24 hours to get settled down (NTP and GPS both take a while to do that), and I have some more concrete results.  First, the photo at right shows my barn with a superimposed indicator showing where my NTP server's GPS believes it is.  The position shown is roughly eight inches (33 cm) from where it actually is.  This is gobsmackingly good!  It's also an amazing demonstration of several different technologies.  First, there's the satellite photo of my barn superimposed on a map of the world, via Google maps.  What an astonishing capability – especially given that it's free – this is.  Then there's my little under-$100 Raspberry Pi with a high-performance GPS (including an active antenna) system.  State-of-the-art geolocation when I was a kid was map-and-compass.  Then there's the amazing correspondence of these two completely independent chains of technology.  That 8" error is the sum of the error in Google maps and in my GPS.  And it's just 8"!  Like I said, it's gobsmackingly good...

Then here's a report from my GPS (extracted with the work-in-progress program I'm writing), produced this morning:
 Time (UTC): 11/03/2017 13:50:41 (mm/dd/yyyy hh:mm:ss)
   Latitude:  41.58308650 N
  Longitude: 111.84003970 W
   Altitude: 4868.373 feet
     Motion: 0.007 mph at 0.000 degrees heading
 Satellites: 21 (used for computing this fix)
   Accuracy: time (12 ns), height (+/-2.169 feet), position (+/-1.654 feet), heading(+/-169.961 degrees), speed(+/-0.029 mph)
There are several interesting pieces of information in there beyond the location.  First, there's the fact that 21 satellites were used to calculate the 4D fix (the four Ds are: latitude, longitude, altitude, and time).  These satellites were part of three independent satellite systems: the US's Global Positioning System, The EU's Galileo, and Russia's GLONASS.  The accuracy of the 4D fix improves as the number of satellites used goes up, and with 21 satellites that accuracy is darned good.  Of most interest to me is the time accuracy, as that's what's synchronizing my NTP server.  The GPS is reporting that its time signal is accurate to within 12 nanoseconds (that's 0.000000012 seconds).  That will do just fine!

If you're wondering about that reported motion, first of all 0.007 mph is a very slow motion indeed: about one tenth of an inch (2 mm) per second.  Most of us would not distinguish between that speed and motionless. :)  But why isn't it zero?  That reported speed is the result of a small amount of “noise” in the GPS fixes.  From one fix to the next there is always a slight variation in the calculated location, even though the actual location isn't moving.  That “fix noise” looks like some very slight motion to the GPS, as it is exactly what would happen if you actually were moving ever-so-slightly and there was no fix noise...

Thursday, November 2, 2017

Paradise ponders: photo catch-up edition...

Paradise ponders: photo catch-up edition...  I mentioned my new Raspberry Shake earlier today.  That's a photo of it at right.  Something I didn't mention is that the Kickstarter project for it was done by a Panamanian team; all the design and construction was done there as well.  You can see that it says “Made in Panama” (in English!) on the case.  This is a great example of something the Internet is amazingly good at: connecting people with similar interests, no matter where they are in the world.  It's so different than 25 or 30 years ago, and even more different than when I was a kid.  In the '80s, for example, I'd say the chances of me connecting with a similar project would be approximately zero...

A couple days ago I caught the scene at left: our biggest willow, yellow with fall color, against a beautiful blue sky.  For some reason, our willow turned yellow a good week before the other willows around us (and there are a lot of them!).  I have no idea why that should be.

That same evening, I was playing with our dogs just before the sun disappeared.  Our three younger field spaniels (Mako, Cabo, and Ipo) were having a fantastic time tussling with each other at 90 MPH.  Race did his usual trick of bringing a stick for me to throw, laying it on the ground in front of me, and then just looking at me until I threw it.  All the photos below are from that session:


Paradise ponders: rooftop antenna and Raspberry Shake edition...

Paradise ponders: rooftop antenna and Raspberry Shake edition...  Yesterday, with some help from my brother Scott, I got my GPS antenna mounted on top of my barn.  This antenna is part of my stratum 1 NTP server project.  The antenna is very near the peak of my barn's second floor roof, about 26 feet above ground level.  Prior to going up to the roof, I had mounted a section of 2x10 on the inside of the barn, between two of the roof trusses.  This provided a sturdy mounting point for the antenna, instead of the 1/2" OSB that the roof is sheathed in.  Yesterday I crawled out of a second floor window onto the first floor roof, then put up a ladder to the second floor roof.  Scott and I lashed this ladder to a board placed across the window frame, to keep the ladder's feet from slipping down the first floor roof.  This part worked surprisingly well.

I did some careful planning to fill a bucket will everything I might need while working on the roof.  This almost worked. :)  It turns out I forgot an adjustable wrench, so I had to come back down once for that.  Otherwise, the entire installation went smoothly out of the one bucket full of tools and parts.
The trickiest bit was sitting on the 25% pitched roof without sliding off the slippery steel.  My roofers told me that they often worked barefoot, as their feet didn't slip nearly as much as their shoes did.  I tried this, and it worked just fine.  The walk from the ladder (at the roof's edge) to the peak (where the antenna was going) was maybe 15', definitely a tense distance, though short.  Had I slipped and fallen, I'd have gone off the second floor roof, bounced onto the first floor roof (same pitch), and slid off the side of the barn from about 15' high.  I was quite happy to have avoided this!  While I was doing the actual installation, I straddled the peak of the roof, so I was quite stable.  It was only that little journey from the roof's edge to the peak, and back, that was slightly terrifying.

Naturally I forgot to take photos of this little adventure.  I was too busy trying not to fall off of my barn's second floor roof!

Once I had the antenna installed, I connected it to my little Raspberry Pi GPS board and started testing.  On the first try, we had 12 satellites visible.  A few hours later I had 17.  My time accuracy is now reporting at +/- 2 nanoseconds – not bad at all!  Best of all, after 12 hours of operation the GPS was reporting very high time and position stability – and this is before I've even configured it in a way optimized for timekeeping!

I still have some work to do on the NTP server project, but at this point its all fairly mundane stuff  The C program I'm working on will form the heart of an NTP server monitor that I'll install on the Raspberry Pi.  This will keep statistics on the accuracy over time.  Then I need to build a little cabinet for the Raspberry Pi, so it can take its place of honor on my server rack. 

Just by coincidence, yesterday I also received my Raspberry Shake 4D - a seismograph that reports into an international network.  I assembled it and plugged it in, mainly to see if it was working, and it all seems to work just fine.  I'm not sure where I'm going to mount it – it needs to be on the ground floor, preferably on the concrete slab, and somewhere with minimal vibration and noise.  It might end up going in the basement of my home.  The screenshot at right is off the Raspberry Shake network's station view.  If you click to embiggen it, you'll see the little orange triangle NE of the Great Salt Lake that represents my station – the only one for a few hundred miles in any direction.  Unlike the USGS seismograph that I had in California, this one's data is directly accessible – there's a network API that will let me download it.  You can be sure I'll be playing with that!

Monday, October 30, 2017

Paradise ponders: sculpture progress edition...

Paradise ponders: sculpture progress edition...  I mentioned a few weeks ago that we had engaged a sculptress to make a bronze sculpture for our back yard.  I still can scarcely believe we did such a crazy thing!  This sculptress works out of her home in Colorado, and she's been sending us photos of her progress on it (we expect it to be done sometime next spring).  Here's what we've received to date:


It looks like she's being supervised by her dog, doesn't it?  :)

The finished sculpture should have the mom mountain lion and three cubs; the two that aren't there yet will be to the left in the last photo.  It's interesting to see how she puts together the armature with metal, and the (very!) rough shape with what looks like sheets of foam.  It's all very abstract until the clay starts to go on!

Sunday, October 29, 2017

Paradise ponders: happy dogs, musical memories, declining savings, and dark nights edition...

Paradise ponders: happy dogs, musical memories, declining savings, and dark nights edition...  It's so easy to motivate dogs to do anything at all – just figure out a way to let them associate the behavior you want with getting a treat, and they'll do it.  Anything.  If you just give them a treat for no reason, their joy is nearly boundless.  Often, upon noticing this, I reflect on how much more difficult it was to motivate people to do what I needed them to do at any business I owned or managed.  There is no “treat” that works for everybody, though often one could figure out a treat that worked for an individual.  Even then, though, that treat didn't work all the time – and something else might come along that completely negated the effect of a promised treat.

For example, I recall an engineer who worked for me, who (I discovered) really badly wanted to take a couple of months off for an around-the-world trip with his wife.  I promised him that in exchange for solving a particularly tedious problem we were having with one of our products, a problem he was particularly well suited for.  This worked for about four months; he plunged into the work with enthusiasm and was making great progress – until he got offended at a completely unrelated decision we'd made about another part of the product.  In the space of a day or two he went from an energized, nothing-will-stop-me attitude to that of a defeated soldier.  He gave up.  The work didn't get done by him, and he didn't get his reward.

That sort of thing never happens with dogs.  They're so much simpler!  That tasty biscuit works every single time.  Oh, I'd have given a lot for an engineering equivalent of a Milk-Bone!

As I write this, I'm listening to Tommy!, by The Who.  It was released in 1969, and for whatever reason is one of the few dozen pieces of music from my youth that I remember most fondly.  I listened to that album many, many times in my electronics “shack” (a converted chicken coop).  I played it on an ancient Motorola stereo with a tube amplifier and 14" electrodynamic speakers, one that I picked up as not-worth-repairing junk from a TV repair shop.  I still remember the experience of troubleshooting it, as it was a significant learning experience for me.  I had no schematic (or any other documentation) for it, so the first thing I had to do was to reverse-engineer a schematic.  I ended up with about 10 sheets of paper with a pencil schematic.  Then I had to figure out how it all worked, and man, that was hard!  There was so much in that design that I'd never run into before.  Finally, once I understood (or thought I did!) how it was supposed to work, then I went to work troubleshooting it.  I didn't have an oscilloscope, so I came up with a “poor man's” approach.  I started with a little signal injector – a simple oscillator that sent a (roughly) 1KHz tone into the input from the turntable cartridge.  Then I built a little amplifier and a capacitively-coupled probe that let me touch points within the Motorola's amplifier to see if there was a signal there.  I worked my way through several stages of pre-amp to the first stage of the power amplifier, and there I found the problem: a shorted capacitor.  So simple!  I replaced that capacitor and voila! – I had a working stereo.  Every time I hear Tommy! it takes me back to that experience...

An email conversation with a (much younger) friend led me to do a little research this morning, and I found the chart at right (source).  It confirms something I suspected from my own  experience: people these days are saving (for all reasons, including retirement and buffer) at a much lower rate (~3% of disposable income today, versus ~12% in the '60s) than they did when I first entered the workforce (in the late '60s).  I don't know the reasons for this, but clearly some of it is a changing culture, part of the more general trend of people not expecting to have to handle the consequences of their decisions.  Anecdotally young people today seem much more likely to expect government intervention to support them in retirement.  When I've pressed people for details about this belief, I haven't run into anyone who has specific notions.  Everyone seems to dismiss Social Security as adequate for retirement, and many have a vague notion that the government will “do something” to provide for them in their retirement.  I saw figures recently (can't find them now, though) that less than 20% of people aged 50 had any means or even a plan for supporting themselves in retirement.  They had vague notions, like cashing in the equity on their house, but nothing more.

It seems rather obvious that a lower savings rate, combined with increased longevity (and therefore more years in retirement), leads to a bad problem for our society in general.  I don't understand why so few people seem to be concerned about this.  In that respect it reminds me of the under-funded pension problem hanging over so many cities, counties, and states.  Another very obvious problem, with relatively little general concern.  I'm very concerned about both, because I strongly suspect that in order to cover these deficits, the government will be trying to come after anyone who has assets in retirement.  Like us, if we live long enough...

This morning I walked from our house to our barn at around 6 am, and the skies were particularly dark.  Orion was high in the southwest, the Pleiades in the west.  As I was staring up at them, a big meteor, orange fireball, plunged straight down from between them.  I could even make out some smoke trail, so it must have reached a fairly low altitude.  The fireball was extinguished just before it would have disappeared behind the Wellsville Mountains from my perspective.  Beautiful!

Today is bookkeeping day for me.  I've got to catch up from my neglect over the past 10 days or so...

Friday, October 27, 2017

Paradise ponders: beautiful fall morning edition...

Paradise ponders: beautiful fall morning edition...  It's another gorgeous day in Paradise, folks.  I took the photo at right a few minutes ago.  It's looking southwest over our alfalfa field, with the morning's first sun rays lighting up the Wellsville Mountains to our west.  Our valley floor will get sunlight in the nest few minutes...

Debbie's coughing persists, so yesterday morning we ventured off to the urgent care again (if you're counting, that's the fourth time since she first got sick on the 7th).  We were ... less than satisfied with the outcome there.  The doctor on duty listened to us politely.  One of the things we told him is that the cough medicine Debbie had used for years to combat her cough-after-a-cold problem was benzonatate – but it no longer worked for her.  He recommended that we try a different cough medication.  We went to the drug store, picked up the prescription he gave us – and it was benzonatate in brand name form!

At that point we decided to make an appointment with our GP, despite the fact that we might have to wait a while to see her.  Debbie  called in, and it turned out that our regular GP was out on maternity leave (she just had a baby boy), and would be until January.  But ... there was a doctor covering for her, and we could get in on that very afternoon.  Awesome!  So off we went again, to see the new doc.  This fellow we both really liked.  In fact, Debbie's first comment upon leaving was that she wanted to switch GPs to him. :)  He listened, was full of questions and comments, and had a cracking good sense of humor.  We were most excellently entertained, and we left with a smile, a prescription for hydrocodone-based cough medication (the only one that's worked for her this year), and an inhaler that he thought might well help.  An hour later her coughing had stopped.  Last night she got her first good night's sleep in over a week.

In between trips to the doctor, I beavered away on my C program again.  Right at the moment I'm writing a replacement for the ancient getopt library.   I've got getopt working, so I really have no need to do this – but I'm offended by the unnecessary complexity of its API.  Further, writing a replacement looks like a tasty practice exercise to me.  So far it's turning out to be simpler and easier than I was anticipating, which really makes me wonder why it wasn't replace aeons ago...