Skip to content

Instantly share code, notes, and snippets.


Shane Celis shanecelis

View GitHub Profile
shanecelis / RateLimiter.cs
Last active Jul 6, 2020
Limit rate of events based on time for Unity.
View RateLimiter.cs
/* Original code[1] Copyright (c) 2009 Antti Huima[2]
Modified code[3] Copyright (c) 2020 Shane Celis[4]
Licensed under the MIT License[5]
Original code posted to this question[6] and answer[7] on
This comment generated by code-cite[8].
shanecelis /
Last active Jul 3, 2020
Show a boxplot of lines of code per file on a logscale similar to a plot shown by Uncle Bob.
# boxplot-lines-of-code
# Written by Shane Celis
function usage() {
echo "usage: boxplot-lines-of-code [-h] [-e extension] [-p file.png] [-n name] <directory>" >&2;
echo " -e choose extension of files (\"cs\" by default)" >&2;
echo " -p output to png file instead of terminal" >&2;
echo " -n set plot label (present working directory by default)" >&2;
shanecelis /
Last active Dec 26, 2021
In Defense of Coupling (a programming talk sketch)

In Defense of Coupling

One of the truisms in software development is that decoupling is good.

Often the most useful patterns I’ve come across are ones that add a new decoupling tool into my toolbox. But coupling exists on a spectrum and tight coupling is not necessarily bad. Tight coupling is often benign and proper as you will see.

So I want to share the many ways that two statements of code may be variously coupled starting from the simplest, tightest coupling to a looser and looser coupling. And some Unity Engine specific decoupling will also be shown, but those can be ignored if you're not familiar with Unity.

Here are the many couplings of statements A and B.

shanecelis / GridShader.cs
Last active May 26, 2020
Example of how to make your shader accessible in C#.
View GridShader.cs
using UnityEngine;
/** This class communicates directly with the shader to draw grids. The shader's
properties look like this:
Shader "SDF/Grid"{
[KeywordEnum(Grid, Cross, Ticks)]
_GridKind ("Kind", Int) = 0
_InsideColor("Inside Color", Color) = (.5, 0, 0, 1)
shanecelis / Context.cs
Created Apr 20, 2020
Provides a thread-safe global or thread-local context to store a value
View Context.cs
// Java Genetic Algorithm Library.
// Copyright (c) 2017 Franz Wilhelmstötter
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// Unless required by applicable law or agreed to in writing, software
View .gitmessage
# feature: Add beta sequence.
# ^-----^ ^----------------^
# | |
# | +-> Summary in present tense sentence.
# |
# +-------> Type: binary, chore, doc, excise, feature, fix, hack, legal, refactor,
# style, or test.
shanecelis / spider-eyes.svg
Created Sep 26, 2019
Encode the left half of spider eye patterns in simple shapes. See tweet:
View spider-eyes.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
shanecelis / TextImporter.cs
Last active Aug 21, 2019
Import files with the extensions you specify as text assets in Unity 3D.
View TextImporter.cs
/* Original code[1] Copyright (c) 2019 Shane Celis[2]
Licensed under the MIT License[3]
using UnityEngine;
using UnityEditor.Experimental.AssetImporters;
View magit-status-parent.el
(defun magit-status-parent ()
"Open the magit status of a parent git repository. Useful for
dealing with submodules. Suggest binding to SPC g p for Spacemacs.
(spacemacs/set-leader-keys \"gp\" 'magit-status-parent)
(let* ((child-directory (magit-toplevel default-directory))
(parent-directory (and child-directory
(magit-toplevel (file-name-directory
View OrderedPhysicsRaycaster.cs
/* Original code[1] Copyright (c) 2019 Shane Celis[2]
Licensed under the MIT License[3]
This comment generated by code-cite[4].