Skip to content

Instantly share code, notes, and snippets.

View seven1m's full-sized avatar

Tim Morgan seven1m

View GitHub Profile
@seven1m
seven1m / hello_world_llvm.cpp
Last active May 2, 2024 05:20
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 / open_source_church_software.md
Last active April 24, 2024 08:38
List of Open Source Church Software
@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:

Note: this is an old old list that I once hosted on my website circa 2005. I keep it around just to reminisce. :-)

This is a list of JavaScript libraries I've noticed while cruising the Web.

Modern

@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 / init.vim
Last active March 17, 2023 21:58
my vim/neovim config in < 100 LOC
syntax on " enable syntax highlighting
set background=dark " we like it dark!
try | colorscheme gruvbox | catch | endtry " use this awesome theme if possible
highlight Pmenu ctermbg=black guibg=black | " fix popup color so it's easier to read
filetype plugin on " load plugins based on file type
filetype indent on " load indent settings based on file type
set shiftwidth=2 " number of spaces to use for indenting
set softtabstop=2 " number of spaces to use when inserting a tab
set tabstop=2 " show tabs as 2 spaces
set expandtab " convert tabs into spaces
{
/* Remap Home / End to be correct on Mac */
"\UF729" = "moveToBeginningOfLine:"; /* Home */
"\UF72B" = "moveToEndOfLine:"; /* End */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
}
@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