Skip to content

Instantly share code, notes, and snippets.

@markst
markst / ChoasLinesShader.metal
Created January 11, 2024 20:58 — forked from realvjy/ChoasLinesShader.metal
Choas Lines - Metal Shader
// Lines
float hash( float n ) {
return fract(sin(n)*753.5453123);
}
// Slight modification of iq's noise function.
float noise(vector_float2 x )
{
vector_float2 p = floor(x);
vector_float2 f = fract(x);
@markst
markst / PlayerView.swift
Created October 25, 2023 23:04
`UIViewRepresentable` wrapper for `AVPlayer`
import Foundation
import UIKit
import AVKit
import SwiftUI
import Combine
class PlayerUIView: UIView {
// MARK: Class Property
override static var layerClass: AnyClass {
return AVPlayerLayer.self
@markst
markst / GCKRequestSubscription.swift
Created July 17, 2023 00:37
Wrap `GCKRequestDelegate` in a Combine `Subscriber`
import Combine
import GoogleCast
struct GCKRequestPublisher: Publisher {
typealias Output = Void
typealias Failure = Error
let request: GCKRequest
init(request: GCKRequest) {
import BrightFutures
extension Resource {
func addLinkData<T: Resource>(resources: [T]) -> Future<Self, SpineError> {
let url = SpineSingleton.router.baseURL.appendingPathComponent("/\(self.resourceType)/\(self.id!)/relationships/\(resources.first!.resourceType)")
let payload = try! SpineSingleton.serializer.serializeLinkData(resources)
return performRequest(method: "POST", url: url, payload: payload)
}
class MyOperation: Operation {
open func execute() {
let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "MyInMemoryRealm"))
// Do some stuff
networkClient.request(method: method, url: url, payload: payload) { statusCode, responseData, networkError in
// Now do some stuff on original operation threafd
var skillIds: [String]
skillIds = selectedJobCategories.reduce([], { (results, jobCategory) -> [String] in
var results = results
results.append(contentsOf: jobCategory.skills!.linkage!.reduce([], { (results, resourceIdentifier) -> [String] in
var results = results
results.append(resourceIdentifier.id)
return results
}))
extension UIResponder {
func responder(for selector: Selector) -> UIResponder? {
if self.responds(to: selector) {
return self
}
if let next = self.next {
return next.responder(for: selector)
}
NSDictionary * params = self.paramsBlock != nil ? self.paramsBlock((index < self.objects.count) ? index : self.objects.count-1) : nil;
if (params != nil) [mutableParams addEntriesFromDictionary:params];