With Liberty and Justice for All

In 2008, my daughter Allie and I recorded seven episodes of a podcast called With Liberty and Justice for All. Allie was in 5th grade learning about the election in school. It was my idea to create a podcast and she was enthusiastic, for seven episodes anyway. Enjoy!

Episode 1 – The 2008 Candidates

Episode 2 – Vice President

Episode 3 – Issue: Iraq

Episode 4 – Issue: Education

Episode 5 – Debates

Episode 6 – Campaign and the Economy

Episode 7 – Electoral College

Pop!_OS Tiling – Always Float

I’m a fan of tiling window managers. Pop!_OS introduced tiling windows, known as Pop Shell, in version 20.04. While the Pop implementation is not as powerful and functional as a tiling windows manager, like i3 or Awesome, it’s a great start but needs some improvements. In my post, Pop!_OS Switch Workspaces with Super + Number, I recommend adding keyboard mapping to move between workspaces easier.

Some windows don’t work well in tiling mode. The Settings and Calculator applications work better as floating windows

Calculator opening in tiling mode
Calculator opening as a floating window.

The Pop Shell team is working on improvements for managing a combination of floating and tiling windows. In the meantime, you can define specific windows to open in floating mode by default. The .config/pop-shell/config.json file below defines the Settings window, “Gnome-control-center”, and Calculator, “Gnome-calculator”, to open in floating mode.

{
"float": [
{
"class": "Gnome-control-center",
"title": ""
},
{
"class": "Gnome-calculator",
"title": ""
}
],
"log_on_focus": false
}

Currently, only the window class is required in config.json.

How to determine the window class

Finding a window class is simple. Open the application (window). Also open the terminal. In the terminal, run the command: xprop | grep WM_CLASS, then click on the window you want the class for. Back in the terminal you will see the class information. Use the second string as the class.

My Config

{
"float": [
{
"class": "Gnome-control-center",
"title": ""
},
{
"class": "Gnome-calculator",
"title": ""
},
{
"class": "zoom",
"title": ""
},
{
"class": "Org.gnome.Nautilus",
"title": ""
}
],
"log_on_focus": false
}

Moving Forward

In the future, I expect a user interface control will be used to update this config.json file. In the meantime, it’s easy enough to update it manually.

Lessons from Computer No POST

A learning experience.

At the beginning of the year, I built my first computer. This post is about my first hardware issue with that computer.

Hardware Failure

I should title this section, ‘User Failure’ or ‘Idiot’. My computer has been fantastic and worked flawlessly until I decided to upgrade, adding a second m.2 drive for expanded storage. While adding the new drive, I turned my back, and the computer fell from my desk onto the floor. Ugh. Then it would not boot.

No POST

The computer appeared to turn on, I could see lights and fans were spinning, but nothing appeared on the display. I’ve since learned this behaviour is called a “no post”. A POST is a Power On Self-Test, a process that runs on each boot and tests the system hardware before loading the operating system. On a successful POST, you will likely see the motherboard logo and option to enter the BIOS.

Successful POST

Resolving No Post

There is a wealth of information online to help resolve a no POST. It boils down to understanding the minimum hardware you need for a successful POST and eliminating each as causing the problem. Basically, with just the CPU, Power and RAM you should get a successful POST.

MSI, the makers of my motherboard, provide a help page “How to fix a PC with powers up but no display?

My Steps

I removed the parts not required to have a successful POST, the m.2 storage, Wifi card, and GPU. I disconnected all power cables and connectors except the motherboard power, CPU power and power switch connector. I verified the CPU and RAM were seated properly. The only external connections were to the power and display (via HDMI port). On power-up, the fans spun up, but no POST.

Just the minimal parts.

RAM
I tried each memory sticks alone and verified they were in the right location. Power-up, no POST. It was unlikely both sticks of RAM were faulty. Move onto BIOS.

BIOS
I used a jumper to reset the BIOS, removed the battery, and pushed the CMOS reset. Power-up, no POST. I have three parts left, Power Supply, Motherboard, and CPU.

Power Supply
Since the fans are spinning and lights are on, I assumed the power supply was working fine. My research explained that the power supply could be faulty and still provide some power, like a battery that powers the radio but will not start the car. I purchased a power supply. Again, power-up, no POST.

Motherboard
Unlike the power supply, which I could purchase at Best Buy fifteen miles away, I had to order a motherboard online. Again, power-up, no POST.

RAM Part 2
Since I had to wait a few days for the motherboard, why not replace the RAM. Back to Bestbuy. Power-up, no POST.

CPU
My research indicated the CPU was the most unlikely problem, but I had nothing else to replace. I ordered a new CPU and waited another two days. Ugh, power-up, no POST.

The Solution

Less the case, I built a new computer and had the same problem. This reminded me of my father’s old joke, “The lumberjack said, I used the same axe for 25 years, I’ve replaced the handle ten times and head five times”. Something was going on here I did not understand. Clearly, the issue was between my ears.

There is a set of lights on the motherboard called Check EZ Debug LED indicator, used for debugging the POST process. The VGA indicator was lit during each test, which made sense because that is the problem I was trying to solve. If I removed the RAM, the RAM indicator would light up.

EZ Debug LED Documentation

I put the GPU back into the system, and the VGA indicator remained on. This is when MY light went on. While there is an HDMI port on the motherboard, there is no onboard graphics. The CPU (or motherboard) would need to have graphics support, which my CPU does not. The fine print regarding Onboard Graphics for the MSI X470 Gaming Plus reads:

  1. Only support when using Radeon™ Vega Graphics and 2nd Gen AMD Ryzen™ with Radeon™ Graphics/ Athlon™ with Radeon™ Vega Graphics Processors

The issue, all along, was the GPU. One more trip to Best Buy and I was up and running.

All new parts, up and running.

Conclusion

The issue was very straight forward, but my lack of experience turned a one-day minor problem into a ten-day, painful, costly issue. If there was graphics support on the motherboard or CPU, I would have discovered the issue quickly. Because there wasn’t and I didn’t understand that, I saw the same No POST issue with the GPU and without it.

My take away: The presence of an HDMI port does not mean it’s usable, onboard graphics must be supported.

I did enjoy the learning process, and I’m more comfortable inside the computer.

Your first Linux distro should be Pop!_OS

For developers, I recommend using Pop!_OS as your first Linux distribution. After using MacOS for fifteen years, my first Linux experience was with Pop!_OS, and I’ve explored other Debian and Arch-based distros. I’m currently using Pop!_OS and EndevourOS.

Pop!_OS is an excellent transition distribution for developers moving to Linux for the following reasons:

Made by developers for developers.

Pop!_OS is maintained by System 76, a leading manufacturer of professional hardware designed to run Linux. In the hands of System76, there is a focus on performance, reliability, and usability for the developer. System76 descried Pop!_OS as “an operating system for STEM and creative professionals who use their computer as a tool to discover and create.”

Hardware Support

While Pop!_OS comes pre-installed on System76 computers, it will install on any (Linux friendly) computer. While there are distributions designed to run well on old, underpowered hardware, I have found Pop!_OS to be lightweight enough to perform well on a broad range of hardware. I’m currently running it on a System76 Laptop, custom-built tower, and the good old classic Thinkpad T420. Pop!_OS also supports modern, cutting edge hardware and is often the choice of gamers.

Premium Interface

As a recovering Mac “fan boy”, I appreciate an operating system that looks and feels premium. Before switching to Linux, I had the impression that Linux would look and feel old. While some Linux desktop environments look old, many, like Pop!_OS and Elementary, are beautiful. Out of the box, without customization, Pop!_OS is not a step down from Mac OS.

No Clutter

The Pop!_OS desktop is clutter-free. No dock. No Menu. Just a status bar at the top of the window. This minimal interface can be a jarring when coming from Windows and macOS. I now appreciate the OS getting out my way and valuable screen space is reserved reserved for my work.

While it’s possible to add a macOS like dock (with Dash to Dock), I encourage people to use op!_OS defaults for a few weeks before making changes. As I mentioned earlier, Pop!_OS is made by developers; the default settings are purposeful.

Pop Store

While Pop!_OS comes with very few applications installed, the Pop Store provides one-click installation of hundreds of applications. From Slack and VS Code to photo editors, video editors, office tools, and games. The Pop Shop catalog has grown a lot in two years. It supports APT, and Flatpack installs.

Pop Store

Tiling Window Manager

Pop!_OS introduced a “tiling window” like feature with version 20.04. With tiling window mode on, windows don’t overlap. When a window opens, it splits the space with the existing windows. Without tiling windows mode on, Pop!_OS works like macOS and Windows, with floating windows. Windows are resized by you and can overlap. Tiling windows allow you to maximize screen space and increase productivity using keyboard shortcuts.

Tiled Windows – Browser, file manager and terminal.

Pop!_OS also supports Workspaces, which are virtual desktops. The combination of Tiling Windows, Workspaces makes for a powerful combination. (I make a minor tweak to the keyboard shortcuts to switch workspaces with Super + Number.)

Tiling Windows on Dual Monitors

In Summary

Switching to Linux can be challenging. Choosing a Linux distribution that looks and works great out of the box makes the transition easier. In my experience, Pop!_OS ‘just works’, allowing you to get comfortable in the Linux world.

Pop!_OS Switch Workspaces with Super + Number

About Titling Windows

Pop!_OS introduced a “tiling window” like feature with version 20.04. With tiling window mode on, windows don’t overlap. When a window opens, it splits the space with the existing windows. Tiling windows allow you to maximize screen space and increase productivity using keyboard shortcuts.

Pop!_OS Tiling Settings

Pop!_OS also supports Workspaces, which are virtual desktops. The combination of Tiling Windows, Workspaces and dual monitors makes for a powerful combination.

I like to setup Workspace 1 for communication with e-mail and chat clients (Slack, Telegram, Mattermost…). Workspace 2 for developments with terminals, IDE, and browsers. Workspace 3 for documentation with text editors, note taking apps and browsers.

Dual monitors with tiling windows.

Keyboard Bindings

Pop!_OS has a set of keyboard shortcuts to navigate between windows and workspaces. I find them inadequate when it comes to switching between Windows and Workspaces. With the additional keyboard bindings below you can switch between Workspaces using SuperKey + Number.

Pop!_OS Tiling Shortcuts

SuperKey + 1 switches to workspace 1 and SuperKey + 2 to workspace 2, etc… up to 9. Add the Shift key, and the current focus window moves it to the workspace.

This minor change to Pop!_OSs titling window keyboard shortcuts make it far more usable.

Copy and paste the code below at the terminal.


gsettings set org.gnome.mutter dynamic-workspaces false
gsettings set org.gnome.desktop.wm.preferences num-workspaces 8

gsettings set org.gnome.shell.keybindings switch-to-application-1  []
gsettings set org.gnome.shell.keybindings switch-to-application-2  []
gsettings set org.gnome.shell.keybindings switch-to-application-3  []
gsettings set org.gnome.shell.keybindings switch-to-application-4  []
gsettings set org.gnome.shell.keybindings switch-to-application-5  []
gsettings set org.gnome.shell.keybindings switch-to-application-6  []
gsettings set org.gnome.shell.keybindings switch-to-application-7  []
gsettings set org.gnome.shell.keybindings switch-to-application-8  []
gsettings set org.gnome.shell.keybindings switch-to-application-9  []

gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1  "['<Super>1']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2  "['<Super>2']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3  "['<Super>3']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4  "['<Super>4']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5  "['<Super>5']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6  "['<Super>6']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7  "['<Super>7']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8  "['<Super>8']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9  "['<Super>9']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-10 "['<Super>0']"

gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1  "['<Super><Shift>1']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2  "['<Super><Shift>2']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3  "['<Super><Shift>3']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4  "['<Super><Shift>4']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5  "['<Super><Shift>5']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6  "['<Super><Shift>6']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7  "['<Super><Shift>7']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8  "['<Super><Shift>8']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9  "['<Super><Shift>9']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-10 "['<Super><Shift>0']

Resources

Thank you to Jibar Ali Ouassao for this solution in the Pop Shell repo issue queue.

Shared Keyboard and Mouse

I have two Linux computers at my desk. A (closed) laptop connected to a monitor and a home grown tower connected to two monitors. Three monitors in all. I frequently switch between these computers and control them with one keyboard and mouse.

For the past few years, I’ve been using a Logitech wireless keyboard (K780) and mouse (M585) that support multiple computers. One computer is connected to the keyboard and mouse via a wireless dongle, and the other is connected via Bluetooth. A set of keys switches the keyboard between computer, and a button switches the mouse. While the switching works most of the time, sometimes there is a delay. It’s frustrating when keystrokes are delayed or missing.

I recently switched to a wired keyboard and mouse and control the switching with software KVM (Keyboard Video Mouse). After using this for a week, I wish I had made this change sooner. Barrier is an open-source solution that works on Linux, Mac and Windows.

This solution is for sharing a single keyboard and mouse with multiple computers. Each computer requires a monitor.

After installation, you set up one computer as the server, and others as clients. On the Barrier server, you add a screen for each client computer using it’s machine name and position it relative to the server screen. For example, my computer called “pop-os” is to the left of “rebel-tower”.

On the client machines, you identify the address of the Barrier server.

After Barrier is running on the clients and server, when working on rebel-tower and moving the mouse off the screen to the left, the mouse will begin moving on the pop-os screen. Wherever the mouse is active, the keyboard is active. You move the mouse to the computer you want to type on. This implementation is more natural to use than pushing keys and buttons, and it’s fast and smooth.

I have not used any of Barrier’s advanced settings, maybe someday. You can define keystrokes to switch computers and activate advanced functionality. Barrier’s Linux version does not support drag and drop between computers, but Mac and Windows is supported. While this feature could be useful, it’s not critical for me.

I’m always surprised by the quality and abundance of open source Linux applications.

Road Trip to Arizona

I recently returned from a trip to Arizona, helping my daughter, Allie, move to Phoenix to pursue a PhD at Arizona State University. We drove from Rhode Island to Arizona. We drove 2,699.3 miles, over three and a half days, with two cars, a UHaul, four adults, a cat, and, a hedgehog.

Day 1 – Bristol, RI to Springfield, OH – 764 miles
Day 2 – Springfield, OH to Emporia, KS – 764 miles
Day 3 – Emporia, KS to Albuquerque, NM – 674 miles
Day 4 – Albuquerque, NM to Phoenix, AZ – 419 miles

With the first day being the longest drive, we traveled approximately 12 hours on the first three days and 6.5 hours on the last day. We lost an hour each day with the time zone change. Choosing “no tolls” when planning the route took us off the main highways and only added an hour to the overall trip. I believe we took a more scenic, rural route.

While I expected the drive to be tedious and exhausting, it was relaxing and enjoyable. We switched drivers about every 3-4 hours and stopped for bathroom breaks and gas every few hours. As we started each day at 5 am, in the dark, we ended each night around 5 pm, had dinner after the day’s drive was complete, and got proper rest each night.

Traveling with Pets

Draco is a 20lb, easy-going, cool, black cat, but we didn’t know how he would tolerate a four-day road trip. Fortunately, he remained cool, thanks to his mom’s preparation. Allie outfitted the back seat with a pet hammock that covered the backseat and prevented Draco from getting on the floor. He had comfortable blankets and a portable litterbox, which he never used in the car. Draco and Winston, a hedgehog, slept all day, which is what they do anyway. We stayed in pet-friendly hotels each night. Some charge a fee, and others are free. Winston had a full setup each night with a five-foot cage, running wheel, heat lamp, hay, food, and water. It was easy, but I didn’t do anything.

Draco sleeping in the car.
Winston in his carrying case.
Winston’s hotel setup.

Covid-19

The year 2020 will be memorable for the global pandemic, Covid-19. It wasn’t the best time to drive across the country, sleep in different hotels every night, have an extended stay in the country’s hottest zone, and fly home. Each US state has different guidelines and is in various phases of re-opening. To our dismay, there were no indications of a serious pandemic in our mid-west stops. Many, maybe most, people did not wear masks. We stayed at national chain hotels, and they were all excellent at following guidelines. My wife, Erica, did a thorough cleaning of the room each night, and we were all cautious.

New Mexico was the standout for implementing guidelines. Everyone wore masks and stores strictly enforced distancing. In Arizona, we had the impression they just realized the country was in a pandemic. There was a sign in the hotel indicating masks are required as of June 20. Really? In Rhode Island, they have been required since April.

Thanks to a doctor friend, we had two N-95 masks for the trip home. Both flights were full, with not an empty seat to be found. We wore the N-95s for 11 hours, with only a few minutes of relief for water and a small snack. Moving to the exit row with just two seats for the five-hour flight made is feel safer, but it likely didn’t make a difference.

Funny Moment

Unfortunately, the most entertaining moment was provided by me. Each day started with coffee and a gas fill-up. I pulled into the gas station, started the gas pump, and went into the store for milk. After paying for the milk, I hopped back in the Jeep and pulled away, taking the gas line with me. The hose, which was once connected to the pump, was now dragging behind the car. As gas poured from the pump onto the pavement, I ran inside to alert the attendant of the pending ‘breaking news’ explosion. I was a little panicked. Little did I know this was a regular occurrence; the hose has a quick release and shutoff. The attendant casually walked out with a bucket of sand to clean up the gas and had the hose reconnected with a minute or two. In the other car, my daughter was disappointed she didn’t get a photo of the event and proceeded to laugh for 20 minutes and share the experience with family via text.

Last Day

The last day’s drive from Albuquerque, New Mexico to Phoenix, Arizona was fantastic. While the terrain changed by the day during our journey, it changed by the hour for the last 420 miles. We went from 65 degrees Fahrenheit to 117 degrees in six hours traveling from the flat desert of New Mexico through the mountain ranges and into the desert of Arizona. We didn’t see cacti until we started to descend from the pine tree rich 6,000 ft mountain elevation into Phoenix’s valley. As the temperature rose, the cacti appeared. It was a breathtaking view for us New Englanders.

Because the purpose of our trip was moving, not sightseeing, we are thinking about a more leisurely trip across the US in the future.

Heading home.

Moving to VIM

After 30 years in front of the keyboard, I decided to refine my craft and learn to touch type. It’s been about a month, and I’m improving. Keeping my fingers on “home keys” got me thinking about how often I remove them to touch the mouse. All these keys at my finger tips and they are almost useless for navigation within a file. Hello Vim.

I’ve used Vim for editing text files on a server for years. I knew the basics: insert mode, save, and exit. One of the powerful features of Vim is its modes. The two primary modes are Normal and Insert. When in normal mode, the keys are used to navigate, copy and paste, find, and much more. You don’t need to mouse or cursor keys; in fact, you shouldn’t be using them. To modify text, you enter insert mode, which is the only mode in most text editors. The capabilities of Vim are mind-blowing.

To get started, I watched several videos on Youtube and began a slow transition. While it’s a gradual transition, you will see the benefits quickly. I hope to replaced VS Code with Vim someday. I love the idea of using the same tool proficiently on a desktop, VPS, or Raspberry Pi.

How to get started

My recommendation:

  1. Vim Mode – using your existing IDE, such as VS Code, adding a Vim extension to give you basic Vim workflow and key bindings. This is a good bridge from where you are today to Vim 100%.
  2. Six Part Series – Recently, Youtuber, The Primeagan, released an excellent six part series to learn Vim. His videos are educational and entertaining. Watch video 1 and don’t moved to the second video until you don’t need to think about basic navigation keys. I’m not through them all yet.
  3. Explore – There are many Vim tutorial available online. You them to explore the capabilities of Vim to do things easier and faster.

Improve your family gatherings over Zoom

It’s the spring of 2020, and we are all quarantined. Video conferencing tools, like Zoom, are being used daily for work and play. Family chats, games nights, and parties are a regular occurrence in the Cross family.

One of the challenges with family video conferences is when you have multiple people in the same home using separate devices. People scatter to different areas of the house so they can be seen and heard without echos and feedback, which defeats the purpose of gathering together. In the business world, people sit around a conference table and use a conference phone. Everyone uses a single microphone and speaker placed in the center of the table. You can setup the same configuration using a USB conference microphone.

At my home, we all sit at the dining room table with our computers or iPads connected to the Zoom call, and one computer connects to the audio on the Zoom call. All others connect to Zoom video-only. The audio designated computer connects to a USB conference microphone and uses that as the microphone.

I have a mic from MXL, the AC404 USB Conference Mic. It’s one of those things you don’t use often, but it’s very handy when the time comes, such as, a Football Fantasy Draft and Quarantine Party. There are a variety USB Conference mics available from $30 to $100.

Linux Content

Most of my education and entertainment (aka content) comes from podcasts and YouTube. My Linux journey started from those sources and continues today. While this list is fluid, in February 2020 my podcast and YouTube subscriptions include, in no particular order:

Podcasts

  • Linux for Everyone – Host, Jason, recently switched to Linux and has the switcher insight into Linux. He is a talented writer and entertainer.
  • Ask Noah Show – Weekly tech radio show with a Linux slant.
  • Destination Linux – A podcast from techies that love Linux.
  • Going Linux – Long time show (380+ episodes), a discussion format, much like my show TalkingDrupal.com. It’s just a good listen.

YouTube

  • Big Daddy Linux – A weekly live show and “spotlight” interviews with people in the Linux world.
  • Distro Tube – In depth videos about all things Linux.
  • Chris Titus Tech – Another switcher that shares how-to and review videos.
  • Joe Collins – Also known as EzeeLinux, educated on a broad range of Linux topics. His channel is a great resource learning in plain English.
  • Luke Smith – An open source, privacy guy. Simple and insightful.
  • LearnLinuxTV – A well rounded show about a variety of software and hardware topics.