Skip to content

Instantly share code, notes, and snippets.

@Revolucent
Revolucent / Most.swift
Last active August 29, 2015 14:07
Minimum/maximum implementations for SequenceType and Arrays in Swift
/*
Replace the name of my Swift module, Prosumma, with your own, or this will not compile.
As of 1.0, Swift lacks mixins (as in Ruby) or the ability to extend protocols (as in C#), which means lots of
cumbersome boilerplate. I've tried to cut down on that with this little snippet. First, you'll notice that
there are no actual minimum and maximum functions defined. To achieve that, do the following:
var lowest: Int? = [5, 4, 3].most(<)
var highest: Int? = [5, 4, 3].most(>)
@Revolucent
Revolucent / Unique.swift
Created October 9, 2014 15:38
Unique Extension Method For Swift SequenceTypes
/*
The reason this does not return a value is that SequenceType
is very general. It has no methods for modifying the sequence,
only traversing it.
Instead, we pass our "unique" method a closure that tells it
how to add a value to our result. The result is not visible
at all to this method. It is captured by our closure.
The reason we don't pass the result as a parameter is because it
@Revolucent
Revolucent / git-only
Last active August 29, 2015 14:21
git-only
#!/bin/bash
# Git Only: Perform a Git operation only when in a whitelisted directory.
#
# This is really only useful when combined with git-gat. For instance, let's
# say we want to create a branch in two of our side-by-side repos, we can say:
#
# git gat only Repo1 Repo2 -- checkout -b feature1
#
# This will create and checkout a branch called feature1, but only in Repo1 and Repo2.
#########################
# .gitignore file for Xcode4 / OS X Source projects
#
# Version 2.0
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
#
# 2013 updates:
# - fixed the broken "save personal Schemes"
#
# NB: if you are storing "built" products, this WILL NOT WORK,
@Revolucent
Revolucent / copyright
Last active April 10, 2016 03:59
Insert copyright headers
@Revolucent
Revolucent / UIColorExtensions.swift
Last active July 18, 2017 02:45
Convert a six-digit hex literal into a color
extension UIColor {
convenience init(hex: UInt, alpha: CGFloat = 1.0) {
let red = CGFloat((hex & 0xFF0000) >> 0x10) / 255.0
let green = CGFloat((hex & 0x00FF00) >> 0x8) / 255.0
let blue = CGFloat(hex & 0x0000FF) / 255.0
self.init(red: red, green: green, blue: blue, alpha: alpha)
}
}
@Revolucent
Revolucent / xcode
Created August 13, 2017 06:51
Launch project in current directory with selected Xcode
#!/bin/bash
XCODE='Xcode';
XCODEPATH="$(xcode-select -p)";
if [[ $XCODEPATH =~ /([^/]+)\.app ]]; then
XCODE="${BASH_REMATCH[1]}"
fi;
open -a "$XCODE" "${1:-.}";
@Revolucent
Revolucent / Median.pgsql
Created December 2, 2017 15:57
Calculate a median
-- https://wiki.postgresql.org/wiki/Aggregate_Median
CREATE OR REPLACE FUNCTION _final_median(NUMERIC[])
RETURNS NUMERIC AS
$$
SELECT AVG(val)
FROM (
SELECT val
FROM unnest($1) val
ORDER BY 1
LIMIT 2 - MOD(array_upper($1, 1), 2)
@Revolucent
Revolucent / Semicircle.swift
Created May 20, 2018 18:11
Draw Semircle Between Any Two Arbirtary CGPoints
extension CGContext {
// via https://stackoverflow.com/a/50419334/27779
func drawSemicircle(from: CGPoint, to: CGPoint, clockwise: Bool) {
let center = CGPoint(x: 0.5 * (from.x + to.x), y: 0.5 * (from.y + to.y))
let radius = 0.5 * hypot(to.x - from.x, to.y - from.y)
let startAngle = atan2(to.y - from.y, to.x - from.x)
let endAngle = startAngle + .pi
move(to: from)
addArc(center: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: clockwise)
@Revolucent
Revolucent / ThrowIfNil.swift
Created July 7, 2018 01:32
Throw if nil, otherwise return value
infix operator ??!: NilCoalescingPrecedence
/**
If the left-hand side in nil, the error on the right-hand side is thrown. Otherwise,
the unwrapped value is returned. For example:
```
// Instead of this…
guard let x = y else {