Skip to content

Instantly share code, notes, and snippets.

Chris Dzombak cdzombak

Block or report user

Report or block cdzombak

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View OptionalOr.swift
let nilString: String? = nil
let aString: String? = "a non-nil string"
print (nilString ?? "the string is nil")
print (aString ?? "the string is nil")
// if you don't want to use `??` …
// (inspired by Scala's Option's `getOrElse`)
extension Optional {
View OmniOutliner Selected Rows to OmniFocus.scpt
tell application id "OOut"
try
set doc_name to name of front document
on error
activate
display alert "No Document Open"
return
end try
@cdzombak
cdzombak / viewportfix.js
Created Sep 17, 2015
Reenable pinch-to-zoom on obnoxious sites that disable it, like The New Yorker. Convert to a bookmarklet and install via http://mrcoles.com/bookmarklet/ .
View viewportfix.js
var m=document.getElementsByTagName('meta');
for(var i=0; i<m.length; i++) {
if (m[i].name == 'viewport') {
if (m[i].content.indexOf('user-scalable=0') != -1 || m[i].content.indexOf('user-scalable=no') != -1) {
m[i].content = 'width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=4.0, user-scalable=1';
alert('Found & fixed.');
}
}
}
@cdzombak
cdzombak / CDZObjectWatcher.h
Created Jul 25, 2015
Watching Core Data objects for updates or deletions
View CDZObjectWatcher.h
//
// CDZObjectWatcher.h
//
// Created by Chris Dzombak.
// Copyright (c) 2015 Chris Dzombak. All rights reserved.
//
@import Foundation;
@import CoreData;
@cdzombak
cdzombak / keyboard-autolayout.m
Last active Aug 29, 2015
iOS Keyboard Avoiding with Auto Layout
View keyboard-autolayout.m
// in -loadView or similar…
self.completeButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:self.completeButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:v attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-1.0*IDPCompleteButtonBottomSpacing];
// in -viewWillAppear:…
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
- (void)keyboardWillShow:(NSNotification *)note {
[self updateBottomConstraintFromNotification:note];
}
@cdzombak
cdzombak / swift2errors.md
Last active Aug 29, 2015
an executive summary of my ever-forthcoming "error handling in swift 2" blog post. https://twitter.com/cdzombak/status/611704414810832896
View swift2errors.md
  • throws in Swift 2 is just another way to return from a function/method. Because of its propagation semantics, it's not really "exceptions", which is probably a good change.
  • But unlike an Either or Result return type, throws in Swift 2 cannot communicate type information.
  • This sucks; and we will realize it sucks when we keep having to refer to documentation every time we call a function that throws to see what sort of errors we may have to handle. This is part of the problem that types solve; they are documentation, with compiler-enforced guarantees.
  • Arguments based on the clunkiness of pattern-matching on a Result type vs. the new syntax are not valid. Had the Swift team chosen to introduce a blessed stdlib Result type, they could have introduced elegant syntax to handle it without requiring boilerplate; remember, everything related to throws is new syntax.
  • Yes, this would make versioning harder. Changing the types of errors you return changes the contract of an API, if you care abou
@cdzombak
cdzombak / Drop Action.scpt
Created Jun 3, 2015
OmniFocus AppleScript to move an action to my " Dropped" context and mark it completed.
View Drop Action.scpt
property droppedContext : "Dropped"
tell application "OmniFocus"
tell front document
try
set theDroppedContextID to id of item 1 of (complete droppedContext as context)
set theDroppedContext to first flattened context whose id is theDroppedContextID
on error
display alert "No context found whose name contains “" & droppedContext & ""
return
@cdzombak
cdzombak / NSArray.h
Last active Aug 29, 2015
NSArray thought experiment. This code may not compile and there may be subtle bugs/inconsistencies. But this serves to illustrate the possible solution outlined in https://www.dzombak.com/blog/2015/05/Cocoa-s-mutable-subclass-pattern-is-an-antipattern.html .
View NSArray.h
@protocol NSArray
+ (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject;
+ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt;
+ (instancetype)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
+ (instancetype)arrayWithArray:(NSArray *)array;
- (instancetype)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
- (instancetype)initWithArray:(NSArray *)array;
View block-verify.m
NYTCompletionBlock completion = ^(id result) {};
id completionMock = [OCMockObject partialMockForObject:completion];
[[[completionMock expect] copy] andReturn:completion];
id sut = [[NYTXXX alloc] initWithCompletion:completionMock];
#pragma unused (sut)
[completionMock verify];
View CDZWeak.h
//
// CDZWeak.h
// https://gist.github.com/cdzombak/844e887ed4bdb933a905
//
// Created by Chris Dzombak on 3/22/15.
// Copyright (c) 2015 Chris Dzombak. All rights reserved.
//
#ifndef CDZWeak_h
#define CDZWeak_h
You can’t perform that action at this time.