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 | |
} | |
} | |
/// ... |
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 |
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) |
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") | |
} |
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* | |
( |
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 |
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. |
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 |
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$") |
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] = [] | |
NewerOlder