Skip to content

Instantly share code, notes, and snippets.

View mminer's full-sized avatar

Matthew Miner mminer

View GitHub Profile
@mminer
mminer / getMACAddress.swift
Created February 1, 2017 19:13
Finds the machine's MAC address.
import Foundation
import IOKit
func getMACAddress() -> String {
let matching = IOServiceMatching("IOEthernetInterface") as NSMutableDictionary
matching[kIOPropertyMatchKey] = ["IOPrimaryInterface": true]
var servicesIterator: io_iterator_t = 0
defer { IOObjectRelease(servicesIterator) }
guard IOServiceGetMatchingServices(kIOMasterPortDefault, matching, &servicesIterator) == KERN_SUCCESS else {
@mminer
mminer / Alamofire+Rx.swift
Created January 6, 2017 21:11
Example of Alamofire RxSwift response serialization extension.
import Alamofire
import RxSwift
extension Request: ReactiveCompatible {}
extension Reactive where Base: DataRequest {
func responseJSON() -> Observable<Any> {
return Observable.create { observer in
let request = self.base.responseJSON { response in
@mminer
mminer / DownloadProgressIndicatorDemo.swift
Last active November 3, 2023 08:44
Displays a progress indicator on a file in the Finder.
import Foundation
let progress = Progress(parent: nil, userInfo: [
.fileOperationKindKey: Progress.FileOperationKind.downloading,
.fileURLKey: URL(fileURLWithPath: "/Users/mminer/Downloads/somefile.zip"),
])
progress.isCancellable = true
progress.isPausable = false
progress.kind = .file
@mminer
mminer / ObservableType+IgnoreNilMap.swift
Created December 5, 2016 21:30
Custom RxSwift operator that maps and unwraps an optional value.
import RxSwift
extension ObservableType {
/// A map that unwraps an optional value, only continuing if the result is not nil.
func ignoreNilMap<R>(transform: @escaping (E) -> R?) -> Observable<R> {
return Observable.create { observer in
return self.subscribe { element in
switch element {
case .next(let value):
@mminer
mminer / SocketIO+Rx.swift
Created December 2, 2016 20:27
SocketIOClient extension to subscribe to events via RxSwift observable.
import RxSwift
import SocketIO
extension Reactive where Base: SocketIOClient {
public func on(_ event: String) -> Observable<[Any]> {
return Observable.create { observer in
let id = self.base.on(event) { items, _ in
observer.onNext(items)
}
@mminer
mminer / Date+Relative.swift
Last active October 12, 2016 17:32
Date extension to display the date in relative terms (e.g. "5 hours ago").
// Adapted from http://stackoverflow.com/a/1248
private let minuteInterval: TimeInterval = 60
private let hourInterval: TimeInterval = 60 * minuteInterval
private let dayInterval: TimeInterval = 24 * hourInterval
private let monthInterval: TimeInterval = 30 * dayInterval
extension Date {
var relative: String {
@mminer
mminer / SpriteKitPlaygroundStarter.swift
Last active September 29, 2016 04:27
Xcode playground starter code to experiment with SpriteKit.
import PlaygroundSupport
import SpriteKit
// Set up scene:
let size = CGSize(width: 480, height: 320)
let scene = SKScene(size: size)
scene.physicsBody = SKPhysicsBody(edgeLoopFrom: scene.frame)
scene.physicsWorld.gravity = CGVector.zero // Enabled later
@mminer
mminer / parentPath.swift
Created September 16, 2016 18:10
Function that walks up directory tree to find given path's parent directory.
func parent(ofPath path: String, levels: Int) -> String {
var parentPath = path
for _ in 1...levels {
parentPath = (parentPath as NSString).deletingLastPathComponent
}
return parentPath
}
@mminer
mminer / withHotkeys.js
Created September 9, 2016 18:21
Higher order component for React + Recompose allowing components to accept global hotkeys.
// Usage:
//
// const backspace = 8;
//
// export default withHotkeys({
// [backspace]: props => evt => {
// ...
// },
// })(YourComponent);
@mminer
mminer / switch.scss
Created August 23, 2016 03:15
An iOS-style toggle switch.
/*
<label className="switch">
<input type="checkbox" />
<div className="checkbox"></div>
</label>
*/
.switch {
$active-color: #27c940;
$switch-height: 24px;