Building Doc Brown’s Mind Reading Helmet


Let’s make this!

I did it for Halloween this year and I think it came out pretty well!

I’m not the first person on the internet to have had this idea!

While planning and researching the project, I was inspired by this dude, this lady, and this lady.  All of their efforts came out great, despite wildly varying materials and methods.  You’ll see that my approach borrowed methods from each of them!

While a lot of detail was given in those links, sourcing some of the parts was a challenge.  I’m going to try to document here as much of my process as I’m able.  You can follow these directions exactly, or you can sort of use it as a base to build on.  While I didn’t remember to photograph every step of the process, I can at least talk you through all of it!

If you’re looking for the ultimate in reference material, you can check out photos of the actual prop taken just before it was sold at auction in 2016 for $70,000.  Keep in mind that when it went to auction it was in a complete state of disrepair.  Several pieces (including the helmet) were broken or missing, so you can’t put too much faith in the provided measurements (21.5″ x 18.25″ x 11.25″) …but this is your best look at the genuine article!


1 Pro-Tec Classic Skate Helmet, Matte Black
1 Roll Silver Duck Mirror tape, 0.7″ x 5yd
13 Woodpeckers Wooden Craft Toy Treaded Wheels (2-3/4″ wide x 3/4″ thick)
13 2″ PVC couplings
1 24″ x 48″ x 0.118″ sheet of Sintra (or any generic “expanded PVC sheet”) in any color
13 1″ diameter clear lucite rods, cut to 3″ long (purchased from ebay user antori_pancco)
13 1/2″ diameter clear lucite rods, cut to 3″ long (purchased from ebay user antori_pancco)
1 1″ 6ft foam self-seal pipe insulation
1 3yd roll black 12 gauge aluminum “jewelry” wire
3 rolls 20 gauge, 6 yard red craft wire
1 wire jig kit
1 3/16″ thick foam board, maybe 12×12″?  Just get it at Michaels or Hobby Lobby.
1 1.5oz tube of SCIGRIP 16 Acrylic Cement
2 2oz tubes of E6000 Industrial Strength Adhesive, clear
1 can Rust-Olum Metallic Spray Paint, Silver
13 5mm Amber LEDs, (2V 20mA)
3 10 ohm resistors 1/4w
1 390 ohm resistor 1/2w
1 25ft roll 16 gauge stranded red wire
1 25ft roll 16 gauge stranded black wire
1 wire stripping tool
2 small wire nuts
1 9V battery case with on/off switch
1 9V battery
1 pack of glue syringes and needles
A 1/2″ drill bit and drill
4 6″ medium trigger clamps (these are essential!)
1 utility knife
1 cheap soldering iron, solder
1 cheap mini glue gun
1 roll of shipping tape
1 Satin Robe as close to screen accurate as you can find
1 white “crazy” wig
Pink dress shirt, black slacks, gray/pink tie
A pair of crazy eyes. I was lucky enough to be born with some.


We’re building a helmet with stuff on it.  That’s the gist.

We’ve got to build 13 individual “posts” and glue them to the helmet.  We’ve also got to build 28 individual connecting pieces that look a bit like flying buttresses to connect the posts.  Finally, we’ve got to wire the whole thing up with lights.

This is not a weekend project.  This is a weeks-long project.  The primary adhesive we’re using takes a full 24 hours to set, so be prepared to do just a little work each day.

Helmet Prep

The Pro-Tec Classic Skate Helmet was a great choice.  It’s matte black and will be nearly invisible once we’ve attached everything.  Apparently they run large – I was able to fit into a medium pretty easily, and I always thought I had a big head!

Take the roll of silver tape and attach three long strips to the helmet. One strip will go around the circumference, one goes from front to back, and one will go from left to right.  Use a fabric tape measure (if you’ve got one) to get the “X” on the top as close to equidistant as you can from the circumference strip.  Finding the “true” center is really important here, so do your best to get it right.

I first tried to do this using real metal!  I started cutting a thin sheet of metal with a jig saw, and it was a complete mess.  Metal shavings went flying everywhere, and six inches into my first cut I was like “Ok this is dumb.  Why am I even doing this?”  I chucked the metal in the trash and never looked back.  There is no metal in this build.

Working with Acrylic

I found a guy on ebay selling clear acrylic rods and he was able to custom-cut them to 3″ lengths for me before shipping.  You may also be able to find these at a “plastic store” which is apparently a thing.  Google for one in your area and be amazed – they exist.

You should have 26 rods 3″ long.  13 should have a diameter of 1/2″ and the other 13 should be 1″.

What we need to do is attach one piece of each size together, end to end.  We’re going to use “SCIGRIP 16” adhesive.  This isn’t just glue.  This is a solvent that effectively causes two pieces of plastic to melt into each other and solidify into one piece.  It’s also really nasty stuff that you KNOW is giving you cancer once you get even a small whiff of it, so make sure to do this in a well-ventilated area.

Apply a small dot of the SCIGRIP 16 to the end of a 1/2″ rod, press it into the center of a 1″ rod, and clamp it together overnight.

Having a four-pack of clamps makes this go a little faster.

Once you’ve finished 13 of these you can throw away the adhesive – you won’t need it again.

Post Bases

The original prop used wooden dowels wrapped in gray wire at the base of the rods, but that seemed like a crapload of work.  I cheated and found a shortcut.

These wooden toy wheels are mostly perfect (they match the diameter of the PVC couplings), but the holes are just a little too small (3/8″) for our lucite rods (1/2″) to fit into.

Go to town on them with a 1/2″ drill bit to make the hole just a little bit bigger.  Here’s the before and after.

Now it’s time to get these guys painted!  Put them in a box or something that will control any overspray.

I used a 1/2″ wooden dowel here to pick up and manipulate a wheel with one hand while my other hand sprayed paint all over it.  I didn’t use primer.  Note that you really only need to get full paint coverage on the outer edges and the flat face of the wheel.  The inner part (where the dowel is here) won’t be visible.

Once your wheels have dried, take a black Sharpie and run it through the grooves to give the appearance of coiled wire (from a distance, anyway)!

Attach The Bases to the Rods

Take three quarters (coins!) and stack them neatly on a table.

Place a bead of E6000 along the entire inside of the hole in the wheels that you previously enlarged.

Now place the wheel on top of the stack of quarters.  The flat side of the wheel should be facing UP, and the quarters should be invisible, completely covered by the wheel.

Insert the lucite rod into this hole.  It should stop when it hits the coins.  Get it as close to “straight up and down” as possible and let it dry overnight.  You can add some more E6000 to the base of the rod where it meets the wood once inserted if you think it’s necessary (I did).

The coins act as a temporary spacer while drying so that the rod doesn’t go too far down and hit the table.  Because we’ll be attaching this to a curved surface (the helmet) we don’t want the rod to ever touch the helmet – we only want the wheel to do so for maximum adhesion/strength.  The coins ensure that the rod will dry in a position where it will never come into contact with the helmet.

I didn’t use the coins myself.  In fact, I wasn’t thinking about this particular detail at all.  I ended up having to use a Dremel to shave off part of the rods to fix my screwup.  Learn from me – use coins.

Coupling Prep

Now it’s time to paint the couplings.  This is a two-part/two-day process.

I first hung one on a coat hanger and sprayed the tube all over (again, no primer).  The coat hanger trick is a great way to get full coverage without getting your hands all gross.  At this point your goal is to spray the entire outside, one of the edges, and some of the inside.

Let that dry overnight.

The next day come in and flip them all over.

You’ll now have to spray paint the other edge and as much of the inside as you can.  The inside will mainly not be visible, so it’s not the end of the world if you can’t get it all.

Once everything is dry we’re going to build four spacers into the interior of the coupler.  In this case I used foam board that was 3/16″ thick, but could have gone thicker.  Maybe 4 or 5/16″?  I cut 1cm squares out of the foam board, attached each with a dot of E6000 glue, and let them sit overnight.

Wire Coils

Using only your hands, take the red art wire and begin to wrap it around the base of the lucite rods.

Once you’ve got it wrapped up the rod about an inch or so, snip it off of the roll.  (For reference, I was able to get about 8 rods wrapped with each 6 yard coil of wire.)

It will now expand like a spring and look terrible.  So what you’ll want to do is push it down and clamp it so that it looks tightly coiled like this:

Now that you’ve got it right where you want it, swoop in with a small blob of E6000 adhesive right where you snipped the wire.  You do *not* need to put any glue on the end of the coil where it meets the base.

Let that sit overnight, clamped and drying.

Filling the Couplings

If you’ve got a miter box, you can make very easy and clean cuts in the foam pipe insulation in just a stroke or two, however you can probably do it with just a pair of really sharp large scissors.

Cut the foam pieces to be just a tiny bit shorter than the pieces of coupling.  (They shouldn’t extend outside beyond the PVC at all.)

Now wrap the top of each post with the insulation, pulling off the strips to expose the adhesive ends.  Once those are sealed, you should be able to slide them up and down the rods a bit – they won’t be glued to the rods – friction will hold them in.

I had originally planned to use expanding insulation spray foam sealant to attach these rods to the PVC couplers, but that turned out to be a terrible idea.  Here’s a photo of a wooden mockup I used in an early test.

You can pretty clearly see that even with a long applicator tip, this foam is completely unsuited for such a precise application.  That’s how I ended up with the foam board spacers solution.

Next, stand your couplings on their ends and insert your foam insulation/rod combos into each one from above.

Fill a glue syringe with E6000, attach the longest applicator you can, and insert it between each foam board spacer and black insulating foam.  Squeeze a dot or two between each one, make sure your rods are as on-center as possible, and let them all dry overnight.

In the morning you should be able to place one hand on the wood end and one hand on the PVC end, and slide them together/apart without breaking anything.

The ideal end-to-end length we’re going for here is a uniform 7″ across all rods.

Wire Stars

At the tips of the couplers we’re going to attach some black wire “stars” that will add some visual variety as well as give our LEDs something to adhere to.  Yes, Doc’s helmet actually had these.  No, I never noticed either.

Bust out the wire jig kit and put eight pegs in these holes:

Now wrap your black jewelry wire around the pegs, mostly like this…You’ll see one corner popped out here when I took the photo, but I made sure to fix that.

Once you’ve got this shape completed, snip the wire at the end, and close the shape with a dot of hot glue.

I was able to make 15 of these with a single 3 yard coil of wire.  I think.  Maybe I had two coils?  Can’t remember.  Here they are, pre-glue.

Attaching The Things

Now we’re done with a whole lot of prep work and it’s time to start actually connecting things to the helmet!

Apply a thick bead of E6000 all the way around the wooden base of your post – one big circle.  Find the top intersection of silver tape on your helmet, and very carefully push it into place.

Because E6000 isn’t an instant drying glue, you’re going to have to hold this in place for hours.  Clamps don’t really work here, so I used two long pieces of clear shipping tape, pulled very tightly across the wooden base.

You’ll notice that I also put paper towels between the tape and the painted wood.  I was afraid that the tape would take the paint off a day later when it was removed.  This solution allows it to keep pressure on the wood without any risk of damage and it worked perfectly.

I would strongly recommend that you prepare your two strips of tape (with paper towels pre-attached) *before* you ever try to attach the adhesive.  Keep them within arm’s reach and you’ll be able to get this done within minimal trouble.

At this point you’re just sort of going through the motions.  Use clamps when you can, tape when you can’t, and spend a couple days waiting for various parts to dry.

Your placement of these posts is crucial.  Always try to get the wooden wheels to be as flat as possible against the helmet, and always make sure you’re as close to on-center on your silver tape strips as you can manage.

You’re basically building up three “levels” of rods here.

There are eight that go along the lowest level, all radiating outward from the metal tape ring running along the circumference.

There are four that form a type of crown just one layer above that.

There is one that sticks straight up from the center, and is the first one we attached.

Support Arms

You’re now going to cut pieces of what’s called an “expanded PVC sheet”, or basically a flat sheet of PVC plastic.  It goes by many different brand names: Sintra, Komatex, Celtec, and probably others.  As far as I can tell, these are basically all the same product.

Confusingly, expanded PVC isn’t sold at Home Depot or at craft stores.  In fact, it’s remarkably difficult to find at retail at all.  I ended up paying too much for far more than I needed with a seller on Amazon (Prime shipping not available, of course).  Cosplayers use it to build nerd armor and other things, so it’s kind of strange that you can’t just pick it up at Michael’s or Hobby Lobby or wherever.  Anyway.  Internet to the rescue.

I used Sintra that was 0.118″ thick.  This is supposed to be approximately 3mm, but when I measured it looked a whole lot like 4mm to my eyes.  I could have maybe gone down in thickness to whatever the next size was.

You’ll need to cut 28 individual support arms out of Sintra, all of which are completely custom sized to fit the spaces between your PVC rods.  This will be the hardest, longest part of the entire operation.  Your arm will twinge all the way up to your shoulder.  Your fingers will hurt for days.  Just be prepared.

You can use a fabric ruler or a compass to measure the distance between the PVC couplings.  Take one measurement at the widest end and one at the narrowest end, and cut your Sintra to match.  Do this 28 times.

Start with a 2 1/2″ strip of Sintra.  All of your arms will be this wide.

To cut Sintra, take a utility knife and lightly score it in a straight line.  If you have a metal ruler this will help you to stay straight, but you may find that it’s pretty easy to follow a pencil line with just a knife and your eyes alone – the material holds the blade pretty well in place.

Repeat the cut, pushing a little deeper along the first score line.  It may take you as many as 10 times (or more!) to cut all the way through.  This takes forever and it sucks.  Make sure to keep a sheet of cardboard (or two) underneath so you don’t ruin your work table.

Once your trapezoid is cut, hold it between the two rods you want to connect to check for proper fit/size.  You’ll almost never get it right on the first try, and you’ll need to make small cuts here and there to make it fit.

As you finish each one, make sure you write its location and its orientation on each piece (and on a piece of paper!) so you’ll know where to attach them later.

At the end of the process, you’ll have this!

Aren’t they beautiful?  At this point I had about 30% of feeling remaining in my pointer finger.  Pressing so long and hard on the utility knife had done some internal damage that lasted about three days.

BUT WAIT.  We’re not even close to done with these arms.

Shaping the Support Arms

We still need to take out a chunk of the support arms.  The ends are long, but the main part of the beams should be narrow.

You might think “Maaan, I’ve got a jig saw.  Why can’t I just use that?”  Well, I tried.  When you use a jigsaw on Sintra, PVC flies everywhere in a fine mist, and larger chunks that act like mini styrofoam packing peanuts get all over the place.

Jig saws are also pretty big, and it’s really hard to clamp pieces this small to make effective cuts.  So it’s back to the utility knife!  Sorry, buddy.  The good news is that the utility knife method allows you to get remarkably straight cuts just about every time.

For the horizontal line, measure 1″ down from the long edge.  Along the shorter edge, mark 3/4″ in from either side.  Eyeball it and draw two lines that roughly match the angle of the side edges.

Now you’ll need to make a C-shaped cut.  In the movie these internal cuts are actually curved, not hard angles.  I tried and just couldn’t make that work.  It was too hard to cut this stuff with the tools that I had.  And guess what?  Nobody cares.  Nobody who sees this will know or care.  Get over yourself.

After hours of more pain you’ll end up with these!

Lay your pieces flat, label sides down, and spray ’em.

Let them dry, then flip them over.

This is the last time you’ll see your labels, so before you paint the other side make sure to take a photo.  You’ll refer back to that photo when attaching these.

When spraying, don’t forget to make certain the thin outer edges are covered in paint as well.

Connecting the Arms

Well, here we are.  The time has come to connect the support arms to the rods.

My thinking at this point was that the support arms were decorative, not structural, so E6000 was probably overkill and more trouble than it was worth for attaching these.

Soooo for this part I used a hot glue gun.  It sets up in like 10 seconds!

As it happens, hot glue would turn out to be a terrible choice for this step.  All I had to do was hug someone a little too closely or walk too near a wall and these arms would pop right off with just the slightest pressure.

I’d recommend using a small dot of hot glue on both ends to hold these in place initially, and then once that’s dried run a full bead of E6000 down the entire length of the seams.

Be conservative with E6000 – if you use too much or it starts to drip, it will strip off the silver spray paint.  It’s very strong glue and you don’t need a lot.  Use a syringe if you want more control over where it goes.

LED Array

To keep your LEDs burning bright and efficiently all night long, you’ll need to wire them in an array.  This cool calculator will print out a wiring diagram for you to refer back to.

The values you need to enter (based on the parts list above) are:
Source Voltage: 9 (the battery is 9v)
Diode forward voltage: 2.2 (even though we ordered 2V LEDs, the package says “2.0-2.2V”)
Diode forward current (mA): 20
Number of LEDs in your array: 13

Here’s a screenshot of the wiring diagram I used in case the calculator goes down some day:

Three basic electronics things to know: Polarity matters, the longer side of the LED is the positive side, and resistors don’t have a +/- side.

I used a breadboard to test this out before I did anything (twice) and it worked fine!  I ran it overnight for 12 hours, and in the morning it was only a little bit dimmer than when I had started.  Conclusion- You will definitely not need to pack a spare battery for whatever Halloween party you’re going to.

The Stars and the Lights

Use one small dot of hot glue to attach one corner of the black wire stars to the end of your PVC couplers.  Use E6000 on the other three corners.  Let that dry overnight.

Now learn how to solder.  Anyone can do this part and it doesn’t matter how good or bad it looks.  Cut wires long enough to reach to the center of your couplers after looping around a wing one time.  Alternate between black and red colors.  Get creative with your wire placement here and just make it look nuts.

Once you’ve got good lengths, strip the ends of the wires.  I strongly recommend a tool like the wire stripper in the parts list above.  It will strip any wire in half a second with just one squeeze, saving you a lot of time and energy.

Now bust out the soldering iron and start connecting everything.  You’ll have four positive lines and four negative lines, and you should work to make certain that those ends all end up in the same general part of the helmet so that you can connect them together.

Use the wiring diagram!

Group up the four ends of the resistors and insert them into a wire nut with the black wire from the 9V battery case.  Twist them tight and wrap it up with black electrical tape.  Do the same with the remaining four wires and the red wire from the battery.  Flick the power switch on.  Are all the lights on?  Great!  Are they not?  Check your wiring.

Using E6000, attach the LEDs to the black wire stars all over the thing.  Use a little electrical tape to hold them in place temporarily while they dry.  Try to only put the tape on the wire stars if you can – it will remove a small bit of the silver spray paint if it touches it.

Attach the battery case to the helmet with hot glue somewhere near the back in a spot where you can easily reach the power switch.

The helmet is now *almost* done.

The Wig

The white wig I had was too big to fit under the helmet.  It was just too big…period.

I mean really.

I ended up cutting a narrow strip of hair off the back/bottom edge of the wig and hot-gluing it to the interior plastic edge of the helmet.  I trimmed it with scissors lightly to make it look a little crazy, and also match the length of Doc Brown’s 1955 hair, which was really just about an inch or two below his ears.

Note that his hair is slightly yellow in 1955.  All the yellow wigs I found were like Big Bird yellow and would have looked ridiculous, so I just played it safe and stuck with white.

Ok, NOW the helmet is done.  But the costume isn’t.


For the bandage I cut a 2″x1″ square of gauze, marked it up with red Sharpie, and attached it with strips of 0.5″ wide white bandage tape.

The robe was close-ish to Doc’s but was the best I could find.

Any pink dress shirt will do, unbuttoned at the collar.

The pattern on Doc’s tie is very specific and impossible to match, but any silver or pink tie with a diagonal element should be fine.  Doc prefers the very tacky and lazy half-windsor knot, which maybe was the style in 1955.

Any black slacks and shoes will do because those are never really shown very well in the film.

If you want to show people what you drew when you hit your head on the toilet, then this dude has got you covered.

The Final Product

Thanks for playing!  Post a photo in the comments if you end up making this!

The autonomous robot weeder from ecoRobotix

ecoRobotix is a Swiss startup that’s built something truly amazing.

This autonomous solar-powered robot rolls through fields of crops, inspecting every patch of growth on the ground.  If it spots any weeds, it applies a targeted microdose of herbicides right where it’s needed.

The benefits are obvious – less “non-food” finding its way into our food supply, higher yield for farmers, and lower prices at the grocery store.

This is such a simple idea and a great application of technology.  I love it.

Source: The autonomous robot weeder from Ecorobotix

How to be Cinnabon Gene

This year for Halloween I was Gene. Gene manages a Cinnabon in Omaha. If you watch Better Call Saul, you’d be familiar.

It was a relatively cheap costume to throw together, but sourcing the gear to make it happen – and getting the colors right – was a challenge.

I used three reference photos to figure how to to make this happen.

Here’s a good detail shot of his glasses and facial hair:
Gene in B&W

Gene’s on-screen appearances have always been in black and white, so getting the colors right was tricky. I found a rare behind-the scenes photo of him in color:
Cinnabon Gene in color

That gets you close, but he’s missing an apron and visor.

Here’s a clear Photoshop job from an AMC promotion (the shirt and apron are missing logos) but it at least reveals that brown is the apron and visor color, and his glasses have a yellow tint:
Gene contest

My first stop for sourcing all this stuff was, of course, Cinnabon. They were remarkably unhelpful.

Cinnabon’s social media team, email team, and local franchisees were unwilling and/or unable to sell me any clothing that contained a Cinnabon logo.

In an act of desperation I even reached out to Cinnabon’s VP of Global Marketing on LinkedIn. She completely ignored me. No one was willing to sell me any Cinnabon-branded stuff, so I had to make it myself.

Luckily, it wasn’t that hard…

The Gear

Avery InkJet Iron-On Dark T-Shirt Transfers, White: You use an inkjet printer to print Cinnabon logos onto these special sheets of paper, and then use a hot iron to melt/glue those printouts to fabric. They say it’s for 100% cotton or cotton/poly blend fabrics only, but I was able to make it work on a 100% polyester apron with no problem. (You’ll of course need the Cinnabon logo.) You’ll use these transfers to apply Cinnabon logos to the polo shirt, apron, and visor.

SEW UR LIFE Brown Professional Bib Apron: While it’s not labeled as such, this is a ‘butcher’ apron – one that goes down to your knees. Gene wears a brown butcher apron. It’s 100% polyester, so you’ll want to go easy with the iron so you don’t melt it or cause it to ripple.

Dealstock Plain Men Women Sport Sun Visor Adjustable Cap: Even though this visor is made of 100% acrylic, the iron-on transfers worked just fine. The trick was ironing on a curved surface. I did it against a round ceramic kitchen container that I normally use to hold flour.

Amazon Essentials Men’s Cotton Pique Polo Shirt: This inexpensive aqua/teal shirt is 100% cotton and a close-enough match to what Gene wears. This shirt has two buttons, while Gene’s has three.

Titanium Half Rim Frame: I looked everywhere for Gene’s exact model of glasses, but came up empty. The closest I could find were these frames from Zenni Optical. Luckily you can order them with custom lenses, and I did exactly that. Optical grade non-prescription lenses with “Standard Lens Tint Yellow-50%” can be yours for under $30.

Winchester Fake Moustache, Medium Brown: Ideally, you’d grow a mustache. I grew my own in two weeks, but should have given it more time. If you struggle to grow facial hair, this one should do the trick. Use spirit gum to attach it to your face.

Namebadge and button: I could have probably made these myself by slapping a sticker on top of existing pins, but I found a website that had them ready-to-go!

That’s it

Anyone who watches Better Call Saul will know who you are right away and lose their shit. Anyone who doesn’t watch the show will still love this costume and laugh as soon as they see you.

How to Extend T-Mobile’s Free Gogo wifi to a Laptop

T-Mobile users get one free hour of Gogo wifi on all flights.
If you pay a little more to upgrade to “T-Mobile One Plus” you get unlimited Gogo access.

In either case, that wifi is officially only available on your T-Mobile device. They also limit that acces to a single device per subscriber, per flight.

If you were thinking you’d be able to use your laptop without paying…you’d be wrong. The Gogo wifi gateway won’t even display the T-Mobile branding/free login option if you’re on a laptop.

If you want to get around these limitations, you’ve got two options!

Option 1:

The first option is by far the simplest, but only works if you want wifi on a single non-T-Mobile device (like a laptop) for the duration of your flight. (Note that you’re not able to switch devices mid-flight.)

All you need to do is change your browser’s User Agent. The User Agent Switcher plugin for Firefox does this nicely. I’m sure there’s good stuff out there for Chrome, too.

Plug these values into it to pretend you’re running a Google Nexus 6P:

Description: Nexus 6P
User Agent: Mozilla/5.0 (Linux; Android 7.1.2; Nexus 6P Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.132 Mobile Safari/537.36
App Code Name: Mozilla
App Name: Netscape
App Version: 5.0 (Linux; Android 7.1.2; Nexus 6P Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.132 Mobile Safari/537.36
Platform: Linux armv8l
Vendor: Google Inc.
Vendor Sub: (leave blank)

Once you’ve done this, the Gogo gateway pricing page will present you with a T-Mobile “$0.00” option. Login with your T-Mobile phone number, fill out the captcha, and you’re good to go. You can change your User Agent back to the default once you’ve logged in.

Option 2:

This option is a bit more work, but it will let you share your connection across devices. You’re authorizing your phone to use the wifi, and you then use Bluetooth tethering to share it with your laptop (or tablet, etc).

As of this writing, I use Android 7.1.2 and Windows 10. That’s what these instructions will cover, but the basic method should work across platforms.

One-time setup!

On your phone:
Go to Settings. Under “Wireless & networks” select “More”.
Tap “Tethering & portable hotspot”.
Ensure that Bluetooth tethering is ENABLED.
Go back to Settings. Tap “Bluetooth” to make your phone visible for pairing.

On Windows 10:
Go to Settings. (Not Control Panel).
Go to Devices.
Enable Bluetooth if it’s not already.
Click “Add Bluetooth or other device”
Click “Bluetooth”
Your phone will be found, so pair it.

Setup is complete. You shouldn’t have to do any of the above steps ever again.

Now here’s how to connect!

On Windows 10:
Open Control Panel (Not Settings).
Click “Network and Internet”, then “Network and Sharing Center”, then “Change adapter settings”.
Right-click on your wifi device to disable it. (Windows will favor wifi, and leaving this on will only send you to the Gogo gateway.)
Bluetooth should be enabled but also “Not connected” with a red X.

On your phone:
Visit the Gogo portal in your browser, and jump through whatever hoops they ask to enable your free wifi. Once you’ve confirmed you’ve got internet access on your phone, proceed!
Go to Settings. Under “Wireless & networks” select “More”.
Tap “Tethering & portable hotspot”.
Enable “Bluetooth tethering”.

On Windows 10:
A new window should pop up. If it doesn’t, go to Control Panel, “Hardware and Sound”, “Devices and Printers”.
You’ll see your phone in the list of “Devices”.
Right-click your phone, select “Connect using”, “Access point”

You’re done! Enjoy free wifi on your laptop for an hour! Or for the whole flight!

Toyota, AVCHD, and you

This missus got a new car this week. It’s a 2016 Toyota Highlander Hybrid. Pretty nice.

The rear-seat entertainment system has a Blu-ray player that’s also got an SD card slot. No more discs! Hooray! Great for kids!

It’s 2016, so you’d think you’d just be able to copy a couple of video files to an SD card, shove it in the slot, and be done. But you’d be wrong.

The SD slot in this Blu-ray player is unbelievably stupid. It doesn’t recognize mkv containers, mp4 files…nothin’. The only thing it can handle are “AVCHD videos”. In other words – dumps of Blu-ray disc images. Incredibly helpful.

Toyota (maybe Lexus too) sort of assumes that you’re a computer whiz, comfortable transcoding videos, familiar with the Blu-ray file structure, and able to author discs like it’s no big deal.

I was not any of those things when I started this process. Now I am.

After days of trial and error and burning though a half-dozen different authoring tools (Nero Video has been broken for three years BTW), I’ve found one that works.

The only bad part is that it costs money. It’s called ConvertXtoVideo, and it’s $40 (or free with a piracy discount).

Anyhoo, once you’ve got it, here’s how to use it:

Make your AVCHD settings look like this:

Enter the size of your SD card in megabytes. My card was 64GB but I went with 63000 just to be safe.

Select a theme for your menu. These microscopic thumbnails are all that you’ll get, and most of them are hideous. The “classic” theme is simple and good. Hover over the settings if you’re not sure what they do.

Give your “disc” a name and put it in the box on the right. (This will appear at the top of your on-screen menu.)

Click the first button in the toolbar to add your videos to the queue.

Select an output format from the dropdown on the bottom-right corner. I went with “AVCHD 720p (for USB key)” because full HD isn’t suuuper important on a 9″ screen. Note – this means that *all* of your videos will be upscaled (or downscaled) to 720p.

Speaking of quality, keep an eye on these gauges. They’ll tell you how much video quality you’re sacrificing every time you add another file. Keep it in the green and you should be fine.

Select individual videos and use the up/down arrows in the toolbar to order them however you’d like. This is the order in which they’ll appear in the on-screen menu.

Click the ‘Start’ button and wait a few hours.

You’ll sit through a lot of this:

Eventually you’ll be presented with a fully populated directory called “AVCHD”.

On your blank SD card, create a directory called “PRIVATE” in the root. Move the “AVCHD” directory into “PRIVATE” (not just its contents – move the whole directory).

Eject the SD card, lock it to avoid any accidental formats, and walk over to your car. You’re done, amigo.

If Google brought you here and this helped you, I’m glad. Please leave a comment to make me feel better about myself and all the time I sunk into this.


The RetroPie FAQ that I wish had existed when I started down this road

Inspired by Nintendo’s upcoming NES Classic Edition, I spent some time last week setting up a Raspberry Pi-based emulation station.


For about $100 all-in, this smaller-than-my-wallet computer plays thousands of games from the Atari 2600 all the way through the PlayStation 1/N64 era, and just about everything in-between.

I’m very happy. My kids like it too, which I never thought would happen.

Despite its claims of being “easy to use” and “wonderful”, RetroPie is definitely not those things out-of-the-box. Once you’re up and running, things are great! It’s the setup that’s the problem.

I spent a few hours tracking down solutions to quirky problems, and these were the big ones. I hope this helps somebody! I’ll be adding to this as I run into other cases of dumb stuff.

I'm getting a black border on the screen or things are disappearing off the edges!

This one seems like an easy fix! Just override the Raspberry Pi’s default overscan settings, right? They’re in /boot/config.txt.

So you set values for overscan_left, overscan_right, etc in there. That’s great. It works!

…for the command line only. Once you launch anything that uses more than text mode, you’re back to square one.

To fix:
Add in a newish, not-very-well-documented variable to /boot/config.txt: overscan_scale=1. THEN work on those overscan settings to get a perfect fit on your screen. Try new values, save, “sudo reboot“, and repeat until you’ve got it perfect.

On my Samsung, the ideal values were -9, -9, -25, -25 (LRTB) but yours could be anything!

My controller works in the Emulation Station launcher, but partially (or not at all) within emulators.
If your controller is physically connected or is Bluetooth paired (and wirelessly connected) the issue is improperly mapped joypad buttons. The good news is it’s not your fault.

Pair and connect your controller with Bluetooth from the Bluetooth menu.

Now configure its buttons within Emulation Station.

This does two things – it lets you control Emulation Station with this controller, and also sets up a default config for the Retroarch emulators (within /opt/retropie/configs/all/retroarch-joypads/), so your controller should work automatically in all of them.

Except this second part? It often screws it up pretty badly. Some controllers get set up fine, and some are all kinds of wrong. The Emulation Station setup process will assign buttons that don’t even exist on the controllers to their profiles within Retroarch emulators. What that means is that some (or none) of the buttons will work within emulators.

To fix:
open up /opt/retropie/configs/all/retroarch-joypads
Find the name of the joypad you want to fix, and edit its .cfg file. (Remember, these CFGs aren’t created until you first set them up within Emulation Station. Just pairing with Bluetooth isn’t enough.)

Every action in the cfg is assigned to a button. Every button on the controller has a number. Most or all of these numbers are probably wrong in this cfg if you’re having trouble.

To find out the correct button numbers, run
jstest /dev/input/js0
(or js1 for player 2, etc)
Tap every button and write down their values. Then control-C outta there, and put the proper ones in your cfg file.

I’ve got two controllers (from the excellent 8Bitdo) and I had to do this for both of them. Feel free to steal these configs:


input_device = “8Bitdo NES30 Pro”
input_driver = “udev”
input_up_btn = “h0up”
input_left_btn = “h0left”
input_right_btn = “h0right”
input_down_btn = “h0down”
input_select_btn = “10”
input_start_btn = “11”
input_l_y_plus_axis = “+1”
input_l_y_minus_axis = “-1”
input_l_x_plus_axis = “+0”
input_l_x_minus_axis = “-0”
input_r_y_plus_axis = “+3”
input_r_y_minus_axis = “-3”
input_r_x_plus_axis = “+2”
input_r_x_minus_axis = “-2”
input_l_btn = “6”
input_l2_btn = “8”
input_l3_btn = “13”
input_r_btn = “7”
input_r2_btn = “9”
input_r3_btn = “14”
input_a_btn = “0”
input_b_btn = “1”
input_x_btn = “3”
input_y_btn = “4”
input_enable_hotkey_btn = “10”
input_state_slot_increase_btn = “h0right”
input_state_slot_decrease_btn = “h0left”
input_save_state_btn = “7”
input_load_state_btn = “6”
input_menu_toggle_btn = “3”
input_reset_btn = “1”
input_exit_emulator_btn = “11”


input_device = “8Bitdo SNES30 GamePad”
input_driver = “udev”
input_up_axis = “-1”
input_left_axis = “-0”
input_right_axis = “+0”
input_down_axis = “+1”
input_select_btn = “10”
input_start_btn = “11”
input_l_btn = “6”
input_r_btn = “7”
input_a_btn = “0”
input_b_btn = “1”
input_x_btn = “3”
input_y_btn = “4”
input_enable_hotkey_btn = “10”
input_state_slot_increase_axis = “+0”
input_state_slot_decrease_axis = “-0”
input_save_state_btn = “7”
input_load_state_btn = “6”
input_menu_toggle_btn = “3”
input_reset_btn = “1”
input_exit_emulator_btn = “11”
My analog sticks work great in everything, but I can't get PSX to recognize them.
This one made no sense. The stick worked fine with N64 titles with no extra configuration. When it came to PlayStation titles, I’d change the RGUI controller setting to “RetroPad w/ Analog” for P1 and it made no difference. That setting doesn’t do anything at all. Don’t even bother changing it.

To fix:
Launch a PSX game. Open up the RGUI menu using your hotkey.

Go to Options / Core Options / Pad 1 Type (and/or Pad 2) / Change Digital to Analog

Games will think you’ve got an old-school, digital-only, stickless pre-1998 controller attached by default until you switch this to analog. That option is the equivalent of toggling the recessed “analog” button on a real PS1 Dual Shock controller.

A little more backstory on why this is appears here.

I have no freaking idea how to connect more than one controller.
There’s no explicit documentation on how to do this. But it’s pretty easy.

To fix:
Once you’ve configured your first controller, go into Emulation Station’s settings to configure your controls. It’ll say something like “configure second gamepad,” so hold down a button on that second gamepad to get it recognized. Go through the whole process and you’ll be all set for controlling the UI with all your controllers.

Of course once you get into an emulator you’ll probably have button issues. You’d then just need to do what we did in the last step to properly map those buttons in a .cfg file.

Atari Lynx roms won't launch!

I’d select a game, get a black screen, then be taken back to the EmulationStation Lynx menu. /tmp/runcommand.log would tell me all of my roms were invalid, and they would not boot at all. This wasn’t a BIOS issue.

I was using no-intro Lynx roms. These “clean” roms do NOT have a header, and the version of lr-handy included with the 4.0 beta would not play them because of that.

Here’s the problem – the lr-handy binary that comes with 4.0 (beta2) is way old. Newer Handy releases are able to work with “no header” roms.

To fix:

Go into the RetroPie setup script menus, and rebuild lr-handy from source. It takes a few minutes to complete. When it’s done, you’re golden.

I'm from America! I want Mega Drive to be Genesis and PC Engine to be TurboGrafx-16!
I feel your pain. In theory it’s a simple text fix within /etc/emulationstation/es_systems.cfg. Just find the ‘theme’ field where you see ‘megadrive’ and change it to ‘genesis’. Wouldn’t hurt to change the ‘fullname’ and ‘platform’ fields, too.

The problem here is that not every theme supports all systems. Some only support views for ‘megadrive’, and will only show a shitty unstyled menu if you pick something they don’t support.

To fix:
Good luck with that. Just stick with the original names.

Why are there two included scrapers? Why does it take so damned long?
Emulation Station needs two things to look its best: boxart for each game, and a ‘gamelist.xml’ full of metadata for each system. ES has a built-in-scraper, but that uses your roms’ filenames to identify them. That method can be pretty unpredictable.

It’s a better idea to use the included “Steven Selph” scraper in the Retropie textual menus, as it uses rom hashes to provide much more accurate results.

But it takes forever.

To fix:
Note that you can’t use the Selph scraper if Emulation Station is open, or its work will be overwritten. Quit from ES before scraping (If you’re logged in remotely: “killall emulationstation“) then get busy:
sudo ~/RetroPie-Setup/

The scraper will first download all your images in one big queue, and you can watch as things happen in the terminal. This takes about five minutes. Then, at the end of your queue, everything will freeze…or will appear to. For HOURS. Don’t break out of it. Let it sit and ‘do nothing’. Even though there is no visual feedback, the current system’s gamelist.xml is being generated. A recent scrape of ~120 Genesis roms took about three fucking hours, conservatively.

The only setting I’d really change from the defaults is to disable “Thumbnails Only”. When I left that enabled I ended up with a bunch of low-res blurry upscales.

I agree, this slow scraping thing sucks because it’s probably one of the first things you’ll do when you set up your RetroPie install, and during this whole time you can’t play anything. Let it run overnight.

As nice as it is to look at and use, Emulation Station seems to have been abandoned by its author with no updates in over a year. The reliance on huge, slow-to-process XML files was one of the things he had hoped to have fixed before he eventually lost interest in the project. This might get fixed someday, but for now it’s best to limit your romsets to a couple hundred, rather than a couple thousand, just to keep EmulationStation running smoothly.

I don't like my Raspberry Pi case. What's the best one you've found?
I don’t have it, but it’s clearly this one:
Mini SNES - Raspberry Pi 2/3 Case
It’s 3d printed, so you’ll have to put up with those telltale print lines, but heee-ooo! What a beaut. You can have the parts printed for about $30, but I think you then need to paint it in the correct colors.
When I select a rom, the screen goes dark and I get spit back to the menu.
Could be anything.

To fix:
Check /tmp/runcommand.log to see what happened.

Most times the log will tell you that you’ve got invalid/corrupt roms. Unzip them and they will work fine. I have no idea why.

PlayStation images in particular suffer from this. The non-libretro version of the N64 emulator can’t open zipped roms, period. There’s no clear idea as to when this will get fixed (or if anyone’s even working to fix it,) so it makes sense to invest in a large SD card for this reason alone.

If the log is totally empty, you’re probably missing the proper bios files in the bios dir.


I think that’s it. Everything else I ran into was covered in the official wiki, the forums, or on the RetroPie subreddit.

I’m kind of amazed that a $35 Raspberry Pi 3 has enough horsepower to handle PS1 and N64 games. A small-form-factor Windows HTPC that I built just two years ago (for considerably more money) can barely handle either one of those. Now’s a good time to get into this stuff!

How I Get Free TV

TV shouldn’t cost money. There’s a free and legal way to watch TV shows and it’s been around since the 40s. It’s called an antenna.

Rabbit Ears

When the US switched over to digital signals using the ATSC standard in 2008, many stations started broadcasting in HD. Most people don’t know this and it totally shocks me. Digital signals are great, too. You either get a 100% perfect signal, or you get no signal at all. There is never static.

It’s incredible just how many stations you can pick up by plugging a $10 antenna into your HDTV. If you live in a major metropolitan area you can even get by with only a tiny paper clip shoved into the antenna connector.

I was sick of paying Dish Network for programming. We’d been with them for 10+ years and while the service itself was fine, I was paying monthly fees out the ass for additional boxes and the tiers of programming that are forced upon you to watch anything decent.

Free TV programming is mandated by the government, so why was I paying ~$125 a month? It seemed dumb – like paying for vacation or music streaming services. What are you buying? You’re buying something that’s gone as soon as you stop paying for it, and all you’re left with are memories. Money down the drain!

I wanted out. I wanted to cut the cord, so when we moved houses in early 2015 I took the opportunity to cancel Dish Network and not sign up with anyone at the new place.

My goals:
• Pay a $0 recurring monthly fee for TV programming
• Find a DVR that can handle ATSC (over the air signals in the US & Canada)
• Pay a $0 recurring monthly fee for the DVR
• The DVR needed to serve every TV in the house (four of ’em, not all in daily use)
• The DVR had to be off-the shelf, because I didn’t want to fuck around with Linux when something broke. Ain’t nobody got time for that. I got kids. And a life.

After lots of searching, I found a device that does all of that. Tablo.


Tablo doesn’t connect to a TV. It’s a box that lives on your network and connects to any TV antenna. You’re then able to control it and view programming using any standard web browser – even when you’re away from home. That’s cool if you’re the kind of angry hipster nerd that doesn’t own a TV, but kind of useless for normal humans. That’s why Tablo also maintains an ecosystem of apps for streaming devices.

I bought a bunch of inexpensive Roku devices (Roku 3s and a Roku 4) and threw one on every TV in the house. They’re my cable boxes now – a one-time purchase with no recurring monthly fees – and they can do so much more than stupid ugly cable boxes.

Roku 3

I taped a flat antenna onto a never-used window and hid it behind blinds. After a typical channel scan I get something like 160 channels here in Orange County. Most are not HD, and many aren’t in english…but the ones that are bring me plenty of programming.

Mohu Leaf

Tablo itself has a $5/monthly subscription fee, but they also offer a $150 lifetime subscription option. The fees cover the cost of the program guide data which comes from a third party.

That lifetime option is the reason I went with Tablo. Without it, I don’t know if I would have picked them back in the day.

Tablo's Prime Time view

As great as Tablo is, no tech is ever 100% perfect and exactly what you want, so let’s examine…
The downsides to Tablo:

• It’s slow as shit.
Because it’s transcoding ATSC (MPEG-2) to H.264, you have to wait a few seconds for every live stream or recording to start playing. The interface is sluggish, the guide repopulates slowly every time you load it, and things are generally not fast and immediate like they are on literally any other DVR in the world.

• It inexplicably downsamples Dolby Digital 5.1 to stereo.
Why? I have no idea. They claim a firmware update can enable DD. They made that claim two years ago. Doesn’t seem to be a priority.

Despite the slowness, I’m super happy with my Tablo and would recommend it to pretty much anyone in the US or Canada. I’ve been using it for exactly one year and have saved something like $1500. Every time I turn on the TV I’m conscious of exactly how much money I’m not spending, and it’s a great feeling.

Go buy a Tablo!

The Factory, 2

(previously, part 1)

Magnus felt faint.  He gripped the doorframe for support, stumbling against his own booted feet.

“Close the door and sit,” said the woman. Magnus absently reached for the door, unable to take his eyes off the foreman’s body in front of him, his hands fumbling against air.  “Jesus, just sit down,” she barked, stomping over to close the door herself.

Magnus found his way to the chair across from the foreman’s desk and fell into it. The air smelled of iron and made his eyes water.

The woman eyed him carefully as she closed the door and began to circle around the room. She was careful to keep her feet clear of the expanding pool of blood which threatened to cover every square inch of the office floor, and even more careful to keep a healthy distance between Magnus and herself.

Magnus swallowed hard and found his voice. “What…what is this? What have you done?”

The woman had returned to her place in the shadows behind the foreman.

“Where is it?” she asked, as if he’d not spoken at all.

“You’ve killed the foreman. My god, you’ve killed…”

She didn’t let him finish. “We don’t have much time. Where is it?”

We? His eyes growing thick with tears, Magnus struggled to meet her gaze. Her pointed nose drew his focus upward and there he found them again – eyes as dark as night, betraying no emotion. The eyes of a killer.

“Where is WHAT?” he asked, his voice cracking as the words escaped louder than he’d intended. The shock was beginning to wear off and in its place Magnus was left consumed with frustration, confusion, and debilitating fear.

“The machine.”

The machine?

How would she not know?

Magnus rubbed his eyes to clarity and examined the woman’s overalls again. Her shoulders were covered in insignia that identified her as a second-class apprentice engineer from level eight, but her patches didn’t appear to be sewn-on. He considered that they were simply painted in place to mimic true patches. They were close enough to fool anyone from a distance of a few feet, but clearly were not standard issue.

“Who are you?” Magnus asked. He doubted that the blood-spattered ID badge dangling at her waist was legitimate.

The woman had begun to visibly perspire, her forehead glistening as she moved beneath the dangling lightbulb overhead. “I’m going to ask you one last time. Where is it?”

Magnus looked down to his feet. He lifted his boots against the approaching red tide and rested them on the feet of his chair, his legs shaking.  This was not a day he’d seen coming, but one that he’d always feared.

“You’re a Lifter,” he concluded.

“And you are Magnus, keeper of the machine. Take me to it. Now.”

“I cannot.”

“You cannot? Or will not?”

“I cannot.”

“And why is that?”

“Because,” he began, his voice growing more confident, “you will be dead before you leave this office.”

The woman laughed at this, and seemed to consider his words for a time before her smile evaporated and her face grew dark again. A bead of sweat had formed at her temple and had found its way down to the edge of her chin.

“Get up,” she said. “We’re going.”

“You will not,” said Magnus.

His words were free of malice and he spoke them carefully.  Deliberately.

The dark eyed woman opened her mouth as if to speak, but abruptly lurched forward, losing her balance and throwing a hand on the desk for support. The desk was slick with the foreman’s blood and her hand slipped, carrying her body down to the floor below in a heap.

She struggled to form words but couldn’t manage more than a single moan as her body writhed and struggled against itself.

After a moment her movements grew slower and she’d stopped trying to speak. Magnus sat frozen and watched with morbid curiosity until, finally, she exhaled one last time with a breath as deep as any he’d ever heard.

Magnus winced.

Taking a handkerchief from inside his vest pocket, he dabbed at a thin film of sweat that had begun to form across his own brow.

He looked from the woman to the foreman and back again, trying to make sense of it all. This would change everything. He’d only hoped that the factory was ready for what was to come.

The Factory

Magnus had slaved away at the machine for seven years. Greasing gears. Replacing tubes. Regulating the flow of steam. He had come to know its strengths. Its weaknesses. Its propensity for failure on the hottest days of summer.

Though the foreman would be loathe to admit it, Magnus kept the factory running. Few could bear to be within the belly of this mechanical beast for more than a few minutes at a time. Fewer still understood the complex movements and delicate maintenance that underlied its functions. Just the same, this was home.

The clatter and vibrations from the machine were the closest thing to a heartbeat he had felt in ages. Glancing forlornly through the small, single-paned window of his maintenance office, Magnus saw the first of Winter’s snowfall begin to blanket the forest just beyond the factory’s border. Wisps of steam rose through low smokestacks peppered throughout the factory grounds, quickly consuming the fresh snow before it could coat the dull gray concrete buildings that extended as far as Magnus could see through his tiny window against an unrelatable, alien world.

The machine belonged to him as much as he belonged to it. A youth filled with isolation and a string of infrequent, failed adult friendships had taught Magnus his place in the world. Life was one way and he was another. He had made his peace with it. He wasn’t thriving, exactly, but he was living. He was satisfied. He didn’t know any different.

The phone on his desk rang, stirring Magnus from his stolen gaze through the frosted window. The phone never rang. He drew a sharp breath and picked up the receiver.

“Y…yes?” He asked, cautiously.

“Magnus…” a strained voice called.

The foreman.



His brow furrowed, Magnus called the foreman’s name but received no reply.

Again. Nothing.

He replaced the receiver and cast a confused glance at the machine. It was working smoothly; the gauges he could see from his desk were all showing normal.

Pausing to take a deep breath, Magnus rose and walked toward his office door. With one quick look back at the machine, he turned the handle and stepped through into the dimly-lit hallway beyond. The foreman’s office was a twenty minute walk away and Magnus hadn’t been there in months. He was rarely called upon or needed for anything beyond his daily maintenance of the machine.

The phone call was an anomaly – a wild flag of disharmony in an otherwise routine day. His curiosity piqued, Magnus began his journey toward the foreman’s office.

Arriving at the foreman’s closed, nondescript office door, Magnus cast furtive, curious glances down the hallway in either direction. No one was here. The hallway stood empty and silent, save for the irregular hum of the flickering lights strung up along its length to distribute the machine’s largesse to dark corridors throughout the factory.

Magnus carefully cleared his throat, formed a fist, and rapped it slowly yet firmly against the door. Three knocks.


Another two.

Magnus tried the door handle. His grip firm and palms sweaty, a twist of the handle begat an audible “click” and the door began to swing open against the squeaking protests of an unoiled hinge.

The scene that greeted him was as unwelcome as it was unexpected.

The foreman sat at his chair slumped over his desk, a narrow metal hilt rising from his back. It looked like a letter opener but amidst the shock of it all details seemed trifling.

A pool of blood surrounded the desk, filling the air with a metallic twinge. Magnus felt his mouth fill with bile.

Movement in the shadows drew his attention. A woman, not much shorter or older than Magnus himself, dressed in the gray overalls of those that worked the factory floor, stepped into the light.

Her hair was as dark as night, pulled into a ponytail while errant escaped streaks of blackness framed her face. Her eyes were unreadable, soulless pools of infinity that took away the flickering lamplight and gave nothing back. Her features were sharp and unmistakable. This was a face Magnus would never forget. Could never forget.

She was the most beautiful woman he had ever seen.

Clearing her throat, the woman spoke, her voice firm.

“You must be Magnus,” she said. “I’ve been waiting for you.”