Skip to content

Instantly share code, notes, and snippets.

View draffensperger's full-sized avatar

Dave Raffensperger draffensperger

View GitHub Profile
@draffensperger
draffensperger / fuzzy_name_lookup.bas
Last active November 24, 2021 13:20
Excel VBA module for fuzzy lookup (via Levenshtein distance) for a person id by first name and last name in a person range that has first, last, full and id fields.
Option Explicit
Private Type PersonQuery
firstName As String
lastName As String
fullName As String
firstNames As Range
lastNames As Range
fullNames As Range
namesSwapped As Boolean
@draffensperger
draffensperger / gist:54ff580bef6b4f8bd13697944121e490
Created November 12, 2020 14:57
SurfingKeys hints chartacters
// Here's how the hints work:
// First 20 characters are used as single-character hints, and then it
// switches to 2-character hints using the next characters. I wanted to make
// sure that the two character hints were easy to push.
// 000000000011111111112
// 012345678901234567890
Hints.characters = 'dkls;aie,cow.xpq/zvmrufj';
@draffensperger
draffensperger / index.js
Last active January 1, 2020 06:46
Record Event to Google Sheets via Cloud Function
// Records a event with a given timestamp to a google sheet
const { google } = require("googleapis");
exports.recordEvent = async (req, res) => {
if (!crypto.timingSafeEqual(Buffer.from(req.body.key),
Buffer.from(process.env.KEY)) {
return;
}
@draffensperger
draffensperger / EXAMPLE.md
Last active December 7, 2018 15:16
Tsickle intersection type unknown this

We have some code that does a monkey-patch of a library function (maybe a bad design, but there may be other better examples of a similar pattern). The structure of the code looks about like this:

// This is code in a library
class Printer {
  value = 'b';

  print() {
    console.log(`value is ${this.value}`);
  }
@draffensperger
draffensperger / WORKSPACE
Created December 5, 2018 02:36
Minimal example of Go import conflicts for `go_proto_library`
workspace(name = "test_proto")
@draffensperger
draffensperger / google_sheets_task_scheduler.js
Created April 19, 2016 00:52
Task scheduler code for Google sheets
function onInstall(e) {
onOpen();
}
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu()
.addItem('Recalculate schedule', 'use')
.addToUi();
}
@draffensperger
draffensperger / s3_deply_snippet.rb
Created January 26, 2014 00:49
S3 Deployment Code (initial start)
def each_file()
Dir.glob("**/*") do |file|
yield file unless File.directory? file
end
end
def file_md5_name(file)
ext = File.extname file
digest = Digest::MD5.base64digest File.read file
@draffensperger
draffensperger / Rakefile
Last active January 2, 2016 08:29
The Octopress Rakefile I use for my blog at davidraff.com. It serves CSS Source Maps under the :preview task.
require "rubygems"
require "bundler/setup"
require "stringex"
## -- Rsync Deploy config -- ##
# Be sure your public key is listed in your server's ~/.ssh/authorized_keys file
ssh_user = "user@domain.com"
ssh_port = "22"
document_root = "~/website.com/"
rsync_delete = false
@draffensperger
draffensperger / People Busy, Google Spreadsheet
Last active December 22, 2015 11:09
Google Apps Script, number of people scheduled
function peopleBusy(people, startRow, startCol, endRow, endCol) {
startRow = startRow || 2;
startCol = startCol || 2;
endRow = endRow || 40;
endCol = endCol || 9;
people = people.split(",");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var n, i, j;
@draffensperger
draffensperger / GetGCalData
Created May 14, 2013 01:08
This is a Google Apps Script for a Google Spreadsheet which gets events from a Google Calendar and loads them into the spreadsheet.
function getGCalData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var inSheet = ss.getSheetByName("GCalParams");
var id = inSheet.getRange("B1").getValue();
var startDate = inSheet.getRange("B2").getValue();
var endDate = inSheet.getRange("B3").getValue();
var cal = CalendarApp.getCalendarById(id);
var events = cal.getEvents(startDate, endDate);