No More Holding Down Keys

December 22, 2015

Audience:button holders

“The chains of habit are too weak to be felt until they are too strong to be broken.” ― Samuel Johnson

I’m trying an experiment where I’ve turned my keyboard repeat rate way down. This should force me to never hold down a key for repetition, but rather use a prefix like 4w (vim) or Ctrl-Backspace (browsers). I’m learning some interesting things!

Continue reading →

Programming Heroes

October 15, 2015

Audience:anyone

“To be a hero, you have to learn to be a deviant, because you’re always going against the conformity of the group. Heroes are ordinary people whose social actions are extraordinary. Who act.” — Philip Zimbardo

The question of “who is your programming hero” comes up on episodes of [The Changelog], and it’s a good one. I have no means or aspirations to be asked, but it’s a fun question to answer, so here are my programming heroes…​

Continue reading →

AUR Getting Started Guide

September 1, 2015

Audience:intermediate

There are many options to access Arch’s User Repository (AUR). The AUR is one of the most compelling features of Arch Linux. I’ll walk you through the simplest path to getting started with the AUR, with minimal bootstrapping effort.

The most primitive yet useful tool I’ve found for first accessing the AUR is cower. On the right side of that page you’ll see a link to “Download snapshot”. It’s https://aur.archlinux.org/cgit/aur.git/snapshot/cower.tar.gz

Continue reading →

Lisp Jargon

August 30, 2015

Lisp Jargon

The following is a glossary of fundamental lisp terms that may be somewhat foreign to someone who is not versed in a lisp. I have cherry-picked the terms that I find to be most productive.

They are intentionally not alphabetical, but are ordered and grouped into logical sections.

sexp

s-expression, symbolic expression

statement

nothing — everything is an expression

expression
form

(vim)

string

(vim)

element

like atom (vim)

redex

reducible expression

regex(p)

regular expression

lisp

list processor

list

()

sequence
singleton

a sequence with only one element

pair
rpn

reverse polish notation: operator first

quoting
boolean
homoiconic

code is data

scheme

academic lisp dialect

racket

another scheme implementation

clojure

modern lisp on java/javascript

clisp

common lisp; old, robust lisp dialect/implementation

repl

read, eval, print, loop

emacs

most common way to edit lisp

vim

another powerful editor

slime

an editor mode that enables immediate transfer of forms from editor to repl

tree

leaves, nodes

recursion
iteration
loop
tco

tail call optimization for recursive functions

lexical (scoping)

referring to scope of visibility, done through textual analysis

formal parameter
actual argument
splice
slurp
barf
name

an identifier bound to an object

object

any lisp datum

atom
identifier

a symbol used to identify names

variable
symbol
value

the result of an evaluation

reference

refer to an object or binding by name

binding

association between a name and its value (e.g., “let-binding”)

literal
keyword
vector
hash table

mapping of keys to values

macro
reader
eval
immutable
concurrency
parallelism
primitive/built-in

ex: car, cdr, cond, cons, map, null?, add1, sub1

null
map
apply
rest list

cdr

operator/operand
predicate
lambda
function
procedure
application
continuation
signature

descirption of the parameters of a method

block
begin/do
implicit block

if has these

currying
closure
hof

higher-order function, passed in to another func or returned

declaration
definition
htdp
tls
sicp
ror
exception
environment

set of bindings

package

bundle of reusable, installable code

rank

number of dimensions of an array

R5RS

revision 5 report on scheme

fingernail clippings and oatmeal
lambda calculus
srfi

scheme requests for implementation; see the SRFI FAQs

(The definitions herein are mostly my own, but much of what I know is inevitably copied from others.)

Continue reading →

Firewalld Best Practices

August 27, 2015

Audience:sysadmins

Firewalld is the replacement for iptables in RedHat-family distros. Like it or not, you’ll probably end up having to wrestle with it at some point. I’ve read several articles describing it with an overview, but most miss out on important subtleties of a tool that’s in production but maybe not friendly enough for prime time. Here you’ll find my guide to getting the most out of Firewalld and avoiding its gotchas.

The commands get long, long, and very long to type frequently. What’s worse is that it seems you usually need to repeat them with a --permanent option, which is painful and easy to forget.

Continue reading →