Skip to content

Instantly share code, notes, and snippets.

View keybase.md

Keybase proof

I hereby claim:

  • I am ole on github.
  • I am olebegemann (https://keybase.io/olebegemann) on keybase.
  • I have a public key whose fingerprint is 8110 7FC7 27F7 56F5 3693 BA7A 90C7 D328 64A1 CEDF

To claim this, I am signing this object:

@ole
ole / RSSReaderExample.swift
Last active Aug 29, 2015
Equatable protocols in Swift. A reply to Brent Simmons’s post "Secret Projects Diary #2: Swift 2.0 Protocols" (http://inessential.com/2015/07/19/secret_projects_diary_2_swift_2_0_prot).
View RSSReaderExample.swift
//: Playground - noun: a place where people can play
import Cocoa
protocol Feed : Equatable {
var url: String {get}
}
protocol Folder {
// This is new:
View NSArray+BinarySearch.h
//
// NSArray+BinarySearch.h
// BinarySearch
//
// Created by Ole Begemann on 19.04.10.
// Copyright 2010 Ole Begemann. All rights reserved.
//
#import <Foundation/Foundation.h>
@ole
ole / CDStructures.h
Created Oct 1, 2012
MailCompositionService.app class dump from the iOS 6.0 Simulator
View CDStructures.h
/*
* Generated by class-dump 3.3.4 (64 bit).
*
* class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2011 by Steve Nygard.
*/
#pragma mark Named Structures
struct CGPoint {
float _field1;
@ole
ole / FunctionalBankAccount.m
Created Feb 11, 2013
FunctionalBankAccount: a simple implementation of a blocks-based object model in (Objective-)C, inspired by a similar Scheme implementation in "Structure and Interpretation of Computer Programs". See http://oleb.net/blog/2013/02/building-blocks-based-object-system-in-objective-c/ for an explanation.
View FunctionalBankAccount.m
#import <Foundation/Foundation.h>
typedef id(^BankAccount)(char *cmd);
typedef id(^CurrentBalanceMethod)(void);
typedef id(^DepositMethod)(double);
typedef id(^WithdrawMethod)(double);
BankAccount CreateBankAccount(double initialBalance)
{
// Initialization
@ole
ole / osm_cycle_routes.xml
Created Apr 22, 2013
A query script for the Open Street Map API explorer at http://overpass-turbo.eu/ to render all the cycle routes in the current map bounding box.
View osm_cycle_routes.xml
<query type="relation" into="hr">
<has-kv k="route" v="bicycle"/>
<bbox-query {{bbox}}/>
</query>
<query type="way" into="hrp">
<recurse from="hr" type="relation-way"/>
<bbox-query {{bbox}}/>
</query>
<union>
<item set="hr"/>
@ole
ole / stack.swift
Created Sep 8, 2016
Compiler segmentation fault in Xcode 8 GM using ExpressibleByArrayLiteral
View stack.swift
// Save this to stack.swift, then run
//
// $ xcrun swift stack.swift
//
// Does it compile or does the compiler segfault?
struct Stack<Element> {
var elements: [Element] = []
}
@ole
ole / FontsPlayground.swift
Last active Oct 7, 2016
Fonts with monospaced (tabular) digits
View FontsPlayground.swift
// Adopted from: http://stackoverflow.com/a/19976535/116862 by http://stackoverflow.com/users/2547229/benjohn.
import PlaygroundSupport
import UIKit
let baseFont = UIFont.preferredFont(forTextStyle: .body)
let baseDescriptor = baseFont.fontDescriptor
let proportionalFeatures = [
[
@ole
ole / CharacterArray.swift
Last active Oct 24, 2016
Two options for converting character ranges into arrays
View CharacterArray.swift
// We can't use `Character` or `String` ranges directly because they aren't countable
// Create a countable range of ASCII values instead
let range = UInt8(ascii: "a")...UInt8(ascii: "z") // CountableClosedRange<UInt8>
// Convert ASCII codes into Character values
range.map { Character(UnicodeScalar($0)) } // Array<Character>
// → ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
@ole
ole / NextDate.swift
Last active Dec 12, 2016
Paste into a playground in Xcode 8.
View NextDate.swift
// macOS 10.12.1 or iOS 10, Swift 3.0.1
import Foundation
var calendar = Calendar(identifier: .gregorian)
// GMT+1 (GMT+2 under daylight saving)
calendar.timeZone = TimeZone(identifier: "Europe/Berlin")!
// 2016-10-30 02:30:00 +02:00
// Europe/Berlin switched from daylight saving to winter time on this date, i.e. on 2016-10-30 03:00:00 +02:00 the clock was moved back by one hour.