Skip to content

Instantly share code, notes, and snippets.

@saagarjha
saagarjha / AppKit Abusers
Created May 21, 2018 05:38
Apps that have special-case workarounds in Apple's core frameworks, sorted by number of exceptions (from https://worthdoingbadly.com/appkitcompat/)
22 com.apple.iWork.Keynote
18 com.apple.iWork.Pages
16 com.apple.iWork.Numbers
15 com.apple.iPhoto
13 com.microsoft.Powerpoint
9 com.microsoft.Excel
9 com.apple.logic.pro
9 com.adobe.Photoshop
8 com.microsoft.Outlook
7 com.microsoft.Word
@saagarjha
saagarjha / calculate.swift
Created May 7, 2018 10:58
A small command line calculator for macOS, using Calculate.framework
import Foundation
let handle = dlopen("/System/Library/PrivateFrameworks/Calculate.framework/Calculate", RTLD_LAZY)
let CalculatePerformExpression = unsafeBitCast(dlsym(handle, "CalculatePerformExpression"), to:
(@convention(c) (UnsafePointer<CChar>, Int, Int, UnsafePointer<CChar>) -> Bool).self)
let expression = Array(CommandLine.arguments.dropFirst()).joined(separator: " ")
let answer = Array<CChar>(repeating: 0, count: 100)
if CalculatePerformExpression(expression, 16, 1, answer) {
print(String(cString: answer))
}
@saagarjha
saagarjha / pause4debug.c
Last active March 22, 2019 04:48
Simple dynamic library that, when injected, pauses programs during initialization
// Dynamic library that pauses a short lived program during launch so that a
// debugger can attach to it. To use it, compile it on macOS:
// clang -dynamiclib pause4debug.c -o pause4debug.dylib
// On Linux:
// gcc -shared -fPIC pause4debug.c -o pause4debug.so
// To use it, make the dynamic linker inject it using DYLD_INSERT_LIBRARIES or
// LD_PRELOAD, depending on your platform. On macOS:
// DYLD_INSERT_LIBRARIES=/path/to/pause4debug.dylib debugme
// On Linux,
// LD_PRELOAD=/path/to/pause4debug.so debugme
@saagarjha
saagarjha / cd.bash
Last active February 24, 2018 23:32
Bash function that provides a similar experience to zsh's cd history
cd() {
# Set the current directory to the 0th history item
cd_history[0]=$PWD
if [[ $1 == -h ]]; then
for i in ${!cd_history[@]}; do
echo $i: "${cd_history[$i]}"
done
return
elif [[ $1 =~ ^-[0-9]+ ]]; then
builtin cd "${cd_history[${1//-}]}" || # Remove the argument's dash
@saagarjha
saagarjha / screensaver.swift
Last active September 26, 2019 20:26
Simple script for manipulating the screensaver setting on macOS
import Foundation
let arguments = CommandLine.arguments
switch arguments.count {
case 1:
let moduleDict = CFPreferencesCopyAppValue("moduleDict" as CFString, "com.apple.screensaver" as CFString)
print(moduleDict?["moduleName"] as! String)
print(moduleDict?["path"] as! String)
case 3:
let moduleDict = (CFPreferencesCopyAppValue("moduleDict" as CFString, "com.apple.screensaver" as CFString) as? NSDictionary)?.mutableCopy() as? NSMutableDictionary
@saagarjha
saagarjha / SocketAddress.swift
Last active February 12, 2018 22:56
(Broken) Swifty wrapper around POSIX sockets
import Foundation
protocol SockAddr { }
extension sockaddr_in: SockAddr { }
extension sockaddr_in6: SockAddr { }
enum SocketAddress: CustomDebugStringConvertible {
case ipv4(sockaddr_in)
case ipv6(sockaddr_in6)
@saagarjha
saagarjha / WBSAutoFillQuirks.plist
Last active April 17, 2019 18:02
List of password generation quirks that MobileSafari uses when generating passwords
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>DomainsWithAssociatedCredentials</key>
<array>
<array>
<string>comcast.net</string>
<string>xfinity.com</string>
</array>
@saagarjha
saagarjha / xkcdSlackBot.gs
Last active April 11, 2018 06:31
Google Apps Script to post new xkcd comics to a Slack channel
function postUpdatedxkcdIfNecessary() {
var properties = PropertiesService.getUserProperties();
var latestComic = JSON.parse(UrlFetchApp.fetch("http://xkcd.com/info.0.json").getContentText());
if (latestComic["num"] > properties.getProperty("lastComic")) {
var title = latestComic["title"];
var imageURL = latestComic["img"];
var altText = latestComic["alt"];
var number = latestComic["num"];
@saagarjha
saagarjha / git-test-pr
Last active April 1, 2017 17:22
Try out Git pull requests locally
#!/bin/sh
if [ $# == 1 ]; then
git fetch origin pull/$1/head:pr-$1
git checkout pr-$1
elif [ $# == 2 ]; then
git fetch $1 pull/$2/head:pr-$2
git checkout pr-$2
else
echo "Usage: git test-pr [remote] pr#"
@saagarjha
saagarjha / git-ps1-status
Last active April 1, 2017 17:23
A Git summary for your Bash PS1 prompt
#!/usr/local/bin/bash
# Make sure this runs on a modern bash with support for ;;& in case
shopt -s extglob
# Make sure we're in a git directory
if [ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1; then
# Print a leading space to separate from the rest of the PS1
echo -n " "
# Check our status relative to upstream