Wednesday, November 22, 2017
Sunday, November 19, 2017
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
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.
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...
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. :)
Thursday, November 16, 2017
Wednesday, November 15, 2017
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
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!
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.I think Nicola Tesla may well be dancing in his grave, though perhaps not for the reasons this fellow thinks!
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.
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!
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
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.
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...
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
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.
Friday, November 10, 2017
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
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
Power enabled: yes
Short detection: yes
Open detection: no
Power down on short: yes
Auto recovery from short: yes
Tracking channels: 32
Minimum channels: 8
Maximum channels: 24
Minimum channels: 0
Maximum channels: 0
Minimum channels: 8
Maximum channels: 8
Minimum channels: 0
Maximum channels: 0
Minimum channels: 0
Maximum channels: 0
Minimum channels: 0
Maximum channels: 0
Minimum channels: 8
Maximum channels: 24
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 0 enabled: yes
Use frequency vs. period: no
Use length vs. duty cycle: yes
Lock on GPS frequency: 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
Measurement rate: 1000 milliseconds
Measurements per fix: 1
Time reference: GPS
Power setup: Balanced
Period (if interval): 0 seconds
On time (if interval): 0 seconds
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
Monday, November 6, 2017
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
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
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)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!
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)
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
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:
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.
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!