Skip to content

Instantly share code, notes, and snippets.

View chris-hatton's full-sized avatar
👦
Intrepid

Chris Hatton chris-hatton

👦
Intrepid
View GitHub Profile
@chris-hatton
chris-hatton / partial_build.gradle.kts
Last active January 25, 2022 22:15
Render a simple GraphViz graph of Kotlin Multiplatform sourceSet dependencies
// Where Gradle 'project' object is the current receiver...
val dependencies: Map<KotlinSourceSet, Set<KotlinSourceSet>> =
kotlinExtension.sourceSets.associateWith { it.dependsOn }
val renderedDependencies = dependencies
.filterKeys { !it.name.endsWith("Test") } // Exclude test sourceSets
.filterValues { it.isNotEmpty() } // Exclude sourceSets with no relationship (e.g. meta)
if (renderedDependencies.isEmpty()) return@injectWriteSourceSetDotFile
val allRenderedSourceSets =
@chris-hatton
chris-hatton / DataSizeFormatter.kt
Last active December 31, 2023 11:37
Human Readable Data Size Formatter for Kotlin Multiplatform (uses Common API only)
package datasizeformatter
import kotlin.math.abs
import kotlin.math.pow
import kotlin.math.roundToLong
/**
* Format a human-readable representation of data size, in binary base form.
* e.g. 1024 -> 1 KiB
* @param byteCount The number of bytes to represent in human-readable form. `Long.MIN_VALUE` is unsupported.
@chris-hatton
chris-hatton / AndroidCoroutines.kt
Last active March 1, 2017 09:15
Simple adaption of Kotlin Coroutines for Android
package somePackage
import android.content.Context
import android.os.Handler
import android.os.Looper
import kotlin.coroutines.experimental.*
var coroutineContext : CoroutineContext? = null
fun initCoroutines( androidContext: Context ) {
import UIKit
final class RubberDuckyController : UIViewController {
@IBOutlet weak var leftButton : UIButton!
@IBOutlet weak var rightButton : UIButton!
@IBOutlet weak var textLeftButtonUnderline : UIView!
@IBOutlet weak var shapeRightButtonUnderline : UIView!
@chris-hatton
chris-hatton / TreeView.swift
Last active September 20, 2016 15:52
Weekend Playground fun: TreeView
import UIKit
typealias Bough = (rotation:CGFloat, length: CGFloat, scale: CGFloat, hue: CGFloat)
final class TreeView : UIView {
private let limit = 10
private let boughs : [Bough] = [
(rotation: -25, length: 85, scale: 0.75, hue: 0.04),
(rotation: 30, length: 100, scale: 0.65, hue: 0.02)
@chris-hatton
chris-hatton / fatalErrorTest.swift
Last active September 15, 2016 22:46
Test of fatalError() backed by @NoReturn (Swift2) vs. Never (Swift3)
// This compiles in both Swift 2 and 3
func test1() -> Int {
fatalError()
}
// This compiled in Swift2 but no longer does in Swift 3
let test2 : () -> Int = {
fatalError()
}
@chris-hatton
chris-hatton / AuthModel.swift
Created September 9, 2016 02:55
Associated types and Generic constraints not playing nice in Swift 3.0
import UIKit
protocol HTTPRequest
{
associatedtype ResultType
func start( callback: (ResultType)->() )
}
@chris-hatton
chris-hatton / MonoBehaviourInvokeExtension.cs
Last active July 18, 2016 12:57
Adds a better co-routine + delegate based Invoke to MonoBehaviour
using System;
using System.Collections;
using UnityEngine;
/*
* Use by explicit 'this' e.g. this.Invoke( 3.0f, delegate { doSomething(); } );
*/
static class MonoBehaviourInvokeExtension
{
public static void Invoke( this MonoBehaviour monoBehaviour, float delay, Action action )
@chris-hatton
chris-hatton / SteamVR_Controller_Extension_GetPressedDPadButton.cs
Last active January 29, 2020 22:23
Fragment to get pressed D-Pad button from SteamVR controller in Unity
static class SteamVR_Controller_Extension
{
const float threshold = 0.3f;
/*
* You might expect that pressing one of the edges of the SteamVR controller touchpad could
* be detected with a call to device.GetPress( EVRButtonId.k_EButton_DPad_* ), but currently this always returns false.
* Not sure whether this is SteamVR's design intent, not yet implemented, or a bug.
* The expected behaviour can be achieved by detecting overall Touchpad press, with Touch-Axis comparison to an edge threshold.
*/
@chris-hatton
chris-hatton / HTTPStatus.swift
Last active May 17, 2016 04:43
Implementation of HTTP status codes as Swift enumerations, with descriptions
//
// HTTPStatus.swift
//
// Created by Chris Hatton on 17/05/2016.
//
// Transcribed from: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
//
import Foundation