# Rob Allen

Pragmatism in today's world

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Opening Sublime Text from the command line

DevFeed: [Opening Sublime Text from the command line](<https://devfeed.tech/articles/opening-sublime-text-from-the-command-line-39471.md>)

Original publisher: [Read original article](<https://akrabat.com/opening-sublime-text-from-the-command-line/>)

Author: Rob

Published: 2026-06-30T10:00:00Z

Content type: tutorial

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [Sublime Text](<https://devfeed.tech/topics/sublime-text.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [JSON](<https://devfeed.tech/topics/json.md>), [sessions](<https://devfeed.tech/topics/sessions.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [computing](<https://devfeed.tech/tags/computing.md>), [extension](<https://devfeed.tech/tags/extension.md>), [json](<https://devfeed.tech/tags/json.md>), [sessions](<https://devfeed.tech/tags/sessions.md>), [shell-scripting](<https://devfeed.tech/tags/shell-scripting.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

A tutorial on using a Bash function to open Sublime Text from the command line with different window behaviors for directories and files. It extends the function to create and manage a hidden .sublime-project JSON file so open files persist across sessions.

### Source excerpt

I nearly always open Sublime Text from the command line using subl and have specific requirements for when it should open a new window or re-use one. If I'm opening a directory, then I would like it to re-use the same window if I have previously opened that directory. However if I open a random file, I never want that file in the last directory window as it's unrelated. To do this I wrote a... continue reading.

## Fixing two minor git irritations in my OSS fork workflow

DevFeed: [Fixing two minor git irritations in my OSS fork workflow](<https://devfeed.tech/articles/fixing-two-minor-git-irritations-in-my-oss-fork-workflow-39468.md>)

Original publisher: [Read original article](<https://akrabat.com/fixing-two-minor-git-irritations-in-my-oss-fork-workflow/>)

Author: Rob

Published: 2026-05-26T10:00:00Z

Content type: tutorial

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [Git](<https://devfeed.tech/topics/git.md>), [Pull Request](<https://devfeed.tech/topics/pull-request.md>)

Tags: [branch](<https://devfeed.tech/tags/branch.md>), [development](<https://devfeed.tech/tags/development.md>), [fork](<https://devfeed.tech/tags/fork.md>), [git](<https://devfeed.tech/tags/git.md>), [oss](<https://devfeed.tech/tags/oss.md>), [project](<https://devfeed.tech/tags/project.md>), [remote](<https://devfeed.tech/tags/remote.md>), [repo](<https://devfeed.tech/tags/repo.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

A practical guide to reducing two minor irritations in an open-source Git fork workflow: ensuring the local main branch tracks upstream/main and configuring new branches to push to origin automatically on their first push.

### Source excerpt

For OSS work, I work with two git remotes: upstream: the canonical OSS project repository, where main is the default branch and is what gets released. origin: a personal fork. All my feature branches live here. I set up locally like this: Fork the project repo to my account. Clone my fork locally, so the origin remote is my fork. Set an upstream remote using git remote add upstream <ssh-url>. and then when working on... continue reading.

## Create an HTML version of an OpenAPI spec

DevFeed: [Create an HTML version of an OpenAPI spec](<https://devfeed.tech/articles/create-an-html-version-of-an-openapi-spec-39465.md>)

Original publisher: [Read original article](<https://akrabat.com/create-an-html-version-of-an-openapi-spec/>)

Author: Rob

Published: 2026-03-17T11:00:00Z

Content type: tutorial

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Shell](<https://devfeed.tech/topics/shell.md>), [Script](<https://devfeed.tech/topics/script.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [html](<https://devfeed.tech/tags/html.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [script](<https://devfeed.tech/tags/script.md>), [shell](<https://devfeed.tech/tags/shell.md>)

### AI overview

A short shell script uses Scalar to convert OpenAPI specification JSON files into formatted HTML documents, making third-party API specifications easier to read.

### Source excerpt

I have a new project where we will be integrating with a third party API that is currently being written. Due to Conway's Law, we are being sent new versions of the OpenAPI spec as a set of JSON files via email. I quite like seeing the HTML rendering of an OpenAPI spec when reading it and understanding it, so I knocked up a simple shell script that takes an OpenAPI spec file and outputs... continue reading.

## PHPStan custom rules

DevFeed: [PHPStan custom rules](<https://devfeed.tech/articles/phpstan-custom-rules-39472.md>)

Original publisher: [Read original article](<https://akrabat.com/phpstan-custom-rules/>)

Author: Rob

Published: 2026-03-03T11:00:00Z

Content type: tutorial

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [PHP](<https://devfeed.tech/topics/php.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [Code](<https://devfeed.tech/topics/code.md>), [phpstorm](<https://devfeed.tech/topics/phpstorm.md>)

Tags: [autocomplete](<https://devfeed.tech/tags/autocomplete.md>), [class](<https://devfeed.tech/tags/class.md>), [code](<https://devfeed.tech/tags/code.md>), [container](<https://devfeed.tech/tags/container.md>), [exception](<https://devfeed.tech/tags/exception.md>), [extension](<https://devfeed.tech/tags/extension.md>), [php](<https://devfeed.tech/tags/php.md>), [phpstorm](<https://devfeed.tech/tags/phpstorm.md>), [runtime](<https://devfeed.tech/tags/runtime.md>), [settings](<https://devfeed.tech/tags/settings.md>)

### AI overview

This tutorial explains how a PHPStan custom rule can detect references to unavailable PHP classes. It also describes configuring PhpStorm to limit autocomplete to extensions used by the application.

### Source excerpt

Recently I discovered that this code passed our PHPStan level 10 checks: use http\Exception\InvalidArgumentException; // ... throw new InvalidArgumentException; I was surprised as http\Exception\InvalidArgumentException is not a class in our system. While cooling, I discovered that there's an http PHP extension and it appears that PHPStan has a stub for this which means that it accepts it as existing even if it doesn't. What we think happened is that I wrote throw new InvalidArgumentException; and... continue reading.

## IPTC export changed in Photos for macOS 26 Tahoe

DevFeed: [IPTC export changed in Photos for macOS 26 Tahoe](<https://devfeed.tech/articles/iptc-export-changed-in-photos-for-macos-26-tahoe-39469.md>)

Original publisher: [Read original article](<https://akrabat.com/iptc-export-changed-in-photos-for-macos-26-tahoe/>)

Author: Rob

Published: 2025-11-11T11:00:00Z

Content type: article

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [macOS](<https://devfeed.tech/topics/macos.md>), [data](<https://devfeed.tech/topics/data.md>), [properties](<https://devfeed.tech/topics/properties.md>)

Tags: [data](<https://devfeed.tech/tags/data.md>), [exiftool](<https://devfeed.tech/tags/exiftool.md>), [export](<https://devfeed.tech/tags/export.md>), [mac](<https://devfeed.tech/tags/mac.md>), [macos](<https://devfeed.tech/tags/macos.md>), [photography](<https://devfeed.tech/tags/photography.md>), [rodeo-flickr-uploader](<https://devfeed.tech/tags/rodeo-flickr-uploader.md>)

### AI overview

Photos for macOS 26 Tahoe changed JPEG IPTC export behavior: Object Name, Caption-Abstract, and Keywords properties are no longer populated as they were in macOS 15 Sequoia. The export still provides the data through Title, Description, and Subject, and Rodeo version 0.5 was updated to resolve the issue.

### Source excerpt

I've recently upgraded my MacBook Air to macOS 26 Tahoe and one thing I noticed was that Rodeo's rules were no longer working. With the help of exiftool, I worked out that when exporting to JPEG from Photos for macOS 26 Tahoe, the Object Name, Caption-Abstract and Keywords IPRC properties were no longer being populated. This is a regression from macOS 15 Sequoia. This is the data from exiftool. Output from macOS 15 Sequoia: $... continue reading.

## Appending Text to Obsidian via Shortcuts

DevFeed: [Appending Text to Obsidian via Shortcuts](<https://devfeed.tech/articles/appending-text-to-obsidan-via-shortcuts-39464.md>)

Original publisher: [Read original article](<https://akrabat.com/appending-text-to-obsidan-via-shortcuts/>)

Author: Rob

Published: 2025-10-14T10:00:00Z

Content type: tutorial

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [Obsidian](<https://devfeed.tech/topics/obsidian-md.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [apple](<https://devfeed.tech/tags/apple.md>), [automate](<https://devfeed.tech/tags/automate.md>), [dialog](<https://devfeed.tech/tags/dialog.md>), [keyboard](<https://devfeed.tech/tags/keyboard.md>), [mac](<https://devfeed.tech/tags/mac.md>), [obsidian](<https://devfeed.tech/tags/obsidian.md>), [schema](<https://devfeed.tech/tags/schema.md>), [shortcuts](<https://devfeed.tech/tags/shortcuts.md>)

### AI overview

This tutorial explains how to use Apple Shortcuts and Obsidian's obsidian:// URI schema to append text to the current Obsidian daily note. The shortcut prompts for text, adds the current time as a heading, URL-encodes the content, and opens the URI with the append parameter.

### Source excerpt

Sometimes it's helpful to add some text to my current Obsidian daily note without having to switch to Obsidian, find the daily note and then type my text. To do this, we can use the magic of Obsidian's obsidian:// URI schema and automate the text capture in Apple Shortcuts, with an assigned keyboard shortcut to activate it. This is the Shortcut: There's a number of steps in the Shortcut. Firstly we Ask For some text... continue reading.

## mac-volume: A CLI to control device volume

DevFeed: [mac-volume: A CLI to control device volume](<https://devfeed.tech/articles/mac-volume-a-cli-to-control-device-volume-39470.md>)

Original publisher: [Read original article](<https://akrabat.com/mac-volume-a-cli-to-control-device-volume/>)

Author: Rob

Published: 2025-10-07T10:00:00Z

Content type: article

Language: en

Sources: [Rob Allen](<https://devfeed.tech/sources/rob-allen.md>)

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [C](<https://devfeed.tech/topics/c.md>), [floating-point](<https://devfeed.tech/topics/floating-point.md>), [function](<https://devfeed.tech/topics/function.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [audio](<https://devfeed.tech/tags/audio.md>), [c](<https://devfeed.tech/tags/c.md>), [cli](<https://devfeed.tech/tags/cli.md>), [floating-point](<https://devfeed.tech/tags/floating-point.md>), [github](<https://devfeed.tech/tags/github.md>), [mac](<https://devfeed.tech/tags/mac.md>), [swift](<https://devfeed.tech/tags/swift.md>), [volume](<https://devfeed.tech/tags/volume.md>)

### AI overview

The article explains why Mac volume controls can be inconvenient when calls use a separate audio device. It describes a Swift command-line utility called mac-volume that uses Core Audio to control volume by device name, including listing devices and incrementing or decrementing volume, with integration through StreamDeck and Keyboard Maestro.

### Source excerpt

I've set my Mac up such that video calls such as Zoom use the microphone and earphones attached to my Behringer UMC204HD, which all other audio plays through the my normal speakers which are the default. One issue I have with this is that it's quite hard to change the volume when a call as the volume buttons on the Mac are connected to the default output. This finally annoyed me enough that I looked... continue reading.