All things learnt
Sorted chronologically.
September 2023
- How to run Google sites as standalone MacOS apps that Alfred can start on
- How to get Gunicorn to log as JSON on
August 2023
July 2023
-
How to get uWSGI’s
log-route
to support regular expressions on - How to syntax-highlight kubectl YAML output on
- That two trailing spaces indicates a line break in Markdown on
June 2023
- That Vimium has shortcuts for following pagination links on
- How to avoid committing Jupyter Notebook output to Git on
- You can search Slack by custom channel section on
May 2023
April 2023
- That macOS Ventura and iOS 15 can play background rain noise on
-
That
git for-each-ref
support conditional logic in its format on - Github actions need a shell specified to avoid silent pipeline failures on
March 2023
February 2023
-
About the
typos
source code spell checker on - How to perform a non-interactive, interactive Git rebase on
January 2023
- How to write Vimscript functions that operate on a visually selected area on
- Not to union Python list types on
-
How to show the history of a file with
git log --patch
on - A better technique for roasting chicken on
- How to automatically disable Github Copilot in Vim when editing large files on
-
How to format JSON into a table with
jq
andcolumn
on
December 2022
- How to make Homebrew-installed Bash your default shell on
-
That
hub
clashes withvim-polyglot
on -
Django’s JSON encoder rounds
datetime
s down to the nearest millisecond on
November 2022
- How to handle convenience imports with Mypy on
- You can use JQ to build JSON payloads on
-
How Django’s
override_settings
decorator causes flakey tests on -
How the
new
argument tomock.patch
is shared between parameterized tests on
October 2022
- That Postgres sequences aren’t restored after a transaction rollback on
- Mypy skips empty functions on
- How to use STDIN to populate Vim’s quickfix list on
- You can search Slack by emoji reactions on
-
Python tests using
moto
should be explicit about AWS regions on
September 2022
-
which
behaves diffferently in Zsh compared to Bash on - AWS target groups fail open when all instances are unhealthy on
-
How
ripgrep
interprets.gitignore
rules changes when a filepath argument is used on - It’s better to explicitly chain Python exceptions on
August 2022
- About indirect parametrization with Pytest on
-
That Ubuntu’s
retry
command captures STDOUT on - How to create an RST table of contents for the current page only on
July 2022
June 2022
-
How to use
xmllint
to extract the failing test filenames from a JUnit-XML file on - How to override Django’s settings for every method in a test class on
- How to profile Pytest tests on
-
That Python’s
datetime
package doesn’t support ordinal suffixes for the day of the month on - Some Markdown parsers support definition lists on
April 2022
March 2022
- How to join an array in Bash on
- Docker for Mac stores all containers and images in a single disk image on
February 2022
-
How to inspect and clear Python’s
functools.lru_cache
on - How to get Vale to work with Vim’s Ale plugin on
-
How to use
markdownlint
output in Vim’s quickfix list on -
About Factory Boy’s
SelfAttribute
class on - You can search for Loggly mapping conflicts on
-
About Github’s
involves:$username
search filter on - You can’t use Django’s generic foreign key field with objects stored in a separate database on
January 2022
December 2021
-
About Django’s
setup
method for generic view classes on - How to list the mounts of a running Docker container on
November 2021
-
About Bash’s
$SECONDS
shell variable on - That Vim can transform replacement values when substituting on
- How to continue a Git rebase and skip editing the commit message on
- That AWS Aurora clusters have two types of storage on
-
How to use
aws-mfa-v2
to avoid entering so many MFA tokens on -
About a gotcha with
psycopg2
’s autocommit handling on
October 2021
- How to find the files from a commit that deleted a given pattern on
-
Python’s
envparse
library has counter-intuitive boolean casting on -
About Git’s
diff.relative
config option on - How to effectively scan files using an iPhone on
- How to delete all buffers in Vim on
September 2021
- Factory boy can be used to build dicts on
- Django settings prefixed with an underscore are private on
- How to reset an SSH session on
- How to easily copy annotated screenshots to the clipboard on macOS on
- The names for macOS keyboard meta-characters on
-
About
git merge-base
on
August 2021
July 2021
- Django doesn’t flush caches between tests on
- How Django’s management commands need to be type hinted on
- File-level flake8 comments ignore all errors on
- Git aliases that run an external command are run from the repository root on
- That Pytest’s “keyword expression” filtering supports Python conditionals on
-
That FreezeGun doesn’t work with Pytest fixtures (unless you use
pytest-freezegun
) on
June 2021
- About Chrome’s named windows on
-
About
mypy
’s unreachable code functionality on -
About
jq
’s--slurp
option on -
About
mypy
’sreveal_type
andreveal_locals
functions on -
That
mypy
only type-checks functions that have at least one type annotation on -
About
git log -G
on
May 2021
-
About the
:ALEInfo
command on -
About Ubuntu’s
alert
Bash alias on - About Vim’s semi-colon search offset on
- The ISO-3166 codes for the United Kingdon are inaccurate on
- That Vim’s uppercase marks are global and persistent on
April 2021
- Sensitive Terraform Cloud variables are included in Sentinel mocks on
- The correct sequence of SQL statements for dropping a role on
-
Python’s
csv.writer
function defaults to Windows line endings on -
You can use
shuf
to take random samples of lines on
March 2021
-
That
vim-polyglot
conflicts with Hub when creating pull requests on -
About
git-absorb
on - JSON is valid YAML on
- How to convert SSH2 public keys to OpenSSH format on
-
How to include the date in
git reflog
output on -
About
xargs -t
on - What the sections of the Unix manual are on
- About delta, a viewer for Git and diff output on
- You can have class-scoped autouse pytest fixtures on
- That software can be “free as in mattress” on
-
systemd sends SIGKILL signals after waiting for
TimeoutStopSec
seconds on - iTerm2’s “Cursor boost” feature will cause everything to appear dimmed on
-
pdbpp
has a useful ‘sticky’ mode on - systemd timers can be stopped on
- You can use Git log to view the evolution of a function on
-
To prefer
dateutil
overpytz
on - Pytest doesn’t play nicely with ipdb on
February 2021
- Chrome has a flags page for enabling experimental features on
-
How to use custom functions with
:cdo
on -
The order of permissions matters with
chmod
on -
About Github’s
@me
search term on - Recruiters talk about T-shaped leaders on
January 2021
- Virgin Media’s “Web Safe” product uses DNS on
- How to scroll horizontally with a mouse on
- You can take screenshots with Chrome DevTools on
- You can arbitrarily chain Python comparison operations on
- How to pipe an argument list into Vim on
- How to copy the current filepath to the system clipboard in Vim on
-
How to search for fixed strings with
grep
andripgrep
on - How to easily disable a CircleCI workflow on
- BBC Sounds only works on Alexa if the language setting is UK English on
- How temporary files are removed on MacOS on
December 2020
-
You can define custom file-type filters in
ripgrep
on - How to enable Docker BuildKit in MacOS Docker Desktop on
-
You can specify the file-type for
bat
on -
About
envsubst
on - How to add project-specific Vim settings on
-
You can stack
pytest
’sparametrize
decorators on - About YAML’s node anchors and aliases on
- You can label parameterized fixtures with pytest on
- Universal Ctags can index more things than I realised on
-
A better way of configuring
mypy
on - How to spell-check markdown repos on CircleCI on
-
How to set per-project
ripgrep
andfzf
exclude rules on - Vim-markdown has some useful commands on
- GSuite’s “Groups Admin” role can read any group email on
November 2020
- How to run Jekyll in a Docker container on
-
About how to use
keywordprg
effectively on -
How to configure
ctags
to parse Terraform files on - You can easily share 1Password items via a link on
- You can convert a Slack group direct message chat into a private channel on
- How to use Bandit with Vim’s quickfix list on
- Exuberant-ctags has been superceded by Universal-ctags on
-
About
column
on - You can hide night-time hours in Google calendar on
-
You can run
:grep
without using parent shell process on -
There’s a
QuickFixCmdPost
event in Vim on
October 2020
- You can jump to previous quickfix lists in Vim on
- How to embed markdown content in a Github code block on
- You can create QR codes for WiFi networks on
-
fd
has an option for searching filepaths on -
datetime.datetime
is a subclass ofdatetime.date
on - The keyboard shortcut for grabbing a MFA code in 1PW on
- How to use AWS profiles that require MFA on
- About the difference between minimising and hiding windows in MacOS on
-
About
readonly
Bash variables on -
About
shellcheck
on -
About
pip-licenses
on - About Bash’s DEBUG signal on
- How to resolve Git rebase conflicts on renamed files on
- There is a “Bongcloud” chess opening on
September 2020
-
How to use
xargs
withprintf
on - AWS ASGs have an ‘instance refresh’ feature on
- The MacOS keybinds for en- and em-dashes on
- How to read from one buffer to another in Vim on
- SSH config supports multiple host patterns in one block on
- There’s a Chrome extension for switching AWS IAM roles on
- YAML has several string-parsing gotchas on
-
Javascript’s unary
+
operator castsnull
to zero on - How to count lines of code in a Git repo for a given commit on
-
About Vim’s
:helpgrep
command on - Vim recommends using Emacs-style key bindings in command mode on
- How to conditionally include items in a Terraform list on
-
You can change the font in Slack with
/slackfont $font
on - You can display the typed text in Alfred in a huge typeface on
- Python 3.7 supports postponed evaluation of annotations on
- Vim doesn’t create the persistent undo folder automatically on
-
How to use type annotations with Python’s
csv
module on - How to configure Alfred’s Bear workflow to open notes in the main window on
August 2020
- About better YAML file folding in Vim on
- OpenDNS provide free porn-blocking DNS servers on
- AWS Availability Zones have counter-intuitive IDs on
- You can rate-limit issues using a Sentry DSN on
- How to list pages with matching tag in Hugo on
-
About
:help macvim
on -
About Vim’s
:diffthis
command on - About the stationery pad feature in Finder on
-
About
pngcrush
on - Asana has some magic search terms on
- You can have SASS asset pipelines in Hugo on
- About text fragments on
July 2020
- Renaming a Terraform module is dangerous on
-
Where authentication for the
ubuntu
user on a EC2 instance is defined on - About the phrase “Parking downhill” on
-
About the MacOS
screencapture
utility on - About Quitter on
- About Alfred’s snippet collections on
- About Alfred’s clipboard history feature on
-
About Twitter’s
min_faves
search filter on