Skip to content

Instantly share code, notes, and snippets.

View thomastay's full-sized avatar

Thomas Tay thomastay

View GitHub Profile
@thomastay
thomastay / Update-KeePassRPC.ps1
Last active August 6, 2020 03:25
Retrives the latest download of KeePassRPC from Github, and loads it into the KeePassRPC folder in the C:\ drive
function promptYesNo ($title, $question) {
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
$decision -eq 0
}
function Convert-GithubVersion($githubVersionString) {
[System.Version]$githubVersionString.Substring(1)
}
@thomastay
thomastay / equivalence.js
Last active October 8, 2020 00:12
Promise <-> Async await equivalence
"use strict"
// The following are equivalent (functionally)
// Async await
async function simple() {
await setTimeout(() => console.log("hello, world!"), 1000);
}
// Promises
function simple_promise() {
@thomastay
thomastay / easy-to-forget-memory-leaks.js
Last active October 19, 2020 17:09
Easy to forget memory leaks
// Case 1: accidentally capturing an outer object in a lambda
class Foo {
constructor(arr) {
this.sayHellos = [];
for (const languageData of arr) {
this.sayHellos.push(() => {
console.log(languageData.hello); // oops, languageData is captured, even though it is not needed after this call
});
};
}
@thomastay
thomastay / ziglang-master.json
Last active July 16, 2021 18:43
A scoop app manifest to get the nightly version of Zig
{
"version": "0.8.0-dev.1479-aa1c78056",
"description": "General-purpose programming language designed for robustness, optimality, and maintainability.",
"homepage": "https://ziglang.org/",
"license": "MIT",
"suggest": {
"vcredist": "extras/vcredist2019"
},
"architecture": {
"64bit": {
@thomastay
thomastay / esbuild.js
Last active November 14, 2021 01:27
Esbuild for Node, excluding node_modules starter pack
const chalk = require("chalk");
// Credit to evanw himself: https://github.com/evanw/esbuild/issues/619
const makeAllPackagesExternalPlugin = {
name: "make-all-packages-external",
setup(build) {
const filter = /^[^.\/]|^\.[^.\/]|^\.\.[^\/]/; // Must not start with "/" or "./" or "../"
build.onResolve({ filter }, args => ({
path: args.path,
external: true,