Tucker Chapman

Python Context Manager

TIL you can write your own functions to use in a python with statement. These functions are called context managers. A context manager is a simple way to wrap a try/except/finally block in a reusable function.

Writing your own context manager is simple.

from contextlib import contextmanager

@contextmanager
def random_number():
    """ https://xkcd.com/221/ """
    try:
        # do any setup
        yield 4 # Yielded objects can be accessed from the `var` after the `as` keyword
    except:
        # handle any errors
        pass
    finally:
        # Clean up here (e.g. close db connections or open files)
        pass

## Call the context manager like this
with random_number() as n:
    # do something with `n`
    print(n)

PEP-343 has some other context manager examples.

Podman Pods

TIL the POD in Podman is the same idea as Pods in Kubernetes. Pods are collections of containers that share resources (i.e. volumes, networks, etc.). Create a pod with the podman pod create --name [pod-name] command. You will need to expose ports and setup other resources with the pod create command.

podman pod create --name my-new-pod --infra --publish 8080:80 --network bridge

Add a container to a pod with the --pod [pod-name] flag in your run command:

Read More ...

Special tld '.home.arpa'

TIL about the special-use *.home.arpa tld. The .home.arpa tld is reserved for “non-unique residential home networks”. If you use Adguard Home, Pi-Hole, or any other DNS server you can freely use .home.arpa for all your local assets (printers, self-hosted server, etc.)!

Slash or Not to Slash with rsync

TIL an easy way to remember if you want a slash or not when you run rsync. A trailing slash will copy the contents of the directory while just the directory name will copy the directory itself. For example

# copies everything in dir into new-dir
rsync -r dir/ new-dir

# copies dir into new-dir
rsync -r dir new-dir

Python List Comprehensions

TIL about Python List Comprehensions. I came across code that looked like this in a codebase.

baz = [foo.bar for foo in foos]

I could see what was happening (baz is now a list of bar for each object in foos). I didn’t know this was called list comprehension but now I understand the data structure.

List comprehensions are useful for lots of things when you want to create lists from other objects (docs source).

Hugo Debug Jsonify

TIL that you can output all the data in “the dot” from a Hugo template using jsonify

<pre>{{ . | jsonify (dict "indent" "  ") }}</pre>

Here is the output of the .Params value for this post

<pre>{{ .Params | jsonify (dict "indent" "  ") }}</pre>
{
	"date": "2022-11-13T16:54:29-05:00",
	"draft": false,
	"iscjklanguage": false,
	"lastmod": "2022-11-13T16:54:29-05:00",
	"publishdate": "2022-11-13T16:54:29-05:00",
	"tags": ["hugo", "ssg", "debug"],
	"title": "Hugo Debug Jsonify"
}

cal and ncal

TIL about ncal (most Linux distros) or CAL (on MacOS). I have used cal for quite a while which is a convenient calendar tool in the terminal. However, I hit CAPS LOCK on accident and ran CAL instead of cal, to my surprise it output

    November 2022
Mo     7 14 21 28
Tu  1  8 15 22 29
We  2  9 16 23 30
Th  3 10 17 24
Fr  4 11 18 25
Sa  5 12 19 26
Su  6 13 20 27

(the normal cal output)

Read More ...

How to Open Files with Vim

How exactly do you open a new file without closing and reopening vim? Read on to learn more about how to open files (or buffers) in vim using various included tools or external plugins. Vim uses the word “buffer” instead of “file”. When you :wq you write the current buffer to a file.

Read More ...

Getting started with vim-airline

The default vim status line can work well but vim-airline inhances it in many ways. Vim-airline is a simple lightweight plugin that integrates with many other popular plugins out of the box (but they are not required). In this post you will learn how to get vim-airline setup with some basic settings and a theme.

Read More ...

Vim Plugin Audit

Vim is my daily driver for text editing. I keep my plugin list curated to only what I use on a regular basis. In this post I’m going to go over each plugin currently in my plug file, write a sentence about it, and determine whether is stays or goes.

Read More ...