Oops! Something went sideways.

Looks like the styling got goofed up. Sorry about that, unless it's what you wanted. If this isn't what you were looking for, try force refreshing your page. You can do that by pressing Shift + F5, or holding Shift and clicking on the "reload" icon. (It's the weird circle arrow thing "⟳" just above this page, usually next to where it says https://blog.unitedheroes.net...)

isn't quite ashamed enough to present

jr conlin's ink stained banana

:: A Simple Upgrade

Note: The following is sweary.

Let me first point out that all of this is mostly self inflicted.

Let me secondly point out that i think i understand the appeal of laptops now…

The Triggering Event
i had an Acer Spin 13 for years. The idea being that i have a cheap-ish “walk around” for when i travel, or i’m sitting on the couch. It ran ChromeOS, mostly because i could install a Linux VM on it and run apps like VS Code and Firefox that way. The real beef was my custom built tower: 64GB of memory, way too much disk space, and an i7. It was my everyday workhorse. i mean, sure, that i7 was maybe gen2 or so, and the MB was subject to Heartbleed and other attacks, but it worked well enough.

So, for various reasons, i decided to get myself a Framework PC.

This PC is amazing. It’s exactly how PCs should be made and offered. Yeah, dropping a K on a “walk around” makes it a wee bit more concerning should i lose or damage it, but the form factor, weight, power, and features definitely make it worth it. Installing Lubuntu on it was a dream.

Then, just for giggles, i installed Rust on it and compiled `autopush-rs`.

Oh, dear.

What normally took minutes on my “powerhouse”, took just shy of a minute on my laptop. It was time to upgrade the beast.

Rolling the dice
Doing a modern build is like trying to put together a well-rounded stereo system. It’s possible, but there are so many scams and “BUILT FOR X-TREME GAMERZ” bullshit that it requires a ludicrous amount of attention. As noted elsewhere, i’m not a fan of a 3.2GHz clown cars.

So i put together a system that, i felt would work ok:

i planned to reuse as much of my old system as possible (ha-ha).
i mean, i figured the worst part would be (Ha Ha) having to re-authorize Windows 10 (HA HA).
How bad could it be? (HAHAHAHA sob sob)

i pulled my car out of the garage, and set up a computer surgery center. i even told my wife, “i should be done in around 4 hours” (Oh, sweet innocence…)

The Struggle, Part 1

After cleaning out the case and wiping out the fans (which i do every year anyway. Leaf blowers are amazing for that.), i got to work carefully extracting the old motherboard and cooling stack from the old system. It was annoying, of course, but went fairly well. i wiped the old thermal paste off of the bottom of the cooler and the CPU with a bit of rubbing alcohol, and set them to dry.

Then, it was a simple matter of setting the CPU (why the hell is there so much packaging?) and memory (wait, the slots are 1 and 2 not 0 and 1, and which ones are the primary?). Now for the cooler. Wait, where are the mounting pots? There are holes, but… Oh for fuck’s sake.

So, apparently modern motherboards no longer have pre-built mount points for coolers. Awesome.
So, off i go to the local computer parts place to get a new cooler. Oh, hey, the old power supply was kinda noisy (why don’t they offer db ratings for those?) let me swap it out for a newer quieter one. Power connectors are standardized. (Ha-ha-ha)

The Struggle, Part 2
So around $300 later (cooler and power supply, i set about building things again. i fix the base, apply some paste, and get to mounting the cooling– crap, this thing isn’t balanced and keeps slipping off the– dammit, i have to get the grodding mounting screw through the fan ducting– crap it fell out? Where the frak did that screw– DAMMIT the cooler slipped off again!? Wait, what was that snap?

Turns out that one of my memory chips was about 1mm too tall. Yes, apparently, that’s a thing. i mean the bit that cracked was part of the decorative X-TREME GAMERZ ONLY crap, so nothing critical, but still, might want to get vertical dimensions for your DIMMS along with base clearance for your CPU coolers from now on.

Well, no big i’ll just run a cable from this to the garage monitor… that’s DVI, because it’s old. Fuuuuuu….

i brought the system into my office to fire up because that’s the closest HDMI/DisplayPort monitor i have.

Hey! It boo– WARNING! MEMORY IS NOT IN OPTIMAL SLOTS!

Well, taint truffles, it’d be nice if you had something that actually NOTED THAT ON THE GODDAM BOARD or HAD A FECKING MANUAL THAT INDICATED THAT now wouldn’t it?

Insert another hour (yeah, hour) of me removing the cooling stack, moving the memory to the proper slots, and reattaching the stack. By this point, the thermal paste is a complete mess and i’m fully aware that i’m going to have to reapply it eventually. THAT WILL BE ANOTHER DAY.

Fine, it’s all bolted up. Finally, i can power it up and see if the License key still works…

The Struggle, Parts W & L

NOPE
Guru meditation keyword: HYPERVISOR_ERROR

Well… shit. That’s unexpected.

Apparently, the new config is causing whatever bits of clever Microsoft did to get Hyper-V running to fail dramatically. i can’t boot it at all, even in safe mode. i go through the various recovery mechanisms, and no soap.

Ah well, i was kinda prepared for this, so let me grab my LiveDisk copy of Lubuntu 22.04 boot, and then install to the partition, restart and…

Initramfs: Out of memory

Wait, what? You have 64 GB of memory. how the hell can you be out of memory just booting up!? You’re Fscking Linux, for Crissakes! You run on crap that has 64MB of memory.

insert 80’s montage of me scrubbing through various docs and sites that basically work out to :man-shrugging:, and me adding increasingly obscure swear words to my growing list There’s some weird problem with MSI motherboards, built in video, and overly large boot images being generated.

Wait, what? Turning off `silent` from the boot options fixed it!? SERIOUSLY!?, Well, pisskidney, sure, i’ll let it spew it’s brains out on boot.

The Struggle, Part ?
So, as of now, i have Lubuntu on my main system, and it’s compiling autopush-rs in about 30s, which is a literal magnitude better than it was prior. i have Windows currently updating from an original install going in a VMWare instance, where i’ll confine things like some games and other windows only sort of things.

My main system is currently running Lubuntu, and i’m basically building it up as my main, which means installing lots of stuff and moving bits over. i still plan on swapping the guts out of my garage server for my old motherboard, power, and cooling fan, but that’s going to be some other weekend’s project.

But yeah, definitely starting to see the appeal of laptop only lifestyles.

:: Mentoring Sucks

Tech people: Mentoring sucks, it’s sucked for a while, and will probably continue to suck.

First off, let me start with a little story.

i generally start my day early. Back when offices were a thing, i’d often show up early enough that the folk who keep things running would still be there. One morning i’m working away while someone was on a ladder repairing an air-conditioning duct. He’s up there a while, comes down, and walks away. A few minutes later, he comes back with someone who is definitely his senior. Senior goes up the ladder checks a few things and comes down. Senior tells Junior that he did a good job, but there was one tricky thing that he missed, then explained what it was. Junior starts peppering Senior with all sorts of questions like “how do you check for that?” and “is there a tool or technique i can use to spot for that in the future?”. The back and forth go on for a while, before Junior and Senior collect the tools and head off.

Why, yes, that should sound familiar. Basically it was the HVAC equivalent of a code review. It wasn’t judgemental. Nobody yelled or complained. It was clear, focused and deliberate because it was something that industry has built in for decades. Heck, you could argue that it’s something that the other trade industries have had for centuries. It’s also something that Tech just recently figured out was a good idea, and we are still generally terrible at it.

In my professional life of close to 35 years i think i’ve only really had one real mentor. Everywhere else i went through the usual horrible interview process, balanced a binary tree moving at some fraction of the speed of light on a whiteboard, got hired, and was then left to either sink or swim. That’s an absolutely terrible work environment. It’s like being proud of the fact that you work in squalor and know just how to sleep so the rats don’t bite anything critical. i’ve not had a whole lot of great mentoring role models to pick from. Chances are, neither have you.

Granted, i have a theory about that. Companies don’t care. Think about how many engineering managers you know that got to that position because they’d either been around longer than most or because the company was hoping that they would some how magically make mini versions of themselves. Then, either the new manager burns out and leaves, or the people under them burn out and leave. The company doesn’t care because they’ll just repeat the cycle and back-fill with (preferably) cheaper folk. (i also have a theory that companies love Imposter Syndrome because it’s a lovely boat anchor that makes you put up with crap you wouldn’t otherwise, but i’ll leave that for another screed.)

And we engineers put up with it because we have no idea how to change it or that things could be better. Surprise! You can change it. Things could be better.

Your boss doesn’t have to be your mentor. Honestly, your boss probably shouldn’t be your mentor. They sign your paycheck and are judged on your performance. They have a bias and it’s probably not in your favor.

A good mentor not only provides good technical insight, but also improves you, the holistic you. Hell, it’s why i’m writing this up. If you’re a better person, i don’t have to clean up the damage you did to the person i hire which lets me spend more time on things that matter, like making that new hire more effective and productive so that we can get more done. Likewise, i can start learning new things from that person since mentoring is a two way thing.

Awesome! So what’s the solution? Hell if i know.

i just told you that i’m a product of terrible or non-existent mentoring. i have spent the past year or so trying to work out what might work. i plan on sharing what works and what doesn’t here because this is also my mental dumping ground.

i will say that not everyone is cut out to be a mentor, but that just means that you’re missing a required skill. Senior+ devs need to be mentoring younger devs. This means having regular discussions with them where your compassionate and empathetic. You were also dumb and ignorant, so it’s not their fault. If you struggled with something, it’s not a badge of honor, it’s a system failure. Fix it. Part of your job is making junior devs into peers. If you’re not doing that, you’re a crap engineer. You’re basically a glorified calculator and can be replaced just as easily.

But, yeah, if y’all have ideas, the comments are open.

:: Getting HomeAssistant 2021 Running on Docker and a Raspberry Pi 4

Home Assistant is a marvelous app that makes your home smarter. It’s also a raging pain in the ass if you’re an early adopter and actually have set things up already. This post is not only a helpful guide for how to update and use the latest flavor of Home Assistant, it’s a lovely well for me to scream into instead of yelling obscenities at the squirrels in the backyard.

A lot of this is going to be date dependent, so denizens of the future you’re probably going to have an easier time of things.

Recently, HomeAssistant has gotten a lot of work done (i’ll blame the pandemic and idle developers, which are sometimes the devil’s playground). To that end, it requires Python 3.8+.

Problem #1: Debian & Python 3.7

As of this date, if you’re running Raspbian/Raspberry Pi OS on your Raspberry Pi, the underlying system you’re running is Debian Buster1. That means the Python you’ve got installed is Python 3.7.3. As of December 2020, HomeAssistant considers Python 3.7 obsolete and stopped supporting it2. You could download the source for Python, and compile it locally. You could also walk from Utqiagvik, Alaska to Tierra del Fuego. You might want to consider not doing that though.

When a version of python becomes obsolete, it’s not the main program that breaks. No, that honor goes to a percentage of the many, many small libraries that the software now uses and drags in like a hoarder at an unguarded Costco. For me, it was about two months in when i discovered that one of my webcams no longer worked.

Fortunately, there is a solution, kind of. The HomeAssistant folks offer multiple ways to install, including an SD image (or if you’re like me and you have other programs running on your Pi, because, well, you can and HomeAssistant isn’t THAT big of a pig), you can run it inside of a Docker image.

Docker is free (regardless of the impression you get from the site). And while you can install it using apt, i’d actually encourage you to install it using the (ugh3) docker install script at https://get.docker.com. If you prefer a few more steps, you can also follow the Debian instructions.

Problem #2: Docker

Docker is clever because it uses a combination of virtual images in order to run applications in a sandbox. It makes up for that cleverness by eating disk space and being horrifically obtuse about how it should be used. Suffice to say that you have images which are the bits of stuff that get run to do things and containers which are the actual, running programs. That will become important in a bit, but it’s also worth noting that you really need to keep an eye on how much space the images are eating up. There are lots of documents you can read, but suffice to say that

$ docker container prune
$ docker image prune

are your bestest friends4.

Problem #3: node

Ah, but wait! There may be something else you’ll need before you can get going. HomeAssistant has moved onto a more modern (pronounced: “sÉ™-pôrt′-ed“) Z-Wave integration system called “ZWave-js”. This is a node.js app. Again, the Debian default is going to be old. So, instead, grab a copy from the download page (for Raspberry Pi, you want the ARMv7 one). Once you have it, you can tar -xvf node-*.tar.xz which will extract node into it’s own directory. You might also need to sudo apt install xz-utils to get the xz decompression tool for tar. You can move that wherever (i usually keep those in $HOME/app). You may also want to add $HOME/node-v-linux-armv71/bin to your $PATH, since you’re going to need those in a bit.

Node helpfully includes npm or the Node Package Manager. This nifty little tool allows you to install packages. What it doesn’t make frightfully clear is that the packages npm installs go into `pwd`/node_modules so you can wind up creating lots of node_modules directories as you try to figure out where the hell things are installed. For now, go to your home directory and run these there.


$ npm install zwave-js
$ npm install @zwave-js/server

This should install some programs and in node_modules/.bin/ there should be a zwave-server.

Yay.

Well, sort of “yay”.

zwave-server needs the device address for your ZWave USB dongle. You can get this from your old .homeassistant/configuration.yaml file. For me, it’s under

zwave:
usb_path: /dev/serial/by-id/usb-0658_0200-1f00

Yours is probably under something like /dev/ttyUSB0 or /dev/ttyAMA0 or something more sane.

Once you have the device path you can then fire up
$ node_modules/.bin/zwave-server /dev/serial/by-id/usb-0658_0200-1f005

and be awestruck by just how chatty this thing is. You’ll then kill it and add 2>&1 > /dev/null & to the command so that it runs in the background and all the chatter goes to /dev/null, because there’s a lot of it, -h and --help do nothing, and i just want to get things running.

Problem #3: ZWave

Wait, didn’t we just solve that? We solved about half of that.

The old ZWave config system is deprecated. While zwave-js does an amazing job recovering and loading devices so you don’t have to re-sync them, there are a few things you still need.

  1. Your system security key. If you have a security key (because you have locks or garage door openers or something) you’re going to need the code for it. Hopefully you have it, still. You can sometimes also get it out of the zwave logs.
  2. Your friendly device names. HomeAssistant’s integration doesn’t use the friendlier device names when listing things out. You will probably have to reset them based on the device node-ids or device ids. Both of these are in the old configuration data. You can also fire up the old version of HomeAssistant, grab a notepad and take notes.

Once you’ve got your list of ZWave things, drop the old, deprecated ZWave integration. Comment out the old zwave: section from the configuration.yaml file.

Now you should be able to get HomeAssistant started.

To start the HomeAssistant docker run

$ docker run \
-rm \
-d \
--name="home-assistant" \
-v $HOME/.homeassistant:/config \
-v /etc/localtime:/etc/localtime:ro \
--net=host \
homeassistant/home-assistant:stable
Remove the container once it exits
Run in the background (daemon)
Name the container “home-assistant”
Link the config directory as /config
Link the time to the system time
Use host networking
What you want to run

Give that a few and you should be able to bring up the admin panel on port :8123 like before. You’ll need to enable the ZWave-JS integration under /config/integrations. If the zwave-server above is running, you should be able to just connect to the default websocket port. Once that’s done and the device list is loaded, simply walk the displayed list setting each entity id back to whatever you had originally set it. They should show up on the Lovelace UI, work in scripts and all the other joy, just like before.

There may be a few other things you’ll do, but it’s getting late and my tequila bottle is empty and i need to go make some tacos for dinner, so you’re on your own.

Footnotes & snark

1Debian is stable. It wants to be very stable. i’m talking “fixed to the bedrock” stable, and much like the bedrock, it tends to move at a geological scale. This means that stuff on Debian tends to be a bit “legacy”, and they don’t release new versions very often. It’s rumored that they only do so once the magic smoke released from overclocking a VT-100 terminal is white.

2 One might ask “wait, why did HomeAssistant basically drop support for Raspberry Pi?” It’s a good question, but basically works out that 3.7.3 was releases mid 2018 and there’s a fair bit of cruft in it compared with later releases. i’ll note that 3.7.3 is still supported until 2023, and just dumping support for it is kinda rude to folks, but they do suggest docker and docker adds a fairly minimal amount of overhead. At this point, it’s looking more and more likely that running apps in some sort of sandbox, be it docker, flatpak, snap or something else will probably keep OS’s secure enough from devs that want to play with all the shiny, new toys.

3 Yes, i get it. Giving folks a clever shell script they can run in sudo sure is a fun and easy way to get things done. It’s also like tossing a stranger the keys to your car so he can go get your take-away order. It’s usually safe, but there’s the off chance that he runs over a kindergarten class or uses it in a bank heist.

4 i am absolutely not kidding about this. Dockers default setting is to fill your disk with old crap. Calling prune goes through and can delete gigabytes of old image data. You want to do that before your computer locks up because / is out of space. Hell, you want to keep a close eye on things using docker image ls -a because docker doesn’t always show you everything, and docker can keep lots of old versions of packages lying around for reasons.

5 So, yeah, fun fact. If you try to later switch to a different ZWave controller USB, it won’t work because the devices and protocol specify the controller, not the local settings. Oh, but it may screw up your local /dev list forcing you to do crap like this because the /dev/ttyUSB0 device is now pointing to an invalid endpoint and something keeps resetting it. It’s super annoying.

So, one of the HomeAssistant folks reached out and asked “Why aren’t you running the Home Assistant Operating System, which handles a fair bit of this for me.

The short answer is mostly FUD on my part, since i’ve not dug super deep into the OS option and been burned by similar things in the past, but a bit more than that too.

i may convert everything over to HAOS (trying to backronym a C to the start of that for some reason), but there are a few personal caveats:

  1. This would basically be a from scratch rebuild. Much of my HASS is still YAML based, so to do this right, i’d have to rebuild it all in the native UI. Not impossible, but a lot of work.
  2. i run a few things on this machine. It’s my understanding that HAOS is basically Alpine running a slew of Docker images, and it’s fairly easy to convert things into Dockers to run on it. This may mean rebuilding stuff like PiHole, as well as my semi-hacky python scripts, and whatever other bits i might need. Again, not impossible, but a lot of work.
  3. Much of the logging does not get written to the SD Card. i’ve gone in and softlinked much of it to write to a USB3 drive attached to the Pi. This is because Linux is “write heavy” and that can burn through SD card write cycles pretty quickly. Again, not impossible (since i can probably mount the USB drive and alter Docker files configs to use that drive), but … well, you can see the pattern emerging.

i have no doubt that things would be a lot easier if i were to have started from scratch yesterday. i didn’t. There’s definitely sunk cost at play here, but sadly, i can’t ignore it because it’s actually functional.

:: Raspberry Pi, PCA9685, and YOU!

i made a creepy eyeball pumpkin over the weekend. There are lots of how-tos for these sorts of things, so i’m not going to do that. Instead i’m going to offer some lessons-learned.




First, off, i’m a software guy. This is the first time i ever played around with servo motors.

So, let’s start off at the top, shall we?

Aside from the raspberry pi, you’ll need

  • A fake pumpkin big enough to get your hands into (yes, both hands)
  • A box cutter with a fresh blade, because otherwise it’s not going to cut right.
  • A PCA9685 servo controller board. Get the one from Adafruit. Yes, you’ll have to do soldering to add the pins. If you get one that’s already soldered, you’ll still need the Adafruit libraries and documentation, because they’re better than the ones that come with the pre-built boards.
  • 4 strand of Female to Female jumper wires. Really, you should have a bunch of these lying around if you’re going to do stuff with a Pi other than run Pi-Hole or HomeAssistant on it.
  • A hot glue gun and a surprising number of glue sticks
  • 2 bags of 10 full globe plastic eyeballs. Yes, the half eyeballs look better, but they stop looking better once they turn any angle. Yes, it’s more eyeballs than you need. You’re going to screw up a few.
  • About 10 inches of PVC pipe. You will need to bring a sample eyeball with you to make sure it fits inside the pipe.
  • A three AAA battery holder plus connector wire (optional, but since there’s, like, one electronics shop left in the San Jose area that even comes close to having it, it’s a good a reason as any to go to Excess Solutions, which has become the last one standing from Weirdstuff and HSC)
  • Nylon zip ties. (unless you’re planning on hot-gluing the motors to the pipe because you never want to use those motors for anything else ever again.)
  • A roll of 20 gauge bailing wire you bought back in the 80’s and forgot you had until now, but thank you past you for not pitching that.
  • A 1.25″ SpeedBor drill bit you got to add a drain to a sink years ago and also forgot you had but thankfully didn’t pitch or sell.
  • A dremel with one of those drum sander bits.
  • a breathing mask because it turns out that dremel’d off foam gets friggin’ EVERYWHERE.
  • Two cans of compressed air.
  • A shop vac with a reasonably clean filter.
  • A chop saw, rotary sander, laser level and drill press. Ok, like me, you probably don’t have that, and unlike some of the other crap on this list, you’re not going to get those either. So, instead build a bunch of crappy rigs to try and keep a hacksaw straight while wondering if you ever had a proper PVC pipe cutter (you don’t). You’ll also need whatever sandpaper you can find to take all the plastic burrs off the bad saw job you did.

Now for the lessons learned:

  • This is going to take all day. Plan accordingly.
  • Wiring up the PCA board involves you understanding the semi-arcane labeling systems that exist for electronics. Basically, for the Raspberry Pi:
    PCA Pi GPIO post Notes
    GND 6 Ground (also pins 6,9,14,20,25,30,34, or 39
    OE Output Enable (NOT USED)
    SCL 5 (Serial Clock Line)
    SDA 3 (Serial Data Line. No idea why “A” either other than easier to read as tiny print.)
    VCC 1 IC Power (3v also pin 17)
    V+ 2 Servo Power (5v also pin 4)
  • Wire up the boards and add the motors (remember, for the motors, darkest wire is “Ground”) with power off.
  • Once things are wired up, boot up the Pi.
  • Make sure the Pi has the I2C kernel mod loaded (use sudo rpi-config to turn it on).
  • You also want to apt install i2c-tools as well so you can verify that the PCA board is recognized:
    # i2cdetect -y 1
         0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
    00:          -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: 70 -- -- -- -- -- -- --
    

    No values at 0x40 & 0x70? It’s not there.

  • Drilling holes on the directly opposite side of a ball is not easy. You can build a jig to hold things. i wound up taping a bit of PVC pipe to an old phone book, finding the center, and using a bit of wire as a post to hold it in place. i still screwed up, and that’s why you buy two bags of eyeballs.
  • You will try to be all sorts of clever in how you want to rig up the eyes. Don’t be. Simplicity works better than imagined artistry. (Plus fishing line will NOT cooperate with you trying to emulate eye muscles no matter what elder gods you may invoke.)
  • Make sure every single time you’re about to do something irreversible, that you’re working on the correct side. You can hide some sins, but not all of them.
  • Make the eyeball mounts first. These will take most of the day and be really annoying. Remember to cut more than you think you’ll need because you’re going to screw some of them up.
  • Depending on how bug-eyed you want your eyeballs, you can drill the swivel point deeper or shallower into the lengths of PVC. Mine are around 7.5mm in. Remember what i said about irreversible? Mark which side of the tube is the front. Future you will thank you.
  • Drill all the holes before you start gluing things in place. Each hole will need 45 – 70mm clearance (depending on where the motor is attached). Use a sample eyeball mount to figure out placements. If you’re feeling super clever, you can push a length of wire from the inside out to not where to drill the hole.
  • Did i mention that pumpkin foam gets everywhere? Oh, just wait.
  • Since the shell will be thick (anywhere from 10 to 40mm), you’ll need to dremel out a bunch of it. This will terrify you because it’s a whirring destruction machine and you know your hand is going to slip and destroy everything. Fortunately, this will distract you from the ungodly amount of dust being generated.
  • It’ll be only afterwards as you survey the foamy carnage that you’ll think about setting up the shopvac to suck up the dust being generated.
  • Oh, yeah, and the face mask would have been good too.
  • Place the eyes into the holes and secure them in place with hot glue. Bonus, you want to hold the eye in place with one hand while applying the glue otherwise the damn thing will slip off, or the glue will leak and stick to everything. Check each before everything sets.
  • ProGuy who did it once tip: compressed air will help set the glue quicker that just ambient temperature will.
  • Once all the eyes are in place, try to secure the internal cabling. Don’t try to use blue tape to hold things in place in there because holy hell there’s still ground up foam? You can use bits of blue tape to hold strands of wire together.
  • Plug the eyes back in, pray to whatever gods you have, and power up to check what’s working and what’s not.
  • Tweak the range of movement, because it’s not going to be from 0 to 180. i use 20-160. You’ll know when you no longer have eyeballs that sound like angry bees when they’re resting.

There, that’s it! Wasn’t that easy and fun?

Of course it wasn’t.

Still, if you want to add a light, i found an old LED bike light works pretty well and might even be a bit overpowering.

:: In Praise of Robber Barons

John D. Rockefeller became the nations first billionare (back when the cost of living was around $.25 a day and the average wage was around $430 a year) He was the richest American ever, and widely considered to have been the richest person on the planet. His company, Standard Oil, was considered the most ruthless and cruel monopoly and is the textbook example of Monopoly used still today.

Andrew Carnegie pretty much was American steel at a time when everything was made from steel. Steam engines, the rails they ran on, the beams used to construct modern buildings, cars, ships, you name it, all steel, and pretty much from his foundries. He killed over 2,000 people because his get away flooded a town, and he is responsible for the Homestead Strike which is one of the bloodiest anti-union attacks. Fair wages and decent working conditions? Bah, peasants.

William Randolph Hearst build a publishing empire from salacious articles and, frankly, out right lies. Heck, to boost sales of a flagging paper, he even convinced the country to go to war. (You, know, just in case you think that conservative nut jobs riling up the masses is a new thing.)

Why do i note these folk? Well, recently i’ve been thinking about our current crop of robber barons. It started when i was listening to a podcast talking about the Vision Fund which gives questionable startups like WeWork ungodly gobs of cash.

The point really got driven home when i saw this tweet showing how taxes for the top 400 have dropped over the years.

So, what are the ultra wealthy folks like Bezos, Jobs, Zuckerberg and the rest doing with their cash? They’re “reinvesting it” using investment funds like the Vision Fund above. They’re burning it in rocket fuel.

Know that they’re not doing with that huge pile of cash? Building universities, or public squares, or even over-opulent tourist attractions lording over large swaths of green space. Basically, the old robber barons at least had some level of civic mindedness (or at least sense of legacy) to realize that at least trying to buy some positive legacy might be a good idea.

At least that’s one thing i can look forward to. The new crop will be forgotten quickly.

They’re the kings that Ozymandias was trying to impress.

The ones you have no memory of.

Because, you know, fuck them.

Blogs of note
personal Christopher Conlin USMC Henriette's Herbal Blog My Mastodon musings Where have all the good blogs gone?
geek ultramookie

Powered by WordPress
Hosted on Dreamhost.