Skip to content

Instantly share code, notes, and snippets.

View fpillet's full-sized avatar

Florent Pillet fpillet

View GitHub Profile
fpillet / MeasurePerf.swift
Last active June 26, 2019 12:51
A tool to measure code performance in Swift
// Created by Florent Pillet on 14/11/16.
// Copyright (c) 2016 Florent Pillet. All rights reserved.
import Foundation
* A utility struct that helps mesure the performance of sections of code. Only uses Foundation
* (we could also use QuartzCore's CACurrentMediaTime() for similar precision)
fpillet / Results+Rx.swift
Created February 13, 2016 17:23
turn Realm auto-updating Results into an RxSwift Observable sequence
// Results+Rx.swift
// Make Realm auto-updating Results observable. Works with Realm 0.98 and later, RxSwift 2.1.0 and later.
// Created by Florent Pillet on 12/02/16.
// Copyright (c) 2016 Florent Pillet. All rights reserved.
import Foundation
fpillet / MainViewController.m
Created October 29, 2015 19:19
Example of encapsulating a gesture recognizer's behavior within a signal's callbacks
- (void)setupDraggableHeaderGestureRecognizer {
// setup a gesture recognizer so we can drag the "I need some daytime hours" header up and down
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] init];
_draggableHeaderView.userInteractionEnabled = YES;
[_draggableHeaderView addGestureRecognizer:recognizer];
RACDisposable *disposable = [[[recognizer
scanWithStart:RACTuplePack(@(_mapViewHeightConstraint.constant), @0)
fpillet / RACSignal+FPOperations.h
Last active August 29, 2015 14:15
Two RACSignal operations I use that are not in the main ReactiveCocoa distribution
// Created by Florent Pillet on 30/01/15.
#import <Foundation/Foundation.h>
@interface RACSignal (FPOperations)
/// Delivers the receiver's latest `next`s with a minimum of `interval`
/// seconds between two values. Of `next` values produced by the receiver
dispatch_once_t once;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
dispatch_once(&once, ^{
dispatch_async(dispatch_get_main_queue(), ^{
once = 0;
dispatch_once(&once, ^{
fpillet / ViewModelServices.m
Created October 22, 2014 16:35
Chaining VCs from ViewModels
- (void)pushViewModel:(BaseViewModel *)nextViewModel
NSString *from = [self standardNameFromViewModel:_currentViewController.viewModel];
NSString *to = [self standardNameFromViewModel:nextViewModel];
// We are going to try and find a segue to go to the next viewModel. The way segues are named
// in our storyboard should be: FromModel::ToModel
// 1. try Segue method. For example, a segue going from WelcomeViewController to LoginViewController would be named "Welcome::Login"
// 2. If a segue is not found, try to instantiate the view controller and push it directly. We look up the view controller by its stripped model name (i.e. "WelcomeViewModel" -> "Welcome")
// 3. If the view controller is not found in the storyboard, try a XIB with the stripped model name.
fpillet / PageFlipMonitor.js
Created May 7, 2013 13:46
Experimental Page Flip Monitor module for CommandFusion iViewer
/* PageFlipMonitor v1.0
* Copyright 2013 CommandFusion, public domain
* Utility object that monitors entering and exiting pages,
* and can call any number of callbacks specifically registered to observe
* when entering or exiting a page
* You callback functions should be of the form:
function callback(fromPage, toPage) {
fpillet / gist:1779575
Created February 9, 2012 12:12
Detect whether the Android Soft Keyboard is up
containerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
public void onGlobalLayout()
final Activity app = getActivity();
if (app == null)
Rect r = new Rect();
boolean visible = (Math.abs(r.height() - containerView.getHeight()) > 128);
fpillet / RequestQueue.js
Created January 24, 2012 18:42
Cancellable processing of iViewer CF.request calls
/* Use RequestQueue.request() instead of CF.request()
* At any point, to cancel all pending callbacks, call RequestQueue.clear()
var RequestQueue = (function(){
var self = {
q: [],
next: 0
fpillet / OrderedRequestQueue.js
Created January 24, 2012 18:19
Ordered processing of CF.request() results for CommandFusion iViewer
/* OrderedRequestQueue.js
* Push CF.request calls using this object instead of directly using CF.request, and
* you'll be guaranteed to receive results in the order you pushed them. Note that this
* implies that the queue will BLOCK until each result is received in sequence, which may
* cause large delays if one site in the list is long to respond.
* Use at your own risk
var OrderedRequestQueue = (function(){