Skip to content

Instantly share code, notes, and snippets.

View mikehale's full-sized avatar

Michael Hale mikehale

  • Heroku
  • Holly Springs, NC
View GitHub Profile
@mikehale
mikehale / application.rb
Last active August 5, 2024 21:29
Support rails master key rotation. Tries an array of keys from named environment variables.
config.before_initialize do |app|
class CompositeEncryptedConfiguration
def initialize(config:, env_keys:)
configs = env_keys.map do |key|
ActiveSupport::EncryptedConfiguration.new(
config_path: Rails.root.join(config.credentials.content_path),
key_path: Rails.root.join(config.credentials.key_path),
env_key: key,
raise_if_missing_key: true
)
@mikehale
mikehale / backup.rb
Last active September 3, 2019 14:28
# To install this script as a context menu item, add this to the registry:
# key: \HKEY_CLASSES_ROOT\*\shell\Backup\command
# default data: C:\Ruby26-x64\bin\rubyw.exe C:\Scripts\backup.rb "%1"
# And place this file at C:\Scripts\backup.rb
require 'fileutils'
require 'time'
src = ARGV.first
exit unless src
#!/usr/bin/env ruby
# Read CSV data from STDIN, output a WITH clause containing the CSV data
require 'csv'
csv = CSV.parse($stdin, headers: true, converters: :numeric, header_converters: :symbol)
columns = csv.headers.join(",")
cte_name = ENV.fetch("CTE_NAME", 'temp')
@mikehale
mikehale / 1_README.md
Last active January 24, 2018 20:30
Share file descriptors between processes on the same machine using unix domain sockets. Thanks to https://www.linuxquestions.org/questions/programming-9/how-to-share-socket-between-processes-289978/ for the inspiration.

Usage:

Open 2 terminals, run server.rb in one and client.rb in the other. The tcp socket file descriptor will be created in the client, passed to the server, and then used in the server to read from the HTTP server.

curl -L https://github.com/rlmcpherson/s3gof3r/releases/download/v0.5.0/gof3r_0.5.0_linux_amd64.tar.gz | tar -zxv --strip-components 1 -C /app/bin
#!/bin/sh
set -x
# http://lartc.org/howto/lartc.qdisc.classful.html
# A single user has 5000kbit upload for himself. But they want prioritizing.
# Variables
TC=$(which tc)
IPT=$(which iptables)
`ruby -ruri -e 'uri = URI.parse(ENV["DATABASE_URL"]); puts %(env PGPASSWORD=#{uri.password} psql --dbname=#{uri.path[1..-1]} --host=#{uri.host} --port=#{uri.port} --username=#{uri.user} --no-password)'`
@mikehale
mikehale / gist:7a66ba17ba9f074046d9
Last active August 29, 2015 14:22
restore old syncthing versions
# Specific dir
cd ~/Sync/.stversions
cp foo ~/Sync/foo
cd ~/Sync/foo
find . -name '*~20150604*' -type f |ruby -rfileutils -e 'mappings = STDIN.read.split($/).map{|s| s =~ /^(.+)~\d{8}-\d{6}(.*)/; d = [$1, $2].join; [s,d]}; mappings.each{|s,d| FileUtils.mv(s,d, noop: false, verbose: true)}'
# Scan for version files
cd ~/Sync
find . ! -path './.stversions/*' -name '*~20150604*' -type f
#!/usr/bin/env ruby
# Shows the physical location of each disk
DEVICE_NAME = "sata_sil24"
FORMAT = {
:scsi_id => 0..12,
:media => 13..20,
:bus => 21..29,
:model => 30..46,