Skip to content

Instantly share code, notes, and snippets.

View wilg's full-sized avatar
🚀
Doing new things

Wil Gieseler wilg

🚀
Doing new things
View GitHub Profile
@wilg
wilg / ShuffleExtensions.cs
Last active September 1, 2022 22:03
Unity serializable list shuffling
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
#nullable enable
public static class ShuffleExtensions {
// Returns a random element from the list.
public static T? RandomElement<T>(this IList<T> list) {
if (list.Count == 0) {
@wilg
wilg / tasks.swift
Last active November 9, 2021 23:01
extension Task where Success == Void, Failure == Error {
@discardableResult
/// A task that performs a non-throwing `operation`.
static func strict<S>(priority: TaskPriority? = nil, operation: @escaping @Sendable () async -> S) -> Self {
Task(priority: priority, operation: {
_ = await operation()
})
}
}
@wilg
wilg / parallel_map.swift
Last active February 9, 2024 20:21 — forked from DougGregor/parallel_map.swift
Swift async/await implementation of a parallel map
import Foundation
// https://gist.github.com/DougGregor/92a2e4f6e11f6d733fb5065e9d1c880f
extension Collection {
func parallelMap<T>(
parallelism requestedParallelism: Int? = nil,
_ transform: @escaping (Element) async throws -> T
) async rethrows -> [T] {
let defaultParallelism = 2
let parallelism = requestedParallelism ?? defaultParallelism
@wilg
wilg / asyncMap.swift
Last active April 17, 2020 02:04
A helper function to make error propagation for asynchronous operations easier in Swift.
/// `asyncMap` helps you with error propagation for asynchronous tasks.
/// - Parameters:
/// - onFailure: A closure that will be called in an error condition if in an error state.
/// - onSuccess: A closure that will be called with your success value if succesful.
/// - Returns: A closure that will call `onError` if it is passed a failing result, and that will execute `onSuccess` if it is successful.
func asyncMap<Success, NeverSuccess, Error: Swift.Error>(
_ onFailure: @escaping ((Result<NeverSuccess, Error>) -> Void),
_ onSuccess: @escaping (Success) -> Void
) -> ((Result<Success, Error>) -> Void) {
return { result in
@wilg
wilg / example.eson.js
Last active September 10, 2019 01:31
ESON (or: yet another stab at slightly improving JSON)
// ESON is like JSON.
// ESON files should use the `.eson` file extension and the `application/eson` MIME type.
// This is meant to be as close to JSON as possible (and backwards compatible), but having learned a few lessons.
{
// It's backwards compatible with JSON.
"key": "value",
// Obviously, the big feature is it supports comments:
@wilg
wilg / index.js
Last active October 31, 2018 19:08 — forked from tommoor/index.js
requirebin sketch
const React = require('react');
const ReactDOM = require ('react-dom');
const Render = require('react-emoji-render');
// try swapping the commented lines below and hit "Run Code" in the top right
// to see another rendering style!
const Emoji = Render.Emojione;
//const Emoji = Render.Twemoji;
@wilg
wilg / omnisharp.json
Created July 26, 2018 22:58
C# for Unity OmniSharp and VS Code Formatting Settings
{
"FormattingOptions": {
"NewLine": "\n",
"IndentationSize": 4,
"NewLinesForBracesInMethods": false,
"NewLinesForBracesInAccessors": false,
"NewLinesForBracesInAnonymousMethods": false,
"NewLinesForBracesInAnonymousTypes": false,
"NewLinesForBracesInControlBlocks": false,
"NewLinesForBracesInLambdaExpressionBody": false,
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
[RequireComponent (typeof (AudioSource))]
public class AutoLipSyncBlendshape : MonoBehaviour
{
public SkinnedMeshRenderer skinnedMeshRenderer;
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@wilg
wilg / gist:b9cdd0274f24c743ad52
Created July 19, 2014 19:39
Embed an NSViewController in another view with auto layout
- (void)embedViewController:(NSViewController *)controller inView:(NSView *)container {
[container addSubview:controller.view];
controller.view.translatesAutoresizingMaskIntoConstraints = NO;
controller.view.frame = container.bounds;
[container addConstraint:[NSLayoutConstraint constraintWithItem:container
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:controller.view
attribute:NSLayoutAttributeTop
multiplier:1.0