Skip to content

Instantly share code, notes, and snippets.

Jeremy Kahn jeremyckahn

Block or report user

Report or block jeremyckahn

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View trie-angles.js
const points = ["v1x", "v1y", "v1z", "v2x", "v2y", "v2z", "v3x", "v3y", "v3z"];
class Trie {
children = {};
insert(triangle, order = 0) {
if (order === points.length) {
return;
}
View triangles.json
[{"v1":{"x":0.360463,"y":0,"z":2.525},"v2":{"x":0,"y":0,"z":2.98309},"v3":{"x":0.360463,"y":0.2,"z":2.525}},{"v1":{"x":0,"y":0,"z":2.98309},"v2":{"x":0,"y":0.2,"z":2.98309},"v3":{"x":0.360463,"y":0.2,"z":2.525}},{"v1":{"x":0,"y":0,"z":2.98309},"v2":{"x":0.128412,"y":0,"z":3},"v3":{"x":0,"y":0.2,"z":2.98309}},{"v1":{"x":0.128412,"y":0,"z":3},"v2":{"x":0.128412,"y":0.2,"z":3},"v3":{"x":0,"y":0.2,"z":2.98309}},{"v1":{"x":0.516641,"y":0,"z":2.94889},"v2":{"x":0.516641,"y":0.2,"z":2.94889},"v3":{"x":0.128412,"y":0,"z":3}},{"v1":{"x":0.128412,"y":0,"z":3},"v2":{"x":0.516641,"y":0.2,"z":2.94889},"v3":{"x":0.128412,"y":0.2,"z":3}},{"v1":{"x":0.878412,"y":0,"z":2.79904},"v2":{"x":0.878412,"y":0.2,"z":2.79904},"v3":{"x":0.516641,"y":0,"z":2.94889}},{"v1":{"x":0.516641,"y":0,"z":2.94889},"v2":{"x":0.878412,"y":0.2,"z":2.79904},"v3":{"x":0.516641,"y":0.2,"z":2.94889}},{"v1":{"x":1.18907,"y":0,"z":2.56066},"v2":{"x":1.18907,"y":0.2,"z":2.56066},"v3":{"x":0.878412,"y":0,"z":2.79904}},{"v1":{"x":0.878412,"y":0,"z":2.79904},
@jeremyckahn
jeremyckahn / Trie.js
Last active Oct 4, 2019 — forked from deadlocked247/Trie.js
Trie implementation in ES6, good for string autocomplete
View Trie.js
/* Class representing a Trie data structure */
export default class Trie {
/**
* Creates a Trie
* @return {Object} Trie
*/
constructor() {
this.words = 0;
this.prefixes = 0;
@jeremyckahn
jeremyckahn / farmhand-overview.md
Last active Sep 23, 2019
Farmhand and the case for open source games
View farmhand-overview.md

Farmhand and the case for open source games

For as long as I can remember, I've always hide a hobby side project. For a long time I focused on open source animation tools, but more recently I've shifted my focus back to my true passion: Game development.

I've taken what I've learned as an open source web developer and applied it to an idea that I've been interested in for years.


@jeremyckahn
jeremyckahn / inheritance.js
Last active Aug 23, 2019
Refresher on prototypal inheritance
View inheritance.js
function Parent () { console.log('parent') }
Parent.prototype.parentMethod = function () {
console.log('this is a method on the parent object')
}
function Child () { console.log('child') }
Child.prototype = new Parent()
var child = new Child()
child.parentMethod()
@jeremyckahn
jeremyckahn / inheritance.js
Created Aug 23, 2019
Refresher on prototypal inheritance
View inheritance.js
function Parent () { console.log('parent') }
Parent.prototype.parentMethod = function () { console.log('this is a method on the parent object') }
function Child () { console.log('child') }
Child.prototype = new Parent()
var child = new Child()
child.parentMethod()
@jeremyckahn
jeremyckahn / getChangedProperties.js
Created Apr 24, 2019
Compute keys that are different between two JS objects
View getChangedProperties.js
/**
* @param {Object} oldData
* @param {Object} newData
* @returns {Array.<string>} A list of key names that are different between
* oldData and newData.
*/
export const getChangedProperties = (oldData, newData) =>
Object.keys(oldData).reduce(
(acc, key) => (oldData[key] !== newData[key] ? [...acc, key] : acc),
[]
View AutoHotKey.ahk
CapsLock::Esc
#F20::^z
@jeremyckahn
jeremyckahn / react-components.md
Last active Jul 5, 2018
Getting weird with functions
View react-components.md

A Reductive Approach to React Components

What follows is the result of Mad Science™ in React development, and is either a great idea or a terrible one. The jury is still out, and I will leave it up to the community to decide whether this is pragmatic or heresy.

I am a huge fan of React. I love the functional approach to app development and the parallels I see between the functional reactive programming model and game design. The established best practices largely make sense to me, particularly the parts about lifting state up to higher level-components. Anecdotally, I have found that lifting state all the way up to the highest level in a component hierarchy yields some really valuable benefits (which I have covered [elsewhere](https://gist.github.com/jeremyckahn/091aff8d1d62f661828c347750ae7644#2-all-

@jeremyckahn
jeremyckahn / ez-di-in-es6.md
Created May 2, 2018
Language-level dependency injection with ES6
View ez-di-in-es6.md

Language-level dependency injection with ES6

What follows is a pretty shameless abuse of one of my favorite ES6 features, default parameters. They're a simple idea that other languages have enjoyed for decades, and I am all too happy to see JavaScript join the party.

const logValue = (object = {}) => {
  console.log(object);
};

logValue();  // logs: {}
You can’t perform that action at this time.