Skip to content

Instantly share code, notes, and snippets.

View blixt's full-sized avatar
🗺️
Exploring

Blixt blixt

🗺️
Exploring
View GitHub Profile
@blixt
blixt / Segfault.swift
Last active February 2, 2016 23:32
Swift segfaulting
struct Participant {
let identifiers: [(label: String?, value: String)]
}
// This segfaults. Combining the two maps or changing "" to nil works.
let participants = ["a", "b", "c"]
.map { ("", $0) }
.map { Participant(identifiers: [$0]) }
// Update: Here's an error from a later build of Swift which explains the error.
@blixt
blixt / flatMap.swift
Last active December 16, 2015 21:26
Using flatMap to convert a list of mixed nils and values into a list of non-optional values
let numbers = [
"one",
"2",
"0x3",
"42",
]
// This will run the function on all values and only keep the ones that are not nil:
let parsedNumbers = numbers.flatMap { Int($0, radix: 10) }
// [2, 42]
@blixt
blixt / xml.swift
Last active May 19, 2018 10:42
Using indirect enums to create a simplified XML generator in just a few lines of code
indirect enum Node {
case tag(String, [Node])
case text(String)
}
extension Node: CustomStringConvertible {
var description: String {
switch self {
case let .tag(name, children):
if children.count == 1, case let .some(.text(text)) = children.first {
@blixt
blixt / NSURL_Extensions.swift
Created December 1, 2015 17:56
Parse query string from NSURL
// Example:
let url = NSURL(string: "https://example.com/hello?bla=one&bla=two&foo&bar=1")!
let values = url.parseQueryString()
// Result: ["bla": ["one", "two"], "bar": ["1"], "foo": []]
extension NSURL {
func parseQueryString() -> [String: [String]]? {
guard let items = NSURLComponents(URL: self, resolvingAgainstBaseURL: false)?.queryItems else {
return nil
}
@blixt
blixt / point_distance.py
Created December 1, 2015 17:03
Distance between lat/lon geo point
def point_distance(a, b):
degrees_to_radians = math.pi / 180
phi_a = (90 - a.lat) * degrees_to_radians
phi_b = (90 - b.lat) * degrees_to_radians
theta_a = a.lon * degrees_to_radians
theta_b = b.lon * degrees_to_radians
cos = (math.sin(phi_a) * math.sin(phi_b) * math.cos(theta_a - theta_b) +
math.cos(phi_a) * math.cos(phi_b))
arc = math.acos(cos)
return arc
extension OrderedDictionary: DictionaryLiteralConvertible {
init(dictionaryLiteral elements: (Key, Value)...) {
for (key, value) in elements {
self[key] = value
}
}
}
@blixt
blixt / NSDataExtension.swift
Created November 14, 2015 23:38
NSData hex extension
extension NSData {
var hex: String {
let pointer = UnsafePointer<UInt8>(self.bytes)
var hex = ""
for i in 0..<self.length {
hex += String(format: "%02x", pointer[i])
}
return hex
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
guard #available(iOS 9.0, *) else {
return
}
// MAX FORCE!
guard let maxForce = touches.maxElement({ $0.force < $1.force })?.force where maxForce > 3 else {
return
}
// Forceful touching is going on.
}
@blixt
blixt / HexToUIColor.swift
Last active July 28, 2021 05:19
A Swift String extension that converts a hexadecimal color to a UIColor.
import UIKit
extension String {
var hexColor: UIColor? {
let hex = self.stringByTrimmingCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet)
var int = UInt32()
guard NSScanner(string: hex).scanHexInt(&int) else {
return nil
}
let a, r, g, b: UInt32
@blixt
blixt / formatting.js
Created September 27, 2015 15:36
Formatting templating strings in ES6
function format(strings, ...values) {
const pieces = [];
for (let [index, string] of strings.entries()) {
let value = values[index];
const formatIndex = string.lastIndexOf('$');
if (formatIndex != -1) {
const format = string.substr(formatIndex + 1);
string = string.substr(0, formatIndex);
// TODO: Use an actual format engine here.