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 Controller.swift
protocol ThingDelegate: class {
var fooString: String { get }
func foo()
}
class Controller: ThingDelegate {
let fooString: String
func foo() {
print("foo")
}
View keybase.md

Keybase proof

I hereby claim:

  • I am cdzombak on github.
  • I am dzombak (https://keybase.io/dzombak) on keybase.
  • I have a public key whose fingerprint is A2D3 B712 8258 EAF7 72B6 EB00 394E 28F2 E5BF E8EF

To claim this, I am signing this object:

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;
You can’t perform that action at this time.