Skip to content

Instantly share code, notes, and snippets.

View devxoul's full-sized avatar
👨‍💻
Always coding

Suyeol Jeon devxoul

👨‍💻
Always coding
View GitHub Profile
@devxoul
devxoul / nonnull_connection.py
Created December 18, 2020 07:18
Graphene NonNullConnection
class NonNullConnection(graphene.relay.Connection):
class Meta:
abstract = True
@classmethod
def __init_subclass_with_meta__(cls, node=None, **options):
if node is not None and not isinstance(node, graphene.NonNull):
node = graphene.NonNull(node)
super(NonNullConnection, cls).__init_subclass_with_meta__(
@devxoul
devxoul / UIBezierPath+CatmullRomInterpolate.swift
Created November 22, 2020 08:25
Spline Interpolation In Swift
extension UIBezierPath {
/// https://github.com/jnfisher/ios-curve-interpolation/blob/master/Curve%20Interpolation/UIBezierPath%2BInterpolation.m
func catmullRomInterpolate(with points: [CGPoint], alpha: CGFloat = 0.3) {
guard points.count >= 4 else { return self.hermiteInterpolate(with: points, alpha: alpha) }
let startIndex = 1
let endIndex = points.count - 2
for currentIndex in 1..<endIndex {
let prevIndex = currentIndex - 1
import UIKit
import PlaygroundSupport
let width: CGFloat = 200
let height: CGFloat = 100
let spacing: CGFloat = 10
let numberOfViews: Int = 5
let canvas = UIView(frame: CGRect(
x: 0,
import Foundation
public enum Swinject {
public final class Container {
}
}
protocol Assembly {
func assemble(to container: Swinject.Container)
}
import io
import requests
import subprocess
import zipfile
FIREBASE_VERSION = '6.29.0'
def main():
json_urls = [
"https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json",
@devxoul
devxoul / NSStatusBarStub.swift
Created May 8, 2020 20:17
NSStatusBarStub Draft
final class NSStatusBarStub: NSStatusBar {
override func statusItem(withLength length: CGFloat) -> NSStatusItem {
let alloc = NSStatusItem.perform(NSSelectorFromString("alloc"))!.takeRetainedValue() as! NSStatusItem
let selector = NSSelectorFromString("_initInStatusBar:withLength:withPriority:hidden:")
let imp = alloc.method(for: selector)
typealias ObjcInitBlock = @convention(c) (NSStatusItem, Selector, NSStatusBar, CGFloat, Int, Bool) -> NSStatusItem
let initializer = unsafeBitCast(imp, to: ObjcInitBlock.self)
let statusItem = initializer(alloc, selector, self, length, 1, true) // it won't work the last parameter("hidden") is set to `false`
@devxoul
devxoul / TypedContainer.swift
Last active May 6, 2020 07:06
Conceptual strong-typed DI container
protocol ContainerProtocol {
associatedtype Service
associatedtype Nested: ContainerProtocol
var service: Service { get }
var nestedContainer: () -> Nested { get }
}
struct TypedContainer<Service, Nested: ContainerProtocol>: ContainerProtocol {
let service: Service
@devxoul
devxoul / distinctUntilChanged.swift
Last active April 16, 2020 19:43
RxSwift Observable<(T, T)>.distinctUntilChanged() returns wrong result
let source = Observable<(Int, Int)>.from([
(0, 1),
(2, 3),
(4, 5),
])
// Doesn't work as expected
// A -> (0, 1)
source
.distinctUntilChanged(==)
@devxoul
devxoul / 6.19.0
Last active April 7, 2020 09:19
Romefile for Firebase
repositoryMap:
- FirebaseAnalyticsBinary:
- name: FIRAnalyticsConnector
- name: Firebase
- name: FirebaseAnalytics
- name: FirebaseCore
- name: FirebaseCoreDiagnostics
- name: FirebaseInstallations
- name: GoogleAppMeasurement
- name: GoogleDataTransport
@devxoul
devxoul / Peripheral.swift
Last active January 16, 2020 01:13
Estimator: BLE를 사용한 Planning Poker 애플리케이션
import CoreBluetooth
let serviceUUID = CBUUID(string: "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
let service = CBMutableService(type: serviceUUID, primary: true)
/// 1. `CBPeripheralManager`를 초기화하고,
self.peripheral = CBPeripheralManager(delegate: self, queue: nil)
/// 2. 사용가능한 상태가 되면 특정 UUID를 가진 서비스를 추가한 뒤에
func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager) {