Skip to content

Instantly share code, notes, and snippets.

View drodriguez's full-sized avatar

Daniel Rodríguez Troitiño drodriguez

View GitHub Profile
@drodriguez
drodriguez / bracket.m
Created September 6, 2012 22:31
Bracket placement
[myObject myMethod:^(id obj)
{
return [obj intValue];
}];
MyFunction(myObject, ^(id obj)
{
return [obj intValue];
});
$ file /Volumes/Release/LRResty.framework/LRResty
/Volumes/Release/LRResty.framework/LRResty: Mach-O universal binary with 3 architectures
/Volumes/Release/LRResty.framework/LRResty (for architecture i386): current ar archive random library
/Volumes/Release/LRResty.framework/LRResty (for architecture armv6): current ar archive random library
/Volumes/Release/LRResty.framework/LRResty (for architecture armv7): current ar archive random library
@drodriguez
drodriguez / enums.m
Created December 9, 2012 22:48
Creating enums and its companion NSStringFrom... function.
#import <Foundation/Foundation.h>
#define DRT_NARGS(...) DRT_NARGS_(__VA_ARGS__, 63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define DRT_NARGS_(...) DRT_ARGS_N(__VA_ARGS__)
#define DRT_ARGS_N(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,_21,_22,_23,_24,_25,_26,_27,_28,_29,_30, _31,_32,_33,_34,_35,_36,_37,_38,_39,_40,_41,_42,_43,_44,_45,_46,_47,_48,_49,_50,_51,_52,_53,_54,_55,_56,_57,_58,_59,_60,_61,_62,_63,N,...) N
#define DRT_CONCAT(a, ...) a ## __VA_ARGS__
#define DRT_IIF(c) DRT_CONCAT(DRT_IIF_, c)
#define DRT_IIF_0(t, ...) __VA_ARGS__
#import "Foundation.h"
@interface NSDate (Rapture)
+ (instancetype)endOfDays;
@end
// clang -Wall -fobjc-arc -framework Foundation -o test-y test-y.m
// Based on http://igstan.ro/posts/2010-12-01-deriving-the-y-combinator-in-7-easy-steps.html
#import <Foundation/Foundation.h>
int main(int argc, char **argv)
{
// Version 1
// Simple factorial recursive version, __block needed to capture fact inside
@drodriguez
drodriguez / path_components.rb
Created March 26, 2013 20:42
How to get some path components using only Ruby stdlib.
require 'pathname'
Pathname.new(`pwd`.strip).enum_for(:descend).map { |x| x.basename.to_path }
@drodriguez
drodriguez / gist:6160864
Created August 6, 2013 00:17
Auto Layout equal spacing with a little math
NSMutableArray *horizontalConstraints = [NSMutableArray array];
// Fixed width, same width for all buttons (33)
[horizontalConstraints addObject:[NSLayoutConstraint constraintWithItem:left attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.f constant:33.f]];
[horizontalConstraints addObject:[NSLayoutConstraint constraintWithItem:left attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:center1 attribute:NSLayoutAttributeWidth multiplier:1.f constant:0]];
[horizontalConstraints addObject:[NSLayoutConstraint constraintWithItem:left attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:center2 attribute:NSLayoutAttributeWidth multiplier:1.f constant:0]];
[horizontalConstraints addObject:[NSLayoutConstraint constraintWithItem:left attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:right attribute:NSLayoutAttributeWidth multiplier:1.f constant:0]];
// Align baselines
[horizonta
import Foundation
enum Either<A, B> {
case Left(@auto_closure () -> A)
case Right(@auto_closure () -> B)
func fold<X>(fa: A -> X, fb: B -> X) -> X {
switch self {
case let .Left(a): return fa(a())
case let .Right(b): return fb(b())
@drodriguez
drodriguez / boolean_properties.swift
Created June 22, 2014 23:50
Abusing optional syntax for better boolean properties
class MyClass {
var enabled: Bool? {
didSet {
if let v = enabled? {
self.enabled = v ? true : nil
}
}
}
init(enabled: Bool) {
@drodriguez
drodriguez / ycombinator.swift
Created June 23, 2014 22:43
Y combinator in Swift
// You can have a recursive function
func fact(n: Int) -> Int {
if n < 2 { return 1 }
return n * fact(n - 1)
}
// But you cannot have a recursive closure
// let fact2: Int -> Int = { n in
// if n < 2 { return 1 }
// return n * fact2(n - 1) // ERROR: Variable used within its own initial value