Book Review: Deep Work by Cal Newport

The pandemic forced a change in the way many knowledge workers work. Many of us have shifted to working from home — some roles are permanent.

I’m fortunate to be in such a position, but it’s been both a blessing and difficult to adjust to.

Distractions are frequent. From regular Zoom meetings, Slack messages and various alert notifications, to email. I think a number of people (myself included) are over compensating in our communication styles.

For software engineers, this causes a lot of context switching. And that’s generally a bad thing.

Context switching can lower productivity, increase fatigue, and, ultimately, lead to developer burnout. Switching tasks requires energy and each switch depletes mental focus needed for high cognitive performance. Over an entire workday, too many context switches can leave developers feeling exhausted and drained.

The impact of context switching lingers even after switching tasks. Cognitive function declines when the mind remains fixated on previous tasks, a phenomenon known as attention residue.

I’ve recently felt myself feeling drained and less productive that usual. While browsing a thread on Hacker News, a comment on Hacker News suggested that someone should read Deep Work by Cal Newport for ideas on how to regain focus and minimize distractions. It was the first I’d heard of that book.

It was pretty enlightening and I was pretty hooked!

It has a number of self-help style steps (that are somewhat obvious, in hindsight) that you can take to improve your situation and increase productivity (e.g., carve out set times when no one can bother you, like early in the morning or late at night, keep consistent times, set reasonable expectations and have a plan, don’t wing it).

But it also had shared some interesting research on how our brains have been rewired to have shorter attention spans, thanks to all our fancy pants technology.

“Once your brain has become accustomed to on-demand distraction, Nass discovered, it’s hard to shake the addiction even when you want to concentrate. To put this more concretely: If every moment of potential boredom in your life—say, having to wait five minutes in line or sit alone in a restaurant until a friend arrives—is relieved with a quick glance at your smartphone, then your brain has likely been rewired to a point where, like the “mental wrecks” in Nass’s research, it’s not ready for deep work—even if you regularly schedule time to practice this concentration.”

Yeah… guilty.

Anyway, definitely want to put some of these ideas into practice. It was a quick read and had some concrete steps on how to improve attention and focus that I can start using immediately. Excited to try it!

Deep Work by Cal Newport

Experimenting with parallel computing using node worker_threads

I’ve wanted to play around with worker threads in Node JS, so I put together this little repository that demonstrates how it all works. Check it out here.

In order to simulate multiple threads that are each processing data, each worker thread uses a randomly generated timeout between 100 to 700 milliseconds. In addition, it has a random number of loops (between 10 and 1000) that must be completed before the worker is terminated.

It’s kind of fun to watch the tasks run and automatically complete inside the terminal (check out the screenshot of the output up top).

Troubleshooting a (Royal) Kludge (RK G68): Sleep issues with my swanky new mechanical keyboard

TL;DR After a lot of testing and isolating devices, I’ve determined that the RK G68 RF receiver for my swanky new mechanical keyboard causes my Windows 10 machine to wake up immediately after putting it to sleep. And I’m not sure how to fix it.

Join me on an epic journey of heartbreak, anger, loss, triumph and sadness as I try to diagnose some sleep issues.

—-

So, the issue is that if I manually put my computer to sleep (Start Menu -> Power -> Sleep), the machine goes to sleep, fans turn off, and all that. Sweet! Then, after about 5 seconds, it wakes right back up. Uh, what?

I’ve done a number of debugging and testing steps which I’ll outline below (hopefully, this helps some folks in the future).

Let’s do a couple of finger stretches, put on our hacker pants, and open up PowerShell (with admin access). We can run a nifty command called powercfg /requests

I see the following output:

DISPLAY:
None.

SYSTEM:
None.

AWAYMODE:
None.

EXECUTION:
None.

PERFBOOST:
[DRIVER] Legacy Kernel Caller
Power Manager

ACTIVELOCKSCREEN:
None.

Great! But not really super helpful. We visit our friend, Google, and I see that there is a command to disable this:

powercfg -requestsoverride Driver "Legacy Kernel Caller" System

You haven’t lived until you’ve copy and pasted random commands from the Internet into your terminal. Let’s do it! I run that and make the computer go to sleep again. Monitor turns off, fans spool down. Yes! Yes?

Obviously, it immediately wakes up. No dice.

Ah, ha! Maybe read the command first, dude? The issue here is that the Legacy Kernel Caller is in the PERFBOOST category, not SYSTEM category. That’s easy to fix.

…but it isn’t.

Of course, you can’t actually disable the driver for items in the PERFBOOST category. Of course.

Hey, Google…

Next up: A suggestion to check waketimers. I have no idea what that is, but sure: powercfg -waketimers

There are no active wake timers in the system.

Okay.

Yo, Goooooooogle… again!

Ah, another command! powercfg -lastwake

Now we’re getting somewhere. We see that this is a USB device that is waking the computer:

Wake History Count - 1
Wake History [0]
  Wake Source Count - 1
  Wake Source [0]
    Type: Device
    Instance Path: USB\VID_25A7&PID_FA70\8&e5ec113&0&4
    Friendly Name:
    Description: USB Composite Device
    Manufacturer: (Standard USB Host Controller)

But… how do we determine what it is? Looking at the path, we see VID and PID. That means:

Vendor ID: 25A7
Product ID: FA70

Let’s Google those: It turns out, the vendor is Areson Technology Corp and it looks like they make RF receivers for various input devices, such as wireless mice. Interesting! No hits for the product ID. That’s fine, there’s probably more types of RF receivers on planet Earth than there are people.

But that gives me a starting point.

I decide to start unplugging various devices and put my computer to sleep.

  • Unplug Logitech USB receiver: Still wakes up.
  • Unplug Anker USB Bluetooth receiver / transmitter: Still wakes up. I feel like I’m not having much fun anymore.
  • Unplug this random, unlabeled RF receiver: Hey, my keyboard input stopped working from my mechanical keyboard! Ah well. Go to sleep computer…

IT DOESN’T WAKE BACK UP!!!!

Victory. Party dance. Switch out the hacker pants for party pants. Now we’re getting somewhere!

I plug the receiver back in and open device manager. I go to the keyboard section (randomly, there are like 4 different devices listed there). I open the properties dialog box for each of them, go to the Power Management tab and uncheck “Allow this device to wake the computer.

I got you now, pesky sleep problems! :blow-smoke-off-gun-gif-dot-com-dot-net:

I put the computer to sleep.

IT IMMEDIATELY WAKES BACK UP!

I’ll be honest. There was a lot of screaming, kicking, swearing. My dog got up and left the room (he never does that). I almost knocked over a coffee cup onto my keyboard and I DIDN’T CARE.

Okay, fine.

No big deal, really. I’m not okay, you’re okay.

On a hunch, I expand the Universal Serial Bus controllers section inside the device manager. Sure enough, there are a bunch of things that say USB Composite Device. You might remember from earlier (but probably not), that a “USB Composite Device” was called out using the --lastwake command.

If you open up the properties for each USB Composite Device and go to the events tab, you will see the device ID in the information section. Keep looking until you find the device ID that was called out: USB\VID_25A7&PID_FA70\8&e5ec113&0&4

Click. Close. Click. Close. Click. FOUND IT!

Device USB\VID_25A7&PID_FA70\8&e5ec113&0&4 was configured.

Driver Name: usb.inf
Class Guid: {36fc9e60-c465-11cf-8056-444553540000}
Driver Date: 06/21/2006
Driver Version: 10.0.19041.488
Driver Provider: Microsoft
Driver Section: Composite.Dev.NT
Driver Rank: 0xFF2003
Matching Device Id: USB\COMPOSITE
Outranked Drivers: 
Device Updated: false
Parent Device: USB\VID_0BDA&PID_5411\7&b8f002b&0&2.

Sweet, now to just open up the Power M…. THERE IS NO POWER MANAGEMENT TAB.

My dog came back. He immediately left again. You can probably guess why.

Back to Google again:

“Ensure drivers are updated”.

Okay. Sure. Blah, blah. But maybe it’ll work. It won’t though. I already know. Who am I kidding?

The best drivers for your device are already installed.

Fine. I’ll just uninstall the driver.

Oh, cool, now my keyboard doesn’t work.

BUT YOU KNOW WHAT?! MY COMPUTER STAYS ASLEEP!

Head, meet Desk. Desk, meet Head.

—-

A few other things to note.

    • If I have a USB-C cable plugged into the keyboard, it will stay asleep (even though the RF receiver is still plugged in).
    • If I turn off the keyboard itself, it will stay asleep.
    • If you just walk away from the computer, it will go to sleep (according to my power plan settings — 15 minutes). I suspect this is because the RK software (I’m on version 2, by the way, which I think just came out and the latest firmware) is setup to put the keyboard to sleep after about 5 minutes or so. I really haven’t tried to experiment with this because I DON’T CARE ANYMORE.

(I do care. Deeply. I just can’t right now.)

We are all just algorithms…

I’ve long joked that “we’re all just algorithms in some engineer’s machine.”

But it’s kind of true.

I recently finished reading Homo Deus: A Brief History of Tomorrow by Yuval Noah Harari, which imagines what the lives of our children, grandchildren, and beyond will be like and how technology will affect them.

We generate copious amounts of data each day and give our personal electronic devices and social networks almost unfettered access to all of it. Everything from how long we sleep, how often we exercise, where we go each day to the types of songs, movies and books we like.

There was one passage from the book that I found both amazing and frightening:

A recent study commissioned by Google’s nemesis – Facebook – has indicated that already today the Facebook algorithm is a better judge of human personalities and dispositions than even people’s friends, parents and spouses. The study was conducted on 86,220 volunteers who have a Facebook account and who completed a hundred-item personality questionnaire.

The Facebook algorithm predicted the volunteers’ answers based on monitoring their Facebook Likes – which webpages, images and clips they tagged with the Like button. The more Likes, the more accurate the predictions. The algorithm’s predictions were compared with those of work colleagues, friends, family members and spouses.

Amazingly, the algorithm needed a set of only ten Likes in order to outperform the predictions of work colleagues. It needed seventy Likes to outperform friends, 150 Likes to outperform family members and 300 Likes to outperform spouses. In other words, if you happen to have clicked 300 Likes on your Facebook account, the Facebook algorithm can predict your opinions and desires better than your husband or wife!

This is one of the main reasons why both Google and Facebook have some of the largest (and most effective) advertising networks on the internet.

They fundamentally know who you are and what you like and know us better than we know ourselves.

Indeed, in some fields the Facebook algorithm did better than the person themself. Participants were asked to evaluate things such as their level of substance use or the size of their social networks. Their judgements were less accurate than those of the algorithm.

Excerpts from “Homo Deus: A Brief History of Tomorrow” by Yuval Noah Harari.

What I’m excited about in iOS 7

design_functional_gallery2

Has it really been seven years?

iOS 7: It’s crazy to think it’s been seven years since the first release of iOS / iPhone OS (and the original iPhone) way back in 2007. If you haven’t seen the original video of Steve Jobs’s keynote announcing the iPhone, I highly recommend watching it. It marked the beginning of a new era in how all of us interact with technology.

During today’s iOS 7 keynote, I tried to lay low and not read too much into what people have been saying on Facebook, Twitter, and the comment sections of Engadget and The Verge. The levels of snark are off the scale on days like this and for the most part, it doesn’t positively contribute to the conversation.

What I’m excited about

Everyone has their own likes and dislikes when it comes to their favorite mobile operating system. For the most part, I’m pretty excited about some of the new features announced in iOS 7. I think this release finally tackles a lot of limitations and features that people on other platforms have harped about for years and it’s significantly mitigated the remaining reasons to jailbreak.

One caveat: I write this without having had an opportunity to download the latest beta. That said, I’m really excited about 3 things in particular: namely, the new control panel (a simple swiper from the bottom of your screen brings up a panel offering quick access to common system settings), improved multitasking (Apple’s implementation is allegedly “smart” — apps know when to wake up, update / download data, and go back to sleep. This is huge for apps I commonly use like Feedly, Pocket, and Downcast), and an improved notification center (it’s something I was so happy with when iOS 5 was announced but it’s always felt so limited — now we can see a list of relevant and important information at a glance, in addition to all the missed notifications we’re collecting).

Screen Shot 2013-06-10 at 9.25.36 PM

What I’m not excited about

My one and only gripe (albeit, it’s minor in the scheme of things) are the default first party icons. (Others have been complaining about this as well.) Their overly simplistic look doesn’t really appeal to me and I’d actually argue that they look bad. I’m not sure what happened in the design process here but it’s something that detracts from the overall polish of iOS for me.

Anyway, its going to be a long wait until fall. But I’m excited about this new direction and can’t wait to see where companies like Apple, Google, and Microsoft continue to take us in the mobile space.

Working extra hard for those steps

20130507-223030.jpg

I love my Fitbit. It’s easily one of my favorite gadgets that I own. It’s unobtrusive, the battery lasts forever, and its presence subconsciously reminds you to get up and move around a bit more.

In my previous jobs, I’ve been lucky to have the option to walk to work instead of relying solely on public transit. This gave me a chance to get some extra activity in at the beginning and end of each day and reach Fitbit’s lofty goal of 10,000 steps per day (equivalent to about 5 miles). It’s something that I always enjoyed striving for.

With my new gig, I walk around the corner to BART, take that to my stop, hop right onto a shuttle and then get dropped off right in front of our office. This means I lose out on having a built in opportunity to get some activity each day. (The walk from the BART station to the office is a little bit longer that one would want to walk — about 5.5 miles each way.)

Fortunately, our campus has a free gym with some nice equipment. On days where Kerry and I don’t go to the gym in the morning, I try to go here after work and get in those much needed steps. It’s a bit crazy how hard you need to work for them. After a full day in the office, I’ll run 3 miles on the treadmill and feel extra accomplished. At least until I pull out my Fitbit and it says I’m short by about 1,500 steps. Wow.

So, I’ve been trying to make a conscious effort to get more steps each day. Make sure I go to the gym in the morning (and / or evening). Do a lap around our campus at lunch time while calling my parents. Walk to the grocery store in the evening when I get home. (Interestingly, recent studies seem to indicate that walking and running have nearly identical health benefits.)

It’s pretty crazy how much I’ve taken things like my simple morning walk to work for granted. But I’m happy that I’ve been able to make a conscious effort to do healthy things.