Skip to content

Instantly share code, notes, and snippets.

View indragiek's full-sized avatar

Indragie Karunaratne indragiek

View GitHub Profile
// Create an RBTCentralManager
self.manager = [[RBTCentralManager alloc] init];
// Scan and connect to all the peripherals
RACDisposable *disposable = [[[[[self.manager.stateSignal
takeUntilBlock:^BOOL(NSNumber *state) {
return (state.integerValue == CBCentralManagerStatePoweredOn);
}] then:^RACSignal *{
return [self.manager scanForPeripheralsWithServices:nil options:nil];
}] reduceEach:^(CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) {
@indragiek
indragiek / gist:383c4cd74c86098506b1
Created February 20, 2014 21:44
List of XEP's supported by Flamingo (http://flamingo.im)
XEP-0115 (Capabilities)
XEP-0054 (vCard)
XEP-0153 (Avatars)
XEP-0092 (Software Version)
XEP-0085 (Chat State)
XEP-0199 (Ping)
XEP-0203 (Delay)
XEP-0095 (Stream Initiation)
XEP-0096 (SI File Transfer)
XEP-0065 (SOCKS5 Bytestreams)
@indragiek
indragiek / gist:7093584
Created October 22, 2013 01:04
Core Data interface
typedef void (^FGOConfigurationBlock)(id);
@interface FGOManagedObjectContextStack : NSObject
- (id)initWithModelName:(NSString *)modelName;
- (RACSignal *)save;
#pragma mark - Fetching
- (RACSignal *)fetchImmediatelyWithRequest:(NSFetchRequest *)request;
@indragiek
indragiek / gist:7093508
Created October 22, 2013 00:53
Puzzling Core Data crasher
- (id)insertObjectOfEntityName:(NSString *)entityName configure:(void(^)(id))block
{
NSAssert([NSThread isMainThread], @"Wrong thread bro");
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self.mainQueueContext];
if (block) block(object);
NSError *error = nil;
if (![self.mainQueueContext save:&error]) {
NSLog(@"Error saving MOC: %@", error);
}
return object;
@indragiek
indragiek / gist:5992951
Last active December 19, 2015 17:39
Compile date as NSDate
+ (NSDate *)compileDate
{
BOOL (^stringContainsQuestionMark)(NSString *) = ^BOOL (NSString *string) {
return [string rangeOfString:@"?"].location != NSNotFound;
};
NSMutableString *dateString = @(__DATE__).mutableCopy;
NSString *timeString = @(__TIME__);
if (stringContainsQuestionMark(dateString) || stringContainsQuestionMark(timeString)) {
return nil;
@indragiek
indragiek / gist:5897899
Last active December 19, 2015 04:29
Recursive Core Data saves with RAC. Works with nested contexts!
@implementation NSManagedObjectContext (INAdditions)
- (RACSignal *)in_saveChanges
{
return [[RACSignal startEagerlyWithScheduler:RACScheduler.scheduler block:^(id<RACSubscriber> subscriber) {
__block void (^recursiveBlock)(NSManagedObjectContext *);
recursiveBlock = [^(NSManagedObjectContext *context) {
[context performBlock:^{
NSError *error = nil;
[context save:&error];
@indragiek
indragiek / gist:5372841
Created April 12, 2013 15:23
Sanitizing URL strings
NSString *sanitizedString = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *URL = [NSURL URLWithString:sanitizedString];
@indragiek
indragiek / gist:5297435
Last active March 5, 2023 21:55
Draft of a ReactiveCocoa based interface for CoreData
//
// FGOManagedObjectContextStack.h
//
// Created by Indragie Karunaratne on 2012-12-23.
//
#import <Foundation/Foundation.h>
typedef void (^FGOConfigurationBlock)(id);
@indragiek
indragiek / gist:5200264
Created March 19, 2013 21:23
Easy Core Data fetching/inserting
- (void)fetchWithRequest:(NSFetchRequest *)request
completion:(void(^)(NSArray *results, NSError *error))handler
{
[request setResultType:NSManagedObjectIDResultType];
void (^executeHandler)(NSArray *, NSError *) = ^(NSArray *results, NSError *error){
dispatch_async(dispatch_get_main_queue(), ^{
if (handler) handler(results, error);
});
};
[self.backgroundContext performBlock:^{
@indragiek
indragiek / gist:4659386
Last active December 11, 2015 20:59
Fix for NSSplitView's non integral drawing/frame calculations
// In an NSSplitView subclass
- (void)drawDividerInRect:(NSRect)rect
{
[super drawDividerInRect:NSIntegralRect(rect)];
}
// In NSSplitViewDelegate implementation
- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex