Skip to content

Instantly share code, notes, and snippets.

View draffensperger's full-sized avatar

Dave Raffensperger draffensperger

View GitHub Profile
@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);
@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 / 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 / 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 / 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 / keybase.md
Last active August 29, 2015 13:58
keybase.io Github verification Gits

Keybase proof

I hereby claim:

  • I am draffensperger on github.
  • I am draffensperger (https://keybase.io/draffensperger) on keybase.
  • I have a public key whose fingerprint is 11AD 4270 6B18 7B21 BDCF 7A62 66E0 7480 D06A 9FE6

To claim this, I am signing this object:

@draffensperger
draffensperger / job_duplicate_checker.rb
Created March 31, 2015 16:48
Sidekiq job duplicate checker
module JobDuplicateChecker
def duplicate_job?(*args)
job_in_retries?(args) || older_job_running?(args)
end
private
def older_job_running?(args)
workers = Sidekiq::Workers.new
self_worker = workers.find { |_, _, work| work['payload']['jid'] == jid }
@draffensperger
draffensperger / explanation.md
Last active October 9, 2015 20:14
Why find_each(batch_size: 1) is helpful if objects reference lots of memory and operations are long.

In MPDX, the Google Contacts sync job takes a long time and the google accounts loop to sync each job could benefit from find_each(batch_size: 1). Basically it seems likes find_each pulls in the records in batches and then saves them in an array to enumerate through. Here's a comparison of the memory results with different batch_sizes that I did using a similar, but contrived MemHungry model. To setup, first do 6.times { MemHungry.create }.

Using the default batch_size of 1000 the memory at the end reflecs all 6 objects and the RAM they hold onto:

[1] pry(main)> MemHungry.all.find_each { |m| puts m.id; m.eat_memory; }
  MemHungry Load (0.5ms)  SELECT  "mem_hungries".* FROM "mem_hungries"   ORDER BY "mem_hungries"."id" ASC LIMIT 1000
1
Memory before GC: 112.63671875
Memory before allocation: 159.90234375
Memory after allocation: 1759.90234375
@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 / WORKSPACE
Created December 5, 2018 02:36
Minimal example of Go import conflicts for `go_proto_library`
workspace(name = "test_proto")