Skip to content

Instantly share code, notes, and snippets.

View soffes's full-sized avatar

Sam Soffes soffes

View GitHub Profile
@soffes
soffes / Imgix.swift
Last active May 13, 2016 00:23
Simple Imgix client in Swift
import Foundation
// From https://github.com/soffes/Crypto
import Crypto
struct Imgix {
// MARK: - Properties
let host: String
import CoreGraphics
extension CGRect {
var floor: CGRect {
return CGRect(
x: CoreGraphics.floor(origin.x),
y: CoreGraphics.floor(origin.y),
width: CoreGraphics.floor(size.width),
height: CoreGraphics.floor(size.height)
)
import UIKit
extension UIFont {
func withMonospacedNumbers() -> Self {
let fontDescriptor = UIFontDescriptor(name: fontName, size: pointSize).addingAttributes([
.featureSettings: [
[
UIFontDescriptor.FeatureKey.featureIdentifier: kNumberSpacingType,
UIFontDescriptor.FeatureKey.typeIdentifier: kMonospacedNumbersSelector
]
import UIKit
extension UIEdgeInsets {
init(_ value: CGFloat) {
top = value
left = value
right = value
bottom = value
}
@soffes
soffes / NSDate+Soffes.swift
Created April 18, 2016 22:00
Naïve time ago in words
import Foundation
extension NSDate {
var briefTimeAgoInWords: String {
let components = NSCalendar.currentCalendar().components([.Second, .Minute, .Hour, .Day, .Year], fromDate: self, toDate: NSDate(), options: [])
if components.year > 0 {
return "\(components.year)y"
}
@soffes
soffes / NSCache+Soffes.swift
Last active February 19, 2017 03:04
Access NSCache with a subscript
import Foundation
extension NSCache {
subscript(key: AnyObject) -> AnyObject? {
get {
return objectForKey(key)
}
set(object) {
if let object = object {
// What is the widest prime less than 4,000 when written as a Roman numeral in Times New Roman?
// — https://twitter.com/wacnt/status/695034110037757952
import UIKit
let primes: [UInt] = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021,
import Foundation
let queryItems = [
NSURLQueryItem(name: "username", value: "so&ffes"),
NSURLQueryItem(name: "password", value: "123456")
]
func formEncode(queryItems: [NSURLQueryItem]) -> String {
let characterSet = NSMutableCharacterSet.alphanumericCharacterSet()
characterSet.addCharactersInString("-._~")
@soffes
soffes / SpaceView-iOS.swift
Last active June 29, 2017 19:11
Handy utility view when working with UIStackView
import UIKit
/// Space view intented to be used with auto layout.
/// Similar to UIStackView, setting a background color is not supported.
final class SpaceView: UIView {
// MARK: - Properties
private let contentSize: CGSize
@soffes
soffes / convert.rb
Created August 7, 2015 23:17
Convert old DVR cassettes to the new format
require 'json'
require 'base64'
unless input = ARGV.first
puts 'Run with `ruby convert.rb path_to_your_cassette.json`' and return
end
def process(r)
return unless r && (body = r['body']) && (content_type = r['headers']['Content-Type'])
if content_type.start_with?('text/')