business, Personal, Society, Technology

Working from Home: The Good. The Bad. The Weird.

This post is not intended to be funny, so if you’re looking for a better joke, watch C/SPAN.  Wait, that was technically a joke.  Oh well.

So, a little (snooze-fest) background to get you in the mood.  Some wine, some Barry White music, dim lights, and…

I’ve now been working remote for an employer since Spring of 2015.  I didn’t seek this, because I always thought of it as a unicorn job.  But I soon discovered how many others have been doing it (in IT) for a long time and how the practice is increasing in popularity.  This is particularly true for consulting more than full-time employment (FTE) or contracting.  Consulting for an employer on full W-2, etc. is more common than independent, but I see quite a few of those as well (mostly online, that is).

Since then, I’ve had many discussions with others who work from home and it seemed odd how little information exists on “best practices” and warning signals.  There are some books, some blogs, some whitepapers out there, but most appear to be focused on a specific area within the topic, rather than taking a holistic view.  I try to avoid using “holistic” because I’ve heard it used to death, but I couldn’t stop myself.

The Good

The advantages for the consultant are pretty obvious, but not always what you expect. I won’t bother with the advantages for employers, because they should already know that, or they’re on the wrong path.

Flexibility is high on the list. When you wake up, when you take lunch, etc. Dress code is optional (more on this later), and feeling more connected to your “home” are often benefits. For example, spending more time with your kids, pets, spouse (in that order, ha ha), etc.

Flexibility also allows you to step away from some conference calls to use the restroom, get coffee, snacks, fetch the mail, etc. as long as you have a wireless headset and a mute button. I can take care of dishes, laundry, feeding the pets, watering plants, all while discussing why Configuration Manager isn’t going to automatically wipe and re-image every machine in the company from the evil PXE-beast.

Another advantage is it’s easier to multi-task (which can also be a disadvantage). For example, while one conference call is droning on about something you’re not involved with, you can work on other tasks, chat with customers, engineers, etc. As for conference calls, it’s often easier to “back-channel” on separate chat sessions, with others on the same call, than when everyone is physically in a room together.

Yet another advantage with online conferencing is the ease of sharing links, documents, etc. via the chat application (Skype, WebEx, etc.) while the meeting is still going.

The Bad

Some of these will vary by your personality, home environment, and other personal factors.

Solitude. It’s not for everyone. If you don’t like working in isolation (like many programmers prefer), and rather have people around you, then working from home may not be ideal. If you suffer from mild to severe depression, even seasonal, it can be tough, but not impossible, to accommodate.

Background distractions/disruptions. Noisy pets. Leaf blowers outside. Fans. All of these can make you a master of the mute button, but if that gets too frequent, customers (and your boss) may become concerned about your ability to focus.

What to do?

None of the following recommendations imply 24/7 focus. It’s okay if you slip off the wagon once in a while. The important thing is to keep them in front of you and try to do them whenever possible. Make a checklist if you want, whatever works. This is aside from the technical side of things, like getting a wireless Bluetooth headset.

  1. Get outside!!! Walk, run, or even sit in a chair. But get outside at least twice a day. Even if the weather sucks. It’s important to mentally feel connected to the outside world. Sunshine, even indirect/cloudy, stimulates chemical balances in your mind and body (proven, go look it up, if you don’t believe me).
  2. Get away from your desk/chair at least once an hour. Walk to another room (or outside, even better). Just move.
  3. Watch your diet. Avoid sugary snacks or putting too much sweetener in your drinks (or drinking canned/bottled sweetened drinks). Being sedentary and consuming unhealthy foods/drinks is one of the fastest ways to lose control of your health. If you think it’s easy to slip on this when working in an office, it’s twice as easy when working from home. Also, keep snacks AWAY from reach. Put all your food, coffee, drinks, etc. in another room, or across the room you’re in. Make yourself have to get up to get them.
  4. Exercise. If you’re so inclined, do some resistance workout activities, or calisthenics to keep the blood flowing and improve your health. Sitting at home is worse than sitting in an office because you don’t even walk from the office entrance to your desk and back. You can easily lose weight doing this, which is a win-win. Nothing fancy. Even arm circles, squats, and so on are better than clicking a mouse all day.
  5. Set Boundaries. Pick a time to “knock off” work and leave it behind. It’s really really reeeeeeeaaaally easy to keep working long after you should quit for the day. It’s bad for your mind, health, and can affect your sleep pattern, mood, appetite, and family time (or pet time).
  6. Have lunch with a friend, colleague, family member, etc., at least once a week if you can. Nothing fancy or expensive, just coffee or a light lunch will do. Conversation is one of the best vaccines against feeling down from isolation. It also keeps your conversation chops sharp for when you go to meet customers.
  7. Go to local meet-ups. This is VERY important for three reasons: It gets you into groups and interacting with others, it gets you away from your home office, and you learn new things. Just watch out for junk food if they provide it.
  8. Change the Scenery. Work from a different location sometimes. A coffee shop, library, park, shopping mall, etc. Whatever fits your ability to focus on what you do for work. Some people prefer busy places, some prefer quiet places. But getting out of the house is important.
  9. Personal Stuff. Shower, shave, groom, like you’re going to the office. Every day.
  10. Dress up. Yes. One of the most common changes people incur when working from home is working in pajamas, sweats, even underwear. It’s easy and comfortable. It can also gradually affect how you feel and how you conduct yourself in conference calls. You don’t need to put on a suit, although that’s fine if you like. Just jeans and a button down shirt or polo, with socks and shoes. And a belt. Believe it or not, aside from getting away from my desk, this is the most challenging one for me.
  11. Avoid cages. If you listen to music or podcasts, news, or TV shows while working, change up your selection. Avoid patterns that subconsciously make your brain feel like you’re standing still.

Anyhow, I hope this is helpful.

humor, Personal, Scripting, Technology

$HoHoHo = ($HoList | Do-HoHos -Days 12) version 1812.18.01


UPDATE: 2018.12.18 (1812.18.01) = Thanks to Jim Bezdan (@jimbezdan) for adding the speech synthesizer coolness!  I also fixed the counter in the internal loop.  Now it sounds like HAL 9000 but without getting your pod locked out of the mother ship. 😀

I’m feeling festive today.  And stupid.  But they’re not mutually exclusive, and neither am I, and so can you!   Let’s have some fun…

Paste all of this sticky mess into a file and save it with a .ps1 extension.  Then put on your Bing Crosby MP3 list and run it.

Download from GitHub:

The function…

function Write-ProperCounter {
    param (
      [int] $Number
    if ($Number -gt 3) {
        return $([string]$Number+'th')
    else {
        switch ($Number) {
            1 { return '1st'; break; }
            2 { return '2nd'; break; }
            3 { return '3rd'; break; }

The bag-o-gifts…

$gifts = (
    'a partridge in a Pear tree',
    'Turtle doves, and',
    'French hens',
    'Colly birds',
    'gold rings',
    'geese a-laying',
    'swans a-swimming',
    'maids a-milking',
    'ladies dancing',
    'lords a-leaping',
    'pipers piping',
    'drummers drumming'
# the sleigh ride...
Add-Type -AssemblyName System.Speech
$Speak = New-Object System.Speech.Synthesis.SpeechSynthesizer

for ($i = 0; $i -lt $gifts.Count; $i++) {
    Write-Host "On the $(Write-ProperCounter $($i + 1)) day of Christmas, my true love gave to me:"
    $speak.speak(“On the $(Write-ProperCounter $($i + 1)) day of Christmas, my true love gave to me,”)
    $mygifts = [string[]]$gifts[0..$i]
    $x = $i + 1
    foreach ($gift in $mygifts) {
        if ($x -eq 1) {
            $thisGift = $gift
        else {
            $thisGift = "$x $gift"
        Write-Host "...$thisGift"


Projects, Scripting, Technology

The Little (Code) Stuff That (Sometimes) Matters

As a follow-up to the post about tuning PowerShell scripts, this is going to be more general (language neutral).  I’d like to run through some of the “efficiency” or optimization techniques that apply to all program/script languages, due to how they’re parsed, and executed at the lowest layer of a conventional x86/x64 system.

Why?  Good question.  I’ve been digging into some of the MIT OpenCourseware content and it brought back (good) memories from college studies.  So I figured, why not.

Condition Prioritization

Performance isn’t mentioned as much these days outside of gaming or content streaming topics.  But processing any iterative or selective tasks that deals with larger volumes of data can still benefit greatly from some very simple techniques.

Place the most-common case higher in the condition tests.  This is also a part of heuristics, which is basically intuition or educated guessing, etc.  Using pseudo-code, here’s an example:

while ($rownum -lt $total) {
  switch ($dataset[$rownum].SomeProperty) {
    value1 { Do-Something; break; }
    value2 { Do-SomethingElse; break; }
    default { Fuck-It; break; }

Let’s assume that “value2” is found in 90% of the $dataset rows.  In this basic while-loop with a switch-case condition test, a small data set (chewed up into $dataset), won’t reveal much in terms of prioritizing the switch() tests.  Remember, that mess above is “pseudo-code” so don’t yell at me if it blows up if you try to run it.

Anyhow, what happens when you’re chewing through 400 billion rows of terabytes of data? The difference between putting “value2” above “value1” can be significant.

This is most commonly found with initialization loops.  Those are when you start with a blank or unassigned value, and as the loops continue, the starting value is incremented or modified.  There is often a test within the iteration that checks if the value has been modified from the original.  Since the initial (null) value may only exist until the first cycle of the iteration, it would make sense to move the condition [is modified] above [is not modified] since it skip an unnecessary test on each subsequent iteration cycle.

Make sense?  Geez.  I ran out of coffee 3 hours ago, and it almost makes sense to me.  Just kidding.

Sorted Conditions / Re-Filtering

Another pattern that you may run across is when you need to check if a value is contained within an Array of values.  For most situations, you can just grab the array and check if the value is contained within it and all is good.  But when the search array contains thousands or more elements, and you’re also looping another array to check for elements, you may find that sorting both arrays first reduces the overall runtime.  That’s not all, however.

What happens when the search value begins with “Z” and your search array contains a million records starting with “A”?  You will waste condition testing on A-Y.

What if you instead add a step within the iteration (loop) to essentially “pop” the previously checked items off of the search array?  So, after getting to search value “M”, the search array only contains elements which begin with “M” and on to “Z”, etc.

Figure 1 – Static Target Search Array


Figure 2 – Reduction Target Search Array


To help explain the quasi-mathematical gibberish above: S = Search Time, R = Array Reduction Overhead Time, N = Elements in Search Set.  So R+1 denotes the time incurred by calculating the positional offset, and moving the search array starting index to the calculated value.  Whereas, S alone indicates just starting each iteration on the first element of the (static) target array and incrementing until the matching value is found.

So, what does this look like with PowerShell?  Here’s *one* example…

Figure 3 – PowerShell sample code

param (
  [parameter(Mandatory=$False, HelpMessage="Pretty progressbar, but slower to run!")]
  [switch] $PrettyProgress
# build an array of ("A1","A2",...,"A100","B1","B2",...) up to 26 x 100 = 2600 elements

$searchArray = @()
$elementCount = 1000
$tcount = $elementCount * 26
$charArray = @()


Write-Host "building search array..."
for ($i = 65; $i -le (65+25); $i++) {
  $c = [char]$i
  $charArray += $c
  for ($x = 1; $x -le $elementCount; $x++) {
     $cc = "$c$x"
     $searchArray += $cc
     if ($PrettyProgress) { Write-Progress -Activity "$($charArray -join ' ')" -Status "Building array set" -CurrentOperation "$c $x" -PercentComplete $(($m / $tcount) * 100) }
# define list of search values...
$elementList = @("A50","C99","D75","K400","M500","T600","Z900")
$randomList  = @("T505","C99","J755","K400","A55","U401","Z960")

Write-Host "`nStatic search array"
foreach ($v in $elementList) {
  $t1 = Get-Date
  $test = ($v -in $searchArray)
  $t2 = Get-Date
  Write-Output "$v = $((New-TimeSpan -Start $t1 -End $t2).TotalSeconds)"

# protect the original target array for possible future use...
$tempArray = $searchArray

Write-Host "`nReduction search array"
foreach ($v in $elementList) {
  $t1 = Get-Date
  $test = ($v -in $tempArray)
  $t2 = Get-Date
  # this is the real "R"...
  $pos = [array]::IndexOf($tempArray, $v)
  $tempArray = $tempArray[$pos..$tempArray.GetUpperBound(0)]
  Write-Output "$v = $((New-TimeSpan -Start $t1 -End $t2).TotalSeconds)"

Figure 4 – PowerShell example process output


The time values are in seconds, and will vary with each run depending upon thread processing overhead incurred by the host background processes.  But in general, the delta between the matched values in each iteration will be roughly the same.  To see this visually, here’s an Excel version…

Figure 4 – Spreadsheet table and Graph result


It’s worth noting that the impact of R may vary by language, as well as processing platform (hardware, operating system, etc.) along a different vector than others, but that within the iteration tests, the differences should be roughly similar.

There are other methods to reduce the target array as well, which may depend upon the software language used to process the tasks.  For example, whether the interpreter or compiler makes a complete copy of the search array in the background in order to provide the index offset starting point to the script.

Again, this is all relatively meaningless for smaller data sets, or less complex data structures.  And it really only provides significant value for sequential (ordered) search operations, not for random search operations.

So, some questions might arise from this:

  1. If the source array is not sorted, does the sorting operation itself wipe out the aggregate time savings of the reduction approach?
  2. Where is the “tipping point” that would cause this approach to be of value?

These are difficult to answer.  The nature of the data within the array will have an impact I’m sure, as might the nature by which the array is provided (on demand or static storage, etc.) . To paraphrase a Don Jones statement: “try it and see.”

Now that I’m done pretending to be smart, I’m going to grab a beer and go back to being stupid.  As always – I welcome your feedback.  – Enjoy your weekend!

humor, Personal

My Holiday Wishlist and Resolution Bundle

  1. My oldest daughter will have a healthy baby this coming May
  2. No more “Semi-Annual”, “Monthly”, “Broad”, channel weirdness. Just “Ring0”, “Ring1”, etc.
  3. The ConfigMgr console gets real drag-and-drop support
  4. An international conference agrees to broker all acronyms.  No more dual-meanings
  5. Azure adds a normal UX-efficient desktop style UI, instead of the stupid tablet-style “blade” UI
  6. Azure Automation Runbooks testing allows viewing the last test output WHILE in the runbook editor (without cheating)
  7. A 14 inch HP/Dell/Lenovo/Acer laptop with Core i7, 16 gb memory, NVME boot storage and room for an SSD for under $500
  8. Azure Automation Runbooks testing process displays real-time output
  9. Ubuntu bundles WMI-compliant CIM into the standard distribution, with an API exposed to PowerShell Core
  10. My dog would stop farting in my office while I’m on business calls
  11. Intune would add equal inventory granularity with ConfigMgr to leverage inventory data for reports, policies, targeting, etc.
  12. ConfigMgr would update the little tragically-underfed homeless query editor
  13. People would stop carding me when I order an adult beverage even though I look like Moses’ beardless brother
  14. Microsoft would release a new Windows client that blocks ANY installs except .MSI or .MSIX – period. No exceptions ever.
  15. Roku would add a TV volume control to their phone app (I don’t care if it’s technically feasible, I want it)
  16. Notepad++ would include a snippets library feature as f-ing awesome as TextPad has always had (sorry, but the add-ins all suck)
  17. My son would stop leaving his underwear on the bathroom floor when taking a shower
  18. The number of blogs/podcasts/videos showing how to install and configure things would balance out with the blogs/podcasts/videos showing how to use the cool features (the balance still favors installation complexity, which is unfortunate, unless you’re a consultant, cough cough)
  19. Someone would actually read up to item 19
  20. Get a monthly PowerShell users group off the ground here, finally
  21. Santa adds to my shot-glass collection.  I still need about a dozen more US cities
  22. Santa brings us a better harness for turd brain (aka “snuggle turd”, aka “stinky brain”, aka “Dory”, aka my 100lbs chocolate lab from Mars)
  23. Santa shoves a whole Roland TDK30 kit down our broken chimney
  24. Start going to bed earlier
  25. Write another book (it’s been awhile)
  26. Increase my studying efforts / attend more user groups and conferences
  27. Stop rambling on long blog lists about silly stuff like holiday wishlists
  28. Build more projects in my garage
  29. 29 is a weird number to run out of wishlist ideas.  I should add things like ending cancer and world hunger, stopping all wars, making all politicians honest and hard-working, making everyone nice on social media, and Virginia getting a professional sports franchise (any sport will do).  Eh.
humor, Personal, Society, Technology

Cranky AFaaS

I’m starting to use this “aaS” suffix more and more in casual conversation now.  I’m not just stooping to bag my dog’s fecal dispersions, I’m providing Feces-aas or FaaS.  I’m not talking shit around the coffee pot anymore, I’m providing BSaaS.  That’s right, I claim it as the first official use of “Bull-Shit-as-a-Service”, even though technically, the act itself was perfected by the US government a hundred years ago.  Nobody can touch them now.


So, this week has immersed me in a series of, shall I say, annoyances.  The kind that spin my brain platter around to that classic tune: “Stupid AF but we’ve gotten so used to it that it seems normal now”.

Like this…


and this…


…and that’s only the beginning.

Then I heard a clerk at the grocery store talking to a customer ahead of me.  It went a little like this…

Clerk: “No maam, once you write the check out for the actual amount, I can’t give you cash back, unless you write another check.”

Maam: “This shit is bullshit!

Clerk: “Well, I suppose that it has to be some kind of shit. But that’s all I can do.

Now, technically he was absolutely correct.  But I don’t think is manager was amused, but he obviously agreed with this employee, and dammit, my beer was getting warm on that slimy conveyor belt waiting for her to move on.

Then I found out that “SCCM” has been hijacked, like all good initialisms/acronyms, by some glue-sniffing, child-abducting gang calling themselves “Society of Critical Care Medicine“.  The nerve of those people thinking their silly medical skills somehow matter more in this dangerous world than deploying patches to machines over shitty WAN/VPN/Wi-Fi links at 3am.

For the love of caffeine, can we get someone to form an official group to manage all these acronyms which now have multiple meanings?


Then I walking my dog, Dory, who at 100lbs, actually walks me, but that’s beside the point, and one of my neighbors stops me on the street…

Her: “OMG.  Did you see the rabid fox running around here?!  It chased me into the house with my two little dogs dragging behind me!”

Me: “Ummm…”

Her: “So, I called the police, they said I had to call Animal Control, who said unless I could keep my eyes directly on it, they can’t come out to do anything.  And I said…” (this is where I started to glaze over and pictured my dog getting mauled by some rabid animal and me trying to fend it off with a roll of poopoo bags in a plastic container…) “and so I just wanted to let you know.  Be careful!”

She went inside, I kept walking (getting walked by) my dog, and then saw the rabid fox limping around like it had finished off a case of beer or something, about 100 yards to my right.  I called our action-packed police department…

311: “Police non-emergency.  What’s the problem you wish to report”

Me: “We have a rabid fox running around our neighborhood.”

311: “I’ll patch you through to Animal Control.  If you get put on hold too long, their direct number is (insert “1-800-IDGAF”).  Please hold…”

20 minutes, no answer.  Repeated recording about how important my call is.

Hang up.  Call back.  10 minutes on hold.  Another call, 5 minutes.  Never mind.  At this point, I’m hoping it bites the first city employee that drives through the area, but I don’t really mean that, it just sounds snarky.

So I tweet our tax-paid folks with my complaint…


It’s now 4:51 PM ET on a Friday, which means those folks left work about 5 days ago.

Anyhow.  I’m staying away from work this weekend, but I will be doing something.  Maybe cleaning up my Github tragedy, or rebuilding my lab catastrophe, or staring at my belly button and thinking “I was once connected by a cable!”

Seriously, taking the wife and two of our kids to see Bohemian Rhapsody tonight.  I hope it’s good.


My First Day as Microsoft CEO


First of all, thank you all for being here today, in my 800 bedroom cabin atop the humble foot hill called Mt. Everest. I hope your parachutes all provided a smooth arrival?  It is an honor having you here to listen to me pontificate about my vision for Microsoft, now that I’ve been voted Ultimate Excecutive Officer, or UEO. I plan to outline changes which I feel will help launch our fine organization to the “next level” (air quotes).

Before I continue, I’d like to take a moment to thank Satya for all his hard work.  He exemplifies all of the qualities and traits a CEO and leader should have, of which I have none.  But that’s beside the point.  Actually, he doesn’t yet know I’m the new CEO or UEO, he thinks the plane he’s on is taking him to meet Oprah for an interview, but I paid the pilot to fly in circles over some place near Antarctica, and I had all the door locks changed.  Please thank Satya, if you ever see him again, for the open bar.

So, first things first:

As of today, all former prefixes like “Active”, “Live”, “One”, “Visual” and so on are being changed to “Awesome”.  So it’s Awesome Directory, Awesome Studio, and Awesome Drive.  Get used to it.  And from now on, no product will have a name that takes more than 5 syllables to pronounce.

Licensing is going to change as well.  A new program called “4th grade review” is going live today.  We will randomly-select a 4th grade student in a random school in Kenya.  They will read the EULA to their classmates, and if even one student looks confused, they get to rewrite it.

Servicing channels are going to be renamed yet one more time.  They went from “Current Branch” to “Semi-Annual blah blah”.  But now we’ll have the following names:

  • “I hate change!” (formerly LTSB/LTSC) is now once every 5 years
  • “What’s the hurry?” (formerly CBB/Semi-Annual) is now once every year
  • “I kind of miss getting updates” (formerly CB/Semi-Annual Targeted) is now twice a year
  • and “Where the fuck are my updates?!” (formerly Insider Preview) is now every week

Changes to Windows

Windows 10 “Enterprise” SKU images will no longer include games or media services apps.  In fact, we won’t even allow those to be installed.  If you want them, buy the Home edition.  The Professional edition will offer it as an option, but not installed by default.

The Control Panel will be entirely migrated into Settings by the time I leave the stage and run out the back door.

We have a new edition called Windows “In-Your-Face” edition, which will be entirely FREE as long as you agree to so much telemetry and advertisements that you might forget what apps you were trying to launch.

All application installations will have to be MSI, C2R, App-V or portable .Exe only.  No more legacy garbage.  Stubborn app vendors can suck it.

Other Products

Office 365 is now going to be entirely browser-based.  No more installations.  Every single feature you had in the C2R and MSI packages will be in the new browser-app.  You’re welcome.

A new driver “service” (air quotes again) is being released.  The code name is Device Optimization Universal Configuration Hardware Emulation, or just DOUCHE for short.  All vendor drivers will have to check into our portal and we will manage a true PnP experience without any manual intervention required, ever.  As in never, or ever, or which ever never you ever never prefer.  Vendors can no longer install drivers without coming through us.  PnP is now going to work the way we envisioned it should work, back when we were eating mushrooms atop some mountain in Chile.  Good times (drifts off with a dazed look)…. Oh, yeah, it’ll be like a toaster.  Plug it in, and watch it burn the toast.


All versioning will be consistent across all products from now on.  No more 10 for this, 2017 for that, or 2.3.5550.0000.1000 for the other. There’s going to be one version format only.  We haven’t settled on it yet, but whoever wins the beer funnel challenge gets to pick it.

We signed a deal with Jeff B. to get Alexa installed on every Windows SKU.  We will be including an app that lets you pay to watch Alexa and Cortana fight in a 3D virtual cage of death, only with our Hololens product, obviously, and all proceeds going to charity.

SQL Server is now renamed to Awesome Database Server.

All external web portals like Fast Track, Partner, Azure, O365, and so on are being merged into one web portal and one credential set across all of them.  And speaking of credentials, you can now open multiple Azure instances in a single browser using separate credentials.  You’re welcome.

We will also start a new customer loyalty program next week.  The plan is simple.  Once a day, the first person to show up in front of a Microsoft store with a bullhorn, shouting “Java sucks and so does Flash” gets a t-shirt.

I’d like to continue with more, but I was just told that Satya’s plane is on the way back so I have to meet my Uber ride out back.  Sorry I don’t have time for questions. Thank you!


Windows 10 Secrets: Undocumented Hotkeys

The next time you want to impress someone at a social gathering, wait until they’ve finished rambling about how much they know about Windows 10. Then set your drink down calmly, smile and chuckle “That’s cute. I remember when I first learned those tricks. Years ago.  Before I became a man.” (tip: insert woman here, if appropriate)

Then hit them with these proven hotkey secrets:

Un-stick any frozen application

Press CTRL+ALT+Space+ smack the shit out of the keyboard. Any keys will do.

Recover a frozen web form

Press CTRL+ALT+DEL then grasp the keyboard in both hands and forcefully rip the USB connector loose.  Bonus tip: scream as loud as possible while removing the keyboard to speed up the recovery.

Automatically Rebuff an Annoying Facebook Comment

Press CTRL+ALT and press your face against the display screen and scream as loud as you can “you stupid MF-er!!!

Remember, computers don’t kill people.  People kill people… and their computers.