Skip to content

Instantly share code, notes, and snippets.

@davepeck
davepeck / bq.py
Last active January 5, 2024 17:20
Toying around with a very naive python BigQuery query builder + related utilities
"""BigQuery utilities."""
import datetime
import typing as t
from abc import ABC, abstractmethod
from google.cloud import bigquery
from google.cloud.bigquery import query
type QueryParamValue = str | int | float | datetime.date | datetime.datetime | t.Sequence[ # noqa: E501
@davepeck
davepeck / well-known-redirect.js
Created January 25, 2023 22:04
My first cloudfront edge function
// note that a lot of code choices here are due to the fact that cloudfront edge uses
// a hilariously backwards version of javascript:
//
// "const", you say? what's that?!
// deal with the painful structure that cloudfront edge functions use for query params
function getURLSearchParamsString(obj) {
var str = [];
for (var param in obj) {
if (obj[param].multiValue) {
@davepeck
davepeck / game_of_life_copilot.py
Last active January 24, 2023 17:17
Game of life, python CLI, entirely written by GitHub Copilot (I only wrote the comments!)
import time
from random import random
from typing import Set, Tuple
# Set the default BOARD_SIZE to 40
BOARD_SIZE = 40
def init_board_with_n_gliders(n: int) -> Set[Tuple[int, int]]:
"""Initialize a board with n gliders."""
@davepeck
davepeck / validate-css.mjs
Last active April 24, 2022 20:44
Example of how to run vscode's built-in CSS validations from the command-line. Use `node validate-css.mjs *.css`.
import fs from "fs";
import url from "url";
import { getCSSLanguageService } from "vscode-css-languageservice";
import { TextDocument } from "vscode-languageserver-textdocument";
/** Human-readable names for the potential diagnostic severities returned. */
const severities = { 1: "ERR", 2: "WARN", 3: "INFO", 4: "HINT" };
/** Format a position in a given file. */
@davepeck
davepeck / Today's Wordle Solution.md
Last active January 8, 2022 00:25
Compute today's wordle solution

It's pretty simple. Example usage:

>  python3 wordle.py
banal
@davepeck
davepeck / eject_all.scpt
Created October 7, 2018 04:34
Command line tool to eject all ejectable volumes
tell application "Finder" to eject (every disk whose ejectable is true and local volume is true and free space is not equal to 0)
@davepeck
davepeck / CertificateSigningRequest.h
Last active May 8, 2020 16:05
Objective-C code to generate a CSR via OpenSSL
//
// CertificateSigningRequest.h
// Cloak
//
// Created by Dave Peck on 10/31/16.
// Copyright © 2016 Bourgeois Bits LLC. All rights reserved.
// Licensed under the MIT license
//
#import <Foundation/Foundation.h>

I got hit by the weird group reassignment when I upgraded to Mavericks. In my case the group was macports (!). I’ve seen one report from a user who got cloakproxy after the 10.11 upgrade, so apparently the bug is still there.

For some reason the OS X upgrader sometimes picks a group and changes the PrimaryGroupID to 20. Here’s the confirm:

dscl . -read Groups/cloakproxy
dscl . -read Groups/staff

And the fix:

@davepeck
davepeck / build_libarchive_3_for_ios_8_and_above.md
Last active November 14, 2020 14:38
How to build libarchive 3 (or, really, any autotools-based library) for iOS 8+

How to build libarchive 3 (and, really, any autotools based library) for iOS 8+

It's easy:

  1. Grab iOS-autotools by @szanni from https://github.com/szanni/ios-autotools
  2. Grab libarchive 3 from http://www.libarchive.org/
  3. cd into the libarchive code directory
  4. export ARCHS="armv7 armv7s arm64" (or suitable for your needs and your shell of choice)
  5. Run autoframework ArchiveLib libarchive.a and wait for everything to build!
@davepeck
davepeck / lev.coffee
Last active August 29, 2015 14:10
Levenshtein Distance in coffeescript
# Levenshtein distance with the ability to reward or punish
# longer contiguous matching runs (set contiguousBonus < 1.0 for rewards)
stringDistance = (s, t, deleteCost=1, insertCost=1, substitutionCost=1, contiguousBonus=1.0) ->
sLength = s.length
tLength = t.length
d = []
for i in [0..sLength]
d[i] = [{score: i, contiguous: 0}]