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

:: Pandemic Network Effect

There was an article done years ago that pointed out folks who’s job started during a recession generally earned far less over their careers. There’s a lot of reasons for this, but a big one is that folks don’t generally discuss their salaries so they have no idea if they’re being grossly over or under paid.

i can’t help but wonder if we’re overlooking a huge hurdle for folks starting out now, in the midsts of a global pandemic. In short: Are they missing out on peer networking?

Let me be open and say that i’m an introvert. i’ve trained myself to be sociable and can present as extrovert when needed, but it’s draining and not really my happy place. That said, i’ve still built up reasonably good relationships with folks i’ve worked with. i’m sure that some dude in a pressed white shirt and lavalier mic would proclaim this as “Networking”, but it’s something that i’ve kinda fostered and benefited from. A good many of those are with folks i’ve not directly worked with on a project, but have been folks who’ve i’ve had parallels with. i may have met them at a meeting, or in a few cases, at an offsite. Maybe it’s been one of those “Fellows in Arms” where we’ve all done some terrible group improvement class being directed by a dude in a pressed white shirt and lavalier mic.

With a year of “social distancing” and zoom meetings, that’s one less year of building the sort of work network that’s going to be critical to getting better positions, or be a lifeline when the layoff axes start falling. What’s worse is that video meetings are tiring and terrible as is, so the thought of doing them outside of work isn’t really going to be super appealing. Nor are junior folk going to see how beneficial they can be from more senior folk dragging them off to some semi-casual meet-up.

Plus, conferences and big get-togethers are probably not going to be happening for years to come. Sure, it was funny how you’d catch Con-Flu after a meet-up, but that didn’t carry the risk of killing you or doing serious, long lasting bodily harm. i’m going to guess that it’s going to be a while before insurance companies reduce the liability costs for those.

Humans, even the more anti-social of us, are social creatures. We think in tribes and communities.

If you’re a junior person, don’t neglect this. Reach out to mentors and peers to find and establish networks.

If you’re a senior person, watch out for the junior folks. Maybe introduce them to some of your larger nets the way you would at a conference.

Eventually the pandemic will go away, let’s make sure the damage done isn’t worse than it already is.

:: Chaos and Kindness

There are two completely different events that have happened in the last week that i need to think about. i tend to find that i think most when i am on a keyboard, so yay you ineffable void and ad bot now reading this, you get more words!

1) Mozilla’s Layoffs.
social media love
The company i work for announced layoffs for about 70 out of 1000 employees. The folks were chosen by project and role, that part is normal. What’s not normal was something i don’t think i’ve ever seen another company do. The employees were not treated like modern lepers and tossed out the door.

Instead, they were told that they were going to be laid off, but still had access to most of the things they needed. This included company mail, internal Slack channels, resources, etc. Folks inside the company rallied to support them. Spreadsheets were created that had employee info and prospective or recommended hires from folks networks. Social Media networks hosted “#MozillaLifeboat” to help get folks on their feet fast, and many very positive words were said in praise of those who were let go.

The folks who we let go were treated like humans. There was an all hands meeting held a couple of days after the layoffs occurred. The folks laid off were encouraged to attend, ask really hard questions, and were given good answers.

Ask yourself, “Would your company have done that? Could they have done that?”

Granted, mozilla works pretty hard on not hiring sociopaths and jerks, so it’s just not really the culture to be terrible to each other. Still, i’ve been through five rounds of layoffs, and had never seen that level of trust.

As remarkably smooth that incredibly disruptive and painful experience was, it did absolutely drive home a point i’ve been thinking for years: You need to be most loyal to the friends and colleagues you meet in your career than to anywhere you happen to work. Any employer that demands faithfulness solely to them is a huge risk to your professional and personal life. Your friends are who will help you, your employer is not. If you work for somewhere you can’t get that, it’s a HUGE red flag. The money might be good, but the risk is tremendous. i can say with first hand knowledge that getting paid well at a place that doesn’t respect you as a person eats at you in subtle ways.

A side product is that you remember that you’re dealing with people, and as such, folks are making it up as they go. Folks want you to believe that there’s a plan and direction, but quite often, there’s not. More often than not, there’s just a rough guess and a general feeling dressed up in powerpoint slides and bold rhetoric. Again, unless you’ve got sociopaths at the helm, layoffs hurt the folks making the decisions about who stays and who goes. Even if they are sociopaths, the company is giving up the money invested in the person and whatever income that person could have brought in.

(Oh, and if you’re ever working somewhere and see absolutely no sign of remorse or regret when an executive talks about layoffs, leave. i’m talking about actual regret, not “Sorry to see those folks go :sad face emoji: it’s terrible. Anyway, who else here is excited to see the Project Foo we’re launching!? [loud, upbeat techno music]”. Yeah, after that, spend the rest of the day polishing up the resume and sending notes to your network about potential leads.)

2) Actix drama

i’ll preface to say that i don’t know all the details about the drama around actix-web. As i understand, there were some concerns around coding practices, a single maintainer, and some folks who may have been jerks. Coding practice discussions are part of any open source projects, single maintainers are concerning for anything other than a small package that’s just starting, and half of the world are jerks.

What happened was that the project maintainer pulled the library code off of github and announced he was done with open source. Honestly, that’s good, because i believe he didn’t know what open source really was.

Let me diverge a bit here.

Open source is about trust.

When you decide to use a package, you are extending trust that:

  • The program/library/package works.
  • It will continue to do so.

Bug fixes, improvements, documentation, etc are also part of that, but kinda fit into the list above. Open source can sometimes be called “Free as in puppy” in that you might be getting into a lot more than you expected.

It’s very rare that the trust is broken. There are ways for a package maintainer to step away from a given package. They could ask a larger group to take over. They could pass it on to someone else. They could “archive” the package and let someone else fork it into a new version. Almost never does anyone just yank their code down in the same way that you almost never see an argument end with someone throwing a temper tantrum. It’s sad because while the author may have been a talented engineer, i can no longer trust anything that they produce.

Would things have been different if folks were not jerks? Probably. Likewise, i think folks were presuming a level of emotional maturity that may not have been present. i don’t fault the author for his actions, even though i’m deeply impacted by them. i’ll survive, reassess and move on. i’m saddened by them, but i look forward to the growth that i hope he gets to experience.

So, how do these things both relate?

In essence, it’s about people. It’s about remembering that at the end of the day, we’re all real, breathing, mentally weird beings and not just clever bags of thinking meat. Sure, there are some openly hostile folk out there, and there are trolls, dirtbags, grifters, and fools, but those tend to be the painful exceptions, rather than the rules.

As Michelle McNamara often said, “It’s chaos, be kind“.

:: A Few Thoughts about the Star Wars

Ok, let me get a few things out there.

1) i have not seen the final Star Wars movie yet. From the sounds of things, i’m tempted not to, but i’ll probably watch it on some streaming service eventually.

2) i find the various uber nerdy videos talking about the details of Star Wars hilarious, whether they intend it or not. Star Wars is about as far from hard science fiction as the Lord of the Rings. And i’m about to go off on one aspect of it just like those uber nerds.

3) i’ve been watching Star Wars since i sat in on the first one in a mostly empty theater on release day, when Han shot first and you could see the matts on the TIE fighter flybys.

Ok, so Star Wars is pretty much about one family. One really screwed up family, but one family, the Skywalkers. Since The Force is a thing in this universe, and has been for quite some time, it’s reasonably safe to presume that there was at least one other family out there. Otherwise with the various alternate species that are also Jedi or Sith, someone back when got James T. Kirk freaky.

As i understand the last movie’s major plot point (oh, yeah, spoilers, i guess) one of the main characters turns out to be from one of those companion families of Force folk.

We learn in the early movies that being able to lift spaceships out of swamps or become a walking bug zapper is a hereditary trait. It’s a biological component called midiclorians or something. That’s kind of the equivalent of living in a world where folks with red hair can fly (not dye jobs either, gotta be born a proper ginger).

That’s awesome and all, except that during that same time, a couple of the big time Forcey folk decided that all the lesser Forcey folk should instead focus on Forcing daisies up out of the ground. The whole “Special Order 66” or 69, or 72 with chicken, or whatever. So, we’re talking a pretty successful level of genocide against a bunch of Force users/sensitives/etc. Pretty darn horrific, if you ask me, but hey, they’re space Nazis, so genocide is kind of their thing.

What’s more, with the death of all the other Jedi/Sith over the arc of eight movies, essentially you’ve just reduced the pool of high power folk chock full of midiwhatevers to a breeding pool of two.

Now, just think about what that means if you actually pay attention to things like biology. There are not a whole lot of populations that survive from just two individuals. Hell, a species is considered “endangered” at below a population of one thousand.

So, what does this mean for the future?

Get ready for a few generations of Space Wizard Inbreds. Yep, Bill-Bob-Skywalker using the force to play banjo on some porch on Degobah thinking that sarlac’s sure got a pretty mouth. And yeah, you thought Luke and Leia kissing was creepy, just wait ’til you start thinking about how the Jedi/Sith repopulate.

Oh, yeah, and don’t forget that they can wield superhuman powers.

Thank God they’re in a galaxy far, far away. i don’t want them doing donuts in a rebuilt X Wing (with mud flaps) while orbiting Uranus.

:: 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.

:: Linux Walkabout with a Chromebook

For the past few years, i’ve been using a chromebook as my “walk-about”. i used to have a full laptop with semi-ridiculous specs that weight close to 9 or 10 pounds because, that made the most amount of sense, but we live in the modern era and there’s no reason to do that.

So, why a Chromebook?

99% of the work i do is remote. i log into one or more servers, write code using VIM or something similar, do the compile remotely, and bring up remotely served web pages to see the results. Generally, i don’t need a beefy box to compile up firefox every hour or so. i can get away with a fairly whimpy machine that just needs to runs ssh and a browser. Plus, if i destroy or lose the machine, i’m sad, but not $3,000 sad.

Chromebooks kind of fit that niche nicely. Yeah, i could also use an apple product, but those tend to be way overpriced, and personally, i don’t have a whole lot of positive feelings toward apple. (If you do, great. i don’t. i’m fine showing you where on the doll the bad computer manufacturer touched me.)

As an added bonus, Chromebooks are linux machines at heart. This means that it’s not TOO hard to get things rolling in a pretty usable way.

Picking Hardware

A chromebook is a chromebook, right? These things are all the same, right?

Well, no. Turns out that there are some remarkable differences in build quality, performance, and usability among each of these. HPs, for example, tend to be fairly durable, but they’re also bigger and slower. Asus tend to look fantastic, but i’ve had mixed luck with processing speed and heat generation. Lenovos are also good, but tend to lean more toward the “overkill” side of things making them pricier and bulkier than i prefer. Honestly, if you can go somewhere and do a “hands on check” for a system, it’s worth it. This is a tool, and like a good tool, you can’t always tell everything you need from a static beauty shot and some sales text.

i have a side thing that pays me about $100 a month. i put that extra cash into an account i use for gadgets, phones and stuff like that, so that kinda drives the price i feel comfortable with. Generally, i shoot for around $500. The latest is more in line with what i paid for my cellphone, so it hurt a bit more, but i figure i’ll get a few years out of it at the very least as well.

As for what brand, i’m not going to say “Use an Acer!” just because those are the boxes that i’ve had the best luck with, but i will provide the following criteria i use when picking a box:


  1. x86 base – this is more important later, but if you’re planning on running Linux, there are FAR more things compiled for x86 architecture than ARM. x86 can cost more, but honestly, it’s worth it unless you’re never offline or at the wrong end of a crap connection.
  2. USB C charging – Again, we live in a modern era. Chances are you’re phone is USB C (or can talk it), and getting a universal adapter means less crap in the carry on. i’ve gotten a 65w USB charger that i’ve used across several chromebooks and it travels great.

That’s really it. The rest are the optional, bonus bits:

  1. Multiple USB C ports – Because you might want to do more than just charge.
  2. Micro SD slot – Extra storage FTW!
  3. USB A port – It’s the universal standard for stuff like plug in keyboards and drives. Bonus if it’s USB3.
  4. Greater than 1440 vertical resolution – This is a bit esoteric, but i am a sucker for being able to put the max amount of text up on the screen, and to do that i need very high resolution. Resolution tends to vary, but the real base is the vertical, and even at 4:6 horizontal is going to beat vertical, so i use that to judge machines.
  5. 360° hinge – When i use an external keyboard, it can be nice to fold away the main one. It’s also nice when you’re watching movies on airplanes.
  6. Illuminated keyboard – Surprisingly useful at night.

The machine i currently use has all of these, and a pen too which i’ve used maybe once. Still, kinda nice.

The two flavors of Linux

i’ll note that Kenn White has a great article about using a low end chromebook without doing a lot extra to it. Sadly, his needs are not quite my own.

One of the needs i have is to run remote programs off of my X-Windows workstation. This is a bit more involved than just running VNC, but is far more useful. To do that, means i have to have locally running linux that can act as an X client. Previously, that meant rooting the box and installing Crouton, which runs linux in it’s own VM with it’s own display. Newer versions of ChromeOS support a “Linux Beta” which uses a container to run linux as an app. Both allow you to run remote X applications.


To put it bluntly, Crouton is a hack. It’s an utterly magnificent hack, but it does require you putting your chromebook in “dev” mode which disables pretty much all the security that chromebooks are famous for. Plus, everytime you reboot you get a super scary message and loud beeping warning you that you’re in Dev mode and to hit the space bar to wipe everything clean. You press ^D to continue. Keep that in mind if you’ve got small kids who like to play with your computers.

That said, installing and using crouton is pretty trivial (albeit, getting a window manager of choice running is as difficult as as it is on any other system), and there’s no denying that once you’ve switched to the Linux side, you’re running full on Linux. You get access to the chromebook drive side (kind of have to dig for it, but it’s there), and if you run an additional plugin like Xiwi, you don’t even have to switch modes to use all the Linux goodness. You even have full access to all the devices (including USB) with no trickery required.

All that said, since it’s a magnificent hack, it’s not exactly “official” and there are bits of it that can be slow. For what it’s worth, if you’re running on an ARM box, i’d actually recommend this approach, even though it requires more CPU. Partly for the reason that it’s a bit more stable.

* Full on Linux – with all the features and quirks
* Survives “sleep” cycles
* Full access to devices

* Full on Linux – with all the features and quirks
* CPU Intensive (no GPU/hardware acceleration)
* Full access to devices (like USB)
* Requires running Chromebook in “dev” mode with the constant threat of a system wipe.


Newer versions of ChromeOS introduced the “Linux (beta)” feature. This runs linux in a sandboxed container. (In theory, you could run other similar containers, but you probably won’t.) The container has access to the main ChromeOS screen, and for all intents and purposes, apps run that way show up as apps in the task bar.

You don’t get a program manager by default for linux apps, but you can easily install something like Firefox Nightly for Linux and run that without a hitch. It depends on what chip you’re running but i’ve got 64-bit x86 linux so i can pretty much natively run anything that draws to the screen.

It’s not all sunshine and unicorns, though. The linux app will sometimes hard hang the box during a light ‘sleep’. In addition, Chromebooks don’t have a ‘hibernate’ so they gleefully kill the CPU (and the linux app) if left alone too long.

* Full linux with seamlessly integrated window display.
* Cut & Paste works like expected.
* Supported, and generally getting better.

* No hibernation here, only death.
* Hangs on sleep or straight up crashes when running out of memory.
* No window manager finesse or app manager control, your CLI is your friend.
* No full linux access to USB (devices go through ChromeOS, so your Yubikey won’t work quite right with linux apps.)
* Limited drive access to ChromeOS.

Final notes

Is this going to be perfect? Hell no. Some things are going to suck or be annoying. Then again, that’s a universal constant, so we continue on as a species. If your needs are like mine, it’ll be just peachy.

If you like, nothing stops you from running either Crostini or Crouton, getting annoyed, factory resetting and switching to the other install. It’s trivial to back up important stuff with either system.

Also, yeah, chromebooks have a known problem with bluetooth audio devices failing to stay connected. They’re reportedly working on a fix. For now, it’s an excuse to carry the audio cable for your headset in your carry bag.

Good luck, and i’d be interested in hearing what you think.

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

Powered by WordPress
Hosted on Dreamhost.