Skip to content

Instantly share code, notes, and snippets.

I'm a banana.

Brian Hatfield bmhatfield

I'm a banana.
View GitHub Profile
bmhatfield / clibalance.proto
Created August 11, 2020 12:44
GRPC load balancing sample in Go
View clibalance.proto
syntax = "proto3";
package clibalance;
service Balanceable {
rpc Relay(Ping) returns (Pong);
message Ping {
int64 id = 1;

How to use GPG/PGP to share passwords

Sometimes we need to transmit passwords over unsecured channels, like Slack or email. There are lots of password managers, but their password sharing functionality is less robust than I like. For example, 1Password lets you share passwords, but to do so you must share your entire keychain - which is not useful.

To solve this, we can use public/private keys to transmit messages over any channel, that can only be decrypted by the end user. This is stuff of the future! It seems like it would be complicated, but common use cases are very easy to set up and use!


bmhatfield / .zshrc
Last active November 30, 2022 16:11
OSX Keychain Environment Variables
View .zshrc
# If you use bash, this technique isn't really zsh specific. Adapt as needed.
source ~/
# AWS configuration example, after doing:
# $ set-keychain-environment-variable AWS_ACCESS_KEY_ID
# $ set-keychain-environment-variable AWS_SECRET_ACCESS_KEY
# provide: "j1/yoursupersecret/password"
export AWS_ACCESS_KEY_ID=$(keychain-environment-variable AWS_ACCESS_KEY_ID);
export AWS_SECRET_ACCESS_KEY=$(keychain-environment-variable AWS_SECRET_ACCESS_KEY);
bmhatfield / check-recent-oom
Created April 16, 2016 15:10
A simple, time-based OOM check script for use with riemann-sumd
View check-recent-oom
# Run on a minutely basis by
LAST_OOM="$(grep 'Out of memory' /var/log/kern.log | tail -n 1)";
if [ -n "${LAST_OOM_TIME}" ]; then
if [ $(($((`date +%s` - `date --date="${LAST_OOM_TIME}" +%s`)) / 60 )) -le ${LAST_OOM_WINDOW} ]; then
echo "CRITICAL: OOM within last ${LAST_OOM_WINDOW} minutes!"
echo ${LAST_OOM}
bmhatfield / .profile
Last active February 1, 2023 13:55
Automatic Git commit signing with GPG on OSX
View .profile
# In order for gpg to find gpg-agent, gpg-agent must be running, and there must be an env
# variable pointing GPG to the gpg-agent socket. This little script, which must be sourced
# in your shell's init script (ie, .bash_profile, .zshrc, whatever), will either start
# gpg-agent or set up the GPG_AGENT_INFO variable if it's already running.
# Add the following to your shell init to set up gpg-agent automatically for every shell
if [ -f ~/.gnupg/.gpg-agent-info ] && [ -n "$(pgrep gpg-agent)" ]; then
source ~/.gnupg/.gpg-agent-info
bmhatfield / local_databag.rb
Created March 29, 2016 00:45
Encrypt, Edit and key-rotate databags.
View local_databag.rb
require 'chef/knife'
module LocalDatabags
class Encrypt < Chef::Knife
deps do
require 'chef/encrypted_data_bag_item'
banner "knife encrypt BAGNAME ITEM KEYFILE"
bmhatfield / ec2-security-group-rules
Created March 9, 2016 04:15
Output a human-readable & colorized view of your EC2 security group rules
View ec2-security-group-rules
#!/usr/bin/env ruby
require 'aws-sdk'
require 'colorize'
ec2 =
ec2.security_groups.sort_by{|s| s.group_name }.each do |sg|
puts sg.group_name.underline unless sg.ip_permissions.empty?
sg.ip_permissions.each do |perm|
bmhatfield / gist:e49022dbea8013c3cef4
Created September 11, 2014 16:55
Stubbed-Search (Chef)
View gist:e49022dbea8013c3cef4
module StubbedSearch
def stubbed_search(index, query, stub)
# When running in the 'local' environment, dynamically set the hostname
# value for the search_stub to the hostname of the running VM
if node.chef_environment == 'local'
node.normal[:search_stub][stub] = node[:search_stub][stub].map do |n|
hsh = n.to_hash
hsh[:hostname] = node[:hostname]
bmhatfield /
Created March 27, 2014 18:05

Keybase proof

I hereby claim:

  • I am bmhatfield on github.
  • I am brianhatfield ( on keybase.
  • I have a public key whose fingerprint is 2DF5 8084 BCAC BB25 AA51 9650 FFD6 0508 E5D9 0536

To claim this, I am signing this object:

bmhatfield / gist:8600671
Created January 24, 2014 16:24
Working Ohai Plugin
View gist:8600671
require_plugin "#{os}::network"
provides 'ipaddress'
if virtualization['system'] == 'vbox'
network['interfaces']['eth1']['addresses'].each do |ip, params|
if params['family'] == 'inet'
ipaddress ip