Skip to content

Instantly share code, notes, and snippets.

View bjjb's full-sized avatar

JJ Buckley bjjb

View GitHub Profile
# Example of using
require 'sqlite3'
require 'active_record'
ActiveRecord::Base.establish_connection("sqlite3::memory:")
conn = ActiveRecord::Base.connection
conn.create_table :users do |t|
t.string :name
end
conn.create_table :user_matches do |t|
t.references :sender
@bjjb
bjjb / cfddns
Created January 20, 2015 23:40
#!/usr/bin/env python3
"""
Script to update this host's DNS entry on Cloudflare. Silently succeeds.
It requires you to have set the environment variables:
- CLOUDFLARE_API_KEY
- CLOUDFLARE_EMAIL
- CLOUDFLARE_HOSTNAME
@bjjb
bjjb / tmux
Last active October 30, 2015 15:36
tmux script for a web-app project
#!/usr/bin/env sh
name="My Cool Web App Project"
serve="npm start"
watch="node_modules/.bin/cake watch"
serve="npm start"
tmux has-session -t "$name"
if [ $? != 0 ]
then
@bjjb
bjjb / incrt.go
Last active March 14, 2017 23:09
An incrementing http client RoundTripper
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"testing"
)
type incrt byte
@bjjb
bjjb / parmexp.sh
Last active March 9, 2018 19:32
Shows what result the `%`, `%%`, `#` and `##` modifiers will have on a shell parameter. I am constantly in need of this.
#!/bin/sh
# This program shows the result of applying the % and # shell parameter
# expansion modifiers to a parameter, for those who are constantly looking it
# up.
x=${1:?Usage: parmexp <parameter>}
echo "(hash dot star) ‥‥‥‥‥‥‥‥....... $x \${x#.*} → ${x#.*}"
echo "(hash hash dot star) .......... $x \${x##.*} → ${x##.*}"
echo "(percent dot star) ............ $x \${x%.*} → ${x%.*}"
/*
* Converts the 2-letter code (such as "es" or "ie" to an emoji representing that country's flag.
* It works because a flag emoji, such as the German flag, is a combination of regional letter
* glyphs (🇩 🇪 without a space is rendered as 🇩🇪, the German (de) flag). Those glyphs start at
* 0x1f1e6 and end at 0x1f1ff. 'a' is 97.
*/
const flagEmojiForCode = (code) => {
const h = code.toLowerCase().charCodeAt(0) + (0x1f1e6 - 97)
const l = code.toLowerCase().charCodeAt(1) + (0x1f1e6 - 97)
return String.fromCodePoint(h, l)
@bjjb
bjjb / bowling.lisp
Created June 28, 2018 16:57
A Common-Lisp solution to Uncle Bob's Bowling Game kata
; A functional solution to Uncle Bob's Bowling Game
; https://programmingpraxis.com/2009/08/11/uncle-bobs-bowling-game-kata/
(defun strike? (roll)
(and roll
(= 10 (first roll))))
(defun spare? (roll)
(and roll
(rest roll)
require 'minitest/autorun'
# A Ruby solution to Uncle Bob's Bowling Game
# https://programmingpraxis.com/2009/08/11/uncle-bobs-bowling-game-kata/
module Bowling
module_function
def strike?(scores)
scores&.first == 10
@bjjb
bjjb / rover.py
Created January 13, 2020 12:44
Mars Rover
#!/usr/bin/env python
from enum import Enum, IntEnum
from typing import Dict, Callable
import unittest
class Direction(IntEnum):
NORTH = 0
EAST = 1
@bjjb
bjjb / awsume.sh
Created April 11, 2020 17:41
Assume an AWS role with an MFA token
# awsume
# Usage: awsume ROLENAME
# It uses the _current_ AWS profile (set as an env-var or the default) to get
# the user's ARN and associated MFA devices, then it asks for a token code,
# sends the `aws sts assume-role` call to AWS, and exports the resulting session.
# /usr/bin/env bash
awsume() {
user="$(aws sts get-caller-identity --query 'Arn' --output text)"
role="${user%:*}:role/${1?Usage: $0 profile}"