Tuesday, November 10, 2020

Thank You Bell Atlantic for the Ethernet in My Walls

 I've recently moved into a year 2000 vintage house filled with such trendy tech as phone jacks and coax cable in most every room. Being me, I set to pulling Cat 7 Ethernet to every corner I could reach. But there were many corners I couldn't reach, and I despaired of getting the coverage I wanted. 

Then I took notice of the one Ethernet jack in the house—in a basement media room, and that its cable ended up terminating in a grey box under the stairs. 

Bell Atlantic Network Interface Device

and there were many grey wires, printed with "Cat5,"  ending up at the same box. But where were they going, there were no more Ethernet jacks in the house. I'd searched. And then understanding came, I unscrewed all the phone jacks in the house. And with the exception of one, they were all wired to use a single pair out of a standard four pair Cat 5 Ethernet cable. 20 years back someone had seen the future and pre-stocked my house with the makings of fast wired network. 

Out went the phone jacks and in went Ethernet jacks or Ubiquiti in wall access points. 

My Collection of Phone Ports

At the other end, I neatly punched each cable and attached it to a managed Ubiquiti switch.

Repurposed Phone Lines

Now you might think that Cat 5 would be slow, but for short lengths, in non-challenging environments it works fine without the shielding enhancements of later standards. My managed switch lists all but one as working at 1000 megabit full duplex, and the other one at 100 megabit full duplex. Even 100 megabit is adequate for streaming 4K iTunes video. I pulled Cat 7 in the attic because I never want to do it again, not because my current needs wouldn't be met by Cat 5e—or in a pinch by this existing Cat 5.

I found the ends of most of the cables near the Bell Atlantic box, but couldn't find the one to the kitchen, whose central location would make a great place for a WiFi access point. Then I came across a walkthrough video of my house pre-kitchen remodel, and right there was a long gone desk and on the desk was a phone and behind the phone was a phone jack. Ah ha.

Detective Work finding the lost Phone Line

I cut a hole in that wall, and neatly stapled to a stud was the last lost Cat 5 in a perfect place for an access point, and a great central location for a Lutron smart switch hub. It would have been unacceptable wall butchery to get an Ethernet cable there through finished ceiling and walls, but 20 years ago somebody left me a present.

Ubiquiti in-wall access point
Lutron Caseta Hub

I was able to wire all of the second floor with new cable via crawling the attic before it became inaccessible with a new layer of blown insulation. There had been two phone jacks in the second floor office, so I was able to join my new network into the Cat 5 legacy network. I will admit to a little overkill with the networking as Ubiquiti hardware is not cheap—what with the gateway, switches, and controller, but it was so easy to use Power over Ethernet (POE) in wall access points wherever I could get an Ethernet cable giving me a robust mesh network. If you have the means, I recommend the system. 

This was also the first time I had used a punch down tool, and I'm proud of my professional looking network with the dedicated upstairs network closet with its rack of equipment and punched down cables. 

Tuesday, May 26, 2020

TV Towers USA for Apple Watch

The Series 5 Apple Watch includes a compass. Which necessitated me selling my otherwise nearly identical Series 4 watch, because I knew it was time to write a watchOS app. Also to write something using the SwiftUI framework, and Combine. And get my 14 year old son to write code.

TV Towers USA for Watch

I decided to embed it in the existing TV Towers USA iPhone app and sell it via an in-app unlock method. This is a bet on my reasonably large installed base of happy users being a better source of revenue (all of of which will be going to my son) than the unlikeliness of being found on the Watch App Store. But, like all my other personal App Store projects, the major point is skill sharpening for the future of my day job. There will come a day when I'll have to pull SwiftUI or Combine out of my bag of tricks. 

And we ended up with this gratifying, smooth, simple, useful app, just what an antenna installer needs for getting a quick bead on the local antenna farm. I can only imagine the number of iPhones that have slid off roofs. Or would be antenna installers, so be careful out there and wear a harness or leave it to the pros, or put the antenna in your attic. 

Saturday, November 16, 2019

Why The Corolla Hatchback Won My CarPlay with Manual Transmission Battle

For several years, I've been pondering replacing my 2003 Civic LX 5 speed sedan—with aftermarket CarPlay receiver. I was certain I was getting a Mazda 3, then I was equally sure I was getting a Subaru Impreza. I might have even gotten a Civic Si, my pondering went on so long. But, in the end, it was the Toyota Corolla XSE 6 speed manual that earned my money.


I was concerned with the non-standard, non-touch interface Mazda uses for their infotainment system. Toyota's implementation is standard, and I'd say nicer for a CarPlay user than Honda's as it has a lot of real buttons, including push buttons on the steering wheel to adjust volume. I've used the Honda system in my wife's CR-V many times, and it is awkward and doesn't make good use of space; consumers were glad to get so much as a real volume knob, and the swipe volume control on the steering wheel is touchy. I don't have any experience with the Subaru implementation, but it is probably fine. 

I did see an oddity, where much of the CarPlay interface was cut off,  making me have to plug and replug it. Still, it has been reasonably performant. 

Power Train

I'm convinced in the value of a simple power train. A turbo is just something easy to break that gets a few more horsepower I'm unlikely to use in practice. The 168 HP my Corolla generates is a little lower than a comparable Civic, and it's zero to sixty time might be half second less, but I get quick throttle response and I can use non-premium gas. This is similar to my avoidance of a CVT, which gets a noticeable better fuel economy, but seems mechanically complicated and easy to fail. I will say that living in New England, I would love to get an all wheel drive Impreza, but it would be mechanically more complicated and may be a little less peppy. Also, I'll be putting winter tires on this car and that's most of the battle against winter roads. I like the idea of the Mazda 3's engine, but I wasn't all that impressed with the gearing when I test drove a manual; and it was always prompting me to shift into a ridiculously—if fuel efficient—high gear. 

The boxer engine in the Subaru just seems to be an obsolete technology despite its advantages in smoothness and maintenance. 

The Corolla shifter is longer than I'd like, and it's taken be a while to get used to the grab point on the clutch, but it is in general a joy to use. Particularly liking the hold feature which makes uphill starts trivial; I'm likely to lose my ability to balance the clutch to the throttle. Also, rev matching is easy. So, even for a manual, it makes life easy. 

I don't want an auto-engine stop feature for that last smidge of gas mileage; talk about something that will kill a starter. 


Everyone I've ever read highly rates Toyota has the king of reliability. I've dealt with oil leaks/burning for years on my otherwise beloved 7th generation Civic and I could use some reliability. In the end, this and the bad reputation of the local Mazda dealer, eliminated the Mazda 3.  I don't know if it makes a difference, but the Corolla is still made in Japan in factories with a long history. (Having said that, the door edge protecting plastic fell off the rear passenger door the first time my kids opened it, so that's worrying.)

Safety Tech

The Corolla gives a very complete set of safety features. The lane warnings are a bit annoying, but at least it doesn't bother with driver attention spying. I chose the higher XSE trim in large part because I often have shoulder problems making blind spot monitoring a life saver. It seems to be very comparable to the Honda safety features on the CR-V. Adaptive cruise control seems less touchy than the Honda. 

There are a wide variety of settings on the headlights. They are literally the only things I had to look up so far in the manual, I guess I'll just set them on auto with auto high beams. Regardless, they are plenty illuminating, but for some odd reason the adaptive headlights were only available with the Blue Flame paint color. 


I think the Corolla Hatchback is the best looking of all the current Japanese Hatchbacks. The Mazda 3 sedan looks great, but the backend of the hatchback is a balloon. The Civic is just too angular for me. The Impreza is pretty nice, actually. 

Mine is in Galactic Aqua Mica, which is a lovely and varied color; sometimes it looks almost black, sometimes blue, and sometimes green. 


As I bought it when the dealers were clearing out 2019 stock, and being the niche market of a manual, I got a pretty good deal of $19.4K which is way, way under MSRP. For me, this is an amazing value what with all the safety tech, the excellent fuel economy and how fun it is to drive. Nice value adds include: heated seats, fully automatic windows, two map pockets, rear center arm rest, driver lumbar support, telescoping steering wheel, electric mirrors, 2 years of maintenance, partial leather seats, and auto release parking brake. My particular car even came with all weather floor mats, wheel locks, and body side moldings. 

On the other hand, the cargo area is small, but I have a CR-V to use as a hauler. Center console storage is small. There is no standard tow package, so I can't easily add a hitch receiver bike rack. Nor are there available roof rails. Heated steering wheels are apparently only available in Canada. It's unclear if the 2019 models will get upgraded firmware to support Android Auto—not important to me, obviously. 

Things That Don't Matter

There is a lot of tech in the infotainment system that doesn't matter. It has a WiFi hub that you can subscribe to Verizon through: our phones and tablets all have unlimited data. It has SeriusXM: I have an account, and it is much easier to listen to content using the app, where I can skip over most of the commercials in FoxSports and listen to other non-live content.  Who is going to buy a Toyota navigation package when I have Apple Maps, Google Maps and Waze? For that matter, why would I bother with a bunch of soon to be stale Toyota versions of apps for services that already have well maintained CarPlay/iOS versions?

 I'd have been fine with 16" tires but wanted the other things in the XSE package so 18" wheels it is. People like to make fun of the fake exhaust tips, but they don't matter. 


I'm happy with my purchase. It took a lot of saving and a lot of pondering, but I finally got a car that is a happy successor to my dying Civic. 

Saturday, October 26, 2019

Thunderbolt Display Life Extension: An Environmental Proposal for Apple

I recently replaced the power supply and data cable on my Thunderbolt Display to keep it working with its 5th Mac.  I know from experience that the original cables go bad, especially from MacBook Air users having to put too much stress on the cable being plugged into both sides of that laptop.  I personally wore out 2 Apple original cables when the strain relief around the data cable failed. So time for a replacement. Although I could have just used the auxiliary Thunderbolt 2 port on the display, I was in refurbish mode, and was opening the display up anyway.

Here's the cable I found on Amazon. Like the original it has a MagSafe 1 power connector and a Thunderbolt via Mini DisplayPort data connector. Which would be great, if I still used a 2015 MacBook Pro.
Thunderbolt Display Cable Replacement
But I have a 2018 MacBook Pro which has no MagSafe and has 4 Thunderbolt over USB-C ports. So, I purchased a separate Thunderbolt 2 to Thunderbolt 3 adaptor from Apple for $49: 
Thunderbolt 3 to Thunderbolt 2
Thunderbolt 3 to Thunderbolt 2 Adaptor

And I had to provide my own $79 power supply, despite the fact that I now have a new 250W power supply in my Thunderbolt Display which would be perfectly capable (I would think) of driving both the display and my laptop. 

I could have ripped the whole cable out and replaced. it with a Thunderbolt 2 cable, as the inside connector is just a Mini DisplayPort jack, just like the other end. I could have even put a short Thunderbolt 2 cable inside the case, attached to the adaptor and brought out a Thunderbolt 3 cable through the opening in the case, but I wouldn't have power over that cable. What I want is a one cable solution. 

Here is my proposal to Apple. Create a replacement cable assembly that ends up with a powered Thunderbolt 3 USB-C port embedded in the opening currently occupied by the MagSafe/Thunderbolt 2 cable. Enough with embedded cables that go bad with inadequate strain relief. Put a port in the back of the display to make it easy to replace future cables. Charge $129 for it, and I will buy one, I promise. 

Apple is always claiming to lead the way environmentally, but they are allowing 100's of thousands of otherwise functional monitors to go out of use before their they have to. They don't even sell a monitor in this price region anymore.  They brag about using "recycled" aluminum in their lower end products, but have this golden opportunity to keep equipment working and not being recycled and landfilled.

Saturday, October 12, 2019

Chirping Thunderbolt Display, Time for a New Power Supply

My Thunderbolt Display started chirping when attached to a computer a few months ago, and then a few weeks ago, it out and out died.

Now, I am fully aware that this monitor is extremely obsolete with its USB 2 ports, moderate resolution and Thunderbolt 2 connectivity. But, it is still an attractive, accurate monitor with lots of connectivity. So, I deemed it worth it to spend $139 on a replacement power supply. Also needed some suction cups to pull the front glass off. It was a good task to assign my son, although we nearly broke the internal cable connecting the motherboard to the LCD panel.

Also bought a replacement power+data cable as the strain relief had failed a long while ago, leading me to use the passthrough Thunderbolt 2 port to connect to the monitor. I could probably have gone without this expense.

It would be great if someone manufactured a replacement cable that incorporated USB-C + Power + Thunderbolt 2 to Thunderbolt 3. There are a lot of these monitors out there. Where I work, these legacy monitors are coveted by anyone assigned a normal corporate purchase monitor. A swap in cable replacement would make them practically perfect.

Everything worked although I did manage to snap the screw holding the grounding wire to the external cable, so I had to do a bit of a solder hack. And now, I have my beautiful Thunderbolt Display back on my desk.

Saturday, October 05, 2019

Wherein I Represent the Early Internet

I was just watching the documentary about the long ago startup, General Magic, when about halfway through, they show a sequence representing when the Internet entered public awareness. And what do they use to represent the pre-browser era, but the ZModem tool I wrote for Aladdin Systems when I was in grad school.

Ironically, I don't think it was widely used over the Internet, but was generally used for BBS downloads.

Something to proudly show the kids.

Tuesday, July 02, 2019

Textual Representation of SwiftUI Paths

While on vacation, I've been creating my first Swift Package, for my incomplete Scalar2D project. While my major ambitions have been slow, it does have 2 useful features: it supports many ways to represent colors as strings, and it can generate 2D paths from standard SVG path element strings.

So you can write:
import SwiftUI
import Scalar2D_SwiftUI
import CoreGraphics

public struct TestFrogView : View {
    private let cgPath = CGPath.path(fromSVGPath: "M185 212C139 183 40 199 39 108A18 18 0 1 1 56 75Q67 53 91 45A18 18 0 1 1 127 38C170 29 193 62 220 161L225 110Q231 84 260 115C260 142 265 205 241 198Q215 193 227 230C236 249 161 249 125 248A5 5 325 1 0 122 259C192 264 248 249 237 226Q230 206 247 211  266 210 272 161C273 139 276 106 252 93 245 86 209 65 216 133 200 46 176 19 132 26A28 28 0 0 0 81 40Q61 46 52 63A27 28 0 0 0 27 110C33 192 70 192 145 205Z"

    public var body: some View
           proxy in
            Path(self.cgPath.fitting(geometry: proxy)).strokedPath(StrokeStyle(lineWidth:3.0))
        }.frame(idealWidth:cgPath.boundingBoxOfPath.width, idealHeight:cgPath.boundingBoxOfPath.height)

Scalar2D_SwiftUI package in action

One thing, I found out after putting the package together was that the SwiftUI path has a String representable form of its own. You can pass it a specially formatted string and it will generate a Path struct.

Thus, an SVG Path to make a heart in a circle:
"M 0 0 A 100 100 0 0 0 0 200 A 100 100 0 0 0 0 0 Z M0 45 C 63-23 171 87 0 200 C -171 87 -63 -23 0 45 Z"
Simple SVG of a Heart in a Circle
Can be represented by a SwiftUI Path representation of:
0 0 m  -55.2285 0 -100 44.7715 -100 100 c -100 155.228 -55.2285 200 -1.83697e-14 200 c  55.2285 200 100 155.228 100 100 c 100 44.7715 55.2285 0 6.12323e-15 0 c h 0 45 m 63 -23 171 87 0 200 c -171 87 -63 -23 0 45 c h 
Which is probably just a direct translation of the underlying CGPath, which does not have an explicit arc element, so the arcs that made up my circle—the "A" operands—got converted to the "c"  cubic Bezier operands. The stringRepresentation property on Path tends to add unneeded short line segments after moves, which is also probably an artifact of iterating through the CGPath to generate the text. 

You could use the included Path(string: String) constructor to generate text from shapes, but SVG paths have the advantage of being generated by common drawing applications, and having more features such as arcs, shortcut operands and relative coordinates. I'm not sure why Apple didn't choose SVG paths when deciding on a text format, but please give my Scalar2D Swift Package a try.