Skip to content

Instantly share code, notes, and snippets.

View sdgluck's full-sized avatar

Sam Gluck sdgluck

View GitHub Profile
@Rich-Harris
Rich-Harris / footgun.md
Last active July 11, 2025 10:35
Top-level `await` is a footgun

Edit — February 2019

This gist had a far larger impact than I imagined it would, and apparently people are still finding it, so a quick update:

  • TC39 is currently moving forward with a slightly different version of TLA, referred to as 'variant B', in which a module with TLA doesn't block sibling execution. This vastly reduces the danger of parallelizable work happening in serial and thereby delaying startup, which was the concern that motivated me to write this gist
  • In the wild, we're seeing (async main(){...}()) as a substitute for TLA. This completely eliminates the blocking problem (yay!) but it's less powerful, and harder to statically analyse (boo). In other words the lack of TLA is causing real problems
  • Therefore, a version of TLA that solves the original issue is a valuable addition to the language, and I'm in full support of the current proposal, which you can read here.

I'll leave the rest of this document unedited, for archaeological

@postpostscript
postpostscript / replify
Last active November 7, 2024 02:47
replify - Create a REPL for any command
#!/bin/sh
command="${*}"
printf "Initialized REPL for `%s`\n" "$command"
printf "%s> " "$command"
read -r input
while [ "$input" != "" ];
do
eval "$command $input"
printf "%s> " "$command"
@robbiev
robbiev / priority_select.go
Last active November 6, 2024 15:55
select with priority in go
// SOLUTION 1
// see https://groups.google.com/forum/#!topic/golang-nuts/ChPxr_h8kUM
func maybe(b bool, c chan int) chan int {
if !b {
return nil
}
return c
}
select {
➜ pretty-format git:(perf) ✗ npm run perf
> [email protected] perf /Users/thejameskyle/Projects/pretty-format
> node perf/test.js
empty arguments:
prettyFormat() - 662ns - 0.066249041s total (100000 runs) - "Arguments []"
JSON.stringify() - 738ns - 0.073823264s total (100000 runs) - "{}"
util.inspect() - 55131ns - 5.513100926s total (100000 runs) - "{ [length]: 0,\n [callee]: \n { [Function: returnArguments]\n [length]: 0,\n [name]: 'returnArguments',\n [arguments]: null,\n [caller]: null,\n [prototype]: returnArguments { [constructor]: [Circular] } },\n [Symbol(Symbol.iterator)]: \n { [Function: values]\n [length]: 0,\n [name]: 'values',\n [prototype]: values { [constructor]: [Circular] } } }"
@jmar777
jmar777 / enum.js
Created June 21, 2016 04:36
Enum Implementation using ES6 Proxies and Symbols
function Enum(names) {
let members = Object.create(null);
members.tryParse = name => {
if (!members[name]) {
throw new Error(`Unable to parse '${name}' as an Enum member.`);
}
return members[name];
};
@devynspencer
devynspencer / ansible-github.yml
Last active May 10, 2025 16:47
Example playbook for cloning a private git repository with Ansible.
---
hosts: all
tasks:
- name: add github ssh key
copy: >
src=files/id_rsa.github
dest=/root/.ssh/id_rsa.github
owner=root
group=root
@WebReflection
WebReflection / object-mix.js
Last active March 27, 2021 18:38
"Real" Mixins with JavaScript Objects
let mix = (object) => ({
with: (...mixins) => mixins.reduce(
(c, mixin) => Object.create(
c, Object.getOwnPropertyDescriptors(mixin)
), object)
});
@jackcarter
jackcarter / slack_delete.py
Last active February 11, 2025 15:46
Delete Slack files older than 30 days. Rewrite of https://gist.github.com/jamescmartinez/909401b19c0f779fc9c1
import requests
import time
import json
token = ''
#Delete files older than this:
ts_to = int(time.time()) - 30 * 24 * 60 * 60
def list_files():
@paulirish
paulirish / what-forces-layout.md
Last active August 2, 2025 07:28
What forces layout/reflow. The comprehensive list.

What forces layout / reflow

All of the below properties or methods, when requested/called in JavaScript, will trigger the browser to synchronously calculate the style and layout*. This is also called reflow or layout thrashing, and is common performance bottleneck.

Generally, all APIs that synchronously provide layout metrics will trigger forced reflow / layout. Read on for additional cases and details.

Element APIs

Getting box metrics
  • elem.offsetLeft, elem.offsetTop, elem.offsetWidth, elem.offsetHeight, elem.offsetParent
@chadrien
chadrien / README.md
Last active April 22, 2025 15:52
Debug PHP in Docker with PHPStorm and Xdebug

Debug your PHP in Docker with Intellij/PHPStorm and Xdebug

  1. For your local dev, create a Dockerfile that is based on your production image and simply install xdebug into it. Exemple:
FROM php:5

RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \