Skip to content

Instantly share code, notes, and snippets.

@endavid
endavid / equatable.swift
Created Feb 26, 2020
#swift equatable example for #medium
View equatable.swift
class Cheese: Equatable {
static func == (lhs: Cheese, rhs: Cheese) -> Bool {
return lhs.rating == rhs.rating
}
let rating : Int
init(rating: Int) {
self.rating = rating
}
}
/// ...
@endavid
endavid / equality-function.swift
Created Feb 26, 2020
#swift equality functions for #medium
View equality-function.swift
func ==(lhs: Bread, rhs: Bread) -> Bool {
return lhs.rating == rhs.rating
}
b1 == b2 // true
func ==(lhs: Cheese, rhs: Cheese) -> Bool {
return lhs.rating == rhs.rating
}
c1 == c2 // true
c1 == c4 // false
cheeses.contains(c1) // still an error! not Equatable
@endavid
endavid / triple-equalities.swift
Created Feb 26, 2020
#swift triple equality examples for #medium
View triple-equalities.swift
struct Bread {
let rating : Int
}
class Cheese {
let rating : Int
init(rating: Int) {
self.rating = rating
}
}
var c1 = Cheese(rating: 0)
@endavid
endavid / enum-example.swift
Created Feb 25, 2020
#swift enum example for #medium
View enum-example.swift
enum SerializationError: Error {
case missing(String)
case invalid(String, Any)
}
// in some deserialization code
// ...
guard let vertexData = json["vertices"] as? [NSNumber] else {
throw SerializationError.missing("vertices")
}
@endavid
endavid / layers-to-psd.scm
Created Dec 18, 2019
Multilayered PSD from a list of images using #Gimp
View layers-to-psd.scm
;; Copy to ~/Library/Application\ Support/GIMP/2.10/scripts/
;; Ref. https://stackoverflow.com/a/24164916/1765629
;; Usage example:
;; gimp -i -b '(layers-to-psd (list "Background.jpg" "A.png" "B.png") "compo.psd")' -b '(gimp-quit 0)'
;;
(define (layers-to-psd image-paths psd-path)
(define (add-layers image image-paths)
(when (not (null? image-paths))
(let*
(
@endavid
endavid / s3move.sh
Last active Dec 3, 2019
#AWS script to move a range of files from an #S3 bucket
View s3move.sh
#!/bin/bash
# e.g.
# ./s3move.sh -d Images/all/ "15-36-58" "15-54-27" Captures/iPhone6/
DEBUG=
BUCKET=screenshots
PREFIX=Screenshot_
EXT=".png"
while getopts ":db:p:e:" opt; do
@endavid
endavid / multiple.cpp
Created Oct 8, 2019
Multiple inheritance -- how to rename a method of an implemented interface
View multiple.cpp
// g++ -Wall -o multiple multiple.cpp
#include <iostream>
// Based on this answer:
// https://stackoverflow.com/a/2005142
// I renamed methods for a serialization example.
// In this example, there's a "Unicorn" class that knows how to doA and doB,
// but user of the respective interfaces do not expect B to get serialized
// when they try to serialize A.
@endavid
endavid / scaleiMovieiPhoneXAppPreview.sh
Created Dec 29, 2017
Crop & scale iPhoneX video from iMovie for App Preview
View scaleiMovieiPhoneXAppPreview.sh
# Still undocumented here https://developer.apple.com/support/app-previews/
# or here https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/Properties.html
# but iPhoneX App Previews required size is 886x1920
# Unfortunately, iMovie seems to be dumb and creates a 750x1334 App Preview video from your iPhoneX capture
# -- and with black margins on the side
# So you need to crop & scale the video up before you submit it to iTunesConnect:
ffmpeg -i iPhoneX-iMovie.mp4 -filter:v "crop=616:1334:68:0" -c:a copy cropped.mp4
ffmpeg -i cropped.mp4 -vf scale=886:1920 -c:a copy iPhoneX-final.mp4
@endavid
endavid / my.bashrc
Last active Jul 28, 2017
Remove closed mercurial branches from git
View my.bashrc
# pass --simulate to avoid actual deletion
# pass --donotprompt to delete without prompting
function rmbHgClosed() {
option=$1
current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ "$current_branch" != "master" ]; then
echo "WARNING: You are on branch $current_branch, NOT master."
fi
echo "Fetching remote branches..."
remote_branches=$(git branch -r | grep -v '/master$' | grep -v "/$current_branch$")
@endavid
endavid / FontAtlas.swift
Created May 27, 2017
Signed Distance Field in Metal/Swift
View FontAtlas.swift
public class FontAtlas: NSObject, NSSecureCoding {
public static var supportsSecureCoding: Bool { get { return true } }
static let atlasSize: Int = 2048 // 4096 runs out of mem...
var glyphs : [GlyphDescriptor] = []
let parentFont: UIFont
var fontPointSize: CGFloat
let textureSize: Int
var textureData: [UInt8] = []