It’s the Little Things

Small things make me happy.

I run a local Active Directory domain on my home network with a Samba back-end.¹ Over the past few weeks I’ve been building out a second domain controller, but I didn’t have 100% replication – it replicated AD and DNS, but not DHCP.²

After a short outage yesterday (due to an update) I decided that this had to change.  So I:

  • followed the instructions,
  • realized that the instructions were out of date,
  • figured out the correct procedure,
  • completed my setup, and
  • submitted a revision to the wiki.

It’s a small step, but I’m such a nerd that I’m riding high – one, because I’ve scratched an itch and have redundancy in my domain; and two, that I’ve visibly contributed something useful to open source (small as it may be).


¹ For along time it was powered by a single Raspberry Pi, but keeping that up to date became a struggle because it’s a little too low-powered.  But that’s all another story.

² This isn’t a completely useless situation.  It’s much easier to recover from a domain-controller crash if you still have a standing domain controller.  (A solo-domain-controller recovery is much more complicated recovery.)

Geoffrey the Automower

I met my robotic overlord, and I immediately pack-bonded to it.

Let me back up a little.

I am not a gardener. I hate taking care of lawns. I’m the type of person that likes to do a good job, do it well, get the result perfect – and then it should stay that way. I don’t like doing the same thing over and over. It gets dull, quickly.

A lawn takes a lot of work. It runs counter to my pleasure. No matter how well I do the job, in two weeks I have to do it all over again. So my lawn always looks like crap.

So this year I took my government-issued funny money (the CARES stimulus payment, AKA the COVID relief) and plowed it right back into economy. I bought an “automower.” Specifically, I purchased a Husqvarna 115H.

What Is An Automower?

An automower is a Roomba for your lawn. You set a schedule and it takes care of getting the lawn trimmed and keeping itself charged. During operation it makes random passes over its mowing area and covers every square inch… eventually. It comes with a base station where it charges and “sleeps” when it’s not in use.

The mowing area is defined by a “boundary wire” that makes a continuous loop from the base station, around your yard, and back to the base station. (It is possible to have multiple mowing areas.). There is also a “guide wire” that extends from the base station to help the mower come home.

Automowers tend to be “mulching” mowers, meaning they leave their grass clippings in place instead of bagging them up and dumping them somewhere. Since they run so frequently this shouldn’t leave an unsightly mess; each cut should be millimeters in length.  Mulching and leaving the grass clippings in place is better for the lawn, as well as making the mower simpler and far more reliable.

They’re convenient, but also environmentally conscious.  They’re universally electric, making them quiet, emission-less, and built with a minimum of materials.

My First Thoughts

Setting Up

I purchased direct from Husqvarna.  The mower arrived in just a couple of days. (Going through Lowes or Home Depot would have taken a week longer.) The box is an armload but can be managed by a single healthy adult.

Everything you need to set the mower up comes in the box, except housings to keep the power supply and base station dry.  More on that in a moment.

The instructions were a bit unclear, but not terrible. There are steps that are in the quick setup guide that aren’t in the full guide, which is annoying, you need to read both.

There are diagrams, but they’re useless until you know what you’re doing – at which point you don’t need them anymore because the rules are quite logical.

The manual spends some time explaining complicated setups with multiple zones and islands, which may only apply to a minority of buyers, but no time spent on some of the most basic (and critical) steps: picking a spot for a base station and considerations for a guide wire.

Here’s What You Need To Know

  • There are two wires to worry about: the boundary wire and the guide wire.
  • The boundary wire makes an unbroken loop around your yard and through the base station.
    • The loop may not cross itself. (This is stated in the manual, but poorly in my opinion.)
  • The guide wire connects to both the base station and the boundary wire with a splice. The mower comes with little splice boxes to accomplish this.
    • It can connect anywhere on the boundary loop, so long as the first meter (3 feet) extends straight out from the base.
    • The guide wire may bend after the first meter, but should not have corners. The mower has trouble following at corners, and may run off the guide and get lost when it’s at its most tired and starving, which will make you worried and sad. Gentle, freeway-style curves are best.
    • To save on wire you may bend the guide wire right back to boundary, after you’ve come out a meter from the base station.
    • The quick start mentions that you need  to make a loop of wire somewhere in the boundary, but the main booklet does not.  Neither guide says why you’re doing it: you need to plan where the guide wire will tie into the boundary and leave some slack there. There’s no indication regarding how long to make the loop – a finger’s length is enough. You’ll splice the guide wire into the boundary wire using one of the included splicing boxes.
  • The instructions say this, but it’s not clear enough: the boundary wire should not come near the left side of the base station.
    • “Left” is your left as you’re facing the front of the base station.
    • The boundary wire should run away from the base station at a minimum 45° angle from the left side of the base station, and go out for at least a meter or two. If it’s too close to the base station you’ll get a calibration warning.
    • Since most of the important work takes place behind the base station, it would make more sense to change the point of view and reverse left/right in the instructions.
  • It’s not clear how frequently to put stakes down to keep the wire in place, except indicating that you must space them a minimum of 30 inches apart. I took my best guess on frequency, but I’m also lazy so maybe I didn’t use enough. Time will tell.
  • Finding a good home for the power-brick was harder than expected, as the instructions tell you that it shouldn’t get wet. (That’s an odd requirement for outdoor hardware.) I wound up screwing it under our deck, inside a plastic tupperware bin to protect it from drips.

Total Set Up Time

From unboxing to the mower’s first run was about three hours of work.

Our yard is basically a square, less than two-tenths of an acre, and it’s all behind the house.  We don’t have any complicated edges or ‘islands’ that require runs into the yard.  Everything we need the mower to leave alone is in the outside edge.

We chose to lay the wire on the soil and stake it down, rather than trenching and burying it. The mower comes with plenty of stakes and wire; we used a fraction of one spool. If there were complicated sections we could easily have used more, but now we have enough leftover to fix mistakes and broken wires for a while.

Laying the wire on the soil was an easy choice because we have very little grass. Our yard was re-graded this spring and there’s still lots of bare soil. (We skipped hyro-seeding so we could customize the mix ourselves – wildflowers on the edge and lots of clover everywhere else.)

We stopped in the middle of set-up to run out and buy a 30 qt plastic tub, to make an ersatz garage for the base station. I’m not counting that time in the set-up time.

I may make a real “dog house” for it later.

Operation

Getting the mower itself running was very easy for me. I’m a technical person, your mileage may vary. You push it into the base station to start charging, set a security PIN to prevent theft, fill in some other information, and push “start.” That’s about it for the year, unless you want to make changes.

The unit is quiet. It’s much quieter than I expected. I expected moderate electric lawnmower noise, but I got nearly-silent operation. It’s “guaranteed” to be 59 decibels or less, but as a layman I have no point of reference for that. Suffice it to say, it’s super quiet.

Here’s What You Need To Know

  • There are three small blades that attach to a disc underneath.  They have a short lifetime.  The manual suggests that they will need to be replaced every 4-7 weeks.
    • The mower comes with your first summer’s worth of blades, and replacements are relatively inexpensive.  We found a set of 30 online for ~$15.
    • They look to be reasonably easy to replace.
  • You may schedule the unit to run around the clock – it doesn’t care about day vs night.  Consider nocturnal animals before you schedule it for nighttime, though.
  • You don’t need to shut it off in the rain, though you might want to unplug it during thunderstorms.
  • There’s a phone app that connects over Bluetooth that’s easier to use than bending over the control panel on the mower.

It’s very fun to watch. I immediately started rooting for it to knock down tall sprigs of grass and other vegetation. It’s good to watch it to make sure you set the boundaries properly, leaving enough room for “overage.” It will cross the boundary a little, you can’t make tight margins.

We’ve had it running for less than 24 hours and it’s reached pretty much every point on the lawn.

If the mower crosses a boundary, hits something that activates the bump sensor, or gets confused, it backs up and tries a new direction.  That seems to be a simple and effective solution.

Here’s a video of the mower in action this morning:

There is a stand of taller weeds emigrating from a neighbor’s yard, which took over that side of the yard last year. It has already re-sprouted and grown to a foot high since we re-graded the yard a few weeks ago. If we let it go all summer again, it will grow into two-meter-tall woody stalks. The mower has been slowly nibbling it back until the bump sensor activates, and has already cut down nearly all of it – about 2 square meters (6 square feet). We might have to weed the very edge of the fence, but that’s it.

Considerations Before Trying

Autonomous mowers might not be a good mower for some situations:

  • You like to make patterns in your lawn, like my boss does. He enjoys making checkerboards like you see on professional baseball diamonds.
  • Your lawn is complicated, with lots of islands, special plantings, drop offs, marshy spots, and/or slopes.  The boundary wires will be time-consuming to lay out.
  • There is particularly uneven ground in the mow-zone, with holes, ruts, divots, and/or surface tree roots.  The mower could get stuck and require frequent rescues.
  • Boundary wires could be a tripping hazard in a high-traffic lawn and are more likely to be broken by repeated stepping.  Burying may be a good solution, but complicates installation.

Closing Thoughts

Despite some frustration with the setup instructions, the first 24 hours have gone swimmingly and I’m very happy. This might be the first time in my adult, home-owning life that I’ve had a neat lawn for more than a week per summer.

Having a real, autonomous, domestic robot makes the future feel like it’s finally arriving.

Bypassing a Tunnel-Broker IPv6 Address For Netflix

Surprisingly, it worked beautifully… that is, until I discovered an unintended side effect

My ISP is pretty terrible but living in the United States, as I do, effectively makes internet service a regional monopoly.  In my case, not only do I pay too much for service but certain websites (cough google.com cough) are incredibly slow for no reason other than my ISP is a dick and won’t peer with them properly.

This particular ISP, despite being very large, has so far refused to roll out IPv6.  This was annoying until I figured out that I could use this to my advantage.  If they won’t peer properly over IPv4, maybe I can go through a tunnel broker to get IPv6 and route around them.  Surprisingly, it worked beautifully.  GMail has never loaded so fast at home.

It was beautiful, that is, until I discovered an unintended side effect: Netflix stopped working.

netflix error: you seem to be using an unblocker or proxy
Despite my brokered tunnel terminating inside the United States, Netflix suspects me of coming from outside the United States.

A quick Google search confirmed my suspicion.  Netflix denies access to known proxies, VPNs, and, sadly, IPv6 tunnel brokers.  My brave new world was about to somewhat less entertaining if I couldn’t fix this.

Background

Normally a DNS lookup returns both A (IPv4) and AAAA (IPv6) records together:

$ nslookup google.com
Server:     192.168.1.2
Address:    192.168.1.2#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.12.142
Name:   google.com
Address: 2607:f8b0:4006:819::200e

Some services will choose to provide multiple addresses for redundancy; if the first address doesn’t answer then your computer will automatically try the next in line.

Netflix in particular will return a large number of addresses:

$ nslookup netflix.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: netflix.com
Address: 54.152.239.3
Name: netflix.com
Address: 52.206.122.138
Name: netflix.com
Address: 35.168.183.177
Name: netflix.com
Address: 54.210.113.65
Name: netflix.com
Address: 52.54.154.226
Name: netflix.com
Address: 54.164.254.216
Name: netflix.com
Address: 54.165.157.123
Name: netflix.com
Address: 107.23.222.64
Name: netflix.com
Address: 2406:da00:ff00::3436:9ae2
Name: netflix.com
Address: 2406:da00:ff00::6b17:de40
Name: netflix.com
Address: 2406:da00:ff00::34ce:7a8a
Name: netflix.com
Address: 2406:da00:ff00::36a5:f668
Name: netflix.com
Address: 2406:da00:ff00::36a5:9d7b
Name: netflix.com
Address: 2406:da00:ff00::23a8:b7b1
Name: netflix.com
Address: 2406:da00:ff00::36d2:7141
Name: netflix.com
Address: 2406:da00:ff00::36a4:fed8

The Solution

The key is to have your local DNS resolver return A records, but not AAAA, if (and only if) it’s one of Netflix’s hostnames.

Before I document the solution, it helps to know my particular setup and assumptions:

  • IPv6 via a tunnel broker
  • BIND’s named v9.14.8

Earlier versions of BIND are configured somewhat differently: you may have different options, or (if it’s a really old build) you may need to run two separate named instances.  YMMV.

Step 0: Break Out Your Zone Info (optional but recommended)

If your zone info is part of named.conf you really should put it into it’s own file for easier maintenance and re-usability. The remaining instructions won’t work, without modification, if you don’t.

# /etc/bind/local.conf
zone "." in {
        type hint;
        file "/var/bind/named.cache";
};

zone "localhost" IN {
        type master;
        file "pri/localhost.zone";
        notify no;
};

# 127.0.0. zone.
zone "0.0.127.in-addr.arpa" {
        type master;
        file "pri/0.0.127.zone";
};

Step 1: Add a New IP Address

You can run a single instance of named but you’ll need at least two IP addresses to handle responses.

In this example the DNS server’s “main” IP address is 192.168.1.2 and the new IP address will be 192.168.1.3.

How you do this depends on your distribution. If you’re using openrc and netifrc then you only need to modify /etc/conf.d/net:

# Gentoo and other netifrc-using distributions
config_eth0="192.168.1.2/24 192.168.1.3/24"

Step 2: Listen To Your New Address

Add your new IP address to your listen-on directive, which is probably in /etc/bind/named.conf:

listen-on port 53 { 127.0.0.1; 192.168.1.2; 192.168.1.3; };

It’s possible that your directive doesn’t specify the IP address(es) and/or you don’t even have a listen-on directive – and that’s ok. From the manual:

The server will listen on all interfaces allowed by the address match list. If a port is not specified, port 53 will be used… If no listen-on is specified, the server will listen on port 53 on all IPv4 interfaces.

https://downloads.isc.org/isc/bind9/9.14.8/doc/arm/Bv9ARM.ch05.html

Everything I just said also applies to listen-on-v6.

Step 3: Filter Query Responses

Create a new file called /etc/bind/limited-ipv6.conf and add the following at the top:

view "internal-ipv4only" {
        match-destinations { 192.168.1.3; };
        plugin query "filter-aaaa.so" {
                # don't return ipv6 addresses
                filter-aaaa-on-v4 yes;
                filter-aaaa-on-v6 yes;
        };
};

What this block is saying is, if a request comes in on the new address, pass it through the filter-aaaa plugin.

We’re configuring the plugin to filter all AAAA record replies to ipv4 clients (filter-aaaa-on-v4) and ipv6 clients (filter-aaaa-on-v6).

Now add a new block after the first block, or modify your existing default view:

# forward certain domains back to the ipv4-only view
view "internal" {
        include "/etc/bind/local.conf";

        # AAAA zones to ignore
        zone "netflix.com" {
                type forward;
                forward only;
                forwarders { 192.168.1.3; };
        };
};

This is the default view for internal clients. Requests that don’t match preceding views fall through here.

We’re importing the local zone from step 0 (so we don’t have to maintain two copies of the same information), then forwarding all netflix.com look-ups to the new IP address, which will be handled by the internal-ipv4only view.

Step 4: Include the New Configuration File

Modify /etc/bind/named.conf again, so we’re loading the new configuration file (which includes local.conf).

#include "/etc/bind/local.conf";
include "/etc/bind/limited-ipv6.conf";

Restart named after you make this change.

Testing

nslookup can help you test and troubleshoot.

In the example below we call the “normal” service and get both A and AAAA records, but when we call the ipv4-only service we only get A records:

$ nslookup google.com 192.168.1.2
Server:         192.168.1.2
Address:        192.168.1.2#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.3.110
Name:   google.com
Address: 2607:f8b0:4006:803::200e

$ nslookup google.com 192.168.1.3
Server:         192.168.1.3
Address:        192.168.1.3#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.3.110

 

A project elided

After a few too many close calls, I approached the town about making our street and another into one-way lanes.  A counter-clockwise, 1.7 mile loop around the lake.

SilverLake, Wilmington MA
Silver Lake, bounded by Main, Lake, and Grove

The town said “no” for some very good reasons.  I knew they would, but I had to give it a try.  They paid the courtesy of taking it seriously, giving me a meeting with various officials, and explaining the reasons.

I had put an actual proposal together in case this went further.  I include it here for posterity.  Read it here: Better Traffic Around Silver Lake

Stage Fright

Giving presentations at work has made me realize something.

I don’t actually have stage fright.

I’m simply afraid of not knowing what the fuck I’m talking about in front of other people.  It happens more often than I care to admit.

I’m perfectly able to get up and talk IF I know the subject, have some idea of what I’m going to say, and have something (anything!) to refer back to in order to help keep me on point.  Like a PowerPoint presentation, or an index card.

All these years I thought it was stage fright that gave me the dry mouth and jitters.  Now I realize that I rarely know anything about anything, and have less to say about anything, and that’s what made me nervous.  Who knew.  (Obviously not me, hardy har.)

Gell-Mann Amnesia Effect

The Gell-Mann Amnesia Effect is, simply put,

I believe everything the media tells me except for anything for which I have direct personal knowledge, which they always get wrong.  source

Formulated by Michael Crichton, is named after Murray Gell-Mann, an astrophysicist.  (said Mr. Crichton, “I refer to it by this name because I once discussed it with Murray Gell-Mann, and by dropping a famous name I imply greater importance to myself, and to the effect, than it would otherwise have.”)

Mr. Crichton explained it further in a 2002 speech, “Why Speculate?

Briefly stated, the Gell-Mann Amnesia effect is as follows. You open the newspaper to an article on some subject you know well. In Murray’s case, physics. In mine, show business. You read the article and see the journalist has absolutely no understanding of either the facts or the issues. Often, the article is so wrong it actually presents the story backward – reversing cause and effect. I call these the “wet streets cause rain” stories. Paper’s full of them.

In any case, you read with exasperation or amusement the multiple errors in a story, and then turn the page to national or international affairs, and read as if the rest of the newspaper was somehow more accurate about Palestine than the baloney you just read. You turn the page, and forget what you know.

That is the Gell-Mann Amnesia effect. I’d point out it does not operate in other arenas of life. In ordinary life, if somebody consistently exaggerates or lies to you, you soon discount everything they say. In court, there is the legal doctrine of falsus in uno, falsus in omnibus, which means untruthful in one part, untruthful in all. But when it comes to the media, we believe against evidence that it is probably worth our time to read other parts of the paper. When, in fact, it almost certainly isn’t. The only possible explanation for our behavior is amnesia.

RIP, Mr. Crichton.