Monday, August 28, 2017


Perceptions...  A few months ago I bought a new MacBook Pro to replace my aging (2014) MacBook Pro.  Aside from the gimmicky (and, to me at least, confusing) touch bar, I really like the new machine.  I especially liked the added SSD disk space (I got the terabyte version) and RAM (I maxed it out).  My old 2014 box has been sitting on a shelf (literally), unused since the day I got the new machine.  I kept it nearby in case something screwed up on the transfer I did to move all my stuff to the new machine ... but nothing went wrong; it “just worked.”

So today I picked up the old machine, dusted it off (it was awful!), and brought it into the house to see if it might be convenient to have for use there.  I've been “iPad-only” in the house these past few months, and that definitely puts some restrictions on what I can do.  I plugged it in, let it charge for a bit, then booted it up.  Everything still works fine, as expected.  What I didn't expect, though, was that I'd perceive it as slow!

Now my 2017 MacBook Pro really is a faster machine by the specs, but not all that much.  The speed improvement wasn't big enough to catch my attention as I started using the new machine.  But ... in going back to the old machine, I'm noticing all sorts of places where there's just a tad more time being taken to do something.  A couple operations are much slower – for instance, opening my morning reading list (with 46 tabs) takes roughly twice as long on the old box.  Isn't it odd that I didn't particularly notice the speed-up, but did notice the (same) slowdown?

A new widget at right...

A new widget at right...  You may have noticed the new “Irrigation System” widget at right.  I put that up this morning after some experimentation with different ways I could accomplish this.  The two basic approaches I considered were (a) setting up a cloud-based server, pushing the data from the irrigation supervisor up to that, and pulling it down to the blog, or (b) configuring my routers to allow external TCP connections (carefully controlled) and then pulling it straight onto the blog from there.  The first approach is the safer (from hackers) approach, but requires quite a bit of setup and ongoing administration.  The second approach is theoretically less safe, but much simpler to setup and has no ongoing administration.  After some research I opted for (b), and once I decided on the approach I had it all working in just a couple hours.

For the geekier types, here's what I did:
  • I configured our Xfinity gigabit cable router to allow inbound connections to a specific port at our public IP address.  These inbound connections are NATted (not PATted, as the cable router isn't capable of that) to an IP address (the target address) assigned to the Mikrotik router in my house.
  • I configured the Mikrotik router to PAT from the target address and port to the address and port of the web server on the Raspberry Pi that hosts my irrigation supervisor.
  • I set up an account on the free Dynamic DNS provider DuckDNS, and installed a simple script (provided by them) on my Mac Mini server.  This script runs (via cron) every five minutes, and it updates the mapping between my domain name and my external IP address.  Xfinity can change my public IP address anytime they feel like it, and it seems to actually change on the order of weekly (though I've never tried to actually track it).
  • I configured a new URL redirect record at my domain name provider (Namecheap), who also hosts my public DNS records.  This allows me to refer to a subdomain of a primary domain that I own, instead of DuckDNS's primary domain.  It's also convenient, as the redirect takes care of the funny port number, and I don't have to type it in.  I'm lazy, what can I say?
This all would have been simple and fast had I not run into a stupid problem with cron on the Mac Mini.  That held me up for an hour while I researched the problem – which, as usual, turned out to be entirely of my own making.

Anyhoo, it's all working now!

Sprinkler update...

Sprinkler update...  I haven't said much over the past few days, but our sprinkler contractor has been here working steadily away.  It's clear at this point that the job was vastly larger than he had estimated (larger in the sense that more labor is required).  Much of this has to do with his inexperience with big jobs – most of his jobs, he tells me, have under 30 sprinklers.  His previous biggest job had 94.  We have 211 sprinklers in our system, plus three drip irrigation lines.  Added to that is the complexity of our yard's sectioning and shape: five distinct pieces, each of an irregular shape.  Nothing easy about our yard!  He's also never worked with anyone who was willing to “buy up” quality and maintainability (that is, I'm happy to spend a big more to get better parts, or to make the things likely to break easier to fix).  Generally on the bigger systems, people are more interested in saving money.  I'm more concerned about being able to keep all this running by myself, especially as I get older and less capable.  On top of all that, while he's got a really good eye for level and grades, he grossly underestimated how much topsoil we'd need to bring in to fix the issues in our yard.  We've had almost 500 cubic yards of topsoil delivered so far, and I'd guess we're going to need another 200 to 300 before we're done – so 700 to 800 cubic yards of topsoil in all.  That's a lot of dirt!

As I write this, a skid-steer is hard at work in our front yard, finishing the tear-out of the old landscaping along the front of the house and fixing the (relatively minor) grade problems there.  That will be finished today, and then the skid-steer will go to work moving some gravel and (lots of) dirt to the remaining low spots in the rest of the yard.  We're expecting 10 loads of dirt today and tomorrow, and that's the next work to be done.  I'm told that on Saturday the sod will start going in the front yard portions close to the house, and the entire back yard.  If that really happens, there will be some serious celebrations in our household!