Blog Posts

Roundup of PHP 8.4 Posts

I've recently written several blog posts for Zend (one of the brands I help manage at Perforce) covering changes in the recently released PHP 8.4. If you're curious what to look out for, and how to use some of the new major features, they're worth a read:

Continue reading...

Collapsing the Vivaldi Tab Sidebar

tl;dr: In Vivaldi, middle clicking the separator between the tab sidebar and the web page will either collapse or expand the sidebar; when collapsed, it shows just the tab favicons, and the workspace selector icon.

If you want to know how I got to that point, read on.

Continue reading...

Using resurrect.wezterm to manage Wezterm session state

One of my goals when adopting Wezterm was to replace tmux. To do that, I needed not just the ability to open additional tabs/windows and to split into panes, but also a feature I'd come to rely on heavily in the tmux ecosystem: session saving and restoration, which I accomplished with the tmux-resurrect plugin.

I tried a number of options, but was eventually pointed to resurrect.wezterm.

In this post, I'll detail how I've configured it, as well as a workflow I've developed for interacting with it that gives me (a) reasonable satisfaction that I won't lose work, and (b) additional flexibility for branching off work.

Continue reading...

Managing Wezterm Keybindings, or Merging with Lua

As I expand my Wezterm usage, I find that either (a) a third-party module will have default keybinding configuration I want to adopt, and/or (b) I want to segregate keybindings related to specific contexts into separate modules to simplify my configuration.

Keybindings are stored as a list of tables (what we call associative arrays in PHP). Simple, right?

Unlike in other languages I use, Lua doesn't have a built-in way to merge lists.

So, I wrote up a re-usable function.

Continue reading...

Wezterm GUI Notifications

Wezterm has a utility for raising GUI system notifications, window:toast_notification(), which is a handy way to bring notifications to you that you might otherwise miss if the window is hidden or if a given tab is inactive.

However, on Linux, it's a far from ideal tool, at least under gnome-shell. (I don't know how it does on KDE or other desktop environments.) It raises the notification, but the notification never times out, even if you provide a timeout value (fourth argument to the function). This means that you have to manually dismiss the notification, which can be annoying, particularly if the notifications happen regularly.

So, I worked up my own utility.

Continue reading...

Escaping Regex Characters in Lua

Quick little note mainly for myself: Lua regex is different than PCRE. The big place it differs is in where you escape pattern matching characters (e.g. ., ?, +, etc.). In PCRE, you escape these with a leading backslash (e.g., \., \?, \+). However, with Lua, you use the % character: %., %?, %+.

Continue reading...

Diagnosing Vivaldi resource usage

I recently noticed my CPU usage was high, and it was due to my open Vivaldi browser. I wasn't sure what tab was causing the issue, so I searched to see if Vivaldi had any tools for reporting this.

It turns out that Shift-Esc will open a task manager, and you can sort on any of:

  • Task (a string representing high level things like the browser as a whole, GPU process, worker tabs, and more)
  • Memory footprint
  • CPU (this was what I was interested in!)
  • Network usage
  • Process ID

You can select any task to end its process.

I was able to quickly track down the issue to a background worker running for a PWA window I'd closed earlier, and ended the process.

Continue reading...

Do you know the preferred Docker compose file name?

I've been using Docker for... a long time now. So having a docker-compose.yml file in a project is pretty natural and common for me.

Today I learned that the preferred file is now compose.yaml (though compose.yml is also allowed), and that the docker-compose naming is only supported for backwards compatibility. (See the Compose file documentation if you don't believe me!)

Funny enough, the compose tooling doesn't call this out, even though it now calls out the fact you don't need to use the version setting any more.

Continue reading...

Fixing Generation of wl-clipboard Transient Windows When Used with Neovim

I have been plagued recently with issues stemming from neovim's interaction with the system clipboard. Every time I would copy text in nvim, I'd get a transient wl-clipboard window. Inside nvim, paste would work fine, but outside it, the system clipboard seemed not to get the contents.

I finally tracked it down to how Wezterm is interacting with Wayland.

And the culprit appears to be... the muxer.

Continue reading...

Using CloudFlare to Validate DNS For An ACM Certificate

I recently received a notification from AWS indicating that ACM certificates I had in place for some S3 buckets I expose for websites could not renew due to an inability to validate via DNS.

Figuring out how to make it work was non-trivial, so I'm writing it up so I can remember in the future, and maybe save somebody else some trouble, as everything I found had to do with auto-provisioning via Terraform.

Continue reading...