Skip to content

Instantly share code, notes, and snippets.

View brianloveswords's full-sized avatar

Brian J Brennan brianloveswords

View GitHub Profile
brianloveswords / git-obliterate
Last active January 24, 2024 12:28
git-obliterate: for removing sensitive files you may have committed from the entire history of the project.
View git-obliterate
test -z $file && echo "file required." 1>&2 && exit 1
git filter-branch -f --index-filter "git rm -r --cached $file --ignore-unmatch" --prune-empty --tag-name-filter cat -- --all
git ignore $file
git add .gitignore
git commit -m "Add $file to .gitignore"


There are so many great GIFs out there and I want to have copies of them. Twitter makes that harder than it should be by converting them to MP4 and not providing access to the source material. To make it easier, I made a bash pipeline that takes a tweet URL and a filename, extracts the MP4 from that tweet and uses ffmpeg to convert back to GIF.


  • ffmpeg
    • macOS: brew install ffmpeg
    • Ubuntu/Debian: apt install ffmpeg
View audio.js
// @ts-check
// I run this in a folder using `caddy file-server` with the two files below
// and an index.html that's more or less just including this file as a script,
// `<script src="/audio.js"></script>`
// prerequisite: two files representing a transition that should be gapless. I
// used the first two tracks off Meshuggah's "Catch Thirtythree" because I
// happen to know that album is intended to be gapless.
View alarm.html
<audio id="alarm" src="alarm.ogg" controls></audio>
const alarmElement = document.getElementById('alarm');
const alarmTimes = [
new Date('2015-11-13 07:00 -0500'),
new Date('2015-11-13 08:00 -0500'),
new Date('2015-11-13 08:30 -0500'),
function playAlarm() {
brianloveswords /
Created August 26, 2011 07:36
bash: get http response codes for a list of URLs
# from
while read line
echo $(curl --write-out %{http_code} --silent --output /dev/null $line)
done <$1
brianloveswords /
Last active April 26, 2021 04:55
BigQuery Cost Estimator

BigQuery Cost Estimator

Get an estimate of how much a query is going to cost before you run it.


  1. Create a new bookmark with the contents of 2-bookmarklet as the URL.
  2. Whenever you open a new BQ session, click the bookmarklet to attach the observer. You only have to do it once per session.
#!/usr/bin/env bash
function example() {
set -o errexit
set -o nounset
## only needed for the example
local worktime=0
# how many concurrent operations to perform
View cursed.js
function cursedPromise() {
return new Promise(resolve => {
if (Math.random() > 0.5) resolve();
async function main() {
await cursedPromise();
console.log("after await");
return "ok";
View monitor.js
var is_setup = null;
var hash_col = null;
var user_col = null;
var continue_execution = function(){
if ( !(is_setup && hash_col && user_col) ) return false;
sys.puts('setup and found collections');
return true;
View what's up with restify?.js
const restify = require('restify')
const server = restify.createServer({
name: 'next test',
version: '1.0.0'
server.get('/', function (req, res, next) {
req.whatever =