Skip to content

Instantly share code, notes, and snippets.

@algal
algal / isSubcollection.swift
Last active March 13, 2021 18:37
Look for a subarray in an array in Swift
extension Collection {
/// True if `self` is a range within `collection`
/// - Parameter collection: a `Collection` like `Array`
/// - Returns: true or false
///
/// Since this works with `Collection` it works with `Array`, `ArraySlic`, etc..
func isSubcollection<U>(of collection:U) -> Bool
where U:Collection, U.Element == Self.Element, Self.Element:Equatable
{
let (a,b) = (collection,self)
@algal
algal / join_pdf.bash
Last active February 16, 2021 02:00
join PDFs on macOS from the command line with zero dependencies
#!/bin/bash
if [ "$#" -lt 2 ]; then
echo "usage: $0 output_pdf_path input_path1..."
echo
echo "This script joins the PDFs at input_path1, input_path2, etc."
echo "into one pdf at output_pdf_path"
echo
echo "Known good: macOS 11.1, and below for many versions"
echo
exit 1
@algal
algal / mdfindfile
Last active November 12, 2020 01:09
Easily search for files based their names or glob patterns, by wrapping Spotlight.
#!/usr/bin/env bash
# case-insensitive search for $1, maybe in dir $2
case "$#" in
0) echo "usage: $(basename $0) PATTERN [DIR]"
echo ""
echo " Lists paths of files matching PATTERN in DIR or below"
;;
1) exec mdfind "kMDItemDisplayName == '$1'c"
;;
*) exec mdfind "kMDItemDisplayName == '$1'c" -onlyin "$2"
@algal
algal / plot_cm.py
Created September 9, 2020 20:08
Plot a confusion matrix in scikitlearn from data not from an estimator
# This uses scikit learn internals, since the sk public API requires you to pass
# in an estimator and sometimes you just want to pass in the some data you'd
# use to calculate a raw CM
def plot_cm(y_true,y_pred,labels):
from sklearn.metrics._plot.confusion_matrix import ConfusionMatrixDisplay
sample_weight = None
normalize = None
include_values = True
@algal
algal / SFUSDCalendar.md
Created August 29, 2020 20:20
To use an SFUSD Gmail account to subscribe to a non-SFUSD Google Calendar

Subscribing to a Google Calendar from an SFUSD Google Account

SFUSD Google accounts can only send and receive emails from SFUSD teachers, so they cannot receive calendar invitations from normal gmail accounts, like the gmail accounts of their parents. So you cannot invite them to join a calendar as usual.

Here's a workaround.

In the normal gmail account:

  1. Create the calendar to share from a normal gmail account.
  2. Go to Calendar Settings / General
@algal
algal / excel_parseDates.vba
Last active September 27, 2023 21:28
please god why aren't these predefined?
' Expects a datetimestr in the format "YYYYMMDD" with - or / or no separator
' Parses independently of local region, unlike VBA.DateTime.DateValue()
' Known-good on Excel for Mac Version 16.4
Function parseYYYYMMDD(dateTimeStr As String) As Date
Dim normalized As String
normalized = VBA.Strings.Trim(dateTimeStr)
normalized = VBA.Strings.Replace(dateTimeStr, "/", "")
normalized = VBA.Strings.Replace(normalized, "-", "")
from typing import Dict, List, Tuple
def makeKeyDict(items:List[Tuple]) -> Dict:
"Gives a list of tuples (a,b), returns a dict mapping a to set of b"
d = {}
for (a,b) in items:
d[a] = set([b]).union(d.get(a,set()))
return d
def findKeysWithMultipleValues(keydict) -> List:
@algal
algal / DataFrameFromMD5.py
Created July 28, 2020 21:01
Read file paths, names, hashes into a data frame
from fastai2.vision.all import * # to get L
import pandas as pd
def readMD5file(md5path:Path) -> pd.DataFrame:
"""
Generate MD5 output file by doing a search like:
find /home/jupyter/data/foldersToAdd/ -iname '*jpg' -print0 | xargs -0 -n 100 md5sum >> /home/jupyter/data/foldersToAdd.md5.out
@algal
algal / addWideMargins.bash
Created July 15, 2020 01:44
Add wide margins to a PDF for annotations
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "usage: $0 PDF_filename..."
echo
echo "This script takes a PDF file as command line arguments,"
echo "and generates a new, landscape-formatted PDF file, where every "
echo "page has very large margins which may be useful for editorial notes"
echo
echo "Requires: pdfjam"
echo
@algal
algal / ReverseH2.swift
Last active June 22, 2020 00:57
Deno and Swift scripts to reverse H2 headers in text
#!/usr/bin/swift
/*
Reads stdin, requiring UTF8-encoded text.
Parses it as initial text followed by a sequence of H2 markdown blocks.
Prints to stdout the initial text plus the H2 blocks in reversed order.
*/
import Foundation