Skip to content

Instantly share code, notes, and snippets.

View jhollinger's full-sized avatar

Jordan Hollinger jhollinger

View GitHub Profile
@jhollinger
jhollinger / blueprints.rb
Last active November 21, 2023 20:47
blueprinter-activerecord example
View blueprints.rb
class UserBlueprint < Blueprinter::Base
fields :id, :name
end
class PostBlueprint < Blueprinter::Base
fields :id, :slug, :body
association :author, blueprint: UserBlueprint
association :comments, blueprint: CommentBlueprint
end
@jhollinger
jhollinger / nyancat
Last active March 26, 2023 15:44
Nyancat
View nyancat
#!/usr/bin/env bash
red='\e[31m'
green='\e[32m'
yellow='\e[33m'
blue='\e[34m'
bold='\033[1m'
normal='\e[0m'
lines=(
@jhollinger
jhollinger / keep-recent.sh
Created March 24, 2023 19:16
Keep most recent files
View keep-recent.sh
# Delete all but the most recent N files in the given dir (and its subdirs)
function keep_most_recent {
dir="$1"
n=$2
offset=$((n+1))
find "$dir" -type f -printf "%T+ %p\n" |
sort -r |
awk '{ print $2 }' |
tail -n +$offset |
xargs --no-run-if-empty rm -f
@jhollinger
jhollinger / extract-google-photos
Created February 5, 2023 21:06
Extract photos/video from a Google Takeout tarball
View extract-google-photos
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -ne 2 ]] || [[ ! -f "$1" ]] || [[ ! -d "$2" ]]; then
echo "usage: extract-google-photos [tarfile] [dest-dir]"
exit 1
fi
if ! command -v exiftool > /dev/null || ! command -v gawk > /dev/null; then
@jhollinger
jhollinger / chrome-auto.sh
Last active July 2, 2021 20:07
Remote Headless Chrome
View chrome-auto.sh
#
# Easiest. If this doesn't work right, try manual.sh
#
docker run --rm -it -p=0.0.0.0:9222:9222 alpeware/chrome-headless-trunk
# Then open local Chrome go to localhost:9222, then to chrome://inspect. From there you can open new tabs and inspect them.
@jhollinger
jhollinger / csp-strict-dynamic.js
Last active March 8, 2023 22:56
Rewrites index.html to with CSP strict-dynamic enabled
View csp-strict-dynamic.js
/**
* Usage: node csp-strict-dynamic.js dist/index.html [path/to/nginx.conf]
*
* Replaces all external script tags in index.html with dynamic loaders, calculates their SHA 256 hashes, and adds those
* hashes as allowed script sources + strict dynamic. Also works for inline scripts.
*
* Your index.html and/or given nginx/apache config file should contain your CSP policy with a script-src section like below:
*
* script-src 'strict-dynamic' {{csp-strict-dynamic-sources}};
*/
@jhollinger
jhollinger / Gemfile
Created April 9, 2019 00:23
DatabaseTasks Green Example
View Gemfile
source 'https://rubygems.org'
gem 'activerecord', '~> 5.2', require: 'active_record'
gem 'sqlite3'
gem 'rake'
View fizzbuzz.rb
def fizzbuzz(input)
input.map do |n|
fizz = n % 3 == 0 ? 'Fizz' : nil
buzz = n % 5 == 0 ? 'Buzz' : nil
if fizz or buzz
"#{fizz}#{buzz}"
else
n.to_s
end
end
@jhollinger
jhollinger / loc
Created April 7, 2016 18:54
Lines of Code
View loc
#!/bin/bash
find $@ -type f -print0 | wc -l --files0-from=-
@jhollinger
jhollinger / sidekiq_csrf_token_fix.rb
Created November 23, 2015 17:17
Fix for Sidkiq::Web's lack of CSRF token
View sidekiq_csrf_token_fix.rb
require 'securerandom'
module Sidekiq
class CsrfTokenFix
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)