Skip to content

Instantly share code, notes, and snippets.

View drosenstark's full-sized avatar

Dan Rosenstark drosenstark

View GitHub Profile
@drosenstark
drosenstark / DispatchQueue+Util.swift
Created February 21, 2022 21:59
Extension for easy testing of async code
// Copyright 2022 Confusion Studios LLC
// by Dan Rosenstark
import Foundation
/// Extension on DispatchQueue? for Testing
/// If you don't have a DispatchQueue, run immediately (on current queue)
extension Optional where Wrapped : DispatchQueue {
public func asyncIfNotNil(execute block: @escaping ()->()) {
if let self = self {
self.async(execute: block)
@drosenstark
drosenstark / NSArray+Filter.m
Created January 18, 2021 02:31
Simple block filter on NSArray in Objective-C
#import "NSArray+Filter.h"
@implementation NSArray (Filter)
- (NSArray *) filteredArrayUsingBlock:(BOOL (^)(id obj))block {
NSIndexSet *const filteredIndexes = [self indexesOfObjectsPassingTest:^BOOL (id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
return block(obj);
}];
return [self objectsAtIndexes:filteredIndexes];
@drosenstark
drosenstark / Permutations.swift
Created April 26, 2019 12:26
String permutations in a way that makes some sense
import Foundation
func permute(_ s: String) -> [String] {
var arr = Array(s)
var permutations = [[Character]]()
permute(&arr, 0, &permutations)
return permutations.map { String($0) }
}
func permute<T>(_ arr: inout [T], _ k: Int, _ result: inout [[T]]) {
@drosenstark
drosenstark / swiftWatchAndRun.sh
Created April 21, 2019 22:07
Watch and Swift file and run it on change
#!/bin/sh
# swiftWatchAndRun
if [ $# -ne 1 ]; then
echo "Use like this:"
echo " $0 filename-to-watch"
exit 1
fi
if which fswatch >/dev/null; then
echo "Watching swift file $1"
while true; do fswatch --one-event $1 >/dev/null && echo "----------------"; echo `date +"%m-%d-%y %I:%M%p"`; echo "----------------" && swift $1; sleep 0.1; done
@drosenstark
drosenstark / paste_from_shell.sh
Last active April 17, 2019 20:35
Paste the clipboard in to your shell for realz
#!/bin/bash
pbpaste > /tmp/shellpaste.sh
echo "Execute this?"
cat /tmp/shellpaste.sh
echo
read -p "Press enter to run it..."
bash /tmp/shellpaste.sh
@drosenstark
drosenstark / xctest-in-repl.swift
Created March 17, 2019 01:47
Run XCTest stuff using the Swift command line on macOS
/// Run with:
/// swift -F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks xctest-in-repl.swift
import Foundation
import XCTest
class ATest : XCTestCase {
func testIt() {
print("Oh yeah, it's on")
XCTAssertTrue(false, "That needed to be true!")
}
@drosenstark
drosenstark / WeakArray.swift
Created November 18, 2018 22:04
Hold protocolized objects weakly (with just a few, minor changes)
@objc public protocol Equalable: class {
@objc func isEqual(_ object: Any?) -> Bool
}
/// Store AnyObject subclasses weakly
/// * Note: if you wish to use a protocol, it must:
/// - be marked with `@objc`
/// - have all methods marked with `@objc`
/// - refine Equalable
public struct WeakArray<Element: Equalable> {
@drosenstark
drosenstark / mermaid-to-diagrams.rb
Last active May 21, 2018 11:51
Convert all Mermaid Markdown files (mermaid-*.md) to jpg with white background.
#!/usr/bin/env ruby
def convert_mermaid_md_to_jpg
Dir["mermaid-*.md"].each do |f|
slug = f["mermaid-".length...f.length-".md".length]
command = "~/node_modules/.bin/mmdc -i mermaid-#{slug}.md -o mermaid-#{slug}.png -b '#FFFFFF'"
puts "Converting mermaid-#{slug}.md to mermaid-#{slug}.png"
`#{command}`
end
end
@drosenstark
drosenstark / delete-all-ios-simulators.rb
Created April 17, 2018 21:12
Deletes all your iOS Simulators
#!/usr/bin/env ruby
`xcrun simctl shutdown all`
device_lines = `xcrun simctl list`.split("\n")
device_lines.each do |line|
line.strip!
matches = /[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}/.match(line)
if matches
`xcrun simctl delete #{matches}`
puts "Deleting sim with ID #{matches}"
end
@drosenstark
drosenstark / git-rbranch
Last active February 8, 2018 16:37
Creates a local branch and pushes it up
#!/bin/bash
git checkout -b $1 && git push --set-upstream origin $1