Skip to footer navigation.

« Oatmeal

Posts tagged cli

Follow this tag's bespoke rss feed or return to the list of all tags.

Link logging

You all. A week! Maybe a few. They’ve been something else, for good and ill, fun and waaaha!?” A doozy. So, here is a doozy of a link log!

aerc; The world’s best email client

I haven’t given this a go, yet, but it looks pretty solid, and like a great/easier to use alternative to mutt or alpine.

Why I’m still using jQuery in 2019

I use jQuery just about every day, and, you know what…I really like it. 😬

Why You Should Buy Into the Emacs Platform

The title of this post is a we bit deceive-ious, it is more of a list of awesome emacs resources than a manifesto/proclamation on why you should” use emacs.

Welcome to Linux From Scratch!

Linux From Scratch (LFS) is a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.

Why Don’t Americans Use Their Parks At Night?

However cities want to encourage more park use at night, he stresses that they need to consult the community anchors” to ensure that it meets the needs of the entire neighborhood.

Animal Crossing: New Horizons will have skin tone customization, gender-neutral hairstyles for Villagers

This piece serves as a great follow up to this previously linked post from Austin Walker, Me, On The Screen: Race in Animal Crossing: New Leaf

Instant Pot Baked Potatoes Recipe

How to cook potatoes in an instant pot.

Is Robert’s Rules too Restrictive? Consider Martha’s Rules of Order for Meetings

See also, Martha’s Rules

Borough mayor is knitting to prove men speak too much at meetings

Montgomery said she is unfazed by criticism and will continue knitting until Christmas.

Knitting as both protest, and social signal.

Don’t slow that bus down, we’ve got places to be

But there’s a clear difference between Die Hard and Speed, […] Die Hard is about the individual — the lone wolf John McClaine, shooting his way through the terrorists — but Speed isn’t really about Reeves. It’s about the collective. It’s not just one of Keanu’s best movies; it’s one of the best movies about public transportation. Speed refutes one of the most pervasive myths about metropolitan transit systems in the U.S. — that no one rides the bus in Los Angeles — with its economically and racially diverse ensemble of riders, who must work together and with Jack Traven to keep the bus going until the bomb is dismantled.

Help For Werewolf

Werewolf! is a free-form social roleplaying game (kinda):

Be your own curator. Archivist.

Question: what is to be done with the stuff after it has been cataloged and stored? Are we pinning butterflies for the sake of pinning them, or is there a moment of beholding, and re-use/re-mix down the line?

Save and make? Transform?

I like to think of what I do with these link logs as part curation, part compost.

IBM and the Holocaust — why wasn’t this on my radar?

Juxtaposed: Wayfair workers plan walkout in protest of company’s bed sales to migrant camps.

Slight correction to CNNs title, though — migration camps” should be concentration camps.”

Atlanta’s Food Forest Will Provide Fresh Fruit, Nuts, and Herbs to Forage

Most of the trees in the forest are still too young to bear fruit. But once they become productive, about five years from now, McCord expects literal tons of fruit.”

Before you were here

[…] Needing to build your own website, setting up your own webservers, and using non-user friendly applications to transfer data not only meant that most early users had a better core understanding of the technology and what its future might bring, it also meant that users had a sense of ownership. They were shaping the medium they were consuming.

screenshots of despair

A catalog of little despair.

Fans Are Better Than Tech at Organizing Information Online

The first step to recovery is admitting that you have a problem. I, as exemplified by this very post, have a tagging problem.

Interesting also in the context of digital minimalism,” see Walking Alone: On Digital Minimalism”.

on dat://

@kicks offering the most cogent explanation of what the heck date:// actually is that I’ve found!

Ok, so how does Dat work exactly? It is simply a unique address attached to a folder of files (kind of like a ZIP file.) You then share that folder on the network and others can sync it to their system when they visit the unique address.

SwiftUI, Privacy, macOS, and the Web

A long, but worthwhile read.

The Future of Interaction, Part II

The most important part of this announcement is the abstraction they’re working with, not the view surface being used for rendering.

Wherein the abstraction becomes a tool for focusing on interaction, rather than specific implementation.

Adversarial Interoperability: Reviving an Elegant Weapon From a More Civilized Age to Slay Today’s Monopolies

What made iWork a success—and helped re-launch Apple—was the fact that Pages could open and save most Word files […]

[…] Apple didn’t just make an interoperable” product that worked with an existing product in the market: they made an adversarially interoperable product whose compatibility was wrested from the incumbent, through diligent reverse-engineering and reimplementation.

The New Wilderness

The need to regulate online privacy is a truth so universally acknowledged that even Facebook and Google have joined the chorus of voices crying for change […] No two companies have done more to drag private life into the algorithmic eye than Google and Facebook.

So why have the gravediggers of online privacy suddenly grown so worried about the health of the patient?

Part of the answer is a defect in the language we use to talk about privacy. That language, especially as it is codified in law, is not adequate for the new reality of ubiquitous, mechanized surveillance.

Continuing later,

The question we need to ask is not whether our data is safe, but why there is suddenly so much of it that needs protecting. The problem with the dragon, after all, is not its stockpile stewardship, but its appetite.

That Web Dev Thing Where Everybody Says Something Clever Involving Toast

Twitter is designed to escalate responses and keep people engaged. This has the effect of polarising discussions online which in turn has, in my mind, made it completely useless as a venue for discussing web development issues.


A decentralized blogging…thing…platform…service?

Link logging

Tokyo Neapolitan: The New Wave of Japanese Pizza

If you are gonna do a thing, you might as well do that thing as well as you can. 🍕

The Famous Photo of Chernobyl’s Most Dangerous Radioactive Material Was a Selfie

…I looked through all the other captions of photos similar photos of the destroyed core, and they were all taken by Korneyev, so it’s likely this photo was an old-school timed selfie. The shutter speed was probably a little slower than for the other photos in order for him to get into position, which explains why he seems to be moving and why the glow from his flashlight looks like a lightning flash. The graininess of the photo, though, is likely due to the radiation.

Living Systems | James Grier Miller | 1978

Confession — I haven’t dug into this yet. As someone with 2 degrees in Human Ecology (e.g. the interdisciplinary study of people and our environment) I feel obligated to read this.

A bit more background on rights for nature.

Tending the Digital Commons: A Small Ethics toward the Future

What do I mean by the open Web”? I mean the World Wide Web as created by Tim Berners-Lee and extended by later coders. The open Web is effectively a set of protocols that allows the creating, sharing, and experiencing of text, sounds, and images on any computer that is connected to the Internet and has installed on it a browser that can interpret information encoded in conformity with these protocols.

In their simplicity, those protocols are relentlessly generative, producing a heterogeneous mass of material for which the most common descriptor is simply content.” It took a while for that state of affairs to come about, especially since early Internet service providers like CompuServe and AOL tried to offer proprietary content that couldn’t be found elsewhere, after the model of newspapers or magazines. This model might have worked for a longer period if the Web had been a place of consumption only, but it was also a place of creation, and people wanted what they created to be experienced by the greatest number of people possible. (As advertising made its way onto the Web, this was true of businesses as well as individuals.) And so the open Web, the digital commons, triumphed over those first attempts to keep content enclosed.

Autism from the inside


When I come across instances of this folk understanding of autism, I am reminded of Edward Said’s 1978 description of the orientalist gaze, in which the exoticised subjects endure a kind of fascinated scrutiny, and are then rendered without depth, in swollen detail’.

…In this anaerobic environment, the qualities routinely assigned to autistic people — lack of empathy, unworldliness, humourlessness, the inability to love — are the exact inverse of the qualities that a neurotypical society most prizes.

For a moment, let’s flip things over. To an autistic viewer like me, neurotypical life can seem astonishingly unemotional. I’m so overwhelmed by the sensory onslaught of a busy room that I’m almost tearful, while neurotypical folk appear to wade through clouds of sound, light and odour, entirely oblivious. It’s hard to resist the impression that they’re numb, or unreal somehow. They are certainly displaying a lack of affect in the face of extreme provocation. Where I am in constant movement; they are somehow still.

The incredible nature of Abstract Art and how it can change the way you think about everything.

The point of the art wasn’t what you saw on the original painting, but what it left behind after you had looked at it. The experienced stayed and lingered with you. I thought this was incredible, and beautiful and amazing.

Variations On A Utilitarian Theme

Read along, if you will, as I tell a little story of sorts through a series of excerpts. It is essentially a story about the links among prevalent trends involving surveillance, data, security, self-documentation, and happiness.

The Ones Who Walk Away From…Facebook

How I lost my legs and gained… you want me to say something inspiring here

Don’t miss the author’s sneaker reviews.

Component frameworks and web standards

This post has three parts: in the first, I look at what I like about the web standards stance” or a vanilla approach”. In the second, I share what I liked when I used a JavaScript component framework. In the last part, I look at whether these two approaches are actually different: maybe I assumed a false dichotomy?

How to master advanced TypeScript patterns

This Medium post sneaks in a pretty solid overview of currying (as I understand it, at least).

We Need Chrome No More

The dominance of Chrome has a major detrimental effect on the Web as an open platform: developers are increasingly shunning other browsers in their testing and bug-fixing routines. If it works as intended on Chrome, it’s ready to ship. This in turn results in more users flocking to the browser as their favorite Web sites and apps no longer work elsewhere, making developers less likely to spend time testing on other browsers. A vicious cycle that, if not broken, will result in most other browsers disappearing in the oblivion of irrelevance. And that’s exactly how you suffocate the open Web.

Flashback to the last week’s link log, from Choo’s documentation:

A fun way to think about browsers, is as a standardized Virtual Machine (VM) that includes high-level APIs to do networking, sandboxed code execution and disk access. It runs on almost every platform, behaves similarly everywhere, and is always kept backwards compatible.

The Super Tiny Compiler

Learn about compilers by reading through a very tiny one.


Our mission is to incubate a humane dynamic medium whose full power is accessible to all people.

Field Guide to Bash Terminals

A bit shorter than the bash man page. Good, basic, info.

A Beginner’s Guide To Dragon Ball

The biggest lie you’ll ever hear about Dragon Ball from both fans and critics alike is that there are long stretches of episodes full of attacks charging and nothing else. It was something I had always heard about the show and was warned about when I decided to check it out. I waited and waited for these fabled episodes and by the end of DBZ, I realized they don’t exist

Once upon a time I watched a ton of Dragon Ball and One Piece…in French. They use the imperative tense a lot. I’d like to re-watch some of each in English one day.

Basic blot blogging from the command-line

Posting to my blog is a breeze from mobile thanks to a couple shortcuts and Drafts actions I’ve put together. I wanted posting to be just as seemless from my computer, too. Here is my quick and dirty solution!

#!/usr/bin/env bash

cd "$(dirname "$0")" # Go to the script's directory

DATE=$(date +%Y-%m-%d-%H-%M)

# The paths to your blot website's draft and post directories


# Your editor of choice

if [ -n "$USER_INPUT" ]; then

    if [ $USER_INPUT == "post" ]; then

        printf "title: \ndate: ${DATE}\ntags: " > ${POST_DIR}${DATE}.md
        $EDITOR ${POST_DIR}$


    if [ $USER_INPUT == "draft" ]; then

        printf "title: \ndate: ${DATE}\ntags: " > ${DRAFT_DIR}${DATE}.md
        $EDITOR ${DRAFT_DIR}$



    printf '\nBlot blogging from the command-line.\n\n    draft   create a draft post\n    post    live dangerously and just post that sucker!\n\n'


In the future I may expand this to support editing existing posts, too. I’ve also been toying with a way to do this without ever leaving emacs.

A few weeks ago I said I’d re-write my CMS by the end of the year.

The year ended (happy New Year, btw 🥳).

That has not happened.

I’ve come to a realization:

  • Yes, the code that runs my website is an atrocious embarrassment.
  • Yes, it works perfectly for what I need/want in a website.

In short, it is good enough. Good enough, however, ain’t good enough to share and encourage other folks to use. So, while my CMS may be good enough for me, I want to do more this year to see what I can do to help make the IndieWeb more accessible to anyone who wants in. I also just want to make more thing this year. Not big grand thing, but small fun things. To kick that off I’ve started to make a toy static site generator. It is called little, and it is not done.

No description provided. I will be better about this in the future!

I don’t care if you think I’m a monster. I love leaving menu-bar-mode enabled in emacs.

Accio React App

My professional-self has been writing a whole lot of React components lately. I’ve mixed feelings about React (mostly do to it’s parentage), but I’m very much enjoying the work and am happy to be writing functional code.

When I started my most recent React project I decided to not use Webpack and instead opted to use Parcel (shout out to @hjertnes for the intro!). My plan was for this to be a post about Parcel and how to use it, but in the course of sussing out what I was going to cover, I ended up writing a little script…

The script is a beautifully procedural bit of bash that instantiates a basic react starting point.

I’ve used Webpack before and found it to be a) overly complicated, b) a gargantuan time-suck.

I’ve also toyed with react-create-app and always been displeased. It works well, but is a bit limiting out of the box, and it’s eject method is…terrifying?

Accio React App is my answer to react-create-app. It provides the minimal bits needed to start a React project (including react-router, sass and babel) and a basic project scaffolding. It isn’t much, but I’ve already found it to be a helpful little thing.

Here is the script in full, it can also be found on my pastebin and as a gist hosted on GitHub.


# A quick and dirty way to start a simple React project
# NOTE! This script assumes you are using Yarn
# Author: Eli (
# License: unlicense (

read -p 'What is the name of your new project? ' PROJECTNAME

echo 'Creating new project, ' $PROJECTNAME

echo 'Now yarn is gonna do *A LOT* of stuff all at once, including initiating a new project, and pulling in a number of dependencies. This may take a few minutes.'
yarn init -y
yarn add react
yarn add react-dom
yarn add react-router-dom
yarn add node-sass
yarn add --dev parcel-bundler
yarn add --dev babel-preset-env
yarn add --dev babel-preset-react

echo 'Next is a slight modification to package.json, adding a `start` and a `build` script'
SCRIPT=',"scripts": {"start": "parcel index.html", "build": "parcel build index.html --out-dir dist" }'
printf '%s\n' H 17i "$SCRIPT" . wq | ed -s package.json

echo 'Making `.babelrc`!'
touch '.babelrc'
echo '{"presets": ["env", "react"]}' >> .babelrc

echo 'Making `.gitignore`!'
touch '.gitignore'
echo '/node_modules' >> .gitignore
echo '/dist' >> .gitignore
echo '/.cache' >> .gitignore
echo '.DS_Store' >> .gitignore

echo 'For our next trick!? Time to make the project scaffolding.'
mkdir 'src'
mkdir 'src/components'
mkdir 'src/scss'
mkdir 'src/static'
touch 'src/index.js'
touch 'src/components/HelloWorld.js'
touch 'src/scss/main.scss'
touch 'index.html'
touch ''

echo '<!doctype html>' >> index.html
echo '<html lang="en">' >> index.html
echo '<head>' >> index.html
echo '<meta charset="UTF-8">' >> index.html
echo '<meta name="viewport"' >> index.html
echo 'content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">' >> index.html
echo '<meta http-equiv="X-UA-Compatible" content="ie=edge">' >> index.html
echo '<title>'$PROJECTNAME'</title>' >> index.html
echo '<link rel="stylesheet" href="./src/scss/main.scss">' >> index.html
echo '</head>' >> index.html
echo '<body>' >> index.html
echo '<div id="root"></div>' >> index.html
echo '<script src="./src/index.js"></script>' >> index.html
echo '</body>' >> index.html
echo '</html>' >> index.html

echo 'import React from "react";' >> src/index.js
echo 'import ReactDOM from "react-dom";' >> src/index.js
echo 'import {BrowserRouter as Router, Route} from "react-router-dom"' >> src/index.js
echo 'import HelloWorld from "./components/HelloWorld"' >> src/index.js
echo '  ' >> src/index.js
echo 'let Root = document.getElementById("root");' >> src/index.js
echo '  ' >> src/index.js
echo 'ReactDOM.render(' >> src/index.js
echo '<Router>' >> src/index.js
echo '<main>' >> src/index.js
echo '<Route exact strict path="/" component={HelloWorld}/>' >> src/index.js
echo '</main>' >> src/index.js
echo '</Router>,' >> src/index.js
echo 'Root' >> src/index.js
echo ')' >> src/index.js

echo 'import React from "react"' >> src/components/HelloWorld.js
echo '  ' >> src/components/HelloWorld.js
echo 'export default class HelloWorld extends React.Component {' >> src/components/HelloWorld.js
echo 'constructor(props) {' >> src/components/HelloWorld.js
echo 'super(props);' >> src/components/HelloWorld.js
echo '}' >> src/components/HelloWorld.js
echo '  ' >> src/components/HelloWorld.js
echo 'render() {' >> src/components/HelloWorld.js
echo 'return (' >> src/components/HelloWorld.js
echo '<div>' >> src/components/HelloWorld.js
echo '<h1>Hello World!</h1>' >> src/components/HelloWorld.js
echo '</div>' >> src/components/HelloWorld.js
echo ')' >> src/components/HelloWorld.js
echo '}' >> src/components/HelloWorld.js
echo '}' >> src/components/HelloWorld.js

echo 'body {padding: 3em; color: pink}' >> src/scss/main.scss

echo '#' $PROJECTNAME >>
echo '  ' >>
echo '(ノ◕ヮ◕)ノ*:・゚✧' >>
echo 'Built w/a very little bit of magic!' >>
echo '  ' >>
echo '  ' >>
echo 'Run: w/either:' >>
echo '```' >>
echo '$ yarn start' >>
echo '```' >>
echo 'OR, if using NPM' >>
echo '```' >>
echo '$ npm start' >>
echo '```' >>

yarn start

Pandoc and the wicked simple build system

I recently added a /now page to my website. I set out to make it as easy as possible to update, and am pleased with the results!

Sitting in a folder in Dropbox on my computer is a directory, now. Within now are 2 files, index.html and index.markdown. Same content, different formats.

After I update the content of index.markdown I’m able to run a very tiny shell script, bound to the alias now, that does 2 things:

  1. It converts the markdown file to html using Pandoc and a simple template
  2. It uploads the newly minted index.html file to my server using scp

Who needs a CMS when you’ve got Pandoc? 🤷‍♂️

I considered simplifying” the build process even further by triggering the rebuild/upload process on file change, but decided that it wasn’t really worth the extra effort, and I like having to type $ now into the command line.

…granted, this does interfere with my use of Zeits now utility, doesn’t it? Welp! I’ll cross that bridge when I get to it, I guess 🌮

After a long time of using fish, and before that zsh I’ve returned to being a full time bash user. There was no particular rhyme nor reason to my using one shell over another, so in an effort to simplify my setup across my two computers and the heaps of servers I interact with on the daily I’ve gone all in on bash.


Stupid-simple bash script to create a local copy of a website


printf "\n\n    Please enter the URL of the website you wish to download.\n    Do not include leading 'http://' or 'https://'?\n\n\n"
printf "    "
read URL
printf "\n\n    Depending on the size of the website you just\n    entered, this may take a few minutes.\n\n\n"
sleep 6
wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains ${URL} --no-parent http://${URL}
printf "\n\n  DONE!\n\n\n"

All the heavy lifting is done by wget, so that will need to be installed before using the script