If you've got tools that don't speak HTTPS, then using stunnel
in client mode you can wrap those requests in SSL on their way to S3. If you don't hijack the S3 DNS with iptables
, then you'll need to send those URLs using the domain name of your internal stunnel
proxy. This utility gives you one way to create those URLs. It's incomplete, and just to give you some ideas.
// By Heber Sheffield | |
public class func save(animatedImageSequence images: Array<CGImage>, withFrameDelay delay: CGFloat, numberOfLoops: Int, to url: URL) { | |
let fileProperties = [kCGImagePropertyPNGDictionary as String: [kCGImagePropertyAPNGLoopCount as String: numberOfLoops]] | |
let frameProperties = [kCGImagePropertyPNGDictionary as String: [kCGImagePropertyAPNGDelayTime as String: delay]] | |
guard let destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, images.count, nil) else { fatalError("couldn't create image destination for url: \(url)") } | |
CGImageDestinationSetProperties(destination, fileProperties) | |
for image in images { | |
CGImageDestinationAddImage(destination, image, frameProperties) | |
} |
OK. Everyone's got LOTS of questions and emotions around how to use hyper. I want to answer them, but first I want to walk you through a comparison exercise.
-
Take a look at the screenshot below of a typical Facebook post.
Think about the ways you could navigate or interact with this FB post, based only on what you see. Any kind of interaction you take either moves the view to another object, or it alters the data of this object.
// | |
// XCTestCase+Matchers.swift | |
// greatwork | |
// | |
// Created by Tim on 4/14/17. | |
// Copyright © 2017 OC Tanner Company, Inc. All rights reserved. | |
// | |
import Foundation | |
import XCTest | |
import Marshal |
#!/bin/sh | |
### | |
# Version: $Major.$Minor.$Commit | |
# | |
# How it works: | |
# 1. To roll minor number, tag each App Store release with a message. | |
# 2. To roll major number, create an additional tag on the last App Store | |
# release (e.g. "2.17.9") with new major number (e.g. "3"). | |
# 3. `Release` builds require a clean working directory. |
struct SafeArray<Element> { | |
private let multiReaderQueue: DispatchQueue | |
private var array = [Element]() | |
init() { | |
multiReaderQueue = DispatchQueue(label: "safeArray.internal", attributes: .concurrent) | |
} | |
var count: Int { return read { self.array.count } } |
#!/usr/bin/env ruby | |
# Generate a correct table of contents for Github markdown documents | |
# See https://gist.github.com/asabaylus/3071099#gistcomment-1593627 | |
doc = IO.readlines(ARGV[0]) | |
lines = doc.select { |l| l.start_with? "#" }.map do |l| | |
indent = l.chomp.gsub(/^# .*/, '* ').gsub(/^## .*/, ' * ').gsub(/^### .*/, ' * ') | |
link = l.gsub(/[^a-zA-Z\- ]/u,'').strip().downcase.gsub(' ','-') | |
indent + l.chomp.gsub(/^([\# ]*)(.*)$/, '[\2]') + "(##{link})" |
- Proposal: SE-XXXX
- Authors: Tim Shadel
- Review Manager: TBD
- Status: TBD
Add an optional syntax to declare all code related to a single case
in one spot. For complex enum
s, this makes it easier to ensure that all the pieces mesh coherently across that one case, and to review all logic associated with a single case
. This syntax is frequently more verbose in order to achieve a more coherent code structure, so its use will be most valuable in complex enums.
infix operator !! { associativity left precedence 160 } | |
@inline(__always) public func !!<T>(value: T?, @autoclosure die: () -> Void) -> T { | |
guard let value = value else { | |
die() | |
exit(-1) | |
} | |
return value | |
} | |
let test: String? = nil |