You are currently viewing all posts in the general category.

A Better Towel

Discovery Trekking‘s Extreme Ultralight Travel Towels are the best quick-drying, packable towels I’ve found. Typical microfiber towels are scratchy and quick to stink. The Extreme Ultralight Travel Towel forgoes microfiber for Polartec Power Dry with a Polygiene treatment. They are soft, pleasant to use, and resistant to funk.

It’s use may be somewhat unintuitive for those who cut their teeth on traditional towels. Rather than the typical rubbing action, the Extreme Ultralight Travel Towels work best when you pat yourself down.

I bought my first of their towels in 2015. I go to the boxing gym in the morning and shower before work, so I’ve used that single towel multiple times per week for the past 3 years. It has no smell. In fact it is indistinguishable from the new towel I just bought last week.

I prefer the towels in size medium, which measure 28” by 34”. It’s the right size to dry off my whole body, though if I had long hair I may opt for the larger size. The only shortcoming of the towel is that it has no loop to hang it from, but this is easily remedied with a piece of paracord and some thread. On my scale, the size medium (with paracord hanging loop added) weighs 3.4 oz (98 grams).

I own the towels in charcoal and olive brown. The olive brown color is similar to that shown on Discovery Trekking’s website, but is what the rest of the world would call coyote brown. The charcoal color is nothing like what they show on their site. In their images it appears black, but in reality it is a grayish green, similar to foliage green, but slightly darker. I like it.

Normally I would not care about the color of a towel, but I note the colors here because the fabric is comfortable enough that I actually use the towel as a scarf – something which I cannot say about any microfiber towel. It provides warmth in cooler weather, and sun protection in hot weather. The Power Dry fabric is rated at UPF 15. This dual use makes it easy to justify the towel’s miniscule weight and volume in a pack, ensuring you always know where your towel is.

Any man who can hitch the length and breadth of the galaxy, rough it, slum it, struggle against terrible odds, win through, and still know where his towel is, is clearly a man to be reckoned with.

Douglas Adams

PPE Kits

I began carrying an N95 respirator in my bag every day around 2007. The masks can be easily added to any first aid kit without much of a weight or size penalty, and offer respiratory protection far superior to that of a bandanna or a surgical mask. While useful during an influenza pandemic, my motivation for carrying the mask was centered more around urban disaster. Any time there are buildings coming down, I assume there will be asbestos, concrete dust, and similar contaminants in the air that I don’t in my lungs.

Most discussion of the extended use and reuse of respirators centers around contagions and the influenza use-case. While it seems safe enough to assume that the masks have an unlimited functional shelf life if stored properly, I’ve not found any information related to visual inspection of the masks for proper use. My own respirators get cycled every two or three years, but there is still a lot of room for abrasion in the pack, which I assume diminishes the protection the masks offer.

I had not thought much about this until last year. The respirator was something I carried but didn’t use. After a decade of carry, my first time actually needing to take the respirator out of my pack was this past October during the Napa and Sonoma fires.

After using the masks I had on hand during the fires (and unsuccessfully attempting to barter my surplus for chocolate), I began to better store the replacement batch for next time.

PPE Kit

By keeping the respirator in a 5” x 4” aLOKSAK I’m ensured that no damage is done to during storage. The airtight seal offered by the bag means that the inside of the mask stays clean, at least until the first time I take it out in a contaminated setting. By added a pair of nitrile gloves to the bag, I create a compact, wallet-sized PPE kit. The same thing can be purchased, but all the prebuilt kits I’ve seen are too bulky for me to want to carry. My PPE kits can easily be slid in with the medical supplies in various my first aid and disaster kits. Pair that with EDC eye protection and you have a decently comprehensive solution.

The only appreciable thickness comes from the vent on the respirator, but I’ve found that vented respirators are key. A properly fitted respirator without a vent hampers my ability to perform physically, which isn’t a great trade-off in any situation where I find myself needing to wear a respirator.

PPE Kit with Every Day Carry

Hanger One

Bicycle for scale.

Hanger One

Ames Research Center

LUKS Header Backup

I’d neglected backup LUKS headers until Gwern’s data loss postmortem last year. After reading his post I dumped the headers of the drives I had accessible, but I never got around to performing the task on my less frequently accessed drives. Last month I had trouble mounting one of those drives. It turned out I was simply using the wrong passphrase, but the experience prompted me to make sure I had completed the header backup procedure for all drives.

I dump the header to memory using the procedure from the Arch wiki. This is probably unnecessary, but only takes a few extra steps. The header is stored in my password store, which is obsessively backed up.

$ sudo mkdir /mnt/tmp
$ sudo mount ramfs /mnt/tmp -t ramfs
$ sudo cryptsetup luksHeaderBackup /dev/sdc --header-backup-file /mnt/tmp/dump
$ sudo chown pigmonkey:pigmonkey /mnt/tmp/dump
$ pass insert -m crypt/luksheader/themisto < /mnt/tmp/dump
$ sudo umount /mnt/tmp
$ sudo rmdir /mnt/tmp

Flattening Water Stones

I’ve been sharpening my knives on the same Japanese water stones for a dozen years now. Despite my best intentions, I do not always use the full length of the stones. Somewhere in the back of my mind I have always been concerned about dishing the stones. Last month I took a sharpening class at Bernal Cutlery, which was the first hands-on instruction I’ve ever had in the subject. One of the things I learned was that there are other stones that can be used to flatten sharpening stones.

After the class I purchased a 95-micron DMT Dia-Flat Lapping Plate. It only took 30 seconds or so for it to flatten my water stones. Either it works extremely well or my stones were not as dished as I thought they were. After using it, there was a very obvious improvement in how the stones sharpened. More than I would expect just from flattening them. It makes me think that perhaps the pores of the stones had been clogged from years of use, which was addressed by removing the top layer of material with the lapping plate.

Sharpening

The lapping plate is certainly not cheap. I’m sure that they do not last forever for professional sharpeners, but given how frequently I use my stones I think the lapping plate falls into the buy-it-once-for-life category. It has extended the life of my water stones, which I think makes it a justified expense.

An Inbox for Taskwarrior

My experience with all task managements systems – whether software or otherwise – is that the more you put into them, the more useful they become. Not only adding as many tasks as possible, however small they may be, but also enriching the tasks with as much metadata as possible. When I began using taskwarrior, one of the problems I encountered was how to address this effectively.

Throughout the day I’ll be working on something when I receive an unrelated request. I want to log those requests so that I remember them and eventually complete them, but I don’t want to break from whatever I’m currently doing and take the time to mark these tasks up with the full metadata they eventually need. Context switching is expensive.

To address this, I’ve introduced the idea of a task inbox. I have an alias to add a task to taskwarrior with a due date of tomorrow and a tag of inbox.

alias ti='task add due:tomorrow tag:inbox'

This allows me to very quickly add a task without needing to think about it.

$ ti do something important

Each morning I run task ls. The tasks which were previously added to my inbox are at the top, overdue with a high priority. At this point I’ll modify each of them, removing the inbox tag, setting a real due date, and assigning them to a project. If they are more complex, I may also add annotations or notes, or build the task out with dependencies. If the task is simple – something that may only take a minute or two – I’ll just complete it immediately and mark it as done without bothering to remove the inbox tag.

This alias lowers the barrier of entry enough that I am likely to log even the smallest of tasks, while the inbox concept provides a framework for me to later make the tasks rich in a way that allows me to take advantage of the power that taskwarrior provides.

Borg Assimilation

For years the core of my backup strategy has been rsnapshot via cryptshot to various external drives for local backups, and Tarsnap for remote backups.

Tarsnap, however, can be slow. It tends to take somewhere between 15 to 20 minutes to create my dozen or so archives, even if little has changed since the last run. My impression is that this is simply due to the number of archives I have stored and the number of files I ask it to archive. Once it has decided what to do, the time spent transferring data is negligible. I run Tarsnap hourly. Twenty minutes out of every hour seems like a lot of time spent Tarsnapping.

I’ve eyed Borg for a while (and before that, Attic), but avoided using it due to the rapid development of its earlier days. While activity is nice, too many changes too close together do not create a reassuring image of a backup project. Borg seems to have stabilized now and has a large enough user base that I feel comfortable with it. About a month ago, I began using it to backup my laptop to rsync.net.

Initially I played with borgmatic to perform and maintain the backups. Unfortunately it seems to have issues with signal handling, which caused me to end up with annoying lock files left over from interrupted backups. Borg itself has good documentation and is easy to use, and I think it is useful to build familiarity with the program itself instead of only interacting with it through something else. So I did away with borgmatic and wrote a small bash script to handle my use case.

Creating the backups is simple enough. Borg disables compression by default, but after a little experimentation I found that LZ4 seemed to be a decent compromise between compression and performance.

Pruning backups is equally easy. I knew I wanted to match roughly what I had with Tarsnap: hourly backups for a day or so, daily backups for a week or so, then a month or two of weekly backups, and finally a year or so of monthly backups.

My only hesitation was in how to maintain the health of the backups. Borg provides the convenient borg check command, which is able to verify the consistency of both a repository and the archives themselves. Unsurprisingly, this is a slow process. I didn’t want to run it with my hourly backups. Daily, or perhaps even weekly, seemed more reasonable, but I did want to make sure that both checks were completed successfully with some frequency. Luckily this is just the problem that I wrote backitup to solve.

Because the consistency checks take a while and consume some resources, I thought it would also be a good idea to avoid performing them when I’m running on battery. Giving backitup the ability to detect if the machine is on battery or AC power was a simple hack. The script now features the -a switch to specify that the program should only be executed when on AC power.

My completed Borg wrapper is thus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
export BORG_PASSPHRASE='supers3cr3t'
export BORG_REPO='borg-rsync:borg/nous'
export BORG_REMOTE_PATH='borg1'

# Create backups
echo "Creating backups..."
borg create --verbose --stats --compression=lz4             \
    --exclude ~/projects/foo/bar/baz                        \
    --exclude ~/projects/xyz/bigfatbinaries                 \
    ::'{hostname}-{user}-{utcnow:%Y-%m-%dT%H:%M:%S}'        \
    ~/documents                                             \
    ~/projects                                              \
    ~/mail                                                  \
    # ...etc

# Prune backups
echo "Pruning backups..."
borg prune --verbose --list --prefix '{hostname}-{user}-'    \
    --keep-within=2d                                         \
    --keep-daily=14                                          \
    --keep-weekly=8                                          \
    --keep-monthly=12                                        \

# Check backups
echo "Checking repository..."
backitup -a                                             \
    -p 172800                                           \
    -l ~/.borg_check-repo.lastrun                       \
    -b "borg check --verbose --repository-only"         \
echo "Checking archives..."
backitup -a                                             \
    -p 259200                                           \
    -l ~/.borg_check-arch.lastrun                       \
    -b "borg check --verbose --archives-only --last 24" \

This is executed by a systemd service.

[Unit]
Description=Borg Backup

[Service]
Type=oneshot
ExecStart=/home/pigmonkey/bin/borgwrapper.sh

[Install]
WantedBy=multi-user.target

The service is called hourly by a systemd timer.

[Unit]
Description=Borg Backup Timer

[Timer]
Unit=borg.service
OnCalendar=hourly
Persistent=True

[Install]
WantedBy=timers.target

I don’t enable the timer directly, but add it to /usr/local/etc/trusted_units so that nmtrust activates it when I’m connected to trusted networks.

$ echo "borg.timer,user:pigmonkey" >> /usr/local/etc/trusted_units

I’ve been running this for about a month now and have been pleased with the results. It averages about 30 seconds to create the backups every hour, and another 30 seconds or so to prune the old ones. As with Tarsnap, deduplication is great.

------------------------------------------------------------------------------
                       Original size      Compressed size    Deduplicated size
This archive:               19.87 GB             18.41 GB             10.21 MB
All archives:              836.02 GB            773.35 GB             19.32 GB
                       Unique chunks         Total chunks
Chunk index:                  371527             14704634
------------------------------------------------------------------------------

The most recent repository consistency check took about 30 minutes, but only runs every 172800 seconds, or once every other day. The most recent archive consistency check took about 40 minutes, but only runs every 259200 seconds, or once per 3 days. I’m not sure that those schedules are the best option for the consistency checks. I may tweak their frequencies, but because I know they will only be executed when I am on a trusted network and AC power, I’m less concerned about the length of time.

With Borg running hourly, I’ve reduced Tarsnap to run only once per day. Time will tell if Borg will slow as the number of stored archives increase, but for now running Borg hourly and Tarsnap daily seems like a great setup. Tarsnap and Borg both target the same files (with a few exceptions). Tarsnap runs in the AWS us-east-1 region. I’ve always kept my rsync.net account in their Zurich datacenter. This provides the kind of redundancy that lets me rest easy.

Contrary to what you might expect given the number of blog posts on the subject, I actually spend close to no time worrying about data loss in my day to day life, thanks to stuff like this. An ounce of prevention, and all that. (Maybe a few kilograms of prevention in my case.)

I've been happily using my AquaRain filter for a little short of a decade now.

My only complaint about the system is that the filter elements degrade slowly enough that I rarely notice the decreased flow. Cleaning and assessing the health of the elements (which is done by measuring their circumference with the provided tool) should happen periodically, but it isn’t the type of thing I’ll ever think to do myself. As with my water rotation, I let taskwarrior solve the problem for me.

$ task add project:waterstorage due:2017-07-01 recur:6months wait:due-7days clean and assess aquarain filter