Failure, The Box Of Shame, and What We Do With It.

So, I’m going to start this with a little story. You see, a couple of years ago there was an overly excited gamer/engineer type who had gone through a life change that involved a brand new job. This gamer/engineer purchased a brand new — and at the time, very difficult to come by — Nintendo Switch as a personal reward.

This Nintendo Switch is now sitting in a Box of Shame.

I can’t mention any names when I tell this story, because no one likes their box of shame opened for public display.

No One wants that box opened. No one.

In fact, some people, who again will go unnamed, tend to have a whole ‘closet’ of shame that is behind an absolutely ridiculous home made security setup behind an iron door completely covered in caution tape, guarded by Dementors on loan from Azkaban.

Continuing on, this individual — who I will refer to as ‘HJ’ for the sake of anonymity — was eager and excited about obtaining such a cool new piece of technology and really, really wanted to know how it ticked .

HJ played games on the Nintendo Switch for a while and was able to keep the curiosity monster at bay for a time.

For a good six months, even.

But then the inevitable happened. After a long, exhausting day, HJ was relaxing on the couch, put the switch on the edge of it, got up too fast, and the switch fell on the ground. Lo and behold, this resulted in a cracked front face plate.

Oh, it still worked, you see, but it wasn’t perfect anymore. It needed to be FIXED. And if it needed to be FIXED, well, wasn’t this a perfect opportunity to also UPGRADE it?

I would say at this time that HJ knew nothing about the inner workings of a PCB, micro-controllers, LCDs, EEPROM memory modules, touch screen interfaces or, you know, the fact that tricky companies like Nintendo use the superpowers held by their master-class-completely-all-the-way-leveled-up-electrical-engineers to add traps into their PCB designs that prevent us mere mortals from tampering with them.

HJ did not KNOW any of that. Nor did HJ know that HJ didn’t know any of that.

What HJ knew was that HJ was an engineer!

…Yeah. So HJ asked me not to share how that turned out, but I think for the sake of the story I must. It turns out that while one can easily replace the back of a Nintendo Switch case, one must remove all sorts of important things that don’t like being detached from their mommy board to get at it. And when one attempts to re-attach these various things, the mommy board screams in agony and starts smoking and dies a slow, painful death.

Okay. Not a problem. HJ felt that this was not a unrecoverable situation. During the process of failure, HJ learned a ‘WHOLE LOT’ about the inner workings of the evil Nintendo Switch. HJ learned that all the saved games were on an EEPROM module. HJ THOUGHT THAT HJ KNEW that because it was a memory module, it could be easily moved from one Nintendo Switch to another. In HJ’s mind, this meant: ‘Voila! Bing bang boom, new looking Nintendo Switch, no loss of saved games. Problem solved!’

HJ did NOT know at this point that there was a hardware security check that matched an EEPROM to a specific motherboard.

Basically, HJ got overzealous, took apart a working system, and then when that didn’t work, took apart ANOTHER working system to attempt to repair the first. This had a financial cost of upwards of $500 — two Nintendo Switches and the tools needed to take them apart.

Needless to say, the whole ‘Nintendo Switch Incident’ has neatly been locked in the closet of shame, in a dark corner covered with cobwebs and protected with mines triggered by proximity sensors. It was a classic example of believing ‘What You Know’ and ‘What You Know You Don’t Know’ in any situation, ever outweighs ‘What You Don’t Know You Don’t Know’

Fascinating Article – I suggest everyone read it at least once!

The decision to act without having a full understanding of the underlying technology had a financial cost, as well as even a mental cost. HJ had to question decisions and conclusions made in haste, and grudgingly accept the consequences of them, which in this case was an overwhelming feeling of failure and inadequacy.

But the moral of this story isn’t in the fact that the incident resulted in another ‘Box of Shame’. The moral of the story is in what ‘HJ’ did with the knowledge gained from having to add that ‘Box’ to the ‘Closet’.

HJ recognized that Electrical Engineering, PCB designs and micro-controllers were things that life had not yet provided an opportunity for HJ to learn. They weren’t things that were in HJ’s wheel house.

HJ could accept that, chalk it up as a failure, throw it in the closet and forget about it completely… or HJ could recognize why that box was tossed in the closet, find those skills that were missing from HJ’s wheel house, and put them there.

That experience of failure which resulted in an entry to the ‘Box of Shame’ opened HJ’s eyes to a new and interesting side of technology. HJ found experts in the field, learned from them on HJ’ personal time, and joined online communities. HJ started with smaller projects, and focused on understanding each component of each board HJ worked with, knowing that both the first and second foray into such endeavors were unsuccessful because of HJ’s lack of knowledge.

There were failures. There were a lot of failures. But then, all of a sudden, there were successes.

HJ has built some incredible iOT things, and is delving into PCB design and areas of engineering that at one time, were unknown to HJ.

All because of a ‘Box of Shame’ containing two broken Nintendo Switches.

Not too shabby for a homemade Arduboy. Yes, it is a novice’s attempt. HJ is okay with that.

Learn from your mistakes. Learn where you went wrong and why. Learn how to recognize ‘What You Don’t Know You Don’t Know’ and always strive to improve, as individuals, employees, engineers, leaders, followers, students, mentors and family members. We are all every one of those things in some way.

Accept that sometimes you have to fail — and fail a LOT — if you want to succeed!

(As a side note, HJ still hasn’t touched another Nintendo Switch and won’t until HJ is absolutely sure that HJ understands everything about it first. *cough*)

—hyperjoule // juliann@womenwhocode.com

Spread the love

The Infinite Loop

As a software engineer, I have always related my state of mind in technical terms. This might seem odd to some, but it helps me fundamentally understand myself, the world around me, and other people in it.

In the software engineering world, we have a term for a process that runs consistently, and with no exit condition — the infinite loop. Most of us are in a regular loop as we go about our day. Our regular loop, when represented in code, looks something like this:

while($life=="Normal")
{
    Wake();
    Wash();
    Work();
    Family();
    Fun();
    Health();
    Sleep();   
}   

This will only run while $life == “Normal”. An outside function or procedure can change the value of that variable. An infinite loop is quite different.

for(;;) 
{
    Family();
    Work();
    Health();  
}

There is no variable that you can change or condition you can set to help you out of it, and those are the only processes running on repeat in your brain code. The Infinite Loop is often caused by events you can’t control. And falling into one can be dangerous.

Many things can trigger ‘The Infinite Loop’ – work events, life events, health issues, family events. But when there is a combination of events feeding into that Infinite Loop, an Exception on too many processes is thrown anyway, despite no exit clause in your brain code.

Translating nerd speak, this means that if you’ve worked yourself up to the ridiculous over situations that are entirely out of your control, you are going to crash hard unless you re-center, re-focus and don’t let your head get away from you.

Life is hard, confusing, and an unstoppable force. People you love can disappoint you. Work is hard or it wouldn’t be called work. Family is hard. Children grow up and go to college, parents grow older and more frail, and your siblings become more distant as their own life processes become more complex.

Your life can go through many changes, all at once.

I was in an infinite loop this week. I barely avoided a hard system crash. A series of alarming events in every facet of my life threw me completely off center. I have been heading into that loop all week.

I hit a Critical Stop.

The thing about the Critical Stop is once you recognize that you are at that point, you can *think*again. You can stop letting everything get to you. You can take all those insecurities and conjectures and concerns and compartmentalize them. Don’t forget about them; there are reasons you fell into the Infinite Loop after all — but only open one compartment at a time, and on that part you brainstorm.

Stop second guessing your life code and brain processes; pick at the bugs one at a time until they are fixed, and eventually you will have a functional, dependable system.

–hyperjoule // juliann@womenwhocode.com

http://www.womenwhocode.com/cleveland

Spread the love
The R2-D2 Nightlight and Death Pi

R2-D2 Lamp – Project Notes/How To Guide

Greetings! I have completed the README.md guide and promoted the repository for a local version of this project (not the internet streaming version — it requires a lot more manual configuration and an EC2 server) so that you can get one of these neat little toys running on your own home network!

http://r2d2.hyperjoule.io

The repository for this project is hosted here:

https://github.com/jstainbrook/r2_d2-local/

Follow the instructions in the README.md. Note: this is my first ever completed PUBLIC repository, and this is version 1.0 — if any of my instructions are not clear, please let me know! I am hoping that I have provided clear enough instructions so that someone with a little linux knowledge and some basic soldering skills can set this up for themselves at home.

Some notes on this project — for the live version hosted at http://r2d2.hyperjoule.io, I initially in the beta stages had this streaming on my desk at home. This — for all sorts of reasons — was not a good idea. Mostly, it took up too much GPU and processor speed, and therefore wasn’t ideal to be running as a simple 24/7 twitch stream. Plus, my cat kept knocking it over (along with me, every time I’d move something on my desk).

I had made a while ago this awesome looking Death Star that I used for a Retropie build.

The inside of the Death Star

It was already set up with a low profile fan and a momentary LED interrupt I could use for safe startup/shutdown (I will cover the building of the Death Star and the setting it up as a twitch streamer in another post!). This Death Star (and yes, I’m a total Star Wars nerd) was just sitting on a shelf as I found it wasn’t really practical as a retropie machine. Something about round cases and usb joysticks don’t really work out very well — I got tired of chasing my retropie across the floor in the middle of playing a game!

So, awesomely enough, I have a low power themed twitch streamer running 24/7 right next to my LED lamp!

Yup, that Death Star is powering the Camera!

And, just to show you what the pi zero w with the unicorn pHat looks like when not under the acrylic:

Cool, huh?

If anyone makes one, please let me know! I’d love to see other implementations of this!

–hyperjoule

Spread the love

R2-D2 iOT Lamp

Greetings! I have made an iOT thing:

r2d2
r2-d2 iOT nightlight!

Click here to see it in action!

Currently, this little iOT Lamp is running on a pi-zero-w with a Pimoroni Unicorn pHat. The scripts are all written in python — some of which are the examples that come either with the Pimoroni BlinkIt or Pimoroni Unicorn, others of which I pulled from some of the Adafruit NeoPixel libraries, and yet a couple of which I wrote myself. The webserver itself is running right on the pi-zero-w — apache2 and php 7.2 — and is configured to launch an ssh connection from Amazon EC2 to my home R2-D2 lamp to send the commands.

The R2-D2 is a gutted nightlight from AliExpress.

I’m looking at eventually making this into an instructable!

Spread the love

What does your IDE look like?

So… just a quick post. I’ve been working in NetBeans for a long time, but….

OMG VisualStudio with PowerShell running Ubuntu and some tricks I have found here:

https://www.freecodecamp.org/news/jazz-up-your-zsh-terminal-in-seven-steps-a-visual-guide-e81a8fd59a38/

here:

https://evdokimovm.github.io/windows/zsh/shell/syntax/highlighting/ohmyzsh/hyper/terminal/2017/02/24/how-to-install-zsh-and-oh-my-zsh-on-windows-10.html

and here:

https://dev.to/mattstratton/making-powerline-work-in-visual-studio-code-terminal-1m7

and VSCode blows every other IDE out of the window. Wow.

Spread the love

Women Who Code

I, along with a very talented UI/UX developer named Stephanie Oritz (shout out to Stephanie!) , will be re-igniting the Cleveland chapter of WWCode Cleveland. We will be network directors for the region!

I’m hoping to do some really cool and fun web and IOT meetups!

Women Who Code Cleveland

Cleveland, OH
565 Members

Join us by attending a WWCode event or signing up at www.womenwhocode.com.Women Who Code is the largest and most active community of engineers dedicated to inspiring women to…

Check out this Meetup Group →

Come join our meetup group!
Spread the love

The Kitty Cam

One of the things I’m currently working on is a five-button auto cam that captures what my cat is up to, because she’s a brat.

enjoying her little window seat in her handmade blanket — spoiled little princess

I still have some things to tweak in my script, but one of the cool functions is snapping a current photo with the webcam and uploading it right to my blog, so it is in my media folder when I go to post. Check it out!

Source code will be up on github and instructions will be here once I work out all the kinks :).

Spread the love

E-Paper button badge

Hi everyone! I’ve completed this project and put the source code on github here:

https://github.com/jstainbrook/epaperbadge

This is actually the first of two projects I intend to publish using the Pimoroni button shim. The second (upcoming) post is for an all-in-one webcam/media controller that I built as a ‘kitty cam’ — It isn’t launched yet, and I haven’t actually completed the project, but I do have the button shim already coded to start/shut down a web server, email a photo taken from the webcam through gmail and upload an instant photo right to my WordPress media library so I can immediately go and embed the photo in a post.

It can also start/stop a twitch stream with one button — all running on a Pi Zero W so stay tuned!

–hyperjoule

Spread the love

The Discord Dad Bot

Once in a while, I’ll challenge myself and take on something just a bit outside my lane. This is one such thing. Mind you, I have been developing in javascript and jQuery for years, so I know javascript very well. The javascript node.js framework was a bit new to me, and this was a good opportunity to learn it!

C’mon, they’re funny, you know it.

Discord is a chat server. I mostly stay on the #sudomod channel with other makers and developers and RetroPie enthusiasts, so I’m not a huge Discord user, but I’ve become quite fond of my little Discord group of fellow retro-gamers.

Discord has bots — automated users that are detached from real people, running scripts that control their behavior somewhere off on the internet.

The last time I wrote ‘bot’ code, it was back in the early 1990s for IRC, which is the predecessor to your modern day chat clients. In the early 1990s, the internet was very small and mostly local and not as popular as online services, as you needed a true unix system (Sun Solaris is what I used) in order to access it. There was a time when the only browser available was Mozilla — not FireFox, but Mozilla — and Mozilla didn’t run on Windows.

Usenet and IRC were the way that you reached out to the world at large in the early days of the internet. And a bot could stay online at all hours — friends in other time zones? Afraid you were going to miss a message? Your bot could store it for you!

Imagine my surprise when I found that yes, bots are still a thing, and they’ve become a FUN thing.

The channel I’m on already had a ‘yo momma’ bot — and so, I present

THE DAD BOT.

Feel free to clone and adapt for your own Discord server!

–hyperjoule

Spread the love

The Button Badge

So, I’m quite fond of all those fun little tech badges that people wear to tech conferences. People get really creative with them.

So, this particular badge came to be because of my love of e-paper screens and the fact that once the image is presented to the screen, they don’t require power to maintain it.

This little badge normally sits by my R2-D2 cam when not in use.

It has a Pimoroni button shim soldered neatly between the pi-zero-w and the e-paper display, giving me a low profile 5 button input that I was able to program to call different python scripts on the pi that change the output on the display. When the pi receives power, the button shim will flash briefly after the boot-up sequence, letting you know when it is ready to use.

The LED on the button shim also provides a good status indicator for when it is done updating the e-paper display (the refresh rate is slow and it can take up to a full minute to execute a change). Since we are running this headless (without terminal or monitor), we don’t have the feedback displayed on the screen to know when the processes are finished being executed. In my scripts, I have included the button shim library, and I have it turning the light off on successful completion of each activity.

Anyway, I plan on putting up a video of the badge powered up and in use, as well as a link to the repository on github and instructions on how you can make one of these for yourself.

Regards,

hyperjoule

Spread the love

Adding auto-incrementing badges to icons in Bootstrap 4.0

That facebook icon that tells you how many new messages you have? Useful, huh? You don’t leave the page, and it gets updated. It’s a little trick done with a combination of SQL and asynchronous jQuery.

I needed to implement notifications for a few applications at work, so I’ve found a way to implement this with just a few lines of jQuery and an asynchronous call to the database.

I’ve put this example up on bootsnipp:

https://bootsnipp.com/snippets/PDPN5

Check it out! On bootsnipp, it’s just pulling a number from random.org and refreshing for demo purposes, but the source of the number can be replaced with an SQL count(*) query.

Spread the love