Skip to content

Instantly share code, notes, and snippets.

@Revolucent
Revolucent / sprintf.psql
Last active June 5, 2023 04:51
sprintf function for PostgreSQL with indexed arguments
-- Inspired by https://wiki.postgresql.org/wiki/Sprintf,
-- but really, pretty different.
CREATE FUNCTION sprintf(_format TEXT, VARIADIC _args ANYARRAY) RETURNS TEXT
LANGUAGE PLPGSQL
STRICT IMMUTABLE
AS $$
DECLARE _f INT DEFAULT 0; -- Index of current character in format string
DECLARE _c TEXT; -- Current character
DECLARE _match TEXT;
DECLARE _matches TEXT[];
@Revolucent
Revolucent / DockerSSH.md
Last active February 19, 2023 16:09
Using SSH inside a Dockerfile

SSH in a Dockerfile

Prerequisites

  • You must have BuildKit enabled in Docker.
  • You must have ~/.ssh/config set up with a proper alias for the server you want to access via SSH.
  • When referencing external resources via SSH, always use a proper domain name, never an SSH alias. In other words, use something like git@github.com:foo/bar.
  • Use the latest Dockerfile syntax using # syntax=docker/dockerfile:1.x at the top.
@Revolucent
Revolucent / UIView+Rx.swift
Created October 5, 2018 02:53
isFirstResponder observable with RxSwift
import RxCocoa
import RxSwift
import UIKit
extension Reactive where Base: UIView {
var isFirstResponder: Observable<Bool> {
return Observable
.merge(
methodInvoked(#selector(UIView.becomeFirstResponder)),
methodInvoked(#selector(UIView.resignFirstResponder))
@Revolucent
Revolucent / Json.kt
Created January 31, 2022 17:22
Some combinators which implement a DSL for querying and deserializing Json from Strings. Extend or alter to your taste.
typealias Deserializer<I, O> = (I) -> O?
typealias JsonDeserializer<I, O> = (Json) -> Deserializer<I, O>
typealias JsonElementDeserializer = JsonDeserializer<JsonElement, JsonElement>
private fun <I, O> const(deserializer: Deserializer<I, O>): JsonDeserializer<I, O> = {
deserializer
}
infix fun <A, B, C> JsonDeserializer<A, B>.j(
next: JsonDeserializer<B, C>
@Revolucent
Revolucent / KeyboardAvoidingViewController.swift
Last active June 8, 2020 16:54
Modern implementation of KeyboardAvoidingViewController
import UIKit
open class KeyboardAvoidingViewController: UIViewController {
private var observers: [NSObjectProtocol] = []
open override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let nc = NotificationCenter.default
@Revolucent
Revolucent / Api.hs
Last active September 21, 2019 15:08
A simple wrapper around Network.HTTP.Req to talk to an API.
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TupleSections #-}
@Revolucent
Revolucent / Resolver.swift
Created January 8, 2016 07:27
Poor Man's Dependency Resolver for Swift
enum CreationPolicy {
case Single
case Shared
}
class Resolver {
private struct Instance {
private let policy: CreationPolicy
private let create: () -> Any
private var instance: Any?
@Revolucent
Revolucent / DependencyResolver.swift
Last active July 9, 2019 22:49
DependencyResolver - a simple, elegant, flexible dependency resolver for Swift 2.x
//
// DependencyResolver.swift
//
// Created by Gregory Higley on 2/15/16.
// Copyright © 2016 Revolucent LLC.
//
// This file is released under the MIT license.
// https://gist.github.com/Revolucent/25daa75bda879dd20bb2
//
@Revolucent
Revolucent / RxReSwift.swift
Created September 24, 2018 07:23
Observe ReSwift subscriptions using RxSwift
import Foundation
import ReSwift
import RxSwift
private class StoreObserver<SelectedState>: StoreSubscriber {
private let onNext: (SelectedState) -> Void
init(onNext: @escaping (SelectedState) -> Void) {
self.onNext = onNext
}
func newState(state: SelectedState) {
@Revolucent
Revolucent / MapDispatchToProps.js
Created January 5, 2019 20:56
mapDispatchToProps
import parse from 'obj-parse'
/*
In its simplest usage, mapStateToProps('foo', 'bar')
maps the state keys 'foo' and 'bar' to keys of the same
name in the props.
To alias, use an object literal: mapStateToProps('foo', {baz: 'bar.buzz'}).
In this case, we're mapping state that's more deeply nested to the 'baz' prop.
The parse method of obj-parse takes care of this for us.