Skip to content

Instantly share code, notes, and snippets.

@ben-ng
ben-ng / try-1.txt
Last active December 5, 2016 01:10
Swift build failure logs
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
100 packages can be updated.
47 updates are security updates.
@ben-ng
ben-ng / mergesort.swift
Created December 1, 2016 07:00
Benchmarking improvements to the ArrayElementValuePropagation pass
import Cocoa
func mergeSort(_ array: [Int]) -> [Int] {
guard array.count > 1 else { return array }
let middleIndex = array.count / 2
let leftArray = mergeSort(Array(array[0..<middleIndex]))
let rightArray = mergeSort(Array(array[middleIndex..<array.count]))
return merge(leftPile: leftArray, rightPile: rightArray)
}
@ben-ng
ben-ng / roman.py
Created September 21, 2016 15:51
Sample solution for converting roman numerals to integers
def convert(char):
return {
'M': 1000,
'D': 500,
'C': 100,
'L': 50,
'X': 10,
'V': 5,
'I': 1
}.get(char)
@ben-ng
ben-ng / 1-README.md
Last active March 31, 2016 19:26
Test Spec

Tasks

Before you start

Depending on your assigned system, read the README-ORACLE.md or README-POSTGRES.md file.

You might need to configure user accounts and permissions to accomplish these tasks.

Tasks

@ben-ng
ben-ng / keybase.md
Created March 21, 2016 16:28
Keybase

Keybase proof

I hereby claim:

  • I am ben-ng on github.
  • I am benng (https://keybase.io/benng) on keybase.
  • I have a public key ASDpep_MuCxliK8Ty1NbkbFqxaqIh4dbgrd1NNpMoUV3tQo

To claim this, I am signing this object:

@ben-ng
ben-ng / server.js
Created June 4, 2015 15:18
A simple, slow server for testing deis' zero downtime deploys
setTimeout(function () {
require('http').createServer(function (req, res) {
res.end('yo!')
}).listen(process.env.PORT)
}, 45000)
@ben-ng
ben-ng / gist:297cc283f04638005048
Last active August 29, 2015 14:19
setTimeout without setTimeout
/**
* Just call __PBSJC_drain at the end of your code
*/
var __PBSJC_funcHandles = []
, __PBSJC_funcHandleCount = 0
, __PBSJC_drain = function __PBSJC_drain () {
var extracted, i, ii, cur
while (__PBSJC_funcHandles.length) {
extracted = __PBSJC_funcHandles
@ben-ng
ben-ng / Readme.md
Created November 15, 2014 01:56
How should I do this?

If you're interested in my OTA update system for iOS PhoneGap apps, let me know how you think I should release it, and why:

(Sorted in order from "it just works" to "most flexible, but requires deeper knowledge of iOS apps")

  • A CLI tool that patches an app (you would run this on platforms/ios)
  • A complete PhoneGap iOS application (you would clone this repo and edit it to your tastes)
  • The update logic only, as a library (I'd provide example replacements for MainViewController.m, AppDelegate.m)
  • Other (I'm not a huge fan of any of these, so I'm open to suggestions)
@ben-ng
ben-ng / fixPrefixes.m
Created November 14, 2014 20:10
Use UIWebView's `loadHTMLString:baseURL:` and set the baseURL to where your assets are in the app bundle. Then replace all absolute paths in your html/js/css with relative ones using something like the script below. The relative URLs will be loaded relative to the baseURL, whereas absolute ones are loaded relative to the root of the filesystem, …
// This doodad converts absolute paths like "/assets/thing.jpg" into relative ones like "assets/thing.jpg"
NSString * (^fixPrefix)(NSString *, NSString *) = ^NSString *(NSString * input, NSString *prefix) {
NSString *needle = [[@"/" stringByAppendingString:prefix] stringByAppendingString:@"/"];
NSString *replacement = [prefix stringByAppendingString:@"/"];
input = [input stringByReplacingOccurrencesOfString:[@"'" stringByAppendingString:needle] withString:[@"'" stringByAppendingString:replacement]];
input = [input stringByReplacingOccurrencesOfString:[@"\"" stringByAppendingString:needle] withString:[@"\"" stringByAppendingString:replacement]];
input = [input stringByReplacingOccurrencesOfString:[@"(" stringByAppendingString:needle] withString:[@"(" stringByAppendingString:replacement]];
return input;