Skip to content

Instantly share code, notes, and snippets.

@michaelficarra
michaelficarra / pascalsTriangleRow
Created February 23, 2024 00:16
generate a row of Pascal's triangle in linear time and constant space
function* pascalsTriangleRow(row) {
let prev = 1;
for(let i = 1; i <= row; ++i) {
yield prev;
prev = (prev * (row - (i - 1))) / i;
}
yield 1;
}
Array.from(pascalsTriangleRow(19));
@michaelficarra
michaelficarra / append-template-tag.js
Created May 30, 2016 14:29
chainable template tag for joining a bunch of strings over many lines
function append(separator) {
return typeof separator === "string" ? appender(separator, "") : appender("", "").apply(this, arguments);
}
function appender(separator, s) {
return function tag(literalParts, ...computedParts) {
s += literalParts[0];
for (let i = 1; i < literalParts.length; ++i) {
s += computedParts[i - 1] + literalParts[i];
}
@michaelficarra
michaelficarra / etsy-scrape.rb
Created September 13, 2011 05:31
download all the listing images from a given etsy shop
require 'etsy'
Etsy.api_key = '<api-key>'
shop = Etsy::Shop.find '<shop-name>'
out_dir = '<output-directory>'
Etsy.environment = :production
Dir.mkdir out_dir unless File.exists? out_dir
listings = []
@michaelficarra
michaelficarra / once.js
Last active August 4, 2019 07:43
a loose approximation of a potential Function.prototype.once
Function.prototype.once = function () {
let fn = this;
let called = false;
return function() {
if (!called) {
called = true;
return fn.apply(this, arguments);
}
};
};
@michaelficarra
michaelficarra / LICENSE
Created September 3, 2011 18:47
bootstrapping a shim library with safe calls
Copyright (c) 2011, Michael Ficarra
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
@michaelficarra
michaelficarra / index.js
Created November 15, 2018 22:16
capabilities
const safeApply = Date.call.bind(Date.apply);
const randomName = () => Math.random().toString(36).slice(2).toLowerCase();
class RevokedCapabilityException extends Error {}
class Capability {
constructor(behaviour, { name = randomName() } = {}) {
this.behaviour = behaviour;
this.name = Object.freeze([].concat(name));
}
@michaelficarra
michaelficarra / phantom-rows.purs
Created February 25, 2015 17:48
phantom types using rows in PureScript; needs DataKinds to achieve full awesome
module Main where
--data Language = English | Spanish
--data Censored = Censored | NotCensored
--data Encoding = Plain | EncodingA | EncodingB
data English
data Spanish
data Censored
@michaelficarra
michaelficarra / SetUsingHashCode.js
Last active June 10, 2017 17:35
Set using hashCode via ECMAScript interfaces proposal
// https://github.com/michaelficarra/ecmascript-interfaces-proposal
interface HasHashCode {
hashCode;
}
class SetUsingHashCode extends Set {
constructor(iterable) {
super();
this.#map = new Map;
for (let x of iterable) {
diff --git c/purescript.cabal i/purescript.cabal
index 4f4fcabd..699e8440 100644
--- c/purescript.cabal
+++ i/purescript.cabal
@@ -231,6 +231,7 @@ library
Language.PureScript.Sugar.TypeClasses
Language.PureScript.Sugar.TypeClasses.Deriving
Language.PureScript.Sugar.TypeDeclarations
+ Language.PureScript.Terms
Language.PureScript.Traversals
commit e6284b9bd6977ca282bdf13d13fab4d8bf6be71b
Normative: Add [?Yield] to PropertyName in AssignmentProperty
commit f0ef98ae9ecdfd1ed1e14721e795f6188a3107ee
Normative: Fix yield * semantics when calling .throw
commit 6ba35eb8fb9aad699efdd1766c52bc9f6401d039
Normative: update Annex B regexp grammar
commit d96e60a99a40fab2de0df329b3e5445ac27b8a8e
Normative: Remove [[Enumerate]] and associated reflective capabilities
commit 24dad16327b7cbbdf67805e45e58c54abe558f63
Normative: Require Unicode 8.0.0