Showing posts with label remote-work. Show all posts
Showing posts with label remote-work. Show all posts

Friday, March 12, 2021

Jon's Five-Monitor Work-From-Home Desk Configuration: 2021 Edition

Although many folks are working remotely these days due to the Coronavirus pandemic, I've had longer than most to accumulate a nice desk configuration!  For the past seven years now, I've worked remotely full-time from my home in Michigan.

Here's my current desk setup:

Five-monitor Mac desk configuration

My current primary computer, a 2019 16" MacBook Pro, is the screen on the far left.  Of the other four monitors, two are connected directly to the MacBook Pro via USB-C cables; the remaining two are connected to my OWC 13 Port Thunderbolt 3 Dock -- that's the component sitting on the desktop behind my keyboard.

Delta since 2018

I didn't purchase and assemble this setup overnight! Instead, I've been able to add a part every year or so, building it up over time. This current setup is a nice improvement over my 2018 desktop configuration:

My 2018 monitor configuration

The current setup replaces that smaller rightmost monitor with a new portrait orientation monitor; the remaining monitors are the same, just repositioned.

Application layout

One reason I've opted for this setup of multiple monitors, as opposed to a single ultra-large monitor -- in addition to having had the ability to slowly purchase and assemble the setup over a period of years  -- is that the multi-monitor setup lends itself really nicely to having a particular application always be placed at a particular location.

It is a really nice luxury to just be able to just look at a particular screen to get a view of a given application, instead of having to Cmd+Tab or otherwise search through multiple windows to find an application that I'm looking for. 

Here's how I typically have my applications arranged in this current setup:

5-monitor application arrangement

Leftmost monitor

As mentioned above, this is the MacBook itself. I have it up on a stand, both to better match the vertical positions of my other monitors, and to get a little bit of desk real estate back to store some small items under the stand.

I typically have my (multi-tab) iTerm2 terminal window running on this monitor, as well as a music player in "mini" mode. 

I've been using the Mac App Store free app MiniPlay for the latter recently, and it's been working really nicely. In addition to being very similar in size and UI layout to my own "Schneider's Eleven" minimal skin for Windows Media Player that I previously used on a daily basis when I primarily developed on a Windows machine, it seamlessly supports both music player apps that I typically use, Music (formerly iTunes) and Spotify.

Left portrait-orientation monitor

This is where I view and write code! As I've blogged previously, I find it really productive to be able to view a long swath of code at once on the tall monitor.

 (An exception is when I'm pairing with someone over screen-sharing software, since most of my peers don't have a portrait-orientation monitor. In that case, I typically drag the IDE over to my primary monitor.)

Bottom landscape-orientation monitor

This is my "primary monitor". I keep the Mac's Dock on this monitor. I typically have my main web browser window open on this monitor. 

I'm currently composing this blog post on this monitor. 😁

Top landscape-orientation monitor

As mentioned in my 2018 post (and more visible in my 2018 image above), this monitor is mounted on a pole anchored to my desk via a WALI Extra Tall Monitor Desk Mount. 

Sometimes I've got nothing happening on this monitor -- when I'm sitting, I have to crane my neck just slightly to look up at it -- but when I need a place to put some secondary window like a database/SQL query window, a code diff, or just another browser window, it's another place I can do so without obscuring any of my other open apps!

Right portrait-orientation monitor

This is where I keep my communications windows. The bottom portion is dedicated to Slack while I'm at work. I use the top portion for other communications apps like Messages and WhatsApp.

Phone stand

The small, portrait-orientation "screen" in front of my MacBook is an iPhone 12. I finally caved and bought myself a new phone, replacing my venerable iPhone 6S. Despite the lamentable lack of headphone jack technology, I have been otherwise been enjoying the improved battery life and memory on the new device.

The phone's "stand" is a magnetic wireless charger from Choetech, which takes advantage of the new MagSafe technology in the 12. (The phone's position while on the stand doesn't actually obscure any of the area of the MacBook monitor behind it when I'm sitting at my desk, as it appears to do in this photo.)

The app that you can see running on the phone is my own free App Store app, Desktop Journey.  I developed it because I wanted my phone to be doing something useful while sitting and charging in its stand on my desk. I figured an at-a-glance "dashboard" view of the time, my next calendar event, my current Reminders app reminders, the weather, and occasional prompts to stand up and stretch or do a few reps of an exercise would be ideal. 

After failing to find such an app anywhere on the App Store, I decided to build it myself, and created Desktop Journey! It's a completely free and ad-free app (except for the weather functionality, to help cover my costs for the non-free weather API that I'm using to query global weather data), and collects no personal data. Free Desktop Journey download on the App Store.

Small top-left screen

The last remaining little screen, at the top-left, is a Raspberry Pi running Pi-Hole, a new addition to my home network, a Christmas gift from my wife Melissa this past winter. With my local high-speed Internet monopoly having started imposing a bandwidth cap -- which my family regularly bumps up against, just through normal everyday usage -- I'm happy to take advantage of the opportunity to save some bandwidth by declining to send outgoing telemetry and requests for ads from my local network.

Wallpaper

The image is of Peyto Lake at Banff National Park, which my family had the good fortune to be able to visit in 2019. Banff -- along with the other nearby national parks in Canada, Jasper and Yoho -- is the most beautiful place I've ever visited. I hope to be able to go back and visit again someday!

As MacOS still lacks built-in support for spanning an image across multiple monitors, I used the App Store paid app Multi Monitor Wallpaper to generate this wallpaper.

Wednesday, February 20, 2019

Throttling Skype bandwidth on macOS

I'm a full-time remote worker, with all of my teammates located together in the office. To help maintain close communication with my team, I have a "telepresence" Skype call with the office that's always on, so my teammates and I can see and talk to one another.

We're currently using Microsoft's Skype as our videoconferencing solution, as it is the only one I've found that (1) works reasonably reliably; (2) supports auto-answer (so I can activate the call without someone in the office needing to manually answer it every day); and (3) is free.

Unfortunately, as with many Americans -- particularly in localities where only a single company provides high-speed land-line Internet -- my Internet service provider recently started imposing a bandwidth cap on my monthly Internet usage. My cap is 1000 GB per month. Between my job, and my family's normal Internet usage, we've been either coming close to, or exceeding, that cap on a regular basis.

As one part of a strategy to try and keep my home's Internet usage under the cap, I looked into how much bandwidth that always-on Skype call was using. Using the Network tab of my macOS copy of Activity Monitor, it turns out that it was quite a bit: An average of around 350 KB per second (with peaks over 400 KB/sec).


Over the course of the typical 6 hours per day where my team (Pacific Time / GMT -8) and I (Eastern Time / GMT -5) are both online, that works out to about 7.5 GB per day; which in turn works out to about 150 GB over a 4-week period where I'm in the office 5 days per week.

Unfortunately, macOS 10.14 Mojave does not provide an out-of-the-box a way to limit the bandwidth used by a particular application.

Skype for Mac (version 8.39) itself also doesn't provide a quality slider or other rate limiter; it always appears to consume as much as it can.

Complicating matters, Skype 8 also doesn't specify or allow configuration of which specific TCP ports it uses, for possible QoS throttling at the router.  Per a page on the Skype support site, Skype might be using TCP ports anywhere in the range 1000 through 65000.

After a fair amount of research and dead ends, the working solution that I finally landed on was the free version of a software package named Murus, which provides a GUI wrapper around the Packet Filter firewall functionality that comes with macOS.

My Murus configuration is based on a very helpful post on the Murus forum by user "hany".  The variant of hany's instructions that I used is as follows:

  1. Install Murus.
  2. In the main Murus window, in the "Services Library" pane, add a new custom service named "Skype" (or whatever you like). 
  3. In the Ports field, enter 10000:22465, and then on a new line, 22467:65000.  (I excluded port 22466 because per Slack Support, that port is used for Slack calls, and I wanted those to remain highest quality.)
  1. Drag the new service to the "Managed Inbound Services" pane.
  2. On your new Skype service, click the little speedometer-looking icon to bring up the Bandwidth dialog.
  3. Set your desired values for the Upload Bandwidth and Download Bandwidth. I found that values of 768 Kb/second resulted in very usable (if slightly blurry) Skype calls.
  1. Press Cmd-S (or select Firewall > Save Configuration from the top menu).
  2. Click the Play icon button in the top toolbar of the Murus window to start limiting bandwidth. (Press the Stop icon button again later to turn the throttling off again.)
  3. I have found that I sometimes need to quit and restart Skype to see the changes take effect, while observing the bandwidth usage in Activity Monitor.
This is admittedly a non-ideal, somewhat brute force solution, since it affects not only Skype, but any application running on the computer using TCP or UDP ports in the 10000+ range.

However, it has proven to be effective: With this Murus configuration running, Activity Monitor shows my incoming (download) Skype bandwidth dropped to around 80 KB/sec.


That works out to about 34.5 GB of usage over a typical 6-hour-day, 20-day work month -- a savings of some 115 GB over running with no throttling over the course of the month, representing an 12% or so usage reduction in my imposed 1000 GB/month cap.  Not incredible, but not terrible, either!

Thank you to the Murus team for the software; to "hany" for the posted on the Murus forum that helped me with this solution... and to my local ISP monopoly for the opportunity to undertake this interesting learning experience!