Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@adam-zethraeus
adam-zethraeus / $ Unit tests, access control, state, and statics
Last active January 3, 2020 22:22
A bad, stateful, and impossible to unit test, 'onboarding manger'.
-
private func validatePassword() {
self.passwordIsValid = false
self.passwordIssue = nil
guard let username = self.username,
let email = self.email,
let phoneNumber = self.phoneNumber,
let password = self.password
else {
return
func test_PasswordCanNotContainUsername() {
let mockPasswordCollectorLauncher = MockPasswordCollectorLauncher()
let mockListener = MockOnboardingManagerListener()
let onboardingManager = BadOnboardingManager(passwordCollectorLauncher: mockPasswordCollectorLauncher)
onboardingManager.listener = mockListener
onboardingManager.start()
// TODO: assert the username collector launches now.
onboardingManager.usernameCollectorReturned(username: "ValidUsername")
func testPasswordCanNotContainUsername() {
let (didPass, issue) = OnboardingManager.validatePassword(password: "ValidUsername$123",
username: "ValidUsername",
email: "valid@example.com",
phoneNumber: "+11235554321")
XCTAssertFalse(didPass)
XCTAssertEqual(issue, PasswordIssue.containsUsername)
}
@adam-zethraeus
adam-zethraeus / copy_url_to_selection_bookmarklet.js
Last active September 10, 2020 00:48
a bookmarklet to copy a url to the current page, with the current selection highlighted. (Chrome only. Because other browser care about timing attacks more than your Google search result experience.)
javascript:
let tempInput = document.createElement("input");
tempInput.value = window.location.href + `#:~:text=${window.getSelection().toString()}`;
document.body.appendChild(tempInput);
tempInput.select();
document.execCommand("copy");
document.body.removeChild(tempInput);
@adam-zethraeus
adam-zethraeus / useViewportSpace.ts
Created December 2, 2020 22:51
useViewportSpace.ts
import { useState, useEffect, MutableRefObject } from 'react';
type Location = { x: number; y: number };
type Size = { width: number; height: number };
type Space = { location: Location; size: Size };
// The viewport information for the passed Div.
const useViewportSpace = (
scrollArea: MutableRefObject<HTMLDivElement | undefined>,
): { content?: Space; viewport?: Space } => {
@adam-zethraeus
adam-zethraeus / dndkill.sh
Created April 28, 2021 07:26
dndkill — disable macOS Big Sur Do-Not-Disturb (even if scheduled)
#!/bin/bash
rootPlist=$(plutil -extract dnd_prefs xml1 -o - /Users/"$USER"/Library/Preferences/com.apple.ncprefs.plist)
dataPlistB64=$(echo $rootPlist | xmllint --xpath "string(//data)" - )
dataPlist=$(echo $dataPlistB64 | base64 --decode | plutil -convert xml1 - -o -)
scheduleDict=$(echo $dataPlist | xmllint --xpath "//dict/key[text()='scheduledTime']/following-sibling::*[1]" -)
userPrefDict=$(echo $dataPlist | xmllint --xpath "//dict/key[text()='userPref']/following-sibling::*[1]" -)
end=$(echo $scheduleDict | xmllint --xpath "number(//dict/key[text()='end']/following-sibling::*[1])" -)
@adam-zethraeus
adam-zethraeus / dot-graph-chat-bot.go
Created June 25, 2021 21:45
DOT graph → chatbot state machine
package main
/*
This program parses a DOT graph representing a chatbot's state machine.
It supports single-select, multiple-select, message-sends, and hooks into programs.
*/
import (
"fmt"
"gonum.org/v1/gonum/graph"
@adam-zethraeus
adam-zethraeus / CachedValue.swift
Last active December 11, 2021 10:04
Strongly Typed UserDefaults
import Foundation
/// `CachedValue` provides a strongly typed interface to UserDefaults.
/// It can cache any ``Codable`` type.
///
/// Usage:
/// 1. Make a struct conforming to `CachedValue`
/// * Add a `typealias ValueType = YourType`
/// * Optionally add a `static var defaultValue: YourType = YourInstance`. (Your `value` accessor will then be non-optional.)
/// * Optionally add a `static var cacheKey: String = "a-very-specific-string-key"`. (By default your key will be your CachedValue conforming type's name.)
@adam-zethraeus
adam-zethraeus / StartupTimer.swift
Created December 18, 2021 11:30
StartupTimer.swift
import Foundation
import QuartzCore
import os.log
extension OSLog {
private static var subsystem = Bundle.main.bundleIdentifier!
fileprivate static let osLogCategoryString = "StartupTimerEvents"
static let startupTimer = OSLog(subsystem: subsystem, category: osLogCategoryString)
}