DIY Slack Busy Light

My adventure of recreating this DIY Raspberry Pi Busy Light by @eliostruyf for Slack.

A few months back, after listening to Deep Work and trying it out, I was hooked. I found I could accomplish the most difficult and daunting of tasks with absolute understanding and concentration. Though working from a small home with a young family and a couple of pets, needing to communicate at work, and my own personality traits, the absolute best I can do is 90 minute spans. 90 minutes of head down, no notifications, no distractions, no Slack, concentrated work – followed by a bit of a break, then another session. (I realize this is likely more Pomodoro technique than off-to-a-cabin-for-a-week true deep work, however the high level premise is the same, I get into a state of flow).

Setting up less notifications in my life, filtering all input, building timers, blocking out time for sessions, remembering to do it, and sticking to it, was all the easy stuff. Avoiding my family’s interruptions, was impossible. My wife, three year old daughter, and eleven month old son are all living their lives in our small home, feet away from me at any given time. They would randomly pop in, yell, knock, throw things, cry, text, ask, poke, question, hug etc. Breaking the session. Not only demotivating as it scratches the record on my focus that I just mentally committed too, but it would take around ten or more minutes to refocus and realign after they had left, leaving me a bit scrambled and a bit behind. Best illustrated in this comic:

My wife sympathized with me, and we both knew we needed some sort of way to indicate I was in these sessions, or on a call. The classic ‘door open/close’ or ‘headphones on/off’ wouldn’t work in our family, and shooting a text seemed unideal as that may backfire, ignite a conversation or trigger some reminder that may fill the brain with life instead of work. We both agreed that some sort of red light outside the door would be best.

I was thinking just a single LED light. I’d drill a hole in the door jam, and run some wires from a Raspberry Pi or other small computer or bluetooth device to turn the light on or off. This was the plan.

Continue reading DIY Slack Busy Light

Albert Dashboard

This project is incomplete, a work in progress.

A NodeJS Express app alternative to the now deprecated Panic Statusboard.

This app features stock widgets that can be configured within a config file in the app, as well as BYOD (bring your own data) widgets that require external data in the form of JSON blobs. Widgets refresh at custom intervals, keeping everything relevant.

App can stay open on a second monitor all day using Geektools, this shows the web page without browser menus etc. This makes the app appear to be a wallpaper, allowing you still use the second monitor as a workspace when needed. Because of the high contrast, this could be used as a custom magic mirror.

Stock Widgets:

  • Analog looking Clock
  • Time zones list
  • Calendar days
  • Weather (via the now restricted DarkSky API)

BYOD:

  • Table
  • Big Numbers
  • Custom HTML
  • Calendar Heat Map
  • Graphs

Stop Alerts From Shared Google Calendars in iOS / macOS Calendar.app

Tips for silencing calendar events that don’t matter, leaving only the ones that do.

At work, I’m shared a whole bunch of Google Apps / G Suite calendars that are very relevant for looking up events, but none of which I need to actually alert me. For several weeks, I was plagued with dozens of notifications that weren’t relevant to me whatsoever, and made a sea of noise that took away from the few importance of the tasks I actually needed to alert me. Meetings were missed.

I tinkered with Notification settings over and over, but nothing worked. For me for whatever reason, the solution to this wasn’t straight forward. It turns out you need to explicitly silence specific calendar alerts – here’s how:

macOS

  1. right click the noisy calendar in the sidebar
  2. Get Info
  3. Select “Ignore Alerts”

iOS

  1. Calendars
  2. Hit the (i) button for the noisy calendar
  3. Turn off “Event Alerts”


I presume there’s a similar process for watchOS.

Troubleshooting xdebug setup on VVV with VS Code

Some tips for troubleshooting setting up xdebug on VVV while using VSCode and Felix Becker’s PHP Debug extension and BrianGilbert_‘s Xdebug Helper for Firefox add-on.

Ensure xdebug is turned on within vvv

You may check xdebug status by taking a peak at your servers http://vvv.test/phpinfo/ page. If not on, via https://github.com/Varying-Vagrant-Vagrants/VVV/wiki/Code-Debugging we can toggle it on by accessing the virtual machine via ssh, then running a command that will turn xdebug on and restart PHP:

$ cd ~/your/location/for/vvv/
$ vagrant ssh
$ /vagrant/config/homebin/xdebug_on

The xdebug_on command is supposed to work without the full path, but I haven’t much luck with that. As a second saver, I store this full path in my text expanded since every time the machine is restarted xdebug being on does not persist and it will need to be manually turned on. A bash_alias entry could be made as well.

Ensure the browser extension is turned on

Yes, simple, but often forgotten.

Ensure you’ve started debugging in VS Code

Again, yes, simple, but often forgotten.

Ensure VVV is up to date

Older versions of vvv have compatibility issues with xdebug and php. Ensure you’re running the latest version of vvv, that vagrant itself is up to date, and that you’re using the latest version of php.

Turn off “Everything” breaks

Sometimes xdebug works while setting it up, VSCode pops up, but it stops on a breakpoint that isn’t the one you specified, it’s a random file from your app. This is an error that was picked up and xdebug stoped on because the default VSCode extension has it specified to break on “everything”. Unselect this in the Debug sidebar:

Check the xdebug profile is correct

Via the debug sidebar (shift+cmd+d), we’ll view our xdebug configuration file. Here’s an example of a WordPress plugin delete-thumbnails and the path I used

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "pathMappings": {
                "/srv/www/vvv-vip/public_html/wp-content/plugins/delete-thumbnails": "${workspaceFolder}"
            },
        }
    ]
}

Two important notes:

  • VVV has two initial paths to get to your sites, /srv/and /vagrant/, the latter is a symbolic link which xdebug does not understand, you must use /srv/
  • Other tutorials may say to use ${workspaceRoot}, this variable is deprecated in favor of ${workspaceFolder}

Try a breakpoint outside of your current script

We usually want our breakpoints on what we’re working on, and we’re frustrated when xdebug doesn’t pick up on the breakpoint, so we dig around our config to check what’s wrong. Let’s first make sure that our desired code is actually running and capable of breakpointing, after all, the code not running might be why we’re firing up xdebug!

Add a breakpoint at the root of your application, somewhere you know runs 100% for sure. In WordPress, this will often be in either WordPress’ /index.php file, or the primary file in your current theme or plugin. For this plugin I’m working on, I checked that the plugin is activated, and I’ve placed a breakpoints on a fake var on the main fire which I know for sure loads:

Is your VSCode the nightly build?

I’ve heard of users being unable to run xdebug while using their beta releases. Best to always use the stable releases.

Separating Work & Life

This is something we know, we hear about, we’re reminded about, but we rarely do. After all, contrary to stereotype, we’re the hard working millennial who don’t know how to quit.

One of the many parts of preventing chronic burn out is to properly separate work and life, with no exceptions. For me personally, I found the most impactful method to separating the two was by untethering my devices from each other and silencing almost all notifications.

I’m not going to go into the obvious here, but reading work emails during dinner, takes you away from life around you. Getting a text message notification from a friend while you’re in the middle of writing an email to your manager takes you away from work. Each app on your respective device is prying for your attention with notifications of messages, new posts, upgrades, releases, etc. It’s distracting and disruptive, it weighs on you mentally to respond sooner than later or take action.

After reading the article linked to above, I realized yes, I must have something like chronic burn out. I needed to start behaviors to correct the course I’ve been on for a decade now. The biggest impact for me was having two devices, for two different purposes: one for work, one for life. With little to no conflicting overlap. This physically forces me to ‘quit’ when I don’t know how to myself.

To separate like this, I needed to think of “work” as more than my 9-5, I need to think of work as my “career” since in our generation, building our personal “brand” and a social presence (like this blog post, or contributing to open source) is part of the expectations in our careers. I’ve also bundled in household “admin” tasks like bills and research (for things like purchasing appliances) into “work”. It’s admin work and it’s actually ‘work’, to do it effectively you need concentration and alone time (things life doesn’t usually offer).

Separating devices was a bit of a hurtle to undo as over the last 5 or so years, Apple has designed their ecosystem to be seamless between devices. Everything on all devices. This was a selling feature and I ate this up with a spoon and loved it! SMS Text messages on my macbook? Sold! Check out the homepage of any modern app, their first selling feature is it works both on smart watches and desktop. This was and is such a mistake, and only now am I realizing how problematic and damaging this meshing of work and life is.

To stop this, I first made a clear list of what goes where:

Laptop (career)

  • Things (todos)
  • Bear (notes)
  • Slack
  • Email
  • Documents
  • Firefox
  • Other work Apps

Phone (life)

  • Reminders (hubbydo, grocery lists)
  • Notes.app (life notes)
  • Messages / Texts
  • Photos
  • Safari
  • Email
  • Slack

Each device gets it’s a seperate app for the same thing. I used to belive in having “everything in one place”, but having two Todo list apps, one for each device, has been a game changer.

I then visited each devices iCloud settings I disabled almost all of the device sync settings (Contacts being the one exception).

I took this steps further by disabling all notifications for both devices, turning each apps notifications to “none”. I then did a second pass, turning on things that were truly actionable or urgent: Calendar events (for important calendars only), Phone Calls from family members, Slack messages on desktop. That’s it. No pings for new emails, no pings for updates, releases, new features, new posts, no text messages during work. Everything besides direct real-time requests that require immediate action, is silent and asynchronous. I check my emails when I want to, not when my devices tells me to.

This is contrary to what these devices offer us, but this is how life was only like a decade ago, and honestly, it’s so much better. This makes these rules in my life so much more manageable:

  • When I’m working, I’m working.
  • When I’m “offline”, I’m living my life.
  • The only notification I receive are related to what I’m currently doing, and are actually critically important, and actually require immediate action.

Since implementing this, my phone is now terribly boring, I rarely pick it up – but now I’m not thinking about work first thing in the morning during breakfast like I used to. I’m not brushing my teeth at night mentally preparing my next-steps for an email I just received. This change makes me feel so much more energized and refreshment for my work day, and allows me to be more present and enjoy small things in life a little more.

This isn’t a miracle ‘fix all’ post that suggests if you do this all problems disappear – this is just something that worked for me and has me feeling healthier, balanced, and more productive at work.