Skip to content

Instantly share code, notes, and snippets.

View plantpurecode's full-sized avatar
🎯

Jacob Relkin plantpurecode

🎯
View GitHub Profile
Prelude> :t fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap
fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap fmap
:: (Functor
((->)
(((f (a -> b) -> f (f2 a -> f2 b))
-> f (a -> b)
-> f (f1 (f2 a) -> f1 (f2 b)))
-> (((a -> b) -> f2 a -> f2 b) -> f (a -> b) -> f (f2 a -> f2 b))
-> ((a -> b) -> f2 a -> f2 b)
-> f (a -> b)
@palexander
palexander / gist:1375271
Created November 18, 2011 01:35
Remove a password from Git's history
# Sync with the remote master
git pull
# Force your clone to look like HEAD
git reset --hard
# AGAIN, A WARNING: This can really break stuff!
# Run your filter branch command, replacing all instances of "password" with "your_password"
# The example looks for Ruby files ("*.rb"), you can change this to match your needs
@chriseidhof
chriseidhof / nsincrementalstore.markdown
Created February 18, 2012 16:39
Accessing an API using CoreData's NSIncrementalStore

Accessing an API using CoreData's NSIncrementalStore

Note: the original location of this article is on my blog, however, it is posted here too for better readability.

In this article, we will see how to use Core Data for accessing your API. We will use the Bandcamp API as our running example. I've only been experimenting with this code for a few days, so there might be mistakes in there.

@jboner
jboner / latency.txt
Last active April 27, 2025 10:07
Latency Numbers Every Programmer Should Know
Latency Comparison Numbers (~2012)
----------------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 25 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 3,000 ns 3 us
Send 1K bytes over 1 Gbps network 10,000 ns 10 us
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
@echoz
echoz / gist:2842256
Created May 31, 2012 09:35
simple thread safe token generator
// _requests is a dictionary that can be mutated on any thread
// __tokenLBCURLRequestMap is just a dictionary to check if the token already is being "processed"
-(NSString *)readyToken {
if ([_requests count] == 0)
return nil;
NSMutableArray *tokens = [[[_requests allKeys] mutableCopy] autorelease];
NSString *token = nil;
@paulirish
paulirish / gist:3098860
Created July 12, 2012 15:26
Open Conference Expectations

Open Conference Expectations

This document lays out some baseline expectations between conference speakers and conference presenters. The general goal is to maximize the value the conference provides to its attendees and community and to let speakers know what they might reasonably expect from a conference.

We believe that all speakers should reasonably expect these things, not just speakers who are known to draw large crowds, because no one is a rockstar but more people should have the chance to be one. We believe that conferences are better -- and, dare we say, more diverse -- when the people speaking are not just the people who can afford to get themselves there, either because their company paid or they foot the bill themselves. Basically, this isn't a rock show rider, it's some ideas that should help get the voices of lesser known folks heard.

These expectations should serve as a starting point for discussion between speaker and organizer. They are not a list of demands; they are a list of rea

@hollance
hollance / Explanation.md
Last active September 25, 2017 03:35
Communicate between objects using channels

Communicate between objects using channels

When you have two objects A and B, say two view controllers, that you want to have talk to each other, you can choose from the following options:

  • NSNotificationCenter. This is anonymous one-to-many communication. Object A posts a notification to the NSNotificationCenter, which then distributes it to any other objects listening for that notification, including Object B. A and B do not have to know anything about each other, so this is a very loose coupling. Maybe a little too loose...

  • KVO (Key-Value Observing). One object observes the properties of another. This is a very tight coupling, because Object B is now peeking directly into Object A. The advantage of KVO is that Object A doesn't have to be aware of this at all, and therefore does not need to send out any notifications -- the KVO mechanism takes care of this behind the scenes.

  • Direct pointers. Object A has a pointer to Object B and directly sends it messages when something of interest h

@bjhomer
bjhomer / CoreDataAsynchrononus.m
Created October 5, 2012 20:25
Core data asynchronous fetching API proposal
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface CDAsynchronousArray : NSArray
// Provides access to the full count of objects. May be slow, e.g. if the underlying data store
// is only providing paginated access to objects. May not even be available, as in a search
// engine result set.
- (void)accessCountWithHandler:(void (^)(NSUInteger count, NSError *))countHandler;
@jwilling
jwilling / JNWThrottledBlock.h
Last active October 26, 2020 17:02
Simple throttling of blocks using dispatch sources.
#import <Foundation/Foundation.h>
@interface JNWThrottledBlock : NSObject
// Runs the block after the buffer time _only_ if another call with the same identifier is not received
// within the buffer time. If a new call is received within that time period the buffer will be reset.
// The block will be run on the main queue.
//
// Identifier and block must not be nil.
+ (void)runBlock:(void (^)())block withIdentifier:(NSString *)identifier throttle:(CFTimeInterval)bufferTime;
@davedelong
davedelong / gist:7371853
Last active May 16, 2020 02:51
Delegate proxying (`protocol_methodForEach()` is a custom function that does just what its name implies)
@interface DDDelegateProxy : NSProxy
+ (id)proxyForDelegate:(id)delegate conformingToProtocol:(Protocol *)protocol;
@property (weak, readonly) id delegate;
@property (strong, readonly) Protocol *protocol;
/*!
* Set a default return value for a method on the delegate's protocol.
* \param value This must be a block that returns the default value. Bad Things will happen if it's not.