Skip to content

Instantly share code, notes, and snippets.

View seven1m's full-sized avatar

Tim Morgan seven1m

View GitHub Profile
@seven1m
seven1m / polymorphic_hindley_milner.rb
Last active February 18, 2024 17:43
Polymorphic Hindley-Milner type checking and inference algorithm as described by Cardelli
# Type checking and inference algorithm as described in
# Basic Polymorphic Typechecking by Luca Cardelli [1987]
# https://pages.cs.wisc.edu/~horwitz/CS704-NOTES/PAPERS/cardelli.pdf
#
# The history around this algorithm is confusing to me since I'm not very
# academic. I like this paper because it provides a lot of working code,
# which I can port to Ruby. I understand this to be generally known as
# the polymorphic Hindley-Milner type checking algorithm.
#
# Some interesting history bits from the paper:
@seven1m
seven1m / verify.rb
Last active June 19, 2023 15:14
Example HMAC-SHA256 calculation for Planning Center Webhook Payload
require 'openssl'
# get this secret from the Webhooks UI https://api.planningcenteronline.com/webhooks
secret = '2608ab74db02d670279278a90585fca300953f0a19fd96529cb61bb92ed39d86'
# raw unformatted payload
data = '{"data":[{"id":"cac783dc-75e7-4c5b-88e8-502d9d8682ae","type":"EventDelivery","attributes":{"name":"people.v2.events.person.updated","attempt":1,"payload":"{\"data\":{\"type\":\"Person\",\"id\":\"125587227\",\"attributes\":{\"accounting_administrator\":false,\"anniversary\":null,\"avatar\":\"https://avatars.planningcenteronline.com/uploads/initials/K.png\",\"birthdate\":null,\"can_create_forms\":false,\"can_email_lists\":false,\"child\":false,\"created_at\":\"2023-04-28T19:05:52Z\",\"demographic_avatar_url\":\"https://avatars.planningcenteronline.com/uploads/initials/K.png\",\"directory_status\":\"no_access\",\"first_name\":\"Kid\",\"gender\":null,\"given_name\":null,\"grade\":null,\"graduation_year\":null,\"inactivated_at\":null,\"last_name\":\"222\",\"medical_notes\":null,\"membership\":null,\"mid
@seven1m
seven1m / remote_id.rb
Created September 26, 2022 20:11
Get / Change `remote_id` in Planning Center
# usage: ruby remote_id.rb pco_id [remote_id]
#
# pco_id Planning Center profile ID
# remote_id Specify new remote ID
#
# get remote id:
# ruby remote_id.rb 1234
#
# set remote id:
# ruby remote_id.rb 1234 5678
@seven1m
seven1m / webserver.rb
Created September 1, 2022 00:18
web server in pure ruby using TCPServer
require 'socket'
server = TCPServer.new 3000
loop do
client = server.accept
method, request_target, _http_version = client.gets.strip.split
headers = {}
until (line = client.gets) =~ /^\r?\n$/
name, value = line.strip.split(': ')
# Dijjkstra's Algorithm
# Book: Grokking Algorithms by Aditya Y. Bhargava
# Chapter: 7
class ShortestPath
def initialize(start_node, dest_node, graph)
@start_node = start_node
@dest_node = dest_node
@graph = graph
@seven1m
seven1m / lots_of_symbols.rb
Last active December 21, 2021 01:54
Adaptation of the first 10,000 words from https://gist.github.com/h3xx/1976236, as a list of Ruby symbols
:the
:of
:and
:to
:a
:in
:that
:I
:was
:he
@seven1m
seven1m / awsping.sh
Last active November 8, 2021 18:56
Script to get latency for 3 AWS US regions
#!/bin/bash
# usage: ./awsping.sh | sort -n 2.7
# 39.93 us-east-2
# 44.95 us-east-1
# 64.89 us-west-2
function region_latency() {
local region="$1"
ping -c 1 ec2.$region.amazonaws.com &>/dev/null # throw away the first ping because DNS
@seven1m
seven1m / hello_world_llvm.cpp
Last active March 15, 2024 00:36
Simple 'hello world' example in LLVM IRBuilder
// % clang++ $(llvm-config --cxxflags --ldflags --system-libs --libs core) -o hello_world_llvm hello_world_llvm.cpp
// % ./hello_world_llvm
// hello world
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ExecutionEngine/GenericValue.h>
#include <llvm/IR/IRBuilder.h>
#include <stdio.h>
using namespace llvm;
@seven1m
seven1m / frame.py
Last active September 4, 2021 18:02
A small Python script that creates a semi-transparent resizable frame that stays on top. I use it to mark an area of my screen (the area where my webcam is overlayed) off-limits when screencasting.
#!/usr/bin/env python
# shamelessly stolen and adapted from https://gist.github.com/KurtJacobson/374c8cb83aee4851d39981b9c7e2c22c
# usage: python3 frame.py [width] [height] [x] [y] [opacity]
import cairo
import gi
import sys
import resource
package manager sync db install upgrade uninstall
apt-get update install install remove
brew update install upgrade uninstall
bundle N/A install update remove
gem N/A install install uninstall
pacman -y -S -S -R