Managing Android Wifi with Tasker

One of the earliest programs I installed when I bought my first smartphone in 2013 was Kismet’s Smarter Wi-Fi Manager. It kept the phone’s wireless radio disabled unless I explicitly enabled it and connected to a network. When that happened, it would store the location by identifying nearby cell towers. Whenever it saw those towers again, it would turn the wireless radio on. In all other cases it would keep the radio off. This was a simple solution to the problem of only wanting wifi turned on at known locations, like home and work. It helped save battery, and prevented information leaks when wandering around meatspace.

Recently, when setting up a new phone, I discovered that Smarter Wi-Fi Manager had been abandoned. I thought I had heard something about the behaviour being integrated into the latest version of Android, but it seems that is not the case. Fortunately I found that Tasker can be configured to replicate the behaviour.

In Tasker, a profile can be created to recognize a location using a few different means. I setup one profile for home and one for work, both using the “cell near” context state. Like the Smarter Wi-Fi Manager of old, this just stores the identities of nearby cell towers. Then I created two tasks: one to turn wifi on and one to turn it off. The first task is added to both profiles as the main task. The latter is added to the profiles as the exit task. The result is that when the phone sees the cell towers near my trusted locations, the wireless radio turns on. When I leave, the wireless radio turns off.

Profile: Home (1)
    Restore: no
    State: Cell Near [ ... bunch o' towers here ... ]
    Enter: Wifi On (4)
        A1: WiFi [ Set:On ]
    Exit: Wifi Off (9)
        A1: WiFi [ Set:Off ]

Profile: Work (2)
    Restore: no
    State: Cell Near [ ... bunch o' towers here ... ]
    Enter: Wifi On (4)
        A1: WiFi [ Set:On ]
    Exit: Wifi Off (9)
        A1: WiFi [ Set:Off ]

The task to turn the wireless off is only triggered when I leave the location, which means I can still manually turn the radio on when I am somewhere unknown without Tasker immediately turning it back off. That new location will not automatically be stored as a trusted location, but if I want it to be remembered it only takes a minute to create a new profile and hook it up to my two wifi tasks.

I found the Tasker interface to be somewhat confusing. It took me a while to figure out how to achieve my desired behaviour. This is probably because Tasker can do a lot of other things. I don’t think my phone is integrated enough into my life to make its other capabilities relevant to me (though I might set it up to only enable GPS when mapping applications are open), but I was happy to pay the low price to retake control of my wireless radio.

Link Log 2020-12-06

On the use of a life

Did Global Warming Play A Significant Role in the Recent Northwest Wildfires?

Just how many people do we need doing that job, anyway?

Why Is Post-COVID China Embracing A Cyberpunk Aesthetic?

No Config for Old Men

Bro Culture, Fitness, Chivalry, and American Identity

Preventing the Collapse of Civilization (Jonathan Blow, 2019)

It is the regular course of world history that great achievements in technology just get completely lost because the civilizations that made those achievements fell or failed to propogate the knowledge into the future. Technology goes backwards all the time.

Without generational transfer of knowledge, civilizations die because the technology those civilizations depends on degrades and fails.

Green Machine

On Toothpowder

After posting about my toothpaste capsules last year, Ze Stuart wrote to ask if I had ever considered toothpowder. He recommended Eco-Dent DailyCare.

I had not brushed with a commercial toothpowder product before, though had tried carrying baking soda on some backpacking trips for this application. I was never happy with the result. Mostly I think it was just that the lack of foaming and mint flavor, both of which I’ve been psychologically conditioned to associate with “clean”.

Eco-Dent was available locally, so I bought a bottle and started using it. Application is easy: wet the brush, squirt out a bit of the powder from the bottle’s flip top lid, and brush like normal. After brushing for a second the powder froths up, and the experience is more or less the same as brushing with toothpaste.

The label claims that the 2 oz bottle can provide “up to 200 brushings”, which I find to be inaccurate. My first bottle lasted me 350 days. I brush twice a day, so that is 700 brushings. That works out to be about $0.01 per use, which is better than any toothpaste can offer. (Perhaps they expect you to use more of the powder per brushing than I do, but I always use enough to generate the same frothy lather I’d expect from toothpaste.)

When travelling, I repackage the powder into a 0.25 oz bottle. That is plenty for a week or two, takes up no space in a toiletry kit, and weighs approximately nothing.

There are plenty of other toothpowders on the market, but I’ve bought another couple bottles of Eco-Dent. Between those, my collection of toothbrush heads, and a stash of floss, I’ll be out of the dental care market for a few years.

Link Log 2020-09-19

Built to Last

Indeed, present-day tech could use more of the sort of resilience and accessibility that COBOL brought to computing – especially for systems that have broad impacts, will be widely used, and will be long-term infrastructure that needs to be maintained by many hands in the future. In this sense, COBOL and its scapegoating show us an important aspect of high tech that few in Silicon Valley, or in government, seem to understand. Older systems have value, and constantly building new technological systems for short-term profit at the expense of existing infrastructure is not progress. In fact, it is among the most regressive paths a society can take.

Vocational Awe

Because of our refusal to deal with systemic, societal issues, librarians – much like public school teachers – grapple with a condensation of duties onto their profession. Librarians become technology experts, crowd control specialists, and emergency responders, trained in how to deal with someone in the middle of a mental health crisis. Now they’re custodians of our democracy as well….in addition to being, you know, information scientists and attempting to maintain collections of knowledge. They are working at least three jobs. Five jobs? More? But they’re often only compensated (and often poorly) for that last one.

My PBP Bike: Contact Points

Comfort on a bike really depends on two things. The first is absorbing vibrations through supple, wide tires and a little suspension in the fork. The second is to make the contact points, where your body touches the bike, as anatomical as possible.

A Time Piece

A decent watch is a useful piece of personal equipment. While not a critical item many of use appreciate a rugged, practical timepiece. I thought I would discuss my experience with watches, as it reflects the activities I was involved in at the time.

How Conspiracy Theories Are Shaping the 2020 Election—and Shaking the Foundation of American Democracy

Democracy relies on an informed and engaged public responding in rational ways to the real-life facts and challenges before us. But a growing number of Americans are untethered from that. “They’re not on the same epistemological grounding, they’re not living in the same worlds,” says Whitney Phillips, a professor at Syracuse who studies online disinformation. “You cannot have a functioning democracy when people are not at the very least occupying the same solar system.”

Attack Surface Kickstarter

Fuck Audible.

de Young 2020

YubiKey Cleaning

I’ve carried the same YubiKey NEO on my keychain for five years. On average it gets used dozens of times per day, via USB, as an OpenPGP card. The YubiKey looks a little worse for wear, but it almost always works flawlessly.

Occasionally, it requires a few insertions to be read. When this happens I clean the contacts by rubbing them gently with a Pentel Clic Eraser, wiping off the dust, spraying them with isopropyl alcohol, and then wiping them dry. Afterwards, the YubiKey is registered immediately on the first insert. I perform this procedure about once or twice per year.

YubiKey Cleaning

Using the eraser is potentially dangerous, but I’ve had good luck with it over the years. The white vinyl in the Pentel Clic feels very smooth compared to the abrasiveness of the rubber found on the tops of most pencils.

A few years ago, when large wildfires were becoming the norm, I remember hearing that you shouldn't vacuum when the air quality was poor.

The claim was that pollutants would go through the vacuum and out the exhaust, distributing them back into the air, where you then breathe them in. It was better to just let them sit. While this argument made sense, it struck me as primarily being a critique of a poorly designed tool: I vacuum to remove unwanted matter from my living space, not to redistribute it within the space. So I did the obvious thing and bought a Miele vacuum with HEPA exhaust filter from the Germans. For the past four years my vacuum has been effectively the same as my air filter. I can use it regardless of environmental conditions, even during the 36-hour night.

San Francisco Sunrise

Link Log 2020-08-25

A clean start for the web

Inside the high-stakes world of clandestine crude shipping

Hygiene Theater Is a Huge Waste of Time

COVID-19 has reawakened America’s spirit of misdirected anxiety, inspiring businesses and families to obsess over risk-reduction rituals that make us feel safer but don’t actually do much to reduce risk-even as more dangerous activities are still allowed. This is hygiene theater.

Elderblog Sutra: 11

Applied to a blog, angkorwatification is a sort of textual equivalent of rewilding. You have a base layer of traditional blog posts that is essentially complete in the sense of having created, over time, an idea space with a clear identity, and a more or less deliberately conceived architecture to it. And you have a secondary organic growth layer that is patiently but relentlessly rewilding the first, inorganic one. That second layer also emerges from the mind of the blogger of course, but does so via surrender to brain entropy rather than via writerly intentions disciplining the flow of words. I’ve seen some other old sites undergo angkorwatification. Some seem to happily surrender to it like I am doing, others seem to fight it, like I won’t.

Bikes of the Bunch: Rob English’s English road bike

I am very excited about this revolutionary bicycle, and look forward to testing it. Look at all the gains – the same braking power, modulation and control, but with less weight, easier-to-remove wheels, no hydraulics, more compliant fork and no rotor-rubbing noises! Yes, there are a couple of downsides – it’s not ideal in the wet, and it can’t use the best shaped aerodynamic (carbon) rims. Still, could this oversized rotor concept be the next big thing in cycling?

Buena Vista Fire Sunset

The pandemic has demonstrated the value in stocking a wide supply of spare bike parts.

The effect is evident when looking at the Amazon price history graphs provided by CamelCamelCamel. For example, take the six-month price history of my preferred chain:

Or the six-month price history of my favorite tires:

Fortunately, I have a long-held policy of stocking spares.

Tracking My Phone Bill with Ledger

Back in 2013 I bought my first smartphone and signed up for a T-Mobile prepaid plan, referred to at the time as the “Walmart Plan”. The plan cost $30 per month, was intended for new customers only, and was supposed to only be available to those who purchased the SIM card at a Walmart. It offered a small amount of voice minutes and a large amount of data, which struck me as what one would want with one of these newfangled computer-phones. I bought a SIM card, figured out how to get T-Mobile to sign me up on the plan despite not stepping foot into a Walmart, and haven’t looked back since.

One of the things that appeals to me about the setup is the level of separation it gives me from the service provider. I purchased the phone from the manufacturer and the SIM card I bought with cash. I fund the plan by purchasing refill cards from third-party vendors. I have never provided T-Mobile with any financial information. They have no ability to take any money from me, except what I give them when trading in the refill cards. Obviously, the primary business of any mobile communications provider is location tracking, so I can’t refer to my relationship with them as “privacy preserving”, but I like to think it does allow me to retain some level of agency that is lost in a more traditional relationship.

If there is a downside to this setup, it is that it can be difficult to understand what I actually pay per month. The plan costs $30. There is some limit to the number of SMS messages, but I have no idea what it is. Data is “unlimited”, which means throttled over 4GB, but I don’t think I’ve ever approached even half that limit. Minutes are limited, and if I go over the allotment I’m charged a higher rate, but the service continues as long as the balance of the account remains positive.

I always want to keep more than $30 in the account, in case I do go over the allotted minutes. So I buy $50 refill cards. They have $50 of value, and are supposed to cost me $50. But the vendor I tend to by them from charges a $1 service fee, offers a points program that sometimes results in a discount being applied, and frequently has sales that offer a couple dollars off. So I end up paying something like $48-51. If I do exceed the limits of the plan, I may end up buying a $50 card one month and the next. More often, I buy a $50 card one month and have enough left over in the account that I do not need to refill it the following month. My plan renews on the 5th of the month, so some months I may end up spending $100 by buying one refill card on the first day of the month and another on the last in anticipation of the following month’s renewal.

All of that is to say that it is difficult to have an intuitive feel for what my average monthly phone expense is, but it’s important that I can get that number so that I can determine if the plan is still working or if I should look for a better offer. Fortunately, this is a thing that Ledger makes extremely simple.

Whenever I purchase a refill card, I log the transaction in the Expenses:Utilities:Phone account. With that done, I can ask Ledger to report on all transactions in that account, grouped by month, with a running average in the final column.

$ ledger register utilities:phone --monthly --average --begin 2019-08
2019-09-01 - 2019-09-30     Expenses:Utilities:Phone    $48.50      $48.50
2019-10-01 - 2019-10-31     <None>                      0           $24.25
2019-11-01 - 2019-11-30     Expenses:Utilities:Phone    $46.50      $31.67
2019-12-01 - 2019-12-31     <None>                      0           $23.75
2020-01-01 - 2020-01-31     Expenses:Utilities:Phone    $51.00      $29.20
2020-02-01 - 2020-02-29     <None>                      0           $24.33
2020-03-01 - 2020-03-31     Expenses:Utilities:Phone    $48.50      $27.79
2020-04-01 - 2020-04-30     <None>                      0           $24.31
2020-05-01 - 2020-05-31     Expenses:Utilities:Phone    $48.50      $27.00
2020-06-01 - 2020-06-30     Expenses:Utilities:Phone    $46.50      $28.95
2020-07-01 - 2020-07-31     <None>                      0           $26.32
2020-08-01 - 2020-08-31     Expenses:Utilities:Phone    $51.00      $28.38

Over the past 12 months, I have spent an average of $28.38 per month on phone service. I’m ok with that.

Adding Metadata to Ledger

As mentioned previously, two of the primary reasons I use Ledger are the intimate awareness it provides of how money is moving, and its timely representation of current balances. The third primary reason I use the tool is for the activity history it provides.

Recording almost every transaction I make (excepting only some small petty cash) allows me to look at years past and build an accurate picture of what I was doing. Most activities leave some sort of financial record, even if the transaction is only tangential to the activity itself. This is the sort of information that I would be extremely uncomfortable providing to a third-party, but is quite useful to have myself.

Storing receipts provides an additional layer of detail to the history created in the Ledger journal. As an intermediate between the full receipt and the basic journal entry, I find it is extremely valuable to use comments and tags within the journal. Almost every transaction in my Ledger journal that is not for food has a comment describing what goods or service was purchased.

In Ledger, comments begin with a semicolon. I store them below the first line of the transaction. When placed here, Ledger refers to these comments as notes. When purchasing goods, I add one comment – or note – for each unique item on the transaction. For instance, I might buy socks:

2018-07-02=2018-07-01 * Socks Addict
    ; Darn Tough Light Cushion No Show Tab, Black/Grey, Large, 2x
    Expenses:Clothing:Footwear                $33.40
    Liabilities:Bank:Visa

The comment tells me exactly what was purchased. More importantly, it tells me the model name, the color, and the size of the item. If I want to purchase another pair of identical socks, I can do so easily. This seems like a minor thing, but when it is applied to everything I buy, it is hard to overstate how greatly this ability has improved my quality of life over the past decade.

In Ledger, comments are searchable. Say I want to list every transaction where I purchased a pair of Darn Tough socks. I buy them from different retailers, so I can’t filter by the payee. All the transactions are in the Expenses:Clothing:Footwear category, but that category includes socks from other manufacturers and well as other things that go on my feet, so I can’t filter by that. But I can query all transactions with a note which includes the string “darn tough”.

$ ledger register note darn tough

A tag is a special kind of comment. Tags are useful if you have the foresight to realize that a particular transaction should be grouped with other transactions, but that transactions within the group will likely have different payees or accounts. Tags start and end with a :. Multiple tags can be chained together.

I use tags for vacations. Expenses related to any vacation are tagged with two tags: a generic :vacation: tag, and a tag specific to the vacation. This allows me to easily see what I spend on vacations in general, or any one vacation specifically. For example, in 2018 I took a 24-hour trip to Las Vegas to see Nine Inch Nails. That trip included numerous transactions in unrelated accounts: concert tickets, airline tickets, accommodations, ground transport, food, etc. All transactions were tagged with :vacation: and :nin-vegas-2018:. As an example, here is the transaction for purchasing the concert tickets:

2018-03-30=2018-03-28 * AXS
    ; Nine Inch Nails at The Joint, Las Vegas
    ; :nin-vegas-2018:vacation:
    Expenses:Entertainment:Performance        $95.50
    Assets:Bank:Checking

Ledger makes it easy to see all the expenses associated with that trip, both in total and broken out into different expense accounts.

$ ledger balance expense and %nin-vegas-2018

I also use tags to indicate transactions that occur via the same merchant system but have different payees. Specifically, things I buy on Etsy are tagged :esty: and things I buy on eBay are tagged :ebay:. Without these tags I would have no way to list all the Etsy purchases I have made, since I send the money to individual sellers and not Etsy itself.

I also use tags to indicate transactions related to keeping my apartment. Rent goes to the Expenses:Rent account. Electricity charges go to Expenses:Utilities:Electric. Gas charges go to Expenses:Utilities:Gas. My cell phone payment goes to Expenses:Utilities:Phone. The first three charges I consider apartment expenses. My cell phone is not. By tagging the first three with :apt: I can easily see the total monthly cost of keeping my apartment, without a bunch of complicated querying to exclude things like the cell phone bill.

My final use for tags is indicating transactions that I think should be deducted from my taxes. Some people do this with accounts, but I find that with the account structure that makes sense to me I often end up with a mix of deductible and non-deductible transactions within a single account. Tagging deductible transactions with :deduct: makes it easy to dump a list of all transactions that should be considered when completing yearly taxes.

Reconciling Ledger

For me, one of the primary appeals of using Ledger – or really any accounting system – is that it let’s me know how much money I have (or don’t have) right now. Other people’s records lag behind reality.

If I submit an order for a $50 widget on a website today, I consider that $50 gone, even though the vendor likely didn’t collect the money immediately. They probably placed a hold on the funds, but will not actually capture the money until they ship the order, which may take a couple days. When they do capture the funds, it may still be another day or two until that action posts to my online bank statement. Were I dependent on the bank, I could go a week thinking that I have $50 more than I actually have.

It is important to me that I log transactions without waiting for them to appear elsewhere, but at some point I do want to reconcile my records against what my bank believes. I accomplish this with auxiliary dates.

Were I to submit that order for a $50 widget today, I would create the entry using today’s date. Even if it takes me a few days to actually record the entry, I will still use the date the order was submitted.

2020-08-06 Acme, Inc
    Expenses:Misc                             $50.00
    Assets:Bank:Checking

Periodically, I will manually reconcile every transaction in my journal against my bank’s online statements. Usually this happens every other week or so. Many people will simply dump a CSV from their bank and use a script to parse and import the results into their journal. I prefer to do it manually. This rarely takes more than 30 minutes, and for me it is one of the other primary appeals of using Ledger: it forces me to be intimately aware of how money is flowing in my life, and makes it extremely easy to spot problems or errors. It is difficult to accomplish that reliably without manually touching every transaction.

So a week or two later I’ll login to the bank and make sure there is a $50 payment to Acme, Inc. If the date listed by the bank for that transaction is different from what I recorded – which for online transactions is almost always the case – I’ll prepend that date to my entry.

2020-08-10=2020-08-06 Acme, Inc
    Expenses:Misc                             $50.00
    Assets:Bank:Checking

When there are two dates, Ledger considers the date to the left of the = to be the primary date. The other date is the auxiliary date. Previously, when only one date was listed, it was the equivalent to 2020-08-06=2020-08-06. By using the bank’s date as the primary date, I know that the default output from a report like ledger register assets:bank:checking will match the bank’s statements. If I want to report on what I consider to be the real dates of the transactions, I can pass the --aux-date flag.

The journal files themselves I edit manually in vim, with a little help from vim-ledger. I have <leader>t mapped to set today’s date as the primary date of the current transaction. Because I usually only reconcile two or three times a month, today’s date is often not the date I actually want, but this shortcut allows me to immediately insert a new date in the correct format. I can then quickly change the day number to whatever it should actually be.

I consider the transaction to be cleared once the bank statement and the Ledger journal file agree on the date, payee, and dollar amount. In Ledger, transactions are marked as cleared by inserting an * between the date and the payee. In vim I map this to <leader>c. A complete transaction thus looks like this:

2020-08-10=2020-08-06 * Acme, Inc
    Expenses:Misc                             $50.00
    Assets:Bank:Checking

Ledger defaults to including all transactions in its reporting and calculations. By passing the --cleared flag it will only include transactions that have been marked as cleared. So after I think I’m done reconciling all transactions against my bank statement, I will run ledger balance assets:bank:checking --cleared and verify that the resulting balance matches what the bank shows. If I want to know how much money I actually have in that account, I will run ledger balance assets:bank:checking. The output of this will likely include transactions that the bank hasn’t caught on to yet.

If for some reason Ledger’s output of the cleared balance does not agree with the bank, my first step will be to make sure that all transactions are sorted by their primary date. If I already have the file open in vim, I have a shortcut for that. Otherwise I keep a one-liner script called ledger-sort that takes the name of a ledger file as input, sorts it, and shows me the diff.

1
2
3
#!/bin/sh

ledger -f $1 print --sort d > $1.sort && mv $1{.sort,} && git diff

Checking the diff of the sorted output before continuing is important. Sometimes I’ll make a silly mistake like typing the wrong year when entering the transaction. This sort of mistake is obvious when looking at the diff.

Once the file is sorted, I’ll run ledger register assets:bank:checking --cleared. The final column in this output is a running total of the account balance. The only difference between the output and my bank statement should be the ordering of transactions within a day, which I do not care about.

I’ll know that I last cleared my journal around a certain date, and that the account balance was accurate as of that date.1 If I was doing this on 2020-08-06, I might say to myself “I know I cleared Ledger sometime in mid-July, so let’s look at my account balance at end of day on 2020-07-15”. If the bank and Ledger both agree on the balance at the end of day on that date (regardless of the ordering of the multiple transactions that may have occurred on the day), I’ll know that the error is somewhere between 2020-07-16 and 2020-08-06. Next I’ll jump to another random day in that period – maybe 2020-07-22 – and perform the same exercise. This is repeated until I find the first day where the two systems disagree on the ending balance. Then I look at every transaction on that day and find the error. Usually it will be a simple data entry error, such as me typing $12.10 instead of $12.01. Having my receipts stored allows me to verify that I did indeed agree to pay $12.10 and that the error is mine rather than the payee’s. This whole process of finding errors rarely requires more than two minutes, and occurs maybe once every three months.

Though I don’t use CSV exports from my banks for anything, I do like to periodically download and archive them. When I generate the exports I ask for one file per month. I refer to these as “bank dumps” and store them in directory named dump. Each file is named for the account and month it represents. For example, an account named Assets:Bank:Savings will have last month’s dump stored at dump/assets-bank-savings-202007.csv. I pretty much never open these files, but I like having them archived. They allow me to see how much money a bank thought I had at any point in time, even if the account is no longer open, and provide assurance that I can always true my records if I somehow mess them up.

Notes

  1. Ledger has the ability to record assertions. I have never used this feature, but I probably should.

Receipts and Ledger

As previously mentioned, I store receipts in the same repository as my Ledger data files.

Purchasing something online automatically generates a receipt; it’s just a simple matter of saving the confirmation web page or email as a PDF and moving it into the proper directory with the proper filename. That’s a low enough bar that I cannot justify not storing them. I have a receipt for every digital transaction I have made since I began using Ledger in 2012.

I’m less strict about storing receipts for transactions that occur in meatspace. These transactions usually result in a paper receipt (which may not be initially even be offered), which then requires scanning or photographing. That is just enough effort that I don’t always want to do it. I’ll store the receipt for a meatspace transaction if the amount is greater than $100, or if I think it might be tax deductible, or if I think I might make a warranty claim. But if the transaction is a $10 sandwich for lunch, I probably won’t bother storing the receipt.

My naming scheme for the receipt files consists of the date of the transaction, the amount, and the payee. This is enough information to go from a Ledger journal entry to a receipt, or from a receipt to a Ledger journal entry. For example, consider a transaction with a journal entry like this:

2020-07-14 Acme Widgets
    Expenses:Bicycle:Parts                    $23.72
    Assets:PayPal

The receipt for that transaction will be at receipts/20200714_23.72-acme_widgets.pdf.

When I first began using Ledger and came up with this file naming scheme, I figured I would write some sort of script that would parse the components of a journal entry and generate the expected receipt filename so that I could quickly jump from one to the other. What I found is that the scheme is simple enough to make such a script unnecessary. When I look at a journal entry I intuitively know what the receipt filename is, and when I look at a receipt filename I intuitively know what the journal entry is. Writing a simple script to generate one from the other would take more energy than I have collectively spent over the past eight years solving the problem manually. So I never wrote it.

I also store invoices in the same repository, in a directory creatively named invoices. These are invoices that vendors send me – primarily things like rent statements and utility bills – not invoices that I send to people. The naming scheme is the same as what I use for receipts, except in this case the date in the filename is the date the vendor included on the invoice rather than the date I received it or paid it. I chose this because if I ever need to dispute a charge or a payment, this date is an easy way for both the vendor and I to quickly verify that we are discussing the same thing. Each invoice will of course have an associated receipt in the receipts directory after I pay it, and the date on this file will be the date on which I submitted the payment.

Every now and then I need to write someone an old-fashioned paper check. These get scanned and stored in a checks directory. The file naming scheme for these is similar to that of receipts, except that in addition to the date, amount and payee, I also include the check number. Ledger supports including the check number in the journal entry, so including it in the filename provides another way to link the two things. For example, back in 2015 I renewed my passport book and bought a passport card:

2015-11-09=2015-10-31 * (#1047) US Department of State
    ; Passport Book Renewal
    ; Passport Card Purchase
    Expenses:Travel:Documentation            $140.00
    Assets:Bank:Checking

The scan of the check from that transaction lives at checks/20151031_140.00-1047-us_department_of_state.pdf.

Tracking Cash with Ledger

In a double-entry accounting system like Ledger, money always moves from one account to another. Money cannot be magicked in or out of existence.

Previously I mentioned that I sometimes do not track cash transactions. If the transaction is less than $20 and is not related to a category of expense I care about, I may not bother with it. At first glance, this may seem like it conflicts with the inability to magically disappear money. If I take cash out of my checking account, I have to represent that withdrawal or else the balance of the account will be screwy and I’ll never be able to reconcile it against the bank’s statement. Transforming money from electrons in a bank account to Federal Reserve Notes in my pocket has no impact on its value, so one’s initial thought may to represent the cash as an asset account.

2020-07-13 ATM
    Assets:Cash                               $40.00
    Assets:Bank:Checking

This would be technically correct, and the best way to do things if every last penny of that cash was going to be tracked. But logging the withdrawal that way will not work if, over some period of time, I spend the $40 cash in a serious of small, untracked transactions. In that case, my Assets:Cash account would show that I have $40 more than reality. When asset accounts are not accurate, the world ends.

The solution is to treat cash as an expense account. The balance of an expense account is less important. It tells you how much money you’ve spent on that category of thing, but it doesn’t represent money that you hold. Effectively, this is saying that the $40 was spent when it was withdrawn at the ATM. It no longer contributes to assets or net worth.

2020-07-13 ATM
    Expenses:Cash                             $40.00
    Assets:Bank:Checking

The transaction would look similar if I asked for cash back while buying groceries.

2020-03-20 Lucky Dragon Markets
    Expenses:Food:Groceries                   $58.89
    Expenses:Cash                             $40.00
    Assets:Bank:Checking

But the trick is that money doesn’t have to move between an expense account and an asset account. Money can move between any accounts, including two expense accounts. I am strict about tracking food related expenses, so if I buy a burrito with that cash, I’ll want to log it. I can do that like this:

2020-07-18 A Taqueria
    Expenses:Food:Dining:Lunch                 $8.23
    Expenses:Cash

If part of your savings are in cash – in a safe deposit box, stuffed in your mattress, buried in the hills, whatever – you would want to treat it as an asset so that you can track the balance.

2020-08-30 ATM
    Assets:Mattress                          $100.00
    Assets:Bank:Checking

To illustrate the degree to which I do track cash: Ledger currently reports the balance of Expenses:Cash to be $3797.29. I’ve certainly dealt with significantly more cash than that since 2012. The balance of that account is simply the amount of cash I have acquired but failed to log as spent.

Organizing Ledger

Ledger is a double-entry accounting system that stores data in plain text. I began using it in 2012. Almost every dollar that has passed through my world since then is tracked by Ledger.1

Ledger is not the only plain text accounting system out there. It has inspired others, such as hledger and beancount. I began with Ledger for lack of a compelling argument in favor of the alternatives. After close to a decade of use, my only regret is that I didn’t start using earlier.

My Ledger repository is stored at ~/library/ledger. This repository contains a data directory, which includes yearly Ledger journal files such as data/2019.ldg and data/2020.ldg. Ledger files don’t necessarily need to be split at all, but I like having one file per year. In January, after I clear the last transaction from the previous year, I know the year is locked and the file never gets touched again (unless I go back in to rejigger my account structure).

The root of the directory has a .ledger file which includes all of these data files, plus a special journal file with periodic transactions that I sometimes use for budgeting. My ~/.ledgerrc file tells Ledger to use the .ledger file as the primary journal, which has the effect of including all the yearly files.

$ cat ~/.ledgerrc
--file ~/library/ledger/.ledger
--date-format=%Y-%m-%d

$ cat ~/library/ledger/.ledger
include data/periodic.ldg
include data/2012.ldg
include data/2013.ldg
include data/2014.ldg
include data/2015.ldg
include data/2016.ldg
include data/2017.ldg
include data/2018.ldg
include data/2019.ldg
include data/2020.ldg

Ledger’s include format does support globbing (ie include data/*.ldg) but the ordering of the transactions can get weird, so I prefer to be explicit.

The repository also contains receipts in the receipts directory, invoices in the invoices directory, scans of checks (remember those?) in the checks directory, and CSV dumps from banks in the dump directory.

$ tree -d ~/library/ledger
/home/pigmonkey/library/ledger
├── checks
├── data
├── dump
├── invoices
└── receipts

5 directories

The repository is managed using a mix of vanilla git and git-annex.2 It is important to me that the Ledger journal files in the data directory are stored directly in git. I want the ability to diff changes before committing them, and to be able to pull the history of those files. Every other file I want stored in git-annex. I don’t care about the history of files like PDF receipts. They never change. In fact, I want to make them read-only so I can’t accidentally change them. I want encrypted versions of them distributed to my numerous special remotes for safekeeping, and someday I may even want to drop old receipts or invoices from my local store so that they don’t take up disk space until I actually need to read them. That sounds like asking a lot, but git-annex magically solves all the problems with its largefiles configuration option.

$ cat ~/library/ledger/.gitattributes
*.ldg annex.largefiles=nothing

This tells git-annex that any file ending with *.ldg should not be treated as a “large file”, which means it should be added directly to git. Any other file should be added to git-annex and locked, making it read-only. Having this configured means that I can just blindly git annex add . or git add . within the repository and git-annex will always do the right thing.

I don’t run the git-annex assistant in this repository because I don’t want any automatic commits. Like a traditional git repository, I only commit changes to Ledger’s journal files after reviewing the diffs, and I want those commits to have meaningful messages.

Notes

  1. I do not always track miscellaneous cash transactions less than $20. If a thing costs more than that, it is worth tracking, regardless of what it is or how it was purchased. If it costs less than that, and it isn't part of a meaningful expense account, I'll probably let laziness win out. If I buy a $8 sandwich for lunch with cash, it'll get logged, because I care about tracking dining expenses. If I buy a $1 pencil erasure, I probably won't log it, because it isn't part of an account worth considering.
  2. I bet you saw that coming.

Isolation Report, Day 2020.07.29

One hundred and thirty nine days of Operation Fuck Off I’m a Hermit Now. Bacon and chocolate supplies restocked.

All systems nominal.

Link Log 2020-07-19

Wireless is a trap

I want my tools to be predictable – to have consistent performance and fail in ways that I understand. Wireless protocols are inherently more complex (because many devices share the same airspace) and have more different ways to fail, so they’re much less predictable than wires. For me, the convenience often isn’t worth that cost.

Peer-Reviewed Scientific Journals Don’t Really Do Their Job

In many ways, journals don’t even pretend to ensure the validity of scientific findings. If that were their primary goal, journal policies would require authors to share their data and analysis code with peer reviewers, and would ask reviewers to double-check results. In practice, reviewers can only judge the science based on what’s reported in the writeup, and they usually can’t see the details of the process that led to the findings. (This is kind of like asking a mechanic to evaluate a car without looking under the hood.) And for really important discoveries, you might expect journals to recruit an independent team of scientists to try to replicate a study from scratch. This basically never happens.

How Normie Minimalism and Farmhouse Chic Took Over Contemporary Design

The fetishization of and association with regional manifestations of a labor past is what ties together the minimalism of the industrial loft to an aesthetic that has been increasingly dubbed “modern farmhouse.” Just as the loft romanticizes the backdrop of 19th century urban industry, the modern farmhouse romanticizes the similarly Steinbeck-ian plight of the agricultural worker. It makes sense that an aesthetic marketed towards suburban homeowners would be based off agricultural work, since the history of the suburbs from the Garden City movement to gated communities is based off escape from urban plights and the further-flung expansion into greenfields, or previously agricultural, areas. This fetishized and aestheticized use of the motifs of agriculture also enabled marketing to areas such as the regional South, whose economic production still revolves around agriculture and which never urbanized to the same extent – or in the same way – as the Northeast.

Handmind in Covidtide

Moreover, one of the effects of Covidtide, I think, is that by forcibly breaking some of our technological habits it creatively destabilizes others. To have any one thoughtless pattern of life disrupted is to be put into a frame of mind that allows you to contemplate the deliberate disruption of a different thoughtless pattern. Thus all the people who, after three months of baking bread, are now saying that they’ll never go back to buying their bread from the supermarket. They probably will buy bread from the supermarket; but they’ll know what they are doing, and why. And this is useful knowledge.

The Conspiracy Singularity Has Arrived

The strain of living in this particular time, with a dragging, devastating pandemic and a global uprising against police brutality and racial injustice, crashing together at the highest speed, has accelerated something that’s been going on for years. Call it the conspiracy singularity: the place where many conspiracy communities are suddenly meeting and merging, a melting pot of unimaginable density. UFO conspiracy theorists and QAnon fans are advocating for drinking a bleach solution promoted by anti-vaxxers. QAnon groups and Reopen America groups alike promoted Plandemic, a film clip jam-packed with conspiratorial claims about the causes and spread of COVID. The Freedom Angels, an anti-vaccine group based in California, are among the many such groups joining anti-lockdown protests, using language that feels heavily drawn from the Patriot movement: They’re calling stay-at-home orders “tyranny,” addressing their followers as “Patriots,” and positioning themselves as “a new civil rights movements.”

Dead and Alive: Beliefs in Contradictory Conspiracy Theories

Thus, we predict that for someone with a conspiracist world-view, nearly any theory that assumes deception by officialdomin its explanation for a world event and stands in opposition to the “mainstream” account will garner some agreement. This relationship may hold even to the point that people who believein a world governed by conspiracy are likely to endorse contradictory conspiracy theories about the same topic. Just as Adornoet et al. (1950) found positive correlations in endorsement of contradictory stereotypes, we expect to see positive relationships between endorsement of contradictory conspiracy theories about the same event. For example, the more that participants believe that a person at the center of a death-related conspiracy theory, such as Princess Diana or Osama Bin Laden, is still alive, the more they also tend to believe that the same person was killed, so long as the alleged manner of death involves deception by officialdom.

Aquatic Park

I've started mounting my bike lights via shock cord.

The previously mentioned Orfos Pro LED flares ship with Velcro One-Wrap for mounting. This works well enough, but lately I’ve decided I prefer using shock cord and cord locks. The cordlocks add a little weight to the system, but this setup mounts to all the things I want to mount the lights to, and makes it very easy to tighten. After tightening the lights don’t move around at all, where with the Velcro they would move a little on a bumpy road. This system is also quick to attach and detach, which I appreciate when parking, and can be more easily manipulated when wearing full-fingered gloves.

Orfos Pro Shock Cord Mount

  • Orfos Pro Shock Cord Mount
  • Orfos Pro Shock Cord Mount

Prepare

There’s always a prevailing mystique in any civilization. It builds itself as a barrier against change, and that always leaves future generations unprepared for the universe’s treachery. All mystiques are the same in building these barriers – the religious mystique, the hero-leader mystique, the messiah mystique, the mystique of science/technology, and the mystique of nature itself. We live in an Imperium which such a mystique has shaped, and now that Imperium is falling apart because most people don’t distinguish between mystique and their universe. You see, the mystique is like demon possession; it tends to take over the consciousness, becoming all things to the observer.

Frank Herbert, Children of Dune

Link Log 2020-06-30

A Non-Euclidean View of California as a Cold Place to Be

I don’t think we’re ever going to get to utopia again by going forward, but only roundabout or sideways; because we’re in a rational dilemma, an either/or situation as perceived by the binary computer mentality, and neither the either nor the or is a place where people can live. Increasingly often in these increasingly hard times I am asked by people I respect and admire, “Are you going to write books about the terrible injustice and misery of our world, or are you going to write escapist and consolatory fantasies?” I am urged by some to do one – by some to do the other. I am offered the Grand Inquisitor’s choice. Will you choose freedom without happiness, or happiness without freedom? The only answer one can make, I think is: No.

The Long Shadow Of The Future

It’s generally a mistake to make long-term forecasts in the midst of a hurricane, but some outlines of lasting shifts are emerging. First, a government or society’s capacity for technical competence in executing plans matters more than ideology or structure. The most effective arrangements for dealing with the pandemic have been found in countries that combine a participatory public culture of information sharing with operational experts competently executing decisions. Second, hyper-individualist views of privacy and other forms of risk are likely to be submerged as countries move to restrict personal freedoms and use personal data to manage public and aggregated social risks. Third, countries that are able to successfully take a longer view of planning and risk management will be at a significant advantage.

Punishing the Innocent

For the ones doing the mobbing, ruining the lives of innocent people is not a bug in their program, it’s an essential feature. There can be no reign of terror when only the guilty are punished.

Hardcore UFOs

In his 2018 book New Dark Age, James Bridle identifies the conspiracy theory as an essential coping mechanism of late modernity. He writes, “Surrounded by evidence of complexity, the individual, however outraged, resorts to ever more simplistic narratives in order to regain some control over the situation.” Bridle’s observation has proven especially useful lately, with even the most composed of us experiencing a prolonged sense of collective powerlessness in the face of a global pandemic.

Wireless is a trap

I want my tools to be predictable – to have consistent performance and fail in ways that I understand. Wireless protocols are inherently more complex (because many devices share the same airspace) and have more different ways to fail, so they’re much less predictable than wires. For me, the convenience often isn’t worth that cost.

So this is the famous JavaScript

Tank Hill

Link Log 2020-06-14

Stochastic Resonance in Reading

It’s when the current environment lies outside the scope of your attention, when you neither seek nor expect any connection to it, that you make room for random resonances to form.

How Google Docs became the social media of the resistance

“Hyperlinks are the most succinct and quickest way to access things, and you can’t do that on Facebook or Twitter.”

Garbage Language: Why do corporations speak the way they do?

In an environment of constant auditing, it’s safer to use words that signify nothing and can be stretched to mean anything, just in case you’re caught and required to defend yourself.

A Portrait of Eliane Radigue (Institute for Media Archaeology, 2009)

Derailleurs - an introduction

Deport Racists Mouse

Searching Books

ripgrep-all is a small wrapper around ripgrep that adds support for additional file formats.

I discovered it while looking for a program that would allow me to search my e-book library without needing to open individual books and search their contents via Calibre. ripgrep-all accomplishes this by using Pandoc to convert files to plain text and then running ripgrep on the output. One of the numerous formats supported by Pandoc is EPUB, which is the format I use to store books.

Running Pandoc on every book in my library to extract its text can take some time, but ripgrep-all caches the extracted text so that subsequent runs are similar in speed to simply searching plain text – which is blazing fast thanks to ripgrep’s speed. It takes around two seconds to search 1,706 books.

$ time(rga -li 'pandemic' ~/library/books/ | wc -l)
33

real    0m1.225s
user    0m2.458s
sys     0m1.759s

Link Log 2020-06-07

Changing Stripes: a History of Tiger Stripe Camo

While it has been called “tiger stripe camo” unofficially, as the name derives from its resemblance to the stripes on the big cats, it is unique in that the pattern has no name. And unlike OCP, UCP, or the other official camouflage patterns, tigerstripe camouflage is also not really one specific pattern.

The Overmilitarization of American Foreign Policy

U.S. policymakers have many nonmilitary tools at their disposal. But those tools will remain inadequate for the challenges ahead if Washington does not overhaul its outdated national security apparatus. The current structure, established by the National Security Act of 1947—which created the Department of Defense, the U.S. Air Force (as a separate military service), the CIA, and the National Security Council (NSC)—has outlived its usefulness.

Judoka (Josef Reeve, 1965)

I don’t think Kimura recognizes physical limitations. He just trains us beyond any that happen to come up.

The Boogaloo Movement Is Not What You Think

About Face: Death and surrender to power in the clothing of men.

COVID-19 Occupied Japantown, San Francisco

Oster Classic 76 Maintenance

Last year I mentioned my happiness with the Oster Classic 76 clippers. One of the attributes I called out was its serviceability. Today, after five years of personal use, I decided it was time to remove the faceplate, clean the innards, and replace the grease. I followed the instructions in Oster’s maintenance video (which appears to be straight out of 1998). It’s a simple process. I only cut my hair once every 4-8 weeks, so I suspect performing the deep cleaning every five years is about the right schedule. I lubricate the blade every 3 or 4 uses.

Oster Classic 76 Maintenance

No special tools were needed. Something pokey and scrapey is helpful for cleaning out the small crevices. I used a titanium Norton Universal Cleaning Stick because I had it close to hand, but a flathead screwdriver would work just as well. All parts appear to be in excellent condition, and when reassembled the clippers pur like an angry kitten.

Pocket Shield EDC

I’ve used the Raven Concealment Systems Pocket Shield on and off since 2014. In the past I would outfit it only in specific environments where showing a pocket clip would be inappropriate, such as night clubs and weddings. Towards the end of 2019 I decided I wanted to try never showing a pocket clip, which meant incorporating the Pocket Shield into my everyday carry. For the past few months I have been happy with a setup utilizing two different Blue Force Gear pouches: the Single Pistol Mag Belt Pouch and the Ten-Speed Single Pistol Mag Pouch.

Pocket Shield EDC: Rear

The former pouch has a Velcro strap on the back, intended to be attached to a belt. The latter has Blue Force’s MOLLE strap on the back for attaching to any PALS grid. The pouches have other minor differences, but the attachment method is the only difference that matters. Both work equally well on the Pocket Shield.

I use the Ten-Speed pouch to hold my ASP Key Defender OC (which I carry in addition to my pack mounted OC) and a Fisher 400B Bullet Space Pen (loaded with a fine cartridge and, obviously, a clip because pens without clips are dumb).

Pocket Shield EDC: Front

The belt pouch is used to secure my Triple Aught Design Dauntless MK3. When attaching the belt pouch, I roll over the top of the lower Velcro loop, which causes the Velcro to stick out a bit from the Pocket Shield instead of sitting flush. This acts as a stop for the knife’s pocket clip, preventing the knife from sitting all the way into the pouch. Increasing the ride height of the knife makes it much easier to deploy than it would be if it were completely inserted. The pouch keeps the knife from wandering around, which it is wont to do when just clipped directly over the top edge of the Pocket Shield.

Pocket Shield EDC: Knife Stop

Lately I’ve also been keeping my Elzetta Alpha on the Pocket Shield, but I’m not entirely convinced that I like it there.

I published my script for creating optical backups.

Optician archives a directory, optionally encrypts it, records the integrity of all the things, and burns it to disc. I created it last year after writing about the steps I took to create optical backups of financial archives. Since then I’ve used it to create my monthly password database backups, yearly e-book library backups, and this year’s annual financial backup.

It's been a while since I've regularly run with a weighted rucksack.

In the past two weeks I’ve been getting back into the practice. To setup the bag, I remove the Control Panel 1 and Transport Sleeve that I normally EDC in my FAST Pack Litespeed and replace them with an internally mounted Transporter Tail. This is used to secure a 30 lb Hyperwear Steelbell. On the outside of the bag the only change I make from my normal setup is the addition of a prototype FAST Stability Belt. With the bag weighted down I lash on my sandals, fire up my antisocial activity tracker, and it’s almost like it’s 2011 again.

Rucksack Run Equipment

Baking soda has approximately 37,000 uses around the home.

I use it to occasionally supplement my all-purpose cleaner when washing dishes, use it to clean produce, and sometimes dump some in with my laundry.

I store baking soda by the kitchen sink in a Progressive Prepworks Mini Prokeeper. This had a good, tight seal that keeps the baking soda fresh and dry, and has a little dusting insert for easy shaking. The 1.5 cup capacity is meant to hold the contents of a standard sized cardboard box of baking soda, but I don’t buy those.

For the past three years I have purchased 13.5 pound resealable bags of baking soda. I bought my first bag in January 2018 and found it lasted me exactly one year. I have purchased another bag each subsequent January. The bags are cheap (I pay an average of $8) and keep the bulk baking soda fresh and dry for the year. I fill the Prokeeper container from this, and otherwise keep the bag sealed.

Bleach has a shelf life of 6 to 12 months.

After one year the sodium hypochlorite will have broken down into salt and water, which will not be helpful in your battle against the Black Death. According to the University of Nebraska’s guidelines on chemical disinfectants for biohazardous materials, “bleach loses 20-50% of its sodium hypochlorite concentration after 6 months”.

Bottles of Clorox bleach are stamped with a date code which when properly decoded will indicate the date of manufacture. The first 7 characters in the label on one of my bottles are A819275, indicating that it was manufactured in plant A8 on the 275th day of 2019, or October 2nd. The previously mentioned dateutils proves its usefulness here.

$ datediff 2019-275 now
169
$ datediff 2019-275 now -f "%m months, %d days"
5 months, 17 days

A simple shell function may be used to decode the date.

jul () {
    date -d "$1-01-01 +$2 days -1 day" "+%Y-%m-%d";
}

$ jul 2019 275
2019-10-02

Isolation Report, Day 2020.03.16

All systems nominal.

I've been training to be socially distant my whole life.

This may be my moment.

COVID-19 Occupied Union Square, San Francisco

Oatmeal Modifications

One of the things I learned from reading How Not to Die is that there are two different types of cinnamon. This seems like a thing I should have been aware of, but I was not. What is commonly sold simply as “cinnamon” is more properly called cassia cinnamon. Cassia cinnamon lowers blood sugar levels, and is also toxic in large amounts. The second variant is ceylon cinnamon. Ceylon cinnamon probably has no effect on blood sugar, but is also not toxic, so that’s a win. From the book:

There are two main types of cinnamon: Ceylon cinnamon and cassia cinnamon (also known as Chinese cinnamon). In the United States, anything simply labeled “cinnamon” is probably cassia, since it’s cheaper. This is unfortunate, because cassia contains a compound called coumarin, which may be toxic to the liver at high doses. Unless it’s specifically labeled Ceylon cinnamon, a quarter teaspoon of cinnamon even a few times a week may be too much for small children, and a daily teaspoon would exceed the tolerable upper safety limit for adults. Can’t you just switch to Ceylon cinnamon and get the benefits without the risks? Without the risks, yes, but we’re no longer so sure about the benefits.

Nearly all the studies showing blood sugar benefits of cinnamon have been performed with cassia. We’ve just assumed that the same would apply for the safer Ceylon cinnamon, but it was only recently put to the test. The nice blunting of blood sugars you see in response to cassia cinnamon disappeared when the researchers tried using Ceylon cinnamon instead. In fact, all along it may actually have been the toxic coumarin itself that was the active blood-sugar-lowering ingredient in the cassia cinnamon. Thus, sidestepping the toxin by switching to Ceylon cinnamon may sidestep the benefit. So, in a nutshell, when it comes to lowering blood sugars, cinnamon may not be safe (cassia), or it may be safe, but apparently not effective in reducing blood sugar (Ceylon).

I still encourage Ceylon cinnamon consumption, given that it is one of the cheapest common food sources of antioxidants, second only to purple cabbage.

I consume some cinnamon daily in my Standard Issue Oatmeal. After running out of cassia cinnamon a few months ago, I switched to ceylon cinnamon. It tastes different-but-similar. I am not concerned about my blood sugar levels – I’m in it purely for the flavor – so cassia cinnamon does not seem to have a place in my life.

The book also advocates strongly for the regular consumption of ground flaxseed. The author cites studies that show flaxseed to have anti-cancer properties and to be more effective than both drugs and aerobic exercise at lowering systolic and diastolic blood pressure. After reading the book I began to add a teaspoon of ground flaxseed to each of my oatmeal capsules. It does tend to make the oatmeal a bit more runny, but its impact on the taste is barely noticeable.

Also discussed in the book are goji berries. These are small dried fruits, sort of similar to raisins, that have unusually high levels of melatonin and antioxidants. I use goji berries to supplement my raisin consumption. Occasionally I substitute them into my oatmeal capsules, and I like to keep some on hand (in one of my preferred Sistema Klip It 1520 capsules) for an easy candy-like snack.

How Not to Die

Last year I read How Not to Die by Dr. Michael Greger on the recommendation of Hundred Rabbits.

The book is divided into two parts. The first part addresses common killers and how they can be mitigated, prevented or reversed through nutrition. The second part of the book covers specific food groups and gives guidelines for their regular consumption.

The book is meticulously researched, with every claim backed up by real, peer-reviewed science. When reading it, it felt like every other sentence had a citation. It’s unlikely that the average reader could actually go through each of the cited studies to confirm that the conclusions presented in the book are an accurate representation of the paper, or if they’ve been skewed to better fit Dr. Greger’s message.

The book grew out of NutritionFacts.org, a non-profit organization started by Dr. Greger with the goal of reading and understanding as much of the published science on nutrition and health as possible, and presenting the results as dietary guidelines actionable for normal people. (Unfortunately the website focuses primarily on video dissemination, which for me is an ineffective means of information transmission. I prefer plain text. Hence the book.)

Dr. Greger is largely opposed to consuming meat. He eschews terms like “vegetarianism”, instead preferring to advocate for what he calls an evidence-based diet centered on whole-food, plant based nutrition. I like to consume flesh, do not intend to stop, and think the consumption of it does provide important nutritional value (a point on which the doctor does acquiesce). Many of his warnings about flesh eating are less about the nutritional value of the meat itself and more about the cleanliness of the production and preparation environment. However, if you can look past the anti-meat tendencies and the possible biases in which type of research is reported on, there is still a lot of very good data in the book. It’s one of the best owner’s manuals for the body that I have read.

Pandemic Omega

So far my only recent purchase directly related to pandemic is another bottle of Omega-3 supplements.

A few years ago I accidentally discovered that Omega-3 supplements are an effective remedy for the cracked skin I experience on my hands due to dry winter air. Usually I pop my last pills sometime in February and don’t bother re-upping until the following November. This year I ran out in December and didn’t experience any issues – it must have been a more humid winter than usual – so I didn’t restock. But toward the end of February my hands were starting to feel dry due to the increased frequency of hand washing, use of alcohol-based hand sanitizer, and surface cleaning.

I restocked the pills, started dosing twice a day, and about a week later the skin on my hands felt healthy and smooth. I can wash my hands as frequently as I want, with whatever soap is available, and not worry about my skin cracking and creating a new vector for attack. The skin suit is fully operational.

Purchasing another bottle of Omega-3 supplements seems a much more rational purchasing response to COVID-19 than the newly popular pass time of nonsensical hoarding of bottled water and toilet paper.

And now for a reminder from Dr. Rollins on the dangers of Nerve Attenuation Syndrome.

Persons with a history of repeated instafacetweeting may be predisposed to the Black Shakes. Consult your doctor today.

Measuring Chain Wear

A bicycle chain elongates as it is used. This elongation – commonly referred to as “stretch” – is caused by the wearing down of the pins that hold the chain links together and the enlargement of the bore hole in the inner plates that the pins are inserted through. If left unchecked, wear on the chain causes the teeth on the cassette cogs and crank chainrings to become reshaped to the point that they will no longer mesh with a new chain. To extend the service live of these more expensive components, it behooves one to replace the chain before it becomes excessively worn. For drivetrains below 10-speed, the common advice is to replace the chain when it measures 0.75% elongation. For drivetrains above 10-speed, the common advice is to replace the chain when it measures 0.50% elongation. For 10-speed drivetrains, opinion varies between the two measurements, so take your pick.

Chain elongation may be measured with a ruler – 12 complete links on a chain should measure exactly 12 inches – but performing this measurement with accuracy and precision, and identifying when the measurement is off by 0.50% or 0.75% can be difficult. Hence the market for chain measurement tools.

In the past I have used a Park Tool CC-3.2 and a Park Tool CC-2. The CC-3.2 was a simple go-or-no-go measurement tool which attempts to identify when the chain has reached the 0.50% or 0.75% limits. The gauge of the CC-2 provides a more detailed look, attempting to show you not just if the chain has reached the replacement point but also how closely you are approaching it. Both of these tools share the same weakness: they measure from opposing roller faces, meaning that when the tool is inserted into the chain it is applying pressure in opposite directions. This behaviour incorporates inconsistencies of the roller diameter into the measurement, rather than just measuring the pin-to-pin distance, which can result in the tool providing a premature indication of the chain’s wear.

Pedro's Chain Checker Plus II

Recently I purchased the Pedro’s Chain Checker Plus II. This is one of a newer generation of tools which attempts to eliminate the previous inaccuracy by measuring from the same side of the roller. The tool applies the load to the chain in the same direction during measurement, rather than pulling in opposite directions. This simulates how the cog experiences the chain when the bike is pedaled and allows the tool to more accurately gauge the pin-to-pin distance. Compared to an older style tool like the Park CC-3.2 or CC-2, it should tell you to replace the chain later. Getting more life out of the chain (without potentially damaging the other components of the drivetrain) is useful not only for your wallet, but also to reduce waste. A Duke University study claims that the manufacturing of a chain is one of the more wasteful parts of bicycle production.

The Park Tool CC-4 should provide the same measurement as the Pedro’s Chain Checker Plus II. I went with Pedro’s option because it also provides a chainring nut wrench (useful when tightening or replacing chainrings) and a chain hook tool (theoretically useful when installing or removing chains with master links, though I’ve never found a tool necessary for this).

I learned about these newer tools thanks to Dave Rome’s excellent article on CyclingTips, which includes many more details on chain wear and measurement.

Better Bondage with ROK Straps

ROK Straps are superior bungie cords. They are designed to be safe and long lasting during prolonged outdoor use. Each end of the strap consists of a sewn loop, allowing it to be securely fastened to a wide variety of frameworks without concern for scratching or marring the surface, or for a hook coming released under tension and finding its way into an eyeball. Cargo secured by the ROK Strap is easily accessed via the side-release buckle. Most of the ROK Strap is simple webbing, adjustable thanks to the buckle. One side of the ROK Strap has a short segment of a durable natural rubber, giving the strap some elasticity, but not enough that unintended recoil will likely result in the strap finding its way into an eyeball. The rubber is contained in a polyester braid for UV protection and additional durability.

ROK Strap: Models

For securing cargo to a bike rack, my preferred model is the Pack Strap. These expand from 12” to 42” inches. They are 5/8” wide and are rated to carry up to 55 lbs. I find this is the right size for most cargo and have used it to transport: sleeping pads, folding chairs, toilet paper restocks, a year’s supply of paper towels, pizza, and takeout yakisoba.

  • ROK Straps: Toilet Paper Transport
  • ROK Straps: Yakisoba Transport

The smallest model is the Commuter Strap. These expand from 12” up to 28”. They are 1/2” wide and are rated to carry up to 40 lbs. If you just want to lash down a jacket or sleeping bag, these may be appropriate. They are long enough to secure common small cargo on a bike, but I would always rather have the extra range of the Pack Strap for handling awkward loads.

ROK Straps are also available in the ATV Strap model. These expand from 18” to 60”. They are 1” wide and are rated to carry up to 100 lbs. Apparently these are popular among people who ride motor-scooters. The 18” minimum length is too large for some of what I want to attach to a bike, and I’m not keen to carry cargo that would require the 60” maximum length. I saw a photo once of somebody who used these to attach a 45 gallon trash can to the back of his scooter. If that’s what you need to do, I guess consider these, but for what I find myself carrying I don’t need the extra length or weight rating of these over the 42” Pack Strap. This model stays at home in my bag of miscellaneous bondage.

The above measurements are of the ROK Straps when the rubber is at rest. When under load, all three models can stretch about an additional 4”.

The loose ends of the ROK Straps can be secured using either VELCRO One-Wrap or ITW Web Dominators.

ROK Straps: One-Wrap

ROK Straps: Web Dominators

Ritual Masks

The use of respirator masks in popular culture is often more about social signaling than medical efficacy, similar perhaps to decorating your door frame with lamb’s blood. Yet huge global demand has caused a shortage in hospitals, where the use of respirators does actually serve a functional purpose. A Vietnamese company – possibly realizing that much of the current demand stems from symbolic usage – decided to make masks out of toilet paper. These would have sold well in Hong Kong during the SARS epidemic, where mask usage emerged as an important social ritual:

In a masked city it was difficult to recognize the identity even of one’s friends and colleagues as they passed. Yet mask-wearing became the quickly improvised, if obligatory, social ritual; failing to don one was met with righteous indignation, a clear sign of ritual violation. The mask symbolized a rule of conduct -– namely, an obligation to protect the wider community – and an expectation regarding how one was to be treated by others (Goffman 1967b [1956], p. 49). More simply, the mask was the emblematic means by which people communicated their responsibilities to the social group of which they were members. Through mimicry and synchronization… mask-wearing amounted to a joint action, normatively embodied, the entrainment and attunement of the society as a whole. By disguising an individual’s face, it gave greater salience to collective identity. By blurring social distinctions, it produced social resemblance. Mask-wearing activated and reactivated a sense of a common fate; it was a mode of reciprocity under conditions that supremely tested it. Accordingly, mask demeanor was much more than a prophylactic against disease. It showed deference to public emotions and the decision to respect them.

Today mask usage interferes with facial recognition. That AI researchers and corporations are scrambling to work around this limitation is expected, but in a sane timeline individuals would identify this limitation as an unexpected bonus of the ritual. Instead the response is printing faces.

A Sign of Dystopia

Consecutive nights of reduced sleep may lead to the same deficit in cognitive behaviour as complete sleep deprivation.

A 2003 study concludes:

Since chronic restriction of sleep to 6 h or less per night produced cognitive performance deficits equivalent to up to 2 nights of total sleep deprivation, it appears that even relatively moderate sleep restriction can seriously impair waking neurobehavioral functions in healthy adults. Sleepiness ratings suggest that subjects were largely unaware of these increasing cognitive deficits, which may explain why the impact of chronic sleep restriction on waking cognitive functions is often assumed to be benign. Physiological sleep responses to chronic restriction did not mirror waking neurobehavioral responses, but cumulative wakefulness in excess of a 15.84 h predicted performance lapses across all four experimental conditions. This suggests that sleep debt is perhaps best understood as resulting in additional wakefulness that has a neurobiological “cost” which accumulates over time.

via Sean Bonner

Shoulder Mounted OC

In 2014 I identified the ASP Defender series as the best pepper spray for my needs. I stand by this today, except that originally my preference was for the 4.5” Palm Defender. Over the years my preference has migrated to the 5.75” Key Defender. The Key Defender is in my pocket every day.

While I prefer pocket-carry for everyday, I’ve often thought about something that would allow for quicker access – especially on the bike. I’ve looked at a number of solutions for mounting a capsicum delivery mechanism to a bike, but never found one I liked. Instead, I ended up purchasing a second ASP Key Defender and mounting it to the shoulder strap of my backpack, which I wear frequently when in the saddle.

Shoulder Mounted OC

A small split ring connects the Defender to a magnetic clasp. This in turn is attached to a Lucky Line Flex-o-loc (the same thing I’ve been using on my keychain for seven years), which connects the whole setup to the webbing on my shoulder strap. To prevent the Defender from swinging around, I attach an IWB Soft Loop around the shoulder strap and shove the Defender through that.

The Soft Loop holds the Defender tight enough against the strap that it doesn’t spin around during daily carry. When mounting the Defender, I orientate it so that safety clasp (which I still cover with grip tape) is against the shoulder strap. This eliminates any chance of the safety somehow accidentally becoming released and the trigger actuating. It also keeps the safety in a known, consistent position when the Defender is drawn.

Shoulder Mounted OC

Enough of the shaft of the Defender is left below the Soft Loop that it can be easily gripped. It is deployed by simply ripping downward. The magnetic clasp breaks away and the top of the device slides through the Soft Loop. This is very quick and very easy to do, with either hand, even when wearing gloves.

Another neat benefit to the magnetic clasp is that it allows you to easily reattach the Defender, if you decide you quickly want both hands free. The magnet is strong enough that it will connect if you simply wave the top of the Defender within a couple inches of the half of the clasp still attached to the shoulder strap. This can be done without looking. Of course, the Defender will swing around as you move until you shove it back underneath the Soft Loop – a procedure which does take two hands and at least one eye.

Shoulder Mounted OC

I’m happy with this setup as a supplement to the OC carried in my pocket. It can move easily to different backpacks. It could probably be made to work with any pepper spray intended to be attached to a keychain, though it works especially well with the ASP Defender series thanks to the hammer grip used to deploy them.

Whenever I buy a new piece of equipment, I store its manual as a PDF.

If an internet search doesn’t come up with a copy of the manual, I’ll scan the dead tree version and OCR it. The document is then stored in an annex at ~/documents/manuals/. I rarely reference the product manual after initial setup, but when I need it, it’s extremely valuable to have it available – immediately and offline – as a PDF with a searchable text layer.

Some products don’t have manuals, but do have specification sheets. I store these in the same location. Sometimes I’ll just save the product page from the manufacturer’s website as a PDF. This allows me to easily lookup the dimensions of a thing I bought 14 years ago, despite the product being long discontinued by the manufacturer, or the manufacturer no longer existing.

Of the many defunct blogs in my feed reader, one of those I miss the most is As the Crow Flies.

Crow is a woman who spent the summers hiking (mostly all or part of the PCT) and the winters as a cabin hermit (mostly in north-central Washington). Her interests in long-distance travel and off-grid living share many commonalities and resulted in much valuable information and insight. Long time readers here will remember her from The Vagabond’s Spatula.

The Art of Shen Ku

I don’t remember how I first heard about The Art of Shen Ku, but it’s a book that has managed to survive every purge of my dead tree library since I bought it seventeen years ago.

Selling itself as “The First Intergalactic Artform of the Entire Universe”, Shen Ku is a difficult thing to describe. I suppose that in a bookstore you might find it in the “Self Help” section, which is unfortunate. The book jumps between topics such as travel, navigation, diet, fitness, and knots, all colored with a healthy dose of vaguely Asian cultural appropriation and new-agey fluff. Prior to mobile networked computing becoming widespread, I thought of the book as being the closest thing available to The Hitchhiker’s Guide to the Galaxy. Flipping through it today, it is clear that the book has informed and directed a lot of my interests in life. There are sections of the book that I’ve always ignored as irrelevant or not applicable to my reality, but on the whole the signal-to-noise ratio of the book is high. The author, Steve “Zeke” Dolby, is also an illustrator, and fills the pages with cartoon illustrations that are both entertaining and descriptive.

  • The Art of Shen Ku: CPR
  • The Art of Shen Ku: Travel Shirt
  • The Art of Shen Ku: No Equipment Exercise
  • The Art of Shen Ku: Hello Sun Breathing

Despite its focus on travel, the large form factor of the book makes it impractical to actually carry around. When I discovered book scanning services a few years ago, Shen Ku was one of the first books I had scanned. After receiving the OCRed PDF I told myself I would get rid of my original paper copy, but have so far failed to do so. Shen Ku is the kind of book that lends itself to being pulled out and opened to a random page, with no expectation beyond education and entertainment. Unfortunately e-books don’t satisfy that experience.

  • The Art of Shen Ku: Dedication and Foreword
  • The Art of Shen Ku: Four Bells

And now for an update from the telecommunications industry.

Iain Morris reports on “5G”:

Rarely has a technology generated so much industry hype and met with such a blasé response from the broader market. Watch your neighbor’s eyes glaze over when you describe its higher speeds and lower latency. Note how he fails to share your excitement when you tell him it will provide extra capacity and reduce costs for service providers.

…5G is neither fixing a consumer problem nor delivering a new experience. And therein lies a big issue. For all its failings, 3G sounded exciting back in the 1990s, when mobile phones were for only calls and texts and even fixed-line Internet services were young. To match that excitement, 5G would have to promise something just as revolutionary. To the average person, it doesn’t.

Despite all this, policymakers now sound as intoxicated as the telecom industry. Governments everywhere have bought into the story that 5G is the most important invention since a few ancient Greeks realized a circular object on an axle would be great for transport. Suddenly, there is a 5G “race” whose winners will inherit the planet – shortly before some of it disappears under rising seas.

via BoingBoing

I've long maintained that William Burroughs is my anti-drug.

Back when I was maybe 14 years old I had exhausted everything William Gibson had published, but I read an interview someplace where he cited William Burroughs as one of his literary influences. So I started reading Burroughs, which then of course led to Kerouac, Ginsberg, et al. From the Beats it was a logical progression to read books by Tim Leary and his crowd, progress on down the timeline to Terrence McKenna, and then come full circle from there back to cyberpunk via Douglas Rushkoff. Anyway, my Burroughs takeaway was: avoid opioids.

Thanks, Bill.

We may be located far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the galaxy.

Scientific American proposes a solution to the Fermi Paradox by using the European exploration of the South Pacific as an analog.

When the frequency of occurrence of settleable worlds in a galaxy is intermediate between high and very low, fascinating things can happen. Specifically, ordinary statistical fluctuations in the number and location of suitable worlds in patches of galactic space can create clusters of systems that are continually visited or resettled by wave after wave of interstellar explorers. Think of it as an archipelago, a group or chain of islands. The flip side to the existence of these clusters is that they are typically surrounded by large unsettled regions of space, places just too far and too sparsely distributed to bother setting out for.

via Orbital Index.

Lawson Kline has been manufacturing high-quality outdoor equipment for about ten years.

He’s experimented with a wide range of products, and I’ve bought most of them. These days he’s known mostly for his cordage, which is unique and inovative, but cordage is not a topic I get overly excited about. I do get excited about stakes and Lawson’s aluminum Apex Stakes and Titanium Shepherd’s Hook Stakes are both probably the best on the planet. The titanium stakes are currently on sale, and he sent a description of how they are made to his newsletter today:

We cut, bend, and point each tent stake one at a time in our shop. I usually have to buy a very large quantity worth of Titanium, per diameter. And this is practically me begging them to sell to me. The mills I buy from require very large qty’s in order to sell to us, as they usually sell to big aerospace companies like Lockheed Martin, Boeing, United Technologies, etc, So it is very expensive to stock a product like our titanium stakes, as it is 100% an aerospace material.

The rods come to the shop in a wooden crate via motor freight. They are usually about 12 feet long. We first start off by using a rod parter to cut the stakes to length to get our blanks. If you have never seen one of these machines before they are very neat. It essentially breaks/shears the rod in a very clean and controlled manner. So they do not have to be saw cut. It’s like a sheet metal shear for round rods. Our rod parter will accurately cut rods from 1/16”-5/8”. There are two parting disc’s used to do all the of the work. They are made from hardened tool steel. So they are cutting like scissors so to speak, but the rod goes through a hole to keep the end round and to reduce the burr as much as possible. There is an adjustable stop on the machine that allows the first rod to be cut as the 10,000th one, with no real measurable difference between any of them. It is a highly precise machine.

Next, they are bent either one, two, or three at a time (depending on the rod diameter) on a custom made bender. This is a bender that I made myself over 10 years ago, and it has probably made 100,000+ tent stakes ever since. Last the stakes are pointed in another machine that I also custom-built. The stake is fixtured into a holder where it advances towards the cutting head and then puts a point on the end using a special end type mill.

There is no machine in the world that you could buy that could make a stake from start to finish, so I had to custom make two of the three machines to make these. This is the reason we are the only manufacturer in the USA making titanium tent stakes. (and probably because I am bad at bean counting…) I do know that it would be far more profitable for me to stock and sell Chinese stakes, but for me, the details matter. And I honestly love making custom machinery that can make products that not many other companies can. BUT as a result, this means I usually have way too many titanium tent stakes in stock as I have to make about a year’s supply at one time. Obviously, if I sold more stakes, then this wouldn’t be an issue, but since I don’t, this is the one product that I have a lot of my working capital tied up into.

Holly Herndon composes music with machine learning.

I learned of her thanks to Bruce Sterling‘s mention in his 2020 State of the World, wherein he defines her music one of the few current examples of “genuine technical novelty”.

She used machine learning to train a program (referring to it as “AI” seems popular but I’ll refrain) that could reproduce human voices, and then used that software as a vocalist for PROTO. Neat.

Monitoring Legible News

I was sent a link to Legible News last November by someone who had read my post on the now-defunct Breaking News. Legible News is a website that simply scrapes headlines from Wikipedia’s Current Events once per day and presents them in a legible format. This seems like a simple thing, but is far beyond the capabilities of most news organizations today.

Legible News provides no update notification mechanism. I addressed this by plugging it into my urlwatch system. Initially this presented two problems: the email notification included the HTML markup, which I didn’t care about, and it included both the old and new content of every changed line – effectively sending me the news from today and yesterday.

The first problem was easily solved by using the html2text filter provided by urlwatch. This strips out all markup, which is what I thought I wanted. I ran this for a bit before deciding that I did want the output to contain links. What I really wanted was some sort of html2markdown filter.

I also realized I did not just want to be sent new lines, but every line anytime there was a change. If the news yesterday included a section titled “Armed conflicts and attacks”, and the news today included a section with the same title, I wanted that in my output despite it not having changed.

I solved both of these problems using the diff_tool argument of urlwatch. This allows the user to pass in a special tool to replace the default use of diff to generate the notification output. The tool will be called with two arguments: the filename of the previously downloaded version of the URL and the filename of the current version. I wrote a simple script called html2markdown.sh which ignores the first argument and simply passes the second argument to Pandoc for formatting.

1
2
3
4
5
6
7
#!/bin/sh

pandoc --from html \
--to markdown_strict \
--reference-links \
--reference-location=block \
$2

This script is used as the diff_tool in the urlwatch job definition.

1
2
3
4
kind: url
name: Legible News
url: https://legiblenews.com/
diff_tool: /home/pigmonkey/bin/html2markdown.sh

The result is the latest version of Legible News, nicely converted to Markdown, delivered to my inbox every day. The output would be even better if Legible News used semantic markup – specifically heading elements – but it is perfectly serviceable as is.

After I built this I discovered that somebody had created an RSS feed for Legible News using a service called Feed43.

Wired is running an editorial arguing that the 10,000-year clock is a waste of time (get it?).

The thrust of the article seems to be that the world sucks today, and that building a monument to inspire long-term thinking is a waste of resources – “a pleasant distraction” – since everybody alive today will be dead before any good comes of it. Which, I don’t know, seems like it’s sort of the point.

There’s plenty to criticize about The Long Now – I swing by The Interval once a year or so, always hoping that it will have become an interesting place to spend time and always leaving disappointed – but I don’t think the idea of the clock is one of them. The rate of progress on the clock(s) is another matter.

The article, however, reminded me of the idea of protopia, a neologism first coined by Kevin Kelly and lately championed – in a slightly different manner – by Monika Bielskyte.

Cloth masks are probably ineffective (at best) at preventing respiratory infection.

At worst, they may create a breeding ground for pathogens. A study of healthcare workers found that “moisture retention, reuse of cloth masks and poor filtration may result in increased risk of infection.” Stick with real N95 respirators, which may not look as hip, but do actually work.

Clothing provides shelter, cultural signaling, and the structure upon which other tools are carried.

I enjoyed EDC Part 0: The Individual Uniform at Swift, Silent, Deadly.

New Year, New Drive

My first solid state drive was a Samsung 850 Pro 1TB purchased in 2015. Originally I installed it in my T430s. The following year it migrated to my new X260, where it has served admirably ever since. It still seems healthy, as best as I can tell. Sometime ago I found a script for measuring the health of Samsung SSDs. It reports:

------------------------------
 SSD Status:   /dev/sda
------------------------------
 On time:      17,277 hr
------------------------------
 Data written:
           MB: 47,420,539.560
           GB: 46,309.120
           TB: 45.223
------------------------------
 Mean write rate:
        MB/hr: 2,744.720
------------------------------
 Drive health: 98 %
------------------------------

The 1 terabyte of storage has begun to feel tight over the past couple of years. I’m not sure where it all goes, but I regularly only have about 100GB free, which is not much of a buffer. I’ve had my eye on a Samsung 860 Evo 2TB as a replacement. Last November my price monitoring tool notified me of a significant price drop for this new drive, so I snatched one up. This weekend I finally got around to installing it.

The health script reports that my new drive is, in fact, both new and healthy:

------------------------------
 SSD Status:   /dev/sda
------------------------------
 On time:      17 hr
------------------------------
 Data written:
           MB: 872,835.635
           GB: 852.378
           TB: .832
------------------------------
 Mean write rate:
        MB/hr: 51,343.272
------------------------------
 Drive health: 100 %
------------------------------

When migrating to a new drive, the simple solution is to just copy the complete contents of the old drive. I usually do not take this approach. Instead I prefer to imagine that the old drive is lost, and use the migration as an exercise to ensure that my excessive backup strategies and OS provisioning system are both fully operational. Successfully rebuilding my laptop like this, with a minimum expenditure of time and effort – and no data loss – makes me feel good about my backup and recovery tooling.

humangear capCAP+

Ten year ago I discussed the humangear capCAP. My conclusion was: the capitalization of the brand and product name is stupid, the cap itself is a good upgrade to any wide mouth (63mm) bottle, but it will allow a few drops to leak out of a wide mouth Klean Kanteen.

Recently I was made aware of a new model: the humangear capCAP+. This one adds silicone gaskets to both parts of the lid, and boasts compatibility with a wider range of bottles. However, humangear explicitly states that this one remains incompatible with the wide mouth Klean Kanteen.

I like to live dangerously, so I bought the new model anyway. For a couple weeks now I’ve been using it on the same Klean Kanteen Wide 27oz bottle used in the previous review. Despite humangear’s warning, I have had nary a drop leak out from the cap. I have tried to make the lid leak by filling the bottle and storing it on its side, and by balancing the bottle upside down on the cap, but no water has escaped.

humangear capCap+

Other changes in the new model include redesigned grip cutouts, which I find to have made no practical change to the functionality of the cap, and a cap retention thing that I thought would be kind of a gimmick but is actually surprisingly useful. (I will point out that the full name of this feature is the “humangear capCAP+ CapKeeper”. Someone at this brand hates English.)

humangear capCap+

The new model weighs 56 grams (2 oz), which is 20 grams (0.7 oz) more than the original capCAP.

I’m happy with the capCAP+. If you have the original capCAP, and it doesn’t leak on your bottle of choice, it probably is not worth upgrading. If it does leak, consider trying the new one. If you have neither model, but you use a wide mouth bottle and rely on something like the Guyot Designs Splashguard, the capCAP+ may improve your life.

The Dutch Reach

When opening the door of a vehicle with your closest arm – the left arm when exiting on the left side of the vehicle, for instance – your body is positioned straight ahead. A turn of the neck is required to see the side mirror, and a twist of the body is required to clear the blindspots of the mirror. Both of these movements require explicit motivation. With the dutch reach, you reach across your body with the opposite arm – your right arm when exiting on the left side of the vehicle. This forces your body to twist. You are automatically positioned to see the side mirror, and only a slight twist of the neck is required to clear the mirror’s blindspots.

The dutch reach is marketed as part of bicycle safety. As a biker I appreciate this, but I think this is only a small component of the method. It is about situational awareness. Sitting in a parked car is a vulnerable positionexiting more so. It is rational to want to know what you are about to step into when exiting.

Perhaps rebranding it as “tactical vehicle egress” would promote wider adoption.

The Toothbrush and Its Maintenance

I like RADIUS toothbrushes. I use the Source at home and the Tour elsewhere. Both utilize the same replaceable brush head. Anytime you’re dealing with tools that have replaceable, consumable parts – whether those parts are batteries, magazines, or toothbrush heads – the compatibility of those parts across the different tools is critical to user sanity. Replaceable toothbrush heads are convenient in that they decrease waste and allow you to stock up on multiple years worth of tooth cleaning supplies in a smaller space than would be required by the same number of toothbrushes.

I find the RADIUS heads to be effective at cleaning, and my dentist seems to approve of the results. I use both the “soft” and “flossing” heads, with no real preference between them. My experience is that bristles of both last an unusually long period of time when compared to other toothbrushes. To fully take advantage of the potential service live, the bristles must be periodically cleaned. I do this by soaking the head in a solution of 3% hydrogen peroxide for 20 minutes, which has been proven effective by multiple studies. I do this every other week or so.

I have a few travel toothbrush cases similar to these left over from before I found RADIUS (the Source handle is too chunky to fit in these). Each case consists of two parts. One half has a small hole for ventilation. The other half has no hole. I fill this hole-free half with 1/2 oz of hydrogen peroxide, shove the toothbrush in head first (the fat part of the Source handle that doesn’t fit in the case sits above this half, so it isn’t a problem), and then place it in a mason jar to hold it upright on my counter. Of the random assortment of containers around my home, this half of a travel toothbrush case is what I found allowed me to completely soak the head using the least amount of hydrogen peroxide.

After soaking, the Source toothbrush is stored in a covered holder on my wall, which allows it to air dry while keeping it protected from assault by airborne turd particles.

The Source handle can be sterilized in my kitchen autoclave, but the replaceable heads and the body of the Tour become deformed if exposed to these high pressures. I usually just wash the Source handle by hand with my normal dish soap when I think of it. Mold can grow in the socket of the handle that the head is shoved into, so this does need occasional cleaning. I clean the body of the Tour the same way when I return home from a trip.

The Tour toothbrush (complete with head) tips my scale at 20 grams (0.7 oz). It is neither the lightest nor the most compact travel option, but the convenience of the form factor combined with having the functionality of a full-sized toothbrush when deployed and the commonality of the replaceable head with my home solution makes me uninterested in lighter and smaller options that invariably sacrifice convenience.

I’ve found that when purchasing 16 oz or 32 oz bottles of hydrogen peroxide the necks always have 28-400 threading, regardless of brand. This allows me to replace the lid with one of the sprayers I use for my all-purpose cleaner, turning the hydrogen peroxide bottle into a convenient tool for disinfecting things like counter tops and my toilet cleaning brush.

The Casio Pro Trek PRW-3000-1A

I’ve worn the Casio Pro Trek PRW-3000-1A for the past 1,746 consecutive days. This is probably the longest I’ve worn any watch that doesn’t say “G-Shock” on it.

Obligatory Stereotypical Watch Shot

The Pro Trek performs all the basic watch functions you’d expect: it tells time, it provides the current date and day of week, it has a stopwatch, and it has a countdown timer. It supports a second timezone, which I usually keep set to UTC for quick reference but is useful if I’m briefly passing through a different region. It provides sunrise and sunset times for current, past and future dates. These are not exact, but tend to be within 20 minutes of reality, which is close enough for planning purposes. It has four alarms, which I never use.

Beyond those basic functions, the PRW-3000-1A has two characteristics that differentiate it from other timepieces. First, it is both solar and atomic: the battery never needs to be changed, and the time is always accurate. (Eventually, I’m sure, the battery will no longer charge itself, but that doesn’t seem to be imminent.)

The second characteristic is that it is an ABC watch, which means it provides an altimeter, barometer, and compass. Of these three features, the compass is the most useful. It works great for identifying the cardinal directions when you get turned around. It can also store bearings in memory, but using something other than a real compass for actual navigation strikes me as silly. The watch can be configured with declination, but I always leave this off so that the compass points to magnetic north. I apply this strategy to all compasses and GPS receivers, ensuring that they always agree.

The barometer is neat, but not especially useful. I have not found the current atmospheric pressure to be advantageous information. The watch can be told to monitor the barometric pressure over a period, and then alert the user if it sees a rise or fall in pressure, which would indicate a change in weather (very roughly: a rising barometer is good, falling is bad). This is more useful than knowing only the current value, but it only works when altitude remains constant.

The barometer screen also displays a thermometer, but because the watch is worn next to skin I find that this reading is not an accurate representation of ambient air temperature.

The altimeter mode is more useful. The reading is based on barometric pressure. The watch can either convert the barometer readings to altitude based on its stored values from the International Civil Aviation Organization’s International Standard Atmosphere, or it can calculate altitude based on a provided reference value. With the latter option, you tell the watch the current altitude (based on a map reading, survey marker, etc) and the watch then uses changes in pressure to calculate the difference as you ascend or descend. This is how I use the altimeter, and I find the results accurate enough for my purposes (which tend to be “rough navigation”).

The watch features a trip recording mode, where it will periodically record altitude readings and then report back with your maximum altitude, minimum altitude, total ascent, and total descent. I’ve never used this.

I’ve been using the same nylon band that I hacked together 4 years ago. It works great. I repaired it once with my expedition sewing kit.

The watch remains in excellent condition. The bezel is scratched, but that has no practical impact on its function. The face itself has managed to resist all scratching.

The buttons are more exposed than a G-Shock, and they will sometimes activate themselves if I’m doing something like pulling my wrist through a tight cuff. These accidental discharges happen rarely and are only a minor annoyance, but I do wish the Pro Trek was available with the thicker bumper of the G-Shock. (Casio does offer ABC G-Shocks, such as the Rangeman GW9400-1B. I’ve not looked closely at these, but they are probably worthy of consideration.)

Kikuo Ibe’s original G-Shock DW-5000 is the watch against which every other timepiece should be judged. Today I would appreciate the addition of solar atomic functionality, which is available in derivatives such as the G-Shock GWM5610. I purchased the PRW-3000-1A in 2015 for $200, which is a little over twice the common sale price of the G-Shock. I think this has been worth it for the added functionality. Unfortunately the PRW-3000-1A is no longer available. The current equivalent of it seems to be the PRW-3100Y-1. Casio’s list price for this model is $320, which is more than I think the watch is worth. If my watch was lost, I would happily purchase the newer model (or an ABC G-Shock) for $200. If they wanted more than that, I’d likely revert to the solar atomic G-Shock GWM5610 for $80-$100.

Rams

In 2018 I went to the San Francisco premier of Rams at The Castro Theatre.

Rams Premier at The Castro

I’d previously seen the other documentaries made by Gary Hustwist, but had not found them to be especially relevant to my interests. Rams, however, I greatly enjoyed. On the whole I think that German industrial design is best industrial design, both functionally and aesthetically. I was familiar with many of the designs of Deiter Rams that the documentary highlights, but seeing all the objects together in Rams’ home – not as a museum display, but as practical tools for living – really drives home his skill and vision.

I’d been wanting to watch the film again for a while. Last month I decided to purchase it on Vimeo. I’d never done this before, and was nervous of the experience. Vimeo claims to provide a DRM-free download, but I was concerned that their definition of “download” may be different from mine, or that they would attempt to serve it through some some platform-specific crapware. Fortunately this was not the case. After completing the purchase, it was simple to navigate to the download link, which was a straightforward URL to a DRM-free 1920x1080 MP4 file. Purchasing and downloading the video on Vimeo was just as simple as purchasing and downloading music on Bandcamp, which is the standard against which I judge all other digital media distributors (it is a low bar, but many seem to fail).

The cow collapse is nigh.

The Guardian reports on the end of food and the cowllapse:

We are on the cusp of the biggest economic transformation, of any kind, for 200 years. While arguments rage about plant- versus meat-based diets, new technologies will soon make them irrelevant. Before long, most of our food will come neither from animals nor plants, but from unicellular life. After 12,000 years of feeding humankind, all farming except fruit and veg production is likely to be replaced by ferming: brewing microbes through precision fermentation. This means multiplying particular micro-organisms, to produce particular products, in factories.

RethinkX envisages an extremely rapid “death spiral” in the livestock industry. Only a few components, such as the milk proteins casein and whey, need to be produced through fermentation for profit margins across an entire sector to collapse. Dairy farming in the United States, it claims, will be “all but bankrupt by 2030”. It believes that the American beef industry’s revenues will fall by 90% by 2035.

Story via John Ellis. Cinemagraph via Overhead Compartment.

Cleaning Brakes

The same spray bottle of isopropyl alcohol used to clean my human interface devices is also used to clean the brake pads and braking surface on my bike.

Cleaning Brakes

Soap, degreasers, and similar cleaners are best avoided on these components. They can leave residue that decrease braking performance and causes squealing (thus diminishing the all important bike ninja factor). Spraying the brake pad with isopropyl alcohol and wiping it off with a clean rag is usually all that’s needed. Sometimes I’ll hit the pads with a Scotch-Brite Scour Pad after spraying them.

The braking surface on the rims is cleaned the same way: spray with alcohol, wipe with rag. Occasionally, if the wheels are especially dirty, I will break out the big guns in the form of my all-purpose cleaner. Before spraying the rim with this I remove the wheel from the bike because I don’t want to get the cleaner on my brake pads. After spraying the rim with the cleaner, I wipe it down with a clean rag. Finally any residue from the cleaner needs to be removed, which is accomplished by spraying the rim with isopropyl alcohol, and wiping it down again. Sometimes it takes a second cycle of alcohol-and-wipe to eliminate squealing.

Cleaning Human Interface Devices

Human interface devices must be cleaned frequently to prevent them from becoming petri dishes that will breed our eventual doom. I use isopropyl alcohol to clean my keyboard, pointing device, and the body of my laptop. This removes grease and oil, making the device feel clean. More importantly, it disinfects.

I keep the alcohol in a recycled 2 oz spray bottle. To clean, I spray the device directly and then wipe it off with a microfiber cloth. Spraying a cleaning solution directly onto any electronics is generally frowned upon, but I began cleaning things using this method 14 years ago and I’ve yet to experience any problems.

Human Interface Device Cleaning

I buy the alcohol in 70% concentration, which is commonly available at any drugstore and apparently the best for disinfection:

The presence of water is a crucial factor in destroying or inhibiting the growth of pathogenic microorganisms with isopropyl alcohol. Water acts as a catalyst and plays a key role in denaturing the proteins of vegetative cell membranes. 70% IPA solutions penetrate the cell wall more completely which permeates the entire cell, coagulates all proteins, and therefore the microorganism dies. Extra water content slows evaporation, therefore increasing surface contact time and enhancing effectiveness. Isopropyl alcohol concentrations over 91% coagulate proteins instantly. Consequently, a protective layer is created which protects other proteins from further coagulation.

Solutions > 91% IPA may kill some bacteria, but require longer contact times for disinfection, and enable spores to lie in a dormant state without being killed. A 50% isopropyl alcohol solution kills Staphylococcus Aureus in less than 10 seconds (pg. 238), yet a 90% solution with a contact time of over two hours is ineffective.

A higher concentration is probably more appropriate if cleaning a circuit board directly, but for enclosed electronics like keyboards, trackballs, trackpads, and laptop bodies, I’ve never had the 30% water cause any problems.

I’ve tried using ROR to clean keyboards. It results in a keyboard that feels clean, but it is more expensive than isopropyl alcohol, and doesn’t disinfect. I prefer to reserve the ROR for optical surfaces.

Prior to the spray, I’ll sometimes use a micro vacuum attachment to pick up lint, crumbs, and the like. Stubborn dust sometimes require a gas duster, but I find them mostly unnecessary. (I once tried a DataVac. It wasn’t worth the cost to buy it or the space to store it.)

I added a bottle cage to my rear rack.

A Cleaveland Mountaineering Fork Clamp Mount allows me to mount a King Cage to my old Tubus Vega rack, providing another option for carrying water. I’ve wanted something like this since I saw Logan’s Vega modification on bikepacking.com. Cleaveland’s mounts makes it easy.

Rear Rack Bottle Cage

I use Norma Torro Worm Drive Hose Clamps to attach the mount. These German made clamps are far superior to the Chinese hose clamps frequently found in hardware stores. The 9mm wide, 8-16mm diameter clamps are the right size for this job.

Sawyer Squeeze Filter Adapters

The Sawyer Squeeze water filter can attach directly to the threading on common disposable bottles. For other bottles you can aim the output freehand, or attach half of a Sawyer Hydration In-Line Adapter to a piece of hose and let that drip into your bottle. I prefer a closed system, both so that no debris fall into my reservoir while it is being filled, and so that if the reservoir is accidentally knocked over I don’t lose all the clean water. There are a number of adapters that can aid in this.

Previously I mentioned my hacked together solution for attaching a Sawyer filter to an MSR Dromlite bag. The Dromlite lid is 63mm in diameter and uses the same threading that is present on the majority of wide mouthed bottles, so I can use this adapter to attach the Sawyer Squeeze directly to a wide array of bottles: Nalgene wide mouth, Klean Kanteen wide mouth, Hydro Flask wide mouth, CamelBak Podium, and reservoirs like the HydraPak Expedition or bladders like the Source WXP.

Sawyer Dromlite Adapter

This adapter – including the Dromlite cap – weighs 40 grams (1.4 oz). 18 grams (0.6 oz) of that is the Dromlite lid, so if I’m already packing a Dromlite the adapter only adds 22 grams (0.8 oz) to my load.

Last autumn I bought a Platypus GravityWorks Universal Bottle Adapter. This consists of an inner lid with nipple, and outer lid ring, and a protective cover for the clean side of the lids. To integrate this adapter with the Sawyer Squeeze, I cut a short length of hose. One end I shoved over the nipple of the GravityWorks Universal Bottle Adapter. The other end I attached to one part of another Sawyer Hydration In-Line Adapter.

Sawyer GravityWorks Adapter

This adapter – including the same length of hose as the Dromlite system, and both caps, and the protective cover – weighs 70 grams (2.5 oz). 20 grams (0.7 oz) of that is the protective cover, which I’m not sure is really necessary.

GravityWorks Adapter Lid

The inner lid of the GravityWorks adapter is tapered so that it can fit into a range of narrow mouth bottles. The Sawyer Squeeze is already threaded to attach directly to common disposable bottles, but this adapter also allows me to get a seal with the Nalgene Oasis canteen, the smaller part of the humangear capCAP, the Hydrapak Stow, Vitaminwater bottles, or Vapur bottles.

When the inner lid is attached to the outer lid ring, the adapter can then attach to the standard 63mm wide mouth bottle threading, giving me all the same capability I have with my modified Dromlite adapter. But the outer lid ring can also attach to bottles with narrower mouths. Specifically, it works great with Klean Kanteen classic bottles, HydraPak Seeker, Nalgene “Wide Mouth” 16oz HDPE (which has a narrower, 53mm “wide mouth”), and with my Zojirushi SM-SA48.

  • GravityWorks Adapter to HydraPak Seeker
  • GravityWorks Adapter to Nalgene Oasis
  • GravityWorks Adapter to Klean Kanteen
  • GravityWorks Adapter to Camelbak Podium

I also have a Jetflow 63mm adapter. This takes the standard 63mm wide mouth bottle threading and steps it down to the narrow threading used by the Sawyer filter and most disposable bottles. You can then attach the filter directly to the bottle lid rather than going through a hose like my other two adapters.

The Jetflow adapter is neat because you can attach a bottle cap from a typical disposable bottle to the smaller end and then use it as your normal water bottle lid. It turns the whole contraption into something like a humangear capCAP. The Jetflow adapter weighs 18 grams (0.6 oz). Add a lid from a disposable water bottle and the total weight is 20 grams (0.7 oz).

Jetflow Adapter with Cap