Skip to content

Instantly share code, notes, and snippets.


Samuel Cochran sj26

View GitHub Profile
View timcopter.txt
T __/ [] \
TIM===__ \
M \________]
sj26 / slack-archive-redirect.user.js
Created Jul 25, 2022
Open slack in the browser straight away — no more "open this link in your browser"
View slack-archive-redirect.user.js
// ==UserScript==
// @name slack-archive-redirect
// @namespace
// @version 1
// @description Open slack in the browser straight away
// @author
// @match https://**
// @grant none
// ==/UserScript==
sj26 / activerecord-lifetime.rb
Created Mar 3, 2022
ActiveRecord Connection Lifetime controls for using postgres with an autoscaling pgbouncer service safely
View activerecord-lifetime.rb
# frozen_string_literal: true
# Connection lifetime for ActiveRecord
# Make sure that connections to the database can only live for a certain number
# of seconds. Once lifetime is reached, the underlying connection will be
# reconnected. This is enforced when checking out a connection for use from the
# pool. Use in combination with idle_timeout to enforce connection lifetime on
# idle connections as well.
View trello-hide-workspace-nav.user.css
/* ==UserStyle==
@name trello-hide-workspace-nav
@description Hide new trello workspace nav when it is collapsed (press "[")
==/UserStyle== */
[data-test-id="workspace-navigation-collapsed-container"] {
display: none !important;
View rspec
set -euo pipefail
echo -e "--- :database: Preparing databases"
bin/rake db:test:prepare db:job_log_chunks:reset
echo -e "+++ :rspec: Running \033[33mspecs\033[0m :cow::bell:"
sj26 / basecamp-pull-to-refresh.user.js
Last active Jun 10, 2021
I use the heystack page as the root of my basecamp tab, and often want to read notifications then go back to the heystack with a trackpad swipe, but then the heystack contents is outdated because turblinks restores the previous contents. So this lets me stay on the trackpad and do a pull-to-refresh to update the notifications. Ideally it would r…
View basecamp-pull-to-refresh.user.js
// ==UserScript==
// @name basecamp-pull-to-refresh
// @description Pull to refresh the Basecamp 3 Heystack page.
// @author Samuel Cochran <>
// @license MIT
// @version 1
// @match*/my/readings
// @run-at document-end
// @homepage
// ==/UserScript==
sj26 / active_record_timescale_extensions.rb
Last active Jun 4, 2021
Timescale extensions for ActiveRecord
View active_record_timescale_extensions.rb
# Put this in config/initializers/
module ActiveRecord::Tasks::TimescaleExtensions
def structure_load(filename, extra_flags)
# If this structure is using timescaledb then we need to take some extra steps
if system "grep", "-Eq", "CREATE EXTENSION( IF NOT EXISTS)? timescaledb", filename
puts "Enabling timescale extension"
sj26 / basecamp-show-tweet-cards.user.js
Last active Sep 8, 2020
Show cards in embedded tweets in campfires etc so you can see the images etc that are being shared
View basecamp-show-tweet-cards.user.js
// ==UserScript==
// @name basecamp-show-tweet-cards
// @description Show cards in embedded tweets so you can see the images etc that your friends are sharing
// @author Samuel Cochran <>
// @license MIT
// @version 1
// @match*/embeds/*/chat
// @run-at document-end
// @homepage
// @updateURL
sj26 / basecamp-more-hotkeys.user.js
Last active Sep 1, 2020
Some more hotkeys for Basecamp keyboard warriors
View basecamp-more-hotkeys.user.js
// ==UserScript==
// @name basecamp-more-hotkeys
// @description Some more hotkeys for Basecamp keyboard warriors
// @author Samuel Cochran <>
// @license MIT
// @version 1.2
// @match*
// @homepage
// @updateURL
// ==/UserScript==
View Dockerfile
# syntax = docker/dockerfile:experimental
FROM ruby:2.6.5 AS base
ADD /etc/apt/trusted.gpg.d/pgdg.asc
ADD /etc/apt/trusted.gpg.d/nodesource.asc
ADD /etc/apt/trusted.gpg.d/yarn.asc
RUN --mount=type=cache,target=/var/cache/apt \
--mount=type=cache,target=/var/lib/apt \